[wifi-direct-manager]Reduce logs and fix typo 08/46208/1
authorYu Jiung <jiung.yu@samsung.com>
Tue, 18 Aug 2015 04:52:43 +0000 (13:52 +0900)
committerYu Jiung <jiung.yu@samsung.com>
Tue, 18 Aug 2015 04:52:46 +0000 (13:52 +0900)
Change-Id: I399a6bd8f019598547681367eb6dc7f23428d755
Signed-off-by: Yu jiung <jiung.yu@samsung.com>
12 files changed:
files/common/wifi-direct-dhcp.sh
files/common/wifi-direct-server.sh
files/tv/wifi-direct-dhcp.sh
packaging/wifi-direct-manager.spec
plugin/wpasupplicant/ctrl_iface_dbus/dbus/wfd-plugin-supplicant-dbus.c
plugin/wpasupplicant/ctrl_iface_dbus/dbus/wfd-plugin-supplicant-dbus.h
plugin/wpasupplicant/ctrl_iface_dbus/include/wfd-plugin-wpasupplicant.h
plugin/wpasupplicant/ctrl_iface_dbus/wfd-plugin-wpasupplicant.c
src/wifi-direct-client.c
src/wifi-direct-event.c [changed mode: 0755->0644]
src/wifi-direct-manager.c
src/wifi-direct-peer.c

index 5b8b518..56bc51f 100755 (executable)
@@ -76,9 +76,10 @@ stop_dhcp()
        /usr/bin/vconftool set -t string memory/private/wifi_direct_manager/p2p_subnet_mask "" -f
        /usr/bin/vconftool set -t string memory/private/wifi_direct_manager/p2p_gateway "" -f
        /usr/bin/vconftool set -t string memory/private/wifi_direct_manager/p2p_local_ip "" -f
+       /usr/bin/vconftool set -t string memory/private/wifi_direct_manager/dhcpc_server_ip "0.0.0.0" -f
 
-       /usr/bin/killall /usr/bin/dhcp
-       /usr/bin/killall /usr/sbin/dhcpd
+       /usr/bin/pkill -x dhcp
+       /usr/bin/pkill -x dhcpd
 #      /sbin/ifconfig ${interface} 0.0.0.0
 }
 
index 78c2fd5..5da7089 100755 (executable)
@@ -20,7 +20,7 @@ stop_wifi_direct()
                echo "${program} is not running"
        else
                echo "${program} is running.. Killing it"
-               /usr/bin/killall ${program}
+               /usr/bin/pkill -x ${program}
        fi
 }
 
index 49da350..b0d2b60 100755 (executable)
@@ -53,10 +53,10 @@ stop_dhcp()
        /usr/bin/vconftool set -t string memory/private/wifi_direct_manager/p2p_subnet_mask "" -f
        /usr/bin/vconftool set -t string memory/private/wifi_direct_manager/p2p_gateway "" -f
        /usr/bin/vconftool set -t string memory/private/wifi_direct_manager/p2p_local_ip "" -f
-       /usr/bin/vconftool set -t string memory/private/wifi_direct_manager/dhcpc_server_ip 0.0.0.0 -f
+       /usr/bin/vconftool set -t string memory/private/wifi_direct_manager/dhcpc_server_ip "0.0.0.0" -f
 
-       /usr/bin/killall /usr/bin/udhcpc
-       /usr/bin/killall /usr/bin/udhcpd
+       /usr/bin/pkill -x udhcpc
+       /usr/bin/pkill -x udhcpd
 #      /sbin/ifconfig ${interface} 0.0.0.0
 }
 
index d7de44d..9c06705 100755 (executable)
@@ -1,6 +1,6 @@
 Name:          wifi-direct-manager
 Summary:       Wi-Fi Direct manger
-Version:       1.2.88
+Version:       1.2.89
 Release:       1
 Group:      Network & Connectivity/Wireless
 License:    Apache-2.0
@@ -68,8 +68,10 @@ cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DARCHITECTURE=$ARCH \
 %else
 %if "%{profile}" == "mobile"
         -DTIZEN_FEATURE_SERVICE_DISCOVERY=1 \
+        -DTIZEN_WLAN_CONCURRENT_ENABLE=1 \
         -DTIZEN_FEATURE_WIFI_DISPLAY=1 \
         -DCTRL_IFACE_DBUS=1 \
+        -DTIZEN_MOBILE=1 \
 %else
 %if "%{profile}" == "tv"
        -DTIZEN_FEATURE_SERVICE_DISCOVERY=1 \
@@ -112,12 +114,21 @@ vconftool set -t string memory/private/wifi_direct_manager/p2p_subnet_mask 0.0.0
 vconftool set -t string memory/private/wifi_direct_manager/p2p_gateway 0.0.0.0 -u 5000 -i
 vconftool set -t string memory/private/wifi_direct_manager/p2p_ifname 0.0.0.0 -u 5000 -i
 
-if [ ! -d /var/lib/misc ]; then
-        mkdir -p /var/lib/misc
-fi
+%if "%{?tizen_profile_name}" == "tv"
+       if [ ! -d /opt/var/lib/misc ]; then
+               mkdir -p /opt/var/lib/misc
+       fi
 
-touch /var/lib/misc/udhcpd.leases
-chmod 666 /var/lib/misc/udhcpd.leases
+       touch /opt/var/lib/misc/dhcpd.leases
+       chmod 666 /opt/var/lib/misc/dhcpd.leases
+%else
+       if [ ! -d /var/lib/misc ]; then
+               mkdir -p /var/lib/misc
+       fi
+
+       touch /var/lib/misc/dhcpd.leases
+       chmod 666 /var/lib/misc/dhcpd.leases
+%endif
 
 %postun
 
index 47bc483..2671659 100755 (executable)
@@ -65,7 +65,9 @@ int dbus_method_call(dbus_method_param_s *params, char *interface_name,
        }
 
        if(reply != NULL) {
-               WDP_LOGE("reply [%s]", g_variant_print(reply,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+               WDP_LOGD("reply [%s]", g_variant_print(reply,TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
                if(function)
                        function(reply, user_data);
                g_variant_unref(reply);
@@ -127,7 +129,9 @@ int dbus_property_get_all(const char *path, GDBusConnection *connection,
        }
 
        param = g_variant_new("(s)", interface);
-       WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("param [%s]", g_variant_print(param,TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        reply = g_dbus_connection_call_sync (
                        connection,
index cc448e5..980d748 100755 (executable)
@@ -31,6 +31,7 @@
 
 #define SIGNAL_PROPERTIES_CHANGED "PropertiesChanged"
 
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
 #define CHECK_KEY_VALUE(key, value)\
        do {\
                if (key)\
@@ -50,6 +51,7 @@
                WDP_LOGD("signal params [%s]", g_variant_print(parameters, TRUE));\
                WDP_LOGD("signal params type [%s]", g_variant_get_type_string(parameters));\
        } while (0)
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
 typedef void (*handle_reply) (GVariant *value, void *user_data);
 
index 5e61e6e..709c3a4 100755 (executable)
@@ -48,9 +48,7 @@
 #define CONF_FILE_PATH "/opt/etc/p2p_supp.conf"
 #endif
 
-
-#if defined TIZEN_TV
-/*For TIZEN TV Platform*/
+#if defined TIZEN_TV /*For TIZEN TV Platform*/
 #define COMMON_IFACE_NAME "p2p0"
 #define GROUP_IFACE_NAME "p2p0"
 #define GROUP_IFACE_PREFIX "p2p"
index f64a0ee..f6c7273 100755 (executable)
@@ -392,8 +392,6 @@ static int __ws_segment_to_service(char *segment, wfd_oem_new_service_s **servic
 static void __ws_path_to_addr(char *peer_path,
                unsigned char *dev_addr, GVariant *parameter)
 {
-       __WDP_LOG_FUNC_ENTER__;
-
        static unsigned char peer_dev[WS_MACSTR_LEN] = {'\0',};
        const char *path = NULL;
        char *loc = NULL;
@@ -409,7 +407,6 @@ static void __ws_path_to_addr(char *peer_path,
        WDP_LOGD("peer mac [" MACSTR "]", MAC2STR(dev_addr));
 
        return;
-       __WDP_LOG_FUNC_EXIT__;
 }
 
 static int __ws_unpack_ay(unsigned char *dst, GVariant *src, int size)
@@ -482,7 +479,9 @@ static void _supplicant_signal_cb(GDBusConnection *connection,
                const gchar *sender, const gchar *object_path, const gchar *interface,
                const gchar *signal, GVariant *parameters, gpointer user_data)
 {
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        DEBUG_SIGNAL(sender, object_path, interface, signal, parameters);
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        if (!g_strcmp0(signal,"InterfaceAdded")) {
                WDP_LOGD("InterfaceAdded");
@@ -524,21 +523,21 @@ static void _supplicant_signal_cb(GDBusConnection *connection,
 
 static void __ws_get_peer_property(const char *key, GVariant *value, void *user_data)
 {
-       __WDP_LOG_FUNC_ENTER__;
-
        wfd_oem_device_s *peer = (wfd_oem_device_s *)user_data;
        if(!peer) {
                __WDP_LOG_FUNC_EXIT__;
                return;
        }
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        CHECK_KEY_VALUE(key, value);
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        if (g_strcmp0(key, "DeviceName") == 0) {
                const char *name = NULL;
 
                g_variant_get(value, "s", &name);
                g_strlcpy(peer->dev_name, name, WS_SSID_LEN);
-               WDP_LOGD("[%s]", peer->dev_name);
+               WDP_LOGD("Device name [%s]", peer->dev_name);
 
        } else if (g_strcmp0(key, "config_method") == 0) {
                int config_methods = 0;
@@ -550,7 +549,7 @@ static void __ws_get_peer_property(const char *key, GVariant *value, void *user_
                        peer->config_methods |= WFD_OEM_WPS_MODE_PBC;
                if (config_methods & WS_CONFIG_METHOD_KEYPAD)
                        peer->config_methods |= WFD_OEM_WPS_MODE_KEYPAD;
-               WDP_LOGD("[0x%x]", peer->config_methods);
+               WDP_LOGD("Config method [0x%x]", peer->config_methods);
 
        } else if (g_strcmp0(key, "level") == 0) {
 
@@ -559,13 +558,13 @@ static void __ws_get_peer_property(const char *key, GVariant *value, void *user_
 
                g_variant_get(value, "y", &devicecapability);
                peer->dev_flags = (int)devicecapability;
-               WDP_LOGD("[0x%02x]", peer->dev_flags);
+               WDP_LOGD("Device Capa [0x%02x]", peer->dev_flags);
 
        } else if (g_strcmp0(key, "groupcapability") == 0) {
                unsigned char groupcapability = 0;
 
                g_variant_get(value, "y", &groupcapability);
-               WDP_LOGD("[0x%02x]", groupcapability);
+               WDP_LOGD("Group Capa [0x%02x]", groupcapability);
                if (groupcapability & WS_GROUP_CAP_GROUP_OWNER) {
                        peer->group_flags = WFD_OEM_GROUP_FLAG_GROUP_OWNER;
                        peer->dev_role = WFD_OEM_DEV_ROLE_GO;
@@ -592,17 +591,17 @@ static void __ws_get_peer_property(const char *key, GVariant *value, void *user_
        } else if (g_strcmp0(key, "DeviceAddress") == 0) {
 
                if (__ws_unpack_ay(peer->dev_addr, value, WS_MACADDR_LEN))
-                       WDP_LOGD("[" MACSTR "]", MAC2STR(peer->dev_addr));
+                       WDP_LOGD("Device address [" MACSTR "]", MAC2STR(peer->dev_addr));
 
        } else if (g_strcmp0(key, "InterfaceAddress") == 0) {
 
                if (__ws_unpack_ay(peer->intf_addr, value, WS_MACADDR_LEN))
-                       WDP_LOGD("[" MACSTR "]", MAC2STR(peer->intf_addr));
+                       WDP_LOGD("Interface address [" MACSTR "]", MAC2STR(peer->intf_addr));
 
        } else if (g_strcmp0(key, "GODeviceAddress") == 0) {
 
                if (__ws_unpack_ay(peer->go_dev_addr, value, WS_MACADDR_LEN))
-                       WDP_LOGD("[" MACSTR "]", MAC2STR(peer->go_dev_addr));
+                       WDP_LOGD("GODevice address [" MACSTR "]", MAC2STR(peer->go_dev_addr));
 
                if(!ISZEROMACADDR(peer->go_dev_addr))
                        peer->dev_role = WFD_OEM_DEV_ROLE_GC;
@@ -610,27 +609,25 @@ static void __ws_get_peer_property(const char *key, GVariant *value, void *user_
        } else {
                WDP_LOGE("Unknown value");
        }
-       __WDP_LOG_FUNC_EXIT__;
+       return;
 }
 
 static void __ws_peer_property(const char *key, GVariant *value, void *user_data)
 {
-       __WDP_LOG_FUNC_ENTER__;
        if(!user_data) {
-               __WDP_LOG_FUNC_EXIT__;
                return;
        }
 
        wfd_oem_dev_data_s *peer = (wfd_oem_dev_data_s *)user_data;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        if (g_strcmp0(key, "DeviceName") == 0) {
                const char *name = NULL;
 
                g_variant_get(value, "s", &name);
                g_strlcpy(peer->name, name, WS_SSID_LEN);
-               WDP_LOGD("[%s]", peer->name);
+               WDP_LOGD("Device Name [%s]", peer->name);
 
        } else if (g_strcmp0(key, "config_method") == 0) {
                int config_methods = 0;
@@ -643,7 +640,7 @@ static void __ws_peer_property(const char *key, GVariant *value, void *user_data
                        peer->config_methods |= WFD_OEM_WPS_MODE_PBC;
                if (config_methods & WS_CONFIG_METHOD_KEYPAD)
                        peer->config_methods |= WFD_OEM_WPS_MODE_KEYPAD;
-               WDP_LOGD("[0x%x]", peer->config_methods);
+               WDP_LOGD("Config method [0x%x]", peer->config_methods);
 
        } else if (g_strcmp0(key, "level") == 0) {
 
@@ -652,13 +649,13 @@ static void __ws_peer_property(const char *key, GVariant *value, void *user_data
 
                g_variant_get(value, "y", &devicecapability);
                peer->dev_flags = (int)devicecapability;
-               WDP_LOGD("[0x%02x]", peer->dev_flags);
+               WDP_LOGD("Device Capa [0x%02x]", peer->dev_flags);
 
        } else if (g_strcmp0(key, "groupcapability") == 0) {
                unsigned char groupcapability = 0;
 
                g_variant_get(value, "y", &groupcapability);
-               WDP_LOGD("[0x%02x]", groupcapability);
+               WDP_LOGD("Group Capa [0x%02x]", groupcapability);
                if (groupcapability & WS_GROUP_CAP_GROUP_OWNER) {
                        peer->group_flags = WFD_OEM_GROUP_FLAG_GROUP_OWNER;
                        peer->dev_role = WFD_OEM_DEV_ROLE_GO;
@@ -685,19 +682,18 @@ static void __ws_peer_property(const char *key, GVariant *value, void *user_data
        } else if (g_strcmp0(key, "DeviceAddress") == 0) {
 
                if (__ws_unpack_ay(peer->p2p_dev_addr, value, WS_MACADDR_LEN))
-                       WDP_LOGD("[" MACSTR "]", MAC2STR(peer->p2p_dev_addr));
+                       WDP_LOGD("Device address [" MACSTR "]", MAC2STR(peer->p2p_dev_addr));
 
        } else if (g_strcmp0(key, "InterfaceAddress") == 0) {
 
                if (__ws_unpack_ay(peer->p2p_intf_addr, value, WS_MACADDR_LEN))
-                       WDP_LOGD("[" MACSTR "]", MAC2STR(peer->p2p_intf_addr));
+                       WDP_LOGD("Interface Address [" MACSTR "]", MAC2STR(peer->p2p_intf_addr));
 
        } else if (g_strcmp0(key, "GODeviceAddress") == 0) {
 
                unsigned char go_dev_addr[OEM_MACADDR_LEN];
                if (__ws_unpack_ay(go_dev_addr, value, WS_MACADDR_LEN))
                        WDP_LOGD("[" MACSTR "]", MAC2STR(go_dev_addr));
-               WDP_LOGD("[" MACSTR "]", MAC2STR(go_dev_addr));
 
                if(!ISZEROMACADDR(go_dev_addr))
                        peer->dev_role = WFD_OEM_DEV_ROLE_GC;
@@ -705,18 +701,17 @@ static void __ws_peer_property(const char *key, GVariant *value, void *user_data
        } else {
                WDP_LOGE("Unknown value");
        }
-       __WDP_LOG_FUNC_EXIT__;
+       return;
 }
 
 void __ws_interface_property(const char *key, GVariant *value, void *user_data)
 {
-       __WDP_LOG_FUNC_ENTER__;
        wfd_oem_event_s *event = (wfd_oem_event_s *)user_data;
        if(!event)
                return;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        if (g_strcmp0(key, "Ifname") == 0) {
                const char *ifname = NULL;
 
@@ -725,26 +720,24 @@ void __ws_interface_property(const char *key, GVariant *value, void *user_data)
                WDP_LOGD("Ifname [%s]", event->ifname);
 
        }
-
-       __WDP_LOG_FUNC_EXIT__;
+       return;
 }
 
 void __ws_group_property(const char *key, GVariant *value, void *user_data)
 {
-       __WDP_LOG_FUNC_ENTER__;
        wfd_oem_event_s *event = (wfd_oem_event_s *)user_data;
        if(!event || !event->edata)
                return;
 
        wfd_oem_group_data_s *group = (wfd_oem_group_data_s *)event->edata;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        if (g_strcmp0(key, "Role") == 0) {
                const char *role = NULL;
 
                g_variant_get(value, "s", &role);
-               WDP_LOGD("role [%s]", role);
+               WDP_LOGD("Role [%s]", role);
 
                if (!strncmp(role, "GO", 2))
                        event->dev_role = WFD_OEM_DEV_ROLE_GO;
@@ -770,8 +763,8 @@ void __ws_group_property(const char *key, GVariant *value, void *user_data)
                unsigned char ssid[WS_SSID_LEN +1] = {0,};
 
                __ws_unpack_ay(ssid, value, WS_SSID_LEN);
-                       memcpy(group->ssid, ssid, WS_SSID_LEN+1);
-                       WDP_LOGD("ssid [%s]", group->ssid);
+               memcpy(group->ssid, ssid, WS_SSID_LEN+1);
+               WDP_LOGD("ssid [%s]", group->ssid);
 
        } else if (g_strcmp0(key, "BSSID") == 0) {
 
@@ -781,31 +774,30 @@ void __ws_group_property(const char *key, GVariant *value, void *user_data)
        } else {
                WDP_LOGE("Unknown value");
        }
-       __WDP_LOG_FUNC_EXIT__;
+       return;
 }
 
 void __ws_extract_invitation_details(const char *key, GVariant *value, void *user_data)
 {
-       __WDP_LOG_FUNC_ENTER__;
        wfd_oem_event_s *event = (wfd_oem_event_s *)user_data;
        if(!event || !event->edata)
                return;
 
        wfd_oem_invite_data_s *invitation = (wfd_oem_invite_data_s *)event->edata;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        if (g_strcmp0(key, "sa") == 0) {
                if (__ws_unpack_ay(invitation->sa, value, WS_MACADDR_LEN))
-                       WDP_LOGD("[" MACSTR "]", MAC2STR(invitation->sa));
+                       WDP_LOGD("SA [" MACSTR "]", MAC2STR(invitation->sa));
 
        } else if (g_strcmp0(key, "go_dev_add") == 0) {
                if (__ws_unpack_ay(invitation->go_dev_addr, value, WS_MACADDR_LEN))
-                                       WDP_LOGD("[" MACSTR "]", MAC2STR(invitation->go_dev_addr));
+                                       WDP_LOGD("GO device address [" MACSTR "]", MAC2STR(invitation->go_dev_addr));
 
        } else if (g_strcmp0(key, "bssid") == 0) {
                if (__ws_unpack_ay(invitation->bssid, value, WS_MACADDR_LEN))
-                                       WDP_LOGD("[" MACSTR "]", MAC2STR(invitation->bssid));
+                                       WDP_LOGD("BSSID [" MACSTR "]", MAC2STR(invitation->bssid));
 
        } else if (g_strcmp0(key, "persistent_id") == 0) {
                g_variant_get(value, "i", &(invitation->persistent_id));
@@ -817,21 +809,19 @@ void __ws_extract_invitation_details(const char *key, GVariant *value, void *use
        } else {
                WDP_LOGE("Unknown value");
        }
-       __WDP_LOG_FUNC_EXIT__;
+       return;
 }
 
 void __ws_extract_group_details(const char *key, GVariant *value, void *user_data)
 {
-
-       __WDP_LOG_FUNC_ENTER__;
        wfd_oem_event_s *event = (wfd_oem_event_s *)user_data;
        if(!event || !event->edata)
                return;
 
        wfd_oem_group_data_s *group = (wfd_oem_group_data_s *)event->edata;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        if (g_strcmp0(key, "interface_object") == 0) {
                static char interface_path[DBUS_OBJECT_PATH_MAX] = {'\0',};
                const char *i_path = NULL;
@@ -847,7 +837,7 @@ void __ws_extract_group_details(const char *key, GVariant *value, void *user_dat
                const char *role = NULL;
 
                g_variant_get(value, "s", &role);
-               WDP_LOGD("role [%s]", role);
+               WDP_LOGD("Role [%s]", role);
 
                if (!strncmp(role, "GO", 2))
                        event->dev_role = WFD_OEM_DEV_ROLE_GO;
@@ -857,17 +847,17 @@ void __ws_extract_group_details(const char *key, GVariant *value, void *user_dat
        } else if (g_strcmp0(key, "IpAddr") == 0) {
 
                if (__ws_unpack_ay(group->ip_addr, value, OEM_IPADDR_LEN))
-                       WDP_LOGD("[" IPSTR "]", IP2STR(group->ip_addr));
+                       WDP_LOGD("IP address [" IPSTR "]", IP2STR(group->ip_addr));
 
        } else if (g_strcmp0(key, "IpAddrMask") == 0) {
 
                if (__ws_unpack_ay(group->ip_addr_mask, value, OEM_IPADDR_LEN))
-                       WDP_LOGD("[" IPSTR "]", IP2STR(group->ip_addr_mask));
+                       WDP_LOGD("IP mask [" IPSTR "]", IP2STR(group->ip_addr_mask));
 
        } else if (g_strcmp0(key, "IpAddrGo") == 0) {
 
                if (__ws_unpack_ay(group->ip_addr_go, value, OEM_IPADDR_LEN))
-                       WDP_LOGD("[" IPSTR "]", IP2STR(group->ip_addr_go));
+                       WDP_LOGD("GO IP address [" IPSTR "]", IP2STR(group->ip_addr_go));
 
        } else if (g_strcmp0(key, "group_object") == 0) {
                static char group_path[DBUS_OBJECT_PATH_MAX] = {'\0',};
@@ -891,20 +881,19 @@ void __ws_extract_group_details(const char *key, GVariant *value, void *user_dat
                                _group_signal_cb,
                                NULL, NULL);
        }
-       __WDP_LOG_FUNC_EXIT__;
+       return;
 }
 
 void __ws_extract_gonegfailaure_details(const char *key, GVariant *value, void *user_data)
 {
-       __WDP_LOG_FUNC_ENTER__;
        wfd_oem_event_s *event = (wfd_oem_event_s *)user_data;
        if(!event || !event->edata)
                return;
 
        wfd_oem_conn_data_s *conn = (wfd_oem_conn_data_s *)event->edata;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        if (g_strcmp0(key, "peer_object") == 0) {
                static char peer_path[DBUS_OBJECT_PATH_MAX] = {'\0',};
                const char *path;
@@ -920,20 +909,19 @@ void __ws_extract_gonegfailaure_details(const char *key, GVariant *value, void *
                WDP_LOGD("Retrive status [%d]", status);
                conn->status = status;
        }
-       __WDP_LOG_FUNC_EXIT__;
+       return;
 }
 
 void __ws_extract_gonegsuccess_details(const char *key, GVariant *value, void *user_data)
 {
-       __WDP_LOG_FUNC_ENTER__;
        wfd_oem_event_s *event = (wfd_oem_event_s *)user_data;
        if(!event || !event->edata)
                return;
 
        wfd_oem_conn_data_s *edata = (wfd_oem_conn_data_s *)event->edata;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        if (g_strcmp0(key, "peer_object") == 0) {
 
        } else if (g_strcmp0(key, "status") == 0) {
@@ -960,12 +948,12 @@ void __ws_extract_gonegsuccess_details(const char *key, GVariant *value, void *u
        } else if (g_strcmp0(key, "peer_device_addr") == 0) {
 
                if(__ws_unpack_ay(edata->peer_device_addr, value, WS_MACADDR_LEN))
-                       WDP_LOGD("[" MACSTR "]", MAC2STR(edata->peer_device_addr));
+                       WDP_LOGD("Device address[" MACSTR "]", MAC2STR(edata->peer_device_addr));
 
        } else if(g_strcmp0(key, "peer_interface_addr") == 0) {
 
                if(__ws_unpack_ay(edata->peer_intf_addr, value, WS_MACADDR_LEN))
-                       WDP_LOGD("[" MACSTR "]", MAC2STR(edata->peer_intf_addr));
+                       WDP_LOGD("Interface address [" MACSTR "]", MAC2STR(edata->peer_intf_addr));
 
        } else if (g_strcmp0(key, "wps_method") == 0) {
 
@@ -979,7 +967,7 @@ void __ws_extract_gonegsuccess_details(const char *key, GVariant *value, void *u
        } else if (g_strcmp0(key, "peer_config_timeout") == 0) {
 
        }
-       __WDP_LOG_FUNC_EXIT__;
+       return;
 }
 
 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
@@ -1024,9 +1012,9 @@ void __ws_extract_servicediscoveryresponse_details(const char *key, GVariant *va
 
        if(!event)
                return;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        if (g_strcmp0(key, "peer_object") == 0) {
                static char peer_path[DBUS_OBJECT_PATH_MAX] = {'\0',};
                __ws_path_to_addr(peer_path, event->dev_addr, value);
@@ -1638,7 +1626,7 @@ static void _ws_process_service_discovery_response(GDBusConnection *connection,
        event.event_id = WFD_OEM_EVENT_SERV_DISC_RESP;
 
        if(parameters != NULL) {
-               g_variant_get(parameters, "(a{sv}", &iter);
+               g_variant_get(parameters, "(a{sv})", &iter);
                if(iter != NULL) {
                        dbus_property_foreach(iter, __ws_extract_servicediscoveryresponse_details, &event);
                        event.edata_type = WFD_OEM_EDATA_TYPE_NEW_SERVICE;
@@ -1704,7 +1692,9 @@ static void _ws_process_wps_failed(GDBusConnection *connection,
                GVariant *value = NULL;
 
                while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
                        CHECK_KEY_VALUE(key, value);
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
                }
                g_variant_iter_free(iter);
        }
@@ -1860,7 +1850,9 @@ static void _p2pdevice_signal_cb(GDBusConnection *connection,
                const gchar *signal, GVariant *parameters, gpointer user_data)
 {
        int i = 0;
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        DEBUG_SIGNAL(sender, object_path, interface, signal, parameters);
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        for (i = 0; ws_p2pdevice_signal_map[i].member != NULL; i++) {
                if (!g_strcmp0(signal, ws_p2pdevice_signal_map[i].member) &&
@@ -1905,7 +1897,9 @@ static void _group_signal_cb(GDBusConnection *connection,
                const gchar *sender, const gchar *object_path, const gchar *interface,
                const gchar *signal, GVariant *parameters, gpointer user_data)
 {
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        DEBUG_SIGNAL(sender, object_path, interface, signal, parameters);
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        if(!g_strcmp0(signal,"PeerJoined")){
 
@@ -2031,7 +2025,9 @@ static int _ws_get_interface(const char *iface_name, handle_reply function, void
                        SUPPLICANT_PATH, g_pd->g_dbus);
 
        params.params = g_variant_new("(s)", iface_name);
-       WDP_LOGE("param [%s]", g_variant_print(params.params,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGE("param [%s]", g_variant_print(params.params, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        res = dbus_method_call(&params, SUPPLICANT_INTERFACE,
                        function, user_data);
@@ -2639,13 +2635,13 @@ int __ws_init_p2pdevice()
        g_variant_builder_unref (builder);
 
        param = g_variant_new("(ssv)", SUPPLICANT_P2PDEVICE, "P2PDeviceConfig", value);
-       WDP_LOGD("init param [%s]", g_variant_print(param,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("init param [%s]", g_variant_print(param, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        params.params = param;
 
        res = dbus_method_call(&params, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
-       g_variant_unref(value);
-       g_variant_unref(param);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -2681,8 +2677,6 @@ int __ws_set_config_methods()
        params.params = param;
 
        res = dbus_method_call(&params, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
-       g_variant_unref(value);
-       g_variant_unref(param);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -2893,10 +2887,10 @@ int ws_start_scan(wfd_oem_scan_param_s *param)
        }
 
        params.params = value;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        res = dbus_method_call(&params, SUPPLICANT_P2PDEVICE, NULL, NULL);
-       g_variant_unref(value);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -2932,10 +2926,10 @@ int ws_restart_scan(int freq)
        g_variant_builder_unref (builder);
 
        params.params = value;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        res = dbus_method_call(&params, SUPPLICANT_P2PDEVICE, NULL, NULL);
-       g_variant_unref(value);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -3070,12 +3064,13 @@ int ws_prov_disc_req(unsigned char *peer_addr, wfd_oem_wps_mode_e wps_mode, int
        WDP_LOGD("get peer path [%s]", peer_path);
 
        value = g_variant_new ("(os)", peer_path, __ws_wps_to_txt(wps_mode));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        params.params = value;
 
        res = dbus_method_call(&params, SUPPLICANT_P2PDEVICE, NULL, NULL);
-       g_variant_unref(value);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -3131,13 +3126,13 @@ int ws_connect(unsigned char *peer_addr, wfd_oem_conn_param_s *param)
 
        value = g_variant_new ("(a{sv})", builder);
        g_variant_builder_unref (builder);
-
-       WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        params.params = value;
 
        res = dbus_method_call(&params, SUPPLICANT_P2PDEVICE, NULL, NULL);
-       g_variant_unref(value);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -3174,12 +3169,13 @@ int ws_disconnect(unsigned char *peer_addr)
        WDP_LOGE("get peer path [%s]", peer_path);
 
        value = g_variant_new ("(oi)", peer_path, 0);
-       WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        params.params = value;
 
        res = dbus_method_call(&params, SUPPLICANT_P2PDEVICE, NULL, NULL);
-       g_variant_unref(value);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -3216,12 +3212,13 @@ int ws_reject_connection(unsigned char *peer_addr)
        WDP_LOGE("get peer path [%s]", peer_path);
 
        value = g_variant_new ("(o)", peer_path);
-       WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        params.params = value;
 
        res = dbus_method_call(&params, SUPPLICANT_P2PDEVICE, NULL, NULL);
-       g_variant_unref(value);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -3365,14 +3362,13 @@ int ws_create_group(int persistent, int freq, const char *passphrase)
 
        value = g_variant_new ("(a{sv})", builder);
        g_variant_builder_unref (builder);
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        params.params = value;
 
        res = dbus_method_call(&params, SUPPLICANT_P2PDEVICE,
                        __store_group_iface_path, g_pd);
-       g_variant_unref(value);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -3454,13 +3450,12 @@ int ws_invite(unsigned char *peer_addr, wfd_oem_invite_param_s *param)
                g_variant_builder_add (builder, "{sv}", "peer", g_variant_new_object_path(peer_path));
                value = g_variant_new ("(a{sv})", builder);
                g_variant_builder_unref (builder);
-
-               WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+               WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
                params.params = value;
 
                res = dbus_method_call(&params, SUPPLICANT_P2PDEVICE, NULL, NULL);
-               g_variant_unref(value);
                if (res < 0)
                        WDP_LOGE("Failed to send command to wpa_supplicant");
                else
@@ -3515,16 +3510,12 @@ int ws_wps_start(unsigned char *peer_addr, int wps_mode, const char *pin)
 
        value = g_variant_new ("(a{sv})", builder);
        g_variant_builder_unref (builder);
-
-       WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        params.params = value;
 
        res = dbus_method_call(&params, SUPPLICANT_WPS, NULL, NULL);
-       g_variant_unref(params.params);
-
-       if (peer_addr != NULL)
-               g_variant_unref(dev_addr);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -3614,13 +3605,13 @@ int ws_set_dev_name(char *dev_name)
 
        param = g_variant_new("(ssv)", SUPPLICANT_P2PDEVICE,
                                "P2PDeviceConfig", value);
-       WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("params [%s]", g_variant_print(param, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        params.params = param;
 
        res = dbus_method_call(&params, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
-       g_variant_unref(value);
-       g_variant_unref(param);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -3675,12 +3666,14 @@ int ws_get_go_intent(int *go_intent)
        }
 
        param = g_variant_new("(ss)", SUPPLICANT_P2PDEVICE, "P2PDeviceConfig");
-       WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("params [%s]", g_variant_print(param, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        reply = g_dbus_connection_call_sync (
                        g_dbus,
                        SUPPLICANT_SERVICE, /* bus name */
-                       SUPPLICANT_INTERFACE, /* object path */
+                       g_pd->iface_path, /* object path */
                        DBUS_PROPERTIES_INTERFACE, /* interface name */
                        DBUS_PROPERTIES_METHOD_GET, /* method name */
                        param, /* GVariant *params */
@@ -3699,8 +3692,6 @@ int ws_get_go_intent(int *go_intent)
                __WDP_LOG_FUNC_EXIT__;
                return -1;
        }
-       g_variant_unref(param);
-
 
        if(reply != NULL){
                g_variant_get(reply, "(a{sv})", &iter);
@@ -3711,7 +3702,9 @@ int ws_get_go_intent(int *go_intent)
                        GVariant *value = NULL;
 
                        while(g_variant_iter_loop(iter, "{sv}", &key, &value)) {
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
                                CHECK_KEY_VALUE(key, value);
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
                                if(g_strcmp0(key, "GOIntent") == 0)
                                        g_variant_get(value, "u", go_intent);
                        }
@@ -3751,13 +3744,13 @@ int ws_set_go_intent(int go_intent)
        g_variant_builder_unref (builder);
 
        param = g_variant_new("(ssv)", SUPPLICANT_P2PDEVICE, "P2PDeviceConfig", value);
-       WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("param [%s]", g_variant_print(param, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        params.params = param;
 
        res = dbus_method_call(&params, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
-       g_variant_unref(value);
-       g_variant_unref(param);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -3791,13 +3784,13 @@ int ws_set_country(char *ccode)
        value = g_variant_new_string(ccode);
 
        param = g_variant_new("(ssv)", SUPPLICANT_IFACE, "Country", value);
-       WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("param [%s]", g_variant_print(param, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        params.params = param;
 
        res = dbus_method_call(&params, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
-       g_variant_unref(value);
-       g_variant_unref(param);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -3824,9 +3817,9 @@ void __parsing_networks (const char *key, GVariant *value, void *user_data)
        }
 
        ws_network_info_s *network = (ws_network_info_s *)user_data;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        if (g_strcmp0(key, "ssid") == 0) {
                const char *ssid = NULL;
                g_variant_get(value, "s", &ssid);
@@ -3850,9 +3843,9 @@ void __ws_extract_p2pdevice_details(const char *key, GVariant *value, void *user
 {
 
        __WDP_LOG_FUNC_ENTER__;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        if (g_strcmp0(key, "PersistentGroups") == 0) {
                GVariantIter *iter = NULL;
                const char *path = NULL;
@@ -4042,8 +4035,6 @@ int ws_set_persistent_reconnect(unsigned char *bssid, int reconnect)
        params.params = param;
 
        res = dbus_method_call(&params, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
-       g_variant_unref(value);
-       g_variant_unref(param);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -4339,7 +4330,9 @@ int ws_start_service_discovery(unsigned char *mac_addr, int service_type)
        value = g_variant_new ("(a{sv})", builder);
        g_variant_builder_unref (builder);
 
-       WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        params.params = value;
 
@@ -4468,8 +4461,9 @@ int ws_serv_add(wfd_oem_new_service_s *service)
 
        value = g_variant_new ("(a{sv})", builder);
        g_variant_builder_unref (builder);
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
 
        params.params = value;
 
@@ -4524,9 +4518,9 @@ int ws_serv_del(wfd_oem_new_service_s *service)
 
        value = g_variant_new ("(a{sv})", builder);
        g_variant_builder_unref (builder);
-
-       WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        params.params = value;
 
        res = dbus_method_call(&params, SUPPLICANT_P2PDEVICE, NULL, NULL);
@@ -4567,13 +4561,12 @@ int _ws_disable_display()
        g_variant_builder_unref (builder);
 
        param = g_variant_new("(ssv)", SUPPLICANT_INTERFACE, "WFDIEs", value);
-       WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+       WDP_LOGD("param [%s]", g_variant_print(param,TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        params.params = param;
 
        res = dbus_method_call(&params, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
-       g_variant_unref(value);
-       g_variant_unref(param);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -4655,17 +4648,15 @@ int ws_set_display(wfd_oem_display_s *wifi_display)
                g_variant_builder_add(builder, "y", ies[i]);
        value = g_variant_new ("ay", builder);
        g_variant_builder_unref (builder);
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
        WDP_LOGD("value [%s]", g_variant_print(value,TRUE));
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
        param = g_variant_new("(ssv)", SUPPLICANT_INTERFACE, "WFDIEs", value);
        WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
 
        params.params = param;
 
        res = dbus_method_call(&params, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
-       g_variant_unref(value);
-       g_variant_unref(param);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
index f0b0fb8..ee9f114 100755 (executable)
@@ -529,28 +529,6 @@ done:
        return 0;
 }
 
-static gboolean _wfd_remove_event_source(gpointer data)
-{
-       __WDS_LOG_FUNC_ENTER__;
-       int source_id = (intptr_t) data;
-       int res = 0;
-
-       if (source_id < 0) {
-               WDS_LOGE("Invalid source ID [%d]", source_id);
-               return FALSE;
-       }
-
-       res = g_source_remove(source_id);
-       if (!res) {
-               WDS_LOGE("Failed to remove GSource");
-               return FALSE;
-       }
-       WDS_LOGD("Succeeded to remove GSource");
-
-       __WDS_LOG_FUNC_EXIT__;
-       return FALSE;
-}
-
 static int _wfd_deregister_client(void *data, int client_id)
 {
        __WDS_LOG_FUNC_ENTER__;
@@ -578,7 +556,7 @@ static int _wfd_deregister_client(void *data, int client_id)
        if (client->ssock >= SOCK_FD_MIN)
                close(client->ssock);
        client->ssock = -1;
-       g_idle_add((GSourceFunc) _wfd_remove_event_source, (gpointer)(void *)(intptr_t) client->gsource_id);
+       g_source_remove(client->gsource_id);
        client->gsource_id = 0;
 
        g_free(client);
old mode 100755 (executable)
new mode 100644 (file)
index 1e74e67..1885132
@@ -51,6 +51,7 @@
 static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *data)
 {
        __WDS_LOG_FUNC_ENTER__;
+
        wfd_device_s *peer = NULL;
 
        if (!manager || !data) {
@@ -127,707 +128,1254 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        return G_SOURCE_REMOVE;
 }
 
-int wfd_process_event(void *user_data, void *data)
-{
-       __WDS_LOG_FUNC_ENTER__;
-       wfd_manager_s *manager = (wfd_manager_s*) user_data;
-       wfd_oem_event_s *event = (wfd_oem_event_s*) data;
+ static void __wfd_process_deactivated(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wifi_direct_client_noti_s noti;
+
+       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+       noti.event = WIFI_DIRECT_CLI_EVENT_DEACTIVATION;
+       noti.error = WIFI_DIRECT_ERROR_NONE;
+       wfd_client_send_event(manager, &noti);
+
+       wfd_destroy_group(manager, GROUP_IFNAME);
+       wfd_destroy_session(manager);
+       wfd_peer_clear_all(manager);
+       wfd_local_reset_data(manager);
+
+       wfd_state_set(manager, WIFI_DIRECT_STATE_DEACTIVATED);
+       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_DEACTIVATED);
+       manager->req_wps_mode = WFD_WPS_MODE_PBC;
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_peer_found(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wfd_oem_dev_data_s *edata = NULL;
+       wifi_direct_client_noti_s noti;
        int res = 0;
 
-       if (!manager || !event) {
-               WDS_LOGE("Invalid parameter");
-               return -1;
+       edata = (wfd_oem_dev_data_s*) event->edata;
+       if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
+               WDS_LOGE("Invalid event data");
+               return;
        }
 
-       WDS_LOGD("Event[%d] from " MACSECSTR, event->event_id, MAC2SECSTR(event->dev_addr));
+       res = _wfd_event_update_peer(manager, edata);
+       if (res < 0) {
+               WDS_LOGE("Failed to update peer data");
+               return;
+       }
 
-       switch (event->event_id) {
-       case WFD_OEM_EVENT_DEACTIVATED:
-       {
-               // TODO: notify app
-               wifi_direct_client_noti_s noti;
+       if (manager->state > WIFI_DIRECT_STATE_ACTIVATING &&
+                       manager->state != WIFI_DIRECT_STATE_CONNECTING &&
+                       manager->state != WIFI_DIRECT_STATE_DISCONNECTING) {
                memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-               noti.event = WIFI_DIRECT_CLI_EVENT_DEACTIVATION;
+               snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(edata->p2p_dev_addr));
+               noti.event = WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS;
                noti.error = WIFI_DIRECT_ERROR_NONE;
                wfd_client_send_event(manager, &noti);
+       }
 
-               // TODO: remove group, session, all peers
-               wfd_destroy_group(manager, GROUP_IFNAME);
-               wfd_destroy_session(manager);
-               wfd_peer_clear_all(manager);
-               wfd_local_reset_data(manager);
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_peer_disappeared(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wifi_direct_client_noti_s noti;
+
+       wfd_remove_peer(manager, event->dev_addr);
+
+       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+       noti.event = WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS;
+       noti.error = WIFI_DIRECT_ERROR_NONE;
+       wfd_client_send_event(manager, &noti);
 
-               wfd_state_set(manager, WIFI_DIRECT_STATE_DEACTIVATED);
-               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_DEACTIVATED);
-               manager->req_wps_mode = WFD_WPS_MODE_PBC;
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_discovery_finished(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wifi_direct_client_noti_s noti;
+
+       if (manager->state != WIFI_DIRECT_STATE_DISCOVERING &&
+                       manager->state != WIFI_DIRECT_STATE_ACTIVATED) {
+               WDS_LOGE("Notify finding stopped when discovering or activated. [%d]", manager->state);
+               return;
        }
-       break;
-       case WFD_OEM_EVENT_PEER_FOUND:
-       {
-               wfd_oem_dev_data_s *edata = (wfd_oem_dev_data_s*) event->edata;
-               if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
-                       WDS_LOGE("Invalid event data");
-                       break;
-               }
 
-               res = _wfd_event_update_peer(manager, edata);
-               if (res < 0) {
-                       WDS_LOGE("Failed to update peer data");
-                       break;
-               }
+       if (manager->scan_mode == WFD_SCAN_MODE_PASSIVE) {
+               WDS_LOGE("During passive scan, Discover Finished event will not notified");
+               return;
+       }
 
-               if (manager->state > WIFI_DIRECT_STATE_ACTIVATING &&
-                               manager->state != WIFI_DIRECT_STATE_CONNECTING &&
-                               manager->state != WIFI_DIRECT_STATE_DISCONNECTING) {
-                       wifi_direct_client_noti_s noti;
-                       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-                       snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(edata->p2p_dev_addr));
-                       noti.event = WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS;
-                       noti.error = WIFI_DIRECT_ERROR_NONE;
-                       wfd_client_send_event(manager, &noti);
-               }
+       if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
+               wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
+       } else {
+               wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
        }
-       break;
-       case WFD_OEM_EVENT_PROV_DISC_REQ:
-       case WFD_OEM_EVENT_PROV_DISC_RESP:
-       {
-               wfd_device_s *peer = NULL;
+       manager->scan_mode = WFD_SCAN_MODE_NONE;
+
+       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+       noti.event = WIFI_DIRECT_CLI_EVENT_DISCOVER_END;
+       noti.error = WIFI_DIRECT_ERROR_NONE;
+       wfd_client_send_event(manager, &noti);
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_prov_disc_req(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wfd_device_s *peer = NULL;
+       int res = 0;
+
 #ifdef CTRL_IFACE_DBUS
-               wfd_oem_dev_data_s *edata = (wfd_oem_dev_data_s*) event->edata;
-               if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
-                       WDS_LOGE("Invalid event data");
-                       break;
-               }
+       wfd_oem_dev_data_s *edata = NULL;
 
-               res = _wfd_event_update_peer(manager, edata);
-               peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
-               if (peer)
-                       peer->state = WFD_PEER_STATE_CONNECTING;
+       edata = (wfd_oem_dev_data_s*) event->edata;
+       if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
+               WDS_LOGE("Invalid event data");
+               return;
+       }
+
+       res = _wfd_event_update_peer(manager, edata);
+       peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+       if (peer)
+               peer->state = WFD_PEER_STATE_CONNECTING;
 #else /* CTRL_IFACE_DBUS */
-               peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+       peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+       if (!peer) {
+               WDS_LOGD("Prov_disc from unknown peer. Add new peer");
+               peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
                if (!peer) {
-                       WDS_LOGD("Porv_disc from unknown peer. Add new peer");
-                       peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
-                       if (!peer) {
-                               WDS_LOGE("Failed to add peer for invitation");
-                               return -1;
-                       }
-                       peer->state = WFD_PEER_STATE_CONNECTING;
-                       wfd_update_peer(manager, peer);
+                       WDS_LOGE("Failed to add peer for invitation");
+                       return;
                }
-               wfd_update_peer_time(manager, event->dev_addr);
+               peer->state = WFD_PEER_STATE_CONNECTING;
+               wfd_update_peer(manager, peer);
+       }
+       wfd_update_peer_time(manager, event->dev_addr);
 #endif /* CTRL_IFACE_DBUS */
-               res = wfd_session_process_event(manager, event);
-               if (res < 0) {
-                       WDS_LOGE("Failed to process event of session");
-                       break;
+
+       res = wfd_session_process_event(manager, event);
+       if (res < 0)
+               WDS_LOGE("Failed to process event of session");
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_prov_disc_resp(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wfd_device_s *peer = NULL;
+       int res = 0;
+
+#ifdef CTRL_IFACE_DBUS
+       wfd_oem_dev_data_s *edata = NULL;
+
+       edata = (wfd_oem_dev_data_s*) event->edata;
+       if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
+               WDS_LOGE("Invalid event data");
+               return;
+       }
+
+       res = _wfd_event_update_peer(manager, edata);
+       peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+       if (peer)
+               peer->state = WFD_PEER_STATE_CONNECTING;
+#else /* CTRL_IFACE_DBUS */
+       peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+       if (!peer) {
+               WDS_LOGD("Prov_disc from unknown peer. Add new peer");
+               peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
+               if (!peer) {
+                       WDS_LOGE("Failed to add peer for invitation");
+                       return;
                }
+               peer->state = WFD_PEER_STATE_CONNECTING;
+               wfd_update_peer(manager, peer);
        }
-       break;
-       case WFD_OEM_EVENT_PEER_DISAPPEARED:
-       {
-               wfd_remove_peer(manager, event->dev_addr);
-               wifi_direct_client_noti_s noti;
-               memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-               noti.event = WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS;
-               noti.error = WIFI_DIRECT_ERROR_NONE;
-               wfd_client_send_event(manager, &noti);
+       wfd_update_peer_time(manager, event->dev_addr);
+#endif /* CTRL_IFACE_DBUS */
+
+       res = wfd_session_process_event(manager, event);
+       if (res < 0)
+               WDS_LOGE("Failed to process event of session");
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_prov_disc_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wfd_session_s *session = NULL;
+       wifi_direct_client_noti_s noti;
+       unsigned char *peer_addr = NULL;
+
+       session = (wfd_session_s*) manager->session;
+       if (!session) {
+               WDS_LOGE("Unexpected event. Session not exist");
+               return;
        }
-       break;
-       case WFD_OEM_EVENT_DISCOVERY_FINISHED:
-       {
-               if (manager->state != WIFI_DIRECT_STATE_DISCOVERING &&
-                               manager->state != WIFI_DIRECT_STATE_ACTIVATED) {
-                       WDS_LOGE("Notify finding stoped when discovering or activated. [%d]", manager->state);
-                       break;
-               }
 
-               if (manager->scan_mode == WFD_SCAN_MODE_PASSIVE) {
-                       WDS_LOGE("During passive scan, Discover Finished event will not notified");
-                       break;
-               }
+       peer_addr = wfd_session_get_peer_addr(session);
+       if (!peer_addr) {
+               WDS_LOGE("Session do not have peer");
+               return;
+       }
+
+       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+       noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+       noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
+       snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+       wfd_client_send_event(manager, &noti);
+
+       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);
 
-               if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
-                       wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
-                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
-               } else {
                        wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
                        wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+               } else {
+                       wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
                }
-               manager->scan_mode = WFD_SCAN_MODE_NONE;
+       } else {
+               wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+       }
 
-               wifi_direct_client_noti_s noti;
-               memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-               noti.event = WIFI_DIRECT_CLI_EVENT_DISCOVER_END;
-               noti.error = WIFI_DIRECT_ERROR_NONE;
-               wfd_client_send_event(manager, &noti);
+       wfd_destroy_session(manager);
+
+       wfd_oem_refresh(manager->oem_ops);
+#if 0
+       /* After connection failed, scan again */
+       wfd_oem_scan_param_s param;
+       memset(&param, 0x0, sizeof(wfd_oem_scan_param_s));
+       param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
+       param.scan_time = 2;
+       param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
+       wfd_oem_start_scan(manager->oem_ops, &param);
+       manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
+#endif
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_go_neg_req(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wfd_session_s *session = NULL;
+       wifi_direct_client_noti_s noti;
+
+#ifdef CTRL_IFACE_DBUS
+       wfd_oem_dev_data_s *edata = NULL;
+
+       edata = (wfd_oem_dev_data_s*) event->edata;
+       if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
+               WDS_LOGE("Invalid event data");
+               return;
+       }
+
+       if (_wfd_event_update_peer(manager, edata) < 0) {
+               WDS_LOGE("Failed to update peer data");
+               return;
+       }
+#else /* CTRL_IFACE_DBUS */
+       wfd_oem_conn_data_s *edata = NULL;
+       wfd_device_s *peer = NULL;
+
+       edata = (wfd_oem_conn_data_s*) event->edata;
+       if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_CONN) {
+               WDS_LOGE("Invalid connection event data");
+               return;
        }
-       break;
-       case WFD_OEM_EVENT_INVITATION_REQ:
-       {
-               wfd_device_s *peer = NULL;
-               wfd_session_s *session = NULL;
-               wfd_oem_invite_data_s *edata = (wfd_oem_invite_data_s*) event->edata;
 
-               peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+       peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+       if (!peer) {
+               WDS_LOGD("Invitation from unknown peer. Add new peer");
+               peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
                if (!peer) {
-                       WDS_LOGD("Invitation from unknown peer. Add new peer");
-                       peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
-                       if (!peer) {
-                               WDS_LOGE("Failed to add peer for invitation");
-                               return -1;
-                       }
+                       WDS_LOGE("Failed to add peer for invitation");
+                       return;
                }
-               peer->dev_role = WFD_DEV_ROLE_GO;
-               memcpy(peer->intf_addr, edata->bssid, MACADDR_LEN);
-               wfd_update_peer_time(manager, event->dev_addr);
+       }
+
+       if (edata->wps_mode == 0)
+               edata->wps_mode = 1;
+#endif /* CTRL_IFACE_DBUS */
 
+       session = (wfd_session_s*) manager->session;
+       if (!session) {
                session = wfd_create_session(manager, event->dev_addr,
-                                               manager->req_wps_mode, SESSION_DIRECTION_INCOMING);
+#ifdef CTRL_IFACE_DBUS
+                                               event->wps_mode, SESSION_DIRECTION_INCOMING);
+#else /* CTRL_IFACE_DBUS */
+                                               edata->wps_mode, SESSION_DIRECTION_INCOMING);
+#endif /* CTRL_IFACE_DBUS */
                if (!session) {
                        WDS_LOGE("Failed to create session");
-                       return -1;
+                       return;
                }
-               session->type = SESSION_TYPE_INVITE;
+               session->type = SESSION_TYPE_NORMAL;
+               session->state = SESSION_STATE_GO_NEG;
                wfd_session_timer(session, 1);
-
                wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
 
-               res = wfd_session_start(session);
-               if (res < 0) {
-                       WDS_LOGE("Failed to start session");
-                       return -1;
-               }
-
-               wifi_direct_client_noti_s noti;
                memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
                noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ;
                noti.error = WIFI_DIRECT_ERROR_NONE;
-               snprintf(noti.param1, sizeof(noti.param1), MACSTR, MAC2STR(event->dev_addr));
+               g_snprintf(noti.param1, sizeof(noti.param1), MACSTR, MAC2STR(event->dev_addr));
                wfd_client_send_event(manager, &noti);
+       } else {
+               wfd_session_process_event(manager, event);
        }
-       break;
-       case WFD_OEM_EVENT_GO_NEG_REQ:
-       {
-               wfd_session_s *session = (wfd_session_s*) manager->session;
-#ifdef CTRL_IFACE_DBUS
-               wfd_oem_dev_data_s *edata = (wfd_oem_dev_data_s*) event->edata;
-               if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
-                       WDS_LOGE("Invalid event data");
-                       break;
-               }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
 
-               res = _wfd_event_update_peer(manager, edata);
-               if (res < 0) {
-                       WDS_LOGE("Failed to update peer data");
-                       break;
-               }
-#else /* CTRL_IFACE_DBUS */
-               wfd_device_s *peer = NULL;
-               wfd_oem_conn_data_s *edata = (wfd_oem_conn_data_s*) event->edata;
+ static void __wfd_process_go_neg_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
 
-               if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_CONN) {
-                       WDS_LOGE("Invalid connection event data");
-                       break;
-               }
+       wfd_session_s *session = NULL;
+       wfd_oem_conn_data_s *edata = NULL;
+       wifi_direct_client_noti_s noti;
+       unsigned char *peer_addr = NULL;
 
-               peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
-               if (!peer) {
-                       WDS_LOGD("Invitation from unknown peer. Add new peer");
-                       peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
-                       if (!peer) {
-                               WDS_LOGE("Failed to add peer for invitation");
-                               break;
-                       }
+       session = (wfd_session_s*) manager->session;
+       if (!session) {
+               WDS_LOGE("Unexpected event. Session not exist");
+               return;
+       }
+
+       peer_addr = wfd_session_get_peer_addr(session);
+       if (!peer_addr) {
+               WDS_LOGE("Session do not have peer");
+               return;
+       }
+
+       edata = (wfd_oem_conn_data_s*) event->edata;
+       if (edata && edata->status < 0 && session->connecting_120) {
+               if (session->retry_gsrc) {
+                       g_source_remove(session->retry_gsrc);
+                       session->retry_gsrc = 0;
                }
+               session->retry_gsrc = g_idle_add((GSourceFunc) _wfd_connection_retry, session);
+               WDS_LOGD("Connection will be retried");
+               return;
+       }
+
+       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+       noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+       noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
+       snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+       wfd_client_send_event(manager, &noti);
+
+       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_session(manager);
+       manager->local->dev_role = WFD_DEV_ROLE_NONE;
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_go_neg_done(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
 
-               if (edata->wps_mode == 0)
-                       edata->wps_mode = 1;
-#endif /* CTRL_IFACE_DBUS */
-               if (!session) {
-                       session = wfd_create_session(manager, event->dev_addr,
 #ifdef CTRL_IFACE_DBUS
-                                                       event->wps_mode, SESSION_DIRECTION_INCOMING);
-#else /* CTRL_IFACE_DBUS */
-                                                       edata->wps_mode, SESSION_DIRECTION_INCOMING);
+       wfd_session_s *session = NULL;
+       wfd_oem_conn_data_s *edata = NULL;
+       wfd_device_s *peer = NULL;
+
+       edata = (wfd_oem_conn_data_s*) event->edata;
+       if (event == NULL || edata == NULL) {
+               WDS_LOGE("Invalid event data");
+               return;
+       }
+
+       session = (wfd_session_s*) manager->session;
+       if(session && session->peer) {
+               peer = session->peer;
+               memcpy(peer->intf_addr, edata->peer_intf_addr, MACADDR_LEN);
+       }
+       manager->local->dev_role = event->dev_role;
+       wfd_session_process_event(manager, event);
 #endif /* CTRL_IFACE_DBUS */
-                       if (!session) {
-                               WDS_LOGE("Failed to create session");
-                               return -1;
-                       }
-                       session->type = SESSION_TYPE_NORMAL;
-                       session->state = SESSION_STATE_GO_NEG;
-                       wfd_session_timer(session, 1);
-                       wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
 
-                       wifi_direct_client_noti_s noti;
-                       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-                       noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ;
-                       noti.error = WIFI_DIRECT_ERROR_NONE;
-                       g_snprintf(noti.param1, sizeof(noti.param1), MACSTR, MAC2STR(event->dev_addr));
-                       wfd_client_send_event(manager, &noti);
+ static void __wfd_process_wps_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wfd_session_s *session = NULL;
+       wifi_direct_client_noti_s noti;
+       unsigned char *peer_addr = NULL;
+
+       session = (wfd_session_s*) manager->session;
+       if (!session) {
+               WDS_LOGE("Unexpected event. Session not exist");
+               return;
+       }
+
+       peer_addr = wfd_session_get_peer_addr(session);
+       if (!peer_addr) {
+               WDS_LOGE("Session do not have peer");
+               return;
+       }
+
+       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+       noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+       noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
+       snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+       wfd_client_send_event(manager, &noti);
+
+       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_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
                } else {
-                       wfd_session_process_event(manager, event);
+                       wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
                }
+       } else {
+               wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
        }
-       break;
-       case WFD_OEM_EVENT_GO_NEG_DONE:
-#ifdef CTRL_IFACE_DBUS
-       {
-               wfd_session_s *session = (wfd_session_s*) manager->session;
-               wfd_oem_conn_data_s *edata = (wfd_oem_conn_data_s*) event->edata;
-               wfd_device_s *peer = NULL;
 
-               if (event == NULL || edata == NULL) {
-                       WDS_LOGE("Invalid event data");
-                       break;
-               }
+       wfd_destroy_session(manager);
 
-               if(session && session->peer) {
-                       peer = session->peer;
-                       memcpy(peer->intf_addr, edata->peer_intf_addr, MACADDR_LEN);
-               }
-               manager->local->dev_role = event->dev_role;
-               wfd_session_process_event(manager, event);
+       wfd_oem_refresh(manager->oem_ops);
+#if 0
+       /* After connection failed, scan again */
+       wfd_oem_scan_param_s param;
+       memset(&param, 0x0, sizeof(wfd_oem_scan_param_s));
+       param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
+       param.scan_time = 2;
+       param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
+       wfd_oem_start_scan(manager->oem_ops, &param);
+       manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
+#endif
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_wps_done(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wfd_session_process_event(manager, event);
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_key_neg_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+        __WDS_LOG_FUNC_ENTER__;
+
+       wfd_session_s *session = NULL;
+       wifi_direct_client_noti_s noti;
+       unsigned char *peer_addr = NULL;
+
+       session = (wfd_session_s*) manager->session;
+       if (!session) {
+               WDS_LOGE("Unexpected event. Session not exist");
+               return;
        }
-       break;
-#endif /* CTRL_IFACE_DBUS */
-       case WFD_OEM_EVENT_WPS_DONE:
-               wfd_session_process_event(manager, event);
-       break;
-       case WFD_OEM_EVENT_CONNECTED:
-       case WFD_OEM_EVENT_STA_CONNECTED:
-       {
-               // FIXME: Move this code to plugin
-               if (!memcmp(event->intf_addr, manager->local->intf_addr, MACADDR_LEN)) {
-                       WDS_LOGD("Ignore this event");
-                       break;
-               }
 
-               wfd_session_s *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);
+       peer_addr = wfd_session_get_peer_addr(session);
+       if (!peer_addr) {
+               WDS_LOGE("Session do not has peer");
+               return;
+       }
+
+       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+       noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+       noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
+       snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+       wfd_client_send_event(manager, &noti);
+
+       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_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
                        wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
-                       break;
+               } else {
+                       wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
                }
+       } else {
+               wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+       }
 
-               wfd_device_s *peer = wfd_session_get_peer(session);
-               if (!peer) {
-                       WDS_LOGE("Peer not found");
-                       break;
+       wfd_destroy_session(manager);
+
+       wfd_oem_refresh(manager->oem_ops);
+#if 0
+       /* After connection failed, scan again */
+       wfd_oem_scan_param_s param;
+       memset(&param, 0x0, sizeof(wfd_oem_scan_param_s));
+       param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
+       param.scan_time = 2;
+       param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
+       wfd_oem_start_scan(manager->oem_ops, &param);
+       manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
+#endif
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_key_neg_done(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_conn_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_conn_done(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_group_created(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wfd_group_s *group = NULL;
+       wfd_session_s *session = NULL;
+       wifi_direct_client_noti_s noti;
+
+       group = (wfd_group_s*) manager->group;
+       session = (wfd_session_s*)manager->session;
+#ifdef CTRL_IFACE_DBUS
+       if(event->dev_role == WFD_DEV_ROLE_GC && !group) {
+
+               group = wfd_create_pending_group(manager, event->intf_addr);
+               if (!group) {
+                       WDS_LOGE("Failed to create pending group");
+                       return;
+               }
+               manager->group = group;
+       }
+#endif /* CTRL_IFACE_DBUS */
+       if (!group) {
+               if (!session) {
+                       WDS_LOGE("Unexpected Event. Group should be removed(Client)");
+                       wfd_oem_destroy_group(manager->oem_ops, event->ifname);
+                       return;
                }
 
-               wfd_group_s *group = (wfd_group_s*) manager->group;
+               group = wfd_create_group(manager, event);
                if (!group) {
-                       group = wfd_create_pending_group(manager, event->intf_addr);
-                       if (!group) {
-                               WDS_LOGE("Failed to create pending group");
-                               break;
-                       }
-                       manager->group = group;
+                       WDS_LOGE("Failed to create group");
+                       return;
+               }
+       } else {
+               if (!session && !(group->flags & WFD_GROUP_FLAG_AUTONOMOUS)) {
+                       WDS_LOGE("Unexpected Event. Group should be removed(Owner)");
+                       wfd_oem_destroy_group(manager->oem_ops, group->ifname);
+                       return;
                }
-               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;
+               if (group->pending) {
+                       wfd_group_complete(manager, event);
+               } else {
+                       WDS_LOGE("Unexpected event. Group already exist");
+                       return;
+               }
+       }
 
-               if (event->event_id == WFD_OEM_EVENT_STA_CONNECTED) {   // GO
+       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+       if (group->role == WFD_DEV_ROLE_GC && session) {
+#ifdef CTRL_IFACE_DBUS
+               if(session->peer && session->peer->ip_type == WFD_IP_TYPE_OVER_EAPOL)
+                       wfd_util_ip_over_eap_assign(session->peer, event->ifname);
+#else /* CTRL_IFACE_DBUS */
+               wfd_destroy_session(manager);
+#endif /* CTRL_IFACE_DBUS */
+               wfd_peer_clear_all(manager);
+       } else {
+               if (group->flags & WFD_GROUP_FLAG_AUTONOMOUS) {
+                       noti.event = WIFI_DIRECT_CLI_EVENT_GROUP_CREATE_RSP;
+                       wfd_client_send_event(manager, &noti);
                        wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
                        wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
+               }
+       }
 
-                       wifi_direct_client_noti_s noti;
-                       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-                       noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
-                       noti.error = WIFI_DIRECT_ERROR_NONE;
-                       snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
-                       wfd_client_send_event(manager, &noti);
-#ifdef CTRL_IFACE_DBUS
-                       wfd_update_peer(manager, peer);
-                       if (event->ip_addr_peer[3]) {
-                               peer->ip_type = WFD_IP_TYPE_OVER_EAPOL;
-                               memcpy(peer->client_ip_addr, event->ip_addr_peer, IPADDR_LEN);
-                               WDS_LOGE("Peer's client IP [" IPSTR "]", IP2STR((char*) &peer->client_ip_addr));
-                               memcpy(peer->go_ip_addr, manager->local->ip_addr, IPADDR_LEN);
-                               WDS_LOGE("Peer's GO IP [" IPSTR "]", IP2STR((char*) &peer->go_ip_addr));
-                       }
-                       if(peer->ip_type == WFD_IP_TYPE_OVER_EAPOL)
-                               wfd_util_ip_over_eap_lease(peer);
-                       else
-#endif /* CTRL_IFACE_DBUS */
-                       wfd_util_dhcps_wait_ip_leased(peer);
-                       wfd_destroy_session(manager);
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_group_destroyed(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wifi_direct_client_noti_s noti;
+
+       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+       if (manager->state == WIFI_DIRECT_STATE_DISCONNECTING) {
+               noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP;
+               noti.error = WIFI_DIRECT_ERROR_NONE;
+       } else if (manager->state == WIFI_DIRECT_STATE_CONNECTING && manager->session){
+               noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+               noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
+               unsigned char *peer_addr = wfd_session_get_peer_addr(manager->session);
+               if(peer_addr != NULL)
+                       g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+       } else if (manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
+               noti.event = WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP;
+               noti.error = WIFI_DIRECT_ERROR_NONE;
+       } else {
+               WDS_LOGD("Unexpected event(GROUP_DESTROYED). Ignore it");
+               return;
+       }
+       wfd_client_send_event(manager, &noti);
+
+       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_session(manager);
+       manager->local->dev_role = WFD_DEV_ROLE_NONE;
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_invitation_req(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       wfd_device_s *peer = NULL;
+       wfd_session_s *session = NULL;
+       wfd_oem_invite_data_s *edata = NULL;
+       wifi_direct_client_noti_s noti;
+       int res = 0;
+
+       peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+       if (!peer) {
+               WDS_LOGD("Invitation from unknown peer. Add new peer");
+               peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
+               if (!peer) {
+                       WDS_LOGE("Failed to add peer for invitation");
+                       return;
                }
        }
-       break;
-       case WFD_OEM_EVENT_DISCONNECTED:
-       case WFD_OEM_EVENT_STA_DISCONNECTED:
-       {
-               wfd_group_s *group = (wfd_group_s*) manager->group;
-               wfd_session_s *session = (wfd_session_s*) manager->session;
-               wfd_device_s *peer = NULL;
-               unsigned char peer_addr[MACADDR_LEN] = {0, };
-               wifi_direct_client_noti_s noti;
-               memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+       peer->dev_role = WFD_DEV_ROLE_GO;
+
+       edata = (wfd_oem_invite_data_s*) event->edata;
+       memcpy(peer->intf_addr, edata->bssid, MACADDR_LEN);
+       wfd_update_peer_time(manager, event->dev_addr);
+
+       session = wfd_create_session(manager, event->dev_addr,
+                                       manager->req_wps_mode, SESSION_DIRECTION_INCOMING);
+       if (!session) {
+               WDS_LOGE("Failed to create session");
+               return;
+       }
+       session->type = SESSION_TYPE_INVITE;
+       wfd_session_timer(session, 1);
+
+       wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
+
+       res = wfd_session_start(session);
+       if (res < 0) {
+               WDS_LOGE("Failed to start session");
+               return;
+       }
+
+       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+       noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ;
+       noti.error = WIFI_DIRECT_ERROR_NONE;
+       snprintf(noti.param1, sizeof(noti.param1), MACSTR, MAC2STR(event->dev_addr));
+       wfd_client_send_event(manager, &noti);
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_invitation_res(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_sta_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;
+       wifi_direct_client_noti_s noti;
+
+       // FIXME: Move this code to plugin
+       if (!memcmp(event->intf_addr, manager->local->intf_addr, MACADDR_LEN)) {
+               WDS_LOGD("Ignore this event");
+               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);
+               return;
+       }
+
+       peer = wfd_session_get_peer(session);
+       if (!peer) {
+               WDS_LOGE("Peer not found");
+               return;
+       }
+
+       group = (wfd_group_s*) manager->group;
+       if (!group) {
+               group = wfd_create_pending_group(manager, event->intf_addr);
                if (!group) {
-                       WDS_LOGE("Group not found");
-                       break;
+                       WDS_LOGE("Failed to create pending group");
+                       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;
+
+       wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
 
+       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+       noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+       noti.error = WIFI_DIRECT_ERROR_NONE;
+       snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
+       wfd_client_send_event(manager, &noti);
 #ifdef CTRL_IFACE_DBUS
-               peer = wfd_group_find_member_by_addr(group, event->dev_addr);
+       wfd_update_peer(manager, peer);
+       if (event->ip_addr_peer[3]) {
+               peer->ip_type = WFD_IP_TYPE_OVER_EAPOL;
+               memcpy(peer->client_ip_addr, event->ip_addr_peer, IPADDR_LEN);
+               WDS_LOGE("Peer's client IP [" IPSTR "]", IP2STR((char*) &peer->client_ip_addr));
+               memcpy(peer->go_ip_addr, manager->local->ip_addr, IPADDR_LEN);
+               WDS_LOGE("Peer's GO IP [" IPSTR "]", IP2STR((char*) &peer->go_ip_addr));
+       }
+       if(peer->ip_type == WFD_IP_TYPE_OVER_EAPOL)
+               wfd_util_ip_over_eap_lease(peer);
+       else
+#endif /* CTRL_IFACE_DBUS */
+       wfd_util_dhcps_wait_ip_leased(peer);
+       wfd_destroy_session(manager);
+
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+
+ static void __wfd_process_sta_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, };
+
+       group = (wfd_group_s*) manager->group;
+       if (!group) {
+               WDS_LOGE("Group not found");
+               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);
+       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 connected peer");
-                       peer = wfd_session_get_peer(session);
-                       if (!peer) {
-                               WDS_LOGE("Failed to find connecting peer");
-                               break;
-                       }
+                       WDS_LOGE("Failed to find connecting peer");
+                       return;
                }
-               memcpy(peer_addr, peer->dev_addr, MACADDR_LEN);
-
-               /* 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 */
+       }
+       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)) {
+               /* 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) {
+               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;
+                       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;
-                       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");
-                               break;
-                       }
-                       g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+               } 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 event. Ignore it");
-                       break;
+                       WDS_LOGE("Unexpected Peer State. Ignore it");
+                       return;
                }
-               wfd_client_send_event(manager, &noti);
+               g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+       } else {
+               WDS_LOGE("Unexpected event. Ignore it");
+               return;
+       }
+       wfd_client_send_event(manager, &noti);
 
-               if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
-                       wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
-                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
-               } else {
-                       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);
+       wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+       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;
+
+       // FIXME: Move this code to plugin
+       if (!memcmp(event->intf_addr, manager->local->intf_addr, MACADDR_LEN)) {
+               WDS_LOGD("Ignore this event");
+               return;
        }
-       break;
-       case WFD_OEM_EVENT_GROUP_CREATED:
-       {
-               wfd_group_s *group = (wfd_group_s*) manager->group;
-               wfd_session_s *session = (wfd_session_s*)manager->session;
-#ifdef CTRL_IFACE_DBUS
-               if(event->dev_role == WFD_DEV_ROLE_GC && !group) {
 
-                       group = wfd_create_pending_group(manager, event->intf_addr);
-                       if (!group) {
-                               WDS_LOGE("Failed to create pending group");
-                               break;
-                       }
-                       manager->group = group;
+       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);
+               return;
+       }
+
+       peer = wfd_session_get_peer(session);
+       if (!peer) {
+               WDS_LOGE("Peer not found");
+               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");
+                       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;
 
-               if (!group) {
-                       if (!session) {
-                               WDS_LOGE("Unexpected Event. Group should be removed(Client)");
-                               wfd_oem_destroy_group(manager->oem_ops, event->ifname);
-                               break;
-                       }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
 
-                       group = wfd_create_group(manager, event);
-                       if (!group) {
-                               WDS_LOGE("Failed to create group");
-                               break;
-                       }
-               } else {
-                       if (!session && !(group->flags & WFD_GROUP_FLAG_AUTONOMOUS)) {
-                               WDS_LOGE("Unexpected Event. Group should be removed(Owner)");
-                               wfd_oem_destroy_group(manager->oem_ops, group->ifname);
-                               break;
-                       }
+ static void __wfd_process_disconnected(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
 
-                       if (group->pending) {
-                               wfd_group_complete(manager, event);
-                       } else {
-                               WDS_LOGE("Unexpected event. Group already exist");
-                               break;
-                       }
-               }
+       wfd_group_s *group = NULL;
+       wfd_device_s *peer = NULL;
+       wifi_direct_client_noti_s noti;
+       unsigned char peer_addr[MACADDR_LEN] = {0, };
+
+       group = (wfd_group_s*) manager->group;
+       if (!group) {
+               WDS_LOGE("Group not found");
+               return;
+       }
 
-               wifi_direct_client_noti_s noti;
-               memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-               if (group->role == WFD_DEV_ROLE_GC && session) {
 #ifdef CTRL_IFACE_DBUS
-                       if(session->peer && session->peer->ip_type == WFD_IP_TYPE_OVER_EAPOL)
-                               wfd_util_ip_over_eap_assign(session->peer, event->ifname);
+       peer = wfd_group_find_member_by_addr(group, event->dev_addr);
 #else /* CTRL_IFACE_DBUS */
-                       wfd_destroy_session(manager);
-#endif /* CTRL_IFACE_DBUS */
-                       wfd_peer_clear_all(manager);
-               } else {
-                       if (group->flags & WFD_GROUP_FLAG_AUTONOMOUS) {
-                               noti.event = WIFI_DIRECT_CLI_EVENT_GROUP_CREATE_RSP;
-                               wfd_client_send_event(manager, &noti);
-                               wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
-                               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
-                       }
+       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");
+                       return;
                }
        }
-       break;
-       case WFD_OEM_EVENT_GROUP_DESTROYED:
-       {
-               wifi_direct_client_noti_s noti;
-               memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-               if (manager->state == WIFI_DIRECT_STATE_DISCONNECTING) {
-                       noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP;
+       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 (manager->state == WIFI_DIRECT_STATE_CONNECTING && manager->session){
+               } 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;
-                       unsigned char *peer_addr = wfd_session_get_peer_addr(manager->session);
-                       if(peer_addr != NULL)
-                               g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
-               } else if (manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
-                       noti.event = WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP;
-                       noti.error = WIFI_DIRECT_ERROR_NONE;
                } else {
-                       WDS_LOGD("Unexpected event(GROUP_DESTROYED). Ignore it");
-                       break;
+                       WDS_LOGE("Unexpected Peer State. Ignore it");
+                       return;
                }
-               wfd_client_send_event(manager, &noti);
-
-               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_session(manager);
-               manager->local->dev_role = WFD_DEV_ROLE_NONE;
+               g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+       } else {
+               WDS_LOGE("Unexpected event. Ignore it");
+               return;
        }
-       break;
-       case WFD_OEM_EVENT_GO_NEG_FAIL:
-       {
-               wfd_session_s *session = (wfd_session_s*) manager->session;
-               if (!session) {
-                       WDS_LOGE("Unexpected event. Session not exist");
-                       break;
-               }
+       wfd_client_send_event(manager, &noti);
 
-               unsigned char *peer_addr = wfd_session_get_peer_addr(session);
-               if (!peer_addr) {
-                       WDS_LOGE("Session do not has peer");
-                       break;
-               }
+       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);
 
-               if (event->event_id == WFD_OEM_EVENT_GO_NEG_FAIL) {
-                       wfd_oem_conn_data_s *edata = (wfd_oem_conn_data_s*) event->edata;
-                       if (edata && edata->status < 0 && session->connecting_120) {
-                               if (session->retry_gsrc) {
-                                       g_source_remove(session->retry_gsrc);
-                                       session->retry_gsrc = 0;
-                               }
-                               session->retry_gsrc = g_idle_add((GSourceFunc) _wfd_connection_retry, session);
-                               WDS_LOGD("Connection will be retried");
-                               break;
-                       }
-               }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
 
-               wifi_direct_client_noti_s noti;
-               memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-               noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
-               noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
-               snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
-               wfd_client_send_event(manager, &noti);
+ static void __wfd_process_terminating(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
 
-               wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
-               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+#ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
+ static void __wfd_process_serv_disc_resp(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
 
-               wfd_destroy_group(manager, GROUP_IFNAME);
-               wfd_destroy_session(manager);
-               manager->local->dev_role = WFD_DEV_ROLE_NONE;
-       }
-       break;
-       case WFD_OEM_EVENT_PROV_DISC_FAIL:
-       case WFD_OEM_EVENT_WPS_FAIL:
-       case WFD_OEM_EVENT_KEY_NEG_FAIL:
-       {
-               wfd_session_s *session = (wfd_session_s*) manager->session;
-               if (!session) {
-                       WDS_LOGE("Unexpected event. Session not exist");
-                       break;
-               }
+       wifi_direct_client_noti_s noti;
+       wfd_update_peer_time(manager, event->dev_addr);
 
-               unsigned char *peer_addr = wfd_session_get_peer_addr(session);
-               if (!peer_addr) {
-                       WDS_LOGE("Session do not has peer");
-                       break;
-               }
+       if (event->edata_type == WFD_OEM_EDATA_TYPE_NEW_SERVICE) {
+               wfd_oem_new_service_s *service = NULL;;
+               GList *temp = NULL;
+               GList *services = (GList*) event->edata;
+               int count = 0;
 
-               if (event->event_id == WFD_OEM_EVENT_GO_NEG_FAIL) {
-                       wfd_oem_conn_data_s *edata = (wfd_oem_conn_data_s*) event->edata;
-                       if (edata && edata->status < 0 && session->connecting_120) {
-                               if (session->retry_gsrc) {
-                                       g_source_remove(session->retry_gsrc);
-                                       session->retry_gsrc = 0;
-                               }
-                               session->retry_gsrc = g_idle_add((GSourceFunc) _wfd_connection_retry, session);
-                               WDS_LOGD("Connection will be retried");
-                               break;
+               WDS_LOGD("%d service data found", event->dev_role);
+
+               temp = g_list_first(services);
+               while(temp && count < event->dev_role) {
+                       service = (wfd_oem_new_service_s*) temp->data;
+                       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+                       noti.event = WIFI_DIRECT_CLI_EVENT_SERVICE_DISCOVERY_FOUND;
+                       noti.type = service->protocol;
+                       if (service->protocol == WFD_OEM_SERVICE_TYPE_BONJOUR) {
+                               g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
+                               g_snprintf(noti.param2, 256, "%s|%s", service->data.bonjour.query, service->data.bonjour.rdata);
+                               WDS_LOGD("Found service: [%d: %s] - [" MACSECSTR "]", service->protocol,
+                                                       service->data.bonjour.query, MAC2SECSTR(event->dev_addr));
+                       } else if (service->protocol == WFD_OEM_SERVICE_TYPE_BT_ADDR) {
+                               g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
+                               g_snprintf(noti.param2, MACSTR_LEN, "%s", service->data.vendor.data2);
+                               WDS_LOGD("Found service: [%d: %s] - [" MACSECSTR "]", service->protocol,
+                                                       service->data.vendor.data2, MAC2SECSTR(event->dev_addr));
+                       } else {
+                               WDS_LOGD("Found service is not supported");
+                               goto next;
                        }
+                       wfd_client_send_event(manager, &noti);
+next:
+                       temp = g_list_next(temp);
+                       service = NULL;
+                       count++;
                }
+       } else if (event->edata_type == WFD_OEM_EDATA_TYPE_SERVICE) {
+               wfd_oem_service_data_s *edata = (wfd_oem_service_data_s*) event->edata;
 
-               wifi_direct_client_noti_s noti;
                memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-               noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
-               noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
-               snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
-               wfd_client_send_event(manager, &noti);
-
-               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_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
-                               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
-                       } else {
-                               wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
-                               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
-                       }
+               noti.event = WIFI_DIRECT_CLI_EVENT_SERVICE_DISCOVERY_FOUND;
+               if(!edata) {
+                       noti.type = -1;
                } else {
-                       wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
-                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+                       noti.type = edata->type;
+                       g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
+                       switch(edata->type) {
+                               case WFD_OEM_SERVICE_TYPE_BT_ADDR:
+                                       g_snprintf(noti.param2, MACSTR_LEN, MACSTR, MAC2STR(edata->data));
+                                       return;
+                               case WFD_OEM_SERVICE_TYPE_CONTACT_INFO:
+                                       g_snprintf(noti.param2, MACSTR_LEN, "%s", edata->value);
+                                       return;
+                               default:
+                                       WDS_LOGE("Unknown type [type ID: %d]", edata->type);
+                       }
                }
+               wfd_client_send_event(manager, &noti);
+       }
 
-               wfd_destroy_session(manager);
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
 
-               wfd_oem_refresh(manager->oem_ops);
-#if 0
-               /* After connection failed, scan again */
-               wfd_oem_scan_param_s param;
-               memset(&param, 0x0, sizeof(wfd_oem_scan_param_s));
-               param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
-               param.scan_time = 2;
-               param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
-               wfd_oem_start_scan(manager->oem_ops, &param);
-               manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
-#endif
-       }
-       break;
+ static void __wfd_process_serv_disc_started(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+       __WDS_LOG_FUNC_ENTER__;
 
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+ }
+#endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
+
+static struct {
+ const int event_id;
+ void (*function) (wfd_manager_s *manager, wfd_oem_event_s *event);
+} wfd_oem_event_map[] = {
+       {
+               WFD_OEM_EVENT_DEACTIVATED,
+               __wfd_process_deactivated
+       },
+       {
+               WFD_OEM_EVENT_PEER_FOUND,
+               __wfd_process_peer_found
+       },
+       {
+               WFD_OEM_EVENT_PEER_DISAPPEARED,
+               __wfd_process_peer_disappeared
+       },
+       {
+               WFD_OEM_EVENT_DISCOVERY_FINISHED,
+               __wfd_process_discovery_finished
+       },
+       {
+               WFD_OEM_EVENT_PROV_DISC_REQ,
+               __wfd_process_prov_disc_req
+       },
+       {
+               WFD_OEM_EVENT_PROV_DISC_RESP,
+               __wfd_process_prov_disc_resp
+       },
+       {
+               WFD_OEM_EVENT_PROV_DISC_FAIL,
+               __wfd_process_prov_disc_fail
+       },
+       {
+               WFD_OEM_EVENT_GO_NEG_REQ,
+               __wfd_process_go_neg_req
+       },
+       {
+               WFD_OEM_EVENT_GO_NEG_FAIL,
+               __wfd_process_go_neg_fail
+       },
+       {
+               WFD_OEM_EVENT_GO_NEG_DONE,
+               __wfd_process_go_neg_done
+       },
+       {
+               WFD_OEM_EVENT_WPS_FAIL,
+               __wfd_process_wps_fail
+       },
+       {
+               WFD_OEM_EVENT_WPS_DONE,
+               __wfd_process_wps_done
+       },
+       {
+               WFD_OEM_EVENT_KEY_NEG_FAIL,
+               __wfd_process_key_neg_fail
+       },
+       {
+               WFD_OEM_EVENT_KEY_NEG_DONE,
+               __wfd_process_key_neg_done
+       },
+       {
+               WFD_OEM_EVENT_CONN_FAIL,
+               __wfd_process_conn_fail
+       },
+       {
+               WFD_OEM_EVENT_CONN_DONE,
+               __wfd_process_conn_done
+       },
+       {
+               WFD_OEM_EVENT_GROUP_CREATED,
+               __wfd_process_group_created
+       },
+       {
+               WFD_OEM_EVENT_GROUP_DESTROYED,
+               __wfd_process_group_destroyed
+       },
+       {
+               WFD_OEM_EVENT_INVITATION_REQ,
+               __wfd_process_invitation_req
+       },
+       {
+               WFD_OEM_EVENT_INVITATION_RES,
+               __wfd_process_invitation_res
+       },
+       {
+               WFD_OEM_EVENT_STA_CONNECTED,
+               __wfd_process_sta_connected
+       },
+       {
+               WFD_OEM_EVENT_STA_DISCONNECTED,
+               __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
+       },
 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
-       case WFD_OEM_EVENT_SERV_DISC_RESP:
        {
-               wifi_direct_client_noti_s noti;
-               wfd_update_peer_time(manager, event->dev_addr);
-
-               if (event->edata_type == WFD_OEM_EDATA_TYPE_NEW_SERVICE) {
-                       wfd_oem_new_service_s *service = NULL;;
-                       GList *temp = NULL;
-                       GList *services = (GList*) event->edata;
-                       int count = 0;
-
-                       WDS_LOGD("%d service data found", event->dev_role);
-
-                       temp = g_list_first(services);
-                       while(temp && count < event->dev_role) {
-                               service = (wfd_oem_new_service_s*) temp->data;
-                               memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-                               noti.event = WIFI_DIRECT_CLI_EVENT_SERVICE_DISCOVERY_FOUND;
-                               noti.type = service->protocol;
-                               if (service->protocol == WFD_OEM_SERVICE_TYPE_BONJOUR) {
-                                       g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
-                                       g_snprintf(noti.param2, 256, "%s|%s", service->data.bonjour.query, service->data.bonjour.rdata);
-                                       WDS_LOGD("Found service: [%d: %s] - [" MACSECSTR "]", service->protocol,
-                                                               service->data.bonjour.query, MAC2SECSTR(event->dev_addr));
-                               } else if (service->protocol == WFD_OEM_SERVICE_TYPE_BT_ADDR) {
-                                       g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
-                                       g_snprintf(noti.param2, MACSTR_LEN, "%s", service->data.vendor.data2);
-                                       WDS_LOGD("Found service: [%d: %s] - [" MACSECSTR "]", service->protocol,
-                                                               service->data.vendor.data2, MAC2SECSTR(event->dev_addr));
-                               } else {
-                                       WDS_LOGD("Found service is not supported");
-                                       goto next;
-                               }
-                               wfd_client_send_event(manager, &noti);
-next:
-                               temp = g_list_next(temp);
-                               service = NULL;
-                               count++;
-                       }
-               } else if (event->edata_type == WFD_OEM_EDATA_TYPE_SERVICE) {
-                       wfd_oem_service_data_s *edata = (wfd_oem_service_data_s*) event->edata;
+               WFD_OEM_EVENT_SERV_DISC_RESP,
+               __wfd_process_serv_disc_resp
+       },
+       {
+               WFD_OEM_EVENT_SERV_DISC_STARTED,
+               __wfd_process_serv_disc_started
+       },
+#endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
+       {
+               WFD_OEM_EVENT_MAX,
+               NULL
+       }
+ };
 
-                       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-                       noti.event = WIFI_DIRECT_CLI_EVENT_SERVICE_DISCOVERY_FOUND;
-                       if(!edata) {
-                               noti.type = -1;
-                       } else {
-                               noti.type = edata->type;
-                               g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
-                               switch(edata->type) {
-                                       case WFD_OEM_SERVICE_TYPE_BT_ADDR:
-                                               g_snprintf(noti.param2, MACSTR_LEN, MACSTR, MAC2STR(edata->data));
-                                               break;
-                                       case WFD_OEM_SERVICE_TYPE_CONTACT_INFO:
-                                               g_snprintf(noti.param2, MACSTR_LEN, "%s", edata->value);
-                                               break;
-                                       default:
-                                               WDS_LOGE("Unknown type [type ID: %d]", edata->type);
-                               }
-                       }
-                       wfd_client_send_event(manager, &noti);
-               }
+ int wfd_process_event(void *user_data, void *data)
+ {
+       __WDS_LOG_FUNC_ENTER__;
+       wfd_manager_s *manager = NULL;
+       wfd_oem_event_s *event = NULL;
+       int i = 0;
+
+       if (!user_data || !data) {
+               WDS_LOGE("Invalid parameter");
+               return -1;
        }
-       break;
-#endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
 
-       default:
-               WDS_LOGE("Unknown event [event ID: %d]", event->event_id);
-       break;
+       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);
        }
 
        __WDS_LOG_FUNC_EXIT__;
        return 0;
-}
-
+ }
index c338b40..b80d1f5 100755 (executable)
@@ -205,8 +205,7 @@ int wfd_local_set_dev_name(char *dev_name)
        if (g_manager->state >= WIFI_DIRECT_STATE_ACTIVATED) {
                wfd_oem_set_dev_name(g_manager->oem_ops, dev_name);
                WDS_LOGD("Device name changed.");
-       }
-       else {
+       } else {
                WDS_LOGE("Device name can't changed: state is %d",g_manager->state);
        }
 
index 8b845ac..2ca17ad 100644 (file)
@@ -57,7 +57,7 @@ wfd_device_s *wfd_add_peer(void *data, unsigned char *dev_addr, char *dev_name)
        if (peer) {
                WDS_LOGD("Peer already exist[" MACSECSTR "]", MAC2SECSTR(dev_addr));
                __WDS_LOG_FUNC_EXIT__;
-               return NULL;
+               return peer;
        }
 
        peer = (wfd_device_s*) g_try_malloc0(sizeof(wfd_device_s));