Set CONNECTED state back when Device is GC and discovery is stopped
[platform/core/connectivity/wifi-direct-manager.git] / src / wifi-direct-event.c
old mode 100644 (file)
new mode 100755 (executable)
index d60a363..bbd9645
@@ -31,6 +31,7 @@
 #include <unistd.h>
 #include <time.h>
 #include <errno.h>
+#include <string.h>
 
 #include <glib.h>
 
 #include "wifi-direct-dbus.h"
 #include "wifi-direct-asp.h"
 
+static void _wfd_event_reset_state(wfd_manager_s *manager)
+{
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
+
+       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 if (manager->local->dev_role == WFD_DEV_ROLE_GC) {
+               wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTED);
+               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTED);
+       } else {
+               wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+       }
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
+}
+
 static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *data)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_device_s *peer = NULL;
 
        if (!manager || !data) {
                WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -67,7 +85,7 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
                peer = wfd_add_peer(manager, data->p2p_dev_addr, data->name);
                if (!peer) {
                        WDS_LOGE("Failed to add peer");
-                       __WDS_LOG_FUNC_EXIT__;
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return -1;
                }
        } else {
@@ -89,6 +107,13 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        if (manager->is_wifi_display_supported)
                memcpy(&(peer->display), &(data->display), sizeof(wfd_display_s));
 
+       if (data->vsie) {
+               if (peer->vsie)
+                       g_free(peer->vsie);
+               peer->vsie = g_strdup(data->vsie);
+       }
+       WDS_LOGD("Peer name: [%s], vsie: [%s]", peer->dev_name, peer->vsie);
+
 #if !(__GNUC__ <= 4 && __GNUC_MINOR__ < 8)
        wfd_util_get_current_time(&peer->time);
 #else
@@ -98,16 +123,18 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
 #endif
        WDS_LOGI("Update time [%s - %ld]", peer->dev_name, peer->time);
 
-       __WDS_LOG_FUNC_EXIT__;
+       //We don't free data memory or memory in it.
+       //They're handled by plugin
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
-
+//LCOV_EXCL_START
 gboolean _wfd_connection_retry(gpointer *data)
 {
        wfd_session_s *session = (wfd_session_s*) data;
        if (!session) {
                WDS_LOGE("Session is NULL");
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return G_SOURCE_REMOVE;
        }
 
@@ -128,13 +155,13 @@ gboolean _wfd_connection_retry(gpointer *data)
                WDS_LOGE("Invalid session state [%d]", session->state);
        break;
        }
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return G_SOURCE_REMOVE;
 }
 
 void wfd_event_deactivated(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
 
@@ -154,13 +181,13 @@ void wfd_event_deactivated(wfd_oem_event_s *event)
        if (manager->is_connection_agent)
                wfd_util_stop_wifi_direct_popup();
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
-
+//LCOV_EXCL_STOP
 void wfd_event_peer_found(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_oem_dev_data_s *edata = NULL;
@@ -169,15 +196,15 @@ void wfd_event_peer_found(wfd_oem_event_s *event)
 
        edata = (wfd_oem_dev_data_s*) event->edata;
        if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
-               WDS_LOGE("Invalid event data");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        res = _wfd_event_update_peer(manager, edata);
        if (res < 0) {
-               WDS_LOGE("Failed to update peer data");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Failed to update peer data");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -236,13 +263,13 @@ void wfd_event_peer_found(wfd_oem_event_s *event)
                                                         params);
                }
        }
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_peer_disappeared(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_session_s *session = NULL;
@@ -255,7 +282,7 @@ void wfd_event_peer_disappeared(wfd_oem_event_s *event)
                WDS_LOGD("session peer [" MACSTR "] lost peer ["  MACSTR "]", MAC2STR(peer->dev_addr),
                                                MAC2STR(event->dev_addr));
                if (memcmp(peer->dev_addr, event->dev_addr, MACADDR_LEN) == 0) {
-                       WDS_LOGD("peer already in connection");
+                       WDS_LOGD("peer already in connection");//LCOV_EXCL_LINE
                        return;
                }
        }
@@ -267,49 +294,43 @@ void wfd_event_peer_disappeared(wfd_oem_event_s *event)
                                     "PeerLost",
                                     g_variant_new("(s)", peer_mac_address));
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_discovery_finished(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
 
        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);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        if (manager->scan_mode == WFD_SCAN_MODE_PASSIVE) {
-               WDS_LOGE("During passive scan, Discover Finished event will not notified");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("During passive scan, Discover Finished event will not notified");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
-       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);
-       }
+       _wfd_event_reset_state(manager);
        manager->scan_mode = WFD_SCAN_MODE_NONE;
 
        wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
                                     "DiscoveryFinished",
                                     NULL);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_prov_disc_req(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_device_s *peer = NULL;
@@ -318,8 +339,8 @@ void wfd_event_prov_disc_req(wfd_oem_event_s *event)
        wfd_group_s *group = (wfd_group_s*) manager->group;
 
        if (group && group->role == WFD_DEV_ROLE_GC) {
-               WDS_LOGD("Device has GC role - ignore this provision request");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGD("Device has GC role - ignore this provision request");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -327,8 +348,8 @@ void wfd_event_prov_disc_req(wfd_oem_event_s *event)
        if (member) {
                /* PD request can be arrived from peer device
                 * when connection is timeout to close connection */
-               WDS_LOGE("Unexpected Event - Member already exist");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Unexpected Event - Member already exist");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -336,8 +357,8 @@ void wfd_event_prov_disc_req(wfd_oem_event_s *event)
 
        edata = (wfd_oem_dev_data_s*) event->edata;
        if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
-               WDS_LOGE("Invalid event data");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -345,12 +366,12 @@ void wfd_event_prov_disc_req(wfd_oem_event_s *event)
        peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
 
        if (WFD_DEV_ROLE_GO != manager->local->dev_role) {
-               WDS_LOGI("TV is not GO, updated peer data only.");
+               WDS_LOGI("Own device is not GO, updated peer data only.");//LCOV_EXCL_LINE
 
                manager->local->wps_mode = event->wps_mode;
                if (event->wps_mode == WFD_WPS_MODE_PBC ||
                                event->wps_mode == WFD_WPS_MODE_KEYPAD) {
-                       __WDS_LOG_FUNC_EXIT__;
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return;
                }
        }
@@ -360,15 +381,15 @@ void wfd_event_prov_disc_req(wfd_oem_event_s *event)
 
        res = wfd_session_process_event(manager, event);
        if (res < 0)
-               WDS_LOGE("Failed to process event of session");
+               WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_prov_disc_resp(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_device_s *peer = NULL;
@@ -378,8 +399,8 @@ void wfd_event_prov_disc_resp(wfd_oem_event_s *event)
 
        edata = (wfd_oem_dev_data_s*) event->edata;
        if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
-               WDS_LOGE("Invalid event data");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -390,9 +411,9 @@ void wfd_event_prov_disc_resp(wfd_oem_event_s *event)
 
        res = wfd_session_process_event(manager, event);
        if (res < 0)
-               WDS_LOGE("Failed to process event of session");
+               WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
@@ -404,7 +425,7 @@ static bool __asp_prov_disc_deferred(wfd_session_s *session, void *event_data)
        if (prov_params && !ISZEROMACADDR(session->session_mac)) {
                /* This connection is for ASP session */
                if (prov_params->status == WFD_OEM_SC_FAIL_INVALID_PARAMS) {
-                       WDS_LOGD("ASP prov disc deferred. wait response.");
+                       WDS_LOGD("ASP prov disc deferred. wait response.");//LCOV_EXCL_LINE
                        wfd_asp_connect_status(session->session_mac,
                                                                session->session_id,
                                                                ASP_CONNECT_STATUS_REQUEST_DEFERRED,
@@ -412,13 +433,13 @@ static bool __asp_prov_disc_deferred(wfd_session_s *session, void *event_data)
                        is_deferred = true;
                }
        }
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return is_deferred;
 }
 
 void wfd_event_prov_disc_fail(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_session_s *session = NULL;
@@ -427,15 +448,15 @@ void wfd_event_prov_disc_fail(wfd_oem_event_s *event)
 
        session = (wfd_session_s*) manager->session;
        if (!session) {
-               WDS_LOGE("Unexpected event. Session not exist");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        peer_addr = wfd_session_get_peer_addr(session);
        if (!peer_addr) {
-               WDS_LOGE("Session do not have peer");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Session do not have peer");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -446,7 +467,7 @@ void wfd_event_prov_disc_fail(wfd_oem_event_s *event)
                        memset(&param, 0x0, sizeof(wfd_oem_scan_param_s));
                        param.scan_mode = WFD_OEM_SCAN_MODE_PASSIVE;
                        wfd_oem_start_scan(manager->oem_ops, &param);
-                       __WDS_LOG_FUNC_EXIT__;
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return;
                }
        }
@@ -459,7 +480,7 @@ void wfd_event_prov_disc_fail(wfd_oem_event_s *event)
                                                   WFD_EVENT_CONNECTION_RSP,
                                                   peer_mac_address));
        if (wfd_asp_is_asp_session(session)) {
-               WDS_LOGD("ASP prov disc failed. remove session.");
+               WDS_LOGD("ASP prov disc failed. remove session.");//LCOV_EXCL_LINE
                wfd_asp_connect_status(session->session_mac,
                                                        session->session_id,
                                                        ASP_CONNECT_STATUS_REQUEST_FAILED,
@@ -496,19 +517,19 @@ void wfd_event_prov_disc_fail(wfd_oem_event_s *event)
        wfd_oem_start_scan(manager->oem_ops, &param);
        manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
 #endif
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_go_neg_req(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_group_s *group = (wfd_group_s*) manager->group;
        if (group && group->role == WFD_DEV_ROLE_GC) {
-               WDS_LOGD("Device has GC role - ignore this go neg request");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGD("Device has GC role - ignore this go neg request");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -517,26 +538,26 @@ void wfd_event_go_neg_req(wfd_oem_event_s *event)
 
        edata = (wfd_oem_dev_data_s*) event->edata;
        if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
-               WDS_LOGE("Invalid event data");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        res = _wfd_event_update_peer(manager, edata);
        if (res < 0) {
-               WDS_LOGE("Failed to update peer data");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Failed to update peer data");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        wfd_session_process_event(manager, event);
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_go_neg_fail(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_session_s *session = NULL;
@@ -546,22 +567,22 @@ void wfd_event_go_neg_fail(wfd_oem_event_s *event)
 
        session = (wfd_session_s*) manager->session;
        if (!session) {
-               WDS_LOGE("Unexpected event. Session not exist");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        peer_addr = wfd_session_get_peer_addr(session);
        if (!peer_addr) {
-               WDS_LOGE("Session do not have peer");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Session do not have peer");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        edata = (wfd_oem_conn_data_s*) event->edata;
        if (!edata) {
-               WDS_LOGE("Invalid p2p connection data");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid p2p connection data");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -571,8 +592,8 @@ void wfd_event_go_neg_fail(wfd_oem_event_s *event)
                        session->retry_gsrc = 0;
                }
                session->retry_gsrc = g_idle_add((GSourceFunc) _wfd_connection_retry, session);
-               WDS_LOGD("Connection will be retried");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGD("Connection will be retried");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -591,19 +612,17 @@ void wfd_event_go_neg_fail(wfd_oem_event_s *event)
                                NULL);
        }
 
-       wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
-       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
-
        wfd_destroy_session(manager);
        wfd_destroy_group(manager);
        manager->local->dev_role = WFD_DEV_ROLE_NONE;
-       __WDS_LOG_FUNC_EXIT__;
+       _wfd_event_reset_state(manager);
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_go_neg_done(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_session_s *session = NULL;
@@ -612,8 +631,8 @@ void wfd_event_go_neg_done(wfd_oem_event_s *event)
 
        edata = (wfd_oem_conn_data_s*) event->edata;
        if (edata == NULL) {
-               WDS_LOGE("Invalid event data");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid event data");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -624,13 +643,13 @@ void wfd_event_go_neg_done(wfd_oem_event_s *event)
        }
 
        wfd_session_process_event(manager, event);
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_wps_fail(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_session_s *session = NULL;
@@ -638,15 +657,15 @@ void wfd_event_wps_fail(wfd_oem_event_s *event)
 
        session = (wfd_session_s*) manager->session;
        if (!session) {
-               WDS_LOGE("Unexpected event. Session not exist");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        peer_addr = wfd_session_get_peer_addr(session);
        if (!peer_addr) {
-               WDS_LOGE("Session do not have peer");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Session do not have peer");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -695,24 +714,24 @@ void wfd_event_wps_fail(wfd_oem_event_s *event)
        wfd_oem_start_scan(manager->oem_ops, &param);
        manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
 #endif
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_wps_done(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_session_process_event(manager, event);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_key_neg_fail(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_session_s *session = NULL;
@@ -721,15 +740,15 @@ void wfd_event_key_neg_fail(wfd_oem_event_s *event)
 
        session = (wfd_session_s*) manager->session;
        if (!session) {
-               WDS_LOGE("Unexpected event. Session not exist");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        peer_addr = wfd_session_get_peer_addr(session);
        if (!peer_addr) {
-               WDS_LOGE("Session do not has peer");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Session do not has peer");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -777,37 +796,37 @@ void wfd_event_key_neg_fail(wfd_oem_event_s *event)
        wfd_oem_start_scan(manager->oem_ops, &param);
        manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
 #endif
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_key_neg_done(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_conn_fail(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_conn_done(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_group_created(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_group_s *group = (wfd_group_s*) manager->group;
@@ -816,8 +835,8 @@ void wfd_event_group_created(wfd_oem_event_s *event)
        if (!group) {
                group = wfd_create_pending_group(manager, event->intf_addr);
                if (!group) {
-                       WDS_LOGE("Failed to create pending group");
-                       __WDS_LOG_FUNC_EXIT__;
+                       WDS_LOGE("Failed to create pending group");//LCOV_EXCL_LINE
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return;
                }
 
@@ -829,7 +848,7 @@ void wfd_event_group_created(wfd_oem_event_s *event)
        if (group->role == WFD_DEV_ROLE_GC && session) {
                wfd_device_s *peer = session->peer;
                if (peer == NULL) {
-                       WDS_LOGE("Unexpected event. Peer doesn't exist");
+                       WDS_LOGE("Unexpected event. Peer doesn't exist");//LCOV_EXCL_LINE
                        return;
                }
 
@@ -868,13 +887,13 @@ void wfd_event_group_created(wfd_oem_event_s *event)
                        wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
                }
        }
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_group_destroyed(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        char peer_mac_address[MACSTR_LEN+1] = {0, };
@@ -917,8 +936,8 @@ void wfd_event_group_destroyed(wfd_oem_event_s *event)
                                                     "Destroyed", NULL);
                }
        } else {
-               WDS_LOGD("Unexpected event(GROUP_DESTROYED). Ignore it");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGD("Unexpected event(GROUP_DESTROYED). Ignore it");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -928,13 +947,13 @@ void wfd_event_group_destroyed(wfd_oem_event_s *event)
        wfd_destroy_group(manager);
        manager->local->dev_role = WFD_DEV_ROLE_NONE;
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_invitation_req(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_device_s *peer = NULL;
@@ -945,11 +964,11 @@ void wfd_event_invitation_req(wfd_oem_event_s *event)
 
        peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
        if (!peer) {
-               WDS_LOGD("Invitation from unknown peer. Add new peer");
+               WDS_LOGD("Invitation from unknown peer. Add new peer");//LCOV_EXCL_LINE
                peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
                if (!peer) {
-                       WDS_LOGE("Failed to add peer for invitation");
-                       __WDS_LOG_FUNC_EXIT__;
+                       WDS_LOGE("Failed to add peer for invitation");//LCOV_EXCL_LINE
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return;
                }
        }
@@ -968,8 +987,8 @@ void wfd_event_invitation_req(wfd_oem_event_s *event)
                                             manager->req_wps_mode,
                                             SESSION_DIRECTION_INCOMING);
        if (!session) {
-               WDS_LOGE("Failed to create session");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Failed to create session");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
        session->type = SESSION_TYPE_INVITE;
@@ -980,8 +999,8 @@ void wfd_event_invitation_req(wfd_oem_event_s *event)
 
        res = wfd_session_start(session);
        if (res < 0) {
-               WDS_LOGE("Failed to start session");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Failed to start session");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -998,21 +1017,21 @@ void wfd_event_invitation_req(wfd_oem_event_s *event)
                                                            WFD_EVENT_CONNECTION_REQ,
                                                            peer_mac_address));
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_invitation_res(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_sta_connected(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_session_s *session = (wfd_session_s*) manager->session;
@@ -1020,11 +1039,12 @@ void wfd_event_sta_connected(wfd_oem_event_s *event)
        wfd_device_s *peer = NULL;
        char peer_mac_address[MACSTR_LEN+1] = {0, };
 
-       /* FIXME: Move this code to plugin */
-       if (!memcmp(event->intf_addr, manager->local->intf_addr, MACADDR_LEN)) {
-               WDS_LOGD("Ignore this event");
-               __WDS_LOG_FUNC_EXIT__;
-               return;
+       if(session) {
+               WDS_LOGD("event->dev addr : [" MACSTR "]", MAC2STR(event->dev_addr));
+               if (session->peer && memcmp(event->dev_addr, session->peer->dev_addr, MACADDR_LEN)) {
+                       WDS_LOGE("Session Device and connected device do not match.Destroy previous session.");
+                       wfd_destroy_session(manager);
+               }
        }
 
        if (ISZEROMACADDR(event->dev_addr)) {
@@ -1032,18 +1052,18 @@ void wfd_event_sta_connected(wfd_oem_event_s *event)
 
                peer = wfd_peer_find_by_addr(manager, event->intf_addr);
                if (!peer) {
-                       WDS_LOGI("Add legacy peer");
+                       WDS_LOGI("Add legacy peer");//LCOV_EXCL_LINE
                        peer = wfd_add_peer(manager, event->intf_addr, "LEGACY-PEER");
                        if (!peer) {
-                               WDS_LOGE("Failed to add Legacy peer.");
-                               __WDS_LOG_FUNC_EXIT__;
+                               WDS_LOGE("Failed to add Legacy peer.");//LCOV_EXCL_LINE
+                               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                                return;
                        }
                }
 
                if (wfd_group_add_member(group, peer->dev_addr) == -1) {
-                       WDS_LOGE("Failed to add Legacy peer.");
-                       __WDS_LOG_FUNC_EXIT__;
+                       WDS_LOGE("Failed to add Legacy peer.");//LCOV_EXCL_LINE
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return;
                }
 
@@ -1059,7 +1079,7 @@ void wfd_event_sta_connected(wfd_oem_event_s *event)
                                                                    peer_mac_address));
 
                wfd_util_dhcps_wait_ip_leased(peer);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -1072,7 +1092,7 @@ void wfd_event_sta_connected(wfd_oem_event_s *event)
                        if (!session) {
                                WDS_LOGE("Failed to create session with peer [" MACSTR "]",
                                         MAC2STR(event->dev_addr));
-                               __WDS_LOG_FUNC_EXIT__;
+                               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                                return;
                        }
                } else {
@@ -1085,24 +1105,25 @@ void wfd_event_sta_connected(wfd_oem_event_s *event)
 
                        wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
                        wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
-                       __WDS_LOG_FUNC_EXIT__;
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return;
                }
        }
 
        peer = wfd_session_get_peer(session);
        if (!peer) {
-               WDS_LOGE("Peer not found");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Peer not found");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
+       WDS_LOGD("peer->dev addr : [" MACSTR "]", MAC2STR(session->peer->dev_addr));
 
        group = (wfd_group_s*) manager->group;
        if (!group) {
                group = wfd_create_pending_group(manager, event->intf_addr);
                if (!group) {
-                       WDS_LOGE("Failed to create pending group");
-                       __WDS_LOG_FUNC_EXIT__;
+                       WDS_LOGE("Failed to create pending group");//LCOV_EXCL_LINE
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return;
                }
                manager->group = group;
@@ -1156,24 +1177,26 @@ void wfd_event_sta_connected(wfd_oem_event_s *event)
        }
        wfd_destroy_session(manager);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_sta_disconnected(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_group_s *group = NULL;
        wfd_device_s *peer = NULL;
        unsigned char peer_addr[MACADDR_LEN] = {0, };
        char peer_mac_address[MACSTR_LEN+1] = {0, };
+       char peer_dev_name[DEV_NAME_LEN+1] = {0, };
+       int member_cnt;
 
        group = (wfd_group_s*) manager->group;
        if (!group) {
-               WDS_LOGE("Group not found");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Group not found");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -1195,17 +1218,17 @@ void wfd_event_sta_disconnected(wfd_oem_event_s *event)
                        wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
                        wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
                }
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        peer = wfd_group_find_member_by_addr(group, event->dev_addr);
        if (!peer) {
-               WDS_LOGE("Failed to find connected peer");
+               WDS_LOGE("Failed to find connected peer");//LCOV_EXCL_LINE
                peer = wfd_session_get_peer(manager->session);
                if (!peer) {
-                       WDS_LOGE("Failed to find connecting peer");
-                       __WDS_LOG_FUNC_EXIT__;
+                       WDS_LOGE("Failed to find connecting peer");//LCOV_EXCL_LINE
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return;
                }
 
@@ -1213,16 +1236,17 @@ void wfd_event_sta_disconnected(wfd_oem_event_s *event)
                 * If no peer connected and
                 * disconnected event is not for connecting peer
                 * then event should be ignored.
-                * This situation can arrise when TV is GO and
+                * This situation can arrise when own device is GO and
                 * some connected peer sent disassociation.
                 */
-               if (memcmp(peer_addr, event->dev_addr, MACADDR_LEN)) {
-                       WDS_LOGE("Unexpected event, Ignore it...");
-                       __WDS_LOG_FUNC_EXIT__;
+               if (memcmp(peer->dev_addr, event->dev_addr, MACADDR_LEN)) {
+                       WDS_LOGE("Unexpected event, Ignore it...");//LCOV_EXCL_LINE
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return;
                }
        }
        memcpy(peer_addr, peer->dev_addr, MACADDR_LEN);
+       g_strlcpy(peer_dev_name, peer->dev_name, DEV_NAME_LEN+1);
 
        /**
         * If state is not DISCONNECTING, connection is finished by peer.
@@ -1231,46 +1255,38 @@ void wfd_event_sta_disconnected(wfd_oem_event_s *event)
        if (manager->state >= WIFI_DIRECT_STATE_CONNECTED ||
                                (manager->state == WIFI_DIRECT_STATE_DISCOVERING &&
                                 manager->local->dev_role == WFD_DEV_ROLE_GO)) {
-               wfd_group_remove_member(group, peer_addr);
+               member_cnt = wfd_group_remove_member(group, peer_addr);
                g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
-               if (group->member_count) {
+               if (member_cnt) {
                        wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
-                                                    "Disconnection",
-                                                    g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
+                                                    "DisconnectionInd",
+                                                    g_variant_new("(iiss)", WIFI_DIRECT_ERROR_NONE,
                                                                            WFD_EVENT_DISASSOCIATION_IND,
-                                                                           peer_mac_address));
+                                                                           peer_mac_address, peer_dev_name));
                } else {
                        wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
-                                                    "Disconnection",
-                                                    g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
+                                                    "DisconnectionInd",
+                                                    g_variant_new("(iiss)", WIFI_DIRECT_ERROR_NONE,
                                                                            WFD_EVENT_DISCONNECTION_IND,
-                                                                           peer_mac_address));
+                                                                           peer_mac_address, peer_dev_name));
                }
 
-       } else if (manager->state == WIFI_DIRECT_STATE_DISCONNECTING) {
-               g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
-               wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
-                                            "Disconnection",
-                                            g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
-                                                                   WFD_EVENT_DISCONNECTION_RSP,
-                                                                   peer_mac_address));
-
        } 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 !!!");
+                       WDS_LOGD("Peer is already Connected !!!");//LCOV_EXCL_LINE
                        wfd_group_remove_member(group, peer_addr);
                        g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
                        wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
-                                                    "Disconnection",
-                                                    g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
+                                                    "DisconnectionInd",
+                                                    g_variant_new("(iiss)", WIFI_DIRECT_ERROR_NONE,
                                                                            WFD_EVENT_DISASSOCIATION_IND,
-                                                                           peer_mac_address));
+                                                                           peer_mac_address, peer_dev_name));
 
                } else if (WFD_PEER_STATE_CONNECTING == peer->state) {
-                       WDS_LOGD("Peer is Connecting...");
+                       WDS_LOGD("Peer is Connecting...");//LCOV_EXCL_LINE
                        g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
                        wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
                                                     "Connection",
@@ -1285,61 +1301,56 @@ void wfd_event_sta_disconnected(wfd_oem_event_s *event)
                                                                        NULL);
                        }
                } else {
-                       WDS_LOGE("Unexpected Peer State. Ignore it");
-                       __WDS_LOG_FUNC_EXIT__;
+                       WDS_LOGE("Unexpected Peer State. Ignore it");//LCOV_EXCL_LINE
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return;
                }
        } else {
-               WDS_LOGE("Unexpected event. Ignore it");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Unexpected event. Ignore it");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
-       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);
-       }
-
        /* If there is no member, GO should be destroyed */
-       if (!group->member_count) {
+
+       group = (wfd_group_s*)manager->group;
+       if (group && !group->member_count && wfd_util_is_remove_group_allowed()) {
                wfd_oem_destroy_group(manager->oem_ops, group->ifname);
                wfd_destroy_group(manager);
                wfd_peer_clear_all(manager);
        }
 
        wfd_destroy_session(manager);
+       _wfd_event_reset_state(manager);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_terminating(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_group_formation_failure(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_session_s *session = (wfd_session_s*) manager->session;
        if (!session) {
-               WDS_LOGE("Unexpected event. Session not exist");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Unexpected event. Session not exist");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        unsigned char *peer_addr = wfd_session_get_peer_addr(session);
        if (!peer_addr) {
-               WDS_LOGE("Session do not has peer");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Session do not has peer");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -1365,7 +1376,7 @@ void wfd_event_group_formation_failure(wfd_oem_event_s *event)
 
        wfd_oem_refresh(manager->oem_ops);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
@@ -1377,7 +1388,7 @@ void wfd_event_group_formation_failure(wfd_oem_event_s *event)
 void wfd_event_invitation_accepted(wfd_oem_event_s *event)
 {
 
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_session_s *session = (wfd_session_s*) manager->session;
@@ -1386,11 +1397,11 @@ void wfd_event_invitation_accepted(wfd_oem_event_s *event)
 
        peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
        if (!peer) {
-               WDS_LOGI("Invitation from unknown peer. Add new peer");
+               WDS_LOGI("Invitation from unknown peer. Add new peer");//LCOV_EXCL_LINE
                peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
                if (!peer) {
-                       WDS_LOGE("Failed to add peer for invitation");
-                       __WDS_LOG_FUNC_EXIT__;
+                       WDS_LOGE("Failed to add peer for invitation");//LCOV_EXCL_LINE
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return;
                }
        }
@@ -1406,7 +1417,7 @@ void wfd_event_invitation_accepted(wfd_oem_event_s *event)
                if (!session) {
                        WDS_LOGE("Failed to create session with peer [" MACSTR "]",
                                                        MAC2STR(event->dev_addr));
-                       __WDS_LOG_FUNC_EXIT__;
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return;
                }
        }
@@ -1424,12 +1435,12 @@ void wfd_event_invitation_accepted(wfd_oem_event_s *event)
        wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
        wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTING);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
 }
 
 void wfd_event_serv_disc_resp(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        int service_type;
@@ -1437,7 +1448,7 @@ void wfd_event_serv_disc_resp(wfd_oem_event_s *event)
        char peer_mac_address[MACSTR_LEN+1] = {0, };
 
        if (!manager->is_service_discovery_supported) {
-               WDS_LOGD("service discovery not supported");
+               WDS_LOGD("service discovery not supported");//LCOV_EXCL_LINE
                return;
        }
 
@@ -1461,7 +1472,7 @@ void wfd_event_serv_disc_resp(wfd_oem_event_s *event)
                                WDS_LOGD("Found service: [%d: %s] - [" MACSECSTR "]", service->protocol,
                                                        service->data.bonjour.query, MAC2SECSTR(event->dev_addr));
                        } else {
-                               WDS_LOGD("Found service is not supported");
+                               WDS_LOGD("Found service is not supported");//LCOV_EXCL_LINE
                                goto next;
                        }
 
@@ -1475,42 +1486,23 @@ next:
                        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;
-
-               if (!edata) {
-                       service_type = -1;
-               } else {
-                       service_type = edata->type;
-                       g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
-                       switch (edata->type) {
-                               WDS_LOGE("Unknown type [type ID: %d]", edata->type);
-                       }
-               }
-
-               wfd_manager_dbus_emit_signal(WFD_MANAGER_SERVICE_INTERFACE,
-                                            "DiscoveryFound",
-                                            g_variant_new("(iss)", service_type,
-                                                                   response_data,
-                                                                   peer_mac_address));
        }
-
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_serv_disc_started(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 
 void wfd_event_asp_serv_resp(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_oem_asp_service_s *service = NULL;
@@ -1518,15 +1510,15 @@ void wfd_event_asp_serv_resp(wfd_oem_event_s *event)
        GVariant *params = NULL;
 
        if (manager && !manager->is_asp_supported) {
-               WDS_LOGD("ASP is not supported.");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGD("ASP is not supported.");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        service = (wfd_oem_asp_service_s *)event->edata;
        if (service == NULL) {
-               WDS_LOGE("P2P service found event has NULL information");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("P2P service found event has NULL information");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -1547,13 +1539,13 @@ void wfd_event_asp_serv_resp(wfd_oem_event_s *event)
                                     "SearchResult",
                                     params);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 int __wfd_handle_asp_prov(wfd_manager_s *manager, wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_session_s *session = NULL;
        wfd_oem_asp_prov_s *prov_params = NULL;
@@ -1561,29 +1553,29 @@ int __wfd_handle_asp_prov(wfd_manager_s *manager, wfd_oem_event_s *event)
 
        prov_params = (wfd_oem_asp_prov_s *)event->edata;
        if (prov_params == NULL) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        res = wfd_session_process_event(manager, event);
        session = (wfd_session_s *)manager->session;
        if (res < 0 || session == NULL) {
-               WDS_LOGE("Failed to process event of session");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
        session->session_id = prov_params->session_id;
        memcpy(session->session_mac, prov_params->session_mac, MACADDR_LEN);
        memcpy(session->service_mac, prov_params->service_mac, MACADDR_LEN);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 int __wfd_handle_asp_prov_done(wfd_session_s *session, wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_oem_asp_prov_s *prov_params = NULL;
        prov_params = (wfd_oem_asp_prov_s *)event->edata;
@@ -1592,16 +1584,16 @@ int __wfd_handle_asp_prov_done(wfd_session_s *session, wfd_oem_event_s *event)
        if (prov_params->persist &&
        (prov_params->network_role || prov_params->network_config)) {
                WDS_LOGE("Persistent group is used but "
-                               "conncap/dev_passwd_id are present");
-               __WDS_LOG_FUNC_EXIT__;
+                               "conncap/dev_passwd_id are present");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        if (!prov_params->persist &&
        (!prov_params->network_role && !prov_params->network_config)) {
                WDS_LOGE("Persistent group not used but "
-                               "conncap/dev_passwd_id are missing");
-               __WDS_LOG_FUNC_EXIT__;
+                               "conncap/dev_passwd_id are missing");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -1616,21 +1608,21 @@ int __wfd_handle_asp_prov_done(wfd_session_s *session, wfd_oem_event_s *event)
                res = wfd_session_asp_connect(session, WFD_OEM_ASP_SESSION_ROLE_CLIENT);
        } else if (prov_params->network_role == WFD_OEM_ASP_SESSION_ROLE_GO) {
                res = wfd_session_asp_connect(session, WFD_OEM_ASP_SESSION_ROLE_GO);
-               WDS_LOGD("don't need to take action.");
+               WDS_LOGD("don't need to take action.");//LCOV_EXCL_LINE
 
        } else {
-               WDS_LOGE("Unhandled event");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Unhandled event");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                res = -1;
        }
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return res;
 }
 
 void wfd_event_asp_prov_start(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_session_s *session = NULL;
@@ -1638,14 +1630,14 @@ void wfd_event_asp_prov_start(wfd_oem_event_s *event)
        int res = 0;
 
        if (manager == NULL || event == NULL || event->edata == NULL) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        if (!manager->is_asp_supported) {
-               WDS_LOGD("ASP is not supported.");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGD("ASP is not supported.");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -1653,8 +1645,8 @@ void wfd_event_asp_prov_start(wfd_oem_event_s *event)
        res = __wfd_handle_asp_prov(manager, event);
        session = (wfd_session_s *)manager->session;
        if (res < 0 || session == NULL) {
-               WDS_LOGE("Failed to process event of session");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -1673,13 +1665,13 @@ void wfd_event_asp_prov_start(wfd_oem_event_s *event)
 
        wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
 
 void wfd_event_asp_prov_done(wfd_oem_event_s *event)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        wfd_session_s *session = NULL;
@@ -1687,14 +1679,14 @@ void wfd_event_asp_prov_done(wfd_oem_event_s *event)
        int res = 0;
 
        if (manager == NULL || event == NULL || event->edata == NULL) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        if (!manager->is_asp_supported) {
-               WDS_LOGD("ASP is not supported.");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGD("ASP is not supported.");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -1712,27 +1704,29 @@ void wfd_event_asp_prov_done(wfd_oem_event_s *event)
        res = __wfd_handle_asp_prov(manager, event);
        session = (wfd_session_s *)manager->session;
        if (res < 0 || session == NULL) {
-               WDS_LOGE("Failed to process event of session");
+               WDS_LOGE("Failed to process event of session");//LCOV_EXCL_LINE
                wfd_destroy_session(manager);
+               wfd_oem_refresh(manager->oem_ops);
+               _wfd_event_reset_state(manager);
                wfd_asp_connect_status(prov_params->session_mac,
                                                        prov_params->session_id,
                                                        ASP_CONNECT_STATUS_REQUEST_FAILED,
                                                        NULL);
-               wfd_oem_refresh(manager->oem_ops);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
        if (prov_params->status != WFD_OEM_SC_SUCCESS &&
                        prov_params->status != WFD_OEM_SC_SUCCESS_ACCEPTED_BY_USER) {
-               WDS_LOGD("ASP-PROV failed. remove session.");
+               WDS_LOGD("ASP-PROV failed. remove session.");//LCOV_EXCL_LINE
                wfd_destroy_session(manager);
                wfd_oem_refresh(manager->oem_ops);
+               _wfd_event_reset_state(manager);
                wfd_asp_connect_status(prov_params->session_mac,
                                                        prov_params->session_id,
                                                        ASP_CONNECT_STATUS_REQUEST_FAILED,
                                                        NULL);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -1747,29 +1741,30 @@ void wfd_event_asp_prov_done(wfd_oem_event_s *event)
                                                NULL);
        res = __wfd_handle_asp_prov_done(session, event);
        if (res < 0) {
-               WDS_LOGE("Connect failed. remove session.");
+               WDS_LOGE("Connect failed. remove session.");//LCOV_EXCL_LINE
                wfd_destroy_session(manager);
                wfd_oem_refresh(manager->oem_ops);
+               _wfd_event_reset_state(manager);
 
                wfd_asp_connect_status(prov_params->session_mac,
                                                        prov_params->session_id,
                                                        ASP_CONNECT_STATUS_GROUP_FORMATION_FAILED,
                                                        NULL);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
-       WDS_LOGD("Provision done succeeded.");
-       __WDS_LOG_FUNC_EXIT__;
+       WDS_LOGD("Provision done succeeded.");//LCOV_EXCL_LINE
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
-
+//LCOV_EXCL_START
 void wfd_event_init(wfd_oem_event_cbs_s *event_cbs)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        if (!event_cbs) {
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return;
        }
 
@@ -1816,6 +1811,7 @@ void wfd_event_init(wfd_oem_event_cbs_s *event_cbs)
 
        event_cbs->extra_data = NULL;
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return;
 }
+//LCOV_EXCL_STOP