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);
62 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
63 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
65 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
68 static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *data)
70 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
72 wfd_device_s *peer = NULL;
74 if (!manager || !data) {
75 WDS_LOGE("Invalid parameter");
76 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
80 peer = wfd_peer_find_by_dev_addr(manager, data->p2p_dev_addr);
82 peer = wfd_add_peer(manager, data->p2p_dev_addr, data->name);
84 WDS_LOGE("Failed to add peer");
85 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
89 if (strcmp(peer->dev_name, data->name)) {
90 g_strlcpy(peer->dev_name, data->name, DEV_NAME_LEN + 1);
91 WDS_LOGD("Device name is changed [" MACSECSTR ": %s]",
92 MAC2SECSTR(peer->dev_addr), peer->dev_name);
95 peer->pri_dev_type = data->pri_dev_type;
96 peer->sec_dev_type = data->sec_dev_type;
97 peer->config_methods = data->config_methods;
98 peer->dev_flags = data->dev_flags;
99 peer->group_flags = data->group_flags;
100 peer->dev_role = data->dev_role;
101 peer->rssi = data->rssi;
102 WDS_LOGD("Peer RSSI value is %d", peer->rssi);
104 if (manager->is_wifi_display_supported)
105 memcpy(&(peer->display), &(data->display), sizeof(wfd_display_s));
110 peer->vsie = g_strdup(data->vsie);
114 WDS_LOGD("Peer name: [%s], vsie: [%s]", peer->dev_name, peer->vsie);
116 #if !(__GNUC__ <= 4 && __GNUC_MINOR__ < 8)
117 wfd_util_get_current_time(&peer->time);
120 gettimeofday(&tval, NULL);
121 peer->time = tval.tv_sec;
123 WDS_LOGI("Update time [%s - %ld]", peer->dev_name, peer->time);
125 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
129 gboolean _wfd_connection_retry(gpointer *data)
131 wfd_session_s *session = (wfd_session_s*) data;
133 WDS_LOGE("Session is NULL");
134 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
135 return G_SOURCE_REMOVE;
138 switch (session->state) {
139 case SESSION_STATE_STARTED:
140 WDS_LOGD("PD again");
141 wfd_session_start(session);
143 case SESSION_STATE_GO_NEG:
144 WDS_LOGD("Negotiation again");
145 wfd_session_connect(session);
147 case SESSION_STATE_WPS:
148 WDS_LOGD("WPS again");
149 wfd_session_wps(session);
152 WDS_LOGE("Invalid session state [%d]", session->state);
155 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
156 return G_SOURCE_REMOVE;
159 void wfd_event_deactivated(wfd_oem_event_s *event)
161 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
163 wfd_manager_s *manager = wfd_get_manager();
165 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
167 g_variant_new("(i)", WIFI_DIRECT_ERROR_NONE));
169 wfd_destroy_session(manager);
170 wfd_destroy_group(manager);
171 wfd_peer_clear_all(manager);
172 wfd_local_reset_data(manager);
174 wfd_state_set(manager, WIFI_DIRECT_STATE_DEACTIVATED);
175 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_DEACTIVATED);
176 manager->req_wps_mode = WFD_WPS_MODE_PBC;
178 if (manager->is_connection_agent)
179 wfd_util_stop_wifi_direct_popup();
181 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
185 void wfd_event_peer_found(wfd_oem_event_s *event)
187 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
189 wfd_manager_s *manager = wfd_get_manager();
190 wfd_oem_dev_data_s *edata = NULL;
191 char peer_mac_address[MACSTR_LEN+1] = {0, };
194 edata = (wfd_oem_dev_data_s*) event->edata;
195 if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
196 WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
197 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
201 res = _wfd_event_update_peer(manager, edata);
203 WDS_LOGE("Failed to update peer data");//LCOV_EXCL_LINE
204 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
208 if (manager->state > WIFI_DIRECT_STATE_ACTIVATING &&
209 manager->state != WIFI_DIRECT_STATE_CONNECTING &&
210 manager->state != WIFI_DIRECT_STATE_DISCONNECTING) {
211 snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(edata->p2p_dev_addr));
212 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
214 g_variant_new("(s)", peer_mac_address));
217 if (manager->is_asp_supported) {
219 GVariantBuilder *builder = NULL;
220 GVariant *params = NULL;
221 wfd_oem_advertise_service_s *service;
223 for (list = (GList *)event->asp_services; list != NULL; list = list->next) {
224 service = (wfd_oem_advertise_service_s *)list->data;
226 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
227 g_variant_builder_add(builder, "{sv}", "search_id", g_variant_new("t", service->search_id));
228 g_variant_builder_add(builder, "{sv}", "service_mac", g_variant_new("s", peer_mac_address));
229 g_variant_builder_add(builder, "{sv}", "device_name", g_variant_new("s", edata->name));
230 g_variant_builder_add(builder, "{sv}", "advertisement_id", g_variant_new("u", service->adv_id));
231 g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", service->config_method));
232 if (service->service_type)
233 g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", service->service_type));
234 params = g_variant_new("(a{sv})", builder);
235 g_variant_builder_unref(builder);
237 wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE,
242 for (list = (GList *)event->asp2_services; list != NULL; list = list->next) {
243 service = (wfd_oem_advertise_service_s *)list->data;
245 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
246 g_variant_builder_add(builder, "{sv}", "search_id", g_variant_new("t", service->search_id));
247 g_variant_builder_add(builder, "{sv}", "service_mac", g_variant_new("s", peer_mac_address));
248 g_variant_builder_add(builder, "{sv}", "device_name", g_variant_new("s", edata->name));
249 g_variant_builder_add(builder, "{sv}", "advertisement_id", g_variant_new("u", service->adv_id));
250 g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", service->config_method));
251 if (service->service_type)
252 g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", service->service_type));
253 if (service->instance_name)
254 g_variant_builder_add(builder, "{sv}", "instance_name", g_variant_new("s", service->instance_name));
255 params = g_variant_new("(a{sv})", builder);
256 g_variant_builder_unref(builder);
258 wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE,
263 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
267 void wfd_event_peer_disappeared(wfd_oem_event_s *event)
269 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
271 wfd_manager_s *manager = wfd_get_manager();
272 wfd_session_s *session = NULL;
273 wfd_device_s *peer = NULL;
274 char peer_mac_address[MACSTR_LEN+1] = {0, };
276 session = manager->session;
277 if (session != NULL && session->peer != NULL) {
278 peer = session->peer;
279 WDS_LOGD("session peer [" MACSTR "] lost peer [" MACSTR "]", MAC2STR(peer->dev_addr),
280 MAC2STR(event->dev_addr));
281 if (memcmp(peer->dev_addr, event->dev_addr, MACADDR_LEN) == 0) {
282 WDS_LOGD("peer already in connection");//LCOV_EXCL_LINE
287 wfd_remove_peer(manager, event->dev_addr);
289 snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
290 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
292 g_variant_new("(s)", peer_mac_address));
294 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
298 void wfd_event_discovery_finished(wfd_oem_event_s *event)
300 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
302 wfd_manager_s *manager = wfd_get_manager();
304 if (manager->state != WIFI_DIRECT_STATE_DISCOVERING &&
305 manager->state != WIFI_DIRECT_STATE_ACTIVATED) {
306 WDS_LOGE("Notify finding stopped when discovering or activated. [%d]", manager->state);
307 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
311 if (manager->scan_mode == WFD_SCAN_MODE_PASSIVE) {
312 WDS_LOGE("During passive scan, Discover Finished event will not notified");//LCOV_EXCL_LINE
313 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
317 _wfd_event_reset_state(manager);
318 manager->scan_mode = WFD_SCAN_MODE_NONE;
320 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
324 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
328 void wfd_event_prov_disc_req(wfd_oem_event_s *event)
330 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
332 wfd_manager_s *manager = wfd_get_manager();
333 wfd_device_s *peer = NULL;
334 wfd_device_s *member = NULL;
336 wfd_group_s *group = (wfd_group_s*) manager->group;
338 if (group && group->role == WFD_DEV_ROLE_GC) {
339 WDS_LOGD("Device has GC role - ignore this provision request");//LCOV_EXCL_LINE
340 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
344 member = wfd_group_find_member_by_addr(group, event->dev_addr);
346 /* PD request can be arrived from peer device
347 * when connection is timeout to close connection */
348 WDS_LOGE("Unexpected Event - Member already exist");//LCOV_EXCL_LINE
349 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
353 wfd_oem_dev_data_s *edata = NULL;
355 edata = (wfd_oem_dev_data_s*) event->edata;
356 if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
357 WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
358 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
362 res = _wfd_event_update_peer(manager, edata);
363 peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
365 if (WFD_DEV_ROLE_GO != manager->local->dev_role) {
366 WDS_LOGI("Own device is not GO, updated peer data only.");//LCOV_EXCL_LINE
368 manager->local->wps_mode = event->wps_mode;
369 if (event->wps_mode == WFD_WPS_MODE_PBC ||
370 event->wps_mode == WFD_WPS_MODE_KEYPAD) {
371 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
377 peer->state = WFD_PEER_STATE_CONNECTING;
379 res = wfd_session_process_event(manager, event);
381 WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
383 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
387 void wfd_event_prov_disc_resp(wfd_oem_event_s *event)
389 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
391 wfd_manager_s *manager = wfd_get_manager();
392 wfd_device_s *peer = NULL;
395 wfd_oem_dev_data_s *edata = NULL;
397 edata = (wfd_oem_dev_data_s*) event->edata;
398 if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
399 WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
400 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
404 res = _wfd_event_update_peer(manager, edata);
405 peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
407 peer->state = WFD_PEER_STATE_CONNECTING;
409 res = wfd_session_process_event(manager, event);
411 WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
413 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
417 static bool __asp_prov_disc_deferred(wfd_session_s *session, void *event_data)
419 wfd_oem_asp_prov_s *prov_params = (wfd_oem_asp_prov_s *)event_data;
420 bool is_deferred = false;
422 if (prov_params && !ISZEROMACADDR(session->session_mac)) {
423 /* This connection is for ASP session */
424 if (prov_params->status == WFD_OEM_SC_FAIL_INVALID_PARAMS) {
425 WDS_LOGD("ASP prov disc deferred. wait response.");//LCOV_EXCL_LINE
426 wfd_asp_connect_status(session->session_mac,
428 ASP_CONNECT_STATUS_REQUEST_DEFERRED,
433 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
437 void wfd_event_prov_disc_fail(wfd_oem_event_s *event)
439 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
441 wfd_manager_s *manager = wfd_get_manager();
442 wfd_session_s *session = NULL;
443 unsigned char *peer_addr = NULL;
444 char peer_mac_address[MACSTR_LEN+1] = {0, };
446 session = (wfd_session_s*) manager->session;
448 WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
449 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
453 peer_addr = wfd_session_get_peer_addr(session);
455 WDS_LOGE("Session do not have peer");//LCOV_EXCL_LINE
456 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
460 if (manager->is_asp_supported) {
461 if (__asp_prov_disc_deferred(session, event->edata)) {
462 /* start listen to wait for provision discovery request from peer */
463 wfd_oem_scan_param_s param;
464 memset(¶m, 0x0, sizeof(wfd_oem_scan_param_s));
465 param.scan_mode = WFD_OEM_SCAN_MODE_PASSIVE;
466 wfd_oem_start_scan(manager->oem_ops, ¶m);
467 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
472 snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
473 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
475 g_variant_new("(iis)",
476 WIFI_DIRECT_ERROR_CONNECTION_FAILED,
477 WFD_EVENT_CONNECTION_RSP,
479 if (wfd_asp_is_asp_session(session)) {
480 WDS_LOGD("ASP prov disc failed. remove session.");//LCOV_EXCL_LINE
481 wfd_asp_connect_status(session->session_mac,
483 ASP_CONNECT_STATUS_REQUEST_FAILED,
487 if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
488 wfd_group_s *group = (wfd_group_s*) manager->group;
489 if (group && !group->member_count &&
490 wfd_util_is_remove_group_allowed()) {
491 wfd_destroy_group(manager);
493 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
494 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
496 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
497 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
500 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
501 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
504 wfd_destroy_session(manager);
506 wfd_oem_refresh(manager->oem_ops);
508 /* After connection failed, scan again */
509 wfd_oem_scan_param_s param;
510 memset(¶m, 0x0, sizeof(wfd_oem_scan_param_s));
511 param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
513 param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
514 wfd_oem_start_scan(manager->oem_ops, ¶m);
515 manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
517 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
521 void wfd_event_go_neg_req(wfd_oem_event_s *event)
523 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
525 wfd_manager_s *manager = wfd_get_manager();
526 wfd_group_s *group = (wfd_group_s*) manager->group;
527 if (group && group->role == WFD_DEV_ROLE_GC) {
528 WDS_LOGD("Device has GC role - ignore this go neg request");//LCOV_EXCL_LINE
529 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
533 wfd_oem_dev_data_s *edata = NULL;
536 edata = (wfd_oem_dev_data_s*) event->edata;
537 if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
538 WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
539 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
543 res = _wfd_event_update_peer(manager, edata);
545 WDS_LOGE("Failed to update peer data");//LCOV_EXCL_LINE
546 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
550 wfd_session_process_event(manager, event);
551 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
555 void wfd_event_go_neg_fail(wfd_oem_event_s *event)
557 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
559 wfd_manager_s *manager = wfd_get_manager();
560 wfd_session_s *session = NULL;
561 wfd_oem_conn_data_s *edata = NULL;
562 unsigned char *peer_addr = NULL;
563 char peer_mac_address[MACSTR_LEN] = {0, };
565 session = (wfd_session_s*) manager->session;
567 WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
568 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
572 peer_addr = wfd_session_get_peer_addr(session);
574 WDS_LOGE("Session do not have peer");//LCOV_EXCL_LINE
575 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
579 edata = (wfd_oem_conn_data_s*) event->edata;
581 WDS_LOGE("Invalid p2p connection data");//LCOV_EXCL_LINE
582 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
586 if (edata->status < 0 && session->connecting_120) {
587 if (session->retry_gsrc) {
588 g_source_remove(session->retry_gsrc);
589 session->retry_gsrc = 0;
591 session->retry_gsrc = g_idle_add((GSourceFunc) _wfd_connection_retry, session);
592 WDS_LOGD("Connection will be retried");//LCOV_EXCL_LINE
593 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
597 snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
598 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
600 g_variant_new("(iis)",
601 WIFI_DIRECT_ERROR_CONNECTION_FAILED,
602 WFD_EVENT_CONNECTION_RSP,
605 if (wfd_asp_is_asp_session(session)) {
606 wfd_asp_connect_status(session->session_mac,
608 ASP_CONNECT_STATUS_GROUP_FORMATION_FAILED,
612 wfd_destroy_session(manager);
613 wfd_destroy_group(manager);
614 manager->local->dev_role = WFD_DEV_ROLE_NONE;
615 _wfd_event_reset_state(manager);
616 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
620 void wfd_event_go_neg_done(wfd_oem_event_s *event)
622 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
624 wfd_manager_s *manager = wfd_get_manager();
625 wfd_session_s *session = NULL;
626 wfd_oem_conn_data_s *edata = NULL;
627 wfd_device_s *peer = NULL;
629 edata = (wfd_oem_conn_data_s*) event->edata;
631 WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
632 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
636 session = (wfd_session_s*) manager->session;
637 if (session && session->peer) {
638 peer = session->peer;
639 memcpy(peer->intf_addr, edata->peer_intf_addr, MACADDR_LEN);
642 wfd_session_process_event(manager, event);
643 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
647 void wfd_event_wps_fail(wfd_oem_event_s *event)
649 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
651 wfd_manager_s *manager = wfd_get_manager();
652 wfd_session_s *session = NULL;
653 unsigned char *peer_addr = NULL;
655 session = (wfd_session_s*) manager->session;
657 WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
658 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
662 peer_addr = wfd_session_get_peer_addr(session);
664 WDS_LOGE("Session do not have peer");//LCOV_EXCL_LINE
665 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
669 char peer_mac_address[MACSTR_LEN+1] = {0, };
670 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
671 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
673 g_variant_new("(iis)",
674 WIFI_DIRECT_ERROR_CONNECTION_FAILED,
675 WFD_EVENT_CONNECTION_RSP,
677 if (wfd_asp_is_asp_session(session)) {
678 wfd_asp_connect_status(session->session_mac,
680 ASP_CONNECT_STATUS_GROUP_FORMATION_STARTED,
684 if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
685 wfd_group_s *group = (wfd_group_s*) manager->group;
686 if (group && !group->member_count &&
687 wfd_util_is_remove_group_allowed()) {
688 wfd_destroy_group(manager);
690 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
691 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
693 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
694 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
697 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
698 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
701 wfd_destroy_session(manager);
703 wfd_oem_refresh(manager->oem_ops);
705 /* After connection failed, scan again */
706 wfd_oem_scan_param_s param;
707 memset(¶m, 0x0, sizeof(wfd_oem_scan_param_s));
708 param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
710 param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
711 wfd_oem_start_scan(manager->oem_ops, ¶m);
712 manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
714 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
718 void wfd_event_wps_done(wfd_oem_event_s *event)
720 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
722 wfd_manager_s *manager = wfd_get_manager();
723 wfd_session_process_event(manager, event);
725 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
729 void wfd_event_key_neg_fail(wfd_oem_event_s *event)
731 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
733 wfd_manager_s *manager = wfd_get_manager();
734 wfd_session_s *session = NULL;
735 unsigned char *peer_addr = NULL;
736 char peer_mac_address[MACSTR_LEN+1] = {0, };
738 session = (wfd_session_s*) manager->session;
740 WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
741 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
745 peer_addr = wfd_session_get_peer_addr(session);
747 WDS_LOGE("Session do not has peer");//LCOV_EXCL_LINE
748 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
752 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
753 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
755 g_variant_new("(iis)",
756 WIFI_DIRECT_ERROR_CONNECTION_FAILED,
757 WFD_EVENT_CONNECTION_RSP,
759 if (wfd_asp_is_asp_session(session)) {
760 wfd_asp_connect_status(session->session_mac,
762 ASP_CONNECT_STATUS_GROUP_FORMATION_STARTED,
766 if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
767 wfd_group_s *group = (wfd_group_s*) manager->group;
768 if (group && !group->member_count &&
769 wfd_util_is_remove_group_allowed()) {
770 wfd_destroy_group(manager);
772 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
773 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
775 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
776 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
779 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
780 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
783 wfd_destroy_session(manager);
785 wfd_oem_refresh(manager->oem_ops);
787 /* After connection failed, scan again */
788 wfd_oem_scan_param_s param;
789 memset(¶m, 0x0, sizeof(wfd_oem_scan_param_s));
790 param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
792 param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
793 wfd_oem_start_scan(manager->oem_ops, ¶m);
794 manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
796 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
800 void wfd_event_key_neg_done(wfd_oem_event_s *event)
802 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
804 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
808 void wfd_event_conn_fail(wfd_oem_event_s *event)
810 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
812 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
816 void wfd_event_conn_done(wfd_oem_event_s *event)
818 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
820 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
824 void wfd_event_group_created(wfd_oem_event_s *event)
826 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
828 wfd_manager_s *manager = wfd_get_manager();
829 wfd_group_s *group = (wfd_group_s*) manager->group;
830 wfd_session_s *session = (wfd_session_s*) manager->session;
833 group = wfd_create_pending_group(manager, event->intf_addr);
835 WDS_LOGE("Failed to create pending group");//LCOV_EXCL_LINE
836 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
840 manager->group = group;
843 wfd_group_complete(manager, event);
845 if (group->role == WFD_DEV_ROLE_GC && session) {
846 wfd_device_s *peer = session->peer;
848 WDS_LOGE("Unexpected event. Peer doesn't exist");//LCOV_EXCL_LINE
852 wfd_update_peer(manager, peer);
854 if (peer->ip_type == WFD_IP_TYPE_OVER_EAPOL) {
855 char peer_mac_address[MACSTR_LEN+1] = {0, };
857 wfd_util_ip_over_eap_assign(peer, event->ifname);
859 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
860 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
862 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
863 WFD_EVENT_CONNECTION_RSP,
865 if (wfd_asp_is_asp_session(session)) {
866 wfd_asp_connect_status(session->session_mac,
868 ASP_CONNECT_STATUS_GROUP_FORMATION_COMPLETED,
870 wfd_asp_session_peer_ip(session->session_mac, session->session_id,
871 session->service_mac, peer->ip_addr);
873 wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTED);
874 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTED);
876 wfd_destroy_session(manager);
878 wfd_peer_clear_all(manager);
880 if (group->flags & WFD_GROUP_FLAG_AUTONOMOUS) {
881 wfd_manager_dbus_emit_signal(WFD_MANAGER_GROUP_INTERFACE,
883 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
884 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
887 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
891 void wfd_event_group_destroyed(wfd_oem_event_s *event)
893 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
895 wfd_manager_s *manager = wfd_get_manager();
896 char peer_mac_address[MACSTR_LEN+1] = {0, };
897 unsigned char *peer_addr = wfd_session_get_peer_addr(manager->session);
899 if (peer_addr != NULL)
900 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
902 g_snprintf(peer_mac_address, MACSTR_LEN, "%s", "");
904 if (manager->state == WIFI_DIRECT_STATE_DISCONNECTING) {
905 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
907 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
908 WFD_EVENT_DISCONNECTION_RSP,
911 } else if (manager->state == WIFI_DIRECT_STATE_CONNECTING && manager->session) {
912 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
914 g_variant_new("(iis)", WIFI_DIRECT_ERROR_CONNECTION_FAILED,
915 WFD_EVENT_CONNECTION_RSP,
917 wfd_session_s *session = manager->session;
918 if (wfd_asp_is_asp_session(session)) {
919 wfd_asp_connect_status(session->session_mac,
921 ASP_CONNECT_STATUS_GROUP_FORMATION_FAILED,
924 } else if (manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
925 if (manager->local->dev_role != WFD_DEV_ROLE_GO) {
926 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
928 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
929 WFD_EVENT_DISCONNECTION_RSP,
932 wfd_manager_dbus_emit_signal(WFD_MANAGER_GROUP_INTERFACE,
936 WDS_LOGD("Unexpected event(GROUP_DESTROYED). Ignore it");//LCOV_EXCL_LINE
937 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
941 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
942 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
943 wfd_destroy_session(manager);
944 wfd_destroy_group(manager);
945 manager->local->dev_role = WFD_DEV_ROLE_NONE;
947 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
951 void wfd_event_invitation_req(wfd_oem_event_s *event)
953 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
955 wfd_manager_s *manager = wfd_get_manager();
956 wfd_device_s *peer = NULL;
957 wfd_session_s *session = NULL;
958 wfd_oem_invite_data_s *edata = NULL;
960 char peer_mac_address[MACSTR_LEN+1] = {0, };
962 peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
964 WDS_LOGD("Invitation from unknown peer. Add new peer");//LCOV_EXCL_LINE
965 peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
967 WDS_LOGE("Failed to add peer for invitation");//LCOV_EXCL_LINE
968 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
972 peer->dev_role = WFD_DEV_ROLE_GO;
974 edata = (wfd_oem_invite_data_s*) event->edata;
975 memcpy(peer->intf_addr, edata->bssid, MACADDR_LEN);
976 wfd_update_peer_time(manager, event->dev_addr);
978 if (!ISZEROMACADDR(edata->go_dev_addr))
979 session = wfd_create_session(manager, edata->go_dev_addr,
980 manager->req_wps_mode,
981 SESSION_DIRECTION_INCOMING);
983 session = wfd_create_session(manager, event->dev_addr,
984 manager->req_wps_mode,
985 SESSION_DIRECTION_INCOMING);
987 WDS_LOGE("Failed to create session");//LCOV_EXCL_LINE
988 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
991 session->type = SESSION_TYPE_INVITE;
992 wfd_session_timer(session, 1);
994 wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
995 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTING);
997 res = wfd_session_start(session);
999 WDS_LOGE("Failed to start session");//LCOV_EXCL_LINE
1000 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1004 if (!ISZEROMACADDR(edata->go_dev_addr))
1005 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR,
1006 MAC2STR(edata->go_dev_addr));
1008 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR,
1009 MAC2STR(event->dev_addr));
1011 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1013 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
1014 WFD_EVENT_CONNECTION_REQ,
1017 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1021 void wfd_event_invitation_res(wfd_oem_event_s *event)
1023 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1025 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1029 void wfd_event_sta_connected(wfd_oem_event_s *event)
1031 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1033 wfd_manager_s *manager = wfd_get_manager();
1034 wfd_session_s *session = (wfd_session_s*) manager->session;
1035 wfd_group_s *group = (wfd_group_s*) manager->group;
1036 wfd_device_s *peer = NULL;
1037 char peer_mac_address[MACSTR_LEN+1] = {0, };
1040 WDS_LOGD("event->dev addr : [" MACSTR "]", MAC2STR(event->dev_addr));
1041 if (session->peer && memcmp(event->dev_addr, session->peer->dev_addr, MACADDR_LEN)) {
1042 WDS_LOGE("Session Device and connected device do not match.Destroy previous session.");
1043 wfd_destroy_session(manager);
1047 if (ISZEROMACADDR(event->dev_addr)) {
1048 WDS_LOGD("Legacy Peer Connected [Peer: " MACSTR "]", MAC2STR(event->intf_addr));
1050 peer = wfd_peer_find_by_addr(manager, event->intf_addr);
1052 WDS_LOGI("Add legacy peer");//LCOV_EXCL_LINE
1053 peer = wfd_add_peer(manager, event->intf_addr, "LEGACY-PEER");
1055 WDS_LOGE("Failed to add Legacy peer.");//LCOV_EXCL_LINE
1056 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1061 if (wfd_group_add_member(group, peer->dev_addr) == -1) {
1062 WDS_LOGE("Failed to add Legacy peer.");//LCOV_EXCL_LINE
1063 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1067 memcpy(peer->intf_addr, event->intf_addr, MACADDR_LEN);
1068 peer->state = WFD_PEER_STATE_CONNECTED;
1069 peer->is_p2p = FALSE;
1071 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
1072 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1074 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
1075 WFD_EVENT_CONNECTION_RSP,
1078 wfd_util_dhcps_wait_ip_leased(peer);
1079 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1083 session = (wfd_session_s*) manager->session;
1084 if (!session && group) {
1085 if (group->flags & WFD_GROUP_FLAG_PERSISTENT) {
1086 session = wfd_create_session(manager, event->dev_addr,
1088 SESSION_DIRECTION_INCOMING);
1090 WDS_LOGE("Failed to create session with peer [" MACSTR "]",
1091 MAC2STR(event->dev_addr));
1092 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1096 WDS_LOGD("Unexpected event. Session is NULL [peer: " MACSECSTR "]",
1097 MAC2SECSTR(event->dev_addr));
1099 wfd_oem_destroy_group(manager->oem_ops, group->ifname);
1100 wfd_destroy_group(manager);
1103 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
1104 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
1105 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1110 peer = wfd_session_get_peer(session);
1112 WDS_LOGE("Peer not found");//LCOV_EXCL_LINE
1113 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1116 WDS_LOGD("peer->dev addr : [" MACSTR "]", MAC2STR(session->peer->dev_addr));
1118 group = (wfd_group_s*) manager->group;
1120 group = wfd_create_pending_group(manager, event->intf_addr);
1122 WDS_LOGE("Failed to create pending group");//LCOV_EXCL_LINE
1123 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1126 manager->group = group;
1128 wfd_group_add_member(group, peer->dev_addr);
1130 session->state = SESSION_STATE_COMPLETED;
1131 peer->state = WFD_PEER_STATE_CONNECTED;
1133 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
1134 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
1136 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
1137 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1139 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
1140 WFD_EVENT_CONNECTION_RSP,
1143 wfd_update_peer(manager, peer);
1144 if (event->ip_addr_peer[3]) {
1145 peer->ip_type = WFD_IP_TYPE_OVER_EAPOL;
1146 memcpy(peer->client_ip_addr, event->ip_addr_peer, IPADDR_LEN);
1147 WDS_LOGE("Peer's client IP [" IPSTR "]", IP2STR((char*) &peer->client_ip_addr));
1148 memcpy(peer->go_ip_addr, manager->local->ip_addr, IPADDR_LEN);
1149 WDS_LOGE("Peer's GO IP [" IPSTR "]", IP2STR((char*) &peer->go_ip_addr));
1151 if (peer->ip_type == WFD_IP_TYPE_OVER_EAPOL) {
1152 char peer_mac_address[MACSTR_LEN+1] = {0,};
1153 char assigned_ip_address[IPSTR_LEN+1] = {0,};
1155 memcpy(peer->ip_addr, peer->client_ip_addr, IPADDR_LEN);
1157 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
1158 g_snprintf(assigned_ip_address, IPSTR_LEN, IPSTR, IP2STR(peer->ip_addr));
1159 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1161 g_variant_new("(ss)", peer_mac_address,
1162 assigned_ip_address));
1163 if (wfd_asp_is_asp_session(session)) {
1164 wfd_asp_connect_status(session->session_mac,
1165 session->session_id,
1166 ASP_CONNECT_STATUS_GROUP_FORMATION_COMPLETED,
1169 wfd_asp_session_peer_ip(session->session_mac, session->session_id,
1170 session->service_mac, peer->ip_addr);
1173 wfd_util_dhcps_wait_ip_leased(peer);
1175 wfd_destroy_session(manager);
1177 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1181 void wfd_event_sta_disconnected(wfd_oem_event_s *event)
1183 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1185 wfd_manager_s *manager = wfd_get_manager();
1186 wfd_group_s *group = NULL;
1187 wfd_device_s *peer = NULL;
1188 unsigned char peer_addr[MACADDR_LEN] = {0, };
1189 char peer_mac_address[MACSTR_LEN+1] = {0, };
1190 char peer_dev_name[DEV_NAME_LEN+1] = {0, };
1192 group = (wfd_group_s*) manager->group;
1194 WDS_LOGE("Group not found");//LCOV_EXCL_LINE
1195 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1199 if (ISZEROMACADDR(event->dev_addr)) {
1200 WDS_LOGD("Legacy Peer Disconnected [Peer: " MACSTR "]", MAC2STR(event->intf_addr));
1201 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(event->intf_addr));
1202 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1204 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
1205 WFD_EVENT_DISCONNECTION_IND,
1208 wfd_group_remove_member(group, event->intf_addr);
1210 if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
1211 wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
1212 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
1214 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
1215 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
1217 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1221 peer = wfd_group_find_member_by_addr(group, event->dev_addr);
1223 WDS_LOGE("Failed to find connected peer");//LCOV_EXCL_LINE
1224 peer = wfd_session_get_peer(manager->session);
1226 WDS_LOGE("Failed to find connecting peer");//LCOV_EXCL_LINE
1227 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1232 * If no peer connected and
1233 * disconnected event is not for connecting peer
1234 * then event should be ignored.
1235 * This situation can arrise when own device is GO and
1236 * some connected peer sent disassociation.
1238 if (memcmp(peer->dev_addr, event->dev_addr, MACADDR_LEN)) {
1239 WDS_LOGE("Unexpected event, Ignore it...");//LCOV_EXCL_LINE
1240 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1244 memcpy(peer_addr, peer->dev_addr, MACADDR_LEN);
1245 g_strlcpy(peer_dev_name, peer->dev_name, DEV_NAME_LEN+1);
1248 * If state is not DISCONNECTING, connection is finished by peer.
1249 * Required the check also, when Device is Group Owner and state is DISCOVERING.
1251 if (manager->state >= WIFI_DIRECT_STATE_CONNECTED ||
1252 (manager->state == WIFI_DIRECT_STATE_DISCOVERING &&
1253 manager->local->dev_role == WFD_DEV_ROLE_GO)) {
1254 wfd_group_remove_member(group, peer_addr);
1255 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
1256 if (group->member_count) {
1257 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1259 g_variant_new("(iiss)", WIFI_DIRECT_ERROR_NONE,
1260 WFD_EVENT_DISASSOCIATION_IND,
1261 peer_mac_address, peer_dev_name));
1263 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1265 g_variant_new("(iiss)", WIFI_DIRECT_ERROR_NONE,
1266 WFD_EVENT_DISCONNECTION_IND,
1267 peer_mac_address, peer_dev_name));
1270 } else if (manager->state == WIFI_DIRECT_STATE_CONNECTING &&
1271 /* Some devices(GO) send disconnection message before connection completed.
1272 * This message should be ignored when device is not GO */
1273 manager->local->dev_role == WFD_DEV_ROLE_GO) {
1274 if (WFD_PEER_STATE_CONNECTED == peer->state) {
1275 WDS_LOGD("Peer is already Connected !!!");//LCOV_EXCL_LINE
1276 wfd_group_remove_member(group, peer_addr);
1277 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
1278 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1280 g_variant_new("(iiss)", WIFI_DIRECT_ERROR_NONE,
1281 WFD_EVENT_DISASSOCIATION_IND,
1282 peer_mac_address, peer_dev_name));
1284 } else if (WFD_PEER_STATE_CONNECTING == peer->state) {
1285 WDS_LOGD("Peer is Connecting...");//LCOV_EXCL_LINE
1286 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
1287 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1289 g_variant_new("(iis)", WIFI_DIRECT_ERROR_CONNECTION_FAILED,
1290 WFD_EVENT_CONNECTION_RSP,
1292 wfd_session_s *session = manager->session;
1293 if (wfd_asp_is_asp_session(session)) {
1294 wfd_asp_connect_status(session->session_mac,
1295 session->session_id,
1296 ASP_CONNECT_STATUS_GROUP_FORMATION_FAILED,
1300 WDS_LOGE("Unexpected Peer State. Ignore it");//LCOV_EXCL_LINE
1301 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1305 WDS_LOGE("Unexpected event. Ignore it");//LCOV_EXCL_LINE
1306 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1310 /* If there is no member, GO should be destroyed */
1311 if (!group->member_count && wfd_util_is_remove_group_allowed()) {
1312 wfd_oem_destroy_group(manager->oem_ops, group->ifname);
1313 wfd_destroy_group(manager);
1314 wfd_peer_clear_all(manager);
1317 wfd_destroy_session(manager);
1318 _wfd_event_reset_state(manager);
1320 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1324 void wfd_event_terminating(wfd_oem_event_s *event)
1326 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1328 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1332 void wfd_event_group_formation_failure(wfd_oem_event_s *event)
1334 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1336 wfd_manager_s *manager = wfd_get_manager();
1337 wfd_session_s *session = (wfd_session_s*) manager->session;
1339 WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
1340 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1344 unsigned char *peer_addr = wfd_session_get_peer_addr(session);
1346 WDS_LOGE("Session do not has peer");//LCOV_EXCL_LINE
1347 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1351 char peer_mac_address[MACSTR_LEN+1] = {0, };
1352 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
1353 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1355 g_variant_new("(iis)", WIFI_DIRECT_ERROR_CONNECTION_FAILED,
1356 WFD_EVENT_CONNECTION_RSP,
1359 if (wfd_asp_is_asp_session(session)) {
1360 wfd_asp_connect_status(session->session_mac,
1361 session->session_id,
1362 ASP_CONNECT_STATUS_GROUP_FORMATION_FAILED,
1366 wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
1367 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
1368 wfd_destroy_session(manager);
1369 manager->local->dev_role = WFD_DEV_ROLE_NONE;
1371 wfd_oem_refresh(manager->oem_ops);
1373 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1378 * This event is generated by supplicant when persitent invite is auto accepted
1379 * so that wfd-manager can get indication that a peer will be connected in near future.
1380 * session is started for that peer, so that it is not ignored when connected.
1382 void wfd_event_invitation_accepted(wfd_oem_event_s *event)
1385 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1387 wfd_manager_s *manager = wfd_get_manager();
1388 wfd_session_s *session = (wfd_session_s*) manager->session;
1389 wfd_device_s *peer = NULL;
1390 char peer_mac_address[MACSTR_LEN+1] = {0, };
1392 peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
1394 WDS_LOGI("Invitation from unknown peer. Add new peer");//LCOV_EXCL_LINE
1395 peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
1397 WDS_LOGE("Failed to add peer for invitation");//LCOV_EXCL_LINE
1398 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1402 /**By default, peer device information is complete but there's some exception
1403 * if DEV-FOUND event was not preceding before connection start event.
1405 wfd_update_peer(manager, peer);
1406 peer->dev_role = WFD_DEV_ROLE_GO;
1409 session = wfd_create_session(manager, event->dev_addr,
1410 event->wps_mode, SESSION_DIRECTION_INCOMING);
1412 WDS_LOGE("Failed to create session with peer [" MACSTR "]",
1413 MAC2STR(event->dev_addr));
1414 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1419 session->state = SESSION_STATE_WPS;
1420 wfd_session_timer(session, 1);
1422 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
1423 wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
1425 g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
1426 WFD_EVENT_CONNECTION_IN_PROGRESS,
1429 wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
1430 wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTING);
1432 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1435 void wfd_event_serv_disc_resp(wfd_oem_event_s *event)
1437 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1439 wfd_manager_s *manager = wfd_get_manager();
1441 char response_data[256] = {0, };
1442 char peer_mac_address[MACSTR_LEN+1] = {0, };
1444 if (!manager->is_service_discovery_supported) {
1445 WDS_LOGD("service discovery not supported");//LCOV_EXCL_LINE
1449 wfd_update_peer_time(manager, event->dev_addr);
1451 if (event->edata_type == WFD_OEM_EDATA_TYPE_NEW_SERVICE) {
1452 wfd_oem_new_service_s *service = NULL;;
1454 GList *services = (GList*) event->edata;
1457 WDS_LOGD("%d service data found", event->dev_role);
1459 temp = g_list_first(services);
1460 while (temp && count < event->dev_role) {
1461 service = (wfd_oem_new_service_s*) temp->data;
1462 service_type = service->protocol;
1463 if (service->protocol == WFD_OEM_SERVICE_TYPE_BONJOUR) {
1464 g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
1465 g_snprintf(response_data, 256, "%s|%s", service->data.bonjour.query, service->data.bonjour.rdata);
1466 WDS_LOGD("Found service: [%d: %s] - [" MACSECSTR "]", service->protocol,
1467 service->data.bonjour.query, MAC2SECSTR(event->dev_addr));
1469 WDS_LOGD("Found service is not supported");//LCOV_EXCL_LINE
1473 wfd_manager_dbus_emit_signal(WFD_MANAGER_SERVICE_INTERFACE,
1475 g_variant_new("(iss)", service_type,
1479 temp = g_list_next(temp);
1484 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1488 void wfd_event_serv_disc_started(wfd_oem_event_s *event)
1490 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1492 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1497 void wfd_event_asp_serv_resp(wfd_oem_event_s *event)
1499 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1501 wfd_manager_s *manager = wfd_get_manager();
1502 wfd_oem_asp_service_s *service = NULL;
1503 GVariantBuilder *builder = NULL;
1504 GVariant *params = NULL;
1506 if (manager && !manager->is_asp_supported) {
1507 WDS_LOGD("ASP is not supported.");//LCOV_EXCL_LINE
1508 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1512 service = (wfd_oem_asp_service_s *)event->edata;
1513 if (service == NULL) {
1514 WDS_LOGE("P2P service found event has NULL information");//LCOV_EXCL_LINE
1515 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1519 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1520 g_variant_builder_add(builder, "{sv}", "search_id", g_variant_new("u", service->search_id));
1521 g_variant_builder_add(builder, "{sv}", "service_mac", g_variant_new("s", event->dev_addr));
1522 g_variant_builder_add(builder, "{sv}", "advertisement_id", g_variant_new("u", service->adv_id));
1523 g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", service->config_method));
1524 if (service->service_type)
1525 g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", service->service_type));
1526 if (service->service_info)
1527 g_variant_builder_add(builder, "{sv}", "service_info", g_variant_new("s", service->service_info));
1528 g_variant_builder_add(builder, "{sv}", "status", g_variant_new("y", service->status));
1529 params = g_variant_new("(a{sv})", builder);
1530 g_variant_builder_unref(builder);
1532 wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE,
1536 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1540 int __wfd_handle_asp_prov(wfd_manager_s *manager, wfd_oem_event_s *event)
1542 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1544 wfd_session_s *session = NULL;
1545 wfd_oem_asp_prov_s *prov_params = NULL;
1548 prov_params = (wfd_oem_asp_prov_s *)event->edata;
1549 if (prov_params == NULL) {
1550 WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
1551 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1555 res = wfd_session_process_event(manager, event);
1556 session = (wfd_session_s *)manager->session;
1557 if (res < 0 || session == NULL) {
1558 WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
1559 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1562 session->session_id = prov_params->session_id;
1563 memcpy(session->session_mac, prov_params->session_mac, MACADDR_LEN);
1564 memcpy(session->service_mac, prov_params->service_mac, MACADDR_LEN);
1566 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1570 int __wfd_handle_asp_prov_done(wfd_session_s *session, wfd_oem_event_s *event)
1572 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1574 wfd_oem_asp_prov_s *prov_params = NULL;
1575 prov_params = (wfd_oem_asp_prov_s *)event->edata;
1578 if (prov_params->persist &&
1579 (prov_params->network_role || prov_params->network_config)) {
1580 WDS_LOGE("Persistent group is used but "
1581 "conncap/dev_passwd_id are present");//LCOV_EXCL_LINE
1582 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1586 if (!prov_params->persist &&
1587 (!prov_params->network_role && !prov_params->network_config)) {
1588 WDS_LOGE("Persistent group not used but "
1589 "conncap/dev_passwd_id are missing");//LCOV_EXCL_LINE
1590 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1594 if (session->wps_mode == WFD_OEM_WPS_MODE_P2PS)
1595 g_strlcpy(session->wps_pin, OEM_DEFAULT_P2PS_PIN, OEM_PINSTR_LEN + 1);
1597 if (prov_params->persist) {
1598 res = wfd_session_asp_persistent_connect(session, prov_params->persistent_group_id);
1599 } else if (prov_params->network_role == WFD_OEM_ASP_SESSION_ROLE_NEW) {
1600 res = wfd_session_asp_connect(session, WFD_OEM_ASP_SESSION_ROLE_NEW);
1601 } else if (prov_params->network_role == WFD_OEM_ASP_SESSION_ROLE_CLIENT) {
1602 res = wfd_session_asp_connect(session, WFD_OEM_ASP_SESSION_ROLE_CLIENT);
1603 } else if (prov_params->network_role == WFD_OEM_ASP_SESSION_ROLE_GO) {
1604 res = wfd_session_asp_connect(session, WFD_OEM_ASP_SESSION_ROLE_GO);
1605 WDS_LOGD("don't need to take action.");//LCOV_EXCL_LINE
1608 WDS_LOGE("Unhandled event");//LCOV_EXCL_LINE
1609 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1613 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1617 void wfd_event_asp_prov_start(wfd_oem_event_s *event)
1619 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1621 wfd_manager_s *manager = wfd_get_manager();
1622 wfd_session_s *session = NULL;
1623 wfd_oem_asp_prov_s *prov_params = NULL;
1626 if (manager == NULL || event == NULL || event->edata == NULL) {
1627 WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
1628 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1632 if (!manager->is_asp_supported) {
1633 WDS_LOGD("ASP is not supported.");//LCOV_EXCL_LINE
1634 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1638 prov_params = (wfd_oem_asp_prov_s *)event->edata;
1639 res = __wfd_handle_asp_prov(manager, event);
1640 session = (wfd_session_s *)manager->session;
1641 if (res < 0 || session == NULL) {
1642 WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
1643 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1647 WDS_LOGD("created session [%u] with peer [" MACSTR "]", session->session_id,
1648 MAC2STR(session->session_mac));
1650 /* Incomming Session, auto_accept = TRUE emit request Received */
1651 /* generate SessionConfigRequest if event->wps_mode is not P2PS and return*/
1653 wfd_session_timer(session, 1);
1654 wfd_asp_session_request(prov_params);
1655 wfd_asp_connect_status(prov_params->session_mac,
1656 prov_params->session_id,
1657 ASP_CONNECT_STATUS_REQUEST_RECEIVED,
1660 wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
1662 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1666 void wfd_event_asp_prov_done(wfd_oem_event_s *event)
1668 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1670 wfd_manager_s *manager = wfd_get_manager();
1671 wfd_session_s *session = NULL;
1672 wfd_oem_asp_prov_s *prov_params;
1675 if (manager == NULL || event == NULL || event->edata == NULL) {
1676 WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
1677 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1681 if (!manager->is_asp_supported) {
1682 WDS_LOGD("ASP is not supported.");//LCOV_EXCL_LINE
1683 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1687 prov_params = (wfd_oem_asp_prov_s *)event->edata;
1688 /* Incomming Session, auto_accept = TRUE emit request Received */
1689 /* generate SessionConfigRequest if event->wps_mode is not P2PS and return*/
1690 if (manager->session == NULL) {
1691 wfd_asp_session_request(prov_params);
1692 wfd_asp_connect_status(prov_params->session_mac,
1693 prov_params->session_id,
1694 ASP_CONNECT_STATUS_REQUEST_RECEIVED,
1698 res = __wfd_handle_asp_prov(manager, event);
1699 session = (wfd_session_s *)manager->session;
1700 if (res < 0 || session == NULL) {
1701 WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
1702 wfd_destroy_session(manager);
1703 wfd_oem_refresh(manager->oem_ops);
1704 _wfd_event_reset_state(manager);
1705 wfd_asp_connect_status(prov_params->session_mac,
1706 prov_params->session_id,
1707 ASP_CONNECT_STATUS_REQUEST_FAILED,
1709 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1713 if (prov_params->status != WFD_OEM_SC_SUCCESS &&
1714 prov_params->status != WFD_OEM_SC_SUCCESS_ACCEPTED_BY_USER) {
1715 WDS_LOGD("ASP-PROV failed. remove session.");//LCOV_EXCL_LINE
1716 wfd_destroy_session(manager);
1717 wfd_oem_refresh(manager->oem_ops);
1718 _wfd_event_reset_state(manager);
1719 wfd_asp_connect_status(prov_params->session_mac,
1720 prov_params->session_id,
1721 ASP_CONNECT_STATUS_REQUEST_FAILED,
1723 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1727 wfd_asp_connect_status(prov_params->session_mac,
1728 prov_params->session_id,
1729 ASP_CONNECT_STATUS_REQUEST_ACCEPTED,
1732 wfd_asp_connect_status(prov_params->session_mac,
1733 prov_params->session_id,
1734 ASP_CONNECT_STATUS_GROUP_FORMATION_STARTED,
1736 res = __wfd_handle_asp_prov_done(session, event);
1738 WDS_LOGE("Connect failed. remove session.");//LCOV_EXCL_LINE
1739 wfd_destroy_session(manager);
1740 wfd_oem_refresh(manager->oem_ops);
1741 _wfd_event_reset_state(manager);
1743 wfd_asp_connect_status(prov_params->session_mac,
1744 prov_params->session_id,
1745 ASP_CONNECT_STATUS_GROUP_FORMATION_FAILED,
1747 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1751 WDS_LOGD("Provision done succeeded.");//LCOV_EXCL_LINE
1752 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1756 void wfd_event_init(wfd_oem_event_cbs_s *event_cbs)
1758 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
1761 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
1765 event_cbs->deactivated_cb = wfd_event_deactivated;
1766 event_cbs->peer_found_cb = wfd_event_peer_found;
1767 event_cbs->peer_disappeared_cb = wfd_event_peer_disappeared;
1768 event_cbs->discovery_finished_cb = wfd_event_discovery_finished;
1770 event_cbs->prov_disc_req_cb = wfd_event_prov_disc_req;
1771 event_cbs->prov_disc_resp_cb = wfd_event_prov_disc_resp;
1772 event_cbs->prov_disc_fail_cb = wfd_event_prov_disc_fail;
1774 event_cbs->go_neg_req_cb = wfd_event_go_neg_req;
1775 event_cbs->go_neg_fail_cb = wfd_event_go_neg_fail;
1776 event_cbs->go_neg_done_cb = wfd_event_go_neg_done;
1778 event_cbs->wps_fail_cb = wfd_event_wps_fail;
1779 event_cbs->wps_done_cb = wfd_event_wps_done;
1780 event_cbs->key_neg_fail_cb = wfd_event_key_neg_fail;
1781 event_cbs->key_neg_done_cb = wfd_event_key_neg_done;
1783 event_cbs->conn_fail_cb = wfd_event_conn_fail;
1784 event_cbs->conn_done_cb = wfd_event_conn_done;
1786 event_cbs->group_created_cb = wfd_event_group_created;
1787 event_cbs->group_destroyed_cb = wfd_event_group_destroyed;
1789 event_cbs->invitation_req_cb = wfd_event_invitation_req;
1790 event_cbs->invitation_resp_cb = wfd_event_invitation_res;
1791 event_cbs->sta_connected_cb = wfd_event_sta_connected;
1792 event_cbs->sta_disconnected_cb = wfd_event_sta_disconnected;
1794 event_cbs->terminating_cb = wfd_event_terminating;
1796 event_cbs->serv_disc_resp_cb = wfd_event_serv_disc_resp;
1797 event_cbs->serv_disc_started_cb = wfd_event_serv_disc_started;
1799 event_cbs->group_formation_failure_cb = wfd_event_group_formation_failure;
1800 event_cbs->invitation_accepted_cb = wfd_event_invitation_accepted;
1802 event_cbs->asp_serv_resp_cb = wfd_event_asp_serv_resp;
1803 event_cbs->asp_prov_start_cb = wfd_event_asp_prov_start;
1804 event_cbs->asp_prov_done_cb = wfd_event_asp_prov_done;
1806 event_cbs->extra_data = NULL;
1808 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE