{
__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);
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__;
}
{
__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;
}