Accept incoming negotiation request when autoconnection is ON.
[platform/core/connectivity/wifi-direct-manager.git] / src / wifi-direct-session.c
index b4d59c5..f5211f7 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 
 #include <glib.h>
 
 #include "wifi-direct-dbus.h"
 #include "wifi-direct-asp.h"
 
-
+//LCOV_EXCL_START
 static gboolean _session_timeout_cb(gpointer *user_data)
 {
-       __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;
        unsigned char *peer_addr = NULL;
        char peer_mac_address[MACSTR_LEN+1] = {0, };
 
        if (!session) {
-               WDS_LOGE("Invalid parameter");
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
                return FALSE;
        }
        session->connecting_120 = 0;
        session->timer = 0;
-       WDS_LOGD("Session timer expired");
+       WDS_LOGD("Session timer expired");//LCOV_EXCL_LINE
 
        peer_addr = wfd_session_get_peer_addr(session);
        if (peer_addr != NULL)
@@ -104,13 +105,14 @@ static gboolean _session_timeout_cb(gpointer *user_data)
                wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
        }
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return FALSE;
 }
+//LCOV_EXCL_STOP
 
 static void _wfd_notify_session_failed(wfd_manager_s *manager, unsigned char *peer_addr)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        char peer_mac_address[MACSTR_LEN+1] = {0, };
 
        snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
@@ -138,16 +140,16 @@ static void _wfd_notify_session_failed(wfd_manager_s *manager, unsigned char *pe
                wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
        }
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
 }
 
 int wfd_session_timer(wfd_session_s *session, int start)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        if (!session) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -156,24 +158,24 @@ int wfd_session_timer(wfd_session_s *session, int start)
                        session->connecting_120 = 1;
 
                if (session->timer > 0) {
-                       WDS_LOGE("Session timer already started");
-                       __WDS_LOG_FUNC_EXIT__;
+                       WDS_LOGE("Session timer already started");//LCOV_EXCL_LINE
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return -1;
                }
                session->timer = g_timeout_add(120000,
                                                (GSourceFunc) _session_timeout_cb,
                                                NULL);
-               WDS_LOGD("Session timer started");
+               WDS_LOGD("Session timer started");//LCOV_EXCL_LINE
        } else {
                session->connecting_120 = 0;
                if (session->timer > 0) {
                        g_source_remove(session->timer);
                        session->timer = 0;
-                       WDS_LOGD("Session timer stoped");
+                       WDS_LOGD("Session timer stoped");//LCOV_EXCL_LINE
                }
        }
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
@@ -181,28 +183,28 @@ int wfd_session_timer(wfd_session_s *session, int start)
  * before using this function */
 wfd_session_s *wfd_create_session(void *data, unsigned char *peer_addr, int wps_mode, int direction)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_manager_s *manager = (wfd_manager_s*) data;
        wfd_session_s *session = NULL;
        wfd_device_s *peer = NULL;
 
        if (!data || !peer_addr) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return NULL;
        }
 
        WDS_LOGD("create session for peer[" MACSTR "]", MAC2STR(peer_addr));
 
        if (manager->session) {
-               WDS_LOGE("Session already exist");
+               WDS_LOGE("Session already exist");//LCOV_EXCL_LINE
                return NULL;
        }
 
        session = (wfd_session_s*) g_try_malloc0(sizeof(wfd_session_s));
        if (!session) {
-               WDS_LOGE("Failed to allocate memory for session");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Failed to allocate memory for session");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return NULL;
        }
 
@@ -210,7 +212,7 @@ wfd_session_s *wfd_create_session(void *data, unsigned char *peer_addr, int wps_
        if (!peer) {
                WDS_LOGE("Failed to find peer info[" MACSECSTR "]", MAC2SECSTR(peer_addr));
                g_free(session);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return NULL;
        }
        peer->state = WFD_PEER_STATE_CONNECTING;
@@ -238,12 +240,15 @@ wfd_session_s *wfd_create_session(void *data, unsigned char *peer_addr, int wps_
                        session->req_wps_mode = WFD_WPS_MODE_KEYPAD;
 
                        if (wfd_oem_generate_pin(manager->oem_ops, &generated_pin) != 0) {
-                               WDS_LOGE("Failed to generate pin");
+                               WDS_LOGE("Failed to generate pin");//LCOV_EXCL_LINE
                                g_free(session);
-                               __WDS_LOG_FUNC_EXIT__;
+                               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                                return NULL;
                        }
 
+#if defined(BUILD_GTESTS)
+                       generated_pin = g_strndup("12345678", PINSTR_LEN + 1);
+#endif /* BUILD_GTESTS */
                        g_strlcpy(session->wps_pin, generated_pin, PINSTR_LEN + 1);
                        g_free(generated_pin);
        }
@@ -251,29 +256,30 @@ wfd_session_s *wfd_create_session(void *data, unsigned char *peer_addr, int wps_
        if (peer->dev_role == WFD_DEV_ROLE_GO && manager->local->dev_role != WFD_DEV_ROLE_GO)
                manager->local->dev_role = WFD_DEV_ROLE_GC;
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return session;
 }
 
 int wfd_destroy_session(void *data)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_manager_s *manager = (wfd_manager_s*) data;
        wfd_session_s *session = NULL;
        wfd_device_s *peer = NULL;
 
        if (!manager) {
-               WDS_LOGE("Invalid parameter");
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
                return -1;
        }
 
        session = (wfd_session_s*) manager->session;
        if (!session) {
-               WDS_LOGE("Session not found");  /* self prevent */
+               WDS_LOGE("Session not found");//LCOV_EXCL_LINE  /* self prevent */
                return -1;
        }
        wfd_session_timer(session, 0);
        peer = session->peer;
+       WDS_LOGD("peer :%p", peer);
 
        if (peer) {
                if (session->state == SESSION_STATE_COMPLETED)
@@ -281,7 +287,7 @@ int wfd_destroy_session(void *data)
                else
                        peer->state = WFD_PEER_STATE_DISCOVERED;
        } else {
-               WDS_LOGE("Peer not found");
+               WDS_LOGE("Peer not found");//LCOV_EXCL_LINE
        }
 
        g_free(session);
@@ -292,21 +298,21 @@ int wfd_destroy_session(void *data)
        if (manager->local->dev_role == WFD_DEV_ROLE_GC)
                manager->local->dev_role = WFD_DEV_ROLE_NONE;
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 int wfd_session_start(wfd_session_s *session)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_manager_s *manager = wfd_get_manager();
        wfd_device_s *peer = NULL;
        int join = 0;
        int res = 0;
 
        if (!session) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -334,40 +340,40 @@ int wfd_session_start(wfd_session_s *session)
                                                                        MAC2SECSTR(peer->dev_addr));
                wfd_destroy_session(manager);
                /* TODO: send notification to App */
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        wfd_session_timer(session, 1);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 int wfd_session_asp_session_start(wfd_session_s *session, wfd_oem_asp_prov_s *params)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
        wfd_manager_s *manager = wfd_get_manager();
        int res = 0;
 
        if (session == NULL || 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;
        }
 
        if (session->state > SESSION_STATE_STARTED) {
                WDS_LOGE("Invalid session state(%d)", session->state);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        res = wfd_oem_asp_prov_disc_req(manager->oem_ops, params);
        if (res < 0) {
-               WDS_LOGD("Failed to send ASP provision discovery request to peer");
+               WDS_LOGD("Failed to send ASP provision discovery request to peer");//LCOV_EXCL_LINE
                wfd_destroy_session(manager);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -377,21 +383,21 @@ int wfd_session_asp_session_start(wfd_session_s *session, wfd_oem_asp_prov_s *pa
        memcpy(session->service_mac, params->service_mac, MACADDR_LEN);
        wfd_session_timer(session, 1);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 #if 0
 int wfd_session_stop(wfd_session_s *session)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_manager_s *manager = wfd_get_manager();
        wfd_device_s *peer = NULL;
        int res = 0;
 
        if (!session) {
                WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -404,7 +410,7 @@ int wfd_session_stop(wfd_session_s *session)
 
                        if (res < 0) {
                        WDS_LOGE("Failed to reject or cancel connection");
-                       __WDS_LOG_FUNC_EXIT__;
+                       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                        return -1;
                }
        }
@@ -412,7 +418,7 @@ int wfd_session_stop(wfd_session_s *session)
        session->state = SESSION_STATE_STOPPED;
        wfd_destroy_session(manager);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 #endif
@@ -423,20 +429,20 @@ int wfd_session_stop(wfd_session_s *session)
  */
 int wfd_session_connect(wfd_session_s *session)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_manager_s *manager = wfd_get_manager();
        wfd_oem_conn_param_s param;
        wfd_device_s *peer = NULL;
        int res = 0;
 
        if (!session) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        if (session->state > SESSION_STATE_GO_NEG) {
-               WDS_LOGE("Session already finished GO Negotiation");
+               WDS_LOGE("Session already finished GO Negotiation");//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -448,6 +454,8 @@ int wfd_session_connect(wfd_session_s *session)
        if (peer->dev_role == WFD_DEV_ROLE_GO || session->type == SESSION_TYPE_INVITE)
                param.conn_flags |= WFD_OEM_CONN_TYPE_JOIN;
        param.go_intent = session->go_intent;
+       if (peer->display.availability)
+               param.go_intent = manager->go_intent_per_type[manager->local->display.type];
        param.freq = session->freq;
        if (manager->local->group_flags & WFD_GROUP_FLAG_PERSISTENT)
                param.conn_flags |= WFD_OEM_CONN_TYPE_PERSISTENT;
@@ -472,30 +480,30 @@ int wfd_session_connect(wfd_session_s *session)
        if (res < 0) {
                WDS_LOGD("Failed to connect peer [" MACSECSTR "]", MAC2SECSTR(peer->dev_addr));
                wfd_destroy_session(manager);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        wfd_session_timer(session, 1);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 int wfd_session_cancel(wfd_session_s *session, unsigned char *peer_addr)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_manager_s *manager = wfd_get_manager();
        int res = 0;
 
        if (!session || !session->peer) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return WIFI_DIRECT_ERROR_NOT_PERMITTED;
        }
 
        if (memcmp(peer_addr, session->peer->dev_addr, MACADDR_LEN)) {
-               WDS_LOGE("Peer is not included in this session");
+               WDS_LOGE("Peer is not included in this session");//LCOV_EXCL_LINE
                return WIFI_DIRECT_ERROR_NOT_PERMITTED;
        }
 
@@ -505,26 +513,26 @@ int wfd_session_cancel(wfd_session_s *session, unsigned char *peer_addr)
                res = wfd_oem_cancel_connection(manager->oem_ops, peer_addr);
 
        if (res < 0) {
-               WDS_LOGE("Failed to cancel connection");
+               WDS_LOGE("Failed to cancel connection");//LCOV_EXCL_LINE
                return WIFI_DIRECT_ERROR_OPERATION_FAILED;
        }
 
        wfd_destroy_session(manager);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 int wfd_session_reject(wfd_session_s *session, unsigned char *peer_addr)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_manager_s *manager = wfd_get_manager();
        wfd_device_s *peer = NULL;
        int res = 0;
 
        if (!session || !manager) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -532,7 +540,7 @@ int wfd_session_reject(wfd_session_s *session, unsigned char *peer_addr)
        if (session->state < SESSION_STATE_CREATED ||
                session->state >= SESSION_STATE_STOPPED) {
                WDS_LOGE("Session state is Invalid [%d]", session->state);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -549,29 +557,29 @@ int wfd_session_reject(wfd_session_s *session, unsigned char *peer_addr)
        else
                res = wfd_oem_reject_connection(manager->oem_ops, peer->dev_addr);
        if (res < 0) {
-               WDS_LOGE("Failed to reject connection");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Failed to reject connection");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        wfd_destroy_session(manager);
        /* TODO: send notification to App */
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 int wfd_session_join(wfd_session_s *session)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_manager_s *manager = wfd_get_manager();
        wfd_oem_conn_param_s param;
        wfd_device_s *peer = NULL;
        int res = 0;
 
        if (!session) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -590,19 +598,19 @@ int wfd_session_join(wfd_session_s *session)
        if (res < 0) {
                WDS_LOGD("Failed to join with peer [" MACSECSTR "]", MAC2SECSTR(peer->dev_addr));
                wfd_destroy_session(manager);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        wfd_session_timer(session, 1);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 int wfd_session_invite(wfd_session_s *session)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_manager_s *manager = wfd_get_manager();
        wfd_oem_invite_param_s param;
        wfd_device_s *peer = NULL;
@@ -610,8 +618,8 @@ int wfd_session_invite(wfd_session_s *session)
        int res = 0;
 
        if (!session) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -634,31 +642,31 @@ int wfd_session_invite(wfd_session_s *session)
        if (res < 0) {
                WDS_LOGE("Failed to invite with peer [" MACSECSTR "]", MAC2SECSTR(peer->dev_addr));
                wfd_destroy_session(manager);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        wfd_session_timer(session, 1);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 int wfd_session_wps(wfd_session_s *session)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_manager_s *manager = wfd_get_manager();
        wfd_device_s *peer = NULL;
        int res = 0;
 
        if (!session) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        if (session->state > SESSION_STATE_WPS) {
-               WDS_LOGE("Session already starts WPS");
+               WDS_LOGE("Session already starts WPS");//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -681,11 +689,11 @@ int wfd_session_wps(wfd_session_s *session)
        if (res < 0) {
                WDS_LOGE("Failed to start wps with peer [" MACSECSTR "]", MAC2SECSTR(peer->dev_addr));
                wfd_destroy_session(manager);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
@@ -695,21 +703,21 @@ int wfd_session_wps(wfd_session_s *session)
  */
 int wfd_session_asp_connect(wfd_session_s *session, int role)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_manager_s *manager = wfd_get_manager();
        wfd_oem_conn_param_s param;
        wfd_device_s *peer = NULL;
        int res = 0;
 
        if (!session) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        if (session->state >= SESSION_STATE_GO_NEG) {
-               WDS_LOGE("Session already starting GO Negotiation");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Session already starting GO Negotiation");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -737,13 +745,13 @@ int wfd_session_asp_connect(wfd_session_s *session, int role)
        if (res < 0) {
                WDS_LOGD("Failed to connect peer [" MACSECSTR "]", MAC2SECSTR(peer->dev_addr));
                wfd_destroy_session(manager);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        wfd_session_timer(session, 1);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
@@ -753,20 +761,20 @@ int wfd_session_asp_connect(wfd_session_s *session, int role)
  */
 int wfd_session_asp_persistent_connect(wfd_session_s *session, int persist_group_id)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_manager_s *manager = wfd_get_manager();
        wfd_oem_group_param_s param;
        int res = 0;
 
        if (!session) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        if (session->state > SESSION_STATE_GO_NEG) {
-               WDS_LOGE("Session already finished GO Negotiation");
-               __WDS_LOG_FUNC_EXIT__;
+               WDS_LOGE("Session already finished GO Negotiation");//LCOV_EXCL_LINE
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -778,100 +786,100 @@ int wfd_session_asp_persistent_connect(wfd_session_s *session, int persist_group
 
        res = wfd_oem_create_group(manager->oem_ops, &param);
        if (res < 0) {
-               WDS_LOGD("Failed to create persistent group for ASP");
+               WDS_LOGD("Failed to create persistent group for ASP");//LCOV_EXCL_LINE
                wfd_destroy_session(manager);
-               __WDS_LOG_FUNC_EXIT__;
+               __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
                return -1;
        }
 
        wfd_session_timer(session, 1);
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 wfd_device_s *wfd_session_get_peer(wfd_session_s *session)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_device_s *peer = NULL;
 
        if (!session) {
-               WDS_LOGE("Invalid parameter");
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
                return NULL;
        }
 
        peer = session->peer;
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return peer;
 }
 
 unsigned char *wfd_session_get_peer_addr(wfd_session_s *session)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
        wfd_device_s *peer = NULL;
 
        if (!session || !session->peer) {
-               WDS_LOGE("Invalid parameter");
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
                return NULL;
        }
 
        peer = session->peer;
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return peer->dev_addr;
 }
 
 #if 0
 int wfd_session_get_wps_pin(wfd_session_s *session, unsigned char *pin)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 int wfd_session_set_wps_pin(wfd_session_s *session, unsigned char *pin)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 int wfd_session_set_freq(wfd_session_s *session, int freq)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 int wfd_session_get_state(wfd_session_s *session)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 
 int wfd_session_set_state(wfd_session_s *session, int state)
 {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
 
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }
 #endif
 
 int wfd_session_process_event(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;
        int res = 0;
 
        if (!manager || !event) {
-               WDS_LOGE("Invalid parameter");
+               WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
                return -1;
        }
 
@@ -897,9 +905,9 @@ int wfd_session_process_event(wfd_manager_s *manager, wfd_oem_event_s *event)
                                                                MAC2SECSTR(event->dev_addr));
                                break;
                        }
-                       WDS_LOGD("=====> session already exist. (invitation session)");
+                       WDS_LOGD("=====> session already exist. (invitation session)");//LCOV_EXCL_LINE
                        if (session->state > SESSION_STATE_WPS) {
-                               WDS_LOGE("Session already starts WPS");
+                               WDS_LOGE("Session already starts WPS");//LCOV_EXCL_LINE
                                break;
                        }
 
@@ -921,7 +929,7 @@ int wfd_session_process_event(wfd_manager_s *manager, wfd_oem_event_s *event)
 
                session->state = SESSION_STATE_STARTED;
                if (session->type == SESSION_TYPE_INVITE)
-                       WDS_LOGD("Invitation session");
+                       WDS_LOGD("Invitation session");//LCOV_EXCL_LINE
                else if (WFD_DEV_ROLE_GO == manager->local->dev_role)
                        session->type = SESSION_TYPE_JOIN;
                else
@@ -975,12 +983,12 @@ int wfd_session_process_event(wfd_manager_s *manager, wfd_oem_event_s *event)
                }
 
                if (session->state > SESSION_STATE_STARTED) {
-                       WDS_LOGE("Unexpected event. Session is already started");
+                       WDS_LOGE("Unexpected event. Session is already started");//LCOV_EXCL_LINE
                        break;
                }
 
                if (session->type == SESSION_TYPE_INVITE) {
-                       WDS_LOGE("Session type is invite, ignore provision discovery response");
+                       WDS_LOGE("Session type is invite, ignore provision discovery response");//LCOV_EXCL_LINE
                        break;
                }
 
@@ -1038,8 +1046,8 @@ int wfd_session_process_event(wfd_manager_s *manager, wfd_oem_event_s *event)
                        session = wfd_create_session(manager, event->dev_addr,
                                        event->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
                                break;
                        }
 
@@ -1049,13 +1057,24 @@ int wfd_session_process_event(wfd_manager_s *manager, wfd_oem_event_s *event)
                        wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
                        wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTING);
 
-                       char peer_mac_address[MACSTR_LEN+1] = {0, };
-                       g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
-                       wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
-                                       "Connection",
-                                       g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
-                                               WFD_EVENT_CONNECTION_REQ,
-                                               peer_mac_address));
+                       if (manager->autoconnection == TRUE) {
+                               /**
+                                * TODO: Add autoconnection peer matching logic.
+                                */
+                               /**
+                                * In autoconnection mode, connection request notification
+                                * should not be sent to library.
+                                */
+                               res  = wfd_session_connect(session);
+                       } else {
+                               char peer_mac_address[MACSTR_LEN+1] = {0, };
+                               g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
+                               wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
+                                                            "Connection",
+                                                            g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
+                                                                          WFD_EVENT_CONNECTION_REQ,
+                                                                          peer_mac_address));
+                       }
                } else {
                        /* Sometimes, Provision Discovery response is not received.
                         * At this time, connection should be triggered by GO Negotiation request event */
@@ -1064,8 +1083,13 @@ int wfd_session_process_event(wfd_manager_s *manager, wfd_oem_event_s *event)
                                        break;
                                res = wfd_session_connect(session);
                        } else {
-                               /* In autoconnection mode, MT should not send GO Nego Req
-                                  before receiving the GO Nego Req from peer (MO). */
+                               /**
+                                * TODO: Add autoconnection peer matching logic.
+                                */
+                               /**
+                                * In autoconnection mode, MT should not send GO Nego Req
+                                * before receiving the GO Nego Req from peer (MO).
+                                */
                                if (manager->autoconnection == TRUE)
                                        res  = wfd_session_connect(session);
                        }
@@ -1163,6 +1187,6 @@ int wfd_session_process_event(wfd_manager_s *manager, wfd_oem_event_s *event)
        default:
                break;
        }
-       __WDS_LOG_FUNC_EXIT__;
+       __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
 }