Extract classes for Advert/Seek roles 88/302788/7
authorcheoleun moon <chleun.moon@samsung.com>
Wed, 13 Dec 2023 10:58:19 +0000 (19:58 +0900)
committercheoleun moon <chleun.moon@samsung.com>
Mon, 18 Dec 2023 10:30:34 +0000 (19:30 +0900)
Change-Id: Id254bda7cfdedc959a47738bd48ac7d469106cf7

23 files changed:
src/CMakeLists.txt
src/asp-advert.cpp [new file with mode: 0644]
src/asp-client.c [deleted file]
src/asp-client.cpp [new file with mode: 0755]
src/asp-dbus.c [deleted file]
src/asp-dbus.cpp [new file with mode: 0644]
src/asp-seek.cpp [new file with mode: 0644]
src/asp-utils.cpp [new file with mode: 0644]
src/include/asp-advert.h [new file with mode: 0644]
src/include/asp-client.h
src/include/asp-conts.h [new file with mode: 0644]
src/include/asp-dbus.h
src/include/asp-defs.h [new file with mode: 0755]
src/include/asp-seek.h [new file with mode: 0644]
src/include/asp-util.h [deleted file]
src/include/asp-utils.h [new file with mode: 0644]
unittest/CMakeLists.txt
unittest/asp-gtest-advert.cpp [new file with mode: 0644]
unittest/asp-gtest-client.cpp [new file with mode: 0644]
unittest/asp-gtest-seek.cpp [new file with mode: 0644]
unittest/asp-gtest-util.cpp [new file with mode: 0644]
unittest/mock/mock-asp-dbus.cpp [new file with mode: 0644]
unittest/mock/mock-system-info.cpp [new file with mode: 0644]

index 50b66b273ab6547f60e4e183c09ccf942ab41f0f..47562fdc8d44d72cdc15b84905a6d87bc200f75d 100755 (executable)
@@ -19,11 +19,15 @@ SET(ASP_PATH ${PROJECT_SOURCE_DIR}/src)
 INCLUDE_DIRECTORIES(
     ${CMAKE_SOURCE_DIR}/include
     ${ASP_PATH}/include
+    ${ASP_DEPS_INCLUDE_DIRS}
     )
 
 SET(ASP_SOURCES
-    ${ASP_PATH}/asp-client.c
-    ${ASP_PATH}/asp-dbus.c
+    ${ASP_PATH}/asp-client.cpp
+    ${ASP_PATH}/asp-dbus.cpp
+    ${ASP_PATH}/asp-advert.cpp
+    ${ASP_PATH}/asp-seek.cpp
+    ${ASP_PATH}/asp-utils.cpp
     )
 
 ADD_DEFINITIONS("-fvisibility=default")
diff --git a/src/asp-advert.cpp b/src/asp-advert.cpp
new file mode 100644 (file)
index 0000000..53ce92d
--- /dev/null
@@ -0,0 +1,141 @@
+#include "asp.h"
+#include "asp-advert.h"
+#include "asp-conts.h"
+#include "asp-log.h"
+#include "asp-utils.h"
+
+static __thread GList *asp_adverts = NULL;
+
+AspAdvert::AspAdvert()
+{
+       auto_accept = 0;
+       config_method = 1;
+       status = 0;
+       role = 1;
+       service_info_map = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
+       adv_id = (unsigned int)this & 0xffffffff;
+       instance_name = NULL;
+       serivce_name = NULL;
+       service_type = NULL;
+       rsp_info = NULL;
+}
+
+AspAdvert::~AspAdvert()
+{
+       g_free(instance_name);
+       g_free(serivce_name);
+       g_free(service_type);
+       g_free(rsp_info);
+       g_hash_table_remove_all(service_info_map);
+       g_hash_table_destroy(service_info_map);
+}
+
+int AspAdvert::setServiceType(const std::string &type)
+{
+       if (type.empty()) {
+               ASP_LOGE("Zero length value");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!AspUtil::isValidServiceType(type)) {
+               ASP_LOGE("invalid service_type");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+       return ASP_ERROR_NONE;
+}
+
+int AspAdvert::addInfo(const std::string &key, const std::string &value)
+{
+       if (!AspUtil::isValidKey(key)) {
+               ASP_LOGE("invalid key!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+
+       g_hash_table_replace(service_info_map, g_strdup(key.c_str()), g_strdup(value.c_str()));
+       return ASP_ERROR_NONE;
+}
+
+int AspAdvert::setDiscoveryTech(int tech)
+{
+       if (!((tech & ASP_DISCOVERY_TECH_P2P) |
+                       (tech & ASP_DISCOVERY_TECH_NFC) |
+                       (tech & ASP_DISCOVERY_TECH_BLE) |
+                       (tech & ASP_DISCOVERY_TECH_INFRA) |
+                       (tech & ASP_DISCOVERY_TECH_NAN))) {
+               ASP_LOGE("invalid parameter!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+
+       discovery_tech = tech;
+       return ASP_ERROR_NONE;
+}
+
+AspAdvert *getAdvert(void *handle)
+{
+       __ASP_LOG_FUNC_START__;
+       AspAdvert *service = NULL;
+
+       if (asp_adverts == NULL) {
+               __ASP_LOG_FUNC_END__;
+               return NULL;
+       }
+
+       ASP_LOGD("service [%p]", handle);
+
+       for (GList *temp = g_list_first(asp_adverts); temp != NULL; temp = g_list_next(temp)) {
+               service = (AspAdvert *)temp->data;
+
+               ASP_LOGD("temp [%p]", service);
+               if (service != NULL && service == handle)
+                       break;
+               service = NULL;
+       }
+       __ASP_LOG_FUNC_END__;
+       return service;
+}
+
+AspAdvert *getAdvertById(unsigned int id)
+{
+       AspAdvert *advert = NULL;
+       GList *temp = NULL;
+
+       for (temp = g_list_first(asp_adverts);
+                       temp != NULL; temp = g_list_next(temp)) {
+               advert = (AspAdvert *)temp->data;
+               if (advert != NULL && advert->adv_id == id)
+                       break;
+               advert = NULL;
+       }
+
+       return advert;
+
+}
+
+bool removeAdvert(void *handle)
+{
+       AspAdvert *service = getAdvert(handle);
+
+       if (service == NULL) {
+               __ASP_LOG_FUNC_END__;
+               return false;
+       }
+
+       removeAdvertFromServiceList(service);
+       delete service;
+
+       return true;
+}
+
+void addAdvertToServiceList(AspAdvert *service)
+{
+       asp_adverts = g_list_prepend(asp_adverts, service);
+}
+
+void removeAdvertFromServiceList(AspAdvert *service)
+{
+       asp_adverts = g_list_remove(asp_adverts, service);
+}
diff --git a/src/asp-client.c b/src/asp-client.c
deleted file mode 100755 (executable)
index a3d2c1c..0000000
+++ /dev/null
@@ -1,3028 +0,0 @@
-/*
- * Application Service Platform(ASP)
- *
- * Copyright (c) 2015 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.
- *
- */
-
-/**
- * This file implements Application Service Platform(ASP) user library.
- *
- * @file        asp-client.c
- * @author      Jiung Yu (jiung.yu@samsung.com)
- * @version     0.1
- */
-
-
-/*****************************************************************************
- *  Standard headers
- *****************************************************************************/
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <unistd.h>
-#include <netdb.h>
-#include <sys/socket.h>
-#include <string.h>
-#include <sys/un.h>
-#include <sys/wait.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <signal.h>
-#include <linux/unistd.h>
-#include <sys/poll.h>
-#include <pthread.h>
-#include <errno.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-
-/*****************************************************************************
- *  System headers
- *****************************************************************************/
-#include <system_info.h>
-
-/*****************************************************************************
- *  Application Service Platform(ASP) library headers
- *****************************************************************************/
-#include "asp.h"
-
-#include "asp-client.h"
-#include "asp-dbus.h"
-#include "asp-log.h"
-#include "asp-util.h"
-
-/*****************************************************************************
- *  Macros and Typedefs
- *****************************************************************************/
-
-#define INSTANCE_NAME_LEN 63
-#define MAX_SERVICE_NAME_LEN 15
-#define MAX_SERVICE_TYPE_LEN 255
-#define PROTO_LEN 4
-#define KEY_LEN 9 /* http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt */
-#define KEY_MIN 0x20 /* RFC 20 */
-#define KEY_MAX 0x7E
-
-#define SERVICE_INFO_LEN 65000
-#define DEFERRED_LEN 144
-#define SESSION_INFO_LEN 144
-
-/*****************************************************************************
- *  Global Variables
- *****************************************************************************/
-static __thread asp_client_info_s g_client_info = {
-       .is_registered = FALSE,
-
-       .seek_search_result_cb = NULL,
-       .advert_status_changed_cb = NULL,
-       .session_request_cb = NULL,
-       .session_config_request_cb = NULL,
-       .session_connect_status_cb = NULL,
-       .session_status_cb = NULL,
-       .session_port_status_cb = NULL,
-
-       .user_data_for_cb_seek_search_result = NULL,
-       .user_data_for_cb_advert_status_changed = NULL,
-       .user_data_for_cb_session_request = NULL,
-       .user_data_for_cb_session_config_request = NULL,
-       .user_data_for_cb_session_connect_status = NULL,
-       .user_data_for_cb_session_status = NULL,
-       .user_data_for_cb_session_port_status = NULL
-};
-
-static __thread GList *asp_adverts = NULL;
-static __thread GList *asp_seeks = NULL;
-static __thread GList *asp_sessions = NULL;
-
-/*****************************************************************************
- *  Local Structures Definition
- *****************************************************************************/
-typedef struct {
-       unsigned int search_id;
-       unsigned int adv_id;
-       unsigned int config_method;
-
-       const char *service_mac;
-       char *service_info;
-       int service_info_len;
-
-       unsigned int session_id;
-       const char *session_mac;
-       const char *session_info;
-       int session_info_len;
-
-       const char * device_name;
-       const char *instance_name;
-
-       gboolean get_pin;
-       const char *pin;
-
-       const char *ip_address;
-       int port;
-       int proto;
-       int service_status;
-       const char *deferred_resp;
-       int deferred_resp_len;
-
-       int state;
-       int status;
-       const char *requested_info;
-} asp_variant_s;
-
-/*****************************************************************************
- *  Local Functions Definition
- *****************************************************************************/
-
-//LCOV_EXCL_START
-static char* __asp_create_service_info_from_g_variant(GVariant *variant)
-{
-       gchar *info = (gchar*)g_try_malloc0(ASP_SERVICE_INFO_MAX_LEN + 1);
-       if (!info)
-               return NULL;
-
-       GVariantIter *iter = NULL;
-       g_variant_get(variant, "a{sv}", &iter);
-
-       GVariant* var = NULL;
-       gchar *key = NULL;
-       int offset = 0;
-       while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
-               gsize value_len = 0;
-               gchar *value = g_variant_dup_string(var, &value_len);
-               int len = strlen(key) + value_len + 2;
-               snprintf(info + offset, len + 1, "%s=%s,", key, value);
-               offset += len;
-               g_free(value);
-       }
-
-       return info;
-}
-
-static asp_variant_s *__get_asp_variant_from_iterator(GVariantIter *iter)
-{
-       asp_variant_s *variant = (asp_variant_s *)g_try_malloc0(sizeof(asp_variant_s));
-       if (variant == NULL)
-               return variant;
-
-       const char *key = NULL;
-       GVariant *value = NULL;
-
-       while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
-               if (!g_strcmp0(key, "search_id")) {
-                       g_variant_get(value, "u", &variant->search_id);
-               } else if (!g_strcmp0(key, "service_mac")) {
-                       g_variant_get(value, "&s", &variant->service_mac);
-               } else if (!g_strcmp0(key, "adv_id")) {
-                       g_variant_get(value, "u", &variant->adv_id);
-               } else if (!g_strcmp0(key, "config_method")) {
-                       g_variant_get(value, "u", &variant->config_method);
-               } else if (!g_strcmp0(key, "instance_name")) {
-                       g_variant_get(value, "&s", &variant->instance_name);
-               } else if (!g_strcmp0(key, "service_info")) {
-                       g_free(variant->service_info);
-                       variant->service_info = __asp_create_service_info_from_g_variant(value);
-                       if (variant->service_info) {
-                               ASP_LOGD("Service Info: %s", variant->service_info);
-                               variant->service_info_len = strlen(variant->service_info);
-                       }
-               } else if (!g_strcmp0(key, "service_status")) {
-                       g_variant_get(value, "y", &variant->service_status);
-               } else if (!g_strcmp0(key, "session_id")) {
-                       g_variant_get(value, "u", &variant->session_id);
-               } else if (!g_strcmp0(key, "session_mac")) {
-                       g_variant_get(value, "&s", &variant->session_mac);
-               } else if (!g_strcmp0(key, "session_info")) {
-            g_variant_get(value, "&s", &variant->session_info);
-            if (variant->session_info)
-                variant->session_info_len = strlen(variant->session_info);
-               } else if (!g_strcmp0(key, "device_name")) {
-                       g_variant_get(value, "&s", &variant->device_name);
-               } else if (!g_strcmp0(key, "get_pin")) {
-                       g_variant_get(value, "b", &variant->get_pin);
-               } else if (!g_strcmp0(key, "pin")) {
-                       g_variant_get(value, "&s", &variant->pin);
-               } else if (!g_strcmp0(key, "deferred_resp")) {
-                       g_variant_get(value, "&s", &variant->deferred_resp);
-                       if (variant->deferred_resp)
-                               variant->deferred_resp_len = strlen(variant->deferred_resp);
-               } else if (!g_strcmp0(key, "ip_address")) {
-                       g_variant_get(value, "&s", &variant->ip_address);
-               }  else if (!g_strcmp0(key, "port")) {
-                       g_variant_get(value, "i", &variant->port);
-               } else if (!g_strcmp0(key, "proto")) {
-                       g_variant_get(value, "i", &variant->proto);
-               } else if (!g_strcmp0(key, "state")) {
-                       g_variant_get(value, "i", &variant->state);
-               } else if (!g_strcmp0(key, "status")) {
-                       g_variant_get(value, "i", &variant->status);
-               }  else if (!g_strcmp0(key, "requested_info")) {
-                       g_variant_get(value, "&s", &variant->requested_info);
-               } else {
-                       /* Do Nothing */
-               }
-       }
-
-       return variant;
-}
-
-static void __clear_asp_variant(asp_variant_s *variant)
-{
-       if (variant && variant->service_info) {
-               g_free(variant->service_info);
-               variant->service_info = NULL;
-       }
-       g_free(variant);
-}
-
-static int __asp_err_string_to_enum(const char *error)
-{
-       if (NULL != strstr(error, "NoReply"))
-               return ASP_ERROR_COMMUNICATION_FAILED;
-       else if (NULL != strstr(error, "PermissionDenied"))
-               return ASP_ERROR_PERMISSION_DENIED;
-       else if (NULL != strstr(error, "MEM_ERR"))
-               return ASP_ERROR_OUT_OF_MEMORY;
-       else if (NULL != strstr(error, "INVALID_PARAM"))
-               return ASP_ERROR_INVALID_PARAMETER;
-       else if (NULL != strstr(error, "OPER_FAILED"))
-               return ASP_ERROR_OPERATION_FAILED;
-       else if (NULL != strstr(error, "NO_SERVICE"))
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       else if (NULL != strstr(error, "NO_SESSION"))
-               return ASP_ERROR_SESSION_NOT_FOUND;
-       else
-               return ASP_ERROR_OPERATION_FAILED;
-}
-
-static asp_client_advert_s *get_advert_by_id(unsigned int adv_id)
-{
-       asp_client_advert_s *advert = NULL;
-       GList *temp = NULL;
-
-       for (temp = g_list_first(asp_adverts);
-                       temp != NULL; temp = g_list_next(temp)) {
-               advert = temp->data;
-               if (advert != NULL && advert->adv_id == adv_id)
-                       break;
-               advert = NULL;
-       }
-
-       return advert;
-
-}
-
-static asp_client_seek_s *get_seek_by_id(long long unsigned search_id)
-{
-       asp_client_seek_s *seek = NULL;
-       GList *temp = NULL;
-
-       for (temp = g_list_first(asp_seeks);
-                       temp != NULL; temp = g_list_next(temp)) {
-               seek = temp->data;
-               if (seek != NULL && seek->search_id == search_id)
-                       break;
-               seek = NULL;
-       }
-
-       return seek;
-
-}
-
-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 = 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)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_info_s *client = &g_client_info;
-       if (!client->seek_search_result_cb) {
-               ASP_LOGD("search_result_cb is NULL!!");
-               return;
-       }
-
-       if (!parameters) {
-               __ASP_LOG_FUNC_END__;
-               return;
-       }
-
-       GVariantIter *iter = NULL;
-       g_variant_get(parameters, "(a{sv})", &iter);
-       asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
-       if (variant == NULL) {
-               ASP_LOGE("Out of memory");
-               return;
-       }
-
-       asp_client_seek_s *seek = get_seek_by_id(variant->search_id);
-       if (!seek) {
-               ASP_LOGD("There's no related seek");
-               goto ERROR;
-       }
-
-       client->seek_search_result_cb(ASP_ERROR_NONE, (asp_seek_service_h)seek,
-                       variant->service_mac, variant->adv_id,
-                       (asp_wps_type_e)variant->config_method, variant->instance_name,
-                       variant->service_info, variant->service_info_len,
-                       variant->service_status, client->user_data_for_cb_seek_search_result);
-
-ERROR:
-       g_variant_iter_free(iter);
-       __clear_asp_variant(variant);
-       __ASP_LOG_FUNC_END__;
-       return;
-}
-
-void asp_process_advert_status_changed(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
-{
-       __ASP_LOG_FUNC_START__;
-
-       asp_client_info_s *client = &g_client_info;
-       asp_client_advert_s *advert = NULL;
-       unsigned int advertisement_id = 0;
-       unsigned char status = 0;
-       int reason = 0;
-
-       if (!client->advert_status_changed_cb) {
-               ASP_LOGD("search_result_cb is NULL!!");
-               return;
-       }
-
-       if (!parameters) {
-               __ASP_LOG_FUNC_END__;
-               return;
-       }
-
-       g_variant_get(parameters, "(uyi)", &advertisement_id, &status, &reason);
-
-       advert = get_advert_by_id(advertisement_id);
-       if (!advert) {
-               ASP_LOGD("There's no related advert");
-               return;
-       }
-
-       client->advert_status_changed_cb(
-                       (asp_advert_service_h)advert, (asp_service_status_e)status,
-                       (asp_advert_status_reason_e)reason,
-                       client->user_data_for_cb_advert_status_changed);
-
-       __ASP_LOG_FUNC_END__;
-       return;
-}
-
-int __handle_session_request(unsigned int adv_id, const char *session_mac,
-               unsigned int session_id, const char *session_info)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-       asp_client_session_s *session = NULL;
-       GList *temp = NULL;
-       int res = 0;
-
-       for (temp = g_list_first(asp_adverts);
-                       temp != NULL; temp = g_list_next(temp)) {
-               service = temp->data;
-               if (service != NULL && service->adv_id == adv_id)
-                       break;
-               service = NULL;
-       }
-
-       if (service == NULL) {
-               ASP_LOGD("No matched local service");
-               __ASP_LOG_FUNC_END__;
-               return -1;
-       }
-
-       ASP_LOGD("Process auto accept service");
-
-       temp = NULL;
-       for (temp = g_list_first(asp_sessions);
-                       temp != NULL; temp = g_list_next(temp)) {
-               session = temp->data;
-               if (session != NULL && session->session_id == session_id &&
-                               memcmp(session->session_mac, session_mac, MACSTR_LEN) == 0)
-                       break;
-               session = NULL;
-       }
-
-       if (session == NULL) {
-               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__;
-                       return -1;
-               }
-
-               if (session_info)
-                       session->session_information = g_strdup(session_info);
-               asp_sessions = g_list_prepend(asp_sessions, session);
-       }
-
-       if (service->auto_accept == FALSE) {
-               ASP_LOGD("Don't accept request automatically");
-               __ASP_LOG_FUNC_END__;
-               return 0;
-       }
-
-       asp_session_confirm(session, TRUE, NULL);
-       ASP_LOGD("asp_confirm_session");
-       __ASP_LOG_FUNC_END__;
-               return -1;
-}
-
-static void __invoke_session_request_cb(asp_variant_s *variant)
-{
-       if (variant == NULL)
-               return;
-
-       asp_client_info_s *client = &g_client_info;
-       if (!client->session_request_cb) {
-               ASP_LOGE("session_request_cb is NULL!!");
-               return;
-       }
-
-       asp_client_advert_s *advert = get_advert_by_id(variant->adv_id);
-       if (!advert) {
-               ASP_LOGD("There's no related advert");
-               return;
-       }
-
-       asp_client_session_s *session = get_session_by_id_mac(variant->session_mac, variant->session_id);
-       if (!session) {
-               ASP_LOGD("There's no related session");
-               return;
-       }
-
-       client->session_request_cb(ASP_ERROR_NONE, advert, session,
-                       variant->device_name, variant->session_info, variant->session_info_len,
-                       (bool)variant->get_pin, variant->pin,
-                       client->user_data_for_cb_session_config_request);
-}
-
-void asp_process_session_request(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
-{
-       __ASP_LOG_FUNC_START__;
-       if (!parameters) {
-               ASP_LOGE("parameters is NULL!!");
-               __ASP_LOG_FUNC_END__;
-               return;
-       }
-
-       GVariantIter *iter = NULL;
-       g_variant_get(parameters, "(a{sv})", &iter);
-       asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
-       if (variant == NULL) {
-               ASP_LOGE("Out of memory");
-               goto ERROR;
-       }
-
-       if (variant->session_mac == NULL) {
-               ASP_LOGE("session_mac is NULL");
-               goto ERROR;
-       }
-
-       if (__handle_session_request(variant->adv_id, variant->session_mac,
-                       variant->session_id, variant->session_info) != 0)
-               goto ERROR;
-
-       __invoke_session_request_cb(variant);
-
-ERROR:
-       g_variant_iter_free(iter);
-       __clear_asp_variant(variant);
-       __ASP_LOG_FUNC_END__;
-       return;
-}
-
-void asp_process_session_config_request(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_info_s *client = &g_client_info;
-       if (!client->session_config_request_cb) {
-               ASP_LOGE("session_config_request_cb is NULL!!");
-               return;
-       }
-
-       if (!parameters) {
-               __ASP_LOG_FUNC_END__;
-               return;
-       }
-
-       GVariantIter *iter = NULL;
-       g_variant_get(parameters, "(a{sv})", &iter);
-       asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
-       if (variant == NULL) {
-               ASP_LOGE("Out of memory");
-               return;
-       }
-
-       if (variant->session_mac == NULL) {
-               ASP_LOGE("session_mac is NULL");
-               goto ERROR;
-       }
-
-       asp_client_session_s *session = get_session_by_id_mac(variant->session_mac, variant->session_id);
-       if (!session) {
-               ASP_LOGD("There's no related session");
-               goto ERROR;
-       }
-
-       client->session_config_request_cb(ASP_ERROR_NONE, (asp_session_h)session,
-                       (bool)variant->pin, variant->pin,
-                       client->user_data_for_cb_session_config_request);
-
-ERROR:
-       g_variant_iter_free(iter);
-       __clear_asp_variant(variant);
-       __ASP_LOG_FUNC_END__;
-       return;
-}
-
-void asp_process_session_connect_status(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_info_s *client = &g_client_info;
-       if (!client->session_connect_status_cb) {
-               ASP_LOGE("connect_status_cb is NULL!!");
-               return;
-       }
-
-       if (!parameters) {
-               __ASP_LOG_FUNC_END__;
-               return;
-       }
-
-       GVariantIter *iter = NULL;
-       g_variant_get(parameters, "(a{sv})", &iter);
-       asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
-       if (variant == NULL) {
-               ASP_LOGE("Out of memory");
-               return;
-       }
-
-       if (variant->session_mac == NULL) {
-               ASP_LOGE("session_mac is NULL");
-               goto ERROR;
-       }
-
-       asp_client_session_s *session = get_session_by_id_mac(variant->session_mac, variant->session_id);
-       if (!session) {
-               ASP_LOGD("There's no related session");
-               goto ERROR;
-       }
-
-       client->session_connect_status_cb(ASP_ERROR_NONE, (asp_session_h)session,
-                       (asp_connect_status_e)variant->status,
-                       variant->deferred_resp, variant->deferred_resp_len,
-                       client->user_data_for_cb_session_connect_status);
-
-ERROR:
-       g_variant_iter_free(iter);
-       __clear_asp_variant(variant);
-       __ASP_LOG_FUNC_END__;
-       return;
-}
-
-void asp_process_session_status(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_info_s *client = &g_client_info;
-       if (!client->session_status_cb) {
-               ASP_LOGE("session_status_cb is NULL!!");
-               return;
-       }
-
-       if (!parameters) {
-               __ASP_LOG_FUNC_END__;
-               return;
-       }
-
-       GVariantIter *iter = NULL;
-       g_variant_get(parameters, "(a{sv})", &iter);
-       asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
-       if (variant == NULL) {
-               ASP_LOGE("Out of memory");
-               return;
-       }
-
-       if (variant->session_mac == NULL) {
-               ASP_LOGE("session_mac is NULL");
-               goto ERROR;
-       }
-
-       asp_client_session_s *session = get_session_by_id_mac(variant->session_mac, variant->session_id);
-       if (!session) {
-               ASP_LOGD("There's no related session");
-               goto ERROR;
-       }
-
-       client->session_status_cb(ASP_ERROR_NONE, (asp_session_h)session,
-                       (asp_session_state_e)variant->state, variant->requested_info,
-                       client->user_data_for_cb_session_status);
-
-ERROR:
-       g_variant_iter_free(iter);
-       __clear_asp_variant(variant);
-       __ASP_LOG_FUNC_END__;
-       return;
-}
-
-void asp_process_session_port_status(GDBusConnection *connection,
-               const gchar *object_path, GVariant *parameters)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_info_s *client = &g_client_info;
-       if (!client->session_port_status_cb) {
-               ASP_LOGE("port_status_cb is NULL!!");
-               return;
-       }
-
-       if (!parameters) {
-               __ASP_LOG_FUNC_END__;
-               return;
-       }
-
-       GVariantIter *iter = NULL;
-       g_variant_get(parameters, "(a{sv})", &iter);
-       asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
-       if (variant == NULL) {
-               ASP_LOGE("Out of memory");
-               return;
-       }
-
-       if (variant->session_mac == NULL) {
-               ASP_LOGE("session_mac is NULL");
-               goto ERROR;
-       }
-
-       asp_client_session_s *session = get_session_by_id_mac(variant->session_mac, variant->session_id);
-       if (!session) {
-               ASP_LOGD("There's no related session");
-               goto ERROR;
-       }
-
-       client->session_port_status_cb(ASP_ERROR_NONE, (asp_session_h)session,
-                       variant->ip_address, variant->port, variant->proto,
-                       (asp_port_status_e)variant->status,
-                       client->user_data_for_cb_session_port_status);
-
-ERROR:
-       g_variant_iter_free(iter);
-       __clear_asp_variant(variant);
-       __ASP_LOG_FUNC_END__;
-       return;
-}
-//LCOV_EXCL_STOP
-int asp_initialize(void)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-
-       if (g_client_info.is_registered == TRUE) {
-               ASP_LOGW("Warning!!! Already registered\nUpdate user data and callback!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_ALREADY_INITIALIZED;
-       }
-
-       if (asp_dbus_init() == FALSE) {
-               ASP_LOGW("Failed to initialize dbus");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_OPERATION_FAILED;
-       }
-
-       g_client_info.is_registered = TRUE;
-
-       /* Initialize callbacks */
-       g_client_info.seek_search_result_cb = NULL;
-       g_client_info.advert_status_changed_cb = NULL;
-
-       g_client_info.session_request_cb = NULL;
-       g_client_info.session_config_request_cb = NULL;
-       g_client_info.session_connect_status_cb = NULL;
-       g_client_info.session_status_cb = NULL;
-       g_client_info.session_port_status_cb = NULL;
-
-       g_client_info.user_data_for_cb_seek_search_result = NULL;
-       g_client_info.user_data_for_cb_advert_status_changed = NULL;
-
-       g_client_info.user_data_for_cb_session_request = NULL;
-       g_client_info.user_data_for_cb_session_config_request = NULL;
-       g_client_info.user_data_for_cb_session_connect_status = NULL;
-       g_client_info.user_data_for_cb_session_status = NULL;
-       g_client_info.user_data_for_cb_session_port_status = NULL;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_deinitialize(void)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       asp_dbus_deinit();
-
-       g_client_info.seek_search_result_cb = NULL;
-       g_client_info.advert_status_changed_cb = NULL;
-
-       g_client_info.session_request_cb = NULL;
-       g_client_info.session_config_request_cb = NULL;
-       g_client_info.session_connect_status_cb = NULL;
-       g_client_info.session_status_cb = NULL;
-       g_client_info.session_port_status_cb = NULL;
-
-       g_client_info.user_data_for_cb_seek_search_result = NULL;
-       g_client_info.user_data_for_cb_advert_status_changed = NULL;
-
-       g_client_info.user_data_for_cb_session_request = NULL;
-       g_client_info.user_data_for_cb_session_config_request = NULL;
-       g_client_info.user_data_for_cb_session_connect_status = NULL;
-       g_client_info.user_data_for_cb_session_status = NULL;
-       g_client_info.user_data_for_cb_session_port_status = NULL;
-
-       g_client_info.is_registered = FALSE;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-int asp_seek_set_search_result_cb(asp_seek_search_result_cb cb, void *user_data)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
-
-
-       g_client_info.seek_search_result_cb = cb;
-       g_client_info.user_data_for_cb_seek_search_result = user_data;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_seek_unset_search_result_cb(void)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       g_client_info.seek_search_result_cb = NULL;
-       g_client_info.user_data_for_cb_seek_search_result = NULL;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_advert_set_status_changed_cb(asp_advert_status_changed_cb cb, void *user_data)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
-
-       g_client_info.advert_status_changed_cb = cb;
-       g_client_info.user_data_for_cb_advert_status_changed = user_data;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_advert_unset_status_changed_cb(void)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       g_client_info.advert_status_changed_cb = NULL;
-       g_client_info.user_data_for_cb_advert_status_changed = NULL;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_session_set_request_cb(asp_session_request_cb cb, void *user_data)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
-
-       g_client_info.session_request_cb = cb;
-       g_client_info.user_data_for_cb_session_request = user_data;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_session_unset_request_cb(void)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       g_client_info.session_request_cb = NULL;
-       g_client_info.user_data_for_cb_session_request = NULL;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_session_set_config_request_cb(asp_session_config_request_cb cb, void *user_data)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
-
-       g_client_info.session_config_request_cb = cb;
-       g_client_info.user_data_for_cb_session_config_request = user_data;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_session_unset_config_request_cb(void)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       g_client_info.session_config_request_cb = NULL;
-       g_client_info.user_data_for_cb_session_config_request = NULL;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_session_set_connect_status_cb(asp_session_connect_status_cb cb, void *user_data)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
-
-       g_client_info.session_connect_status_cb = cb;
-       g_client_info.user_data_for_cb_session_connect_status = user_data;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-
-int asp_session_unset_connect_status_cb(void)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       g_client_info.session_connect_status_cb = NULL;
-       g_client_info.user_data_for_cb_session_connect_status = NULL;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_session_set_status_cb(asp_session_status_cb cb, void *user_data)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
-
-       g_client_info.session_status_cb = cb;
-       g_client_info.user_data_for_cb_session_status = user_data;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-
-int asp_session_unset_status_cb(void)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       g_client_info.session_status_cb = NULL;
-       g_client_info.user_data_for_cb_session_status = NULL;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_session_set_port_status_cb(asp_session_port_status_cb cb, void *user_data)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
-
-       g_client_info.session_port_status_cb = cb;
-       g_client_info.user_data_for_cb_session_port_status = user_data;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_session_unset_port_status_cb(void)
-{
-       __ASP_LOG_FUNC_START__;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       g_client_info.session_port_status_cb = NULL;
-       g_client_info.user_data_for_cb_session_port_status = NULL;
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-typedef void (*free_func)(void *);
-
-static void __free_advert(void *advert)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-
-       service = (asp_client_advert_s *)advert;
-       if (service == NULL) {
-               ASP_LOGE("invalid parameter");
-               __ASP_LOG_FUNC_END__;
-               return;
-       }
-
-       g_free(service->instance_name);
-       g_free(service->serivce_name);
-       g_free(service->service_type);
-       g_free(service->rsp_info);
-       g_hash_table_destroy(service->service_info_map);
-       g_free(service);
-       service = NULL;
-       __ASP_LOG_FUNC_END__;
-       return;
-}
-
-static void __free_seek(void *seek)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_seek_s *service = NULL;
-
-       service = (asp_client_seek_s *)seek;
-       if (service == NULL) {
-               ASP_LOGE("invalid parameter");
-               __ASP_LOG_FUNC_END__;
-               return;
-       }
-
-       g_free(service->serivce_name);
-       g_free(service->service_type);
-       g_free(service->rsp_info);
-       g_hash_table_destroy(service->service_info_map);
-       g_free(service);
-       service = NULL;
-       __ASP_LOG_FUNC_END__;
-       return;
-}
-
-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_advert_s *__get_advert(void *handle)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-       GList *temp = NULL;
-
-       if (asp_adverts == NULL) {
-               __ASP_LOG_FUNC_END__;
-               return NULL;
-       }
-
-       ASP_LOGD("service [%p]", handle);
-
-       temp = g_list_first(asp_adverts);
-       for (temp = g_list_first(asp_adverts); temp != NULL; temp = g_list_next(temp)) {
-               service = temp->data;
-
-               ASP_LOGD("temp [%p]", service);
-               if (service != NULL && service == handle)
-                       break;
-               service = NULL;
-       }
-       __ASP_LOG_FUNC_END__;
-       return service;
-}
-
-static asp_client_seek_s *__get_seek(void *handle)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_seek_s *service = NULL;
-       GList *temp = NULL;
-
-       if (asp_seeks == NULL) {
-               __ASP_LOG_FUNC_END__;
-               return NULL;
-       }
-
-       ASP_LOGD("service [%p]", handle);
-
-       temp = g_list_first(asp_seeks);
-       for (temp = g_list_first(asp_seeks); temp != NULL; temp = g_list_next(temp)) {
-               service = temp->data;
-
-               ASP_LOGD("temp [%p]", service);
-               if (service != NULL && service == handle)
-                       break;
-               service = NULL;
-       }
-       __ASP_LOG_FUNC_END__;
-       return service;
-}
-
-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 = temp->data;
-
-               ASP_LOGD("temp [%p]", service);
-               if (service != NULL && service == handle)
-                       break;
-               service = NULL;
-       }
-       __ASP_LOG_FUNC_END__;
-       return service;
-}
-
-static int __remove_advert(void *handle)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-       service = __get_advert(handle);
-
-       if (service == NULL) {
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_OPERATION_FAILED;
-       } else {
-               asp_adverts = g_list_remove(asp_adverts, handle);
-               __free_advert(service);
-       }
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-static int __remove_seek(void *handle)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_seek_s *service = NULL;
-       service = __get_seek(handle);
-
-       if (service == NULL) {
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_OPERATION_FAILED;
-       } else {
-               asp_seeks = g_list_remove(asp_seeks, handle);
-               __free_seek(service);
-       }
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-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)
-               return false;
-       else
-               return true;
-}
-
-int asp_advert_create(char *instance_name, asp_advert_service_h *adv_service)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_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(adv_service, __ASP_LOG_FUNC_END__);
-
-       service = (asp_client_advert_s *)g_try_malloc0(sizeof(asp_client_advert_s));
-       if (!service) {
-               ASP_LOGE("malloc() failed!!!.");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_OUT_OF_MEMORY;
-       }
-       ASP_LOGD("service [%p]", service);
-
-       if (instance_name) {
-               ASP_LOGD("instance_name = [%s]", instance_name);
-               if (!__is_valid_instance_name(instance_name)) {
-                       ASP_LOGE("Not valid instance_name");
-                       g_free(service);
-                       __ASP_LOG_FUNC_END__;
-                       return ASP_ERROR_INVALID_PARAMETER;
-               }
-               service->instance_name = g_strdup(instance_name);
-               if (!service->instance_name) {
-                       ASP_LOGE("malloc() failed!!!.");
-                       g_free(service);
-                       __ASP_LOG_FUNC_END__;
-                       return ASP_ERROR_OUT_OF_MEMORY;
-               }
-       }
-       asp_adverts = g_list_prepend(asp_adverts, service);
-
-       /* TODO : consider the case if target arch is 64bit. */
-       /* TODO : Make asp enable support for other methods. */
-       /* Default : ASP */
-       service->auto_accept = 0;
-       service->config_method = 1;
-       service->status = 0;
-       service->role = 1;
-       service->service_info_map = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
-       service->adv_id = (unsigned int)service & 0xffffffff;
-       *adv_service = (asp_advert_service_h)service;
-       ASP_LOGD("asp_advert_create() SUCCESS");
-
-       ASP_LOGD("advert handler [%p]", *adv_service);
-       __ASP_LOG_FUNC_END__;
-       return res;
-}
-
-int asp_advert_destroy(asp_advert_service_h adv_service)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_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(adv_service, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-
-       g_hash_table_remove_all(service->service_info_map);
-       res = __remove_advert((void *)service);
-       if (res != ASP_ERROR_NONE) {
-               __ASP_LOG_FUNC_END__;
-               return res;
-       }
-
-       ASP_LOGD("asp_destory_advertise_handle() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-static bool __is_valid_service_type_for_wfds(char *service_type)
-{
-       int pos = 0;
-
-       /* Wi-Fi Peer-to-Peer Services Technical Specification v1.1
-       * The UTF-8 encoded service name (and therefore the contents
-       * of each service_name parameter) shall be 255 bytes or less
-       */
-       if (strlen(service_type) > MAX_SERVICE_TYPE_LEN)
-               return false;
-
-       while (service_type[pos] != 0) {
-               if (!g_ascii_isalpha(service_type[pos]) &&
-                       !g_ascii_isdigit(service_type[pos]) &&
-                       service_type[pos] != '.' &&
-                       service_type[pos] != '-')
-                       return false;
-               pos++;
-       }
-       return true;
-}
-
-static bool __is_valid_service_type(char *service_type)
-{
-       int srv_name_len = strlen(service_type) - PROTO_LEN - 1;
-       char *proto;
-       int pos;
-
-       if (srv_name_len < 2)
-               return __is_valid_service_type_for_wfds(service_type);
-
-       proto = &(service_type[srv_name_len + 1]);
-       if (strncmp(proto, "_udp", PROTO_LEN) != 0 && strncmp(proto, "_tcp", PROTO_LEN) != 0)
-               return __is_valid_service_type_for_wfds(service_type);
-
-       /* Service Type = <_>service_name.<_><Transport protocol>
-       * Service Name description:
-       * Shall be at least 1 character and no more than 15 characters long
-       * Shall contain only US-ASCII [ANSI.X3.4-1986] letters 'A' - 'Z' and
-       * 'a' - 'z', digits '0' - '9', and hyphens ('-', ASCII 0x2D or decimal 45)
-       * Shall contain at least one letter ('A' - 'Z' or 'a' - â€˜z')
-       * Shall NOT begin or end with a hyphen
-       */
-
-       if (srv_name_len > MAX_SERVICE_NAME_LEN + 1)
-               return false;
-
-       if (service_type[0] != '_' || service_type[1] == '-' ||
-               service_type[srv_name_len] != '.')
-               return false;
-
-       pos = 1;
-       while (pos < srv_name_len) {
-               if (!g_ascii_isalpha(service_type[pos]) &&
-                       !g_ascii_isdigit(service_type[pos]) &&
-                       service_type[pos] != '-')
-                       return false;
-               pos++;
-       }
-
-       return true;
-}
-
-int asp_advert_set_service_type(asp_advert_service_h adv_service,
-               char *service_type)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-       char *type = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(service_type, __ASP_LOG_FUNC_END__);
-
-       if (strlen(service_type) == 0) {
-               ASP_LOGE("Zero length value");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       ASP_LOGD("service [%p]", adv_service);
-
-       if (!__is_valid_service_type(service_type)) {
-               ASP_LOGE("invalid service_type");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       type = g_strdup(service_type);
-       if (!type) {
-               ASP_LOGE("malloc() failed!!!.");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_OPERATION_FAILED;
-       }
-       g_free(service->service_type);
-       service->service_type = type;
-
-       ASP_LOGD("asp_advert_set_service_type() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_advert_set_auto_accept(asp_advert_service_h adv_service,
-               bool auto_accept)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       service->auto_accept = auto_accept;
-
-       ASP_LOGD("asp_advert_set_auto_accept() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-
-static bool __is_valid_key(const char *key)
-{
-       int pos = 0;
-
-       if (strlen(key) > KEY_LEN)
-               return false;
-
-       while (key[pos] != 0) {
-               if (key[pos] < KEY_MIN || key[pos] > KEY_MAX)
-                       return false;
-               pos++;
-       }
-       return true;
-}
-
-int asp_advert_add_info(asp_advert_service_h adv_service,
-               const char *key, const char *value)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(key, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", adv_service);
-
-       if (__is_valid_key(key)) {
-               ASP_LOGE("invalid key!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       /* TODO: add advertised info */
-       g_hash_table_replace(service->service_info_map, g_strdup(key), g_strdup(value));
-
-       ASP_LOGD("asp_advert_add_info() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_advert_get_info(asp_advert_service_h adv_service, const char *key,
-               int *length, char **value)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-       char *ret_val = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(key, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       /* TODO: get advertised info */
-       ret_val = g_hash_table_lookup(service->service_info_map, key);
-       if (ret_val == NULL) {
-               ASP_LOGD("value is NULL");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_NONE;
-       }
-
-       *value = ret_val;
-       *length = strlen(ret_val);
-
-       ASP_LOGD("asp_advert_get_info() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_advert_remove_info(asp_advert_service_h adv_service, const char *key)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(key, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       /* TODO: remove advertised info */
-       g_hash_table_remove(service->service_info_map, key);
-
-       ASP_LOGD("asp_advert_remove_info() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_advert_set_status(asp_advert_service_h adv_service,
-               unsigned char status)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       service->status = status;
-
-       ASP_LOGD("asp_advert_set_status() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_advert_set_discovery_tech(asp_advert_service_h adv_service, int discovery_tech)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       if (!((discovery_tech & ASP_DISCOVERY_TECH_P2P) |
-                       (discovery_tech & ASP_DISCOVERY_TECH_NFC) |
-                       (discovery_tech & ASP_DISCOVERY_TECH_BLE) |
-                       (discovery_tech & ASP_DISCOVERY_TECH_INFRA) |
-                       (discovery_tech & ASP_DISCOVERY_TECH_NAN))) {
-               ASP_LOGE("invalid parameter!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       if (!adv_service) {
-               ASP_LOGE("NULL handler!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       service->discovery_tech = discovery_tech;
-
-       ASP_LOGD("asp_advert_set_discovery_tech() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_advert_set_preferred_connection(asp_advert_service_h adv_service,
-               unsigned char preferred_connection)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       if (!adv_service) {
-               ASP_LOGE("NULL handler!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       service->preferred_connection = preferred_connection;
-
-       ASP_LOGD("asp_advert_set_preferred_connection() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_advert_set_p2p_role_scheme(asp_advert_service_h adv_service,
-               asp_advert_p2p_role_scheme_e role)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       if (!adv_service) {
-               ASP_LOGE("NULL handler!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       service->role = role;
-
-       ASP_LOGD("asp_advert_set_p2p_role_scheme() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_advert_get_p2p_role_scheme(asp_advert_service_h adv_service,
-               asp_advert_p2p_role_scheme_e *role)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       if (!adv_service || !role) {
-               ASP_LOGE("NULL handler!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       *role = service->role;
-
-       ASP_LOGD("asp_advert_get_p2p_role_scheme() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-
-int asp_advert_set_p2p_config_method(asp_advert_service_h adv_service,
-               asp_wps_type_e config_method)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       if (!adv_service) {
-               ASP_LOGE("NULL handler!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       if (config_method > ASP_WPS_TYPE_PIN_KEYPAD) {
-               ASP_LOGE("config_method is larger than expected");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       service->config_method = config_method;
-
-       ASP_LOGD("asp_advert_set_p2p_config_method() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_advert_get_p2p_config_method(asp_advert_service_h adv_service,
-               asp_wps_type_e *config_method)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(config_method, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-
-       *config_method = service->config_method;
-
-       ASP_LOGD("asp_advert_get_p2p_config_method() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_advert_set_p2p_response(asp_advert_service_h adv_service,
-               char *rsp_info, int length)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-       char *info = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       /* TODO fit the rsp info for length */
-       if (length <= 0 || length > DEFERRED_LEN) {
-               ASP_LOGE("invalid length!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       if (!adv_service || !rsp_info) {
-               ASP_LOGE("NULL handler!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-
-       info = g_strdup(rsp_info);
-       if (!info) {
-               ASP_LOGE("malloc() failed!!!.");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_OPERATION_FAILED;
-       }
-       g_free(service->rsp_info);
-       service->rsp_info = info;
-
-       ASP_LOGD("asp_advert_set_p2p_response() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-
-static GVariant* __g_hash_keys_to_g_variant(GHashTable *hash)
-{
-       GVariantBuilder builder;
-
-       __ASP_LOG_FUNC_START__;
-       g_variant_builder_init(&builder, G_VARIANT_TYPE("as"));
-/*     g_variant_builder_open(&builder, G_VARIANT_TYPE("a{sv}")); */
-
-       GHashTableIter iter;
-       gpointer key, value;
-
-       g_hash_table_iter_init(&iter, hash);
-       while (g_hash_table_iter_next(&iter, &key, &value)) {
-
-               ASP_LOGE("key [%s]", (char*)key);
-               g_variant_builder_add(&builder, "s", key);
-       }
-
-/*     g_variant_builder_close(&builder); */
-       __ASP_LOG_FUNC_END__;
-       return g_variant_builder_end(&builder);
-}
-
-static GVariant* __g_hash_table_to_g_variant(GHashTable *hash)
-{
-       GVariantBuilder builder;
-
-       __ASP_LOG_FUNC_START__;
-       g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
-
-       GHashTableIter iter;
-       gpointer key, value;
-
-       g_hash_table_iter_init(&iter, hash);
-       while (g_hash_table_iter_next(&iter, &key, &value))
-               g_variant_builder_add(&builder, "{sv}", key, g_variant_new_string(value));
-
-       __ASP_LOG_FUNC_END__;
-       return g_variant_builder_end(&builder);
-}
-
-int asp_advert_start_advertising(asp_advert_service_h adv_service)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-       GVariantBuilder *builder = NULL;
-       GVariant *params = NULL;
-       GError *error = NULL;
-       GVariant *reply = 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(adv_service, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-
-       // LCOV_EXCL_START
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
-       g_variant_builder_add(builder, "{sv}", "adv_id", g_variant_new("u", service->adv_id));
-       g_variant_builder_add(builder, "{sv}", "discovery_tech", g_variant_new("i", service->discovery_tech));
-       g_variant_builder_add(builder, "{sv}", "preferred_connection", g_variant_new("y", service->preferred_connection));
-       g_variant_builder_add(builder, "{sv}", "auto_accept", g_variant_new("i", service->auto_accept));
-       g_variant_builder_add(builder, "{sv}", "status", g_variant_new("y", service->status));
-       g_variant_builder_add(builder, "{sv}", "role", g_variant_new("y", service->role));
-       g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", service->config_method));
-
-       if (service->instance_name)     /* This can be NULL if this is ASP 1.0 service */
-               g_variant_builder_add(builder, "{sv}", "instance_name", g_variant_new("s", service->instance_name));
-       if (service->service_type)      /* This can be NULL if Instance name is UUID */
-               g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", service->service_type));
-       if (g_hash_table_size(service->service_info_map) > 0)
-               g_variant_builder_add(builder, "{sv}", "service_info", __g_hash_table_to_g_variant(service->service_info_map));
-       if (service->rsp_info)
-               g_variant_builder_add(builder, "{sv}", "rsp_info", g_variant_new("s", service->rsp_info));
-       params = g_variant_new("(a{sv})", builder);
-       g_variant_builder_unref(builder);
-       ASP_LOGI("service type (%s) adv ID (%u)", service->service_type, service->adv_id);
-
-       reply = asp_dbus_method_call_sync(ASP_DAEMON_SERVICE_INTERFACE,
-                                                 "AdvertiseService", params, &error);
-       if (error != NULL) {
-               ASP_LOGE("asp_dbus_method_call_sync() failed."
-                               "error [%d: %s]", error->code, error->message);
-               ret = __asp_err_string_to_enum(error->message);
-               g_error_free(error);
-               __ASP_LOG_FUNC_END__;
-               return ret;
-       }
-
-       g_variant_get(reply, "(i)", &ret);
-       g_variant_unref(reply);
-
-       ASP_LOGD("%s() return : [%d]", __func__, ret);
-
-       __ASP_LOG_FUNC_END__;
-       return ret;
-       // LCOV_EXCL_STOP
-}
-
-int asp_advert_stop_advertising(asp_advert_service_h adv_service)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-       GVariant *params = NULL;
-       GError *error = NULL;
-       GVariant *reply = 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(adv_service, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-
-       // LCOV_EXCL_START
-       params = g_variant_new("(ui)", service->adv_id, service->discovery_tech);
-       reply = asp_dbus_method_call_sync(ASP_DAEMON_SERVICE_INTERFACE,
-                                                 "CancelAdvertiseService", params, &error);
-       if (error != NULL) {
-               ASP_LOGE("asp_dbus_method_call_sync() failed."
-                               "error [%d: %s]", error->code, error->message);
-               ret = __asp_err_string_to_enum(error->message);
-               g_error_free(error);
-               __ASP_LOG_FUNC_END__;
-               return ret;
-       }
-
-       g_variant_get(reply, "(i)", &ret);
-       g_variant_unref(reply);
-
-       ASP_LOGD("%s() return : [%d]", __func__, ret);
-
-       __ASP_LOG_FUNC_END__;
-       return ret;
-       // LCOV_EXCL_STOP
-}
-
-int asp_advert_change_service_status(asp_advert_service_h adv_service,
-               unsigned char status)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_advert_s *service = NULL;
-       GVariantBuilder *builder = NULL;
-       GVariant *params = NULL;
-       GError *error = NULL;
-       GVariant *reply = 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(adv_service, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", adv_service);
-
-       service = __get_advert((void *)adv_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-
-       // LCOV_EXCL_START
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
-       g_variant_builder_add(builder, "{sv}", "adv_id", g_variant_new("u", service->adv_id));
-       g_variant_builder_add(builder, "{sv}", "auto_accept", g_variant_new("i", service->auto_accept));
-       service->status = status;
-       g_variant_builder_add(builder, "{sv}", "status", g_variant_new("y", service->status));
-       g_variant_builder_add(builder, "{sv}", "role", g_variant_new("y", service->role));
-       g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", service->config_method));
-
-       if (service->instance_name)     /* This can be NULL if this is ASP 1.0 service */
-               g_variant_builder_add(builder, "{sv}", "instance_name", g_variant_new("s", service->instance_name));
-       if (service->service_type)      /* This can be NULL if Instance name is UUID */
-               g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", service->service_type));
-       if (g_hash_table_size(service->service_info_map) > 0)
-               g_variant_builder_add(builder, "{sv}", "service_info", __g_hash_keys_to_g_variant(service->service_info_map));
-       if (service->rsp_info)
-               g_variant_builder_add(builder, "{sv}", "rsp_info", g_variant_new("s", service->rsp_info));
-
-       params = g_variant_new("(a{sv})", builder);
-       g_variant_builder_unref(builder);
-       ASP_LOGI("service type (%s) adv ID (%u)", service->service_type, service->adv_id);
-
-       reply = asp_dbus_method_call_sync(ASP_DAEMON_SERVICE_INTERFACE,
-                                                 "ServiceChangeStatus", params, &error);
-       if (error != NULL) {
-               ASP_LOGE("asp_dbus_method_call_sync() failed."
-                               "error [%d: %s]", error->code, error->message);
-               ret = __asp_err_string_to_enum(error->message);
-               g_error_free(error);
-               __ASP_LOG_FUNC_END__;
-               return ret;
-       }
-
-       g_variant_get(reply, "(i)", &ret);
-       g_variant_unref(reply);
-
-       ASP_LOGD("%s() return : [%d]", __func__, ret);
-
-       __ASP_LOG_FUNC_END__;
-       return ret;
-       // LCOV_EXCL_STOP
-}
-
-int asp_seek_create(char *service_type, asp_seek_service_h *seek_service)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_seek_s *service = NULL;
-       int res = ASP_ERROR_NONE;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-
-       if (!service_type || strlen(service_type) == 0 || !__is_valid_service_type(service_type)) {
-               ASP_LOGE("NULL Param [service_type]!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       ASP_LOGD("service_type = [%s]", service_type);
-
-       if (!seek_service) {
-               ASP_LOGE("NULL Param [handle]!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       service = (asp_client_seek_s *)g_try_malloc0(sizeof(asp_client_seek_s));
-       if (!service) {
-               ASP_LOGE("malloc() failed!!!.");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_OUT_OF_MEMORY;
-       }
-       ASP_LOGD("service [%p]", service);
-
-       service->service_type = g_strdup(service_type);
-       if (!service->service_type) {
-               ASP_LOGE("malloc() failed!!!.");
-               g_free(service);
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_OUT_OF_MEMORY;
-       }
-
-       service->service_info_map = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
-       asp_seeks = g_list_prepend(asp_seeks, service);
-
-       *seek_service = (asp_seek_service_h)service;
-       ASP_LOGD("asp_create_seek_handle() SUCCESS");
-
-       ASP_LOGD("seek handler [%p]", *seek_service);
-       __ASP_LOG_FUNC_END__;
-       return res;
-}
-
-int asp_seek_destroy(asp_seek_service_h seek_service)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_seek_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(seek_service, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", seek_service);
-
-       service = __get_seek((void *)seek_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-
-       g_hash_table_remove_all(service->service_info_map);
-       res = __remove_seek((void *)service);
-       if (res != ASP_ERROR_NONE) {
-               __ASP_LOG_FUNC_END__;
-               return res;
-       }
-
-       ASP_LOGD("asp_seek_destroy() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_seek_add_info(asp_seek_service_h seek_service, const char *key)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_seek_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(seek_service, __ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(key, __ASP_LOG_FUNC_END__);
-
-       if (strlen(key) == 0) {
-               ASP_LOGE("NULL handler!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       ASP_LOGD("service [%p]", seek_service);
-
-       service = __get_seek((void *)seek_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-
-       g_hash_table_replace(service->service_info_map, g_strdup(key), NULL);
-
-       ASP_LOGD("service info [%d]", g_hash_table_size(service->service_info_map));
-       ASP_LOGD("asp_add_seek_info() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return res;
-
-}
-
-int asp_seek_remove_info(asp_seek_service_h seek_service, const char *key)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_seek_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(seek_service, __ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(key, __ASP_LOG_FUNC_END__);
-
-       if (strlen(key) == 0) {
-               ASP_LOGE("NULL handler!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-       ASP_LOGD("service [%p]", seek_service);
-
-       service = __get_seek((void *)seek_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-
-       /* TODO: remove seek info */
-       g_hash_table_remove(service->service_info_map, key);
-
-       ASP_LOGD("asp_remove_seek_info() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return res;
-
-}
-
-int asp_seek_set_discovery_tech(asp_seek_service_h seek_service, int discovery_tech)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_seek_s *service = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(seek_service, __ASP_LOG_FUNC_END__);
-
-       if (!((discovery_tech & ASP_DISCOVERY_TECH_P2P) |
-                       (discovery_tech & ASP_DISCOVERY_TECH_NFC) |
-                       (discovery_tech & ASP_DISCOVERY_TECH_BLE) |
-                       (discovery_tech & ASP_DISCOVERY_TECH_INFRA) |
-                       (discovery_tech & ASP_DISCOVERY_TECH_NAN))) {
-               ASP_LOGE("invalid parameter!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       ASP_LOGD("service [%p]", seek_service);
-
-       service = __get_seek((void *)seek_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       service->discovery_tech = discovery_tech;
-
-       ASP_LOGD("asp_set_seeking_tech() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-int asp_seek_set_preferred_connection(asp_seek_service_h seek_service,
-               unsigned char preferred_connection)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_seek_s *service = NULL;
-
-       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
-       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(seek_service, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", seek_service);
-
-       service = __get_seek((void *)seek_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-       service->preferred_connection = preferred_connection;
-
-       ASP_LOGD("asp_set_seeking_preferred_connection() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return ASP_ERROR_NONE;
-}
-
-
-int asp_seek_start(asp_seek_service_h seek_service)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_seek_s *service = NULL;
-       GVariantBuilder *builder = NULL;
-       GVariant *params = NULL;
-       GError *error = NULL;
-       GVariant *reply = 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(seek_service, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", seek_service);
-
-       service = __get_seek((void *)seek_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SERVICE_NOT_FOUND;
-       }
-
-       // LCOV_EXCL_START
-       ASP_LOGD("service info [%d]", g_hash_table_size(service->service_info_map));
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
-       g_variant_builder_add(builder, "{sv}", "discovery_tech", g_variant_new("i", service->discovery_tech));
-       g_variant_builder_add(builder, "{sv}", "preferred_connection", g_variant_new("y", service->preferred_connection));
-       g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", service->service_type));
-       if (g_hash_table_size(service->service_info_map) > 0) {
-               ASP_LOGE("Service info");
-               g_variant_builder_add(builder, "{sv}", "service_info", __g_hash_keys_to_g_variant(service->service_info_map));
-       }
-
-       params = g_variant_new("(a{sv})", builder);
-       g_variant_builder_unref(builder);
-       ASP_LOGI("service name (%s)", service->serivce_name);
-
-       reply = asp_dbus_method_call_sync(ASP_DAEMON_SERVICE_INTERFACE,
-                                                 "SeekService", params, &error);
-       if (error != NULL) {
-               ASP_LOGE("asp_dbus_method_call_sync() failed."
-                               "error [%d: %s]", error->code, error->message);
-               ret = __asp_err_string_to_enum(error->message);
-               g_error_free(error);
-               __ASP_LOG_FUNC_END__;
-               return ret;
-       }
-
-       g_variant_get(reply, "(it)", &ret, &(service->search_id));
-       g_variant_unref(reply);
-
-       ASP_LOGD("%s() return : [%d]", __func__, ret);
-
-       __ASP_LOG_FUNC_END__;
-       return ret;
-       // LCOV_EXCL_STOP
-}
-
-int asp_seek_stop(asp_seek_service_h seek_service)
-{
-       __ASP_LOG_FUNC_START__;
-       asp_client_seek_s *service = NULL;
-       GVariant *params = NULL;
-       GError *error = NULL;
-       GVariant *reply = 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(seek_service, __ASP_LOG_FUNC_END__);
-
-       service = __get_seek((void *)seek_service);
-       if (service == NULL) {
-               ASP_LOGE("Service NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_OPERATION_FAILED;
-       }
-       ASP_LOGD("service_type = [%s]", service->service_type);
-
-       // LCOV_EXCL_START
-       params = g_variant_new("(ti)", service->search_id, service->discovery_tech);
-       reply = asp_dbus_method_call_sync(ASP_DAEMON_SERVICE_INTERFACE,
-                                                 "CancelSeekService", params, &error);
-       if (error != NULL) {
-               ASP_LOGE("asp_dbus_method_call_sync() failed."
-                               "error [%d: %s]", error->code, error->message);
-               ret = __asp_err_string_to_enum(error->message);
-               g_error_free(error);
-               __ASP_LOG_FUNC_END__;
-               return ret;
-       }
-
-       g_variant_get(reply, "(i)", &ret);
-       g_variant_unref(reply);
-
-       ASP_LOGD("%s() return : [%d]", __func__, ret);
-
-       __ASP_LOG_FUNC_END__;
-       return ret;
-       // LCOV_EXCL_STOP
-}
-
-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__);
-
-       if (!service_mac || strlen(service_mac) != (MACSTR_LEN -1)) {
-               ASP_LOGE("Invalid Param [service_mac]!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       if (adv_id == 0 || !session) {
-               ASP_LOGE("NULL Param [session]!");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_INVALID_PARAMETER;
-       }
-
-       service = (asp_client_session_s *)g_try_malloc0(sizeof(asp_client_session_s));
-       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);
-
-       /* Session ID will be generated by asp-manager */
-       *session = (asp_session_h)service;
-       ASP_LOGD("asp_session_create() SUCCESS");
-
-       ASP_LOGD("service [%p]", *session);
-       __ASP_LOG_FUNC_END__;
-       return res;
-}
-
-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);
-       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) {
-               __ASP_LOG_FUNC_END__;
-               return res;
-       }
-
-       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__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(session_mac, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", session);
-
-       service = __get_session((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;
-
-       ASP_LOGD("asp_session_get_mac() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return res;
-}
-
-
-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__);
-       RET_ERR_IF_PARAMETER_IS_NOT_VALID(session_id, __ASP_LOG_FUNC_END__);
-
-       ASP_LOGD("service [%p]", session);
-
-       service = __get_session((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;
-
-       ASP_LOGD("asp_session_get_id() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return res;
-}
-
-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);
-       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;
-
-       ASP_LOGD("asp_session_set_info() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return res;
-}
-
-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);
-       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;
-
-       ASP_LOGD("asp_session_get_info() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return res;
-}
-
-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);
-       if (service == NULL) {
-               ASP_LOGE("Session NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SESSION_NOT_FOUND;
-       }
-
-       service->network_role = role;
-
-       ASP_LOGD("asp_session_set_p2p_role_scheme() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return res;
-}
-
-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);
-       if (service == NULL) {
-               ASP_LOGE("Session NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SESSION_NOT_FOUND;
-       }
-
-       *role = service->network_role;
-
-       ASP_LOGD("asp_session_get_p2p_role_scheme() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return res;
-}
-
-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);
-       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__;
-               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;
-}
-
-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);
-       if (service == NULL) {
-               ASP_LOGE("Session NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SESSION_NOT_FOUND;
-       }
-
-       *config_method = service->network_config;
-
-       ASP_LOGD("asp_session_get_p2p_config_method() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return res;
-}
-
-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);
-       if (service == NULL) {
-               ASP_LOGE("Session NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SESSION_NOT_FOUND;
-       }
-
-       *status = service->state;
-
-       ASP_LOGD("asp_session_get_close_status() SUCCESS");
-
-       __ASP_LOG_FUNC_END__;
-       return res;
-}
-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);
-       if (service == NULL) {
-               ASP_LOGE("Session NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SESSION_NOT_FOUND;
-       }
-
-       // 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));
-
-       params = g_variant_new("(a{sv})", builder);
-       g_variant_builder_unref(builder);
-
-       reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
-                                                 "ConnectSession", params, &error);
-       if (error != NULL) {
-               ASP_LOGE("asp_dbus_method_call_sync() failed."
-                               "error [%d: %s]", error->code, error->message);
-               ret = __asp_err_string_to_enum(error->message);
-               g_error_free(error);
-               __ASP_LOG_FUNC_END__;
-               return ret;
-       }
-
-       g_variant_get(reply, "(iu&s)", &ret, &(service->session_id), &str);
-       if (str != NULL)
-               g_strlcpy(service->session_mac, str, MACSTR_LEN);
-       g_variant_unref(reply);
-
-       ASP_LOGD("%s() return : [%d]", __func__, ret);
-
-       __ASP_LOG_FUNC_END__;
-       return ret;
-       // LCOV_EXCL_STOP
-}
-
-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);
-       if (service == NULL) {
-               ASP_LOGE("Session NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SESSION_NOT_FOUND;
-       }
-
-       // 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));
-       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,
-                                                 "ConfirmSession", params, &error);
-       if (error != NULL) {
-               ASP_LOGE("asp_dbus_method_call_sync() failed."
-                               "error [%d: %s]", error->code, error->message);
-               ret = __asp_err_string_to_enum(error->message);
-               g_error_free(error);
-               __ASP_LOG_FUNC_END__;
-               return ret;
-       }
-
-       g_variant_get(reply, "(i)", &ret);
-       g_variant_unref(reply);
-
-       ASP_LOGD("%s() return : [%d]", __func__, ret);
-
-       __ASP_LOG_FUNC_END__;
-       return ret;
-       // LCOV_EXCL_STOP
-}
-
-int asp_session_get_handle(char *session_mac, unsigned int session_id,
-               asp_session_h *session)
-
-{
-       __ASP_LOG_FUNC_START__;
-       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(session_mac, __ASP_LOG_FUNC_END__);
-
-       // LCOV_EXCL_START
-       int ret = ASP_ERROR_NONE;
-       GError *error = NULL;
-       GVariant *params = g_variant_new("(su)", session_mac, session_id);
-       GVariant *reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
-                                                 "GetSession", params, &error);
-       if (error != NULL) {
-               ASP_LOGE("asp_dbus_method_call_sync() failed."
-                               "error [%d: %s]", error->code, error->message);
-               ret = __asp_err_string_to_enum(error->message);
-               g_error_free(error);
-               __ASP_LOG_FUNC_END__;
-               return ret;
-       }
-
-       if (!reply) {
-               ASP_LOGE("reply is NULL!!");
-               __ASP_LOG_FUNC_END__;
-               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);
-       g_variant_unref(reply);
-       if (variant == NULL) {
-               ASP_LOGE("Out of memory");
-               return ASP_ERROR_OUT_OF_MEMORY;
-       }
-
-       service->advertisement_id = variant->adv_id;
-       __clear_asp_variant(variant);
-
-       *session = service;
-       asp_sessions = g_list_prepend(asp_sessions, service);
-
-       ASP_LOGD("%s() return : [%d]", __func__, ret);
-       __ASP_LOG_FUNC_END__;
-       return ret;
-       // LCOV_EXCL_STOP
-}
-
-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);
-       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,
-                                                 "SetSessionReady", params, &error);
-       if (error != NULL) {
-               ASP_LOGE("asp_dbus_method_call_sync() failed."
-                               "error [%d: %s]", error->code, error->message);
-               ret = __asp_err_string_to_enum(error->message);
-               g_error_free(error);
-               __ASP_LOG_FUNC_END__;
-               return ret;
-       }
-
-       g_variant_get(reply, "(i)", &ret);
-       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);
-       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,
-                                                 "CloseSession", params, &error);
-       if (error != NULL) {
-               ASP_LOGE("asp_dbus_method_call_sync() failed."
-                               "error [%d: %s]", error->code, error->message);
-               ret = __asp_err_string_to_enum(error->message);
-               g_error_free(error);
-               __ASP_LOG_FUNC_END__;
-               return ret;
-       }
-
-       g_variant_get(reply, "(i)", &ret);
-       g_variant_unref(reply);
-
-       ASP_LOGD("%s() return : [%d]", __func__, ret);
-
-       __ASP_LOG_FUNC_END__;
-       return ret;
-}
-
-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);
-       if (service == NULL) {
-               ASP_LOGE("Session NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SESSION_NOT_FOUND;
-       }
-
-       // 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));
-       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,
-                                                 "BoundPort", params, &error);
-       if (error != NULL) {
-               ASP_LOGE("asp_dbus_method_call_sync() failed."
-                               "error [%d: %s]", error->code, error->message);
-               ret = __asp_err_string_to_enum(error->message);
-               g_error_free(error);
-               __ASP_LOG_FUNC_END__;
-               return ret;
-       }
-
-       g_variant_get(reply, "(i)", &ret);
-       g_variant_unref(reply);
-
-       ASP_LOGD("%s() return : [%d]", __func__, ret);
-
-       __ASP_LOG_FUNC_END__;
-       return ret;
-       // LCOV_EXCL_STOP
-}
-
-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);
-       if (service == NULL) {
-               ASP_LOGE("Session NOT registered");
-               __ASP_LOG_FUNC_END__;
-               return ASP_ERROR_SESSION_NOT_FOUND;
-       }
-
-       // 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));
-       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,
-                                                 "ReleasePort", params, &error);
-       if (error != NULL) {
-               ASP_LOGE("asp_dbus_method_call_sync() failed."
-                               "error [%d: %s]", error->code, error->message);
-               ret = __asp_err_string_to_enum(error->message);
-               g_error_free(error);
-               __ASP_LOG_FUNC_END__;
-               return ret;
-       }
-
-       g_variant_get(reply, "(i)", &ret);
-       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-client.cpp b/src/asp-client.cpp
new file mode 100755 (executable)
index 0000000..11c53ef
--- /dev/null
@@ -0,0 +1,2681 @@
+/*
+ * Application Service Platform(ASP)
+ *
+ * Copyright (c) 2015 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.
+ *
+ */
+
+/**
+ * This file implements Application Service Platform(ASP) user library.
+ *
+ * @file               asp-client.c
+ * @author       Jiung Yu (jiung.yu@samsung.com)
+ * @version     0.1
+ */
+
+
+/*****************************************************************************
+ *  Standard headers
+ *****************************************************************************/
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <unistd.h>
+#include <netdb.h>
+#include <sys/socket.h>
+#include <string.h>
+#include <sys/un.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <signal.h>
+#include <linux/unistd.h>
+#include <sys/poll.h>
+#include <pthread.h>
+#include <errno.h>
+
+#include <glib.h>
+#include <gio/gio.h>
+
+/*****************************************************************************
+ *  System headers
+ *****************************************************************************/
+#include <system_info.h>
+
+/*****************************************************************************
+ *  Application Service Platform(ASP) library headers
+ *****************************************************************************/
+#include "asp.h"
+
+#include "asp-advert.h"
+#include "asp-client.h"
+#include "asp-conts.h"
+#include "asp-defs.h"
+#include "asp-dbus.h"
+#include "asp-log.h"
+#include "asp-seek.h"
+#include "asp-utils.h"
+
+/*****************************************************************************
+ *  Macros and Typedefs
+ *****************************************************************************/
+
+/*****************************************************************************
+ *  Global Variables
+ *****************************************************************************/
+static __thread asp_client_info_s g_client_info = {
+       .is_registered = FALSE,
+
+       .seek_search_result_cb = NULL,
+       .advert_status_changed_cb = NULL,
+       .session_request_cb = NULL,
+       .session_config_request_cb = NULL,
+       .session_connect_status_cb = NULL,
+       .session_status_cb = NULL,
+       .session_port_status_cb = NULL,
+
+       .user_data_for_cb_seek_search_result = NULL,
+       .user_data_for_cb_advert_status_changed = NULL,
+       .user_data_for_cb_session_request = NULL,
+       .user_data_for_cb_session_config_request = NULL,
+       .user_data_for_cb_session_connect_status = NULL,
+       .user_data_for_cb_session_status = NULL,
+       .user_data_for_cb_session_port_status = NULL
+};
+
+static __thread GList *asp_sessions = NULL;
+
+/*****************************************************************************
+ *  Local Structures Definition
+ *****************************************************************************/
+typedef struct {
+       unsigned int search_id;
+       unsigned int adv_id;
+       unsigned int config_method;
+
+       const char *service_mac;
+       char *service_info;
+       int service_info_len;
+
+       unsigned int session_id;
+       const char *session_mac;
+       const char *session_info;
+       int session_info_len;
+
+       const char * device_name;
+       const char *instance_name;
+
+       gboolean get_pin;
+       const char *pin;
+
+       const char *ip_address;
+       int port;
+       int proto;
+       int service_status;
+       const char *deferred_resp;
+       int deferred_resp_len;
+
+       int state;
+       int status;
+       const char *requested_info;
+} asp_variant_s;
+
+/*****************************************************************************
+ *  Local Functions Definition
+ *****************************************************************************/
+
+//LCOV_EXCL_START
+static char* __asp_create_service_info_from_g_variant(GVariant *variant)
+{
+       gchar *info = (gchar*)g_try_malloc0(ASP_SERVICE_INFO_MAX_LEN + 1);
+       if (!info)
+               return NULL;
+
+       GVariantIter *iter = NULL;
+       g_variant_get(variant, "a{sv}", &iter);
+
+       GVariant* var = NULL;
+       gchar *key = NULL;
+       int offset = 0;
+       while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
+               gsize value_len = 0;
+               gchar *value = g_variant_dup_string(var, &value_len);
+               int len = strlen(key) + value_len + 2;
+               snprintf(info + offset, len + 1, "%s=%s,", key, value);
+               offset += len;
+               g_free(value);
+       }
+
+       return info;
+}
+
+static asp_variant_s *__get_asp_variant_from_iterator(GVariantIter *iter)
+{
+       asp_variant_s *variant = (asp_variant_s *)g_try_malloc0(sizeof(asp_variant_s));
+       if (variant == NULL)
+               return variant;
+
+       const char *key = NULL;
+       GVariant *value = NULL;
+
+       while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
+               if (!g_strcmp0(key, "search_id")) {
+                       g_variant_get(value, "u", &variant->search_id);
+               } else if (!g_strcmp0(key, "service_mac")) {
+                       g_variant_get(value, "&s", &variant->service_mac);
+               } else if (!g_strcmp0(key, "adv_id")) {
+                       g_variant_get(value, "u", &variant->adv_id);
+               } else if (!g_strcmp0(key, "config_method")) {
+                       g_variant_get(value, "u", &variant->config_method);
+               } else if (!g_strcmp0(key, "instance_name")) {
+                       g_variant_get(value, "&s", &variant->instance_name);
+               } else if (!g_strcmp0(key, "service_info")) {
+                       g_free(variant->service_info);
+                       variant->service_info = __asp_create_service_info_from_g_variant(value);
+                       if (variant->service_info) {
+                               ASP_LOGD("Service Info: %s", variant->service_info);
+                               variant->service_info_len = strlen(variant->service_info);
+                       }
+               } else if (!g_strcmp0(key, "service_status")) {
+                       g_variant_get(value, "y", &variant->service_status);
+               } else if (!g_strcmp0(key, "session_id")) {
+                       g_variant_get(value, "u", &variant->session_id);
+               } else if (!g_strcmp0(key, "session_mac")) {
+                       g_variant_get(value, "&s", &variant->session_mac);
+               } else if (!g_strcmp0(key, "session_info")) {
+                       g_variant_get(value, "&s", &variant->session_info);
+                       if (variant->session_info)
+                               variant->session_info_len = strlen(variant->session_info);
+               } else if (!g_strcmp0(key, "device_name")) {
+                       g_variant_get(value, "&s", &variant->device_name);
+               } else if (!g_strcmp0(key, "get_pin")) {
+                       g_variant_get(value, "b", &variant->get_pin);
+               } else if (!g_strcmp0(key, "pin")) {
+                       g_variant_get(value, "&s", &variant->pin);
+               } else if (!g_strcmp0(key, "deferred_resp")) {
+                       g_variant_get(value, "&s", &variant->deferred_resp);
+                       if (variant->deferred_resp)
+                               variant->deferred_resp_len = strlen(variant->deferred_resp);
+               } else if (!g_strcmp0(key, "ip_address")) {
+                       g_variant_get(value, "&s", &variant->ip_address);
+               }  else if (!g_strcmp0(key, "port")) {
+                       g_variant_get(value, "i", &variant->port);
+               } else if (!g_strcmp0(key, "proto")) {
+                       g_variant_get(value, "i", &variant->proto);
+               } else if (!g_strcmp0(key, "state")) {
+                       g_variant_get(value, "i", &variant->state);
+               } else if (!g_strcmp0(key, "status")) {
+                       g_variant_get(value, "i", &variant->status);
+               }  else if (!g_strcmp0(key, "requested_info")) {
+                       g_variant_get(value, "&s", &variant->requested_info);
+               } else {
+                       /* Do Nothing */
+               }
+       }
+
+       return variant;
+}
+
+static void __clear_asp_variant(asp_variant_s *variant)
+{
+       if (variant && variant->service_info) {
+               g_free(variant->service_info);
+               variant->service_info = NULL;
+       }
+       g_free(variant);
+}
+
+static int __asp_err_string_to_enum(const char *error)
+{
+       if (NULL != strstr(error, "NoReply"))
+               return ASP_ERROR_COMMUNICATION_FAILED;
+       else if (NULL != strstr(error, "PermissionDenied"))
+               return ASP_ERROR_PERMISSION_DENIED;
+       else if (NULL != strstr(error, "MEM_ERR"))
+               return ASP_ERROR_OUT_OF_MEMORY;
+       else if (NULL != strstr(error, "INVALID_PARAM"))
+               return ASP_ERROR_INVALID_PARAMETER;
+       else if (NULL != strstr(error, "OPER_FAILED"))
+               return ASP_ERROR_OPERATION_FAILED;
+       else if (NULL != strstr(error, "NO_SERVICE"))
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       else if (NULL != strstr(error, "NO_SESSION"))
+               return ASP_ERROR_SESSION_NOT_FOUND;
+       else
+               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)
+{
+       __ASP_LOG_FUNC_START__;
+       asp_client_info_s *client = &g_client_info;
+       if (!client->seek_search_result_cb) {
+               ASP_LOGD("search_result_cb is NULL!!");
+               return;
+       }
+
+       if (!parameters) {
+               __ASP_LOG_FUNC_END__;
+               return;
+       }
+
+       GVariantIter *iter = NULL;
+       g_variant_get(parameters, "(a{sv})", &iter);
+       asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
+       if (variant == NULL) {
+               ASP_LOGE("Out of memory");
+               return;
+       }
+
+       AspSeek *seek = getSeekById(variant->search_id);
+       if (!seek) {
+               ASP_LOGD("There's no related seek");
+               goto ERROR;
+       }
+
+       client->seek_search_result_cb(ASP_ERROR_NONE, (asp_seek_service_h)seek,
+                       variant->service_mac, variant->adv_id,
+                       (asp_wps_type_e)variant->config_method, variant->instance_name,
+                       variant->service_info, variant->service_info_len,
+                       variant->service_status, client->user_data_for_cb_seek_search_result);
+
+ERROR:
+       g_variant_iter_free(iter);
+       __clear_asp_variant(variant);
+       __ASP_LOG_FUNC_END__;
+       return;
+}
+
+void asp_process_advert_status_changed(GDBusConnection *connection,
+               const gchar *object_path, GVariant *parameters)
+{
+       __ASP_LOG_FUNC_START__;
+
+       asp_client_info_s *client = &g_client_info;
+       AspAdvert *advert = NULL;
+       unsigned int advertisement_id = 0;
+       unsigned char status = 0;
+       int reason = 0;
+
+       if (!client->advert_status_changed_cb) {
+               ASP_LOGD("search_result_cb is NULL!!");
+               return;
+       }
+
+       if (!parameters) {
+               __ASP_LOG_FUNC_END__;
+               return;
+       }
+
+       g_variant_get(parameters, "(uyi)", &advertisement_id, &status, &reason);
+
+       advert = getAdvertById(advertisement_id);
+       if (!advert) {
+               ASP_LOGD("There's no related advert");
+               return;
+       }
+
+       client->advert_status_changed_cb(
+                       (asp_advert_service_h)advert, (asp_service_status_e)status,
+                       (asp_advert_status_reason_e)reason,
+                       client->user_data_for_cb_advert_status_changed);
+
+       __ASP_LOG_FUNC_END__;
+       return;
+}
+
+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);
+
+       if (service == NULL) {
+               ASP_LOGD("No matched local service");
+               __ASP_LOG_FUNC_END__;
+               return -1;
+       }
+
+       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;
+       }
+
+       if (session == NULL) {
+               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__;
+                       return -1;
+               }
+
+               if (session_info)
+                       session->session_information = g_strdup(session_info);
+               asp_sessions = g_list_prepend(asp_sessions, session);
+       }
+
+       if (service->auto_accept == FALSE) {
+               ASP_LOGD("Don't accept request automatically");
+               __ASP_LOG_FUNC_END__;
+               return 0;
+       }
+
+       asp_session_confirm(session, TRUE, NULL);
+       ASP_LOGD("asp_confirm_session");
+       __ASP_LOG_FUNC_END__;
+               return -1;
+}
+
+static void __invoke_session_request_cb(asp_variant_s *variant)
+{
+       if (variant == NULL)
+               return;
+
+       asp_client_info_s *client = &g_client_info;
+       if (!client->session_request_cb) {
+               ASP_LOGE("session_request_cb is NULL!!");
+               return;
+       }
+
+       AspAdvert *advert = getAdvertById(variant->adv_id);
+       if (!advert) {
+               ASP_LOGD("There's no related advert");
+               return;
+       }
+
+       asp_client_session_s *session = get_session_by_id_mac(variant->session_mac, variant->session_id);
+       if (!session) {
+               ASP_LOGD("There's no related session");
+               return;
+       }
+
+       client->session_request_cb(ASP_ERROR_NONE, advert, session,
+                       variant->device_name, variant->session_info, variant->session_info_len,
+                       (bool)variant->get_pin, variant->pin,
+                       client->user_data_for_cb_session_config_request);
+}
+
+void asp_process_session_request(GDBusConnection *connection,
+               const gchar *object_path, GVariant *parameters)
+{
+       __ASP_LOG_FUNC_START__;
+       if (!parameters) {
+               ASP_LOGE("parameters is NULL!!");
+               __ASP_LOG_FUNC_END__;
+               return;
+       }
+
+       GVariantIter *iter = NULL;
+       g_variant_get(parameters, "(a{sv})", &iter);
+       asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
+       if (variant == NULL) {
+               ASP_LOGE("Out of memory");
+               goto ERROR;
+       }
+
+       if (variant->session_mac == NULL) {
+               ASP_LOGE("session_mac is NULL");
+               goto ERROR;
+       }
+
+       if (__handle_session_request(variant->adv_id, variant->session_mac,
+                       variant->session_id, variant->session_info) != 0)
+               goto ERROR;
+
+       __invoke_session_request_cb(variant);
+
+ERROR:
+       g_variant_iter_free(iter);
+       __clear_asp_variant(variant);
+       __ASP_LOG_FUNC_END__;
+       return;
+}
+
+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!!");
+               return;
+       }
+
+       if (!parameters) {
+               __ASP_LOG_FUNC_END__;
+               return;
+       }
+
+       GVariantIter *iter = NULL;
+       g_variant_get(parameters, "(a{sv})", &iter);
+       asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
+       if (variant == NULL) {
+               ASP_LOGE("Out of memory");
+               return;
+       }
+
+       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);
+       if (!session) {
+               ASP_LOGD("There's no related session");
+               goto ERROR;
+       }
+
+       client->session_config_request_cb(ASP_ERROR_NONE, (asp_session_h)session,
+                       (bool)variant->pin, variant->pin,
+                       client->user_data_for_cb_session_config_request);
+
+ERROR:
+       g_variant_iter_free(iter);
+       __clear_asp_variant(variant);
+       __ASP_LOG_FUNC_END__;
+       return;
+}
+
+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!!");
+               return;
+       }
+
+       if (!parameters) {
+               __ASP_LOG_FUNC_END__;
+               return;
+       }
+
+       GVariantIter *iter = NULL;
+       g_variant_get(parameters, "(a{sv})", &iter);
+       asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
+       if (variant == NULL) {
+               ASP_LOGE("Out of memory");
+               return;
+       }
+
+       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);
+       if (!session) {
+               ASP_LOGD("There's no related session");
+               goto ERROR;
+       }
+
+       client->session_connect_status_cb(ASP_ERROR_NONE, (asp_session_h)session,
+                       (asp_connect_status_e)variant->status,
+                       variant->deferred_resp, variant->deferred_resp_len,
+                       client->user_data_for_cb_session_connect_status);
+
+ERROR:
+       g_variant_iter_free(iter);
+       __clear_asp_variant(variant);
+       __ASP_LOG_FUNC_END__;
+       return;
+}
+
+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!!");
+               return;
+       }
+
+       if (!parameters) {
+               __ASP_LOG_FUNC_END__;
+               return;
+       }
+
+       GVariantIter *iter = NULL;
+       g_variant_get(parameters, "(a{sv})", &iter);
+       asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
+       if (variant == NULL) {
+               ASP_LOGE("Out of memory");
+               return;
+       }
+
+       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);
+       if (!session) {
+               ASP_LOGD("There's no related session");
+               goto ERROR;
+       }
+
+       client->session_status_cb(ASP_ERROR_NONE, (asp_session_h)session,
+                       (asp_session_state_e)variant->state, variant->requested_info,
+                       client->user_data_for_cb_session_status);
+
+ERROR:
+       g_variant_iter_free(iter);
+       __clear_asp_variant(variant);
+       __ASP_LOG_FUNC_END__;
+       return;
+}
+
+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!!");
+               return;
+       }
+
+       if (!parameters) {
+               __ASP_LOG_FUNC_END__;
+               return;
+       }
+
+       GVariantIter *iter = NULL;
+       g_variant_get(parameters, "(a{sv})", &iter);
+       asp_variant_s *variant = __get_asp_variant_from_iterator(iter);
+       if (variant == NULL) {
+               ASP_LOGE("Out of memory");
+               return;
+       }
+
+       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);
+       if (!session) {
+               ASP_LOGD("There's no related session");
+               goto ERROR;
+       }
+
+       client->session_port_status_cb(ASP_ERROR_NONE, (asp_session_h)session,
+                       variant->ip_address, variant->port, variant->proto,
+                       (asp_port_status_e)variant->status,
+                       client->user_data_for_cb_session_port_status);
+
+ERROR:
+       g_variant_iter_free(iter);
+       __clear_asp_variant(variant);
+       __ASP_LOG_FUNC_END__;
+       return;
+}
+//LCOV_EXCL_STOP
+int asp_initialize(void)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+
+       if (g_client_info.is_registered == TRUE) {
+               ASP_LOGW("Warning!!! Already registered\nUpdate user data and callback!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_ALREADY_INITIALIZED;
+       }
+
+       if (asp_dbus_init() == FALSE) {
+               ASP_LOGW("Failed to initialize dbus");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_OPERATION_FAILED;
+       }
+
+       g_client_info.is_registered = TRUE;
+
+       /* Initialize callbacks */
+       g_client_info.seek_search_result_cb = NULL;
+       g_client_info.advert_status_changed_cb = NULL;
+
+       g_client_info.session_request_cb = NULL;
+       g_client_info.session_config_request_cb = NULL;
+       g_client_info.session_connect_status_cb = NULL;
+       g_client_info.session_status_cb = NULL;
+       g_client_info.session_port_status_cb = NULL;
+
+       g_client_info.user_data_for_cb_seek_search_result = NULL;
+       g_client_info.user_data_for_cb_advert_status_changed = NULL;
+
+       g_client_info.user_data_for_cb_session_request = NULL;
+       g_client_info.user_data_for_cb_session_config_request = NULL;
+       g_client_info.user_data_for_cb_session_connect_status = NULL;
+       g_client_info.user_data_for_cb_session_status = NULL;
+       g_client_info.user_data_for_cb_session_port_status = NULL;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_deinitialize(void)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       asp_dbus_deinit();
+
+       g_client_info.seek_search_result_cb = NULL;
+       g_client_info.advert_status_changed_cb = NULL;
+
+       g_client_info.session_request_cb = NULL;
+       g_client_info.session_config_request_cb = NULL;
+       g_client_info.session_connect_status_cb = NULL;
+       g_client_info.session_status_cb = NULL;
+       g_client_info.session_port_status_cb = NULL;
+
+       g_client_info.user_data_for_cb_seek_search_result = NULL;
+       g_client_info.user_data_for_cb_advert_status_changed = NULL;
+
+       g_client_info.user_data_for_cb_session_request = NULL;
+       g_client_info.user_data_for_cb_session_config_request = NULL;
+       g_client_info.user_data_for_cb_session_connect_status = NULL;
+       g_client_info.user_data_for_cb_session_status = NULL;
+       g_client_info.user_data_for_cb_session_port_status = NULL;
+
+       g_client_info.is_registered = FALSE;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+int asp_seek_set_search_result_cb(asp_seek_search_result_cb cb, void *user_data)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
+
+
+       g_client_info.seek_search_result_cb = cb;
+       g_client_info.user_data_for_cb_seek_search_result = user_data;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_seek_unset_search_result_cb(void)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       g_client_info.seek_search_result_cb = NULL;
+       g_client_info.user_data_for_cb_seek_search_result = NULL;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_advert_set_status_changed_cb(asp_advert_status_changed_cb cb, void *user_data)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
+
+       g_client_info.advert_status_changed_cb = cb;
+       g_client_info.user_data_for_cb_advert_status_changed = user_data;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_advert_unset_status_changed_cb(void)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       g_client_info.advert_status_changed_cb = NULL;
+       g_client_info.user_data_for_cb_advert_status_changed = NULL;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_session_set_request_cb(asp_session_request_cb cb, void *user_data)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
+
+       g_client_info.session_request_cb = cb;
+       g_client_info.user_data_for_cb_session_request = user_data;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_session_unset_request_cb(void)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       g_client_info.session_request_cb = NULL;
+       g_client_info.user_data_for_cb_session_request = NULL;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_session_set_config_request_cb(asp_session_config_request_cb cb, void *user_data)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
+
+       g_client_info.session_config_request_cb = cb;
+       g_client_info.user_data_for_cb_session_config_request = user_data;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_session_unset_config_request_cb(void)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       g_client_info.session_config_request_cb = NULL;
+       g_client_info.user_data_for_cb_session_config_request = NULL;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_session_set_connect_status_cb(asp_session_connect_status_cb cb, void *user_data)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
+
+       g_client_info.session_connect_status_cb = cb;
+       g_client_info.user_data_for_cb_session_connect_status = user_data;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+
+int asp_session_unset_connect_status_cb(void)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       g_client_info.session_connect_status_cb = NULL;
+       g_client_info.user_data_for_cb_session_connect_status = NULL;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_session_set_status_cb(asp_session_status_cb cb, void *user_data)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
+
+       g_client_info.session_status_cb = cb;
+       g_client_info.user_data_for_cb_session_status = user_data;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+
+int asp_session_unset_status_cb(void)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       g_client_info.session_status_cb = NULL;
+       g_client_info.user_data_for_cb_session_status = NULL;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_session_set_port_status_cb(asp_session_port_status_cb cb, void *user_data)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(cb, __ASP_LOG_FUNC_END__);
+
+       g_client_info.session_port_status_cb = cb;
+       g_client_info.user_data_for_cb_session_port_status = user_data;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_session_unset_port_status_cb(void)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       g_client_info.session_port_status_cb = NULL;
+       g_client_info.user_data_for_cb_session_port_status = NULL;
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+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)
+               return false;
+       else
+               return true;
+}
+
+int asp_advert_create(char *instance_name, asp_advert_service_h *adv_service)
+{
+       __ASP_LOG_FUNC_START__;
+
+       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(adv_service, __ASP_LOG_FUNC_END__);
+
+       AspAdvert *service = new AspAdvert;
+
+       if (!service) {
+               ASP_LOGE("malloc() failed!!!.");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_OUT_OF_MEMORY;
+       }
+       ASP_LOGD("service [%p]", service);
+
+       if (instance_name) {
+               ASP_LOGD("instance_name = [%s]", instance_name);
+               if (!__is_valid_instance_name(instance_name)) {
+                       ASP_LOGE("Not valid instance_name");
+                       delete service;
+                       __ASP_LOG_FUNC_END__;
+                       return ASP_ERROR_INVALID_PARAMETER;
+               }
+               service->instance_name = g_strdup(instance_name);
+               if (!service->instance_name) {
+                       ASP_LOGE("malloc() failed!!!.");
+                       g_free(service);
+                       __ASP_LOG_FUNC_END__;
+                       return ASP_ERROR_OUT_OF_MEMORY;
+               }
+       }
+
+       addAdvertToServiceList(service);
+
+       *adv_service = (asp_advert_service_h)service;
+       ASP_LOGD("asp_advert_create() SUCCESS");
+       ASP_LOGD("advert handler [%p]", *adv_service);
+       __ASP_LOG_FUNC_END__;
+       return res;
+}
+
+int asp_advert_destroy(asp_advert_service_h adv_service)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       if (removeAdvert((void *)service) == false) {
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_OPERATION_FAILED;
+       }
+
+       ASP_LOGD("asp_destory_advertise_handle() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_advert_set_service_type(asp_advert_service_h adv_service,
+               char *service_type)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(service_type, __ASP_LOG_FUNC_END__);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+       return service->setServiceType(service_type);
+}
+
+int asp_advert_set_auto_accept(asp_advert_service_h adv_service,
+               bool auto_accept)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+       service->auto_accept = auto_accept;
+
+       ASP_LOGD("asp_advert_set_auto_accept() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_advert_add_info(asp_advert_service_h adv_service,
+               const char *key, const char *value)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(key, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", adv_service);
+
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       return service->addInfo(key, value);
+}
+
+int asp_advert_get_info(asp_advert_service_h adv_service, const char *key,
+               int *length, char **value)
+{
+       __ASP_LOG_FUNC_START__;
+       char *ret_val = NULL;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(key, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+       /* TODO: get advertised info */
+       ret_val = (char *)g_hash_table_lookup(service->service_info_map, key);
+       if (ret_val == NULL) {
+               ASP_LOGD("value is NULL");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_NONE;
+       }
+
+       *value = ret_val;
+       *length = strlen(ret_val);
+
+       ASP_LOGD("asp_advert_get_info() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_advert_remove_info(asp_advert_service_h adv_service, const char *key)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(key, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+       /* TODO: remove advertised info */
+       g_hash_table_remove(service->service_info_map, key);
+
+       ASP_LOGD("asp_advert_remove_info() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_advert_set_status(asp_advert_service_h adv_service,
+               unsigned char status)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+       service->status = status;
+
+       ASP_LOGD("asp_advert_set_status() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_advert_set_discovery_tech(asp_advert_service_h adv_service, int discovery_tech)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       if (!adv_service) {
+               ASP_LOGE("NULL handler!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+       return service->setDiscoveryTech(discovery_tech);
+}
+
+int asp_advert_set_preferred_connection(asp_advert_service_h adv_service,
+               unsigned char preferred_connection)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       if (!adv_service) {
+               ASP_LOGE("NULL handler!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+       service->preferred_connection = preferred_connection;
+
+       ASP_LOGD("asp_advert_set_preferred_connection() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_advert_set_p2p_role_scheme(asp_advert_service_h adv_service,
+               asp_advert_p2p_role_scheme_e role)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       if (!adv_service) {
+               ASP_LOGE("NULL handler!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+       service->role = role;
+
+       ASP_LOGD("asp_advert_set_p2p_role_scheme() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_advert_get_p2p_role_scheme(asp_advert_service_h adv_service,
+               asp_advert_p2p_role_scheme_e *role)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       if (!adv_service || !role) {
+               ASP_LOGE("NULL handler!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+       *role = (asp_advert_p2p_role_scheme_e)service->role;
+
+       ASP_LOGD("asp_advert_get_p2p_role_scheme() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+
+int asp_advert_set_p2p_config_method(asp_advert_service_h adv_service,
+               asp_wps_type_e config_method)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       if (!adv_service) {
+               ASP_LOGE("NULL handler!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+
+       if (config_method > ASP_WPS_TYPE_PIN_KEYPAD) {
+               ASP_LOGE("config_method is larger than expected");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+       service->config_method = config_method;
+
+       ASP_LOGD("asp_advert_set_p2p_config_method() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_advert_get_p2p_config_method(asp_advert_service_h adv_service,
+               asp_wps_type_e *config_method)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(adv_service, __ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(config_method, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       *config_method = (asp_wps_type_e)service->config_method;
+
+       ASP_LOGD("asp_advert_get_p2p_config_method() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_advert_set_p2p_response(asp_advert_service_h adv_service,
+               char *rsp_info, int length)
+{
+       __ASP_LOG_FUNC_START__;
+
+       char *info = NULL;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       /* TODO fit the rsp info for length */
+       if (length <= 0 || length > DEFERRED_LEN) {
+               ASP_LOGE("invalid length!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!adv_service || !rsp_info) {
+               ASP_LOGE("NULL handler!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       info = g_strdup(rsp_info);
+       if (!info) {
+               ASP_LOGE("malloc() failed!!!.");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_OPERATION_FAILED;
+       }
+       g_free(service->rsp_info);
+       service->rsp_info = info;
+
+       ASP_LOGD("asp_advert_set_p2p_response() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+
+static GVariant* __g_hash_keys_to_g_variant(GHashTable *hash)
+{
+       GVariantBuilder builder;
+
+       __ASP_LOG_FUNC_START__;
+       g_variant_builder_init(&builder, G_VARIANT_TYPE("as"));
+/*     g_variant_builder_open(&builder, G_VARIANT_TYPE("a{sv}")); */
+
+       GHashTableIter iter;
+       gpointer key, value;
+
+       g_hash_table_iter_init(&iter, hash);
+       while (g_hash_table_iter_next(&iter, &key, &value)) {
+
+               ASP_LOGE("key [%s]", (char*)key);
+               g_variant_builder_add(&builder, "s", key);
+       }
+
+/*     g_variant_builder_close(&builder); */
+       __ASP_LOG_FUNC_END__;
+       return g_variant_builder_end(&builder);
+}
+
+static GVariant* __g_hash_table_to_g_variant(GHashTable *hash)
+{
+       GVariantBuilder builder;
+
+       __ASP_LOG_FUNC_START__;
+       g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
+
+       GHashTableIter iter;
+       gpointer key, value;
+
+       g_hash_table_iter_init(&iter, hash);
+       while (g_hash_table_iter_next(&iter, &key, &value))
+               g_variant_builder_add(&builder, "{sv}", key, g_variant_new_string((const gchar *)value));
+
+       __ASP_LOG_FUNC_END__;
+       return g_variant_builder_end(&builder);
+}
+
+int asp_advert_start_advertising(asp_advert_service_h adv_service)
+{
+       __ASP_LOG_FUNC_START__;
+
+       GVariantBuilder *builder = NULL;
+       GVariant *params = NULL;
+       GError *error = NULL;
+       GVariant *reply = 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(adv_service, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       // LCOV_EXCL_START
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+       g_variant_builder_add(builder, "{sv}", "adv_id", g_variant_new("u", service->adv_id));
+       g_variant_builder_add(builder, "{sv}", "discovery_tech", g_variant_new("i", service->discovery_tech));
+       g_variant_builder_add(builder, "{sv}", "preferred_connection", g_variant_new("y", service->preferred_connection));
+       g_variant_builder_add(builder, "{sv}", "auto_accept", g_variant_new("i", service->auto_accept));
+       g_variant_builder_add(builder, "{sv}", "status", g_variant_new("y", service->status));
+       g_variant_builder_add(builder, "{sv}", "role", g_variant_new("y", service->role));
+       g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", service->config_method));
+
+       if (service->instance_name)     /* This can be NULL if this is ASP 1.0 service */
+               g_variant_builder_add(builder, "{sv}", "instance_name", g_variant_new("s", service->instance_name));
+       if (service->service_type)      /* This can be NULL if Instance name is UUID */
+               g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", service->service_type));
+       if (g_hash_table_size(service->service_info_map) > 0)
+               g_variant_builder_add(builder, "{sv}", "service_info", __g_hash_table_to_g_variant(service->service_info_map));
+       if (service->rsp_info)
+               g_variant_builder_add(builder, "{sv}", "rsp_info", g_variant_new("s", service->rsp_info));
+       params = g_variant_new("(a{sv})", builder);
+       g_variant_builder_unref(builder);
+       ASP_LOGI("service type (%s) adv ID (%u)", service->service_type, service->adv_id);
+
+       reply = asp_dbus_method_call_sync(ASP_DAEMON_SERVICE_INTERFACE,
+                                                 "AdvertiseService", params, &error);
+       if (error != NULL) {
+               ASP_LOGE("asp_dbus_method_call_sync() failed."
+                               "error [%d: %s]", error->code, error->message);
+               ret = __asp_err_string_to_enum(error->message);
+               g_error_free(error);
+               __ASP_LOG_FUNC_END__;
+               return ret;
+       }
+
+       g_variant_get(reply, "(i)", &ret);
+       g_variant_unref(reply);
+
+       ASP_LOGD("%s() return : [%d]", __func__, ret);
+
+       __ASP_LOG_FUNC_END__;
+       return ret;
+       // LCOV_EXCL_STOP
+}
+
+int asp_advert_stop_advertising(asp_advert_service_h adv_service)
+{
+       __ASP_LOG_FUNC_START__;
+
+       GVariant *params = NULL;
+       GError *error = NULL;
+       GVariant *reply = 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(adv_service, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service  = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       // LCOV_EXCL_START
+       params = g_variant_new("(ui)", service->adv_id, service->discovery_tech);
+       reply = asp_dbus_method_call_sync(ASP_DAEMON_SERVICE_INTERFACE,
+                                                 "CancelAdvertiseService", params, &error);
+       if (error != NULL) {
+               ASP_LOGE("asp_dbus_method_call_sync() failed."
+                               "error [%d: %s]", error->code, error->message);
+               ret = __asp_err_string_to_enum(error->message);
+               g_error_free(error);
+               __ASP_LOG_FUNC_END__;
+               return ret;
+       }
+
+       g_variant_get(reply, "(i)", &ret);
+       g_variant_unref(reply);
+
+       ASP_LOGD("%s() return : [%d]", __func__, ret);
+
+       __ASP_LOG_FUNC_END__;
+       return ret;
+       // LCOV_EXCL_STOP
+}
+
+int asp_advert_change_service_status(asp_advert_service_h adv_service,
+               unsigned char status)
+{
+       __ASP_LOG_FUNC_START__;
+
+       GVariantBuilder *builder = NULL;
+       GVariant *params = NULL;
+       GError *error = NULL;
+       GVariant *reply = 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(adv_service, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", adv_service);
+
+       AspAdvert *service = getAdvert((void *)adv_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       // LCOV_EXCL_START
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+       g_variant_builder_add(builder, "{sv}", "adv_id", g_variant_new("u", service->adv_id));
+       g_variant_builder_add(builder, "{sv}", "auto_accept", g_variant_new("i", service->auto_accept));
+       service->status = status;
+       g_variant_builder_add(builder, "{sv}", "status", g_variant_new("y", service->status));
+       g_variant_builder_add(builder, "{sv}", "role", g_variant_new("y", service->role));
+       g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", service->config_method));
+
+       if (service->instance_name)     /* This can be NULL if this is ASP 1.0 service */
+               g_variant_builder_add(builder, "{sv}", "instance_name", g_variant_new("s", service->instance_name));
+       if (service->service_type)      /* This can be NULL if Instance name is UUID */
+               g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", service->service_type));
+       if (g_hash_table_size(service->service_info_map) > 0)
+               g_variant_builder_add(builder, "{sv}", "service_info", __g_hash_keys_to_g_variant(service->service_info_map));
+       if (service->rsp_info)
+               g_variant_builder_add(builder, "{sv}", "rsp_info", g_variant_new("s", service->rsp_info));
+
+       params = g_variant_new("(a{sv})", builder);
+       g_variant_builder_unref(builder);
+       ASP_LOGI("service type (%s) adv ID (%u)", service->service_type, service->adv_id);
+
+       reply = asp_dbus_method_call_sync(ASP_DAEMON_SERVICE_INTERFACE,
+                                                 "ServiceChangeStatus", params, &error);
+       if (error != NULL) {
+               ASP_LOGE("asp_dbus_method_call_sync() failed."
+                               "error [%d: %s]", error->code, error->message);
+               ret = __asp_err_string_to_enum(error->message);
+               g_error_free(error);
+               __ASP_LOG_FUNC_END__;
+               return ret;
+       }
+
+       g_variant_get(reply, "(i)", &ret);
+       g_variant_unref(reply);
+
+       ASP_LOGD("%s() return : [%d]", __func__, ret);
+
+       __ASP_LOG_FUNC_END__;
+       return ret;
+       // LCOV_EXCL_STOP
+}
+
+int asp_seek_create(char *service_type, asp_seek_service_h *seek_service)
+{
+       __ASP_LOG_FUNC_START__;
+
+       int res = ASP_ERROR_NONE;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+
+       if (!service_type || strlen(service_type) == 0 || !AspUtil::isValidServiceType(service_type)) {
+               ASP_LOGE("NULL Param [service_type]!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+
+       ASP_LOGD("service_type = [%s]", service_type);
+
+       if (!seek_service) {
+               ASP_LOGE("NULL Param [handle]!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+
+       AspSeek *service = new AspSeek;
+       ASP_LOGD("service [%p]", service);
+
+       service->service_type = g_strdup(service_type);
+       if (!service->service_type) {
+               ASP_LOGE("malloc() failed!!!.");
+               g_free(service);
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_OUT_OF_MEMORY;
+       }
+
+       addSeekToServiceList(service);
+
+       *seek_service = (asp_seek_service_h)service;
+       ASP_LOGD("asp_create_seek_handle() SUCCESS");
+       ASP_LOGD("seek handler [%p]", *seek_service);
+       __ASP_LOG_FUNC_END__;
+       return res;
+}
+
+int asp_seek_destroy(asp_seek_service_h seek_service)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(seek_service, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", seek_service);
+
+       AspSeek *service = getSeek((void *)seek_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       if (removeSeek(service) == false) {
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_OPERATION_FAILED;
+       }
+
+       ASP_LOGD("asp_seek_destroy() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_seek_add_info(asp_seek_service_h seek_service, const char *key)
+{
+       __ASP_LOG_FUNC_START__;
+
+       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(seek_service, __ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(key, __ASP_LOG_FUNC_END__);
+
+       if (strlen(key) == 0) {
+               ASP_LOGE("NULL handler!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+
+       ASP_LOGD("service [%p]", seek_service);
+
+       AspSeek *service = getSeek((void *)seek_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       g_hash_table_replace(service->service_info_map, g_strdup(key), NULL);
+
+       ASP_LOGD("service info [%d]", g_hash_table_size(service->service_info_map));
+       ASP_LOGD("asp_add_seek_info() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return res;
+
+}
+
+int asp_seek_remove_info(asp_seek_service_h seek_service, const char *key)
+{
+       __ASP_LOG_FUNC_START__;
+
+       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(seek_service, __ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(key, __ASP_LOG_FUNC_END__);
+
+       if (strlen(key) == 0) {
+               ASP_LOGE("NULL handler!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+       ASP_LOGD("service [%p]", seek_service);
+
+       AspSeek *service = getSeek((void *)seek_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       /* TODO: remove seek info */
+       g_hash_table_remove(service->service_info_map, key);
+
+       ASP_LOGD("asp_remove_seek_info() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return res;
+
+}
+
+int asp_seek_set_discovery_tech(asp_seek_service_h seek_service, int discovery_tech)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(seek_service, __ASP_LOG_FUNC_END__);
+
+       if (!((discovery_tech & ASP_DISCOVERY_TECH_P2P) |
+                       (discovery_tech & ASP_DISCOVERY_TECH_NFC) |
+                       (discovery_tech & ASP_DISCOVERY_TECH_BLE) |
+                       (discovery_tech & ASP_DISCOVERY_TECH_INFRA) |
+                       (discovery_tech & ASP_DISCOVERY_TECH_NAN))) {
+               ASP_LOGE("invalid parameter!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+
+       ASP_LOGD("service [%p]", seek_service);
+
+       AspSeek *service = getSeek((void *)seek_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+       service->discovery_tech = discovery_tech;
+
+       ASP_LOGD("asp_set_seeking_tech() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+int asp_seek_set_preferred_connection(asp_seek_service_h seek_service,
+               unsigned char preferred_connection)
+{
+       __ASP_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_ASP);
+       RET_ERR_IF_NOT_INITIALIZED(__ASP_LOG_FUNC_END__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(seek_service, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", seek_service);
+
+       AspSeek *service = getSeek((void *)seek_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+       service->preferred_connection = preferred_connection;
+
+       ASP_LOGD("asp_set_seeking_preferred_connection() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return ASP_ERROR_NONE;
+}
+
+
+int asp_seek_start(asp_seek_service_h seek_service)
+{
+       __ASP_LOG_FUNC_START__;
+
+       GVariantBuilder *builder = NULL;
+       GVariant *params = NULL;
+       GError *error = NULL;
+       GVariant *reply = 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(seek_service, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", seek_service);
+
+       AspSeek *service = getSeek((void *)seek_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       // LCOV_EXCL_START
+       ASP_LOGD("service info [%d]", g_hash_table_size(service->service_info_map));
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+       g_variant_builder_add(builder, "{sv}", "discovery_tech", g_variant_new("i", service->discovery_tech));
+       g_variant_builder_add(builder, "{sv}", "preferred_connection", g_variant_new("y", service->preferred_connection));
+       g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", service->service_type));
+       if (g_hash_table_size(service->service_info_map) > 0) {
+               ASP_LOGE("Service info");
+               g_variant_builder_add(builder, "{sv}", "service_info", __g_hash_keys_to_g_variant(service->service_info_map));
+       }
+
+       params = g_variant_new("(a{sv})", builder);
+       g_variant_builder_unref(builder);
+       ASP_LOGI("service name (%s)", service->service_name);
+
+       reply = asp_dbus_method_call_sync(ASP_DAEMON_SERVICE_INTERFACE,
+                                                 "SeekService", params, &error);
+       if (error != NULL) {
+               ASP_LOGE("asp_dbus_method_call_sync() failed."
+                               "error [%d: %s]", error->code, error->message);
+               ret = __asp_err_string_to_enum(error->message);
+               g_error_free(error);
+               __ASP_LOG_FUNC_END__;
+               return ret;
+       }
+
+       g_variant_get(reply, "(it)", &ret, &(service->search_id));
+       g_variant_unref(reply);
+
+       ASP_LOGD("%s() return : [%d]", __func__, ret);
+
+       __ASP_LOG_FUNC_END__;
+       return ret;
+       // LCOV_EXCL_STOP
+}
+
+int asp_seek_stop(asp_seek_service_h seek_service)
+{
+       __ASP_LOG_FUNC_START__;
+
+       GVariant *params = NULL;
+       GError *error = NULL;
+       GVariant *reply = 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(seek_service, __ASP_LOG_FUNC_END__);
+
+       AspSeek *service = getSeek((void *)seek_service);
+       if (service == NULL) {
+               ASP_LOGE("Service NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_OPERATION_FAILED;
+       }
+       ASP_LOGD("service_type = [%s]", service->service_type);
+
+       // LCOV_EXCL_START
+       params = g_variant_new("(ti)", service->search_id, service->discovery_tech);
+       reply = asp_dbus_method_call_sync(ASP_DAEMON_SERVICE_INTERFACE,
+                                                 "CancelSeekService", params, &error);
+       if (error != NULL) {
+               ASP_LOGE("asp_dbus_method_call_sync() failed."
+                               "error [%d: %s]", error->code, error->message);
+               ret = __asp_err_string_to_enum(error->message);
+               g_error_free(error);
+               __ASP_LOG_FUNC_END__;
+               return ret;
+       }
+
+       g_variant_get(reply, "(i)", &ret);
+       g_variant_unref(reply);
+
+       ASP_LOGD("%s() return : [%d]", __func__, ret);
+
+       __ASP_LOG_FUNC_END__;
+       return ret;
+       // LCOV_EXCL_STOP
+}
+
+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__);
+
+       if (!service_mac || strlen(service_mac) != (MACSTR_LEN -1)) {
+               ASP_LOGE("Invalid Param [service_mac]!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+
+       if (adv_id == 0 || !session) {
+               ASP_LOGE("NULL Param [session]!");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_INVALID_PARAMETER;
+       }
+
+       service = (asp_client_session_s *)g_try_malloc0(sizeof(asp_client_session_s));
+       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);
+
+       /* Session ID will be generated by asp-manager */
+       *session = (asp_session_h)service;
+       ASP_LOGD("asp_session_create() SUCCESS");
+
+       ASP_LOGD("service [%p]", *session);
+       __ASP_LOG_FUNC_END__;
+       return res;
+}
+
+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);
+       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) {
+               __ASP_LOG_FUNC_END__;
+               return res;
+       }
+
+       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__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(session_mac, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", session);
+
+       service = __get_session((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;
+
+       ASP_LOGD("asp_session_get_mac() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return res;
+}
+
+
+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__);
+       RET_ERR_IF_PARAMETER_IS_NOT_VALID(session_id, __ASP_LOG_FUNC_END__);
+
+       ASP_LOGD("service [%p]", session);
+
+       service = __get_session((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;
+
+       ASP_LOGD("asp_session_get_id() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return res;
+}
+
+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);
+       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;
+
+       ASP_LOGD("asp_session_set_info() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return res;
+}
+
+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);
+       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;
+
+       ASP_LOGD("asp_session_get_info() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return res;
+}
+
+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);
+       if (service == NULL) {
+               ASP_LOGE("Session NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SESSION_NOT_FOUND;
+       }
+
+       service->network_role = role;
+
+       ASP_LOGD("asp_session_set_p2p_role_scheme() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return res;
+}
+
+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);
+       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;
+
+       ASP_LOGD("asp_session_get_p2p_role_scheme() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return res;
+}
+
+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);
+       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__;
+               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;
+}
+
+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);
+       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;
+
+       ASP_LOGD("asp_session_get_p2p_config_method() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return res;
+}
+
+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);
+       if (service == NULL) {
+               ASP_LOGE("Session NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SESSION_NOT_FOUND;
+       }
+
+       *status = service->state;
+
+       ASP_LOGD("asp_session_get_close_status() SUCCESS");
+
+       __ASP_LOG_FUNC_END__;
+       return res;
+}
+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);
+       if (service == NULL) {
+               ASP_LOGE("Session NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SESSION_NOT_FOUND;
+       }
+
+       // 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));
+
+       params = g_variant_new("(a{sv})", builder);
+       g_variant_builder_unref(builder);
+
+       reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
+                                                 "ConnectSession", params, &error);
+       if (error != NULL) {
+               ASP_LOGE("asp_dbus_method_call_sync() failed."
+                               "error [%d: %s]", error->code, error->message);
+               ret = __asp_err_string_to_enum(error->message);
+               g_error_free(error);
+               __ASP_LOG_FUNC_END__;
+               return ret;
+       }
+
+       g_variant_get(reply, "(iu&s)", &ret, &(service->session_id), &str);
+       if (str != NULL)
+               g_strlcpy(service->session_mac, str, MACSTR_LEN);
+       g_variant_unref(reply);
+
+       ASP_LOGD("%s() return : [%d]", __func__, ret);
+
+       __ASP_LOG_FUNC_END__;
+       return ret;
+       // LCOV_EXCL_STOP
+}
+
+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);
+       if (service == NULL) {
+               ASP_LOGE("Session NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SESSION_NOT_FOUND;
+       }
+
+       // 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));
+       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,
+                                                 "ConfirmSession", params, &error);
+       if (error != NULL) {
+               ASP_LOGE("asp_dbus_method_call_sync() failed."
+                               "error [%d: %s]", error->code, error->message);
+               ret = __asp_err_string_to_enum(error->message);
+               g_error_free(error);
+               __ASP_LOG_FUNC_END__;
+               return ret;
+       }
+
+       g_variant_get(reply, "(i)", &ret);
+       g_variant_unref(reply);
+
+       ASP_LOGD("%s() return : [%d]", __func__, ret);
+
+       __ASP_LOG_FUNC_END__;
+       return ret;
+       // LCOV_EXCL_STOP
+}
+
+int asp_session_get_handle(char *session_mac, unsigned int session_id,
+               asp_session_h *session)
+
+{
+       __ASP_LOG_FUNC_START__;
+       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(session_mac, __ASP_LOG_FUNC_END__);
+
+       // LCOV_EXCL_START
+       int ret = ASP_ERROR_NONE;
+       GError *error = NULL;
+       GVariant *params = g_variant_new("(su)", session_mac, session_id);
+       GVariant *reply = asp_dbus_method_call_sync(ASP_DAEMON_SESSION_INTERFACE,
+                                                 "GetSession", params, &error);
+       if (error != NULL) {
+               ASP_LOGE("asp_dbus_method_call_sync() failed."
+                               "error [%d: %s]", error->code, error->message);
+               ret = __asp_err_string_to_enum(error->message);
+               g_error_free(error);
+               __ASP_LOG_FUNC_END__;
+               return ret;
+       }
+
+       if (!reply) {
+               ASP_LOGE("reply is NULL!!");
+               __ASP_LOG_FUNC_END__;
+               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);
+       g_variant_unref(reply);
+       if (variant == NULL) {
+               ASP_LOGE("Out of memory");
+               return ASP_ERROR_OUT_OF_MEMORY;
+       }
+
+       service->advertisement_id = variant->adv_id;
+       __clear_asp_variant(variant);
+
+       *session = service;
+       asp_sessions = g_list_prepend(asp_sessions, service);
+
+       ASP_LOGD("%s() return : [%d]", __func__, ret);
+       __ASP_LOG_FUNC_END__;
+       return ret;
+       // LCOV_EXCL_STOP
+}
+
+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);
+       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,
+                                                 "SetSessionReady", params, &error);
+       if (error != NULL) {
+               ASP_LOGE("asp_dbus_method_call_sync() failed."
+                               "error [%d: %s]", error->code, error->message);
+               ret = __asp_err_string_to_enum(error->message);
+               g_error_free(error);
+               __ASP_LOG_FUNC_END__;
+               return ret;
+       }
+
+       g_variant_get(reply, "(i)", &ret);
+       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);
+       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,
+                                                 "CloseSession", params, &error);
+       if (error != NULL) {
+               ASP_LOGE("asp_dbus_method_call_sync() failed."
+                               "error [%d: %s]", error->code, error->message);
+               ret = __asp_err_string_to_enum(error->message);
+               g_error_free(error);
+               __ASP_LOG_FUNC_END__;
+               return ret;
+       }
+
+       g_variant_get(reply, "(i)", &ret);
+       g_variant_unref(reply);
+
+       ASP_LOGD("%s() return : [%d]", __func__, ret);
+
+       __ASP_LOG_FUNC_END__;
+       return ret;
+}
+
+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);
+       if (service == NULL) {
+               ASP_LOGE("Session NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SESSION_NOT_FOUND;
+       }
+
+       // 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));
+       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,
+                                                 "BoundPort", params, &error);
+       if (error != NULL) {
+               ASP_LOGE("asp_dbus_method_call_sync() failed."
+                               "error [%d: %s]", error->code, error->message);
+               ret = __asp_err_string_to_enum(error->message);
+               g_error_free(error);
+               __ASP_LOG_FUNC_END__;
+               return ret;
+       }
+
+       g_variant_get(reply, "(i)", &ret);
+       g_variant_unref(reply);
+
+       ASP_LOGD("%s() return : [%d]", __func__, ret);
+
+       __ASP_LOG_FUNC_END__;
+       return ret;
+       // LCOV_EXCL_STOP
+}
+
+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);
+       if (service == NULL) {
+               ASP_LOGE("Session NOT registered");
+               __ASP_LOG_FUNC_END__;
+               return ASP_ERROR_SESSION_NOT_FOUND;
+       }
+
+       // 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));
+       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,
+                                                 "ReleasePort", params, &error);
+       if (error != NULL) {
+               ASP_LOGE("asp_dbus_method_call_sync() failed."
+                               "error [%d: %s]", error->code, error->message);
+               ret = __asp_err_string_to_enum(error->message);
+               g_error_free(error);
+               __ASP_LOG_FUNC_END__;
+               return ret;
+       }
+
+       g_variant_get(reply, "(i)", &ret);
+       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-dbus.c b/src/asp-dbus.c
deleted file mode 100644 (file)
index 680c03b..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Application Service Platform(ASP)
- *
- * Copyright (c) 2015 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.
- *
- */
-
-/**
- * This file implements asp dbus utility functions.
- *
- * @file        asp-dbus.c
- * @author      Jiung Yu (jiung.yu@samsung.com)
- * @version     0.1
- */
-
-#include "asp.h"
-
-#include "asp-dbus.h"
-#include "asp-log.h"
-#include "asp-util.h"
-#include "asp-client.h"
-
-const char *service_path = ASP_DAEMON_SERVICE_PATH;
-const char *session_path = ASP_DAEMON_SESSION_PATH;
-
-typedef struct {
-       GDBusConnection *connection;
-       guint signal_subscribe_id;
-} gdbus_connection_data;
-
-static gdbus_connection_data gdbus_conn = {NULL, 0};
-
-static struct {
-       const char *interface;
-       const char *member;
-       void (*function) (GDBusConnection *connection,
-                         const gchar *object_path,
-                         GVariant *parameters);
-} asp_dbus_signal_map[] = {
-               {
-                               ASP_DAEMON_SERVICE_INTERFACE,
-                               "SearchResult",
-                               asp_process_seek_search_result
-               },
-               {
-                               ASP_DAEMON_SERVICE_INTERFACE,
-                               "AdvertiseStatusChanged",
-                               asp_process_advert_status_changed
-               },
-               {
-                               ASP_DAEMON_SESSION_INTERFACE,
-                               "SessionRequest",
-                               asp_process_session_request
-               },
-               {
-                               ASP_DAEMON_SESSION_INTERFACE,
-                               "SessionConfigRequest",
-                               asp_process_session_config_request
-               },
-               {
-                               ASP_DAEMON_SESSION_INTERFACE,
-                               "ConnectStatus",
-                               asp_process_session_connect_status
-               },
-               {
-                               ASP_DAEMON_SESSION_INTERFACE,
-                               "SessionStatus",
-                               asp_process_session_status
-               },
-               {
-                               ASP_DAEMON_SESSION_INTERFACE,
-                               "PortStatus",
-                               asp_process_session_port_status
-               },
-               {
-                               NULL,
-                               NULL,
-                               NULL
-               }
-};
-//LCOV_EXCL_START
-static void _asp_dbus_signal_cb(GDBusConnection *connection,
-                                       const gchar *sender, const gchar *object_path,
-                                       const gchar *interface, const gchar *signal,
-                                       GVariant *parameters, gpointer user_data)
-{
-       int i = 0;
-
-       ASP_LOGD("Signal Name [%s]", signal);
-       DBUS_DEBUG_VARIANT(parameters);
-
-       for (i = 0; asp_dbus_signal_map[i].member != NULL; i++) {
-               if (!g_strcmp0(signal, asp_dbus_signal_map[i].member) &&
-                   !g_strcmp0(interface, asp_dbus_signal_map[i].interface) &&
-                   asp_dbus_signal_map[i].function != NULL) {
-                       asp_dbus_signal_map[i].function(connection, object_path, parameters);
-                       break;
-               }
-       }
-}
-
-GVariant *asp_dbus_method_call_sync_debug(const char* interface_name,
-                                                 const char* method,
-                                                 GVariant *params,
-                                                 GError **error,
-                                                 const char *calling_func)
-{
-       GVariant *reply = NULL;
-       const char *object_path = NULL;
-
-       if (gdbus_conn.connection == NULL) {
-               ASP_LOGE("GDBusconnection is NULL");
-               return reply;
-       }
-
-       ASP_LOGD("[%s][%s.%s]", calling_func, interface_name, method);
-       DBUS_DEBUG_VARIANT(params);
-
-       if (g_strcmp0(ASP_DAEMON_SERVICE_INTERFACE, interface_name) == 0)
-               object_path = service_path;
-       else
-               object_path = session_path;
-
-       reply = g_dbus_connection_call_sync(gdbus_conn.connection,
-                       ASP_DAEMON_SERVICE, /* bus name */
-                       object_path, /* object path */
-                       interface_name, /* interface name */
-                       method, /* method name */
-                       params, /* GVariant *params */
-                       NULL, /* reply_type */
-                       G_DBUS_CALL_FLAGS_NONE, /* flags */
-                       ASP_DBUS_REPLY_TIMEOUT_SYNC, /* timeout */
-                       NULL, /* cancellable */
-                       error); /* error */
-       DBUS_DEBUG_VARIANT(reply);
-       return reply;
-}
-//LCOV_EXCL_STOP
-gboolean asp_dbus_init(void)
-{
-       GError *Error = NULL;
-       GDBusConnection *connection = NULL;
-
-       connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &Error);
-       if (connection == NULL) {
-               ASP_LOGE("Failed to get connection, Error[%s]", Error->message);
-               g_error_free(Error);
-               return FALSE;
-       }
-
-       gdbus_conn.connection = connection;
-
-       /* subscribe signal handler */
-       gdbus_conn.signal_subscribe_id = g_dbus_connection_signal_subscribe(connection,
-
-                       ASP_DAEMON_SERVICE, /* bus name */
-                       NULL, /* interface */
-                       NULL, /* member */
-                       NULL, /* object_path */
-                       NULL, /* arg0 */
-                       G_DBUS_SIGNAL_FLAGS_NONE,
-                       _asp_dbus_signal_cb,
-                       NULL,
-                       NULL);
-       ASP_LOGD("Subscribed dbus signals [%d]", gdbus_conn.signal_subscribe_id);
-       return TRUE;
-}
-
-void asp_dbus_deinit(void)
-{
-       if (gdbus_conn.connection == NULL)
-               return;
-
-       /* unsubscribe signal handler */
-       g_dbus_connection_signal_unsubscribe(gdbus_conn.connection, gdbus_conn.signal_subscribe_id);
-       gdbus_conn.signal_subscribe_id = 0;
-
-       /* unref gdbus connection */
-       g_object_unref(gdbus_conn.connection);
-       gdbus_conn.connection = NULL;
-}
diff --git a/src/asp-dbus.cpp b/src/asp-dbus.cpp
new file mode 100644 (file)
index 0000000..f169cc2
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+ * Application Service Platform(ASP)
+ *
+ * Copyright (c) 2015 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.
+ *
+ */
+
+/**
+ * This file implements asp dbus utility functions.
+ *
+ * @file               asp-dbus.c
+ * @author       Jiung Yu (jiung.yu@samsung.com)
+ * @version     0.1
+ */
+
+#include "asp.h"
+
+#include "asp-dbus.h"
+#include "asp-log.h"
+#include "asp-defs.h"
+#include "asp-client.h"
+
+const char *service_path = ASP_DAEMON_SERVICE_PATH;
+const char *session_path = ASP_DAEMON_SESSION_PATH;
+
+typedef struct {
+       GDBusConnection *connection;
+       guint signal_subscribe_id;
+} gdbus_connection_data;
+
+static gdbus_connection_data gdbus_conn = {NULL, 0};
+
+static struct {
+       const char *interface;
+       const char *member;
+       void (*function) (GDBusConnection *connection,
+                         const gchar *object_path,
+                         GVariant *parameters);
+} asp_dbus_signal_map[] = {
+               {
+                               ASP_DAEMON_SERVICE_INTERFACE,
+                               "SearchResult",
+                               asp_process_seek_search_result
+               },
+               {
+                               ASP_DAEMON_SERVICE_INTERFACE,
+                               "AdvertiseStatusChanged",
+                               asp_process_advert_status_changed
+               },
+               {
+                               ASP_DAEMON_SESSION_INTERFACE,
+                               "SessionRequest",
+                               asp_process_session_request
+               },
+               {
+                               ASP_DAEMON_SESSION_INTERFACE,
+                               "SessionConfigRequest",
+                               asp_process_session_config_request
+               },
+               {
+                               ASP_DAEMON_SESSION_INTERFACE,
+                               "ConnectStatus",
+                               asp_process_session_connect_status
+               },
+               {
+                               ASP_DAEMON_SESSION_INTERFACE,
+                               "SessionStatus",
+                               asp_process_session_status
+               },
+               {
+                               ASP_DAEMON_SESSION_INTERFACE,
+                               "PortStatus",
+                               asp_process_session_port_status
+               },
+               {
+                               NULL,
+                               NULL,
+                               NULL
+               }
+};
+//LCOV_EXCL_START
+static void _asp_dbus_signal_cb(GDBusConnection *connection,
+                                       const gchar *sender, const gchar *object_path,
+                                       const gchar *interface, const gchar *signal,
+                                       GVariant *parameters, gpointer user_data)
+{
+       int i = 0;
+
+       ASP_LOGD("Signal Name [%s]", signal);
+       DBUS_DEBUG_VARIANT(parameters);
+
+       for (i = 0; asp_dbus_signal_map[i].member != NULL; i++) {
+               if (!g_strcmp0(signal, asp_dbus_signal_map[i].member) &&
+                       !g_strcmp0(interface, asp_dbus_signal_map[i].interface) &&
+                       asp_dbus_signal_map[i].function != NULL) {
+                       asp_dbus_signal_map[i].function(connection, object_path, parameters);
+                       break;
+               }
+       }
+}
+
+GVariant *asp_dbus_method_call_sync_debug(const char* interface_name,
+                                                 const char* method,
+                                                 GVariant *params,
+                                                 GError **error,
+                                                 const char *calling_func)
+{
+       GVariant *reply = NULL;
+       const char *object_path = NULL;
+
+       if (gdbus_conn.connection == NULL) {
+               ASP_LOGE("GDBusconnection is NULL");
+               return reply;
+       }
+
+       ASP_LOGD("[%s][%s.%s]", calling_func, interface_name, method);
+       DBUS_DEBUG_VARIANT(params);
+
+       if (g_strcmp0(ASP_DAEMON_SERVICE_INTERFACE, interface_name) == 0)
+               object_path = service_path;
+       else
+               object_path = session_path;
+
+       reply = g_dbus_connection_call_sync(gdbus_conn.connection,
+                       ASP_DAEMON_SERVICE, /* bus name */
+                       object_path, /* object path */
+                       interface_name, /* interface name */
+                       method, /* method name */
+                       params, /* GVariant *params */
+                       NULL, /* reply_type */
+                       G_DBUS_CALL_FLAGS_NONE, /* flags */
+                       ASP_DBUS_REPLY_TIMEOUT_SYNC, /* timeout */
+                       NULL, /* cancellable */
+                       error); /* error */
+       DBUS_DEBUG_VARIANT(reply);
+       return reply;
+}
+//LCOV_EXCL_STOP
+gboolean asp_dbus_init(void)
+{
+       GError *Error = NULL;
+       GDBusConnection *connection = NULL;
+
+       connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &Error);
+       if (connection == NULL) {
+               ASP_LOGE("Failed to get connection, Error[%s]", Error->message);
+               g_error_free(Error);
+               return FALSE;
+       }
+
+       gdbus_conn.connection = connection;
+
+       /* subscribe signal handler */
+       gdbus_conn.signal_subscribe_id = g_dbus_connection_signal_subscribe(connection,
+
+                       ASP_DAEMON_SERVICE, /* bus name */
+                       NULL, /* interface */
+                       NULL, /* member */
+                       NULL, /* object_path */
+                       NULL, /* arg0 */
+                       G_DBUS_SIGNAL_FLAGS_NONE,
+                       _asp_dbus_signal_cb,
+                       NULL,
+                       NULL);
+       ASP_LOGD("Subscribed dbus signals [%d]", gdbus_conn.signal_subscribe_id);
+       return TRUE;
+}
+
+void asp_dbus_deinit(void)
+{
+       if (gdbus_conn.connection == NULL)
+               return;
+
+       /* unsubscribe signal handler */
+       g_dbus_connection_signal_unsubscribe(gdbus_conn.connection, gdbus_conn.signal_subscribe_id);
+       gdbus_conn.signal_subscribe_id = 0;
+
+       /* unref gdbus connection */
+       g_object_unref(gdbus_conn.connection);
+       gdbus_conn.connection = NULL;
+}
diff --git a/src/asp-seek.cpp b/src/asp-seek.cpp
new file mode 100644 (file)
index 0000000..a035ad4
--- /dev/null
@@ -0,0 +1,89 @@
+#include "asp-seek.h"
+#include "asp-log.h"
+
+static __thread GList *asp_seeks = NULL;
+
+AspSeek::AspSeek()
+{
+       service_name = NULL;
+       service_type = NULL;
+       rsp_info = NULL;
+       service_info_map = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
+}
+
+AspSeek::~AspSeek()
+{
+       g_free(service_name);
+       g_free(service_type);
+       g_free(rsp_info);
+       g_hash_table_remove_all(service_info_map);
+       g_hash_table_destroy(service_info_map);
+}
+
+AspSeek *getSeek(void *handle)
+{
+       __ASP_LOG_FUNC_START__;
+       AspSeek *service = NULL;
+       GList *temp = NULL;
+
+       if (asp_seeks == NULL) {
+               __ASP_LOG_FUNC_END__;
+               return NULL;
+       }
+
+       ASP_LOGD("service [%p]", handle);
+
+       temp = g_list_first(asp_seeks);
+       for (temp = g_list_first(asp_seeks); temp != NULL; temp = g_list_next(temp)) {
+               service = (AspSeek *)temp->data;
+
+               ASP_LOGD("temp [%p]", service);
+               if (service != NULL && service == handle)
+                       break;
+               service = NULL;
+       }
+       __ASP_LOG_FUNC_END__;
+       return service;
+}
+
+AspSeek *getSeekById(long long unsigned id)
+{
+       AspSeek *seek = NULL;
+       GList *temp = NULL;
+
+       for (temp = g_list_first(asp_seeks);
+                       temp != NULL; temp = g_list_next(temp)) {
+               seek = (AspSeek *)temp->data;
+               if (seek != NULL && seek->search_id == id)
+                       break;
+               seek = NULL;
+       }
+
+       return seek;
+
+}
+
+bool removeSeek(void *handle)
+{
+       AspSeek *service = getSeek(handle);
+
+       if (service == NULL) {
+               __ASP_LOG_FUNC_END__;
+               return false;
+       }
+
+       removeSeekFromServiceList(service);
+       delete service;
+
+       return true;
+}
+
+void addSeekToServiceList(AspSeek *service)
+{
+       asp_seeks = g_list_prepend(asp_seeks, service);
+}
+
+void removeSeekFromServiceList(AspSeek *service)
+{
+       asp_seeks = g_list_remove(asp_seeks, service);
+}
\ No newline at end of file
diff --git a/src/asp-utils.cpp b/src/asp-utils.cpp
new file mode 100644 (file)
index 0000000..f10f222
--- /dev/null
@@ -0,0 +1,76 @@
+#include "asp-conts.h"
+#include "asp-utils.h"
+#include <glib.h>
+
+bool AspUtil::isValidServiceType(const std::string &type)
+{
+       const char *service_type = type.c_str();
+       int srv_name_len = type.size() - PROTO_LEN - 1;
+       int pos;
+
+       if (srv_name_len < 2)
+               return isValidServiceTypeForWfds(type);
+
+       const char *proto = &(service_type[srv_name_len + 1]);
+       if (strncmp(proto, "_udp", PROTO_LEN) != 0 && strncmp(proto, "_tcp", PROTO_LEN) != 0)
+               return isValidServiceTypeForWfds(type);
+
+       /* Service Type = <_>service_name.<_><Transport protocol>
+       * Service Name description:
+       * Shall be at least 1 character and no more than 15 characters long
+       * Shall contain only US-ASCII [ANSI.X3.4-1986] letters 'A' - 'Z' and
+       * 'a' - 'z', digits '0' - '9', and hyphens ('-', ASCII 0x2D or decimal 45)
+       * Shall contain at least one letter ('A' - 'Z' or 'a' - â€˜z')
+       * Shall NOT begin or end with a hyphen
+       */
+
+       if (srv_name_len > MAX_SERVICE_NAME_LEN + 1)
+               return false;
+
+       if (service_type[0] != '_' || service_type[1] == '-' ||
+               service_type[srv_name_len] != '.')
+               return false;
+
+       pos = 1;
+       while (pos < srv_name_len) {
+               if (!g_ascii_isalpha(service_type[pos]) &&
+                       !g_ascii_isdigit(service_type[pos]) &&
+                       service_type[pos] != '-')
+                       return false;
+               pos++;
+       }
+
+       return true;
+}
+
+bool AspUtil::isValidServiceTypeForWfds(const std::string &type)
+{
+       /* Wi-Fi Peer-to-Peer Services Technical Specification v1.1
+       * The UTF-8 encoded service name (and therefore the contents
+       * of each service_name parameter) shall be 255 bytes or less
+       */
+       if (type.size() > MAX_SERVICE_TYPE_LEN)
+               return false;
+
+       for (auto c : type) {
+               if (!g_ascii_isalpha(c) &&
+                       !g_ascii_isdigit(c) &&
+                       c != '.' &&
+                       c != '-')
+                       return false;
+       }
+       return true;
+}
+
+bool AspUtil::isValidKey(const std::string &key)
+{
+       if (key.size() > KEY_LEN)
+               return false;
+
+       for (auto c : key) {
+               if (c < KEY_MIN || c > KEY_MAX)
+                       return false;
+       }
+
+       return true;
+}
diff --git a/src/include/asp-advert.h b/src/include/asp-advert.h
new file mode 100644 (file)
index 0000000..cc726c9
--- /dev/null
@@ -0,0 +1,37 @@
+#pragma once
+
+#include <glib.h>
+#include <string>
+
+class AspAdvert {
+public:
+    AspAdvert();
+    ~AspAdvert();
+
+       int setServiceType(const std::string &type);
+       int addInfo(const std::string &key, const std::string &value);
+       int setDiscoveryTech(int tech);
+
+    unsigned int adv_id;
+       long long unsigned search_id;
+       int auto_accept;
+       int discovery_tech;
+       unsigned char preferred_connection;
+
+       unsigned char status;
+       unsigned char role;
+       unsigned int config_method;
+       unsigned char tran_id;
+
+       char *instance_name;
+       char *serivce_name;
+       char *service_type;
+       GHashTable *service_info_map;
+       char *rsp_info;
+};
+
+AspAdvert *getAdvert(void *handle);
+AspAdvert *getAdvertById(unsigned int id);
+bool removeAdvert(void *hahndle);
+void addAdvertToServiceList(AspAdvert *service);
+void removeAdvertFromServiceList(AspAdvert *service);
\ No newline at end of file
index 2abeb431d94ef6e13916f175f6c5bac2a5b259c3..7e398a4ec37036d3543d20b048a07732ae14f650 100755 (executable)
 #define MACSTR_LEN 18
 #define ASP_SERVICE_INFO_MAX_LEN 200
 
-/**
- * Application Service Platform(ASP) advertise data structure
- */
-typedef struct {
-       unsigned int adv_id;
-       long long unsigned search_id;
-       int auto_accept;
-       int discovery_tech;
-       unsigned char preferred_connection;
-
-       unsigned char status;
-       unsigned char role;
-       unsigned int config_method;
-       unsigned char tran_id;
-
-       char *instance_name;
-       char *serivce_name;
-       char *service_type;
-       GHashTable *service_info_map;
-       char *rsp_info;
-} asp_client_advert_s;
-
-/**
- * Application Service Platform(ASP) seek data structure
- */
-typedef struct {
-       unsigned int adv_id;
-       long long unsigned search_id;
-       int auto_accept;
-       int discovery_tech;
-       unsigned char preferred_connection;
-
-       unsigned char status;
-       unsigned char role;
-       unsigned int config_method;
-       unsigned char tran_id;
-
-       char *serivce_name;
-       char *service_type;
-       GHashTable *service_info_map;
-       char *rsp_info;
-} asp_client_seek_s;
-
 /**
  * Application Service Platform(ASP) session data structure
  */
diff --git a/src/include/asp-conts.h b/src/include/asp-conts.h
new file mode 100644 (file)
index 0000000..d48f8d5
--- /dev/null
@@ -0,0 +1,13 @@
+#pragma once
+
+#define INSTANCE_NAME_LEN 63
+#define MAX_SERVICE_NAME_LEN 15
+#define MAX_SERVICE_TYPE_LEN 255
+#define PROTO_LEN 4
+#define KEY_LEN 9 /* http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt */
+#define KEY_MIN 0x20 /* RFC 20 */
+#define KEY_MAX 0x7E
+
+#define SERVICE_INFO_LEN 65000
+#define DEFERRED_LEN 144
+#define SESSION_INFO_LEN 144
\ No newline at end of file
index 013df35cfbdd6cb2596c62ddccd745d5cd599bfb..4b8998f9d9ac56da9cd1f7772d3336422e571d96 100755 (executable)
 #ifndef __ASP_DBUS_H__
 #define __ASP_DBUS_H__
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 #include <gio/gio.h>
 
 #define ASP_DAEMON_SERVICE "net.asp"
@@ -71,8 +67,4 @@ GVariant *asp_dbus_method_call_sync_debug(const char* interface_name,
 
 int asp_dbus_unpack_ay(unsigned char *dst, GVariant *src, int size);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* __ASP_DBUS_H__ */
diff --git a/src/include/asp-defs.h b/src/include/asp-defs.h
new file mode 100755 (executable)
index 0000000..06cce3c
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Application Service Platform(ASP)
+ *
+ * Copyright (c) 2015 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.
+ *
+ */
+
+/**
+ * This file declares macros for usefuls.
+ *
+ * @file        asp-util.h
+ * @author      Jiung Yu (jiung.yu.com)
+ * @version     0.1
+ */
+
+#ifndef __ASP_UTIL_H__
+#define __ASP_UTIL_H__
+
+#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
+#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
+#define IP2STR(a) (a)[0], (a)[1], (a)[2], (a)[3]
+#define IPSTR "%d.%d.%d.%d"
+#define MAC2SECSTR(a) (a)[0], (a)[4], (a)[5]
+#define MACSECSTR "%02x:%02x:%02x"
+#define IP2SECSTR(a) (a)[0], (a)[3]
+#define IPSECSTR "%d..%d"
+
+#define MACSTR_LEN 18
+#define MACADDR_LEN 6
+#define IP_LEN 6
+#define IPSTR_LEN 16
+#define WPS_PIN_LEN 8
+
+#define TIZEN_FEATURE_ASP "tizen.org/feature/network.asp"
+
+#define CHECK_FEATURE_SUPPORTED(feature_name)\
+       do {\
+               bool feature_supported = FALSE;\
+               if (!system_info_get_platform_bool(feature_name, &feature_supported)) {\
+                       if (feature_supported == FALSE) {\
+                               LOGE("%s feature is disabled", feature_name);\
+                               return ASP_ERROR_NOT_SUPPORTED;\
+                       } \
+               } else {\
+                       LOGE("Error - Feature getting from System Info");\
+                       return ASP_ERROR_OPERATION_FAILED;\
+               } \
+       } while (0)
+
+#define RET_ERR_IF_PARAMETER_IS_NOT_VALID(arg, release)\
+       do {\
+               if (!(arg)) {\
+                       ASP_LOGE("Invalid parameter");\
+                       release;\
+                       return ASP_ERROR_INVALID_PARAMETER;\
+               }\
+       } while(0)
+
+#define RET_ERR_IF_NOT_INITIALIZED(release)\
+       do {\
+               if (!(g_client_info.is_registered)) {\
+                       ASP_LOGE("Client is not initialized.");\
+                       release;\
+                       return ASP_ERROR_NOT_INITIALIZED;\
+               }\
+       } while(0)
+
+#endif /** __ASP_UTIL_H__ */
diff --git a/src/include/asp-seek.h b/src/include/asp-seek.h
new file mode 100644 (file)
index 0000000..e97caea
--- /dev/null
@@ -0,0 +1,31 @@
+#pragma once
+
+#include <glib.h>
+
+class AspSeek {
+public:
+    AspSeek();
+    ~AspSeek();
+    unsigned int adv_id;
+       long long unsigned search_id;
+       int auto_accept;
+       int discovery_tech;
+       unsigned char preferred_connection;
+
+       unsigned char status;
+       unsigned char role;
+       unsigned int config_method;
+       unsigned char tran_id;
+
+       char *service_name;
+       char *service_type;
+       GHashTable *service_info_map;
+       char *rsp_info;
+};
+
+AspSeek *getSeek(void *handle);
+AspSeek *getSeekById(long long unsigned id);
+
+bool removeSeek(void *handle);
+void addSeekToServiceList(AspSeek *service);
+void removeSeekFromServiceList(AspSeek *service);
diff --git a/src/include/asp-util.h b/src/include/asp-util.h
deleted file mode 100755 (executable)
index 06cce3c..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Application Service Platform(ASP)
- *
- * Copyright (c) 2015 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.
- *
- */
-
-/**
- * This file declares macros for usefuls.
- *
- * @file        asp-util.h
- * @author      Jiung Yu (jiung.yu.com)
- * @version     0.1
- */
-
-#ifndef __ASP_UTIL_H__
-#define __ASP_UTIL_H__
-
-#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
-#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
-#define IP2STR(a) (a)[0], (a)[1], (a)[2], (a)[3]
-#define IPSTR "%d.%d.%d.%d"
-#define MAC2SECSTR(a) (a)[0], (a)[4], (a)[5]
-#define MACSECSTR "%02x:%02x:%02x"
-#define IP2SECSTR(a) (a)[0], (a)[3]
-#define IPSECSTR "%d..%d"
-
-#define MACSTR_LEN 18
-#define MACADDR_LEN 6
-#define IP_LEN 6
-#define IPSTR_LEN 16
-#define WPS_PIN_LEN 8
-
-#define TIZEN_FEATURE_ASP "tizen.org/feature/network.asp"
-
-#define CHECK_FEATURE_SUPPORTED(feature_name)\
-       do {\
-               bool feature_supported = FALSE;\
-               if (!system_info_get_platform_bool(feature_name, &feature_supported)) {\
-                       if (feature_supported == FALSE) {\
-                               LOGE("%s feature is disabled", feature_name);\
-                               return ASP_ERROR_NOT_SUPPORTED;\
-                       } \
-               } else {\
-                       LOGE("Error - Feature getting from System Info");\
-                       return ASP_ERROR_OPERATION_FAILED;\
-               } \
-       } while (0)
-
-#define RET_ERR_IF_PARAMETER_IS_NOT_VALID(arg, release)\
-       do {\
-               if (!(arg)) {\
-                       ASP_LOGE("Invalid parameter");\
-                       release;\
-                       return ASP_ERROR_INVALID_PARAMETER;\
-               }\
-       } while(0)
-
-#define RET_ERR_IF_NOT_INITIALIZED(release)\
-       do {\
-               if (!(g_client_info.is_registered)) {\
-                       ASP_LOGE("Client is not initialized.");\
-                       release;\
-                       return ASP_ERROR_NOT_INITIALIZED;\
-               }\
-       } while(0)
-
-#endif /** __ASP_UTIL_H__ */
diff --git a/src/include/asp-utils.h b/src/include/asp-utils.h
new file mode 100644 (file)
index 0000000..00125e5
--- /dev/null
@@ -0,0 +1,10 @@
+#pragma once
+
+#include <string>
+
+class AspUtil {
+public:
+    static bool isValidServiceType(const std::string &type);
+    static bool isValidServiceTypeForWfds(const std::string &type);
+    static bool isValidKey(const std::string &key);
+};
\ No newline at end of file
index 175903ea26851f9f8d3848bb8a6de5634899a049..e3949033af14de803e97ad8f081604b1b1200bc8 100644 (file)
@@ -10,7 +10,15 @@ SET(ASP_GTEST "asp-gtest")
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-lto")
 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-lto")
 
-FILE(GLOB GTEST_SRCS *.cpp ${CMAKE_SOURCE_DIR}/src/*.c)
+FILE(GLOB GTEST_SRCS *.cpp ${CMAKE_SOURCE_DIR}/src/*.cpp mock/*.cpp)
 ADD_EXECUTABLE(${ASP_GTEST} ${GTEST_SRCS})
 TARGET_LINK_LIBRARIES(${ASP_GTEST} ${gtest_pkgs_LIBRARIES} ${${fw_name}_LIBRARIES})
+
+SET_TARGET_PROPERTIES(${ASP_GTEST} PROPERTIES
+    COMPILE_FLAGS "-fPIE"
+    LINK_FLAGS "-Wl,\
+--wrap=asp_dbus_init,\
+--wrap=asp_dbus_deinit,\
+--wrap=system_info_get_platform_bool")
+
 INSTALL(TARGETS ${ASP_GTEST} DESTINATION bin/)
diff --git a/unittest/asp-gtest-advert.cpp b/unittest/asp-gtest-advert.cpp
new file mode 100644 (file)
index 0000000..fa2c6f3
--- /dev/null
@@ -0,0 +1,105 @@
+#include <gtest/gtest.h>
+
+#include "asp.h"
+#include "asp-advert.h"
+
+class AspAdvertTest: public ::testing::Test {
+protected:
+    void SetUp() override
+    {
+        mAdvert = new AspAdvert;
+    }
+
+    void TearDown() override
+    {
+        delete mAdvert;
+    }
+
+    AspAdvert *mAdvert;
+};
+
+TEST_F(AspAdvertTest, getAdvertP)
+{
+    AspAdvert *advert = new AspAdvert;
+    addAdvertToServiceList(advert);
+    EXPECT_EQ(advert, getAdvert(advert));
+    removeAdvertFromServiceList(advert);
+    delete advert;
+}
+
+TEST_F(AspAdvertTest, getAdvertN)
+{
+    AspAdvert *advert = new AspAdvert;
+    EXPECT_EQ(NULL, getAdvert(advert));
+    EXPECT_EQ(NULL, getAdvert(NULL));
+    delete advert;
+}
+
+
+TEST_F(AspAdvertTest, addRemoveP1)
+{
+    AspAdvert *advert = new AspAdvert;
+    addAdvertToServiceList(advert);
+    EXPECT_EQ(true, removeAdvert(advert));
+}
+
+TEST_F(AspAdvertTest, addRemoveP2)
+{
+    AspAdvert *advert = new AspAdvert;
+    addAdvertToServiceList(advert);
+    removeAdvertFromServiceList(advert);
+    EXPECT_EQ(NULL, removeAdvert(advert));
+    delete advert;
+}
+
+TEST_F(AspAdvertTest, addRemoveP)
+{
+    AspAdvert *advert = new AspAdvert;
+    EXPECT_EQ(false, removeAdvert(advert));
+    delete advert;
+}
+
+TEST_F(AspAdvertTest, setServiceTypeP)
+{
+    EXPECT_EQ(ASP_ERROR_NONE, mAdvert->setServiceType("_http._tcp"));
+    EXPECT_EQ(ASP_ERROR_NONE, mAdvert->setServiceType("_test._udp"));
+    EXPECT_EQ(ASP_ERROR_NONE, mAdvert->setServiceType("abcde12345"));
+}
+
+TEST_F(AspAdvertTest, setServiceTypeN)
+{
+    EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, mAdvert->setServiceType(""));
+    EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, mAdvert->setServiceType("__"));
+}
+
+TEST_F(AspAdvertTest, addInfoP)
+{
+    EXPECT_EQ(ASP_ERROR_NONE, mAdvert->addInfo("12345678", "VALUE"));
+    EXPECT_EQ(ASP_ERROR_NONE, mAdvert->addInfo("abcdefg", "VALUE"));
+    EXPECT_EQ(ASP_ERROR_NONE, mAdvert->addInfo("!@#$%^&*", "VALUE"));
+}
+
+TEST_F(AspAdvertTest, addInfoN)
+{
+    EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, mAdvert->addInfo("1234567890", "VALUE"));
+    EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, mAdvert->addInfo("abcdefghij", "VALUE"));
+    EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, mAdvert->addInfo("!@#$%^&*()", "VALUE"));
+}
+
+TEST_F(AspAdvertTest, setDiscoveryTechP)
+{
+    EXPECT_EQ(ASP_ERROR_NONE, mAdvert->setDiscoveryTech(ASP_DISCOVERY_TECH_P2P));
+    EXPECT_EQ(ASP_ERROR_NONE, mAdvert->setDiscoveryTech(ASP_DISCOVERY_TECH_NFC));
+    EXPECT_EQ(ASP_ERROR_NONE, mAdvert->setDiscoveryTech(ASP_DISCOVERY_TECH_BLE));
+    EXPECT_EQ(ASP_ERROR_NONE, mAdvert->setDiscoveryTech(ASP_DISCOVERY_TECH_INFRA));
+    EXPECT_EQ(ASP_ERROR_NONE, mAdvert->setDiscoveryTech(ASP_DISCOVERY_TECH_NAN));
+
+    int tech = ASP_DISCOVERY_TECH_P2P | ASP_DISCOVERY_TECH_NFC | ASP_DISCOVERY_TECH_BLE
+        | ASP_DISCOVERY_TECH_INFRA | ASP_DISCOVERY_TECH_NAN;
+    EXPECT_EQ(ASP_ERROR_NONE, mAdvert->setDiscoveryTech(tech));
+}
+
+TEST_F(AspAdvertTest, setDiscoveryTechN)
+{
+    EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, mAdvert->setDiscoveryTech(0));
+}
diff --git a/unittest/asp-gtest-client.cpp b/unittest/asp-gtest-client.cpp
new file mode 100644 (file)
index 0000000..e632f6e
--- /dev/null
@@ -0,0 +1,61 @@
+#include <gtest/gtest.h>
+#include <string>
+
+#include "asp.h"
+
+extern "C" {
+}
+
+class AspClientTest: public ::testing::Test {
+protected:
+    void SetUp() override
+    {
+        asp_initialize();
+    }
+
+    void TearDown() override
+    {
+        asp_deinitialize();
+    }
+
+    char *INSTANCE_NAME = "INSTANCE";
+    char *SERVICE_TYPE = "SERVICE";
+};
+
+TEST_F(AspClientTest, asp_advert_createP)
+{
+    asp_advert_service_h service;
+    EXPECT_EQ(ASP_ERROR_NONE, asp_advert_create(INSTANCE_NAME, &service));
+}
+
+TEST_F(AspClientTest, asp_advert_destroyP)
+{
+    asp_advert_service_h service;
+    asp_advert_create(INSTANCE_NAME, &service);
+    EXPECT_EQ(ASP_ERROR_NONE, asp_advert_destroy(service));
+}
+
+TEST_F(AspClientTest, asp_advert_destroyN)
+{
+    EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_advert_destroy(NULL));
+    EXPECT_EQ(ASP_ERROR_SERVICE_NOT_FOUND, asp_advert_destroy((asp_advert_service_h)0x01));
+}
+
+TEST_F(AspClientTest, asp_seek_createP)
+{
+    asp_seek_service_h service;
+    EXPECT_EQ(ASP_ERROR_NONE, asp_seek_create(SERVICE_TYPE, &service));
+}
+
+TEST_F(AspClientTest, asp_seek_destroyP)
+{
+    asp_seek_service_h service;
+    asp_seek_create(SERVICE_TYPE, &service);
+    EXPECT_EQ(ASP_ERROR_NONE, asp_seek_destroy(service));
+}
+
+TEST_F(AspClientTest, asp_seek_destroyN)
+{
+    EXPECT_EQ(ASP_ERROR_INVALID_PARAMETER, asp_seek_destroy(NULL));
+    EXPECT_EQ(ASP_ERROR_SERVICE_NOT_FOUND, asp_seek_destroy((asp_seek_service_h)0x01));
+}
\ No newline at end of file
diff --git a/unittest/asp-gtest-seek.cpp b/unittest/asp-gtest-seek.cpp
new file mode 100644 (file)
index 0000000..d4176d9
--- /dev/null
@@ -0,0 +1,55 @@
+#include <gtest/gtest.h>
+
+#include "asp-seek.h"
+
+class AspSeekTest: public ::testing::Test {
+protected:
+    void SetUp() override
+    {
+    }
+
+    void TearDown() override
+    {
+    }
+};
+
+TEST_F(AspSeekTest, getSeekP)
+{
+    AspSeek *seek = new AspSeek;
+    addSeekToServiceList(seek);
+    EXPECT_EQ(seek, getSeek(seek));
+    removeSeekFromServiceList(seek);
+    delete seek;
+}
+
+TEST_F(AspSeekTest, getSeekN)
+{
+    AspSeek *seek = new AspSeek;
+    EXPECT_EQ(NULL, getSeek(seek));
+    EXPECT_EQ(NULL, getSeek(NULL));
+    delete seek;
+}
+
+
+TEST_F(AspSeekTest, addRemoveP1)
+{
+    AspSeek *seek = new AspSeek;
+    addSeekToServiceList(seek);
+    EXPECT_EQ(true, removeSeek(seek));
+}
+
+TEST_F(AspSeekTest, addRemoveP2)
+{
+    AspSeek *seek = new AspSeek;
+    addSeekToServiceList(seek);
+    removeSeekFromServiceList(seek);
+    EXPECT_EQ(NULL, removeSeek(seek));
+    delete seek;
+}
+
+TEST_F(AspSeekTest, addRemoveP)
+{
+    AspSeek *seek = new AspSeek;
+    EXPECT_EQ(false, removeSeek(seek));
+    delete seek;
+}
diff --git a/unittest/asp-gtest-util.cpp b/unittest/asp-gtest-util.cpp
new file mode 100644 (file)
index 0000000..35d18c9
--- /dev/null
@@ -0,0 +1,56 @@
+#include <gtest/gtest.h>
+
+#include "asp.h"
+#include "asp-utils.h"
+
+class AspUtilTest: public ::testing::Test {
+protected:
+    void SetUp() override
+    {
+    }
+
+    void TearDown() override
+    {
+    }
+
+};
+
+TEST_F(AspUtilTest, isValidServiceTypeP)
+{
+    EXPECT_EQ(true, AspUtil::isValidServiceType("_http._tcp"));
+    EXPECT_EQ(true, AspUtil::isValidServiceType("_test._udp"));
+    EXPECT_EQ(true, AspUtil::isValidServiceType("abcde12345"));
+}
+
+TEST_F(AspUtilTest, isValidServiceTypeN)
+{
+    EXPECT_EQ(false, AspUtil::isValidServiceType("__"));
+}
+
+TEST_F(AspUtilTest, isValidServiceTypeForWfdsP)
+{
+    EXPECT_EQ(true, AspUtil::isValidServiceTypeForWfds("abcdef"));
+    EXPECT_EQ(true, AspUtil::isValidServiceType("....."));
+    EXPECT_EQ(true, AspUtil::isValidServiceType("-----"));
+}
+
+TEST_F(AspUtilTest, isValidServiceTypeForWfdsN)
+{
+    EXPECT_EQ(false, AspUtil::isValidServiceTypeForWfds("__"));
+    EXPECT_EQ(false, AspUtil::isValidServiceTypeForWfds("**"));
+    EXPECT_EQ(false, AspUtil::isValidServiceTypeForWfds("abcd**efg"));
+}
+
+TEST_F(AspUtilTest, isValidKeyP)
+{
+    EXPECT_EQ(true, AspUtil::isValidKey("12345678"));
+    EXPECT_EQ(true, AspUtil::isValidKey("abcdefg"));
+    EXPECT_EQ(true, AspUtil::isValidKey("!@#$%^&*"));
+}
+
+TEST_F(AspUtilTest, isValidKeyN)
+{
+    EXPECT_EQ(false, AspUtil::isValidKey("1234567890"));
+    EXPECT_EQ(false, AspUtil::isValidKey("abcdefghij"));
+    EXPECT_EQ(false, AspUtil::isValidKey("!@#$%^&*()"));
+}
diff --git a/unittest/mock/mock-asp-dbus.cpp b/unittest/mock/mock-asp-dbus.cpp
new file mode 100644 (file)
index 0000000..d0d5101
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef API
+#define API __attribute__ ((visibility("default")))
+#endif
+
+API int __wrap_asp_dbus_init()
+{
+    return 1;
+}
+
+API int __wrap_asp_dbus_deinit()
+{
+    return 1;
+}
\ No newline at end of file
diff --git a/unittest/mock/mock-system-info.cpp b/unittest/mock/mock-system-info.cpp
new file mode 100644 (file)
index 0000000..c106106
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef API
+#define API __attribute__ ((visibility("default")))
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+API int __wrap_system_info_get_platform_bool (const char *key, bool *value)
+{
+    *value = true;
+    return 0;
+}
+
+#ifdef __cplusplus
+}
+#endif
\ No newline at end of file