Refactoring session functions 16/303516/4
authorSeonah Moon <seonah1.moon@samsung.com>
Fri, 29 Dec 2023 07:28:02 +0000 (16:28 +0900)
committerSeonah Moon <seonah1.moon@samsung.com>
Fri, 29 Dec 2023 08:18:46 +0000 (17:18 +0900)
[----------] 12 tests from AspSessionTest
[ RUN      ] AspSessionTest.setSessionInfoN
[       OK ] AspSessionTest.setSessionInfoN (0 ms)
[ RUN      ] AspSessionTest.setSessionInfoP
[       OK ] AspSessionTest.setSessionInfoP (0 ms)
[ RUN      ] AspSessionTest.setNetworkConfigN
[       OK ] AspSessionTest.setNetworkConfigN (0 ms)
[ RUN      ] AspSessionTest.setNetworkConfigP
[       OK ] AspSessionTest.setNetworkConfigP (0 ms)
[ RUN      ] AspSessionTest.getSessionN
[       OK ] AspSessionTest.getSessionN (0 ms)
[ RUN      ] AspSessionTest.getSessionP
[       OK ] AspSessionTest.getSessionP (0 ms)
[ RUN      ] AspSessionTest.getSessionWithMacandIdN1
[       OK ] AspSessionTest.getSessionWithMacandIdN1 (0 ms)
[ RUN      ] AspSessionTest.getSessionWithMacandIdN2
[       OK ] AspSessionTest.getSessionWithMacandIdN2 (0 ms)
[ RUN      ] AspSessionTest.getSessionWithMacandIdP
[       OK ] AspSessionTest.getSessionWithMacandIdP (0 ms)
[ RUN      ] AspSessionTest.removeN
[       OK ] AspSessionTest.removeN (0 ms)
[ RUN      ] AspSessionTest.addRemoveP1
[       OK ] AspSessionTest.addRemoveP1 (0 ms)
[ RUN      ] AspSessionTest.addRemoveP2
[       OK ] AspSessionTest.addRemoveP2 (0 ms)
[----------] 12 tests from AspSessionTest (0 ms total)

[----------] Global test environment tear-down
[==========] 80 tests from 6 test suites ran. (55 ms total)
[  PASSED  ] 80 tests.

Change-Id: I038b24540149f3b2561f4607f4f313eec10b808a

src/CMakeLists.txt
src/asp-client.cpp
src/asp-session.cpp [new file with mode: 0644]
src/include/asp-client.h
src/include/asp-session.h [new file with mode: 0644]
unittest/asp-gtest-session-api.cpp [new file with mode: 0755]
unittest/asp-gtest-session.cpp [changed mode: 0755->0644]

index 47562fdc8d44d72cdc15b84905a6d87bc200f75d..32945f2e45e8e28a02950936602ba58a7b6ccb1f 100755 (executable)
@@ -27,6 +27,7 @@ SET(ASP_SOURCES
     ${ASP_PATH}/asp-dbus.cpp
     ${ASP_PATH}/asp-advert.cpp
     ${ASP_PATH}/asp-seek.cpp
+    ${ASP_PATH}/asp-session.cpp
     ${ASP_PATH}/asp-utils.cpp
     )
 
index 11c53ef637177591fc579da31c9e6b51bd66a647..5ac548cd7f9d7ed7b327d667e3ec2949b9a66eae 100755 (executable)
@@ -67,6 +67,7 @@
 #include "asp-dbus.h"
 #include "asp-log.h"
 #include "asp-seek.h"
+#include "asp-session.h"
 #include "asp-utils.h"
 
 /*****************************************************************************
@@ -96,7 +97,6 @@ static __thread asp_client_info_s g_client_info = {
        .user_data_for_cb_session_port_status = NULL
 };
 
-static __thread GList *asp_sessions = NULL;
 
 /*****************************************************************************
  *  Local Structures Definition
@@ -258,23 +258,6 @@ static int __asp_err_string_to_enum(const char *error)
                return ASP_ERROR_OPERATION_FAILED;
 }
 
-static asp_client_session_s *get_session_by_id_mac(const char *session_mac, unsigned int session_id)
-{
-       asp_client_session_s *session = NULL;
-       GList *temp = NULL;
-
-       for (temp = g_list_first(asp_sessions);
-               temp != NULL; temp = g_list_next(temp)) {
-               session = (asp_client_session_s *)temp->data;
-               if (session != NULL && session->session_id == session_id &&
-                               memcmp(session->session_mac, session_mac, MACSTR_LEN) == 0)
-                       break;
-               session = NULL;
-       }
-
-       return session;
-}
-
 void asp_process_seek_search_result(GDBusConnection *connection,
                const gchar *object_path, GVariant *parameters)
 {
@@ -359,13 +342,8 @@ int __handle_session_request(unsigned int adv_id, const char *session_mac,
                unsigned int session_id, const char *session_info)
 {
        __ASP_LOG_FUNC_START__;
-       AspAdvert *service = NULL;
-       asp_client_session_s *session = NULL;
-       GList *temp = NULL;
-       int res = 0;
-
-       service = getAdvertById(adv_id);
 
+       AspAdvert *service = getAdvertById(adv_id);
        if (service == NULL) {
                ASP_LOGD("No matched local service");
                __ASP_LOG_FUNC_END__;
@@ -374,18 +352,9 @@ int __handle_session_request(unsigned int adv_id, const char *session_mac,
 
        ASP_LOGD("Process auto accept service");
 
-       temp = NULL;
-       for (temp = g_list_first(asp_sessions);
-                       temp != NULL; temp = g_list_next(temp)) {
-               session = (asp_client_session_s *)temp->data;
-               if (session != NULL && session->session_id == session_id &&
-                               memcmp(session->session_mac, session_mac, MACSTR_LEN) == 0)
-                       break;
-               session = NULL;
-       }
-
+       AspSession *session = getSession(session_mac, session_id);
        if (session == NULL) {
-               res = asp_session_get_handle((char *)session_mac, session_id, (void **)&session);
+               int res = asp_session_get_handle((char *)session_mac, session_id, (void **)&session);
                if (res < 0) {
                        ASP_LOGE("asp_get_session failed");
                        __ASP_LOG_FUNC_END__;
@@ -393,8 +362,8 @@ int __handle_session_request(unsigned int adv_id, const char *session_mac,
                }
 
                if (session_info)
-                       session->session_information = g_strdup(session_info);
-               asp_sessions = g_list_prepend(asp_sessions, session);
+                       session->setSessionInfo(session_info);
+               addSessionToServiceList(session);
        }
 
        if (service->auto_accept == FALSE) {
@@ -426,7 +395,7 @@ static void __invoke_session_request_cb(asp_variant_s *variant)
                return;
        }
 
-       asp_client_session_s *session = get_session_by_id_mac(variant->session_mac, variant->session_id);
+       AspSession *session = getSession(variant->session_mac, variant->session_id);
        if (!session) {
                ASP_LOGD("There's no related session");
                return;
@@ -478,7 +447,6 @@ void asp_process_session_config_request(GDBusConnection *connection,
                const gchar *object_path, GVariant *parameters)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *session = NULL;
        asp_client_info_s *client = &g_client_info;
        if (!client->session_config_request_cb) {
                ASP_LOGE("session_config_request_cb is NULL!!");
@@ -498,12 +466,13 @@ void asp_process_session_config_request(GDBusConnection *connection,
                return;
        }
 
+       AspSession *session = NULL;
        if (variant->session_mac == NULL) {
                ASP_LOGE("session_mac is NULL");
                goto ERROR;
        }
 
-       session = get_session_by_id_mac(variant->session_mac, variant->session_id);
+       session = getSession(variant->session_mac, variant->session_id);
        if (!session) {
                ASP_LOGD("There's no related session");
                goto ERROR;
@@ -524,7 +493,6 @@ void asp_process_session_connect_status(GDBusConnection *connection,
                const gchar *object_path, GVariant *parameters)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *session = NULL;
        asp_client_info_s *client = &g_client_info;
        if (!client->session_connect_status_cb) {
                ASP_LOGE("connect_status_cb is NULL!!");
@@ -544,12 +512,13 @@ void asp_process_session_connect_status(GDBusConnection *connection,
                return;
        }
 
+       AspSession *session = NULL;
        if (variant->session_mac == NULL) {
                ASP_LOGE("session_mac is NULL");
                goto ERROR;
        }
 
-       session = get_session_by_id_mac(variant->session_mac, variant->session_id);
+       session = getSession(variant->session_mac, variant->session_id);
        if (!session) {
                ASP_LOGD("There's no related session");
                goto ERROR;
@@ -571,7 +540,6 @@ void asp_process_session_status(GDBusConnection *connection,
                const gchar *object_path, GVariant *parameters)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *session = NULL;
        asp_client_info_s *client = &g_client_info;
        if (!client->session_status_cb) {
                ASP_LOGE("session_status_cb is NULL!!");
@@ -591,12 +559,13 @@ void asp_process_session_status(GDBusConnection *connection,
                return;
        }
 
+       AspSession *session = NULL;
        if (variant->session_mac == NULL) {
                ASP_LOGE("session_mac is NULL");
                goto ERROR;
        }
 
-       session = get_session_by_id_mac(variant->session_mac, variant->session_id);
+       session = getSession(variant->session_mac, variant->session_id);
        if (!session) {
                ASP_LOGD("There's no related session");
                goto ERROR;
@@ -617,7 +586,6 @@ void asp_process_session_port_status(GDBusConnection *connection,
                const gchar *object_path, GVariant *parameters)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *session = NULL;
        asp_client_info_s *client = &g_client_info;
        if (!client->session_port_status_cb) {
                ASP_LOGE("port_status_cb is NULL!!");
@@ -637,12 +605,13 @@ void asp_process_session_port_status(GDBusConnection *connection,
                return;
        }
 
+       AspSession *session = NULL;
        if (variant->session_mac == NULL) {
                ASP_LOGE("session_mac is NULL");
                goto ERROR;
        }
 
-       session = get_session_by_id_mac(variant->session_mac, variant->session_id);
+       session = getSession(variant->session_mac, variant->session_id);
        if (!session) {
                ASP_LOGD("There's no related session");
                goto ERROR;
@@ -943,72 +912,6 @@ int asp_session_unset_port_status_cb(void)
 
 typedef void (*free_func)(void *);
 
-
-static void __free_session(void *session)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-
-       service = (asp_client_session_s *)session;
-       if (service == NULL) {
-               ASP_LOGE("invalid parameter");
-               __ASP_LOG_FUNC_END__;
-               return;
-       }
-
-       g_free(service->session_information);
-       g_free(service->deferred_session_response);
-       g_free(service);
-       service = NULL;
-       __ASP_LOG_FUNC_END__;
-       return;
-}
-
-static asp_client_session_s *__get_session(void *handle)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       GList *temp = NULL;
-
-       if (asp_sessions == NULL) {
-
-               __ASP_LOG_FUNC_END__;
-               return NULL;
-       }
-
-       ASP_LOGD("service [%p]", handle);
-
-       temp = g_list_first(asp_sessions);
-       for (temp = g_list_first(asp_sessions); temp != NULL; temp = g_list_next(temp)) {
-               service = (asp_client_session_s *)temp->data;
-
-               ASP_LOGD("temp [%p]", service);
-               if (service != NULL && service == handle)
-                       break;
-               service = NULL;
-       }
-       __ASP_LOG_FUNC_END__;
-       return service;
-}
-
-static int __remove_session(void *handle)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       service = __get_session(handle);
-
-       if (service == NULL) {
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_OPERATION_FAILED;
-       } else {
-               asp_sessions = g_list_remove(asp_sessions, handle);
-               __free_session(service);
-       }
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
 static bool __is_valid_instance_name(char *instance_name)
 {
        if (strlen(instance_name) > INSTANCE_NAME_LEN)
@@ -1990,9 +1893,6 @@ int asp_seek_stop(asp_seek_service_h seek_service)
 int asp_session_create(char *service_mac, unsigned int adv_id, asp_session_h* session)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       int res = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
 
@@ -2008,66 +1908,51 @@ int asp_session_create(char *service_mac, unsigned int adv_id, asp_session_h* se
                return ASP_ERROR_INVALID_PARAMETER;
        }
 
-       service = (asp_client_session_s *)g_try_malloc0(sizeof(asp_client_session_s));
+       AspSession *service = new AspSession(service_mac, adv_id);
        if (!service) {
-               ASP_LOGE("malloc() failed!!!.");
                __ASP_LOG_FUNC_END__;
                return ASP_ERROR_OUT_OF_MEMORY;
        }
-       ASP_LOGD("service [%p]", service);
 
-       service->advertisement_id = adv_id;
-       g_strlcpy(service->service_mac, service_mac, MACSTR_LEN);
-
-       asp_sessions = g_list_prepend(asp_sessions, service);
+       ASP_LOGD("service [%p]", service);
+       addSessionToServiceList(service);
 
        /* Session ID will be generated by asp-manager */
-       *session = (asp_session_h)service;
-       ASP_LOGD("asp_session_create() SUCCESS");
-
-       ASP_LOGD("service [%p]", *session);
+       *session = static_cast<asp_session_h>(service);
+       ASP_LOGD("asp_session_create() SUCCESS. session [%p]", *session);
        __ASP_LOG_FUNC_END__;
-       return res;
+       return ASP_ERROR_NONE;
 }
 
 int asp_session_destroy(asp_session_h session)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       int res = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
 
        ASP_LOGD("service [%p]", session);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
                return ASP_ERROR_SESSION_NOT_FOUND;
        }
 
-       res = __remove_session((void *)service);
-       if (res != ASP_ERROR_NONE) {
+       if (removeSession((void *)service) == false) {
                __ASP_LOG_FUNC_END__;
-               return res;
+               return ASP_ERROR_OPERATION_FAILED;
        }
 
        ASP_LOGD("asp_session_destroy() SUCCESS");
-
        __ASP_LOG_FUNC_END__;
        return ASP_ERROR_NONE;
 }
 
-
 int asp_session_get_mac(asp_session_h session, char **session_mac)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       int res = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
@@ -2075,28 +1960,24 @@ int asp_session_get_mac(asp_session_h session, char **session_mac)
 
        ASP_LOGD("service [%p]", session);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
                return ASP_ERROR_SESSION_NOT_FOUND;
        }
 
-       *session_mac = service->session_mac;
+       *session_mac = g_strdup(service->sessionMac.c_str());
 
        ASP_LOGD("asp_session_get_mac() SUCCESS");
-
        __ASP_LOG_FUNC_END__;
-       return res;
+       return ASP_ERROR_NONE;
 }
 
 
 int asp_session_get_id(asp_session_h session, unsigned int *session_id)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       int res = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
@@ -2104,214 +1985,167 @@ int asp_session_get_id(asp_session_h session, unsigned int *session_id)
 
        ASP_LOGD("service [%p]", session);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
                return ASP_ERROR_SESSION_NOT_FOUND;
        }
 
-       *session_id = service->session_id;
+       *session_id = service->sessionId;
 
        ASP_LOGD("asp_session_get_id() SUCCESS");
-
        __ASP_LOG_FUNC_END__;
-       return res;
+       return ASP_ERROR_NONE;
 }
 
 int asp_session_set_info(asp_session_h session, char *service_info)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       int res = ASP_ERROR_NONE;
-       char *info = NULL;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(service_info, __ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
 
-       if (strlen(service_info) > SESSION_INFO_LEN) {
-               ASP_LOGE("NULL Param!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
                return ASP_ERROR_SESSION_NOT_FOUND;
        }
 
-       info = g_strdup(service_info);
-       if (!info) {
-               ASP_LOGE("malloc() failed!!!.");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_OPERATION_FAILED;
-       }
-       g_free(service->session_information);
-       service->session_information = info;
+       if (service->setSessionInfo(service_info) == false)
+               return ASP_ERROR_INVALID_PARAMETER;
 
        ASP_LOGD("asp_session_set_info() SUCCESS");
-
        __ASP_LOG_FUNC_END__;
-       return res;
+       return ASP_ERROR_NONE;
 }
 
 int asp_session_get_info(asp_session_h session, char **service_info)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       int res = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(service_info, __ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
                return ASP_ERROR_SESSION_NOT_FOUND;
        }
 
-       if (service->session_information)
-               *service_info = service->session_information;
+       if (service->sessionInformation.length() > 0)
+               *service_info = (char *)service->sessionInformation.c_str();
 
        ASP_LOGD("asp_session_get_info() SUCCESS");
-
        __ASP_LOG_FUNC_END__;
-       return res;
+       return ASP_ERROR_NONE;
 }
 
 int asp_session_set_p2p_role_scheme(asp_session_h session,
                asp_advert_p2p_role_scheme_e role)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       int res = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(role, __ASP_LOG_FUNC_END__);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
                return ASP_ERROR_SESSION_NOT_FOUND;
        }
 
-       service->network_role = role;
+       service->networkRole = role;
 
        ASP_LOGD("asp_session_set_p2p_role_scheme() SUCCESS");
-
        __ASP_LOG_FUNC_END__;
-       return res;
+       return ASP_ERROR_NONE;
 }
 
 int asp_session_get_p2p_role_scheme(asp_session_h session,
                asp_advert_p2p_role_scheme_e *role)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       int res = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(role, __ASP_LOG_FUNC_END__);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
                return ASP_ERROR_SESSION_NOT_FOUND;
        }
 
-       *role = (asp_advert_p2p_role_scheme_e)service->network_role;
+       *role = (asp_advert_p2p_role_scheme_e)service->networkRole;
 
        ASP_LOGD("asp_session_get_p2p_role_scheme() SUCCESS");
-
        __ASP_LOG_FUNC_END__;
-       return res;
+       return ASP_ERROR_NONE;
 }
 
 int asp_session_set_p2p_config_method(asp_session_h session,
                asp_wps_type_e config_method)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       int res = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
                return ASP_ERROR_SESSION_NOT_FOUND;
        }
 
-       if (config_method < ASP_WPS_TYPE_DEFAULT ||
-                       config_method > ASP_WPS_TYPE_PIN_KEYPAD) {
-               ASP_LOGE("network_config is invalid");
-               __ASP_LOG_FUNC_END__;
+       if (service->setNetworkConfig((int)config_method) == false)
                return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       service->network_config = config_method;
 
        ASP_LOGD("asp_session_set_p2p_config_method() SUCCESS");
-
        __ASP_LOG_FUNC_END__;
-       return res;
+       return ASP_ERROR_NONE;
 }
 
 int asp_session_get_p2p_config_method(asp_session_h session,
                asp_wps_type_e *config_method)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       int res = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(config_method, __ASP_LOG_FUNC_END__);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
                return ASP_ERROR_SESSION_NOT_FOUND;
        }
 
-       *config_method = (asp_wps_type_e)service->network_config;
+       *config_method = (asp_wps_type_e)service->networkConfig;
 
        ASP_LOGD("asp_session_get_p2p_config_method() SUCCESS");
-
        __ASP_LOG_FUNC_END__;
-       return res;
+       return ASP_ERROR_NONE;
 }
 
 int asp_session_get_close_status(asp_session_h session, int *status)
 {
        __ASP_LOG_FUNC_START__;
-       asp_client_session_s *service = NULL;
-       int res = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(status, __ASP_LOG_FUNC_END__);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
@@ -2323,24 +2157,17 @@ int asp_session_get_close_status(asp_session_h session, int *status)
        ASP_LOGD("asp_session_get_close_status() SUCCESS");
 
        __ASP_LOG_FUNC_END__;
-       return res;
+       return ASP_ERROR_NONE;
 }
+
 int asp_session_connect(asp_session_h session)
 {
        __ASP_LOG_FUNC_START__;
-       GVariantBuilder *builder = NULL;
-       GVariant *params = NULL;
-       GError *error = NULL;
-       GVariant *reply = NULL;
-       asp_client_session_s *service = NULL;
-       const char *str = NULL;
-       int ret = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
@@ -2348,18 +2175,21 @@ int asp_session_connect(asp_session_h session)
        }
 
        // LCOV_EXCL_START
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
-       g_variant_builder_add(builder, "{sv}", "service_mac", g_variant_new("s", service->service_mac));
-       g_variant_builder_add(builder, "{sv}", "adv_id", g_variant_new("u", service->advertisement_id));
-       g_variant_builder_add(builder, "{sv}", "role", g_variant_new("y", service->network_config));
-       g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", service->network_config));
-       if (service->session_information)
-               g_variant_builder_add(builder, "{sv}", "session_info", g_variant_new("s", service->session_information));
+       GVariantBuilder *builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+       g_variant_builder_add(builder, "{sv}", "service_mac", g_variant_new("s", service->serviceMac));
+       g_variant_builder_add(builder, "{sv}", "adv_id", g_variant_new("u", service->advertisementId));
+       g_variant_builder_add(builder, "{sv}", "role", g_variant_new("y", service->networkConfig));
+       g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", service->networkConfig));
+       if (service->sessionInformation.length() > 0)
+               g_variant_builder_add(builder, "{sv}", "session_info", g_variant_new("s", service->sessionInformation));
 
-       params = g_variant_new("(a{sv})", builder);
+
+       GVariant *params = g_variant_new("(a{sv})", builder);
        g_variant_builder_unref(builder);
 
-       reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
+       int ret = ASP_ERROR_NONE;
+       GError *error = NULL;
+       GVariant *reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
                                                  "ConnectSession", params, &error);
        if (error != NULL) {
                ASP_LOGE("asp_dbus_method_call_sync() failed."
@@ -2370,13 +2200,13 @@ int asp_session_connect(asp_session_h session)
                return ret;
        }
 
-       g_variant_get(reply, "(iu&s)", &ret, &(service->session_id), &str);
-       if (str != NULL)
-               g_strlcpy(service->session_mac, str, MACSTR_LEN);
+       const char *str = NULL;
+       g_variant_get(reply, "(iu&s)", &ret, &(service->sessionId), &str);
+       if (str != NULL && strlen(str) <= MACSTR_LEN)
+               service->sessionMac = str;
        g_variant_unref(reply);
 
        ASP_LOGD("%s() return : [%d]", __func__, ret);
-
        __ASP_LOG_FUNC_END__;
        return ret;
        // LCOV_EXCL_STOP
@@ -2385,18 +2215,11 @@ int asp_session_connect(asp_session_h session)
 int asp_session_confirm(asp_session_h session, bool confirmed, char *pin)
 {
        __ASP_LOG_FUNC_START__;
-       GVariantBuilder *builder = NULL;
-       GVariant *params = NULL;
-       GError *error = NULL;
-       GVariant *reply = NULL;
-       asp_client_session_s *service = NULL;
-       int ret = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
@@ -2404,14 +2227,18 @@ int asp_session_confirm(asp_session_h session, bool confirmed, char *pin)
        }
 
        // LCOV_EXCL_START
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
-       g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", service->session_mac));
-       g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", service->session_id));
+       GVariantBuilder *builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+       g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", service->sessionMac));
+       g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", service->sessionId));
        g_variant_builder_add(builder, "{sv}", "confirmed", g_variant_new("i", confirmed));
        if (pin)
                g_variant_builder_add(builder, "{sv}", "pin", g_variant_new("s", pin));
-       params = g_variant_new("(a{sv})", builder);
-       reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
+
+       GVariant *params = g_variant_new("(a{sv})", builder);
+
+       int ret = ASP_ERROR_NONE;
+       GError *error = NULL;
+       GVariant *reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
                                                  "ConfirmSession", params, &error);
        if (error != NULL) {
                ASP_LOGE("asp_dbus_method_call_sync() failed."
@@ -2426,7 +2253,6 @@ int asp_session_confirm(asp_session_h session, bool confirmed, char *pin)
        g_variant_unref(reply);
 
        ASP_LOGD("%s() return : [%d]", __func__, ret);
-
        __ASP_LOG_FUNC_END__;
        return ret;
        // LCOV_EXCL_STOP
@@ -2463,16 +2289,6 @@ int asp_session_get_handle(char *session_mac, unsigned int session_id,
                return ASP_ERROR_OPERATION_FAILED;
        }
 
-       asp_client_session_s *service = (asp_client_session_s *)g_try_malloc0(sizeof(asp_client_session_s));
-       if (!service) {
-               ASP_LOGE("malloc() failed!!!.");
-               g_variant_unref(reply);
-               return ASP_ERROR_OUT_OF_MEMORY;
-       }
-       ASP_LOGD("service [%p]", service);
-       g_strlcpy(service->session_mac, session_mac, MACSTR_LEN);
-       service->session_id = session_id;
-
        GVariantIter *iter = NULL;
        g_variant_get(reply, "(ia{sv})", &ret, &iter);
        asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
@@ -2482,11 +2298,19 @@ int asp_session_get_handle(char *session_mac, unsigned int session_id,
                return ASP_ERROR_OUT_OF_MEMORY;
        }
 
-       service->advertisement_id = variant->adv_id;
+       int adv_id = variant->adv_id;
        __clear_asp_variant(variant);
 
+       AspSession *service = new AspSession(session_mac, session_id, adv_id);
+       if (!service) {
+               ASP_LOGE("malloc() failed!!!.");
+               g_variant_unref(reply);
+               return ASP_ERROR_OUT_OF_MEMORY;
+       }
+       ASP_LOGD("service [%p]", service);
+
        *session = service;
-       asp_sessions = g_list_prepend(asp_sessions, service);
+       addSessionToServiceList(service);
 
        ASP_LOGD("%s() return : [%d]", __func__, ret);
        __ASP_LOG_FUNC_END__;
@@ -2498,24 +2322,20 @@ int asp_session_set_state_ready(asp_session_h session)
 
 {
        __ASP_LOG_FUNC_START__;
-       GVariant *params = NULL;
-       GError *error = NULL;
-       GVariant *reply = NULL;
-       asp_client_session_s *service = NULL;
-       int ret = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                return ASP_ERROR_SESSION_NOT_FOUND;
        }
 
-       params = g_variant_new("(su)", service->session_mac, service->session_id);
-       reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
+       int ret = ASP_ERROR_NONE;
+       GError *error = NULL;
+       GVariant *params = g_variant_new("(su)", service->sessionMac, service->sessionId);
+       GVariant *reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
                                                  "SetSessionReady", params, &error);
        if (error != NULL) {
                ASP_LOGE("asp_dbus_method_call_sync() failed."
@@ -2530,33 +2350,27 @@ int asp_session_set_state_ready(asp_session_h session)
        g_variant_unref(reply);
 
        ASP_LOGD("%s() return : [%d]", __func__, ret);
-
        __ASP_LOG_FUNC_END__;
        return ret;
 }
 
 int asp_session_close(asp_session_h session)
-
 {
        __ASP_LOG_FUNC_START__;
-       GVariant *params = NULL;
-       GError *error = NULL;
-       GVariant *reply = NULL;
-       asp_client_session_s *service = NULL;
-       int ret = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                return ASP_ERROR_SESSION_NOT_FOUND;
        }
 
-       params = g_variant_new("(su)", service->session_mac, service->session_id);
-       reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
+       int ret = ASP_ERROR_NONE;
+       GError *error = NULL;
+       GVariant *params = g_variant_new("(su)", service->sessionMac, service->sessionId);
+       GVariant *reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
                                                  "CloseSession", params, &error);
        if (error != NULL) {
                ASP_LOGE("asp_dbus_method_call_sync() failed."
@@ -2580,19 +2394,12 @@ int asp_session_bind_port(asp_session_h session, char *ip_address,
                int port, int proto)
 {
        __ASP_LOG_FUNC_START__;
-       GVariantBuilder *builder = NULL;
-       GVariant *params = NULL;
-       GError *error = NULL;
-       GVariant *reply = NULL;
-       asp_client_session_s *service = NULL;
-       int ret = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(ip_address, __ASP_LOG_FUNC_END__);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
@@ -2600,14 +2407,17 @@ int asp_session_bind_port(asp_session_h session, char *ip_address,
        }
 
        // LCOV_EXCL_START
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
-       g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", service->session_mac));
-       g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", service->session_id));
+       GVariantBuilder *builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+       g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", service->sessionMac));
+       g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", service->sessionId));
        g_variant_builder_add(builder, "{sv}", "ip_address", g_variant_new("s", ip_address));
        g_variant_builder_add(builder, "{sv}", "port", g_variant_new("i", port));
        g_variant_builder_add(builder, "{sv}", "proto", g_variant_new("i", proto));
-       params = g_variant_new("(a{sv})", builder);
-       reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
+
+       int ret = ASP_ERROR_NONE;
+       GError *error = NULL;
+       GVariant *params = g_variant_new("(a{sv})", builder);
+       GVariant *reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
                                                  "BoundPort", params, &error);
        if (error != NULL) {
                ASP_LOGE("asp_dbus_method_call_sync() failed."
@@ -2632,19 +2442,12 @@ int asp_session_release_port(asp_session_h session, char *ip_address,
                int port, int proto)
 {
        __ASP_LOG_FUNC_START__;
-       GVariantBuilder *builder = NULL;
-       GVariant *params = NULL;
-       GError *error = NULL;
-       GVariant *reply = NULL;
-       asp_client_session_s *service = NULL;
-       int ret = ASP_ERROR_NONE;
-
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
        RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(session, __ASP_LOG_FUNC_END__);
        RET_ERR_IF_PARAMETER_IS_NOT_VALID(ip_address, __ASP_LOG_FUNC_END__);
 
-       service = __get_session((void *)session);
+       AspSession *service = getSession((void *)session);
        if (service == NULL) {
                ASP_LOGE("Session NOT registered");
                __ASP_LOG_FUNC_END__;
@@ -2652,14 +2455,17 @@ int asp_session_release_port(asp_session_h session, char *ip_address,
        }
 
        // LCOV_EXCL_START
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
-       g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", service->session_mac));
-       g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", service->session_id));
+       GVariantBuilder *builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+       g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", service->sessionMac));
+       g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", service->sessionId));
        g_variant_builder_add(builder, "{sv}", "ip_address", g_variant_new("s", ip_address));
        g_variant_builder_add(builder, "{sv}", "port", g_variant_new("i", port));
        g_variant_builder_add(builder, "{sv}", "proto", g_variant_new("i", proto));
-       params = g_variant_new("(a{sv})", builder);
-       reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
+
+       int ret = ASP_ERROR_NONE;
+       GError *error = NULL;
+       GVariant *params = g_variant_new("(a{sv})", builder);
+       GVariant *reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
                                                  "ReleasePort", params, &error);
        if (error != NULL) {
                ASP_LOGE("asp_dbus_method_call_sync() failed."
@@ -2674,7 +2480,6 @@ int asp_session_release_port(asp_session_h session, char *ip_address,
        g_variant_unref(reply);
 
        ASP_LOGD("%s() return : [%d]", __func__, ret);
-
        __ASP_LOG_FUNC_END__;
        return ret;
        // LCOV_EXCL_STOP
diff --git a/src/asp-session.cpp b/src/asp-session.cpp
new file mode 100644 (file)
index 0000000..eed2cea
--- /dev/null
@@ -0,0 +1,119 @@
+#include "asp.h"
+#include "asp-conts.h"
+#include "asp-session.h"
+#include "asp-log.h"
+
+static __thread GList *asp_sessions = NULL;
+
+AspSession::AspSession()
+ : sessionMac(""), sessionId(0), sessionInformation(""),
+ serviceMac(""), advertisementId(0), networkConfig(0), networkRole(0),
+ port(0), state(0), persist(0), serviceRole(0), isIncomming(0),
+ dereferredSessionResponse("")
+{
+}
+
+AspSession::AspSession(const std::string &_serviceMac, unsigned int _advertisementId)
+ : sessionMac(""), sessionId(0), sessionInformation(""),
+ serviceMac(_serviceMac), advertisementId(_advertisementId), networkConfig(0), networkRole(0),
+ port(0), state(0), persist(0), serviceRole(0), isIncomming(0),
+ dereferredSessionResponse("")
+{
+}
+
+AspSession::AspSession(const std::string &_sessionMac, unsigned int _sessionId, unsigned int _advertisementId)
+ : sessionMac(_sessionMac), sessionId(_sessionId), sessionInformation(""),
+ serviceMac(""), advertisementId(_advertisementId), networkConfig(0), networkRole(0),
+ port(0), state(0), persist(0), serviceRole(0), isIncomming(0),
+ dereferredSessionResponse("")
+{
+}
+
+AspSession::~AspSession()
+{
+}
+
+bool AspSession::setSessionInfo(const std::string &sessionInfo)
+{
+       if (sessionInfo.empty() || sessionInfo.length() > SESSION_INFO_LEN)
+               return false;
+
+       sessionInformation = sessionInfo;
+       return true;
+}
+
+bool AspSession::setNetworkConfig(int configMethod)
+{
+       if (configMethod < ASP_WPS_TYPE_DEFAULT ||
+                       configMethod > ASP_WPS_TYPE_PIN_KEYPAD) {
+               ASP_LOGE("network_config is invalid");
+               return false;
+       }
+
+       networkConfig = configMethod;
+       return true;
+}
+
+AspSession *getSession(void *session)
+{
+       __ASP_LOG_FUNC_START__;
+       AspSession *service = NULL;
+
+       if (asp_sessions == NULL) {
+               __ASP_LOG_FUNC_END__;
+               return NULL;
+       }
+
+       ASP_LOGD("service [%p]", session);
+
+       for (GList *temp = g_list_first(asp_sessions); temp != NULL; temp = g_list_next(temp)) {
+               service = (AspSession *)temp->data;
+
+               ASP_LOGD("temp [%p]", service);
+               if (service != NULL && service == session)
+                       break;
+               service = NULL;
+       }
+       __ASP_LOG_FUNC_END__;
+       return service;
+}
+
+AspSession *getSession(const std::string &sessionMac, unsigned int sessionId)
+{
+       AspSession *session = NULL;
+       for (GList *temp = g_list_first(asp_sessions);
+                       temp != NULL; temp = g_list_next(temp)) {
+               session = (AspSession *)temp->data;
+               if (session != NULL && session->sessionId == sessionId
+                       && session->sessionMac == sessionMac)
+                       break;
+               session = NULL;
+       }
+       return session;
+}
+
+bool removeSession(void *session)
+{
+       __ASP_LOG_FUNC_START__;
+       auto service = getSession(session);
+       if (service == NULL) {
+               __ASP_LOG_FUNC_END__;
+               return false;
+       } 
+
+       removeSessionFromServiceList(service);
+       delete service;
+
+       __ASP_LOG_FUNC_END__;
+       return true;
+}
+
+void addSessionToServiceList(AspSession *session)
+{
+       asp_sessions = g_list_prepend(asp_sessions, session);
+}
+
+void removeSessionFromServiceList(AspSession *session)
+{
+       asp_sessions = g_list_remove(asp_sessions, session);
+}
index 7e398a4ec37036d3543d20b048a07732ae14f650..d1f5134f9a3dbc7c005719e02c542fd41e02d725 100755 (executable)
 #define MACSTR_LEN 18
 #define ASP_SERVICE_INFO_MAX_LEN 200
 
-/**
- * Application Service Platform(ASP) session data structure
- */
-typedef struct {
-       char session_mac[MACSTR_LEN]; /* the MAC address of the P2P device that generated the session ID */
-       unsigned int session_id;
-       char service_mac[MACSTR_LEN];
-       unsigned int advertisement_id;
-       int network_config;
-       int network_role;
-       int port;
-       int state;
-       int persist;
-       char *session_information;
-
-       /* session information for each local setting */
-       int service_role;
-       int is_incomming;
-       unsigned char local_ip[4];
-       char *deferred_session_response;
-} asp_client_session_s;
-
 typedef struct {
        bool is_registered;
 
diff --git a/src/include/asp-session.h b/src/include/asp-session.h
new file mode 100644 (file)
index 0000000..aa4c2fe
--- /dev/null
@@ -0,0 +1,40 @@
+#pragma once
+
+#include <glib.h>
+#include <string>
+#include <vector>
+
+class AspSession {
+public:
+       AspSession();
+       AspSession(const std::string &_serviceMac, unsigned int _advertisementId);
+       AspSession(const std::string &_sessionMac, unsigned int _sessionId, unsigned int _advertisementId);
+       ~AspSession();
+
+       bool setSessionInfo(const std::string &sessionInfo);
+       bool setNetworkConfig(int configMethod);
+
+       std::string sessionMac;
+       unsigned int sessionId;
+       std::string sessionInformation;
+
+       std::string serviceMac;
+       unsigned int advertisementId;
+       int networkConfig;
+       int networkRole;
+       int port;
+       int state;
+       int persist;
+
+       /* session information for each local setting */
+       int serviceRole;
+       int isIncomming;
+       std::vector<unsigned char> localIp;
+       std::string dereferredSessionResponse;
+};
+
+AspSession *getSession(void *session);
+AspSession *getSession(const std::string &sessionMac, unsigned int sessionId);
+bool removeSession(void *session);
+void addSessionToServiceList(AspSession *session);
+void removeSessionFromServiceList(AspSession *session);
\ No newline at end of file
diff --git a/unittest/asp-gtest-session-api.cpp b/unittest/asp-gtest-session-api.cpp
new file mode 100755 (executable)
index 0000000..4aea446
--- /dev/null
@@ -0,0 +1,275 @@
+/*
+* Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include <gtest/gtest.h>
+
+#include "asp.h"
+
+extern "C" {
+}
+
+class AspSessionApiTest: public ::testing::Test {
+       protected:
+               void SetUp() override
+               {
+                       asp_initialize();
+                       asp_session_create(macAddress, advId, &session);
+               }
+
+               void TearDown() override
+               {
+                       asp_session_destroy(session);
+                       asp_deinitialize();
+               }
+
+               asp_session_h session;
+               char *macAddress = "00:11:22:33:44:55";
+               char *info = "HDCP Enable";
+               int advId = 0x01;
+};
+
+TEST_F(AspSessionApiTest, GetMac)
+{
+       char *mac = NULL;
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_get_mac(session, &mac));
+}
+
+TEST_F(AspSessionApiTest, GetMacWithInvalidParam)
+{
+       char *mac = nullptr;
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_mac(session, NULL));
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_mac(NULL, &mac));
+}
+
+TEST_F(AspSessionApiTest, GetMacWithInvalidHandle)
+{
+       char *mac = nullptr;
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_get_mac(session + 1, &mac));
+}
+
+TEST_F(AspSessionApiTest, GetId)
+{
+       unsigned int id;
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_get_id(session, &id));
+}
+
+TEST_F(AspSessionApiTest, GetIdWithInvalidParam)
+{
+       unsigned int id;
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_id(session, NULL));
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_id(NULL, &id));
+}
+
+TEST_F(AspSessionApiTest, GetIdWithInvalidHandle)
+{
+       unsigned int id;
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_get_id(session + 1, &id));
+}
+
+TEST_F(AspSessionApiTest, SetInfo)
+{
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_info(session, info));
+}
+
+TEST_F(AspSessionApiTest, SetInfoWithInvalidParam)
+{
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_set_info(session, NULL));
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_set_info(NULL, info));
+}
+
+TEST_F(AspSessionApiTest, SetInfoWithInvalidHandle)
+{
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_set_info(session + 1, info));
+}
+
+TEST_F(AspSessionApiTest, GetInfo)
+{
+       char *serviceInfo = NULL;
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_get_info(session, &serviceInfo));
+}
+
+TEST_F(AspSessionApiTest, GetInfoWithInvalidParam)
+{
+       char *serviceInfo = NULL;
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_info(NULL, &serviceInfo));
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_info(session, NULL));
+}
+
+TEST_F(AspSessionApiTest, GetInfoWithInvalidHandle)
+{
+       char *serviceInfo = NULL;
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_get_info(session + 1, &serviceInfo));
+}
+
+TEST_F(AspSessionApiTest, SetP2pRoleScheme)
+{
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_p2p_role_scheme(session, ASP_ADVERT_P2P_ROLE_SCHEME_GC));
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_p2p_role_scheme(session, ASP_ADVERT_P2P_ROLE_SCHEME_GO));
+}
+
+TEST_F(AspSessionApiTest, SetP2pRoleSchemeWithInvalidParam)
+{
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_set_p2p_role_scheme(NULL, ASP_ADVERT_P2P_ROLE_SCHEME_GC));
+}
+
+TEST_F(AspSessionApiTest, SetP2pRoleSchemeWithInvalidHandle)
+{
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_set_p2p_role_scheme(session + 1,
+               ASP_ADVERT_P2P_ROLE_SCHEME_GC));
+}
+
+TEST_F(AspSessionApiTest, GetP2pRoleScheme)
+{
+       asp_advert_p2p_role_scheme_e role;
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_get_p2p_role_scheme(session, &role));
+}
+
+TEST_F(AspSessionApiTest, GetP2pRoleSchemeWithInvalidParam)
+{
+       asp_advert_p2p_role_scheme_e role;
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_p2p_role_scheme(session, NULL));
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_p2p_role_scheme(NULL, &role));
+}
+
+TEST_F(AspSessionApiTest, GetP2pRoleSchemeWithInvalidHandle)
+{
+       asp_advert_p2p_role_scheme_e role;
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_get_p2p_role_scheme(session + 1, &role));
+}
+
+TEST_F(AspSessionApiTest, SetP2pConfigMethod)
+{
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_p2p_config_method(session, ASP_WPS_TYPE_DEFAULT));
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_p2p_config_method(session, ASP_WPS_TYPE_PIN_BOTH));
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_p2p_config_method(session, ASP_WPS_TYPE_PIN_DISPLAY));
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_p2p_config_method(session, ASP_WPS_TYPE_PIN_KEYPAD));
+}
+
+TEST_F(AspSessionApiTest, SetP2pConfigMethodWithInvalidParam)
+{
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_set_p2p_config_method(NULL, ASP_WPS_TYPE_DEFAULT));
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_set_p2p_config_method(session, ASP_WPS_TYPE_NONE));
+}
+
+TEST_F(AspSessionApiTest, SetP2pConfigMethodWithInvalidHandle)
+{
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_set_p2p_config_method(session + 1, ASP_WPS_TYPE_DEFAULT));
+}
+
+TEST_F(AspSessionApiTest, GetP2pConfigMethod)
+{
+       asp_wps_type_e config;
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_get_p2p_config_method(session, &config));
+}
+
+TEST_F(AspSessionApiTest, GetP2pConfigMethodWithIvalidParam)
+{
+       asp_wps_type_e config;
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_p2p_config_method(NULL, &config));
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_p2p_config_method(session, NULL));
+}
+
+TEST_F(AspSessionApiTest, GetP2pConfigMethodWithIvalidHandle)
+{
+       asp_wps_type_e config;
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_get_p2p_config_method(session + 1, &config));
+}
+
+TEST_F(AspSessionApiTest, GetCloseStatus)
+{
+       int status;
+       EXPECT_EQ(ASP_ERROR_NONE, asp_session_get_close_status(session, &status));
+}
+
+TEST_F(AspSessionApiTest, GetCloseStatusWithInvalidParam)
+{
+       int status;
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_close_status(NULL, &status));
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_close_status(session, NULL));
+}
+
+TEST_F(AspSessionApiTest, GetCloseStatusWithInvalidHandle)
+{
+       int status;
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_get_close_status(session + 1, &status));
+}
+
+TEST_F(AspSessionApiTest, ConnectWithInvalidParam)
+{
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_connect(NULL));
+}
+
+TEST_F(AspSessionApiTest, ConnectWithInvalidHandle)
+{
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_connect(session + 1));
+}
+
+TEST_F(AspSessionApiTest, ConfirmWithInvalidParam)
+{
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_confirm(NULL, 1, "12345678"));
+}
+
+TEST_F(AspSessionApiTest, ConfirmWithInvalidHandle)
+{
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_confirm(session + 1, 1, "12345678"));
+}
+
+TEST_F(AspSessionApiTest, GetHandleWithInvalidParam)
+{
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_handle(macAddress, advId, NULL));
+}
+
+TEST_F(AspSessionApiTest, SetStateReadyWithInvalidParam)
+{
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_set_state_ready(NULL));
+}
+
+TEST_F(AspSessionApiTest, SetStateReadyWithInvalidHandle)
+{
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_set_state_ready(session + 1));
+}
+
+TEST_F(AspSessionApiTest, CloseWithInvalidParam)
+{
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_close(NULL));
+}
+
+TEST_F(AspSessionApiTest, CloseWithInvalidHandle)
+{
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_close(session + 1));
+}
+
+TEST_F(AspSessionApiTest, BindPortWithInvalidParam)
+{
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_bind_port(NULL, "192.168.0.1", 12345, 80));
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_bind_port(session, NULL, 12345, 80));
+}
+
+TEST_F(AspSessionApiTest, BindPortWithInvalidHandle)
+{
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_bind_port(session + 1, "192.168.0.1", 12345, 80));
+}
+
+TEST_F(AspSessionApiTest, ReleasePortWithInvalidParam)
+{
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_release_port(NULL, "192.168.0.1", 12345, 80));
+       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_release_port(session, NULL, 12345, 80));
+}
+
+TEST_F(AspSessionApiTest, ReleasePortWithInvalidHandle)
+{
+       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_release_port(session + 1, "192.168.0.1", 12345, 80));
+}
\ No newline at end of file
old mode 100755 (executable)
new mode 100644 (file)
index d19b7c3..fdd2271
-/*
-* Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
 #include <gtest/gtest.h>
+#include <stdlib.h>
 
 #include "asp.h"
-
-extern "C" {
-}
+#include "asp-conts.h"
+#include "asp-session.h"
 
 class AspSessionTest: public ::testing::Test {
-       protected:
-               void SetUp() override
-               {
-                       asp_initialize();
-                       asp_session_create(macAddress, advId, &session);
-               }
-
-               void TearDown() override
-               {
-                       asp_session_destroy(session);
-                       asp_deinitialize();
-               }
-
-               asp_session_h session;
-               char *macAddress = "00:11:22:33:44:55";
-               char *info = "HDCP Enable";
-               int advId = 0x01;
+protected:
+    void SetUp() override
+    {
+        mSession = new AspSession(mSessionMac, mSessionId, mAdvId);
+    }
+
+    void TearDown() override
+    {
+        if (mSession)
+            delete mSession;
+    }
+
+    AspSession *mSession;
+    std::string mSessionInfo = "HDCP Enable";
+    std::string mSessionMac = "11:22:33:44:55:66";
+    unsigned int mSessionId = 3;
+    unsigned int mAdvId = 4;
 };
 
-TEST_F(AspSessionTest, GetMac)
-{
-       char *mac = NULL;
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_get_mac(session, &mac));
-}
-
-TEST_F(AspSessionTest, GetMacWithInvalidParam)
-{
-       char *mac = nullptr;
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_mac(session, NULL));
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_mac(NULL, &mac));
-}
-
-TEST_F(AspSessionTest, GetMacWithInvalidHandle)
-{
-       char *mac = nullptr;
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_get_mac(session + 1, &mac));
-}
-
-TEST_F(AspSessionTest, GetId)
-{
-       unsigned int id;
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_get_id(session, &id));
-}
-
-TEST_F(AspSessionTest, GetIdWithInvalidParam)
-{
-       unsigned int id;
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_id(session, NULL));
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_id(NULL, &id));
-}
-
-TEST_F(AspSessionTest, GetIdWithInvalidHandle)
-{
-       unsigned int id;
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_get_id(session + 1, &id));
-}
-
-TEST_F(AspSessionTest, SetInfo)
-{
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_info(session, info));
-}
-
-TEST_F(AspSessionTest, SetInfoWithInvalidParam)
-{
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_set_info(session, NULL));
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_set_info(NULL, info));
-}
-
-TEST_F(AspSessionTest, SetInfoWithInvalidHandle)
-{
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_set_info(session + 1, info));
-}
-
-TEST_F(AspSessionTest, GetInfo)
-{
-       char *serviceInfo = NULL;
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_get_info(session, &serviceInfo));
-}
-
-TEST_F(AspSessionTest, GetInfoWithInvalidParam)
-{
-       char *serviceInfo = NULL;
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_info(NULL, &serviceInfo));
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_info(session, NULL));
-}
-
-TEST_F(AspSessionTest, GetInfoWithInvalidHandle)
-{
-       char *serviceInfo = NULL;
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_get_info(session + 1, &serviceInfo));
-}
-
-TEST_F(AspSessionTest, SetP2pRoleScheme)
-{
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_p2p_role_scheme(session, ASP_ADVERT_P2P_ROLE_SCHEME_GC));
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_p2p_role_scheme(session, ASP_ADVERT_P2P_ROLE_SCHEME_GO));
-}
-
-TEST_F(AspSessionTest, SetP2pRoleSchemeWithInvalidParam)
-{
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_set_p2p_role_scheme(NULL, ASP_ADVERT_P2P_ROLE_SCHEME_GC));
-}
-
-TEST_F(AspSessionTest, SetP2pRoleSchemeWithInvalidHandle)
-{
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_set_p2p_role_scheme(session + 1,
-               ASP_ADVERT_P2P_ROLE_SCHEME_GC));
-}
-
-TEST_F(AspSessionTest, GetP2pRoleScheme)
-{
-       asp_advert_p2p_role_scheme_e role;
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_get_p2p_role_scheme(session, &role));
-}
-
-TEST_F(AspSessionTest, GetP2pRoleSchemeWithInvalidParam)
-{
-       asp_advert_p2p_role_scheme_e role;
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_p2p_role_scheme(session, NULL));
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_p2p_role_scheme(NULL, &role));
-}
-
-TEST_F(AspSessionTest, GetP2pRoleSchemeWithInvalidHandle)
-{
-       asp_advert_p2p_role_scheme_e role;
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_get_p2p_role_scheme(session + 1, &role));
-}
-
-TEST_F(AspSessionTest, SetP2pConfigMethod)
-{
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_p2p_config_method(session, ASP_WPS_TYPE_DEFAULT));
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_p2p_config_method(session, ASP_WPS_TYPE_PIN_BOTH));
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_p2p_config_method(session, ASP_WPS_TYPE_PIN_DISPLAY));
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_set_p2p_config_method(session, ASP_WPS_TYPE_PIN_KEYPAD));
-}
-
-TEST_F(AspSessionTest, SetP2pConfigMethodWithInvalidParam)
-{
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_set_p2p_config_method(NULL, ASP_WPS_TYPE_DEFAULT));
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_set_p2p_config_method(session, ASP_WPS_TYPE_NONE));
-}
-
-TEST_F(AspSessionTest, SetP2pConfigMethodWithInvalidHandle)
-{
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_set_p2p_config_method(session + 1, ASP_WPS_TYPE_DEFAULT));
-}
-
-TEST_F(AspSessionTest, GetP2pConfigMethod)
-{
-       asp_wps_type_e config;
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_get_p2p_config_method(session, &config));
-}
-
-TEST_F(AspSessionTest, GetP2pConfigMethodWithIvalidParam)
-{
-       asp_wps_type_e config;
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_p2p_config_method(NULL, &config));
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_p2p_config_method(session, NULL));
-}
-
-TEST_F(AspSessionTest, GetP2pConfigMethodWithIvalidHandle)
-{
-       asp_wps_type_e config;
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_get_p2p_config_method(session + 1, &config));
-}
-
-TEST_F(AspSessionTest, GetCloseStatus)
-{
-       int status;
-       EXPECT_EQ(ASP_ERROR_NONE, asp_session_get_close_status(session, &status));
-}
-
-TEST_F(AspSessionTest, GetCloseStatusWithInvalidParam)
-{
-       int status;
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_close_status(NULL, &status));
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_close_status(session, NULL));
-}
-
-TEST_F(AspSessionTest, GetCloseStatusWithInvalidHandle)
-{
-       int status;
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_get_close_status(session + 1, &status));
-}
-
-TEST_F(AspSessionTest, ConnectWithInvalidParam)
+std::string makeInvalidServiceInfo()
 {
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_connect(NULL));
+    int length = SESSION_INFO_LEN + 5;
+    std::string str(length, '\0');
+    for (int i = 0; i < length; ++i)
+        str[i] = rand() % 95 + 32;
+    return str;
 }
 
-TEST_F(AspSessionTest, ConnectWithInvalidHandle)
+TEST_F(AspSessionTest, setSessionInfoN)
 {
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_connect(session + 1));
+    EXPECT_EQ(false, mSession->setSessionInfo(""));
+    EXPECT_EQ(false, mSession->setSessionInfo(makeInvalidServiceInfo()));
 }
 
-TEST_F(AspSessionTest, ConfirmWithInvalidParam)
+TEST_F(AspSessionTest, setSessionInfoP)
 {
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_confirm(NULL, 1, "12345678"));
+    EXPECT_EQ(true, mSession->setSessionInfo(mSessionInfo));
+    EXPECT_EQ(true, mSession->sessionInformation == mSessionInfo);
 }
 
-TEST_F(AspSessionTest, ConfirmWithInvalidHandle)
+TEST_F(AspSessionTest, setNetworkConfigN)
 {
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_confirm(session + 1, 1, "12345678"));
+    EXPECT_EQ(false, mSession->setNetworkConfig(-1));
+    EXPECT_EQ(false, mSession->setNetworkConfig(ASP_WPS_TYPE_NONE));
+    EXPECT_EQ(false, mSession->setNetworkConfig(ASP_WPS_TYPE_PIN_KEYPAD + 1));
 }
 
-TEST_F(AspSessionTest, GetHandleWithInvalidParam)
+TEST_F(AspSessionTest, setNetworkConfigP)
 {
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_get_handle(macAddress, advId, NULL));
+    EXPECT_EQ(true, mSession->setNetworkConfig(ASP_WPS_TYPE_DEFAULT));
+    EXPECT_EQ(true, mSession->setNetworkConfig(ASP_WPS_TYPE_PIN_BOTH));
+    EXPECT_EQ(true, mSession->setNetworkConfig(ASP_WPS_TYPE_PIN_DISPLAY));
+    EXPECT_EQ(true, mSession->setNetworkConfig(ASP_WPS_TYPE_PIN_KEYPAD));
 }
 
-TEST_F(AspSessionTest, SetStateReadyWithInvalidParam)
+TEST_F(AspSessionTest, getSessionN)
 {
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_set_state_ready(NULL));
+    AspSession *session = new AspSession;
+    EXPECT_EQ(NULL, getSession(session));
+    EXPECT_EQ(NULL, getSession(NULL));
+    delete session;
 }
 
-TEST_F(AspSessionTest, SetStateReadyWithInvalidHandle)
+TEST_F(AspSessionTest, getSessionP)
 {
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_set_state_ready(session + 1));
+    AspSession *session = new AspSession;
+    addSessionToServiceList(session);
+    EXPECT_EQ(session, getSession(session));
+    removeSessionFromServiceList(session);
+    delete session;
 }
 
-TEST_F(AspSessionTest, CloseWithInvalidParam)
+TEST_F(AspSessionTest, getSessionWithMacandIdN1)
 {
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_close(NULL));
+    EXPECT_EQ(NULL, getSession(mSessionMac, mSessionId));
 }
 
-TEST_F(AspSessionTest, CloseWithInvalidHandle)
+TEST_F(AspSessionTest, getSessionWithMacandIdN2)
 {
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_close(session + 1));
+    addSessionToServiceList(mSession);
+    EXPECT_EQ(NULL, getSession(mSessionMac, 1));
+    EXPECT_EQ(NULL, getSession("", mSessionId));
+    removeSessionFromServiceList(mSession);
 }
 
-TEST_F(AspSessionTest, BindPortWithInvalidParam)
+TEST_F(AspSessionTest, getSessionWithMacandIdP)
 {
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_bind_port(NULL, "192.168.0.1", 12345, 80));
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_bind_port(session, NULL, 12345, 80));
+    addSessionToServiceList(mSession);
+    EXPECT_EQ(mSession, getSession(mSessionMac, mSessionId));
+    removeSessionFromServiceList(mSession);
 }
 
-TEST_F(AspSessionTest, BindPortWithInvalidHandle)
+TEST_F(AspSessionTest, removeN)
 {
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_bind_port(session + 1, "192.168.0.1", 12345, 80));
+    EXPECT_EQ(false, removeSession(mSession));
 }
 
-TEST_F(AspSessionTest, ReleasePortWithInvalidParam)
+TEST_F(AspSessionTest, addRemoveP1)
 {
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_release_port(NULL, "192.168.0.1", 12345, 80));
-       EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_session_release_port(session, NULL, 12345, 80));
+    addSessionToServiceList(mSession);
+    EXPECT_EQ(true, removeSession(mSession));
+    mSession = NULL;
 }
 
-TEST_F(AspSessionTest, ReleasePortWithInvalidHandle)
+TEST_F(AspSessionTest, addRemoveP2)
 {
-       EXPECT_EQ(ASP_ERROR_SESSION_NOT_FOUND, asp_session_release_port(session + 1, "192.168.0.1", 12345, 80));
+    addSessionToServiceList(mSession);
+    removeSessionFromServiceList(mSession);
+    EXPECT_EQ(NULL, removeSession(mSession));
+    mSession = NULL;
 }
\ No newline at end of file