From: Seonah Moon Date: Fri, 29 Dec 2023 07:28:02 +0000 (+0900) Subject: Refactoring session functions X-Git-Tag: accepted/tizen/unified/20240712.160131~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F16%2F303516%2F4;p=platform%2Fcore%2Fapi%2Fasp.git Refactoring session functions [----------] 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 --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 47562fd..32945f2 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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 ) diff --git a/src/asp-client.cpp b/src/asp-client.cpp index 11c53ef..5ac548c 100755 --- a/src/asp-client.cpp +++ b/src/asp-client.cpp @@ -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(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 index 0000000..eed2cea --- /dev/null +++ b/src/asp-session.cpp @@ -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); +} diff --git a/src/include/asp-client.h b/src/include/asp-client.h index 7e398a4..d1f5134 100755 --- a/src/include/asp-client.h +++ b/src/include/asp-client.h @@ -34,28 +34,6 @@ #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 index 0000000..aa4c2fe --- /dev/null +++ b/src/include/asp-session.h @@ -0,0 +1,40 @@ +#pragma once + +#include +#include +#include + +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 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 index 0000000..4aea446 --- /dev/null +++ b/unittest/asp-gtest-session-api.cpp @@ -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 + +#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 diff --git a/unittest/asp-gtest-session.cpp b/unittest/asp-gtest-session.cpp old mode 100755 new mode 100644 index d19b7c3..fdd2271 --- a/unittest/asp-gtest-session.cpp +++ b/unittest/asp-gtest-session.cpp @@ -1,275 +1,119 @@ -/* -* 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 +#include #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