}
session = (wfd_session_s*) manager->session;
- if (!session) {
- WDS_LOGD("Unexpected event. Session is NULL [peer: " MACSECSTR "]",
- MAC2SECSTR(event->dev_addr));
- if (group) {
- wfd_oem_destroy_group(manager->oem_ops, group->ifname);
- wfd_destroy_group(manager);
+ if (!session && group) {
+ if (group->flags & WFD_GROUP_FLAG_PERSISTENT) {
+ session = wfd_create_session(manager, event->dev_addr,
+ event->wps_mode,
+ SESSION_DIRECTION_INCOMING);
+ if (!session) {
+ WDS_LOGE("Failed to create session with peer [" MACSTR "]",
+ MAC2STR(event->dev_addr));
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+ } else {
+ WDS_LOGD("Unexpected event. Session is NULL [peer: " MACSECSTR "]",
+ MAC2SECSTR(event->dev_addr));
+ if (group) {
+ wfd_oem_destroy_group(manager->oem_ops, group->ifname);
+ wfd_destroy_group(manager);
+ }
+
+ wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+ __WDS_LOG_FUNC_EXIT__;
+ return;
}
- wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
- wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
- __WDS_LOG_FUNC_EXIT__;
- return;
}
peer = wfd_session_get_peer(session);
if (!session && (group->flags & WFD_GROUP_FLAG_PERSISTENT)) {
WDS_LOGE("Group created by supplicant is persistent group.");
/**
- * TODO: Add handling for Reinvoked Persistent Group.
+ * 1. When GO, start dhcpd and start session at peer joined event.
+ * 2. When GC, start dhcpc after adding GO Address as peer.
*/
- __WDS_LOG_FUNC_EXIT__;
- return -1;
+ if (group->role == WFD_DEV_ROLE_GC) {
+ peer = wfd_peer_find_by_addr(manager,
+ group->go_dev_addr);
+ if (!peer) {
+ WDS_LOGI("Add peer GO");
+ peer = wfd_add_peer(manager,
+ group->go_dev_addr,
+ "PEER-GO");
+ }
+ }
} else {
WDS_LOGD("Failed to find peer by device address[" MACSECSTR "]",
MAC2SECSTR(edata->go_dev_addr));