Add tv profile specific code 02/239702/3
authorNishant Chaprana <n.chaprana@samsung.com>
Tue, 4 Aug 2020 05:15:35 +0000 (10:45 +0530)
committerNishant Chaprana <n.chaprana@samsung.com>
Tue, 4 Aug 2020 05:15:35 +0000 (10:45 +0530)
Change-Id: Iefb2bcec84cb437ab969389cf3616cd5e51b56df
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
packaging/capi-network-tethering.spec
src/tethering.c
tests/mocks/tethering_gdbus.c

index 43f2714..f8b4f84 100644 (file)
@@ -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}
index d79c056..5df933d 100755 (executable)
 #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;
 }
index f5ecbad..d8a3f8d 100644 (file)
@@ -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);