[wifi-direct-manager] Replace group create parameter to improve persist group logic 47/57847/2
authorYu Jiung <jiung.yu@samsung.com>
Wed, 20 Jan 2016 07:08:32 +0000 (16:08 +0900)
committerYu Jiung <jiung.yu@samsung.com>
Mon, 1 Feb 2016 01:15:54 +0000 (10:15 +0900)
Change-Id: I0917d8de9eaabb0c9f78e9216b5a55fbae989453
Signed-off-by: Yu jiung <jiung.yu@samsung.com>
oem/wifi-direct-oem.c
oem/wifi-direct-oem.h
packaging/wifi-direct-manager.spec
plugin/wpasupplicant/ctrl_iface_dbus/dbus/wfd-plugin-supplicant-dbus.h
plugin/wpasupplicant/ctrl_iface_dbus/include/wfd-plugin-wpasupplicant.h
plugin/wpasupplicant/ctrl_iface_dbus/wfd-plugin-wpasupplicant.c
plugin/wpasupplicant/ctrl_iface_sock/include/wfd-plugin-wpasupplicant.h
plugin/wpasupplicant/ctrl_iface_sock/wfd-plugin-wpasupplicant.c
plugin/wpasupplicant/emul/include/wfd-plugin-wpasupplicant.h
plugin/wpasupplicant/emul/wfd-plugin-wpasupplicant-emul.c
src/wifi-direct-client.c

index 5af2258..d259972 100644 (file)
@@ -213,13 +213,13 @@ int wfd_oem_get_supported_wps_mode(wfd_oem_ops_s *ops, int *wps_mode)
        return ops->get_supported_wps_mode(wps_mode);
 }
 
-int wfd_oem_create_group(wfd_oem_ops_s *ops, int persistent, int freq, const char *passphrase)
+int wfd_oem_create_group(wfd_oem_ops_s *ops, wfd_oem_group_param_s *param)
 {
        if (!ops || !ops->create_group) {
                return -1;
        }
 
-       return ops->create_group(persistent, freq, passphrase);
+       return ops->create_group(param);
 }
 
 int wfd_oem_destroy_group(wfd_oem_ops_s *ops, const char *ifname)
index 23e9dfd..e63e19e 100755 (executable)
@@ -301,6 +301,13 @@ typedef struct {
 } wfd_oem_conn_param_s;
 
 typedef struct {
+       int persistent;
+       int persistent_group_id;
+       int freq;
+       char passphrase[OEM_PASS_PHRASE_LEN + 1];
+} wfd_oem_group_param_s;
+
+typedef struct {
        int net_id;
        char *ifname;
        unsigned char go_dev_addr[OEM_MACADDR_LEN];
@@ -454,7 +461,7 @@ typedef struct _wfd_oem_ops_s {
        int (*set_pin) (char *pin);
        int (*generate_pin) (char **pin);
        int (*get_supported_wps_mode) (int *wps_mode);
-       int (*create_group) (int persistent, int freq, const char *passphrase);
+       int (*create_group) (wfd_oem_group_param_s *param);
        int (*destroy_group) (const char *ifname);
        int (*invite) (unsigned char *peer_addr, wfd_oem_invite_param_s *param);
 
@@ -514,7 +521,7 @@ int wfd_oem_get_pin(wfd_oem_ops_s *ops, char *pin);
 int wfd_oem_set_pin(wfd_oem_ops_s *ops, char *pin);
 int wfd_oem_generate_pin(wfd_oem_ops_s *ops, char **pin);
 int wfd_oem_get_supported_wps_mode(wfd_oem_ops_s *ops, int *wps_mode);
-int wfd_oem_create_group(wfd_oem_ops_s *ops, int persistent, int freq, const char *passphrase);
+int wfd_oem_create_group(wfd_oem_ops_s *ops, wfd_oem_group_param_s *param);
 int wfd_oem_destroy_group(wfd_oem_ops_s *ops, const char *ifname);
 int wfd_oem_invite(wfd_oem_ops_s *ops, unsigned char *peer_addr, wfd_oem_invite_param_s *param);
 
index 416d2e4..d60d730 100755 (executable)
@@ -1,6 +1,6 @@
 Name:          wifi-direct-manager
 Summary:       Wi-Fi Direct manger
-Version:       1.2.119
+Version:       1.2.120
 Release:       1
 Group:      Network & Connectivity/Wireless
 License:    Apache-2.0
index 980d748..a2b5533 100755 (executable)
@@ -18,6 +18,8 @@
 #define SUPPLICANT_P2P_GROUP SUPPLICANT_INTERFACE ".Group"
 #define SUPPLICANT_P2P_PERSISTENTGROUP SUPPLICANT_INTERFACE ".PersistentGroup"
 
+#define SUPPLICANT_PERSISTENT_GROUPS_PART "PersistentGroups"
+
 #define SUPPLICANT_METHOD_GETINTERFACE "GetInterface"
 #define SUPPLICANT_METHOD_REMOVEINTERFACE "RemoveInterface"
 #define SUPPLICANT_METHOD_CREATEINTERFACE "CreateInterface"
index a5f383e..37f51e7 100755 (executable)
@@ -419,7 +419,7 @@ int ws_get_pin(char *pin);
 int ws_set_pin(char *pin);
 int ws_generate_pin(char **pin);
 int ws_get_supported_wps_mode();
-int ws_create_group(int persistent, int freq, const char *passphrase);
+int ws_create_group(wfd_oem_group_param_s *param);
 int ws_destroy_group(const char *ifname);
 int ws_invite(unsigned char *peer_addr, wfd_oem_invite_param_s *param);
 int ws_wps_start(unsigned char *peer_addr, int wps_mode, const char *pin);
index bdb3913..aaea069 100755 (executable)
@@ -3478,13 +3478,14 @@ static void __store_group_iface_path(GVariant *value, void *user_data) {
        /* subscribe interface p2p signal */
 }
 
-int ws_create_group(int persistent, int freq, const char *passphrase)
+int ws_create_group(wfd_oem_group_param_s *param)
 {
        __WDP_LOG_FUNC_ENTER__;
        GDBusConnection *g_dbus = NULL;
        GVariantBuilder *builder = NULL;
        GVariant *value = NULL;
        dbus_method_param_s params;
+       char persistent_group_obj_path[OBJECT_PATH_MAX] = {0,};
        int res = 0;
 
        if (!g_pd) {
@@ -3503,20 +3504,29 @@ int ws_create_group(int persistent, int freq, const char *passphrase)
 
        builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}") );
 
-       if (persistent)
+       if (param->persistent > 0) {
                g_variant_builder_add(builder, "{sv}", "persistent",
                                g_variant_new_boolean(TRUE));
-       else
+               if(param->persistent == 2) {
+                       g_snprintf(persistent_group_obj_path, OBJECT_PATH_MAX,
+                                       "%s/" SUPPLICANT_PERSISTENT_GROUPS_PART "/%d",
+                                       g_pd->iface_path, param->persistent_group_id);
+                       g_variant_builder_add(builder, "{sv}", "persistent_group_object",
+                                       g_variant_new_object_path(persistent_group_obj_path));
+               }
+
+       } else {
                g_variant_builder_add(builder, "{sv}", "persistent",
                                g_variant_new_boolean(FALSE));
+       }
 
-       if (passphrase && strlen(passphrase) > 0)
+       if (param->passphrase && strlen(param->passphrase) > 0)
                g_variant_builder_add(builder, "{sv}", "passphrase",
-                               g_variant_new_string(passphrase));
+                               g_variant_new_string(param->passphrase));
 
-       if (freq)
+       if (param->freq)
                g_variant_builder_add(builder, "{sv}", "frequency",
-                               g_variant_new_int32(freq));
+                               g_variant_new_int32(param->freq));
 
        value = g_variant_new ("(a{sv})", builder);
        g_variant_builder_unref (builder);
index 51a9638..9176d08 100755 (executable)
@@ -562,7 +562,7 @@ int ws_get_pin(char *pin);
 int ws_set_pin(char *pin);
 int ws_generate_pin(char **pin);
 int ws_get_supported_wps_mode();
-int ws_create_group(int persistent, int freq, const char *passphrase);
+int ws_create_group(wfd_oem_group_param_s *param);
 int ws_destroy_group(const char *ifname);
 int ws_invite(unsigned char *peer_addr, wfd_oem_invite_param_s *param);
 int ws_wps_start(unsigned char *peer_addr, int wps_mode, const char *pin);
index 4972208..0a477fa 100755 (executable)
@@ -3539,7 +3539,7 @@ int ws_get_supported_wps_mode()
        return 0;
 }
 
-int ws_create_group(int persistent, int freq, const char *passphrase)
+int ws_create_group(wfd_oem_group_param_s *param)
 {
        __WDP_LOG_FUNC_ENTER__;
        ws_sock_data_s *sock = g_pd->common;
@@ -3553,12 +3553,16 @@ int ws_create_group(int persistent, int freq, const char *passphrase)
                return -1;
        }
 
-       if (persistent) {
-               snprintf(cmd, sizeof(cmd), WS_CMD_P2P_GROUP_ADD WS_STR_PERSISTENT);
+       if (param->persistent) {
+               if(param->persistent == 2)
+                       sprintf(cmd, sizeof(cmd), WS_CMD_P2P_GROUP_ADD WS_STR_PERSISTENT "=%d",
+                                       param->persistent_group_id);
+               else
+                       snprintf(cmd, sizeof(cmd), WS_CMD_P2P_GROUP_ADD WS_STR_PERSISTENT);
        } else {
                if (passphrase[0] != '\0') {
 
-                       g_snprintf(cmd, sizeof(cmd), WS_CMD_P2P_GROUP_ADD " passphrase=%s", passphrase);
+                       g_snprintf(cmd, sizeof(cmd), WS_CMD_P2P_GROUP_ADD " passphrase=%s", param->passphrase);
 
                }else{
                        g_snprintf(cmd, sizeof(cmd), WS_CMD_P2P_GROUP_ADD);
@@ -3566,7 +3570,7 @@ int ws_create_group(int persistent, int freq, const char *passphrase)
        }
 
        if (freq > 0) {
-               g_snprintf(freq_str, sizeof(freq_str), WS_STR_FREQ "%d", freq);
+               g_snprintf(freq_str, sizeof(freq_str), WS_STR_FREQ "%d", param->freq);
                strncat(cmd, freq_str, sizeof(freq_str));
        } else {
                strncat(cmd, WS_STR_FREQ_2G, 8);
index ee9aacd..053141b 100755 (executable)
@@ -85,7 +85,7 @@ int ws_get_pin(char *pin);
 int ws_set_pin(char *pin);
 int ws_generate_pin(char **pin);
 int ws_get_supported_wps_mode();
-int ws_create_group(int persistent, int freq, const char *passphrase);
+int ws_create_group(wfd_oem_group_param_s *param);
 int ws_destroy_group(const char *ifname);
 int ws_invite(unsigned char *peer_addr, wfd_oem_invite_param_s *param);
 int ws_wps_start(unsigned char *peer_addr, int wps_mode, const char *pin);
index 85a351e..79a8fdc 100644 (file)
@@ -245,7 +245,7 @@ int ws_get_supported_wps_mode()
        return -1;
 }
 
-int ws_create_group(int persistent, int freq, const char *passphrase)
+int ws_create_group(wfd_oem_group_param_s *param)
 {
        __WDP_LOG_FUNC_ENTER__;
 
index 266e790..fe58259 100755 (executable)
@@ -1418,15 +1418,18 @@ static gboolean wfd_client_process_request(GIOChannel *source,
                break;
        case WIFI_DIRECT_CMD_CREATE_GROUP:      // group
                {
-                       int persistent = 0;
                        wfd_group_s *group = manager->group;
+                       wfd_oem_group_param_s param;
                        if (group || manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                                WDS_LOGE("Group already exist or not a proper state");
                                rsp.result = WIFI_DIRECT_ERROR_NOT_PERMITTED;
                                break;
                        }
-
+#ifdef TIZEN_WLAN_BOARD_SPRD
+                       group = wfd_create_pending_group(manager, manager->local->dev_addr);
+#else
                        group = wfd_create_pending_group(manager, manager->local->intf_addr);
+#endif
                        if (!group) {
                                WDS_LOGE("Failed to create pending group");
                                rsp.result = WIFI_DIRECT_ERROR_OPERATION_FAILED;
@@ -1436,9 +1439,16 @@ static gboolean wfd_client_process_request(GIOChannel *source,
                        manager->group = group;
                        WDS_LOGD("Succeeded to create pending group");
 
-                       persistent = (manager->local->group_flags & WFD_GROUP_FLAG_PERSISTENT);
+                       memset(&param, 0x0, sizeof(param));
 
-                       res = wfd_oem_create_group(manager->oem_ops, persistent, 0, manager->local->passphrase);
+                       param.persistent = (manager->local->group_flags &
+                                       WFD_GROUP_FLAG_PERSISTENT);
+                       memcpy(&(param.passphrase), manager->local->passphrase,
+                                       sizeof(param.passphrase));
+#ifndef TIZEN_WLAN_BOARD_SPRD
+                       param.freq = WFD_FREQ_2G;
+#endif
+                       res = wfd_oem_create_group(manager->oem_ops, &param);
                        if (res < 0) {
                                WDS_LOGE("Failed to create group");
                                wfd_destroy_group(manager, GROUP_IFNAME);