Handle <InvitationResult> [P2P-INVITATION-RESULT status parameter] 96/185996/4 accepted/tizen/unified/20180817.061745 submit/tizen/20180814.075657 submit/tizen/20180815.221347 submit/tizen/20180816.050429
authorShagun Garg <shagun1.garg@samsung.com>
Mon, 6 Aug 2018 09:11:02 +0000 (14:41 +0530)
committerShagun Garg <shagun1.garg@samsung.com>
Fri, 10 Aug 2018 07:36:32 +0000 (13:06 +0530)
This Patch processes the "InvitationResult" event parameters and sets the status of result.
If ResultStatus implies any error then the session previously created for sending Invitation Request must be destroyed.

Signed-off-by: Shagun Garg <shagun1.garg@samsung.com>
Change-Id: Ib57e913a95a2235b0348e8c01712c5462d5f103a

packaging/wifi-direct-manager.spec
plugin/wpasupplicant/ctrl_iface_dbus/wfd-plugin-wpasupplicant.c [changed mode: 0644->0755]
src/wifi-direct-event.c [changed mode: 0644->0755]

index c873900..ecdde59 100644 (file)
@@ -6,7 +6,7 @@
 
 Name:          wifi-direct-manager
 Summary:       Wi-Fi Direct manger
-Version:       1.2.270
+Version:       1.2.271
 Release:       1
 Group:      Network & Connectivity/Wireless
 License:    Apache-2.0
old mode 100644 (file)
new mode 100755 (executable)
index 5c11d6d..18642bc
@@ -2845,6 +2845,8 @@ static void _ws_process_invitation_result(GDBusConnection *connection,
 {
        __WDP_LOG_FUNC_ENTER__;
        wfd_oem_event_s event;
+       wfd_oem_invite_data_s* invite_data = NULL;
+       GVariantIter *iter = NULL;
 
        DEBUG_SIGNAL(sender, object_path, interface, signal, parameters);
 
@@ -2856,6 +2858,44 @@ static void _ws_process_invitation_result(GDBusConnection *connection,
 
        memset(&event, 0x0, sizeof(wfd_oem_event_s));
 
+       int status = 0;
+       invite_data = (wfd_oem_invite_data_s *)g_try_malloc0(sizeof(wfd_oem_invite_data_s));
+       if (!invite_data) {
+               WDP_LOGF("Failed to allocate memory for event.");
+               __WDP_LOG_FUNC_EXIT__;
+               return;
+       }
+
+       event.edata = (wfd_oem_invite_data_s *)invite_data;
+       event.edata_type = WFD_OEM_EDATA_TYPE_INVITE;
+       event.event_id = WFD_OEM_EVENT_INVITATION_RES;
+
+       if (parameters != NULL) {
+               g_variant_get(parameters, "(a{sv})", &iter);
+               if (iter != NULL) {
+                       gchar *key = NULL;
+                       GVariant *value = NULL;
+                       while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
+                               CHECK_KEY_VALUE(key, value);
+                               if (g_strcmp0(key, "status") == 0) {
+                                       g_variant_get(value, "i", &status);
+                                       WDP_LOGD("Retrive invitation status [%d]", status);
+                                       invite_data->status = status;
+                               } else if (g_strcmp0(key, "BSSID") == 0) {
+                                       if (__ws_unpack_ay(invite_data->bssid, value, WS_MACADDR_LEN)) {
+                                               WDP_LOGD("[" MACSTR "]", MAC2STR(invite_data->bssid));
+                                       }
+                               }
+                       }
+                       g_variant_iter_free(iter);
+               }
+       }
+
+       if (g_pd->callback->invitation_resp_cb)
+               g_pd->callback->invitation_resp_cb(&event);
+
+       g_free(event.edata);
+
        __WDP_LOG_FUNC_EXIT__;
 }
 
old mode 100644 (file)
new mode 100755 (executable)
index 20806b3..a451af6
@@ -1022,6 +1022,29 @@ void wfd_event_invitation_res(wfd_oem_event_s *event)
 {
        __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
+       wfd_manager_s *manager = wfd_get_manager();
+       wfd_session_s *session = (wfd_session_s *)manager->session;
+       unsigned char *peer_addr = NULL;
+       wfd_oem_invite_data_s *edata = NULL;
+
+       if (!session) {
+               WDS_LOGE("Unexpected event. Session not exist");
+               __WDS_LOG_FUNC_EXIT__;
+               return;
+       }
+
+       peer_addr = wfd_session_get_peer_addr(session);
+       if (!peer_addr) {
+               WDS_LOGE("Session does not have peer");
+               return;
+       }
+
+       edata = (wfd_oem_invite_data_s *)event->edata;
+       if (edata->status != 0) {
+               WDS_LOGE("P2P-INVITATION-RESULT status= %d [Failed]", edata->status);
+               wfd_destroy_session(manager);
+       }
+
        __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }