2 * Network Configuration Module
4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
21 * This file implements wifi direct event functions.
23 * @file wifi-direct-event.c
24 * @author Gibyoung Kim (lastkgb.kim@samsung.com)
38 #include <wifi-direct.h>
40 #include "wifi-direct-ipc.h"
41 #include "wifi-direct-manager.h"
42 #include "wifi-direct-oem.h"
43 #include "wifi-direct-peer.h"
44 #include "wifi-direct-group.h"
45 #include "wifi-direct-session.h"
46 #include "wifi-direct-event.h"
47 #include "wifi-direct-state.h"
48 #include "wifi-direct-util.h"
49 #include "wifi-direct-error.h"
50 #include "wifi-direct-log.h"
51 #include "wifi-direct-dbus.h"
52 #include "wifi-direct-asp.h"
54 static void _wfd_event_reset_state(wfd_manager_s *manager)
56 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
58 if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
59 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
60 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
61 } else if (manager->local->dev_role == WFD_DEV_ROLE_GC) {
62 wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTED);
63 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTED);
65 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
66 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
68 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
71 static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *data)
73 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
75 wfd_device_s *peer = NULL;
77 if (!manager || !data) {
78 WDS_LOGE("Invalid parameter");
79 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
83 peer = wfd_peer_find_by_dev_addr(manager, data->p2p_dev_addr);
85 peer = wfd_add_peer(manager, data->p2p_dev_addr, data->name);
87 WDS_LOGE("Failed to add peer");
88 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
92 if (strcmp(peer->dev_name, data->name)) {
93 g_strlcpy(peer->dev_name, data->name, DEV_NAME_LEN + 1);
94 WDS_LOGD("Device name is changed [" MACSECSTR ": %s]",
95 MAC2SECSTR(peer->dev_addr), peer->dev_name);
98 peer->pri_dev_type = data->pri_dev_type;
99 peer->sec_dev_type = data->sec_dev_type;
100 peer->config_methods = data->config_methods;
101 peer->dev_flags = data->dev_flags;
102 peer->group_flags = data->group_flags;
103 peer->dev_role = data->dev_role;
104 peer->rssi = data->rssi;
105 WDS_LOGD("Peer RSSI value is %d", peer->rssi);
107 if (manager->is_wifi_display_supported)
108 memcpy(&(peer->display), &(data->display), sizeof(wfd_display_s));
113 peer->vsie = g_strdup(data->vsie);
115 WDS_LOGD("Peer name: [%s], vsie: [%s]", peer->dev_name, peer->vsie);
117 #if !(__GNUC__ <= 4 && __GNUC_MINOR__ < 8)
118 wfd_util_get_current_time(&peer->time);
121 gettimeofday(&tval, NULL);
122 peer->time = tval.tv_sec;
124 WDS_LOGI("Update time [%s - %ld]", peer->dev_name, peer->time);
126 //We don't free data memory or memory in it.
127 //They're handled by plugin
128 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
132 gboolean _wfd_connection_retry(gpointer *data)
134 wfd_session_s *session = (wfd_session_s*) data;
136 WDS_LOGE("Session is NULL");
137 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
138 return G_SOURCE_REMOVE;
141 switch (session->state) {
142 case SESSION_STATE_STARTED:
143 WDS_LOGD("PD again");
144 wfd_session_start(session);
146 case SESSION_STATE_GO_NEG:
147 WDS_LOGD("Negotiation again");
148 wfd_session_connect(session);
150 case SESSION_STATE_WPS:
151 WDS_LOGD("WPS again");
152 wfd_session_wps(session);
155 WDS_LOGE("Invalid session state [%d]", session->state);
158 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
159 return G_SOURCE_REMOVE;
162 void wfd_event_deactivated(wfd_oem_event_s *event)
164 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
166 wfd_manager_s *manager = wfd_get_manager();
168 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
170 g_variant_new("(i)", WIFI_DIRECT_ERROR_NONE));
172 wfd_destroy_session(manager);
173 wfd_destroy_group(manager);
174 wfd_peer_clear_all(manager);
175 wfd_local_reset_data(manager);
177 wfd_state_set(manager, WIFI_DIRECT_STATE_DEACTIVATED);
178 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_DEACTIVATED);
179 manager->req_wps_mode = WFD_WPS_MODE_PBC;
181 if (manager->is_connection_agent)
182 wfd_util_stop_wifi_direct_popup();
184 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
188 void wfd_event_peer_found(wfd_oem_event_s *event)
190 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
192 wfd_manager_s *manager = wfd_get_manager();
193 wfd_oem_dev_data_s *edata = NULL;
194 char peer_mac_address[MACSTR_LEN+1] = {0, };
197 edata = (wfd_oem_dev_data_s*) event->edata;
198 if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
199 WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
200 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
204 res = _wfd_event_update_peer(manager, edata);
206 WDS_LOGE("Failed to update peer data");//LCOV_EXCL_LINE
207 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
211 if (manager->state > WIFI_DIRECT_STATE_ACTIVATING &&
212 manager->state != WIFI_DIRECT_STATE_CONNECTING &&
213 manager->state != WIFI_DIRECT_STATE_DISCONNECTING) {
214 snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(edata->p2p_dev_addr));
215 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
217 g_variant_new("(s)", peer_mac_address));
220 if (manager->is_asp_supported) {
222 GVariantBuilder *builder = NULL;
223 GVariant *params = NULL;
224 wfd_oem_advertise_service_s *service;
226 for (list = (GList *)event->asp_services; list != NULL; list = list->next) {
227 service = (wfd_oem_advertise_service_s *)list->data;
229 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
230 g_variant_builder_add(builder, "{sv}", "search_id", g_variant_new("t", service->search_id));
231 g_variant_builder_add(builder, "{sv}", "service_mac", g_variant_new("s", peer_mac_address));
232 g_variant_builder_add(builder, "{sv}", "device_name", g_variant_new("s", edata->name));
233 g_variant_builder_add(builder, "{sv}", "advertisement_id", g_variant_new("u", service->adv_id));
234 g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", service->config_method));
235 if (service->service_type)
236 g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", service->service_type));
237 params = g_variant_new("(a{sv})", builder);
238 g_variant_builder_unref(builder);
240 wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE,
245 for (list = (GList *)event->asp2_services; list != NULL; list = list->next) {
246 service = (wfd_oem_advertise_service_s *)list->data;
248 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
249 g_variant_builder_add(builder, "{sv}", "search_id", g_variant_new("t", service->search_id));
250 g_variant_builder_add(builder, "{sv}", "service_mac", g_variant_new("s", peer_mac_address));
251 g_variant_builder_add(builder, "{sv}", "device_name", g_variant_new("s", edata->name));
252 g_variant_builder_add(builder, "{sv}", "advertisement_id", g_variant_new("u", service->adv_id));
253 g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", service->config_method));
254 if (service->service_type)
255 g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", service->service_type));
256 if (service->instance_name)
257 g_variant_builder_add(builder, "{sv}", "instance_name", g_variant_new("s", service->instance_name));
258 params = g_variant_new("(a{sv})", builder);
259 g_variant_builder_unref(builder);
261 wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE,
266 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
270 void wfd_event_peer_disappeared(wfd_oem_event_s *event)
272 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
274 wfd_manager_s *manager = wfd_get_manager();
275 wfd_session_s *session = NULL;
276 wfd_device_s *peer = NULL;
277 char peer_mac_address[MACSTR_LEN+1] = {0, };
279 session = manager->session;
280 if (session != NULL && session->peer != NULL) {
281 peer = session->peer;
282 WDS_LOGD("session peer [" MACSTR "] lost peer [" MACSTR "]", MAC2STR(peer->dev_addr),
283 MAC2STR(event->dev_addr));
284 if (memcmp(peer->dev_addr, event->dev_addr, MACADDR_LEN) == 0) {
285 WDS_LOGD("peer already in connection");//LCOV_EXCL_LINE
290 wfd_remove_peer(manager, event->dev_addr);
292 snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
293 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
295 g_variant_new("(s)", peer_mac_address));
297 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
301 void wfd_event_discovery_finished(wfd_oem_event_s *event)
303 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
305 wfd_manager_s *manager = wfd_get_manager();
307 if (manager->state != WIFI_DIRECT_STATE_DISCOVERING &&
308 manager->state != WIFI_DIRECT_STATE_ACTIVATED) {
309 WDS_LOGE("Notify finding stopped when discovering or activated. [%d]", manager->state);
310 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
314 if (manager->scan_mode == WFD_SCAN_MODE_PASSIVE) {
315 WDS_LOGE("During passive scan, Discover Finished event will not notified");//LCOV_EXCL_LINE
316 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
320 _wfd_event_reset_state(manager);
321 manager->scan_mode = WFD_SCAN_MODE_NONE;
323 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
327 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
331 void wfd_event_prov_disc_req(wfd_oem_event_s *event)
333 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
335 wfd_manager_s *manager = wfd_get_manager();
336 wfd_device_s *peer = NULL;
337 wfd_device_s *member = NULL;
339 wfd_group_s *group = (wfd_group_s*) manager->group;
341 if (group && group->role == WFD_DEV_ROLE_GC) {
342 WDS_LOGD("Device has GC role - ignore this provision request");//LCOV_EXCL_LINE
343 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
347 member = wfd_group_find_member_by_addr(group, event->dev_addr);
349 /* PD request can be arrived from peer device
350 * when connection is timeout to close connection */
351 WDS_LOGE("Unexpected Event - Member already exist");//LCOV_EXCL_LINE
352 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
356 wfd_oem_dev_data_s *edata = NULL;
358 edata = (wfd_oem_dev_data_s*) event->edata;
359 if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
360 WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
361 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
365 res = _wfd_event_update_peer(manager, edata);
366 peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
368 if (WFD_DEV_ROLE_GO != manager->local->dev_role) {
369 WDS_LOGI("Own device is not GO, updated peer data only.");//LCOV_EXCL_LINE
371 manager->local->wps_mode = event->wps_mode;
372 if (event->wps_mode == WFD_WPS_MODE_PBC ||
373 event->wps_mode == WFD_WPS_MODE_KEYPAD) {
374 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
380 peer->state = WFD_PEER_STATE_CONNECTING;
382 res = wfd_session_process_event(manager, event);
384 WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
386 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
390 void wfd_event_prov_disc_resp(wfd_oem_event_s *event)
392 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
394 wfd_manager_s *manager = wfd_get_manager();
395 wfd_device_s *peer = NULL;
398 wfd_oem_dev_data_s *edata = NULL;
400 edata = (wfd_oem_dev_data_s*) event->edata;
401 if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
402 WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
403 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
407 res = _wfd_event_update_peer(manager, edata);
408 peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
410 peer->state = WFD_PEER_STATE_CONNECTING;
412 res = wfd_session_process_event(manager, event);
414 WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
416 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
420 static bool __asp_prov_disc_deferred(wfd_session_s *session, void *event_data)
422 wfd_oem_asp_prov_s *prov_params = (wfd_oem_asp_prov_s *)event_data;
423 bool is_deferred = false;
425 if (prov_params && !ISZEROMACADDR(session->session_mac)) {
426 /* This connection is for ASP session */
427 if (prov_params->status == WFD_OEM_SC_FAIL_INVALID_PARAMS) {
428 WDS_LOGD("ASP prov disc deferred. wait response.");//LCOV_EXCL_LINE
429 wfd_asp_connect_status(session->session_mac,
431 ASP_CONNECT_STATUS_REQUEST_DEFERRED,
436 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
440 void wfd_event_prov_disc_fail(wfd_oem_event_s *event)
442 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
444 wfd_manager_s *manager = wfd_get_manager();
445 wfd_session_s *session = NULL;
446 unsigned char *peer_addr = NULL;
447 char peer_mac_address[MACSTR_LEN+1] = {0, };
449 session = (wfd_session_s*) manager->session;
451 WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
452 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
456 peer_addr = wfd_session_get_peer_addr(session);
458 WDS_LOGE("Session do not have peer");//LCOV_EXCL_LINE
459 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
463 if (manager->is_asp_supported) {
464 if (__asp_prov_disc_deferred(session, event->edata)) {
465 /* start listen to wait for provision discovery request from peer */
466 wfd_oem_scan_param_s param;
467 memset(¶m, 0x0, sizeof(wfd_oem_scan_param_s));
468 param.scan_mode = WFD_OEM_SCAN_MODE_PASSIVE;
469 wfd_oem_start_scan(manager->oem_ops, ¶m);
470 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
475 snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
476 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
478 g_variant_new("(iis)",
479 WIFI_DIRECT_ERROR_CONNECTION_FAILED,
480 WFD_EVENT_CONNECTION_RSP,
482 if (wfd_asp_is_asp_session(session)) {
483 WDS_LOGD("ASP prov disc failed. remove session.");//LCOV_EXCL_LINE
484 wfd_asp_connect_status(session->session_mac,
486 ASP_CONNECT_STATUS_REQUEST_FAILED,
490 if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
491 wfd_group_s *group = (wfd_group_s*) manager->group;
492 if (group && !group->member_count &&
493 wfd_util_is_remove_group_allowed()) {
494 wfd_destroy_group(manager);
496 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
497 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
499 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
500 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
503 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
504 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
507 wfd_destroy_session(manager);
509 wfd_oem_refresh(manager->oem_ops);
511 /* After connection failed, scan again */
512 wfd_oem_scan_param_s param;
513 memset(¶m, 0x0, sizeof(wfd_oem_scan_param_s));
514 param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
516 param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
517 wfd_oem_start_scan(manager->oem_ops, ¶m);
518 manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
520 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
524 void wfd_event_go_neg_req(wfd_oem_event_s *event)
526 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
528 wfd_manager_s *manager = wfd_get_manager();
529 wfd_group_s *group = (wfd_group_s*) manager->group;
530 if (group && group->role == WFD_DEV_ROLE_GC) {
531 WDS_LOGD("Device has GC role - ignore this go neg request");//LCOV_EXCL_LINE
532 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
536 wfd_oem_dev_data_s *edata = NULL;
539 edata = (wfd_oem_dev_data_s*) event->edata;
540 if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
541 WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
542 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
546 res = _wfd_event_update_peer(manager, edata);
548 WDS_LOGE("Failed to update peer data");//LCOV_EXCL_LINE
549 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
553 wfd_session_process_event(manager, event);
554 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
558 void wfd_event_go_neg_fail(wfd_oem_event_s *event)
560 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
562 wfd_manager_s *manager = wfd_get_manager();
563 wfd_session_s *session = NULL;
564 wfd_oem_conn_data_s *edata = NULL;
565 unsigned char *peer_addr = NULL;
566 char peer_mac_address[MACSTR_LEN] = {0, };
568 session = (wfd_session_s*) manager->session;
570 WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
571 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
575 peer_addr = wfd_session_get_peer_addr(session);
577 WDS_LOGE("Session do not have peer");//LCOV_EXCL_LINE
578 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
582 edata = (wfd_oem_conn_data_s*) event->edata;
584 WDS_LOGE("Invalid p2p connection data");//LCOV_EXCL_LINE
585 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
589 if (edata->status < 0 && session->connecting_120) {
590 if (session->retry_gsrc) {
591 g_source_remove(session->retry_gsrc);
592 session->retry_gsrc = 0;
594 session->retry_gsrc = g_idle_add((GSourceFunc) _wfd_connection_retry, session);
595 WDS_LOGD("Connection will be retried");//LCOV_EXCL_LINE
596 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
600 snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
601 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
603 g_variant_new("(iis)",
604 WIFI_DIRECT_ERROR_CONNECTION_FAILED,
605 WFD_EVENT_CONNECTION_RSP,
608 if (wfd_asp_is_asp_session(session)) {
609 wfd_asp_connect_status(session->session_mac,
611 ASP_CONNECT_STATUS_GROUP_FORMATION_FAILED,
615 wfd_destroy_session(manager);
616 wfd_destroy_group(manager);
617 manager->local->dev_role = WFD_DEV_ROLE_NONE;
618 _wfd_event_reset_state(manager);
619 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
623 void wfd_event_go_neg_done(wfd_oem_event_s *event)
625 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
627 wfd_manager_s *manager = wfd_get_manager();
628 wfd_session_s *session = NULL;
629 wfd_oem_conn_data_s *edata = NULL;
630 wfd_device_s *peer = NULL;
632 edata = (wfd_oem_conn_data_s*) event->edata;
634 WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
635 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
639 session = (wfd_session_s*) manager->session;
640 if (session && session->peer) {
641 peer = session->peer;
642 memcpy(peer->intf_addr, edata->peer_intf_addr, MACADDR_LEN);
645 wfd_session_process_event(manager, event);
646 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
650 void wfd_event_wps_fail(wfd_oem_event_s *event)
652 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
654 wfd_manager_s *manager = wfd_get_manager();
655 wfd_session_s *session = NULL;
656 unsigned char *peer_addr = NULL;
658 session = (wfd_session_s*) manager->session;
660 WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
661 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
665 peer_addr = wfd_session_get_peer_addr(session);
667 WDS_LOGE("Session do not have peer");//LCOV_EXCL_LINE
668 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
672 char peer_mac_address[MACSTR_LEN+1] = {0, };
673 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
674 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
676 g_variant_new("(iis)",
677 WIFI_DIRECT_ERROR_CONNECTION_FAILED,
678 WFD_EVENT_CONNECTION_RSP,
680 if (wfd_asp_is_asp_session(session)) {
681 wfd_asp_connect_status(session->session_mac,
683 ASP_CONNECT_STATUS_GROUP_FORMATION_STARTED,
687 if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
688 wfd_group_s *group = (wfd_group_s*) manager->group;
689 if (group && !group->member_count &&
690 wfd_util_is_remove_group_allowed()) {
691 wfd_destroy_group(manager);
693 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
694 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
696 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
697 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
700 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
701 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
704 wfd_destroy_session(manager);
706 wfd_oem_refresh(manager->oem_ops);
708 /* After connection failed, scan again */
709 wfd_oem_scan_param_s param;
710 memset(¶m, 0x0, sizeof(wfd_oem_scan_param_s));
711 param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
713 param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
714 wfd_oem_start_scan(manager->oem_ops, ¶m);
715 manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
717 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
721 void wfd_event_wps_done(wfd_oem_event_s *event)
723 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
725 wfd_manager_s *manager = wfd_get_manager();
726 wfd_session_process_event(manager, event);
728 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
732 void wfd_event_key_neg_fail(wfd_oem_event_s *event)
734 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
736 wfd_manager_s *manager = wfd_get_manager();
737 wfd_session_s *session = NULL;
738 unsigned char *peer_addr = NULL;
739 char peer_mac_address[MACSTR_LEN+1] = {0, };
741 session = (wfd_session_s*) manager->session;
743 WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
744 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
748 peer_addr = wfd_session_get_peer_addr(session);
750 WDS_LOGE("Session do not has peer");//LCOV_EXCL_LINE
751 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
755 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
756 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
758 g_variant_new("(iis)",
759 WIFI_DIRECT_ERROR_CONNECTION_FAILED,
760 WFD_EVENT_CONNECTION_RSP,
762 if (wfd_asp_is_asp_session(session)) {
763 wfd_asp_connect_status(session->session_mac,
765 ASP_CONNECT_STATUS_GROUP_FORMATION_STARTED,
769 if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
770 wfd_group_s *group = (wfd_group_s*) manager->group;
771 if (group && !group->member_count &&
772 wfd_util_is_remove_group_allowed()) {
773 wfd_destroy_group(manager);
775 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
776 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
778 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
779 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
782 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
783 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
786 wfd_destroy_session(manager);
788 wfd_oem_refresh(manager->oem_ops);
790 /* After connection failed, scan again */
791 wfd_oem_scan_param_s param;
792 memset(¶m, 0x0, sizeof(wfd_oem_scan_param_s));
793 param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
795 param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
796 wfd_oem_start_scan(manager->oem_ops, ¶m);
797 manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
799 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
803 void wfd_event_key_neg_done(wfd_oem_event_s *event)
805 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
807 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
811 void wfd_event_conn_fail(wfd_oem_event_s *event)
813 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
815 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
819 void wfd_event_conn_done(wfd_oem_event_s *event)
821 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
823 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
827 void wfd_event_group_created(wfd_oem_event_s *event)
829 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
831 wfd_manager_s *manager = wfd_get_manager();
832 wfd_group_s *group = (wfd_group_s*) manager->group;
833 wfd_session_s *session = (wfd_session_s*) manager->session;
836 group = wfd_create_pending_group(manager, event->intf_addr);
838 WDS_LOGE("Failed to create pending group");//LCOV_EXCL_LINE
839 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
843 manager->group = group;
846 wfd_group_complete(manager, event);
848 if (group->role == WFD_DEV_ROLE_GC && session) {
849 wfd_device_s *peer = session->peer;
851 WDS_LOGE("Unexpected event. Peer doesn't exist");//LCOV_EXCL_LINE
855 wfd_update_peer(manager, peer);
857 if (peer->ip_type == WFD_IP_TYPE_OVER_EAPOL) {
858 char peer_mac_address[MACSTR_LEN+1] = {0, };
860 wfd_util_ip_over_eap_assign(peer, event->ifname);
862 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
863 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
865 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
866 WFD_EVENT_CONNECTION_RSP,
868 if (wfd_asp_is_asp_session(session)) {
869 wfd_asp_connect_status(session->session_mac,
871 ASP_CONNECT_STATUS_GROUP_FORMATION_COMPLETED,
873 wfd_asp_session_peer_ip(session->session_mac, session->session_id,
874 session->service_mac, peer->ip_addr);
876 wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTED);
877 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTED);
879 wfd_destroy_session(manager);
881 wfd_peer_clear_all(manager);
883 if (group->flags & WFD_GROUP_FLAG_AUTONOMOUS) {
884 wfd_manager_dbus_emit_signal(WFD_MANAGER_GROUP_INTERFACE,
886 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
887 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
890 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
894 void wfd_event_group_destroyed(wfd_oem_event_s *event)
896 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
898 wfd_manager_s *manager = wfd_get_manager();
899 char peer_mac_address[MACSTR_LEN+1] = {0, };
900 unsigned char *peer_addr = wfd_session_get_peer_addr(manager->session);
902 if (peer_addr != NULL)
903 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
905 g_snprintf(peer_mac_address, MACSTR_LEN, "%s", "");
907 if (manager->state == WIFI_DIRECT_STATE_DISCONNECTING) {
908 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
910 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
911 WFD_EVENT_DISCONNECTION_RSP,
914 } else if (manager->state == WIFI_DIRECT_STATE_CONNECTING && manager->session) {
915 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
917 g_variant_new("(iis)", WIFI_DIRECT_ERROR_CONNECTION_FAILED,
918 WFD_EVENT_CONNECTION_RSP,
920 wfd_session_s *session = manager->session;
921 if (wfd_asp_is_asp_session(session)) {
922 wfd_asp_connect_status(session->session_mac,
924 ASP_CONNECT_STATUS_GROUP_FORMATION_FAILED,
927 } else if (manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
928 if (manager->local->dev_role != WFD_DEV_ROLE_GO) {
929 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
931 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
932 WFD_EVENT_DISCONNECTION_RSP,
935 wfd_manager_dbus_emit_signal(WFD_MANAGER_GROUP_INTERFACE,
939 WDS_LOGD("Unexpected event(GROUP_DESTROYED). Ignore it");//LCOV_EXCL_LINE
940 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
944 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
945 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
946 wfd_destroy_session(manager);
947 wfd_destroy_group(manager);
948 manager->local->dev_role = WFD_DEV_ROLE_NONE;
950 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
954 void wfd_event_invitation_req(wfd_oem_event_s *event)
956 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
958 wfd_manager_s *manager = wfd_get_manager();
959 wfd_device_s *peer = NULL;
960 wfd_session_s *session = NULL;
961 wfd_oem_invite_data_s *edata = NULL;
963 char peer_mac_address[MACSTR_LEN+1] = {0, };
965 peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
967 WDS_LOGD("Invitation from unknown peer. Add new peer");//LCOV_EXCL_LINE
968 peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
970 WDS_LOGE("Failed to add peer for invitation");//LCOV_EXCL_LINE
971 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
975 peer->dev_role = WFD_DEV_ROLE_GO;
977 edata = (wfd_oem_invite_data_s*) event->edata;
978 memcpy(peer->intf_addr, edata->bssid, MACADDR_LEN);
979 wfd_update_peer_time(manager, event->dev_addr);
981 if (!ISZEROMACADDR(edata->go_dev_addr))
982 session = wfd_create_session(manager, edata->go_dev_addr,
983 manager->req_wps_mode,
984 SESSION_DIRECTION_INCOMING);
986 session = wfd_create_session(manager, event->dev_addr,
987 manager->req_wps_mode,
988 SESSION_DIRECTION_INCOMING);
990 WDS_LOGE("Failed to create session");//LCOV_EXCL_LINE
991 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
994 session->type = SESSION_TYPE_INVITE;
995 wfd_session_timer(session, 1);
997 wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
998 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTING);
1000 res = wfd_session_start(session);
1002 WDS_LOGE("Failed to start session");//LCOV_EXCL_LINE
1003 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1007 if (!ISZEROMACADDR(edata->go_dev_addr))
1008 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR,
1009 MAC2STR(edata->go_dev_addr));
1011 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR,
1012 MAC2STR(event->dev_addr));
1014 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1016 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
1017 WFD_EVENT_CONNECTION_REQ,
1020 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1024 void wfd_event_invitation_res(wfd_oem_event_s *event)
1026 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1028 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1032 void wfd_event_sta_connected(wfd_oem_event_s *event)
1034 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1036 wfd_manager_s *manager = wfd_get_manager();
1037 wfd_session_s *session = (wfd_session_s*) manager->session;
1038 wfd_group_s *group = (wfd_group_s*) manager->group;
1039 wfd_device_s *peer = NULL;
1040 char peer_mac_address[MACSTR_LEN+1] = {0, };
1043 WDS_LOGD("event->dev addr : [" MACSTR "]", MAC2STR(event->dev_addr));
1044 if (session->peer && memcmp(event->dev_addr, session->peer->dev_addr, MACADDR_LEN)) {
1045 WDS_LOGE("Session Device and connected device do not match.Destroy previous session.");
1046 wfd_destroy_session(manager);
1050 if (ISZEROMACADDR(event->dev_addr)) {
1051 WDS_LOGD("Legacy Peer Connected [Peer: " MACSTR "]", MAC2STR(event->intf_addr));
1053 peer = wfd_peer_find_by_addr(manager, event->intf_addr);
1055 WDS_LOGI("Add legacy peer");//LCOV_EXCL_LINE
1056 peer = wfd_add_peer(manager, event->intf_addr, "LEGACY-PEER");
1058 WDS_LOGE("Failed to add Legacy peer.");//LCOV_EXCL_LINE
1059 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1064 if (wfd_group_add_member(group, peer->dev_addr) == -1) {
1065 WDS_LOGE("Failed to add Legacy peer.");//LCOV_EXCL_LINE
1066 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1070 memcpy(peer->intf_addr, event->intf_addr, MACADDR_LEN);
1071 peer->state = WFD_PEER_STATE_CONNECTED;
1072 peer->is_p2p = FALSE;
1074 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
1075 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1077 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
1078 WFD_EVENT_CONNECTION_RSP,
1081 wfd_util_dhcps_wait_ip_leased(peer);
1082 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1086 session = (wfd_session_s*) manager->session;
1087 if (!session && group) {
1088 if (group->flags & WFD_GROUP_FLAG_PERSISTENT) {
1089 session = wfd_create_session(manager, event->dev_addr,
1091 SESSION_DIRECTION_INCOMING);
1093 WDS_LOGE("Failed to create session with peer [" MACSTR "]",
1094 MAC2STR(event->dev_addr));
1095 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1099 WDS_LOGD("Unexpected event. Session is NULL [peer: " MACSECSTR "]",
1100 MAC2SECSTR(event->dev_addr));
1102 wfd_oem_destroy_group(manager->oem_ops, group->ifname);
1103 wfd_destroy_group(manager);
1106 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
1107 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
1108 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1113 peer = wfd_session_get_peer(session);
1115 WDS_LOGE("Peer not found");//LCOV_EXCL_LINE
1116 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1119 WDS_LOGD("peer->dev addr : [" MACSTR "]", MAC2STR(session->peer->dev_addr));
1121 group = (wfd_group_s*) manager->group;
1123 group = wfd_create_pending_group(manager, event->intf_addr);
1125 WDS_LOGE("Failed to create pending group");//LCOV_EXCL_LINE
1126 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1129 manager->group = group;
1131 wfd_group_add_member(group, peer->dev_addr);
1133 session->state = SESSION_STATE_COMPLETED;
1134 peer->state = WFD_PEER_STATE_CONNECTED;
1136 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
1137 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
1139 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
1140 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1142 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
1143 WFD_EVENT_CONNECTION_RSP,
1146 wfd_update_peer(manager, peer);
1147 if (event->ip_addr_peer[3]) {
1148 peer->ip_type = WFD_IP_TYPE_OVER_EAPOL;
1149 memcpy(peer->client_ip_addr, event->ip_addr_peer, IPADDR_LEN);
1150 WDS_LOGE("Peer's client IP [" IPSTR "]", IP2STR((char*) &peer->client_ip_addr));
1151 memcpy(peer->go_ip_addr, manager->local->ip_addr, IPADDR_LEN);
1152 WDS_LOGE("Peer's GO IP [" IPSTR "]", IP2STR((char*) &peer->go_ip_addr));
1154 if (peer->ip_type == WFD_IP_TYPE_OVER_EAPOL) {
1155 char peer_mac_address[MACSTR_LEN+1] = {0,};
1156 char assigned_ip_address[IPSTR_LEN+1] = {0,};
1158 memcpy(peer->ip_addr, peer->client_ip_addr, IPADDR_LEN);
1160 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
1161 g_snprintf(assigned_ip_address, IPSTR_LEN, IPSTR, IP2STR(peer->ip_addr));
1162 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1164 g_variant_new("(ss)", peer_mac_address,
1165 assigned_ip_address));
1166 if (wfd_asp_is_asp_session(session)) {
1167 wfd_asp_connect_status(session->session_mac,
1168 session->session_id,
1169 ASP_CONNECT_STATUS_GROUP_FORMATION_COMPLETED,
1172 wfd_asp_session_peer_ip(session->session_mac, session->session_id,
1173 session->service_mac, peer->ip_addr);
1176 wfd_util_dhcps_wait_ip_leased(peer);
1178 wfd_destroy_session(manager);
1180 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1184 void wfd_event_sta_disconnected(wfd_oem_event_s *event)
1186 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1188 wfd_manager_s *manager = wfd_get_manager();
1189 wfd_group_s *group = NULL;
1190 wfd_device_s *peer = NULL;
1191 unsigned char peer_addr[MACADDR_LEN] = {0, };
1192 char peer_mac_address[MACSTR_LEN+1] = {0, };
1193 char peer_dev_name[DEV_NAME_LEN+1] = {0, };
1196 group = (wfd_group_s*) manager->group;
1198 WDS_LOGE("Group not found");//LCOV_EXCL_LINE
1199 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1203 if (ISZEROMACADDR(event->dev_addr)) {
1204 WDS_LOGD("Legacy Peer Disconnected [Peer: " MACSTR "]", MAC2STR(event->intf_addr));
1205 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(event->intf_addr));
1206 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1208 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
1209 WFD_EVENT_DISCONNECTION_IND,
1212 wfd_group_remove_member(group, event->intf_addr);
1214 if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
1215 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
1216 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
1218 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
1219 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
1221 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1225 peer = wfd_group_find_member_by_addr(group, event->dev_addr);
1227 WDS_LOGE("Failed to find connected peer");//LCOV_EXCL_LINE
1228 peer = wfd_session_get_peer(manager->session);
1230 WDS_LOGE("Failed to find connecting peer");//LCOV_EXCL_LINE
1231 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1236 * If no peer connected and
1237 * disconnected event is not for connecting peer
1238 * then event should be ignored.
1239 * This situation can arrise when own device is GO and
1240 * some connected peer sent disassociation.
1242 if (memcmp(peer->dev_addr, event->dev_addr, MACADDR_LEN)) {
1243 WDS_LOGE("Unexpected event, Ignore it...");//LCOV_EXCL_LINE
1244 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1248 memcpy(peer_addr, peer->dev_addr, MACADDR_LEN);
1249 g_strlcpy(peer_dev_name, peer->dev_name, DEV_NAME_LEN+1);
1252 * If state is not DISCONNECTING, connection is finished by peer.
1253 * Required the check also, when Device is Group Owner and state is DISCOVERING.
1255 if (manager->state >= WIFI_DIRECT_STATE_CONNECTED ||
1256 (manager->state == WIFI_DIRECT_STATE_DISCOVERING &&
1257 manager->local->dev_role == WFD_DEV_ROLE_GO)) {
1258 member_cnt = wfd_group_remove_member(group, peer_addr);
1259 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
1261 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1263 g_variant_new("(iiss)", WIFI_DIRECT_ERROR_NONE,
1264 WFD_EVENT_DISASSOCIATION_IND,
1265 peer_mac_address, peer_dev_name));
1267 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1269 g_variant_new("(iiss)", WIFI_DIRECT_ERROR_NONE,
1270 WFD_EVENT_DISCONNECTION_IND,
1271 peer_mac_address, peer_dev_name));
1274 } else if (manager->state == WIFI_DIRECT_STATE_CONNECTING &&
1275 /* Some devices(GO) send disconnection message before connection completed.
1276 * This message should be ignored when device is not GO */
1277 manager->local->dev_role == WFD_DEV_ROLE_GO) {
1278 if (WFD_PEER_STATE_CONNECTED == peer->state) {
1279 WDS_LOGD("Peer is already Connected !!!");//LCOV_EXCL_LINE
1280 wfd_group_remove_member(group, peer_addr);
1281 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
1282 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1284 g_variant_new("(iiss)", WIFI_DIRECT_ERROR_NONE,
1285 WFD_EVENT_DISASSOCIATION_IND,
1286 peer_mac_address, peer_dev_name));
1288 } else if (WFD_PEER_STATE_CONNECTING == peer->state) {
1289 WDS_LOGD("Peer is Connecting...");//LCOV_EXCL_LINE
1290 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
1291 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1293 g_variant_new("(iis)", WIFI_DIRECT_ERROR_CONNECTION_FAILED,
1294 WFD_EVENT_CONNECTION_RSP,
1296 wfd_session_s *session = manager->session;
1297 if (wfd_asp_is_asp_session(session)) {
1298 wfd_asp_connect_status(session->session_mac,
1299 session->session_id,
1300 ASP_CONNECT_STATUS_GROUP_FORMATION_FAILED,
1304 WDS_LOGE("Unexpected Peer State. Ignore it");//LCOV_EXCL_LINE
1305 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1309 WDS_LOGE("Unexpected event. Ignore it");//LCOV_EXCL_LINE
1310 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1314 /* If there is no member, GO should be destroyed */
1316 group = (wfd_group_s*)manager->group;
1317 if (group && !group->member_count && wfd_util_is_remove_group_allowed()) {
1318 wfd_oem_destroy_group(manager->oem_ops, group->ifname);
1319 wfd_destroy_group(manager);
1320 wfd_peer_clear_all(manager);
1323 wfd_destroy_session(manager);
1324 _wfd_event_reset_state(manager);
1326 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1330 void wfd_event_terminating(wfd_oem_event_s *event)
1332 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1334 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1338 void wfd_event_group_formation_failure(wfd_oem_event_s *event)
1340 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1342 wfd_manager_s *manager = wfd_get_manager();
1343 wfd_session_s *session = (wfd_session_s*) manager->session;
1345 WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
1346 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1350 unsigned char *peer_addr = wfd_session_get_peer_addr(session);
1352 WDS_LOGE("Session do not has peer");//LCOV_EXCL_LINE
1353 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1357 char peer_mac_address[MACSTR_LEN+1] = {0, };
1358 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
1359 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1361 g_variant_new("(iis)", WIFI_DIRECT_ERROR_CONNECTION_FAILED,
1362 WFD_EVENT_CONNECTION_RSP,
1365 if (wfd_asp_is_asp_session(session)) {
1366 wfd_asp_connect_status(session->session_mac,
1367 session->session_id,
1368 ASP_CONNECT_STATUS_GROUP_FORMATION_FAILED,
1372 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
1373 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
1374 wfd_destroy_session(manager);
1375 manager->local->dev_role = WFD_DEV_ROLE_NONE;
1377 wfd_oem_refresh(manager->oem_ops);
1379 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1384 * This event is generated by supplicant when persitent invite is auto accepted
1385 * so that wfd-manager can get indication that a peer will be connected in near future.
1386 * session is started for that peer, so that it is not ignored when connected.
1388 void wfd_event_invitation_accepted(wfd_oem_event_s *event)
1391 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1393 wfd_manager_s *manager = wfd_get_manager();
1394 wfd_session_s *session = (wfd_session_s*) manager->session;
1395 wfd_device_s *peer = NULL;
1396 char peer_mac_address[MACSTR_LEN+1] = {0, };
1398 peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
1400 WDS_LOGI("Invitation from unknown peer. Add new peer");//LCOV_EXCL_LINE
1401 peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
1403 WDS_LOGE("Failed to add peer for invitation");//LCOV_EXCL_LINE
1404 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1408 /**By default, peer device information is complete but there's some exception
1409 * if DEV-FOUND event was not preceding before connection start event.
1411 wfd_update_peer(manager, peer);
1412 peer->dev_role = WFD_DEV_ROLE_GO;
1415 session = wfd_create_session(manager, event->dev_addr,
1416 event->wps_mode, SESSION_DIRECTION_INCOMING);
1418 WDS_LOGE("Failed to create session with peer [" MACSTR "]",
1419 MAC2STR(event->dev_addr));
1420 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1425 session->state = SESSION_STATE_WPS;
1426 wfd_session_timer(session, 1);
1428 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
1429 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1431 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
1432 WFD_EVENT_CONNECTION_IN_PROGRESS,
1435 wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
1436 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTING);
1438 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1441 void wfd_event_serv_disc_resp(wfd_oem_event_s *event)
1443 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1445 wfd_manager_s *manager = wfd_get_manager();
1447 char response_data[256] = {0, };
1448 char peer_mac_address[MACSTR_LEN+1] = {0, };
1450 if (!manager->is_service_discovery_supported) {
1451 WDS_LOGD("service discovery not supported");//LCOV_EXCL_LINE
1455 wfd_update_peer_time(manager, event->dev_addr);
1457 if (event->edata_type == WFD_OEM_EDATA_TYPE_NEW_SERVICE) {
1458 wfd_oem_new_service_s *service = NULL;;
1460 GList *services = (GList*) event->edata;
1463 WDS_LOGD("%d service data found", event->dev_role);
1465 temp = g_list_first(services);
1466 while (temp && count < event->dev_role) {
1467 service = (wfd_oem_new_service_s*) temp->data;
1468 service_type = service->protocol;
1469 if (service->protocol == WFD_OEM_SERVICE_TYPE_BONJOUR) {
1470 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
1471 g_snprintf(response_data, 256, "%s|%s", service->data.bonjour.query, service->data.bonjour.rdata);
1472 WDS_LOGD("Found service: [%d: %s] - [" MACSECSTR "]", service->protocol,
1473 service->data.bonjour.query, MAC2SECSTR(event->dev_addr));
1475 WDS_LOGD("Found service is not supported");//LCOV_EXCL_LINE
1479 wfd_manager_dbus_emit_signal(WFD_MANAGER_SERVICE_INTERFACE,
1481 g_variant_new("(iss)", service_type,
1485 temp = g_list_next(temp);
1490 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1494 void wfd_event_serv_disc_started(wfd_oem_event_s *event)
1496 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1498 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1503 void wfd_event_asp_serv_resp(wfd_oem_event_s *event)
1505 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1507 wfd_manager_s *manager = wfd_get_manager();
1508 wfd_oem_asp_service_s *service = NULL;
1509 GVariantBuilder *builder = NULL;
1510 GVariant *params = NULL;
1512 if (manager && !manager->is_asp_supported) {
1513 WDS_LOGD("ASP is not supported.");//LCOV_EXCL_LINE
1514 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1518 service = (wfd_oem_asp_service_s *)event->edata;
1519 if (service == NULL) {
1520 WDS_LOGE("P2P service found event has NULL information");//LCOV_EXCL_LINE
1521 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1525 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1526 g_variant_builder_add(builder, "{sv}", "search_id", g_variant_new("u", service->search_id));
1527 g_variant_builder_add(builder, "{sv}", "service_mac", g_variant_new("s", event->dev_addr));
1528 g_variant_builder_add(builder, "{sv}", "advertisement_id", g_variant_new("u", service->adv_id));
1529 g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", service->config_method));
1530 if (service->service_type)
1531 g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", service->service_type));
1532 if (service->service_info)
1533 g_variant_builder_add(builder, "{sv}", "service_info", g_variant_new("s", service->service_info));
1534 g_variant_builder_add(builder, "{sv}", "status", g_variant_new("y", service->status));
1535 params = g_variant_new("(a{sv})", builder);
1536 g_variant_builder_unref(builder);
1538 wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE,
1542 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1546 int __wfd_handle_asp_prov(wfd_manager_s *manager, wfd_oem_event_s *event)
1548 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1550 wfd_session_s *session = NULL;
1551 wfd_oem_asp_prov_s *prov_params = NULL;
1554 prov_params = (wfd_oem_asp_prov_s *)event->edata;
1555 if (prov_params == NULL) {
1556 WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
1557 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1561 res = wfd_session_process_event(manager, event);
1562 session = (wfd_session_s *)manager->session;
1563 if (res < 0 || session == NULL) {
1564 WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
1565 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1568 session->session_id = prov_params->session_id;
1569 memcpy(session->session_mac, prov_params->session_mac, MACADDR_LEN);
1570 memcpy(session->service_mac, prov_params->service_mac, MACADDR_LEN);
1572 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1576 int __wfd_handle_asp_prov_done(wfd_session_s *session, wfd_oem_event_s *event)
1578 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1580 wfd_oem_asp_prov_s *prov_params = NULL;
1581 prov_params = (wfd_oem_asp_prov_s *)event->edata;
1584 if (prov_params->persist &&
1585 (prov_params->network_role || prov_params->network_config)) {
1586 WDS_LOGE("Persistent group is used but "
1587 "conncap/dev_passwd_id are present");//LCOV_EXCL_LINE
1588 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1592 if (!prov_params->persist &&
1593 (!prov_params->network_role && !prov_params->network_config)) {
1594 WDS_LOGE("Persistent group not used but "
1595 "conncap/dev_passwd_id are missing");//LCOV_EXCL_LINE
1596 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1600 if (session->wps_mode == WFD_OEM_WPS_MODE_P2PS)
1601 g_strlcpy(session->wps_pin, OEM_DEFAULT_P2PS_PIN, OEM_PINSTR_LEN + 1);
1603 if (prov_params->persist) {
1604 res = wfd_session_asp_persistent_connect(session, prov_params->persistent_group_id);
1605 } else if (prov_params->network_role == WFD_OEM_ASP_SESSION_ROLE_NEW) {
1606 res = wfd_session_asp_connect(session, WFD_OEM_ASP_SESSION_ROLE_NEW);
1607 } else if (prov_params->network_role == WFD_OEM_ASP_SESSION_ROLE_CLIENT) {
1608 res = wfd_session_asp_connect(session, WFD_OEM_ASP_SESSION_ROLE_CLIENT);
1609 } else if (prov_params->network_role == WFD_OEM_ASP_SESSION_ROLE_GO) {
1610 res = wfd_session_asp_connect(session, WFD_OEM_ASP_SESSION_ROLE_GO);
1611 WDS_LOGD("don't need to take action.");//LCOV_EXCL_LINE
1614 WDS_LOGE("Unhandled event");//LCOV_EXCL_LINE
1615 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1619 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1623 void wfd_event_asp_prov_start(wfd_oem_event_s *event)
1625 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1627 wfd_manager_s *manager = wfd_get_manager();
1628 wfd_session_s *session = NULL;
1629 wfd_oem_asp_prov_s *prov_params = NULL;
1632 if (manager == NULL || event == NULL || event->edata == NULL) {
1633 WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
1634 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1638 if (!manager->is_asp_supported) {
1639 WDS_LOGD("ASP is not supported.");//LCOV_EXCL_LINE
1640 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1644 prov_params = (wfd_oem_asp_prov_s *)event->edata;
1645 res = __wfd_handle_asp_prov(manager, event);
1646 session = (wfd_session_s *)manager->session;
1647 if (res < 0 || session == NULL) {
1648 WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
1649 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1653 WDS_LOGD("created session [%u] with peer [" MACSTR "]", session->session_id,
1654 MAC2STR(session->session_mac));
1656 /* Incomming Session, auto_accept = TRUE emit request Received */
1657 /* generate SessionConfigRequest if event->wps_mode is not P2PS and return*/
1659 wfd_session_timer(session, 1);
1660 wfd_asp_session_request(prov_params);
1661 wfd_asp_connect_status(prov_params->session_mac,
1662 prov_params->session_id,
1663 ASP_CONNECT_STATUS_REQUEST_RECEIVED,
1666 wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
1668 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1672 void wfd_event_asp_prov_done(wfd_oem_event_s *event)
1674 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1676 wfd_manager_s *manager = wfd_get_manager();
1677 wfd_session_s *session = NULL;
1678 wfd_oem_asp_prov_s *prov_params;
1681 if (manager == NULL || event == NULL || event->edata == NULL) {
1682 WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
1683 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1687 if (!manager->is_asp_supported) {
1688 WDS_LOGD("ASP is not supported.");//LCOV_EXCL_LINE
1689 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1693 prov_params = (wfd_oem_asp_prov_s *)event->edata;
1694 /* Incomming Session, auto_accept = TRUE emit request Received */
1695 /* generate SessionConfigRequest if event->wps_mode is not P2PS and return*/
1696 if (manager->session == NULL) {
1697 wfd_asp_session_request(prov_params);
1698 wfd_asp_connect_status(prov_params->session_mac,
1699 prov_params->session_id,
1700 ASP_CONNECT_STATUS_REQUEST_RECEIVED,
1704 res = __wfd_handle_asp_prov(manager, event);
1705 session = (wfd_session_s *)manager->session;
1706 if (res < 0 || session == NULL) {
1707 WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
1708 wfd_destroy_session(manager);
1709 wfd_oem_refresh(manager->oem_ops);
1710 _wfd_event_reset_state(manager);
1711 wfd_asp_connect_status(prov_params->session_mac,
1712 prov_params->session_id,
1713 ASP_CONNECT_STATUS_REQUEST_FAILED,
1715 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1719 if (prov_params->status != WFD_OEM_SC_SUCCESS &&
1720 prov_params->status != WFD_OEM_SC_SUCCESS_ACCEPTED_BY_USER) {
1721 WDS_LOGD("ASP-PROV failed. remove session.");//LCOV_EXCL_LINE
1722 WDS_LOGD("Cancel p2p listen when receiving probe request after disconnection.");
1724 res = wfd_oem_stop_scan(manager->oem_ops);
1726 WDS_LOGE("Failed to stop scan");
1728 WDS_LOGD("Success to start scan");
1731 if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
1732 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
1733 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
1735 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
1736 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
1738 wfd_destroy_session(manager);
1739 wfd_oem_refresh(manager->oem_ops);
1740 _wfd_event_reset_state(manager);
1741 wfd_asp_connect_status(prov_params->session_mac,
1742 prov_params->session_id,
1743 ASP_CONNECT_STATUS_REQUEST_FAILED,
1745 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1749 wfd_asp_connect_status(prov_params->session_mac,
1750 prov_params->session_id,
1751 ASP_CONNECT_STATUS_REQUEST_ACCEPTED,
1754 wfd_asp_connect_status(prov_params->session_mac,
1755 prov_params->session_id,
1756 ASP_CONNECT_STATUS_GROUP_FORMATION_STARTED,
1758 res = __wfd_handle_asp_prov_done(session, event);
1760 WDS_LOGE("Connect failed. remove session.");//LCOV_EXCL_LINE
1761 wfd_destroy_session(manager);
1762 wfd_oem_refresh(manager->oem_ops);
1763 _wfd_event_reset_state(manager);
1765 wfd_asp_connect_status(prov_params->session_mac,
1766 prov_params->session_id,
1767 ASP_CONNECT_STATUS_GROUP_FORMATION_FAILED,
1769 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1773 WDS_LOGD("Provision done succeeded.");//LCOV_EXCL_LINE
1774 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1778 void wfd_event_init(wfd_oem_event_cbs_s *event_cbs)
1780 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1783 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1787 event_cbs->deactivated_cb = wfd_event_deactivated;
1788 event_cbs->peer_found_cb = wfd_event_peer_found;
1789 event_cbs->peer_disappeared_cb = wfd_event_peer_disappeared;
1790 event_cbs->discovery_finished_cb = wfd_event_discovery_finished;
1792 event_cbs->prov_disc_req_cb = wfd_event_prov_disc_req;
1793 event_cbs->prov_disc_resp_cb = wfd_event_prov_disc_resp;
1794 event_cbs->prov_disc_fail_cb = wfd_event_prov_disc_fail;
1796 event_cbs->go_neg_req_cb = wfd_event_go_neg_req;
1797 event_cbs->go_neg_fail_cb = wfd_event_go_neg_fail;
1798 event_cbs->go_neg_done_cb = wfd_event_go_neg_done;
1800 event_cbs->wps_fail_cb = wfd_event_wps_fail;
1801 event_cbs->wps_done_cb = wfd_event_wps_done;
1802 event_cbs->key_neg_fail_cb = wfd_event_key_neg_fail;
1803 event_cbs->key_neg_done_cb = wfd_event_key_neg_done;
1805 event_cbs->conn_fail_cb = wfd_event_conn_fail;
1806 event_cbs->conn_done_cb = wfd_event_conn_done;
1808 event_cbs->group_created_cb = wfd_event_group_created;
1809 event_cbs->group_destroyed_cb = wfd_event_group_destroyed;
1811 event_cbs->invitation_req_cb = wfd_event_invitation_req;
1812 event_cbs->invitation_resp_cb = wfd_event_invitation_res;
1813 event_cbs->sta_connected_cb = wfd_event_sta_connected;
1814 event_cbs->sta_disconnected_cb = wfd_event_sta_disconnected;
1816 event_cbs->terminating_cb = wfd_event_terminating;
1818 event_cbs->serv_disc_resp_cb = wfd_event_serv_disc_resp;
1819 event_cbs->serv_disc_started_cb = wfd_event_serv_disc_started;
1821 event_cbs->group_formation_failure_cb = wfd_event_group_formation_failure;
1822 event_cbs->invitation_accepted_cb = wfd_event_invitation_accepted;
1824 event_cbs->asp_serv_resp_cb = wfd_event_asp_serv_resp;
1825 event_cbs->asp_prov_start_cb = wfd_event_asp_prov_start;
1826 event_cbs->asp_prov_done_cb = wfd_event_asp_prov_done;
1828 event_cbs->extra_data = NULL;
1830 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE