Added MPTCP support to setting-network UI 17/173717/7
authorAbhishek Sansanwal <abhishek.s94@samsung.com>
Fri, 23 Mar 2018 09:55:55 +0000 (15:25 +0530)
committerAbhishek Sansanwal <abhishek.s94@samsung.com>
Thu, 5 Apr 2018 05:52:42 +0000 (11:22 +0530)
Signed-off-by: Abhishek Sansanwal <abhishek.s94@samsung.com>
Change-Id: I611de99e45954cd859df991122afef4d91f25c09

packaging/org.tizen.setting.spec
setting-network/include/setting-network.h
setting-network/src/setting-network-main.c
setting-network/src/setting-network.c

index 21202b455e264598a46f31f61a1a4e331b2a6f25..f8dd0778f0a7a1b2734a46f791dc154e6ee53959 100755 (executable)
@@ -69,6 +69,7 @@ BuildRequires:  pkgconfig(vconf)
 BuildRequires:  pkgconfig(context)
 BuildRequires:  pkgconfig(minizip)
 BuildRequires:  pkgconfig(capi-network-stc)
+BuildRequires: pkgconfig(network)
 BuildRequires:  libcap-devel
 BuildRequires:  cmake
 BuildRequires:  edje-tools
index cf12153dcd5b4744ba5b2ca6f001a81ae52559cf..738a1c00d5c3a31cb92d9ff33fe2ed74703be435 100644 (file)
 #define KeyStr_Network_Turn_On_Mobile_Data "IDS_ST_HEADER_TURN_ON_MOBILE_DATA"
 
 #define CONNECTION_DSC "Mobile network connections"
+#define MPTCP_DESCRIPTION "Multipath TCP"
 #define KeyStr_Reset_Def "IDS_ST_BODY_RESET_TO_DEFAULT"
 #define KeyStr_Edit "IDS_ST_BODY_EDIT"
 #define KeyStr_Saved "IDS_ST_BODY_SAVED"
@@ -152,6 +153,13 @@ typedef enum {
 
 } setting_network_preferred_network_operation_type_t;
 
+typedef enum {
+       SETTING_NETWORK_MPTCP_NOT_SUPPORTED,
+       SETTING_NETWORK_MPTCP_DISABLED,
+       SETTING_NETWORK_MPTCP_ENABLED,
+
+} setting_network_mptcp_state_t;
+
 typedef struct _SettingNetwork SettingNetwork;
 
 struct gl_network_data {
@@ -229,5 +237,7 @@ void setting_network_popup_delete(void *data);
 char *setting_network_get_default_profile_name(int conType, SettingNetwork *ad);
 void setting_network_mode_app_control(SettingNetwork *ad);
 bool setting_network_add_sim_toolbar(SettingNetwork *ad, Elm_Object_Item *page, Evas_Smart_Cb func);
+void setting_network_mptcp_enable(void *data, bool enable);
+setting_network_mptcp_state_t setting_network_is_mptcp_enabled(void *data);
 
 #endif                         /* __SETTING_NETWORK_H__ */
index cf33e29590f6bf7b1f1ebf11fc69b9ff29d2eadc..3d42f1f73da59b03f7620f2d060dbf93934d276f 100755 (executable)
@@ -56,6 +56,7 @@ static struct setting_network_main {
        Setting_GenGroupItem_Data *mobile_network_connections;
        Setting_GenGroupItem_Data *data_mobile_data;
        Setting_GenGroupItem_Data *data_roaming;
+       Setting_GenGroupItem_Data *mptcp;
 } s_info = {0,};
 
 static int _view_create(void *cb);
@@ -483,6 +484,39 @@ static int setting_network_get_state_mobile_data(int *value)
        }
 }
 
+static void setting_network_set_state_mptcp(void *data, ButtonState state)
+{
+       SETTING_TRACE_BEGIN;
+
+       if (state == SETTING_ON_OFF_BTN_ON)
+               setting_network_mptcp_enable(data, true);
+       else if (state == SETTING_ON_OFF_BTN_OFF)
+               setting_network_mptcp_enable(data, false);
+       else
+               SETTING_TRACE_ERROR("do not reach here!!!");
+
+}
+
+static int setting_network_get_state_mptcp(void *data, int *value)
+{
+       SETTING_TRACE_BEGIN;
+       setting_network_mptcp_state_t state = setting_network_is_mptcp_enabled(data);
+
+       switch (state) {
+       case SETTING_NETWORK_MPTCP_NOT_SUPPORTED:
+               *value = 0;
+               return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
+       case SETTING_NETWORK_MPTCP_DISABLED:
+               *value = 0;
+               return SYSTEM_SETTINGS_ERROR_NONE;
+       case SETTING_NETWORK_MPTCP_ENABLED:
+               *value = 1;
+               return SYSTEM_SETTINGS_ERROR_NONE;
+       default:
+               return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
+       }
+}
+
 void _item_Gendial_network_mode_mouse_up_cb(void *data, Evas_Object *obj, void *event_info)
 {
        int ret;
@@ -518,6 +552,29 @@ static inline void _add_network_mode_items(SettingNetwork *ad)
 
 }
 
+static inline void _add_mptcp(SettingNetwork *ad)
+{
+       /* [UI] Multipath TCP description */
+
+       int mptcp_state;
+       int ret = setting_network_get_state_mptcp(ad, &mptcp_state);
+       if (ret != SYSTEM_SETTINGS_ERROR_NONE)
+               return;
+
+       s_info.mptcp = setting_create_Gendial_field_def(ad->md.genlist,
+                       &itc_1text_1icon, _item_Gendial_mouse_up_cb, ad, SWALLOW_Type_1ICON_1RADIO,
+                       NULL, NULL, mptcp_state, MPTCP_DESCRIPTION,
+                       NULL, _chk_btn_cb);
+
+       if (s_info.mptcp) {
+               __BACK_POINTER_SET(s_info.mptcp);
+               s_info.mptcp->userdata = ad;
+       } else {
+               SETTING_TRACE_ERROR("s_info.mptcp is NULL");
+       }
+
+}
+
 static inline void _add_mobile_network_connections(SettingNetwork *ad)
 {
        /* [UI] Connection mode description */
@@ -537,6 +594,7 @@ static inline void _add_mobile_network_connections(SettingNetwork *ad)
 
 static bool _fill_list(SettingNetwork *ad)
 {
+       int value_mobile_data;
        if (ad->available_cards == 2) {
                s_info.service_providers = setting_create_Gendial_field_def(ad->md.genlist,
                                &itc_1text,
@@ -562,6 +620,12 @@ static bool _fill_list(SettingNetwork *ad)
        /* [UI] Connection mode description */
        _add_mobile_network_connections(ad);
 
+       setting_network_get_state_mobile_data(&value_mobile_data);
+       if (value_mobile_data) {
+               /* [UI] Multipath TCP description */
+               _add_mptcp(ad);
+       }
+
        return true;
 }
 
@@ -867,6 +931,18 @@ static void _item_Gendial_mouse_up_cb(void *data, Evas_Object *obj, void *event_
        } else if (!safeStrCmp(CONNECTION_DSC, list_item->keyStr)) {
                ret = setting_view_change(&setting_view_network_main,
                                &setting_view_network_con, ad);
+       } else if (!safeStrCmp(MPTCP_DESCRIPTION, list_item->keyStr)) {
+               if (list_item->chk_status) {
+                       SETTING_TRACE(" TOUCH HANDLING MPTCP- set false");
+                       setting_network_set_state_mptcp(ad, SETTING_ON_OFF_BTN_OFF);
+                       setting_update_gl_item_chk_status(s_info.mptcp,
+                                       SETTING_ON_OFF_BTN_OFF);
+               } else {
+                       SETTING_TRACE(" TOUCH HANDLING MPTCP- set true");
+                       setting_network_set_state_mptcp(ad, SETTING_ON_OFF_BTN_ON);
+                       setting_update_gl_item_chk_status(s_info.mptcp,
+                                       SETTING_ON_OFF_BTN_ON);
+               }
        }
 }
 
@@ -926,7 +1002,6 @@ static void _chk_btn_cb(void *data, Evas_Object *obj,
                                setting_update_gl_item_chk_status(
                                                s_info.data_roaming, 0);
                        }
-
                } else {
                        /* Off -> On */
                        ret = vconf_get_bool(
@@ -946,6 +1021,7 @@ static void _chk_btn_cb(void *data, Evas_Object *obj,
                                        FALSE,
                                        FALSE, 2, "IDS_ST_BUTTON_ENABLE",
                                        "IDS_ST_BUTTON_CANCEL_ABB");
+
                }
        } else if (obj == s_info.data_roaming->eo_check) {
                SETTING_TRACE(" TOUCH HANDLING DATA ROAMING");
@@ -967,6 +1043,19 @@ static void _chk_btn_cb(void *data, Evas_Object *obj,
                        setting_update_gl_item_chk_status(s_info.data_roaming,
                                        SETTING_ON_OFF_BTN_OFF);
                }
+       } else if (obj == s_info.mptcp->eo_check) {
+               SETTING_TRACE(" TOUCH HANDLING MPTCP");
+               if (list_item->chk_status) {
+                       SETTING_TRACE(" TOUCH HANDLING MPTCP- set true");
+                       setting_network_set_state_mptcp(ad, SETTING_ON_OFF_BTN_ON);
+                       setting_update_gl_item_chk_status(s_info.mptcp,
+                                       SETTING_ON_OFF_BTN_ON);
+               } else {
+                       SETTING_TRACE(" TOUCH HANDLING MPTCP- set false");
+                       setting_network_set_state_mptcp(ad, SETTING_ON_OFF_BTN_OFF);
+                       setting_update_gl_item_chk_status(s_info.mptcp,
+                                       SETTING_ON_OFF_BTN_OFF);
+               }
        }
 }
 
@@ -993,6 +1082,9 @@ static void _use_packet_resp_cb(void *data, Evas_Object *obj,
 
                if (value == 0) {
 
+                       /* [UI] Multipath TCP description */
+                       _add_mptcp(ad);
+
                        setting_network_set_state_mobile_data(
                                        SETTING_ON_OFF_BTN_ON);
                        setting_retm_if(err != 0, "set vconf failed");
@@ -1017,6 +1109,10 @@ static void _use_packet_resp_cb(void *data, Evas_Object *obj,
                        }
                } else {
 
+                       /* Remove the mptcp genlist item */
+                       if (s_info.mptcp)
+                               elm_object_item_del(s_info.mptcp->item);
+
                        setting_network_set_state_mobile_data(
                                        SETTING_ON_OFF_BTN_OFF);
                        setting_retm_if(err != 0, "set vconf failed");
index eb07d581e921555d8da3f3a0149978aff3523949..b8d0846f65b9a6043e668dda26a49a3f91eb5ffc 100644 (file)
@@ -21,6 +21,7 @@
 #include <setting-network.h>
 #include <setting-debug.h>
 #include <setting-cfg.h>
+#include <connection_extension.h>
 #include "setting-network-service-providers.h"
 #include "setting-network-connection-create.h"
 #include "setting-network-main.h"
@@ -478,3 +479,27 @@ void setting_network_reget_profile_list(void *cb)
        }
        SETTING_TRACE_END;
 }
+
+void setting_network_mptcp_enable(void *data, bool enable)
+{
+       SettingNetwork *ad = (SettingNetwork *)data;
+
+       if (enable)
+               connection_mptcp_enable(ad->connection, CONNECTION_MPTCP_ENABLE_SOCKOPT);
+       else
+               connection_mptcp_disable(ad->connection);
+}
+
+setting_network_mptcp_state_t setting_network_is_mptcp_enabled(void *data)
+{
+       connection_mptcp_enable_e state;
+       SettingNetwork *ad = (SettingNetwork *)data;
+
+       int ret = connection_mptcp_get_enabled(ad->connection, &state);
+       if (ret != CONNECTION_ERROR_NONE) {
+               SETTING_TRACE_ERROR("Failed to get mptcp state");
+               return SETTING_NETWORK_MPTCP_NOT_SUPPORTED;
+       }
+
+       return state ? SETTING_NETWORK_MPTCP_ENABLED : SETTING_NETWORK_MPTCP_DISABLED;
+}