From f7b7d24adbe01734c1f60321964efa05ead7b505 Mon Sep 17 00:00:00 2001 From: Nishant Chaprana Date: Tue, 4 Aug 2020 10:45:35 +0530 Subject: [PATCH] Add tv profile specific code Change-Id: Iefb2bcec84cb437ab969389cf3616cd5e51b56df Signed-off-by: Nishant Chaprana --- packaging/capi-network-tethering.spec | 7 +- src/tethering.c | 172 +++++++++++++++++++++++++++++++--- tests/mocks/tethering_gdbus.c | 4 + 3 files changed, 171 insertions(+), 12 deletions(-) diff --git a/packaging/capi-network-tethering.spec b/packaging/capi-network-tethering.spec index 43f2714..f8b4f84 100644 --- a/packaging/capi-network-tethering.spec +++ b/packaging/capi-network-tethering.spec @@ -1,6 +1,6 @@ Name: capi-network-tethering Summary: Tethering Framework -Version: 1.1.1 +Version: 1.1.2 Release: 1 Group: System/Network License: Apache-2.0 @@ -58,6 +58,11 @@ export FFLAGS+=" -fprofile-arcs -ftest-coverage" export LDFLAGS+=" -lgcov" %endif +%if "%{?tizen_profile_name}" == "tv" +export CFLAGS+=" -DTIZEN_TV_EXT" +export CXXFLAGS+=" -DTIZEN_TV_EXT" +%endif + %cmake -DBUILD_GTESTS=%{?gcov:1}%{!?gcov:0} \ . make %{?_smp_mflags} diff --git a/src/tethering.c b/src/tethering.c index d79c056..5df933d 100755 --- a/src/tethering.c +++ b/src/tethering.c @@ -37,6 +37,14 @@ #define MAC_ADDR_LEN 18 #define MAX_BUF_SIZE 80 +#ifdef TIZEN_TV_EXT +#define VCONFKEY_WIFI_TXPOWER "db/dnet/txpower" /**< VCONFKEY for TX Power */ +#define VCONFKEY_WIFI_CHANNEL "db/dnet/channel" /**< VCONFKEY for Channel */ +#define VCONFKEY_WIFI_SSID "db/dnet/ssid" /**< VCONFKEY for ssid */ + +#define DBUS_DEFAULT_REPLY_TIMEOUT 15000 +#endif /* TIZEN_TV_EXT */ + #define IPTABLES "/usr/sbin/iptables" #define TABLE_NAT "nat" #define TETH_NAT_PRE "teth_nat_pre" @@ -1244,20 +1252,18 @@ static int __get_common_ssid(char *ssid, unsigned int size) return TETHERING_ERROR_INVALID_PARAMETER; } - char *ptr = NULL; - char *ptr_tmp = NULL; +#ifdef TIZEN_TV_EXT + if (__get_ssid_from_vconf(VCONFKEY_WIFI_SSID, ssid, size)) + return TETHERING_ERROR_NONE; + else + ERR("vconf key get failed for ssid or invalid ssid is found"); +#endif /* TIZEN_TV_EXT */ - ptr = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR); - if (ptr == NULL) { + if (__get_ssid_from_vconf(VCONFKEY_SETAPPL_DEVICE_NAME_STR, + ssid, size) == false) { ERR("vconf_get_str is failed and set default ssid"); g_strlcpy(ssid, TETHERING_DEFAULT_SSID, size); - } else - g_strlcpy(ssid, ptr, size); - - free(ptr); - - if (!g_utf8_validate(ssid, -1, (const char **)&ptr_tmp)) - *ptr_tmp = '\0'; + } return TETHERING_ERROR_NONE; } @@ -1387,6 +1393,32 @@ static bool __check_precondition(tethering_type_e type) return FALSE; } +#ifdef TIZEN_TV_EXT +static void __set_vconf_values_for_tv(__tethering_h *tethering) +{ + int ret, channel, txpower; + __tethering_h *th = tethering; + + if (th == NULL) + return; + + ret = vconf_get_int(VCONFKEY_WIFI_CHANNEL, &channel); + if (ret < 0) { + ERR("vconf key get failed for channel !!"); + channel = TETHERING_WIFI_CHANNEL; + } + + ret = vconf_get_int(VCONFKEY_WIFI_TXPOWER, &txpower); + if (ret < 0) { + ERR("vconf key get failed for txpower !!"); + txpower = TETHERING_WIFI_MAX_TXPOWER; + } + + th->channel = channel; + th->txpower = txpower; +} +#endif /* TIZEN_TV_EXT */ + /** * @internal * @brief Creates the handle of tethering. @@ -1439,6 +1471,9 @@ API int tethering_create(tethering_h *tethering) return TETHERING_ERROR_OPERATION_FAILED; } +#ifdef TIZEN_TV_EXT + __set_vconf_values_for_tv(th); +#endif /* TIZEN_TV_EXT */ SINFO("ssid: %s, key: %s, channel: %d, mode: %d, txpower: %d, security: %d max_device: %d\n", ssid, th->passphrase, th->channel, th->mode_type, th->txpower, th->sec_type, th->wifi_max_connected); @@ -1551,7 +1586,11 @@ API int tethering_enable(tethering_h tethering, tethering_type_e type) GDBusProxy *proxy = th->client_bus_proxy; GDBusConnection *connection = th->client_bus; +#ifdef TIZEN_TV_EXT + g_dbus_proxy_set_default_timeout(proxy, DBUS_DEFAULT_REPLY_TIMEOUT); +#else /* TIZEN_TV_EXT */ g_dbus_proxy_set_default_timeout(proxy, DBUS_TIMEOUT_INFINITE); +#endif /* TIZEN_TV_EXT */ if (__check_precondition(type) == FALSE) { INFO("-\n"); @@ -1864,6 +1903,8 @@ API int tethering_disable(tethering_h tethering, tethering_type_e type) g_dbus_connection_signal_unsubscribe(connection, sigs[E_SIGNAL_WIFI_TETHER_OFF].sig_id); + SINFO("Disable Wi-Fi Tethering !"); + g_dbus_proxy_call(proxy, "disable_wifi_tethering", g_variant_new("(i)", TETHERING_ADDRESS_FAMILY_IPV4), G_DBUS_CALL_FLAGS_NONE, -1, th->cancellable, @@ -2964,6 +3005,35 @@ API int tethering_wifi_set_ssid(tethering_h tethering, const char *ssid) _retvm_if(p_ssid == NULL, TETHERING_ERROR_OUT_OF_MEMORY, "strdup is failed\n"); +#ifdef TIZEN_TV_EXT + GDBusProxy *proxy = th->client_bus_proxy; + GVariant *parameters; + GError *error = NULL; + tethering_error_e ret = TETHERING_ERROR_NONE; + + parameters = g_dbus_proxy_call_sync(proxy, "set_wifi_tethering_ssid", + g_variant_new("(s)", ssid), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); + + if (error) { + ERR("g_dbus_proxy_call_sync failed because %s\n", error->message); + + if (error->code == G_DBUS_ERROR_ACCESS_DENIED) + ret = TETHERING_ERROR_PERMISSION_DENIED; + else + ret = TETHERING_ERROR_OPERATION_FAILED; + + g_error_free(error); + return ret; + } + + if (parameters != NULL) { + g_variant_get(parameters, "(u)", &ret); + g_variant_unref(parameters); + } + + SINFO("set tethering ssid : %s", ssid); +#endif /* TIZEN_TV_EXT */ + if (th->ssid) free(th->ssid); th->ssid = p_ssid; @@ -3000,6 +3070,15 @@ API int tethering_wifi_get_ssid(tethering_h tethering, char **ssid) __tethering_h *th = (__tethering_h *)tethering; char val[TETHERING_WIFI_SSID_MAX_LEN + 1] = {0, }; +#ifdef TIZEN_TV_EXT + if (__get_ssid_from_vconf(VCONFKEY_WIFI_SSID, + val, sizeof(val)) == true) { + *ssid = strdup(val); + SINFO("get tethering ssid : %s", *ssid); + return TETHERING_ERROR_NONE; + } +#endif /* TIZEN_TV_EXT */ + if (!tethering_is_enabled(NULL, TETHERING_TYPE_WIFI)) { if (th->ssid != NULL) { DBG("Private SSID is set\n"); @@ -3224,6 +3303,36 @@ API int tethering_wifi_set_channel(tethering_h tethering, int channel) "parameter(tethering) is NULL\n"); __tethering_h *th = (__tethering_h *)tethering; + +#ifdef TIZEN_TV_EXT + GDBusProxy *proxy = th->client_bus_proxy; + GVariant *parameters; + GError *error = NULL; + tethering_error_e ret = TETHERING_ERROR_NONE; + + parameters = g_dbus_proxy_call_sync(proxy, "set_wifi_tethering_channel", + g_variant_new("(i)", channel), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); + + if (error) { + ERR("g_dbus_proxy_call_sync failed because %s\n", error->message); + + if (error->code == G_DBUS_ERROR_ACCESS_DENIED) + ret = TETHERING_ERROR_PERMISSION_DENIED; + else + ret = TETHERING_ERROR_OPERATION_FAILED; + + g_error_free(error); + return ret; + } + + if (parameters != NULL) { + g_variant_get(parameters, "(u)", &ret); + g_variant_unref(parameters); + } + + SINFO("set channel : %d", channel); +#endif /* TIZEN_TV_EXT */ + th->channel = channel; return TETHERING_ERROR_NONE; @@ -3241,7 +3350,48 @@ API int tethering_wifi_get_channel(tethering_h tethering, int *channel) "parameter(channel) is NULL\n"); __tethering_h *th = (__tethering_h *)tethering; +#ifdef TIZEN_TV_EXT + GDBusProxy *proxy = th->client_bus_proxy; + GVariant *parameters; + GError *error = NULL; + int ch, vconf_channel; + tethering_error_e ret = TETHERING_ERROR_NONE; + + parameters = g_dbus_proxy_call_sync(proxy, "get_wifi_tethering_channel", + NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); + + if (error) { + ERR("g_dbus_proxy_call_sync failed because %s\n", error->message); + + if (error->code == G_DBUS_ERROR_ACCESS_DENIED) + ret = TETHERING_ERROR_PERMISSION_DENIED; + else + ret = TETHERING_ERROR_OPERATION_FAILED; + + g_error_free(error); + return ret; + } + + if (parameters != NULL) { + g_variant_get(parameters, "(iu)", &ch, &ret); + g_variant_unref(parameters); + } + + if (ch < 0) { + ERR("failed to get Hostapd channel, set th->channel"); + *channel = th->channel; + } else + *channel = ch; + + if (vconf_get_int(VCONFKEY_WIFI_CHANNEL, &vconf_channel) < 0) + ERR("Failed to get vconf key for channel"); + else + *channel = vconf_channel; + + SINFO("get tethering channel : %d", *channel); +#else /* TIZEN_TV_EXT */ *channel = th->channel; +#endif /* TIZEN_TV_EXT */ return TETHERING_ERROR_NONE; } diff --git a/tests/mocks/tethering_gdbus.c b/tests/mocks/tethering_gdbus.c index f5ecbad..d8a3f8d 100644 --- a/tests/mocks/tethering_gdbus.c +++ b/tests/mocks/tethering_gdbus.c @@ -253,6 +253,10 @@ GVariant *__wrap_g_dbus_proxy_call_sync(GDBusProxy *proxy, params = g_variant_new("(siu)", "P@s$w0rd!", 9, 0); else if (strcmp(method_name, "get_station_info") == 0) params = _get_connected_clients_info(); +#ifdef TIZEN_TV_EXT + else if (strcmp(method_name, "get_wifi_tethering_channel") == 0) + params = g_variant_new("(iu)", 6, 0); +#endif /* TIZEN_TV_EXT */ else params = g_variant_new("(u)", 0); -- 2.7.4