Added handling when persistent group is reinvoked 31/124531/1
authorNishant Chaprana <n.chaprana@samsung.com>
Tue, 11 Apr 2017 12:43:01 +0000 (18:13 +0530)
committerNishant Chaprana <n.chaprana@samsung.com>
Tue, 11 Apr 2017 12:43:01 +0000 (18:13 +0530)
Change-Id: Ie616dc279dd5c563fe70b07c09f3dc4208195f53
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
packaging/wifi-direct-manager.spec
src/wifi-direct-event.c
src/wifi-direct-group.c

index 8d751e3877135b438c268a2c369ec3f6e59ed2fb..8bec37035c9f2da86a853b66322ac66a1885804d 100644 (file)
@@ -8,7 +8,7 @@
 
 Name:          wifi-direct-manager
 Summary:       Wi-Fi Direct manger
-Version:       1.2.220
+Version:       1.2.221
 Release:       1
 Group:      Network & Connectivity/Wireless
 License:    Apache-2.0
index 019a73d16c9bcca4a556d206a63174f481756f57..c5c7bf4d708ed8c365c2e1213d5a2bf16dc0d286 100644 (file)
@@ -1129,17 +1129,30 @@ void wfd_event_sta_connected(wfd_oem_event_s *event)
        }
 
        session = (wfd_session_s*) manager->session;
-       if (!session) {
-               WDS_LOGD("Unexpected event. Session is NULL [peer: " MACSECSTR "]",
-                                                                       MAC2SECSTR(event->dev_addr));
-               if (group) {
-                       wfd_oem_destroy_group(manager->oem_ops, group->ifname);
-                       wfd_destroy_group(manager);
+       if (!session && group) {
+               if (group->flags & WFD_GROUP_FLAG_PERSISTENT) {
+                       session = wfd_create_session(manager, event->dev_addr,
+                                                    event->wps_mode,
+                                                    SESSION_DIRECTION_INCOMING);
+                       if (!session) {
+                               WDS_LOGE("Failed to create session with peer [" MACSTR "]",
+                                        MAC2STR(event->dev_addr));
+                               __WDS_LOG_FUNC_EXIT__;
+                               return;
+                       }
+               } else {
+                       WDS_LOGD("Unexpected event. Session is NULL [peer: " MACSECSTR "]",
+                                MAC2SECSTR(event->dev_addr));
+                       if (group) {
+                               wfd_oem_destroy_group(manager->oem_ops, group->ifname);
+                               wfd_destroy_group(manager);
+                       }
+
+                       wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+                       __WDS_LOG_FUNC_EXIT__;
+                       return;
                }
-               wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
-               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
-               __WDS_LOG_FUNC_EXIT__;
-               return;
        }
 
        peer = wfd_session_get_peer(session);
index 6fc25ff6e0a9c0be7d94787cb62aad5f08d64922..4d0ea743dbda96df430c10546a97bfbacd3cb70c 100644 (file)
@@ -185,10 +185,19 @@ int wfd_group_complete(void *data, wfd_oem_event_s *group_info)
                if (!session && (group->flags & WFD_GROUP_FLAG_PERSISTENT)) {
                        WDS_LOGE("Group created by supplicant is persistent group.");
                        /**
-                        * TODO: Add handling for Reinvoked Persistent Group.
+                        * 1. When GO, start dhcpd and start session at peer joined event.
+                        * 2. When GC, start dhcpc after adding GO Address as peer.
                         */
-                       __WDS_LOG_FUNC_EXIT__;
-                       return -1;
+                       if (group->role == WFD_DEV_ROLE_GC) {
+                               peer = wfd_peer_find_by_addr(manager,
+                                                            group->go_dev_addr);
+                               if (!peer) {
+                                       WDS_LOGI("Add peer GO");
+                                       peer = wfd_add_peer(manager,
+                                                           group->go_dev_addr,
+                                                           "PEER-GO");
+                               }
+                       }
                } else {
                        WDS_LOGD("Failed to find peer by device address[" MACSECSTR "]",
                                                        MAC2SECSTR(edata->go_dev_addr));