[wifi-direct-manager]Remove CONNECTED/DISCONNECTED event 49/57849/2
authorYu Jiung <jiung.yu@samsung.com>
Mon, 25 Jan 2016 08:06:35 +0000 (17:06 +0900)
committerYu Jiung <jiung.yu@samsung.com>
Mon, 1 Feb 2016 01:15:54 +0000 (10:15 +0900)
Description : When device is connected as GC, only event we need to handle is
group related event (GROUP-STARTED and GROUP-REMOVED) Except for the case of
connection failure. Those event tell us everything we need

Change-Id: I7a3621aa7e182307bb904bfdc67896e2562b71fc
Signed-off-by: Yu jiung <jiung.yu@samsung.com>
oem/wifi-direct-oem.h
packaging/wifi-direct-manager.spec
plugin/wpasupplicant/ctrl_iface_sock/include/wfd-plugin-wpasupplicant.h
plugin/wpasupplicant/ctrl_iface_sock/wfd-plugin-wpasupplicant.c
src/wifi-direct-event.c
src/wifi-direct-session.c
src/wifi-direct-util.c

index e63e19e..032b34a 100755 (executable)
@@ -104,9 +104,6 @@ typedef enum {
        WFD_OEM_EVENT_STA_CONNECTED,
        WFD_OEM_EVENT_STA_DISCONNECTED,
 
-       WFD_OEM_EVENT_CONNECTED,
-       WFD_OEM_EVENT_DISCONNECTED,
-
        WFD_OEM_EVENT_TERMINATING,      // 25
 
 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
index 206344e..7496f10 100755 (executable)
@@ -1,6 +1,6 @@
 Name:          wifi-direct-manager
 Summary:       Wi-Fi Direct manger
-Version:       1.2.121
+Version:       1.2.122
 Release:       1
 Group:      Network & Connectivity/Wireless
 License:    Apache-2.0
index 9176d08..2437be7 100755 (executable)
@@ -230,13 +230,11 @@ typedef enum {
        WS_EVENT_WPS_REG_SUCCESS,
        WS_EVENT_GROUP_FORMATION_SUCCESS,       // 15
 
-       WS_EVENT_CONNECTED,
        WS_EVENT_STA_CONNECTED,
 
        WS_EVENT_INVITATION_RECEIVED,
        WS_EVENT_INVITATION_RESULT,
 
-       WS_EVENT_DISCONNECTED,  // 20
        WS_EVENT_STA_DISCONNECTED,
 
        WS_EVENT_GROUP_STARTED,
index 0a477fa..0b7860e 100755 (executable)
@@ -78,14 +78,12 @@ ws_string_s ws_event_strs[] = {
        {"WPS-REG-SUCCESS", WS_EVENT_WPS_REG_SUCCESS},
        {"P2P-GROUP-FORMATION-SUCCESS", WS_EVENT_GROUP_FORMATION_SUCCESS},
 
-       {"CTRL-EVENT-CONNECTED", WS_EVENT_CONNECTED},
        {"AP-STA-CONNECTED", WS_EVENT_STA_CONNECTED},
 
        // invite
        {"P2P-INVITATION-RECEIVED", WS_EVENT_INVITATION_RECEIVED},
        {"P2P-INVITATION-RESULT", WS_EVENT_INVITATION_RESULT},
 
-       {"CTRL-EVENT-DISCONNECTED", WS_EVENT_DISCONNECTED},
        {"AP-STA-DISCONNECTED", WS_EVENT_STA_DISCONNECTED},
 
        // group
@@ -1951,48 +1949,6 @@ static int _parsing_event_info(char *ifname, char *msg, wfd_oem_event_s *data)
        case WS_EVENT_WPS_REG_SUCCESS:  // "intf_addr"
                /* Interface address of peer will come up */
                break;
-       case WS_EVENT_CONNECTED:        // intf_addr(to)
-               {
-                       /* Interface address of connected peer will come up */
-                       char *temp_mac = NULL;
-                       char *intf = NULL;
-                       res = _extract_value_str(info_str, "ifname", &intf);
-                       if (res < 0) {
-                               WDP_LOGE("Failed to extract interface name");
-                               break;
-                       }
-                       if (intf) {
-                               strcpy(data->ifname, intf);
-                               free(intf);
-                       }
-                       WDP_LOGD("Connected event from interface: %s", data->ifname);
-                       res = _extract_value_str(info_str, "to", &temp_mac);
-                       if (res < 0) {
-                               WDP_LOGE("Failed to extract interface address");
-                               break;
-                       }
-                       if (temp_mac) {
-                               _ws_txt_to_mac(temp_mac, data->intf_addr);
-                               g_free(temp_mac);
-                       }
-                       data->edata_type = WFD_OEM_EDATA_TYPE_NONE;
-               }
-               break;
-       case WS_EVENT_DISCONNECTED:
-               {
-                       /* Interface address of disconnected peer will come up */
-                       char *temp_mac = NULL;
-                       res = _extract_value_str(info_str, "bssid", &temp_mac);
-                       if (res < 0) {
-                               WDP_LOGE("Failed to extract interface address");
-                               break;
-                       }
-                       _ws_txt_to_mac(temp_mac, data->intf_addr);
-                       if (temp_mac)
-                               free(temp_mac);
-                       data->edata_type = WFD_OEM_EDATA_TYPE_NONE;
-               }
-               break;
        case WS_EVENT_STA_CONNECTED:    // "intf_addr", dev_addr(dev_addr)
        case WS_EVENT_STA_DISCONNECTED:
                {
@@ -2299,11 +2255,6 @@ static gboolean ws_event_handler(GIOChannel *source,
                event_id = WFD_OEM_EVENT_WPS_DONE;
                // TODO: connect to supplicant via group interface
                break;
-       case WS_EVENT_CONNECTED:
-               if (!memcmp(event.intf_addr, null_mac, OEM_MACADDR_LEN))
-                       goto done;
-               event_id = WFD_OEM_EVENT_CONNECTED;
-               break;
        case WS_EVENT_STA_CONNECTED:
                event_id = WFD_OEM_EVENT_STA_CONNECTED;
                break;
@@ -2333,11 +2284,6 @@ static gboolean ws_event_handler(GIOChannel *source,
        case WS_EVENT_INVITATION_RESULT:
                event_id = WFD_OEM_EVENT_INVITATION_RES;
                break;
-       case WS_EVENT_DISCONNECTED:
-               if (!memcmp(event.intf_addr, null_mac, OEM_MACADDR_LEN))
-                       goto done;
-               event_id = WFD_OEM_EVENT_DISCONNECTED;
-               break;
        case WS_EVENT_STA_DISCONNECTED:
                event_id = WFD_OEM_EVENT_STA_DISCONNECTED;
                break;
index ab2164f..71e7767 100644 (file)
@@ -942,12 +942,10 @@ static void __wfd_process_group_destroyed(wfd_manager_s *manager, wfd_oem_event_
                if(peer_addr != NULL)
                        g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
        } else if (manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
-#if defined (CTRL_IFACE_DBUS)
                if(manager->local->dev_role != WFD_DEV_ROLE_GO)
                        noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP;
                else
-#endif
-               noti.event = WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP;
+                       noti.event = WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP;
                noti.error = WIFI_DIRECT_ERROR_NONE;
        } else {
                WDS_LOGD("Unexpected event(GROUP_DESTROYED). Ignore it");
@@ -1239,166 +1237,9 @@ static void __wfd_process_sta_disconnected(wfd_manager_s *manager, wfd_oem_event
        wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
        wfd_destroy_session(manager);
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
-
- static void __wfd_process_connected(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
-
-       wfd_session_s *session = NULL;
-       wfd_device_s *peer = NULL;
-       wfd_group_s *group = NULL;
-
-       if (event == NULL || manager == NULL) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
-               return;
-       }
-
-       // FIXME: Move this code to plugin
-       if (!memcmp(event->intf_addr, manager->local->intf_addr, MACADDR_LEN)) {
-               WDS_LOGD("Ignore this event");
-               __WDS_LOG_FUNC_EXIT__;
-               return;
-       }
-
-       session = (wfd_session_s*) manager->session;
-       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);
-               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 (!peer) {
-               WDS_LOGE("Peer not found");
-               __WDS_LOG_FUNC_EXIT__;
-               return;
-       }
-
-       group = (wfd_group_s*) manager->group;
-       if (!group) {
-               group = wfd_create_pending_group(manager, event->intf_addr);
-               if (!group) {
-                       WDS_LOGE("Failed to create pending group");
-                       __WDS_LOG_FUNC_EXIT__;
-                       return;
-               }
-               manager->group = group;
-       }
-       wfd_group_add_member(group, peer->dev_addr);
-
-       session->state = SESSION_STATE_COMPLETED;
-#ifndef CTRL_IFACE_DBUS
-       memcpy(peer->intf_addr, event->intf_addr, MACADDR_LEN);
-#endif /* CTRL_IFACE_DBUS */
-       peer->state = WFD_PEER_STATE_CONNECTED;
-
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
-
- static void __wfd_process_disconnected(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
-
-       wfd_group_s *group = NULL;
-       wfd_device_s *peer = NULL;
-       wifi_direct_client_noti_s noti;
-       unsigned char peer_addr[MACADDR_LEN] = {0, };
-
-       if (event == NULL || manager == NULL) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
-               return;
-       }
-
-       group = (wfd_group_s*) manager->group;
-       if (!group) {
-               WDS_LOGE("Group not found");
-               __WDS_LOG_FUNC_EXIT__;
-               return;
-       }
-
-#ifdef CTRL_IFACE_DBUS
-       peer = wfd_group_find_member_by_addr(group, event->dev_addr);
-#else /* CTRL_IFACE_DBUS */
-       peer = wfd_group_find_member_by_addr(group, event->intf_addr);
-#endif /* DBUS_IFACE */
-       if (!peer) {
-               WDS_LOGE("Failed to find connected peer");
-               peer = wfd_session_get_peer(manager->session);
-               if (!peer) {
-                       WDS_LOGE("Failed to find connecting peer");
-                       __WDS_LOG_FUNC_EXIT__;
-                       return;
-               }
-       }
-       memcpy(peer_addr, peer->dev_addr, MACADDR_LEN);
-       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-
-       /* If state is not DISCONNECTING, connection is finished by peer */
-       if (manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
-               wfd_group_remove_member(group, peer_addr);
-               if (group->member_count)
-                       noti.event = WIFI_DIRECT_CLI_EVENT_DISASSOCIATION_IND;
-               else
-                       noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_IND;
-               noti.error = WIFI_DIRECT_ERROR_NONE;
-               g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
-               /* If there is no member, GO should be destroyed */
-#ifdef TIZEN_TV
-               /* If GO is Auto GO, then it should not be removed when no member left */
-               if (!group->member_count && (wfd_group_is_autonomous(group) == FALSE)) {
-#else /* TIZEN_TV */
-               if (!group->member_count) {
-#endif /* TIZEN_TV */
-                       wfd_oem_destroy_group(manager->oem_ops, group->ifname);
-                       wfd_destroy_group(manager, group->ifname);
-               }
-       } else if (manager->state == WIFI_DIRECT_STATE_DISCONNECTING) {
-               noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP;
-               noti.error = WIFI_DIRECT_ERROR_NONE;
-               g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
-       } else if (manager->state == WIFI_DIRECT_STATE_CONNECTING &&
-                       /* Some devices(GO) send disconnection message before connection completed.
-                        * This message should be ignored when device is not GO */
-                       manager->local->dev_role == WFD_DEV_ROLE_GO) {
-               if (WFD_PEER_STATE_CONNECTED == peer->state) {
-                       WDS_LOGD("Peer is already Connected !!!");
-                       noti.event = WIFI_DIRECT_CLI_EVENT_DISASSOCIATION_IND;
-                       noti.error = WIFI_DIRECT_ERROR_NONE;
-               } else if (WFD_PEER_STATE_CONNECTING == peer->state) {
-                       WDS_LOGD("Peer is Connecting...");
-                       noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
-                       noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
-               } else {
-                       WDS_LOGE("Unexpected Peer State. Ignore it");
-                       return;
-               }
-               g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
-       } else {
-               WDS_LOGE("Unexpected event. Ignore it");
-               __WDS_LOG_FUNC_EXIT__;
-               return;
-       }
-       wfd_client_send_event(manager, &noti);
-
-       wfd_destroy_group(manager, GROUP_IFNAME);
-       wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
-       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
-       wfd_destroy_session(manager);
-
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
  static void __wfd_process_terminating(wfd_manager_s *manager, wfd_oem_event_s *event)
  {
@@ -1487,6 +1328,10 @@ static struct {
  void (*function) (wfd_manager_s *manager, wfd_oem_event_s *event);
 } wfd_oem_event_map[] = {
        {
+               WFD_OEM_EVENT_NONE,
+               NULL
+       },
+       {
                WFD_OEM_EVENT_DEACTIVATED,
                __wfd_process_deactivated
        },
@@ -1575,14 +1420,6 @@ static struct {
                __wfd_process_sta_disconnected
        },
        {
-               WFD_OEM_EVENT_CONNECTED,
-               __wfd_process_connected
-       },
-       {
-               WFD_OEM_EVENT_DISCONNECTED,
-               __wfd_process_disconnected
-       },
-       {
                WFD_OEM_EVENT_TERMINATING,
                __wfd_process_terminating
        },
@@ -1607,22 +1444,23 @@ static struct {
        __WDS_LOG_FUNC_ENTER__;
        wfd_manager_s *manager = NULL;
        wfd_oem_event_s *event = NULL;
-       int i = 0;
 
-       if (!user_data || !data) {
+       manager = (wfd_manager_s*) user_data;
+       event = (wfd_oem_event_s*) data;
+       if (!manager || !event) {
                WDS_LOGE("Invalid parameter");
                __WDS_LOG_FUNC_EXIT__;
                return -1;
        }
 
-       manager = (wfd_manager_s*) user_data;
-       event = (wfd_oem_event_s*) data;
        WDS_LOGD("Event[%d] from " MACSECSTR, event->event_id,
                                                MAC2SECSTR(event->dev_addr));
-       for(i = 0; wfd_oem_event_map[i].function != NULL; i++) {
-               if(event->event_id == wfd_oem_event_map[i].event_id)
-                wfd_oem_event_map[i].function(manager, event);
-       }
+
+       if(event->event_id > WFD_OEM_EVENT_NONE &&
+                       event->event_id < WFD_OEM_EVENT_MAX)
+                wfd_oem_event_map[event->event_id].function(manager, event);
+       else
+               WDS_LOGE("Invalid event ID");
 
        __WDS_LOG_FUNC_EXIT__;
        return 0;
index 9149a1e..e42c31c 100644 (file)
@@ -867,30 +867,6 @@ int wfd_session_process_event(wfd_manager_s *manager, wfd_oem_event_s *event)
                }
 
                break;
-       case WFD_OEM_EVENT_CONNECTED:
-       {
-               if (!session) {
-                       WDS_LOGE("Unexpected event. Session is NULL [peer: " MACSECSTR "]",
-                                               MAC2SECSTR(event->dev_addr));
-                       break;
-               } else {
-                       wfd_group_s *group = manager->group;
-                       if (!group) {
-                               group = wfd_create_pending_group(manager, event->intf_addr);
-                               if (!group) {
-                                       WDS_LOGE("Failed to create pending group");
-                                       break;
-                               }
-                               manager->group = group;
-                       } else {        // multiconnection, additional client connected
-                               WDS_LOGE("Unexpected event. Group already exist");
-                               //wfd_group_add_member(manager, event->intf_addr, peer->dev_addr);
-                               break;
-                       }
-                       session->state = SESSION_STATE_COMPLETED;
-               }
-       }
-       break;
        case WFD_OEM_EVENT_STA_CONNECTED:
                if (!session) {
                        WDS_LOGE("Unexpected event. Session is NULL [peer: " MACSECSTR "]",
index 5f4b373..ef03740 100755 (executable)
 #include "wifi-direct-client.h"
 #include "wifi-direct-util.h"
 #include "wifi-direct-oem.h"
-#ifdef CTRL_IFACE_DBUS
 #include "wifi-direct-group.h"
 #include "wifi-direct-session.h"
-#endif /* CTRL_IFACE_DBUS */
 
 #ifdef TIZEN_FEATURE_IP_OVER_EAPOL
 #include <linux/unistd.h>
@@ -771,9 +769,7 @@ static gboolean _polling_ip(gpointer user_data)
 
        wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTED);
        wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTED);
-#ifdef CTRL_IFACE_DBUS
        wfd_destroy_session(manager);
-#endif /* CTRL_IFACE_DBUS */
 
        wifi_direct_client_noti_s noti;
        memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));