wfd_group_s *wfd_create_group(void *data, wfd_oem_event_s *group_info);
wfd_group_s *wfd_create_pending_group(void *data, unsigned char * bssid);
int wfd_group_complete(void *data, wfd_oem_event_s *group_info);
-int wfd_destroy_group(void * data, char *ifname);
+int wfd_destroy_group(void * data);
int wfd_group_add_member(wfd_group_s *group, unsigned char *addr);
int wfd_group_remove_member(wfd_group_s *group, unsigned char *addr);
#if 0
"Deactivation",
g_variant_new("(i)", WIFI_DIRECT_ERROR_NONE));
- wfd_destroy_group(manager, GROUP_IFNAME);
+ wfd_destroy_group(manager);
wfd_destroy_session(manager);
wfd_peer_clear_all(manager);
wfd_local_reset_data(manager);
if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
wfd_group_s *group = (wfd_group_s*) manager->group;
if (group && !group->member_count && (wfd_group_is_autonomous(group) == FALSE)) {
- wfd_destroy_group(manager, GROUP_IFNAME);
+ wfd_destroy_group(manager);
wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
- wfd_destroy_group(manager, GROUP_IFNAME);
+ wfd_destroy_group(manager);
wfd_destroy_session(manager);
manager->local->dev_role = WFD_DEV_ROLE_NONE;
__WDS_LOG_FUNC_EXIT__;
if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
wfd_group_s *group = (wfd_group_s*) manager->group;
if (group && !group->member_count && (wfd_group_is_autonomous(group) == FALSE)) {
- wfd_destroy_group(manager, GROUP_IFNAME);
+ wfd_destroy_group(manager);
wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
wfd_group_s *group = (wfd_group_s*) manager->group;
if (group && !group->member_count && (wfd_group_is_autonomous(group) == FALSE)) {
- wfd_destroy_group(manager, GROUP_IFNAME);
+ wfd_destroy_group(manager);
wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
- wfd_destroy_group(manager, event->ifname);
+ wfd_destroy_group(manager);
wfd_destroy_session(manager);
manager->local->dev_role = WFD_DEV_ROLE_NONE;
if (!session) {
WDS_LOGD("Unexpected event. Session is NULL [peer: " MACSECSTR "]",
MAC2SECSTR(event->dev_addr));
- wfd_oem_destroy_group(manager->oem_ops, GROUP_IFNAME);
- wfd_destroy_group(manager, GROUP_IFNAME);
+ 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__;
/* If there is no member, GO should be destroyed */
if (!group->member_count) {
wfd_oem_destroy_group(manager->oem_ops, group->ifname);
- wfd_destroy_group(manager, group->ifname);
+ wfd_destroy_group(manager);
wfd_peer_clear_all(manager);
}
manager->local->dev_role = group_info->dev_role;
wfd_util_dhcps_start(group->ifname);
+ group->pending = FALSE;
WDS_LOGD("Role is Group Owner. DHCP Server started");
__WDS_LOG_FUNC_EXIT__;
memcpy(group->bssid, bssid, MACADDR_LEN);
group->flags &= WFD_GROUP_FLAG_NONE;
+ group->pending = TRUE;
__WDS_LOG_FUNC_EXIT__;
return group;
group->flags |= WFD_GROUP_FLAG_PERSISTENT;
manager->local->dev_role = group_info->dev_role;
+ group->pending = FALSE;
session = manager->session;
peer = wfd_session_get_peer(session);
return 0;
}
-int wfd_destroy_group(void *data, char *ifname)
+int wfd_destroy_group(void *data)
{
__WDS_LOG_FUNC_ENTER__;
wfd_group_s *group = NULL;
wfd_device_s *member = NULL;
int count = 0;
- if (!data || !ifname) {
+ if (!data) {
WDS_LOGE("Invalid parameter");
__WDS_LOG_FUNC_EXIT__;
return -1;
}
manager->group = NULL;
- wfd_util_ip_unset(group->ifname);
- if (group->role == WFD_DEV_ROLE_GO)
- wfd_util_dhcps_stop(group->ifname);
- else
- wfd_util_dhcpc_stop(group->ifname);
+ if (group->pending == FALSE) {
+ wfd_util_ip_unset(group->ifname);
+ if (group->role == WFD_DEV_ROLE_GO)
+ wfd_util_dhcps_stop(group->ifname);
+ else
+ wfd_util_dhcpc_stop(group->ifname);
+ }
memset(manager->local->ip_addr, 0x0, IPADDR_LEN);
temp = g_list_first(group->members);
if (group->role == WFD_DEV_ROLE_GO) {
if (!group->member_count && wfd_util_is_remove_group_allowed()) {
wfd_oem_destroy_group(manager->oem_ops, group->ifname);
- wfd_destroy_group(manager, group->ifname);
+ wfd_destroy_group(manager);
wfd_peer_clear_all(manager);
}
} else {
wfd_oem_destroy_group(manager->oem_ops, group->ifname);
- wfd_destroy_group(manager, group->ifname);
+ wfd_destroy_group(manager);
wfd_peer_clear_all(manager);
}
ret = wfd_oem_create_group(manager->oem_ops, ¶m);
if (ret < 0) {
WDS_LOGE("Failed to create group");
- wfd_destroy_group(manager, GROUP_IFNAME);
+ wfd_destroy_group(manager);
ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
goto failed;
}
} else if (!g_strcmp0(method_name, "DestroyGroup")) {
wfd_group_s *group = manager->group;
- if (!group && manager->state < WIFI_DIRECT_STATE_CONNECTED) {
+ if (!group) {
WDS_LOGE("Group not exist");
ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
goto failed;
}
- ret = wfd_oem_destroy_group(manager->oem_ops, group->ifname);
- if (ret < 0) {
- WDS_LOGE("Failed to destroy group");
- ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
- goto failed;
+ if (group->pending == FALSE) {
+ ret = wfd_oem_destroy_group(manager->oem_ops, group->ifname);
+ if (ret < 0) {
+ WDS_LOGE("Failed to destroy group");
+ ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
+ goto failed;
+ }
}
- ret = wfd_destroy_group(manager, group->ifname);
+ ret = wfd_destroy_group(manager);
if (ret < 0)
WDS_LOGE("Failed to destroy group");
__WDS_LOG_FUNC_ENTER__;
int prev_state = 0;
int res = 0;
+ wfd_group_s *group = NULL;
if (!manager) {
WDS_LOGE("Invalid parameter");
WDS_LOGE("Failed to initialize miracast");
#endif /* TIZEN_FEATURE_WIFI_DISPLAY */
- res = wfd_oem_destroy_group(manager->oem_ops, GROUP_IFNAME);
- if (res < 0)
- WDS_LOGE("Failed to destroy group before deactivation");
+ group = (wfd_group_s*) manager->group;
+ if (group && group->pending == FALSE) {
+ res = wfd_oem_destroy_group(manager->oem_ops, group->ifname);
+ if (res < 0)
+ WDS_LOGE("Failed to destroy group before deactivation");
+ }
#if defined(TIZEN_WLAN_CONCURRENT_ENABLE) && defined(TIZEN_MOBILE)
res = wfd_util_check_wifi_state();
manager->req_wps_mode = WFD_WPS_MODE_PBC;
- wfd_destroy_group(manager, GROUP_IFNAME);
+ wfd_destroy_group(manager);
wfd_destroy_session(manager);
wfd_peer_clear_all(manager);
wfd_local_reset_data(manager);
wfd_group_remove_member(group, peer_addr);
if (!group->member_count) {
wfd_oem_destroy_group(manager->oem_ops, group->ifname);
- wfd_destroy_group(manager, group->ifname);
+ wfd_destroy_group(manager);
}
if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
}
WDS_LOGE("Succeeded to disconnect all peer");
- wfd_destroy_group(manager, group->ifname);
+ wfd_destroy_group(manager);
wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);