Extract gdbus signal behavior into SoftapEventHandler class 25/302925/5
authorSeonah Moon <seonah1.moon@samsung.com>
Fri, 15 Dec 2023 11:17:58 +0000 (20:17 +0900)
committerSeonah Moon <seonah1.moon@samsung.com>
Tue, 19 Dec 2023 12:40:08 +0000 (21:40 +0900)
This library was written in C.
We plan to refactor it gradually by separating each operation into classes.

[----------] 7 tests from SoftApEventHandlerTest
[ RUN      ] SoftApEventHandlerTest.registerEventsN
[       OK ] SoftApEventHandlerTest.registerEventsN (0 ms)
[ RUN      ] SoftApEventHandlerTest.registerEventsP
[       OK ] SoftApEventHandlerTest.registerEventsP (0 ms)
[ RUN      ] SoftApEventHandlerTest.unregisterEventsP
[       OK ] SoftApEventHandlerTest.unregisterEventsP (0 ms)
[ RUN      ] SoftApEventHandlerTest.startEnabledEventN
[       OK ] SoftApEventHandlerTest.startEnabledEventN (0 ms)
[ RUN      ] SoftApEventHandlerTest.startEnabledEventP
[       OK ] SoftApEventHandlerTest.startEnabledEventP (0 ms)
[ RUN      ] SoftApEventHandlerTest.startDisabledEventN
[       OK ] SoftApEventHandlerTest.startDisabledEventN (0 ms)
[ RUN      ] SoftApEventHandlerTest.startDisabledEventP
[       OK ] SoftApEventHandlerTest.startDisabledEventP (0 ms)
[----------] 7 tests from SoftApEventHandlerTest (1 ms total)

[----------] Global test environment tear-down
[==========] 93 tests from 4 test suites ran. (221 ms total)
[  PASSED  ] 93 tests.

Change-Id: Ia280aef74bd4d453050426f06a22990700b9b021

CMakeLists.txt
include/softap_gdbus.h
include/softap_private.h
src/SoftapEventHandler.cpp [new file with mode: 0644]
src/include/SoftapEventCallback.h [new file with mode: 0644]
src/include/SoftapEventHandler.h [new file with mode: 0644]
src/softap.c [deleted file]
src/softap.cpp [new file with mode: 0755]
tests/CMakeLists.txt
tests/softap-gtest-event-handler.cpp [new file with mode: 0755]

index 5f01d54de0746e4d13544701998d60377d44d4c8..4dc0362756015b8ed1b94ff128fd43886bf22c29 100755 (executable)
@@ -7,7 +7,8 @@ SET(CMAKE_INSTALL_PREFIX /usr)
 SET(PREFIX ${CMAKE_INSTALL_PREFIX})
 
 SET(INC_DIR include)
-INCLUDE_DIRECTORIES(${INC_DIR})
+SET(INTERNAL_INC_DIR src/include)
+INCLUDE_DIRECTORIES(${INC_DIR} ${INTERNAL_INC_DIR})
 
 SET(dependents "dlog gio-2.0 gio-unix-2.0 glib-2.0 capi-base-common dbus-1 vconf capi-system-info cynara-client")
 
@@ -21,7 +22,7 @@ FOREACH(flag ${${fw_name}_CFLAGS})
 ENDFOREACH(flag)
 
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall -Werror -fvisibility=hidden")
-#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_FLAGS} -std=c++11")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS} -std=c++11")
 
 SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
 
index d49b60c4e499df76e4908078d215ebbf18a57cc6..4634bd55cfa5ad9bb5fd840abaa7b010481e696b 100644 (file)
@@ -67,7 +67,7 @@ typedef void(*__handle_cb_t)(GDBusConnection *connection, const gchar *sender_na
 
 typedef struct {
        guint sig_id;
-       char name[SOFTAP_SIGNAL_NAME_LEN];
+       const char *name;
        __handle_cb_t cb;
 } softap_sig_t;
 
index 075ae7de40e82cbdc1b970491043d6f276a333fe..b9517607834d8bd08e6e4e3462b8742c34fdd343 100644 (file)
@@ -155,6 +155,7 @@ typedef enum {
 
 typedef struct {
        softap_gdbus_h *gdbus_handle;
+       void *event_handler;
 
        /* Callbacks*/
        softap_enabled_cb enabled_cb;
diff --git a/src/SoftapEventHandler.cpp b/src/SoftapEventHandler.cpp
new file mode 100644 (file)
index 0000000..7499113
--- /dev/null
@@ -0,0 +1,392 @@
+#include "SoftapEventHandler.h"
+#include "softap_dlog.h"
+#include "softap_gdbus.h"
+
+#include <dbus/dbus.h>
+
+static void __handle_softap_on(GDBusConnection *connection, const gchar *sender_name,
+                       const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
+                       GVariant *parameters, gpointer user_data)
+{
+       _retm_if(user_data == NULL, "parameter(user_dtaa) is NULL");
+
+       DBG("+");
+       SOFTAP_LOCK;
+
+       SoftapEventHandler *eventHandler = static_cast<SoftapEventHandler *>(user_data);
+       eventHandler->invokeEnabledCb(false);
+
+       SOFTAP_UNLOCK;
+       DBG("-");
+}
+
+static void __handle_softap_off(GDBusConnection *connection, const gchar *sender_name,
+                       const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
+                       GVariant *parameters, gpointer user_data)
+{
+       _retm_if(user_data == NULL, "parameter(user_dtaa) is NULL");
+
+       DBG("+");
+       SOFTAP_LOCK;
+
+       char *buf = NULL;
+       softap_disabled_cause_e code = SOFTAP_DISABLED_BY_OTHERS;
+       g_variant_get(parameters, "(s)", &buf);
+       if (!g_strcmp0(buf, SIGNAL_MSG_NOT_AVAIL_INTERFACE))
+               code = SOFTAP_DISABLED_BY_WIFI_ON;
+       else if (!g_strcmp0(buf, SIGNAL_MSG_TIMEOUT))
+               code = SOFTAP_DISABLED_BY_TIMEOUT;
+
+       g_free(buf);
+
+       SoftapEventHandler *eventHandler = static_cast<SoftapEventHandler *>(user_data);
+       eventHandler->invokeDisabledCb(code);
+       SOFTAP_UNLOCK;
+       DBG("-");
+}
+
+static void __handle_low_battery_mode(GDBusConnection *connection, const gchar *sender_name,
+                       const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
+                       GVariant *parameters, gpointer user_data)
+{
+       _retm_if(user_data == NULL, "parameter(user_dtaa) is NULL");
+
+       DBG("+");
+       SOFTAP_LOCK;
+       SoftapEventHandler *eventHandler = static_cast<SoftapEventHandler *>(user_data);
+       eventHandler->invokeLowbatteryModeEventCb();
+       SOFTAP_UNLOCK;
+       DBG("-");
+}
+
+static void __handle_flight_mode(GDBusConnection *connection, const gchar *sender_name,
+                       const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
+                       GVariant *parameters, gpointer user_data)
+{
+       _retm_if(user_data == NULL, "parameter(user_dtaa) is NULL");
+
+       DBG("+");
+       SOFTAP_LOCK;
+
+       SoftapEventHandler *eventHandler = static_cast<SoftapEventHandler *>(user_data);
+       eventHandler->invokeFlightModeEventCb();
+
+       SOFTAP_UNLOCK;
+       DBG("-");
+}
+
+static void __handle_security_type_changed(GDBusConnection *connection, const gchar *sender_name,
+               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
+               GVariant *parameters, gpointer user_data)
+{
+       _retm_if(user_data == NULL, "parameter(user_dtaa) is NULL");
+
+       DBG("+");
+       SOFTAP_LOCK;
+
+       int type = 0;
+       g_variant_get(parameters, "(i)", &type);
+
+       SoftapEventHandler *eventHandler = static_cast<SoftapEventHandler *>(user_data);
+       eventHandler->invokeSecurityTypeChangedEventCb(type);
+
+       SOFTAP_UNLOCK;
+       return;
+}
+
+static void __handle_ssid_visibility_changed(GDBusConnection *connection, const gchar *sender_name,
+               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
+               GVariant *parameters, gpointer user_data)
+{
+       _retm_if(user_data == NULL, "parameter(user_dtaa) is NULL");
+
+       DBG("+");
+       SOFTAP_LOCK;
+
+       int visible = 0;
+       g_variant_get(parameters, "(i)", &visible);
+
+       SoftapEventHandler *eventHandler = static_cast<SoftapEventHandler *>(user_data);
+       eventHandler->invokeSsidVisibilityChangedEventCb(visible > 0);
+
+       SOFTAP_UNLOCK;
+       DBG("-");
+}
+
+static void __handle_passphrase_changed(GDBusConnection *connection, const gchar *sender_name,
+               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
+               GVariant *parameters, gpointer user_data)
+{
+       _retm_if(user_data == NULL, "parameter(user_dtaa) is NULL");
+
+       DBG("+");
+       SOFTAP_LOCK;
+
+       SoftapEventHandler *eventHandler = static_cast<SoftapEventHandler *>(user_data);
+       eventHandler->invokePassphraseChangedEventCb();
+
+       SOFTAP_UNLOCK;
+       DBG("-");
+}
+
+static void __handle_dhcp(GDBusConnection *connection, const gchar *sender_name,
+               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
+               GVariant *parameters, gpointer user_data)
+{
+       _retm_if(user_data == NULL, "parameter(user_dtaa) is NULL");
+
+       DBG("+");
+       SOFTAP_LOCK;
+
+       __softap_client_h client;
+       char *buf = NULL;
+       char *name = NULL;
+       char *mac = NULL;
+       char *ip = NULL;
+       guint timestamp;
+
+       g_variant_get(parameters, "(ssssu)", &buf, &ip, &mac, &name, &timestamp);
+
+       bool opened = false;
+       if (!g_strcmp0(buf, "DhcpConnected")) {
+               opened = true;
+       } else if (!g_strcmp0(buf, "DhcpLeaseDeleted")) {
+               opened = false;
+       } else {
+               ERR("Unknown event [%s]", buf);
+               g_free(buf);
+               g_free(ip);
+               g_free(mac);
+               g_free(name);
+               SOFTAP_UNLOCK;
+               DBG("-");
+               return;
+       }
+
+       memset(&client, 0, sizeof(__softap_client_h));
+       g_strlcpy(client.ip, ip, sizeof(client.ip));
+       g_strlcpy(client.mac, mac, sizeof(client.mac));
+       if (name != NULL)
+               client.hostname = g_strdup(name);
+       client.tm = (time_t)timestamp;
+
+       SoftapEventHandler *eventHandler = static_cast<SoftapEventHandler *>(user_data);
+       eventHandler->invokeClientConnectionChangedEventCb(static_cast<softap_client_h>(&client), opened);
+
+       g_free(client.hostname);
+       g_free(buf);
+       g_free(ip);
+       g_free(mac);
+       g_free(name);
+
+       SOFTAP_UNLOCK;
+       DBG("-");
+}
+
+SoftapEventHandler::SoftapEventHandler(__softap_h *handle, softap_gdbus_h *gdbus)
+: mHandle(handle), mGdbus(gdbus), mSignals(NULL), mEventCallback(NULL)
+{
+       DBG("+");
+}
+
+SoftapEventHandler::~SoftapEventHandler()
+{
+       DBG("+");
+       mHandle = NULL;
+       mGdbus = NULL;
+       mSignals = NULL;
+       mEventCallback = NULL;
+       DBG("-");
+}
+
+int SoftapEventHandler::registerEvents(SoftapEventCallback *eventCallback)
+{
+       _retv_if(eventCallback == NULL, -1);
+
+       mEventCallback = eventCallback;
+
+       if (initSignals() < 0)
+               return -1;
+
+       if (connectGdbus() < 0)
+               return -1;
+       return 0;
+}
+
+int SoftapEventHandler::unregisterEvents()
+{
+       DBG("+");
+       disconnectGdbus();
+       deinitSignals();
+
+       if (mEventCallback)
+               delete mEventCallback;
+       mEventCallback = nullptr;
+       DBG("-");
+       return 0;
+}
+
+int SoftapEventHandler::startEnabledEvent()
+{
+       _retv_if(mGdbus == NULL || mSignals == NULL, -1);
+       int id = softap_gdbus_connect_signal(mGdbus,
+               mSignals[E_SIGNAL_SOFTAP_ON], static_cast<void *>(this));
+       if (id >= 0)
+               mSignals[E_SIGNAL_SOFTAP_ON].sig_id = id;
+       return id >= 0 ? 0 : -1;
+}
+
+void SoftapEventHandler::stopEnabledEvent()
+{
+       _ret_if(mGdbus == NULL || mSignals == NULL);
+       softap_gdbus_disconnect_signal(mGdbus, mSignals[E_SIGNAL_SOFTAP_ON].sig_id);
+}
+
+int SoftapEventHandler::startDisabledEvent()
+{
+       _retv_if(mGdbus == NULL || mSignals == NULL, -1);
+       int id = softap_gdbus_connect_signal(mGdbus,
+               mSignals[E_SIGNAL_SOFTAP_OFF], static_cast<void *>(this));
+       if (id >= 0)
+               mSignals[E_SIGNAL_SOFTAP_OFF].sig_id = id;
+       return id >= 0 ? 0 : -1;
+}
+
+void SoftapEventHandler::stopDisabledEvent()
+{
+       _ret_if(mGdbus == NULL || mSignals == NULL);
+       softap_gdbus_disconnect_signal(mGdbus, mSignals[E_SIGNAL_SOFTAP_OFF].sig_id);
+}
+
+void SoftapEventHandler::invokeEnabledCb(bool isRequested)
+{
+       DBG("+");
+       if (mEventCallback && mEventCallback->mEnabledEventCb)
+               mEventCallback->mEnabledEventCb(false, static_cast<void *>(mHandle));
+       DBG("-");
+}
+
+void SoftapEventHandler::invokeDisabledCb(int disabledCause)
+{
+       DBG("+");
+       if (mEventCallback && mEventCallback->mDisabledEventCb)
+               mEventCallback->mDisabledEventCb(disabledCause, static_cast<void *>(mHandle));
+       DBG("-");
+}
+
+void SoftapEventHandler::invokeLowbatteryModeEventCb()
+{
+       DBG("+");
+       if (mEventCallback && mEventCallback->mLowBatteryModeEventCb)
+               mEventCallback->mLowBatteryModeEventCb(static_cast<void *>(mHandle));
+
+       DBG("-");
+}
+
+void SoftapEventHandler::invokeFlightModeEventCb()
+{
+       DBG("+");
+       if (mEventCallback && mEventCallback->mFlightModeEventCb)
+               mEventCallback->mFlightModeEventCb(static_cast<void *>(mHandle));
+       DBG("-");
+}
+
+void SoftapEventHandler::invokeSecurityTypeChangedEventCb(int securityType)
+{
+       DBG("+");
+       if (mEventCallback && mEventCallback->mSecurityTypeChangedEventCb)
+               mEventCallback->mSecurityTypeChangedEventCb(securityType, static_cast<void *>(mHandle));
+       DBG("-");
+}
+
+void SoftapEventHandler::invokeSsidVisibilityChangedEventCb(bool visible)
+{
+       DBG("+");
+        if (mEventCallback && mEventCallback->mSsidVisibilityChangedEventCb)
+               mEventCallback->mSsidVisibilityChangedEventCb(visible, static_cast<void *>(mHandle));
+       DBG("-");
+}
+
+void SoftapEventHandler::invokePassphraseChangedEventCb()
+{
+       DBG("+");
+       if (mEventCallback && mEventCallback->mPassphraseChangedEventCb)
+               mEventCallback->mPassphraseChangedEventCb(static_cast<void *>(mHandle));
+       DBG("-");
+}
+
+void SoftapEventHandler::invokeClientConnectionChangedEventCb(softap_client_h client, bool opened)
+{
+       DBG("+");
+       if (mEventCallback && mEventCallback->mClientConnectionChangedEventCb)
+               mEventCallback->mClientConnectionChangedEventCb(client, opened, static_cast<void *>(mHandle));
+       DBG("-");
+}
+
+int SoftapEventHandler::connectGdbus()
+{
+       _retv_if(mGdbus == NULL || mSignals == NULL, -1);
+       softap_gdbus_connect_signals(mGdbus, mSignals, static_cast<void *>(this));
+       return 0;
+}
+
+void SoftapEventHandler::disconnectGdbus()
+{
+       _ret_if(mGdbus == NULL || mSignals == NULL);
+       softap_gdbus_disconnect_signals(mGdbus, mSignals);
+}
+
+int SoftapEventHandler::initSignals()
+{
+       mSignals = (softap_sig_t *)calloc(E_SIGNAL_MAX, sizeof(softap_sig_t));
+       if (mSignals == NULL) {
+               ERR("out of memory.");
+               return -1;
+       }
+
+       mSignals[E_SIGNAL_SOFTAP_ON].sig_id = 0;
+       mSignals[E_SIGNAL_SOFTAP_ON].name = SIGNAL_NAME_SOFTAP_ON;
+       mSignals[E_SIGNAL_SOFTAP_ON].cb = __handle_softap_on;
+
+       mSignals[E_SIGNAL_SOFTAP_OFF].sig_id = 0;
+       mSignals[E_SIGNAL_SOFTAP_OFF].name = SIGNAL_NAME_SOFTAP_OFF;
+       mSignals[E_SIGNAL_SOFTAP_OFF].cb = __handle_softap_off;
+
+       mSignals[E_SIGNAL_LOW_BATTERY_MODE].sig_id = 0;
+       mSignals[E_SIGNAL_LOW_BATTERY_MODE].name = SIGNAL_NAME_LOW_BATTERY_MODE;
+       mSignals[E_SIGNAL_LOW_BATTERY_MODE].cb = __handle_low_battery_mode;
+
+       mSignals[E_SIGNAL_FLIGHT_MODE].sig_id = 0;
+       mSignals[E_SIGNAL_FLIGHT_MODE].name = SIGNAL_NAME_FLIGHT_MODE;
+       mSignals[E_SIGNAL_FLIGHT_MODE].cb = __handle_flight_mode;
+
+       mSignals[E_SIGNAL_SECURITY_TYPE_CHANGED].sig_id = 0;
+       mSignals[E_SIGNAL_SECURITY_TYPE_CHANGED].name = SIGNAL_NAME_SECURITY_TYPE_CHANGED;
+       mSignals[E_SIGNAL_SECURITY_TYPE_CHANGED].cb = __handle_security_type_changed;
+
+       mSignals[E_SIGNAL_SSID_VISIBILITY_CHANGED].sig_id = 0;
+       mSignals[E_SIGNAL_SSID_VISIBILITY_CHANGED].name = SIGNAL_NAME_SSID_VISIBILITY_CHANGED;
+       mSignals[E_SIGNAL_SSID_VISIBILITY_CHANGED].cb = __handle_ssid_visibility_changed;
+
+       mSignals[E_SIGNAL_PASSPHRASE_CHANGED].sig_id = 0;
+       mSignals[E_SIGNAL_PASSPHRASE_CHANGED].name = SIGNAL_NAME_PASSPHRASE_CHANGED;
+       mSignals[E_SIGNAL_PASSPHRASE_CHANGED].cb = __handle_passphrase_changed;
+
+       mSignals[E_SIGNAL_DHCP_STATUS].sig_id = 0;
+       mSignals[E_SIGNAL_DHCP_STATUS].name = SIGNAL_NAME_DHCP_STATUS;
+       mSignals[E_SIGNAL_DHCP_STATUS].cb = __handle_dhcp;
+       return 0;
+}
+
+void SoftapEventHandler::deinitSignals()
+{
+       _ret_if(mSignals == NULL);
+       for (int i = E_SIGNAL_SOFTAP_ON; i < E_SIGNAL_MAX; ++i) {
+               mSignals[i].sig_id = 0;
+               mSignals[i].name = NULL;
+               mSignals[i].cb = {};
+       }
+
+       free(mSignals);
+       mSignals = NULL;
+}
diff --git a/src/include/SoftapEventCallback.h b/src/include/SoftapEventCallback.h
new file mode 100644 (file)
index 0000000..b71fb6c
--- /dev/null
@@ -0,0 +1,36 @@
+#pragma once
+
+#include "softap.h"
+
+#include <functional>
+
+class SoftapEventCallback {
+public:
+    using EnabledEventCb = std::function<void(bool isRequested, void *userData)>;
+    using DisabledEventCb = std::function<void(int disabledCause, void *userData)>;
+    using LowBatteryModeEventCb = std::function<void(void *userData)>;
+    using FlightModeEventCb = std::function<void(void *userData)>;
+    using SecurityTypeChangedEventCb = std::function<void(int securityType, void *userData)>;
+    using SsidVisibilityChangedEventCb = std::function<void(bool visible, void *userData)>;
+    using PassphraseChangedEventCb = std::function<void(void *userData)>;
+    using ClientConnectionChangedEventCb = std::function<void(softap_client_h client, bool opened, void *userData)>;
+
+       SoftapEventCallback(EnabledEventCb enabledCb, DisabledEventCb disabledCb,
+        LowBatteryModeEventCb lowbatteryCb, FlightModeEventCb flightModeCb,
+        SecurityTypeChangedEventCb securityChangedCb, SsidVisibilityChangedEventCb ssidVisibilityChangedCb,
+        PassphraseChangedEventCb passphraseChangedCb, ClientConnectionChangedEventCb clientChangedCb)
+        : mEnabledEventCb(enabledCb), mDisabledEventCb(disabledCb),
+        mLowBatteryModeEventCb(lowbatteryCb), mFlightModeEventCb(flightModeCb),
+        mSecurityTypeChangedEventCb(securityChangedCb), mSsidVisibilityChangedEventCb(ssidVisibilityChangedCb),
+        mPassphraseChangedEventCb(passphraseChangedCb), mClientConnectionChangedEventCb(clientChangedCb) {}
+    ~SoftapEventCallback() {}
+
+    EnabledEventCb mEnabledEventCb;
+    DisabledEventCb mDisabledEventCb;
+    LowBatteryModeEventCb mLowBatteryModeEventCb;
+    FlightModeEventCb mFlightModeEventCb;
+    SecurityTypeChangedEventCb mSecurityTypeChangedEventCb;
+    SsidVisibilityChangedEventCb mSsidVisibilityChangedEventCb;
+    PassphraseChangedEventCb mPassphraseChangedEventCb;
+    ClientConnectionChangedEventCb mClientConnectionChangedEventCb;
+};
\ No newline at end of file
diff --git a/src/include/SoftapEventHandler.h b/src/include/SoftapEventHandler.h
new file mode 100644 (file)
index 0000000..b113046
--- /dev/null
@@ -0,0 +1,42 @@
+#pragma once
+
+#include "softap.h"
+#include "softap_gdbus.h"
+#include "softap_private.h"
+#include "SoftapEventCallback.h"
+
+#include <functional>
+
+class SoftapEventHandler {
+public:
+    SoftapEventHandler(__softap_h *handle, softap_gdbus_h *gdbus);
+    ~SoftapEventHandler();
+
+       int registerEvents(SoftapEventCallback *eventCallback);
+    int unregisterEvents();
+
+    int startEnabledEvent();
+    void stopEnabledEvent();
+    int startDisabledEvent();
+    void stopDisabledEvent();
+
+    void invokeEnabledCb(bool isRequested);
+    void invokeDisabledCb(int disabledCause);
+    void invokeLowbatteryModeEventCb();
+    void invokeFlightModeEventCb();
+    void invokeSecurityTypeChangedEventCb(int securityType);
+    void invokeSsidVisibilityChangedEventCb(bool visible);
+    void invokePassphraseChangedEventCb();
+    void invokeClientConnectionChangedEventCb(softap_client_h client, bool opened);
+       
+private:
+    int connectGdbus();
+    void disconnectGdbus();
+    int initSignals();
+    void deinitSignals();
+
+    __softap_h *mHandle;
+    softap_gdbus_h *mGdbus;
+    softap_sig_t *mSignals;
+    SoftapEventCallback *mEventCallback;
+};
diff --git a/src/softap.c b/src/softap.c
deleted file mode 100755 (executable)
index 8895d86..0000000
+++ /dev/null
@@ -1,1847 +0,0 @@
-/*
-* Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <net/if.h>
-#include <arpa/inet.h>
-#include <unistd.h>
-#include <dbus/dbus.h>
-#include <gio/gio.h>
-#include <vconf.h>
-
-#include "softap_private.h"
-#include "softap_gdbus.h"
-#include "softap_dlog.h"
-
-static void __handle_softap_on(GDBusConnection *connection, const gchar *sender_name,
-                       const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-                       GVariant *parameters, gpointer user_data);
-
-static void __handle_softap_off(GDBusConnection *connection, const gchar *sender_name,
-               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-               GVariant *parameters, gpointer user_data);
-
-static void __handle_low_battery_mode(GDBusConnection *connection, const gchar *sender_name,
-               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-               GVariant *parameters, gpointer user_data);
-
-static void __handle_flight_mode(GDBusConnection *connection, const gchar *sender_name,
-               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-               GVariant *parameters, gpointer user_data);
-
-static void __handle_security_type_changed(GDBusConnection *connection, const gchar *sender_name,
-               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-               GVariant *parameters, gpointer user_data);
-
-static void __handle_ssid_visibility_changed(GDBusConnection *connection, const gchar *sender_name,
-               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-               GVariant *parameters, gpointer user_data);
-
-static void __handle_passphrase_changed(GDBusConnection *connection, const gchar *sender_name,
-               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-               GVariant *parameters, gpointer user_data);
-
-static void __handle_dhcp(GDBusConnection *connection, const gchar *sender_name,
-               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-               GVariant *parameters, gpointer user_data);
-
-static softap_sig_t sigs[] = {
-       {0, SIGNAL_NAME_SOFTAP_ON, __handle_softap_on},
-       {0, SIGNAL_NAME_SOFTAP_OFF, __handle_softap_off},
-       {0, SIGNAL_NAME_LOW_BATTERY_MODE, __handle_low_battery_mode},
-       {0, SIGNAL_NAME_FLIGHT_MODE, __handle_flight_mode},
-       {0, SIGNAL_NAME_SECURITY_TYPE_CHANGED, __handle_security_type_changed},
-       {0, SIGNAL_NAME_SSID_VISIBILITY_CHANGED, __handle_ssid_visibility_changed},
-       {0, SIGNAL_NAME_PASSPHRASE_CHANGED, __handle_passphrase_changed},
-       {0, SIGNAL_NAME_DHCP_STATUS, __handle_dhcp},
-       {0, "", NULL} };
-
-static int retry = 0;
-
-static int __get_common_ssid(char *ssid, unsigned int size)
-{
-       if (ssid == NULL) {
-               ERR("ssid is null!!");
-               return SOFTAP_ERROR_INVALID_PARAMETER;
-       }
-
-       char *device_name = NULL;
-       char *end = NULL;
-
-       device_name = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
-       if (device_name == NULL) {
-               ERR("vconf_get_str is failed and set default ssid!!");
-               g_strlcpy(ssid, SOFTAP_DEFAULT_SSID, size);
-       } else
-               g_strlcpy(ssid, device_name, size);
-
-       if (!g_utf8_validate(ssid, -1, (const char **)&end))
-               *end = '\0';
-
-       free(device_name);
-
-       return SOFTAP_ERROR_NONE;
-}
-
-static softap_error_e __get_security_type(softap_security_type_e *security_type)
-{
-       if (security_type == NULL) {
-               ERR("Invalid param\n");
-               return SOFTAP_ERROR_INVALID_PARAMETER;
-       }
-
-       if (vconf_get_int(VCONFKEY_SOFTAP_SECURITY,
-                               (int *)security_type) < 0) {
-               ERR("vconf_get_int is failed\n");
-               return SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       return SOFTAP_ERROR_NONE;
-}
-
-static softap_error_e __get_visibility(bool *visible)
-{
-       if (visible == NULL) {
-               ERR("Invalid param\n");
-               return SOFTAP_ERROR_INVALID_PARAMETER;
-       }
-
-       int hide = 0;
-
-       if (vconf_get_int(VCONFKEY_SOFTAP_HIDE, &hide) < 0) {
-               ERR("vconf_get_int is failed\n");
-               return SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       if (hide)
-               *visible = false;
-       else
-               *visible = true;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-static softap_error_e __get_vsie(char *vsie, unsigned int size)
-{
-       char *ptr = NULL;
-
-       ptr = vconf_get_str(VCONFKEY_SOFTAP_VSIE);
-       if (ptr == NULL)
-               return SOFTAP_ERROR_OPERATION_FAILED;
-
-       g_strlcpy(vsie, ptr, size);
-       free(ptr);
-
-       return SOFTAP_ERROR_NONE;
-}
-
-static softap_error_e __get_channel(int *channel)
-{
-       if (channel == NULL) {
-               ERR("Invalid param\n");
-               return SOFTAP_ERROR_INVALID_PARAMETER;
-       }
-
-       if (vconf_get_int(VCONFKEY_SOFTAP_CHANNEL, channel) < 0) {
-               ERR("vconf_get_int is failed\n");
-               return SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       return SOFTAP_ERROR_NONE;
-}
-
-static softap_error_e __get_mode(softap_wireless_mode_e *mode)
-{
-       if (mode == NULL) {
-               ERR("Invalid param\n");
-               return SOFTAP_ERROR_INVALID_PARAMETER;
-       }
-
-       if (vconf_get_int(VCONFKEY_SOFTAP_MODE, (int *)mode) < 0) {
-               ERR("vconf_get_int is failed\n");
-               return SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       return SOFTAP_ERROR_NONE;
-}
-
-static int __get_initial_passphrase(char *passphrase, unsigned int size)
-{
-       if (passphrase == NULL ||
-                       size == 0 || size < SOFTAP_KEY_MIN_LEN + 1)
-               return 0;
-
-       guint32 rand_int = 0;
-       int index = 0;
-
-       for (index = 0; index < SOFTAP_KEY_MIN_LEN; index++) {
-               rand_int = g_random_int_range('a', 'z');
-               passphrase[index] = rand_int;
-       }
-       passphrase[index] = '\0';
-
-       return index;
-}
-
-static softap_error_e __get_error(int agent_error)
-{
-       softap_error_e err = SOFTAP_ERROR_NONE;
-
-       switch (agent_error) {
-       case MOBILE_AP_ERROR_NONE:
-               err = SOFTAP_ERROR_NONE;
-               break;
-
-       case MOBILE_AP_ERROR_RESOURCE:
-               err = SOFTAP_ERROR_OUT_OF_MEMORY;
-               break;
-
-       case MOBILE_AP_ERROR_INTERNAL:
-               err = SOFTAP_ERROR_OPERATION_FAILED;
-               break;
-
-       case MOBILE_AP_ERROR_INVALID_PARAM:
-               err = SOFTAP_ERROR_INVALID_PARAMETER;
-               break;
-
-       case MOBILE_AP_ERROR_ALREADY_ENABLED:
-               err = SOFTAP_ERROR_ALREADY_ENABLED;
-               break;
-
-       case MOBILE_AP_ERROR_NET_OPEN:
-               err = SOFTAP_ERROR_OPERATION_FAILED;
-               break;
-
-       case MOBILE_AP_ERROR_NET_CLOSE:
-               err = SOFTAP_ERROR_OPERATION_FAILED;
-               break;
-
-       case MOBILE_AP_ERROR_DHCP:
-               err = SOFTAP_ERROR_OPERATION_FAILED;
-               break;
-
-       case MOBILE_AP_ERROR_IN_PROGRESS:
-               err = SOFTAP_ERROR_OPERATION_FAILED;
-               break;
-
-       case MOBILE_AP_ERROR_NOT_PERMITTED:
-               err = SOFTAP_ERROR_NOT_PERMITTED;
-               break;
-
-       case MOBILE_AP_ERROR_PERMISSION_DENIED:
-               err = SOFTAP_ERROR_PERMISSION_DENIED;
-               break;
-
-       default:
-               ERR("Not defined error : %d\n", agent_error);
-               err = SOFTAP_ERROR_OPERATION_FAILED;
-               break;
-       }
-
-       return err;
-}
-
-static void __handle_dhcp(GDBusConnection *connection, const gchar *sender_name,
-               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-               GVariant *parameters, gpointer user_data)
-{
-       DBG("+");
-       SOFTAP_LOCK;
-
-       if (user_data == NULL) {
-               ERR("parameter(user_data) is NULL");
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       __softap_h *sa = (__softap_h *)user_data;
-       bool opened = false;
-       softap_client_connection_state_changed_cb ccb = NULL;
-       __softap_client_h client;
-       void *data = NULL;
-       char *buf = NULL;
-       char *name = NULL;
-       char *mac = NULL;
-       char *ip = NULL;
-       guint timestamp;
-
-       memset(&client, 0, sizeof(__softap_client_h));
-       g_variant_get(parameters, "(ssssu)", &buf, &ip, &mac, &name, &timestamp);
-
-       if (!g_strcmp0(buf, "DhcpConnected")) {
-               opened = true;
-       } else if (!g_strcmp0(buf, "DhcpLeaseDeleted")) {
-               opened = false;
-       } else {
-               ERR("Unknown event [%s]", buf);
-               goto DONE;
-       }
-
-       ccb = sa->changed_cb;
-       if (ccb == NULL)
-               goto DONE;
-       data = sa->changed_user_data;
-
-       g_strlcpy(client.ip, ip, sizeof(client.ip));
-       g_strlcpy(client.mac, mac, sizeof(client.mac));
-       if (name != NULL)
-               client.hostname = g_strdup(name);
-       client.tm = (time_t)timestamp;
-
-       ccb((softap_client_h)&client, opened, data);
-       g_free(client.hostname);
-DONE:
-       g_free(buf);
-       g_free(ip);
-       g_free(mac);
-       g_free(name);
-
-       SOFTAP_UNLOCK;
-       DBG("-");
-}
-
-static void __handle_softap_on(GDBusConnection *connection, const gchar *sender_name,
-                       const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-                       GVariant *parameters, gpointer user_data)
-{
-       DBG("+");
-       SOFTAP_LOCK;
-
-       if (user_data == NULL) {
-               ERR("parameter(user_data) is NULL");
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       __softap_h *sa = (__softap_h *)user_data;
-       bool is_requested = false;
-       softap_enabled_cb ecb = NULL;
-       void *data = NULL;
-
-       ecb = sa->enabled_cb;
-       if (ecb == NULL) {
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       data = sa->enabled_user_data;
-       ecb(SOFTAP_ERROR_NONE, is_requested, data);
-
-       SOFTAP_UNLOCK;
-       DBG("-");
-}
-
-static void __handle_softap_off(GDBusConnection *connection, const gchar *sender_name,
-                       const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-                       GVariant *parameters, gpointer user_data)
-{
-       DBG("+");
-       SOFTAP_LOCK;
-
-       if (user_data == NULL) {
-               ERR("parameter(user_data) is NULL");
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       __softap_h *sa = (__softap_h *)user_data;
-       softap_disabled_cause_e code = SOFTAP_DISABLED_BY_OTHERS;
-       softap_disabled_cb dcb = NULL;
-       void *data = NULL;
-       char *buf = NULL;
-
-       dcb = sa->disabled_cb;
-       if (dcb == NULL) {
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       data = sa->disabled_user_data;
-       g_variant_get(parameters, "(s)", &buf);
-       if (!g_strcmp0(buf, SIGNAL_MSG_NOT_AVAIL_INTERFACE))
-               code = SOFTAP_DISABLED_BY_WIFI_ON;
-       else if (!g_strcmp0(buf, SIGNAL_MSG_TIMEOUT))
-               code = SOFTAP_DISABLED_BY_TIMEOUT;
-
-       g_free(buf);
-       dcb(SOFTAP_ERROR_NONE, code, data);
-
-       SOFTAP_UNLOCK;
-       DBG("-");
-}
-
-static void __invoke_disabled_cb_with_reason(__softap_h *sa, softap_disabled_cause_e code)
-{
-       if (sa == NULL || sa->disabled_cb == NULL) {
-               ERR("sa or sa->disabled_cb is NULL");
-               return;
-       }
-
-       sa->disabled_cb(SOFTAP_ERROR_NONE, code, sa->disabled_user_data);
-}
-
-
-static void __handle_low_battery_mode(GDBusConnection *connection, const gchar *sender_name,
-                       const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-                       GVariant *parameters, gpointer user_data)
-{
-       DBG("+");
-       SOFTAP_LOCK;
-       __invoke_disabled_cb_with_reason((__softap_h *)user_data, SOFTAP_DISABLED_BY_LOW_BATTERY);
-       SOFTAP_UNLOCK;
-       DBG("-");
-}
-
-static void __handle_flight_mode(GDBusConnection *connection, const gchar *sender_name,
-                       const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-                       GVariant *parameters, gpointer user_data)
-{
-       DBG("+");
-       SOFTAP_LOCK;
-       __invoke_disabled_cb_with_reason((__softap_h *)user_data, SOFTAP_DISABLED_BY_FLIGHT_MODE);
-       SOFTAP_UNLOCK;
-       DBG("-");
-}
-
-static void __handle_security_type_changed(GDBusConnection *connection, const gchar *sender_name,
-               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-               GVariant *parameters, gpointer user_data)
-
-{
-       DBG("+");
-       SOFTAP_LOCK;
-
-       __softap_h *sa = (__softap_h *)user_data;
-       if (sa == NULL || sa->security_type_changed_cb == NULL) {
-               ERR("sa or callback is NULL");
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       int security_type = 0;
-       g_variant_get(parameters, "(i)", &security_type);
-       sa->security_type_changed_cb((softap_security_type_e)security_type, sa->security_type_user_data);
-
-       SOFTAP_UNLOCK;
-       return;
-}
-
-static void __handle_ssid_visibility_changed(GDBusConnection *connection, const gchar *sender_name,
-               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-               GVariant *parameters, gpointer user_data)
-{
-       DBG("+");
-       SOFTAP_LOCK;
-
-       __softap_h *sa = (__softap_h *)user_data;
-       if (sa == NULL || sa->ssid_visibility_changed_cb == NULL) {
-               ERR("sa or callback is NULL");
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       int visible = 0;
-       g_variant_get(parameters, "(i)", &visible);
-       sa->ssid_visibility_changed_cb(visible, sa->ssid_visibility_user_data);
-
-       SOFTAP_UNLOCK;
-       DBG("-");
-}
-
-static void __handle_passphrase_changed(GDBusConnection *connection, const gchar *sender_name,
-               const gchar *object_path, const gchar *interface_name, const gchar *signal_name,
-               GVariant *parameters, gpointer user_data)
-{
-       DBG("+");
-       SOFTAP_LOCK;
-
-       __softap_h *sa = (__softap_h *)user_data;
-       if (sa == NULL || sa->passphrase_changed_cb == NULL) {
-               ERR("sa or callback is NULL");
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       sa->passphrase_changed_cb(sa->passphrase_user_data);
-
-       SOFTAP_UNLOCK;
-       DBG("-");
-}
-
-static void __enabled_cfm_cb(GObject *source_object, GAsyncResult *res,
-               gpointer user_data)
-{
-       DBG("+");
-       SOFTAP_LOCK;
-
-       if (user_data == NULL) {
-               ERR("parameter(user_data) is NULL");
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       __softap_h *sa = (__softap_h *)user_data;
-       softap_error_e error;
-       softap_enabled_cb ecb = sa->enabled_cb;
-       void *data = sa->enabled_user_data;
-
-       if (!_softap_check_handle((softap_h)user_data)) {
-               DBG("Softap handle is already destroyed");
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
-       GVariant *g_var = softap_gdbus_proxy_finish(sa->gdbus_handle,
-               res, &gdbus_error);
-       if (g_var != NULL) {
-               guint info;
-               g_variant_get(g_var, "(u)", &info);
-               g_variant_unref(g_var);
-               error = __get_error(info);
-               if (error != SOFTAP_ERROR_NONE)
-                       ERR("Fail to enable Soft AP (%d)!!", error);
-       } else {
-               if (gdbus_error == GDBUS_ERROR_NO_REPLY
-                       && ++retry < SOFTAP_ERROR_RECOVERY_MAX) {
-                       softap_enable((softap_h)sa);
-                       SOFTAP_UNLOCK;
-                       DBG("-");
-                       return;
-               }
-               error = gdbus_error == GDBUS_ERROR_ACCESS_DENIED ?
-                       SOFTAP_ERROR_PERMISSION_DENIED : SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       retry = 0;
-       int sig_id = softap_gdbus_connect_signal(sa->gdbus_handle,
-               sigs[E_SIGNAL_SOFTAP_ON], user_data);
-       if (sig_id >= 0)
-               sigs[E_SIGNAL_SOFTAP_ON].sig_id = sig_id;
-
-       if (ecb)
-               ecb(error, true, data);
-
-       SOFTAP_UNLOCK;
-       DBG("-");
-       return;
-}
-
-static void __disabled_cfm_cb(GObject *source_object, GAsyncResult *res,
-               gpointer user_data)
-{
-       DBG("+");
-       SOFTAP_LOCK;
-
-       if (user_data == NULL) {
-               ERR("parameter(user_data) is NULL");
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       __softap_h *sa = (__softap_h *)user_data;
-       softap_error_e error;
-       softap_disabled_cause_e code = SOFTAP_DISABLED_BY_REQUEST;
-       softap_disabled_cb dcb = sa->disabled_cb;
-       void *data = sa->disabled_user_data;
-
-       if (!_softap_check_handle((softap_h) sa)) {
-               DBG("Softap handle is already destroyed");
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
-       GVariant *g_var = softap_gdbus_proxy_finish(sa->gdbus_handle,
-               res, &gdbus_error);
-       if (gdbus_error) {
-               SOFTAP_UNLOCK;
-               DBG("-");
-               return;
-       } else {
-               guint info;
-               g_variant_get(g_var, "(u)", &info);
-               g_variant_unref(g_var);
-               error = __get_error(info);
-               if (error != SOFTAP_ERROR_NONE)
-                       ERR("Fail to disable Soft AP (%d)!!", error);
-       }
-
-       int sig_id = softap_gdbus_connect_signal(sa->gdbus_handle,
-               sigs[E_SIGNAL_SOFTAP_OFF], user_data);
-       if (sig_id >= 0)
-               sigs[E_SIGNAL_SOFTAP_OFF].sig_id = sig_id;
-
-       if (dcb)
-               dcb(error, code, data);
-
-       SOFTAP_UNLOCK;
-       DBG("-");
-       return;
-}
-
-static void __settings_reloaded_cb(GObject *source_object, GAsyncResult *res,
-               gpointer user_data)
-{
-       DBG("+\n");
-       SOFTAP_LOCK;
-
-       if (user_data == NULL) {
-               ERR("parameter(user_data) is NULL");
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       __softap_h *sa = (__softap_h *)user_data;
-       softap_error_e error;
-       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
-       GVariant *g_var = softap_gdbus_proxy_finish(sa->gdbus_handle,
-               res, &gdbus_error);
-       error = _softap_convert_to_error(gdbus_error);
-       if (error == SOFTAP_ERROR_NONE) {
-               guint info;
-               g_variant_get(g_var, "(u)", &info);
-               g_variant_unref(g_var);
-               error = __get_error(info);
-       }
-
-       if (sa->settings_reloaded_cb == NULL) {
-               DBG("There is no settings_reloaded_cb\n");
-               SOFTAP_UNLOCK;
-               return;
-       }
-
-       sa->settings_reloaded_cb(error,
-                       sa->settings_reloaded_user_data);
-
-       sa->settings_reloaded_cb = NULL;
-       sa->settings_reloaded_user_data = NULL;
-
-       SOFTAP_UNLOCK;
-       DBG("-\n");
-}
-
-static GVariant *__prepare_softap_settings(softap_h softap)
-{
-       DBG("+");
-
-       __softap_h *sa = (__softap_h *) softap;
-       if (sa == NULL) {
-               ERR("Parameter is NULL!!");
-               return NULL;
-       }
-
-       GVariantBuilder *builder = NULL;
-       GVariant *params = NULL;
-
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
-       if (builder == NULL) {
-               ERR("Failed to create builder");
-               return NULL;
-       }
-
-       g_variant_builder_add(builder, "{sv}", "ssid", g_variant_new_string(sa->ssid));
-       g_variant_builder_add(builder, "{sv}", "sec_type", g_variant_new_int32(sa->sec_type));
-       g_variant_builder_add(builder, "{sv}", "visibility", g_variant_new_boolean(sa->visibility));
-       g_variant_builder_add(builder, "{sv}", "channel", g_variant_new_int32(sa->channel));
-       g_variant_builder_add(builder, "{sv}", "mode", g_variant_new_int32(sa->mode));
-
-       if (sa->sec_type != SOFTAP_SECURITY_TYPE_NONE)
-               g_variant_builder_add(builder, "{sv}", "passphrase", g_variant_new_string(sa->passphrase));
-
-       if (strlen(sa->ip_address))
-               g_variant_builder_add(builder, "{sv}", "ip_address", g_variant_new_string(sa->ip_address));
-
-       if (strlen(sa->vendor))
-               g_variant_builder_add(builder, "{sv}", "vendor", g_variant_new_string(sa->vendor));
-
-       params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
-       g_variant_builder_unref(builder);
-
-       DBG("-");
-       return params;
-}
-
-static bool __get_ssid_from_vconf(const char *path, char *ssid, unsigned int size)
-{
-       if (path == NULL || ssid == NULL || size == 0)
-               return false;
-
-       char *ptr = NULL;
-       char *ptr_tmp = NULL;
-
-       ptr = vconf_get_str(path);
-       if (ptr == NULL || strlen(ptr) == 0) {
-               free(ptr);
-               return false;
-       }
-
-       if (!g_utf8_validate(ptr, -1, (const char **)&ptr_tmp))
-               *ptr_tmp = '\0';
-
-       g_strlcpy(ssid, ptr, size);
-       free(ptr);
-
-       return true;
-}
-
-int _softap_enable_dhcp(softap_h softap, char *rangestart, char *rangestop)
-{
-       __softap_h *sa = (__softap_h *)softap;
-       GVariant *result = NULL;
-       GVariant *parameters = NULL;
-       const char *method = NULL;
-       if (rangestart == NULL && rangestop == NULL) {
-               parameters = NULL;
-               method = "enable_dhcp";
-       } else {
-               parameters = g_variant_new("(ss)", rangestart, rangestop);
-               method = "enable_dhcp_with_range";
-       }
-
-       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
-       result = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
-               method, parameters, &gdbus_error);
-       int ret = _softap_convert_to_error(gdbus_error);
-       if (ret != SOFTAP_ERROR_NONE) {
-               sa->dhcp_enabled = FALSE;
-               return ret;
-       }
-
-       guint info;
-       g_variant_get(result, "(u)", &info);
-       g_variant_unref(result);
-
-       sa->dhcp_enabled = TRUE;
-       return ret;
-}
-
-API int softap_create(softap_h *softap)
-{
-       DBG("+");
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       __softap_h *sa = NULL;
-       char ssid[SOFTAP_SSID_MAX_LEN + 1] = {0, };
-
-       sa = (__softap_h *) calloc(1, sizeof(__softap_h));
-       _retvm_if(sa == NULL, SOFTAP_ERROR_OUT_OF_MEMORY, "Not enough memory\n");
-
-       sa->visibility = TRUE;
-       sa->sec_type = SOFTAP_SECURITY_TYPE_WPA2_PSK;
-
-       if (__get_common_ssid(ssid, sizeof(ssid)) != SOFTAP_ERROR_NONE) {
-               ERR("Fail to get default ssid!!");
-               free(sa);
-               return SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       sa->ssid = g_strdup(ssid);
-       if (sa->ssid == NULL) {
-               ERR("Fail to get default ssid!!");
-               free(sa);
-               return SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       if (__get_initial_passphrase(sa->passphrase, sizeof(sa->passphrase)) == 0) {
-               ERR("Fail to generate random passphrase!!");
-               g_free(sa->ssid);
-               free(sa);
-               return SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       sa->channel = SOFTAP_DEFAULT_CHANNEL;
-       sa->mode = SOFTAP_WIRELESS_MODE_G;
-       sa->dhcp_enabled = FALSE;
-       sa->gdbus_handle = softap_gdbus_create();
-       if (sa->gdbus_handle == NULL) {
-               g_free(sa->ssid);
-               free(sa);
-               return SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       softap_gdbus_connect_signals(sa->gdbus_handle, sigs, (softap_h)sa);
-       *softap = (softap_h) sa;
-
-       _softap_add_handle(sa);
-
-       DBG("-");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_destroy(softap_h softap)
-{
-       DBG("+");
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-
-       DBG("SoftAP Handle : %p\n", sa);
-       softap_gdbus_disconnect_signals(sa->gdbus_handle, sigs);
-
-       if (sa->ssid)
-               free(sa->ssid);
-
-       softap_gdbus_destroy(sa->gdbus_handle);
-       memset(sa, 0x00, sizeof(__softap_h));
-
-       _softap_remove_handle(sa);
-
-       free(sa);
-       sa = NULL;
-
-       DBG("-");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_enable(softap_h softap)
-{
-       DBG("+");
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                        "parameter(softap) is NULL");
-
-       __softap_h *sa = (__softap_h *) softap;
-       softap_gdbus_proxy_reset_timeout(sa->gdbus_handle);
-       GVariant *settings = __prepare_softap_settings(softap);
-       if (!settings) {
-               ERR("Fail to initialize softap settings\n");
-               return SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       softap_gdbus_disconnect_signal(sa->gdbus_handle, sigs[E_SIGNAL_SOFTAP_ON].sig_id);
-       softap_gdbus_proxy_invoke_method(sa->gdbus_handle, "enable", settings,
-               (GAsyncReadyCallback) __enabled_cfm_cb, softap);
-       softap_gdbus_proxy_set_timeout(sa->gdbus_handle);
-
-       DBG("-");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_disable(softap_h softap)
-{
-       DBG("+");
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL");
-
-       __softap_h *sa = (__softap_h *) softap;
-       softap_gdbus_disconnect_signal(sa->gdbus_handle, sigs[E_SIGNAL_SOFTAP_OFF].sig_id);
-       softap_gdbus_proxy_invoke_method(sa->gdbus_handle,
-               "disable", NULL, (GAsyncReadyCallback) __disabled_cfm_cb, softap);
-
-       DBG("-");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_reload_settings(softap_h softap, softap_settings_reloaded_cb callback, void *user_data)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(callback) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-       _retvm_if(sa->settings_reloaded_cb, SOFTAP_ERROR_OPERATION_FAILED,
-                       "Operation in progress\n");
-
-       GVariant *settings = __prepare_softap_settings(softap);
-       _retvm_if(settings == NULL, SOFTAP_ERROR_OPERATION_FAILED,
-                       "softap settings initialization failed\n");
-
-       sa->settings_reloaded_cb = callback;
-       sa->settings_reloaded_user_data = user_data;
-
-       softap_gdbus_proxy_invoke_method(sa->gdbus_handle,
-               "reload_settings", settings, (GAsyncReadyCallback) __settings_reloaded_cb, (gpointer)softap);
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_is_enabled(softap_h softap, bool *enable)
-{
-       DBG("+");
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL");
-       _retvm_if(enable == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(enable) is NULL");
-
-       int is_on = 0;
-       int vconf_type = VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI_AP;
-
-       if (vconf_get_int(VCONFKEY_MOBILE_HOTSPOT_MODE, &is_on) != 0) {
-               ERR("Fail to get vconf key!!");
-               return SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       *enable = is_on & vconf_type ? true : false;
-
-       DBG("-");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_get_mac_address(softap_h softap, char **mac_address)
-{
-       DBG("+");
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(mac_address == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(mac_address) is NULL\n");
-
-       struct ifreq ifr;
-       int ret = SOFTAP_ERROR_NONE;
-       int s = 0;
-       char *macbuf = NULL;
-       bool enabled = false;
-
-       ret = softap_is_enabled(softap, &enabled);
-       _retvm_if(ret != SOFTAP_ERROR_NONE, SOFTAP_ERROR_OPERATION_FAILED, "Fail to check softap is enabled!!\n");
-       _retvm_if(enabled == false, SOFTAP_ERROR_NOT_PERMITTED, "Soft AP is not enabled\n");
-
-       g_strlcpy(ifr.ifr_name, SOFTAP_IF, sizeof(ifr.ifr_name));
-       s = socket(AF_INET, SOCK_DGRAM, 0);
-       _retvm_if(s < 0, SOFTAP_ERROR_OPERATION_FAILED,
-                       "Fail to get socket!!\n");
-
-       if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) {
-               ERR("Fail to get mac address!!");
-               close(s);
-               return SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       close(s);
-
-       macbuf = (char *)malloc(SOFTAP_STR_INFO_LEN);
-       _retvm_if(macbuf == NULL, SOFTAP_ERROR_OUT_OF_MEMORY, "Not enough memory\n");
-
-       snprintf(macbuf, SOFTAP_STR_INFO_LEN, "%02X:%02X:%02X:%02X:%02X:%02X",
-                       (unsigned char)ifr.ifr_hwaddr.sa_data[0],
-                       (unsigned char)ifr.ifr_hwaddr.sa_data[1],
-                       (unsigned char)ifr.ifr_hwaddr.sa_data[2],
-                       (unsigned char)ifr.ifr_hwaddr.sa_data[3],
-                       (unsigned char)ifr.ifr_hwaddr.sa_data[4],
-                       (unsigned char)ifr.ifr_hwaddr.sa_data[5]);
-
-       *mac_address = macbuf;
-
-       DBG("-");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_get_network_interface_name(softap_h softap, char **interface_name)
-{
-       DBG("+");
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(interface_name == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(interface_name) is NULL\n");
-
-       int ret = SOFTAP_ERROR_NONE;
-       bool enabled = false;
-
-       ret = softap_is_enabled(softap, &enabled);
-       _retvm_if(ret != SOFTAP_ERROR_NONE, SOFTAP_ERROR_OPERATION_FAILED, "Fail to check softap is enabled!!\n");
-       _retvm_if(enabled == false, SOFTAP_ERROR_NOT_PERMITTED, "Soft AP is not enabled\n");
-
-       *interface_name = strdup(SOFTAP_IF);
-       _retvm_if(*interface_name == NULL, SOFTAP_ERROR_OUT_OF_MEMORY,
-                       "Not enough memory!!\n");
-
-       DBG("-");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_set_ip_address(softap_h softap, softap_address_family_e address_family, const char *ip_address)
-{
-       DBG("+");
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(ip_address == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(ip_address) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-       int ip_len = 0;
-
-       if (address_family == SOFTAP_ADDRESS_FAMILY_IPV4) {
-               ip_len = strlen(ip_address);
-               if (ip_len < SOFTAP_IPV4_ADDRESS_MIN_LEN || ip_len > SOFTAP_IPV4_ADDRESS_MAX_LEN) {
-                       ERR("parameter(ip_address) is too short or long\n");
-                       return SOFTAP_ERROR_INVALID_PARAMETER;
-               }
-               g_strlcpy(sa->ip_address, ip_address, sizeof(sa->ip_address));
-       } else {
-               /* IPv6 is not supported yet. */
-               ERR("IPv6 address is not supported yet\n");
-               return SOFTAP_ERROR_NOT_SUPPORTED;
-       }
-
-       DBG("-");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_get_ip_address(softap_h softap, softap_address_family_e address_family,  char **ip_address)
-{
-       DBG("+");
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(ip_address == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(ip_address) is NULL\n");
-
-       struct ifreq ifr;
-       int ret = SOFTAP_ERROR_NONE;
-       int s = 0;
-       bool enabled = false;
-       char *ipbuf = NULL;
-
-       ret = softap_is_enabled(softap, &enabled);
-       _retvm_if(ret != SOFTAP_ERROR_NONE, SOFTAP_ERROR_OPERATION_FAILED, "Fail to check softap is enabled!!\n");
-       _retvm_if(enabled == false, SOFTAP_ERROR_NOT_PERMITTED, "Soft AP is not enabled\n");
-
-       g_strlcpy(ifr.ifr_name, SOFTAP_IF, sizeof(ifr.ifr_name));
-       s = socket(AF_INET, SOCK_DGRAM, 0);
-       _retvm_if(s < 0, SOFTAP_ERROR_OPERATION_FAILED, "Fail to get socket!!\n");
-
-       if (ioctl(s, SIOCGIFADDR, &ifr) < 0) {
-               ERR("Fail to get interface name!!");
-               close(s);
-               return SOFTAP_ERROR_OPERATION_FAILED;
-       }
-
-       close(s);
-
-       ipbuf = inet_ntoa(((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr);
-       *ip_address = strdup(ipbuf);
-       _retvm_if(*ip_address == NULL, SOFTAP_ERROR_OUT_OF_MEMORY,
-                       "Not enough memory\n");
-
-       DBG("-");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_get_gateway_address(softap_h softap, softap_address_family_e address_family, char **gateway_address)
-{
-       DBG("+");
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(gateway_address == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(gateway_address) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-       int ret = SOFTAP_ERROR_NONE;
-       bool enabled = false;
-
-       ret = softap_is_enabled(softap, &enabled);
-       _retvm_if(ret != SOFTAP_ERROR_NONE, SOFTAP_ERROR_OPERATION_FAILED, "Fail to check softap is enabled!!\n");
-       _retvm_if(enabled == false, SOFTAP_ERROR_NOT_PERMITTED, "Soft AP is not enabled\n");
-
-       if (strlen(sa->ip_address) > 0)
-               *gateway_address = strdup(sa->ip_address);
-       else
-               *gateway_address = strdup(SOFTAP_GATEWAY);
-
-       DBG("-");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_get_subnet_mask(softap_h softap, softap_address_family_e address_family, char **subnet_mask)
-{
-       DBG("+");
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(subnet_mask == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(subnet_mask) is NULL\n");
-
-       int ret = SOFTAP_ERROR_NONE;
-       bool enabled = false;
-
-       ret = softap_is_enabled(softap, &enabled);
-       _retvm_if(ret != SOFTAP_ERROR_NONE, SOFTAP_ERROR_OPERATION_FAILED, "Fail to check softap is enabled!!\n");
-       _retvm_if(enabled == false, SOFTAP_ERROR_NOT_PERMITTED, "Soft AP is not enabled\n");
-
-       *subnet_mask = strdup(SOFTAP_SUBNET_MASK);
-
-       DBG("-");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_foreach_connected_clients(softap_h softap, softap_connected_client_cb callback, void *user_data)
-{
-       DBG("+\n");
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(callback) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-       __softap_client_h client = {"", "", NULL, 0};
-       gchar *ip = NULL;
-       gchar *mac = NULL;
-       gchar *hostname = NULL;
-       guint timestamp = 0;
-       GVariantIter *outer_iter = NULL;
-       GVariantIter *inner_iter = NULL;
-       GVariant *station = NULL;
-       GVariant *value = NULL;
-       gchar *key = NULL;
-       int interface = 0;
-
-       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
-       GVariant *result = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
-               "get_station_info", NULL, &gdbus_error);
-
-       g_variant_get(result, "(a(a{sv}))", &outer_iter);
-
-       while (g_variant_iter_loop(outer_iter, "(@a{sv})", &station)) {
-               g_variant_get(station, "a{sv}", &inner_iter);
-
-               while (g_variant_iter_loop(inner_iter, "{sv}", &key, &value)) {
-                       if (g_strcmp0(key, "Type") == 0) {
-                               interface = g_variant_get_int32(value);
-                               if (interface != 4) {
-                                       g_free(key);
-                                       key = NULL;
-                                       g_variant_unref(value);
-                                       break;
-                               }
-                       }
-                       if (g_strcmp0(key, "IP") == 0) {
-                               g_variant_get(value, "s", &ip);
-                               SDBG("ip is %s\n", ip);
-                               g_strlcpy(client.ip, ip, sizeof(client.ip));
-                       } else if (g_strcmp0(key, "MAC") == 0) {
-                               g_variant_get(value, "s", &mac);
-                               SDBG("mac is %s\n", mac);
-                               g_strlcpy(client.mac, mac, sizeof(client.mac));
-                       } else if (g_strcmp0(key, "Name") == 0) {
-                               g_variant_get(value, "s", &hostname);
-                               SDBG("hostname is %s\n", hostname);
-                               if (hostname)
-                                       client.hostname = g_strdup(hostname);
-                       } else if (g_strcmp0(key, "Time") == 0) {
-                               timestamp = g_variant_get_int32(value);
-                               DBG("timestamp is %d\n", timestamp);
-                               client.tm = (time_t)timestamp;
-                       } else {
-                               ERR("Key %s not required\n", key);
-                       }
-               }
-               g_free(hostname);
-               hostname = NULL;
-               g_free(ip);
-               ip = NULL;
-               g_free(mac);
-               mac = NULL;
-               g_variant_iter_free(inner_iter);
-               if (callback((softap_client_h)&client, user_data) == false) {
-                       DBG("iteration is stopped\n");
-                       g_free(client.hostname);
-                       client.hostname = NULL;
-                       g_variant_iter_free(outer_iter);
-                       g_variant_unref(result);
-                       DBG("-\n");
-                       return SOFTAP_ERROR_OPERATION_FAILED;
-               }
-               g_free(client.hostname);
-               client.hostname = NULL;
-       }
-       g_variant_iter_free(outer_iter);
-       g_variant_unref(result);
-       DBG("-\n");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_set_enabled_cb(softap_h softap, softap_enabled_cb callback, void *user_data)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(callback) is NULL\n");
-
-       __softap_h *sa = (__softap_h *) softap;
-
-       sa->enabled_cb = callback;
-       sa->enabled_user_data = user_data;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_unset_enabled_cb(softap_h softap)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       __softap_h *sa = (__softap_h *) softap;
-
-       sa->enabled_cb = NULL;
-       sa->enabled_user_data = NULL;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_set_disabled_cb(softap_h softap, softap_disabled_cb callback, void *user_data)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(callback) is NULL\n");
-
-       __softap_h *sa = (__softap_h *) softap;
-
-       sa->disabled_cb = callback;
-       sa->disabled_user_data = user_data;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_unset_disabled_cb(softap_h softap)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       __softap_h *sa = (__softap_h *) softap;
-
-       sa->disabled_cb = NULL;
-       sa->disabled_user_data = NULL;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_set_client_connection_state_changed_cb(softap_h softap, softap_client_connection_state_changed_cb callback, void *user_data)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(callback) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-
-       sa->changed_cb = callback;
-       sa->changed_user_data = user_data;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_unset_client_connection_state_changed_cb(softap_h softap)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-
-       sa->changed_cb = NULL;
-       sa->changed_user_data = NULL;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-
-API int softap_set_security_type_changed_cb(softap_h softap, softap_security_type_changed_cb callback, void *user_data)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(callback) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-
-       sa->security_type_changed_cb = callback;
-       sa->security_type_user_data = user_data;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_unset_security_type_changed_cb(softap_h softap)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-
-       sa->security_type_changed_cb = NULL;
-       sa->security_type_user_data = NULL;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_set_ssid_visibility_changed_cb(softap_h softap, softap_ssid_visibility_changed_cb callback, void *user_data)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(callback) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-
-       sa->ssid_visibility_changed_cb = callback;
-       sa->ssid_visibility_user_data = user_data;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_unset_ssid_visibility_changed_cb(softap_h softap)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-
-       sa->ssid_visibility_changed_cb = NULL;
-       sa->ssid_visibility_user_data = NULL;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_set_passphrase_changed_cb(softap_h softap, softap_passphrase_changed_cb callback, void *user_data)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(callback) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-
-       sa->passphrase_changed_cb = callback;
-       sa->passphrase_user_data = user_data;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_unset_passphrase_changed_cb(softap_h softap)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-
-       sa->passphrase_changed_cb = NULL;
-       sa->passphrase_user_data = NULL;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_set_security_type(softap_h softap, softap_security_type_e type)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       if (type != SOFTAP_SECURITY_TYPE_NONE &&
-                       type != SOFTAP_SECURITY_TYPE_WPA2_PSK &&
-                       type != SOFTAP_SECURITY_TYPE_WPS) {
-               ERR("Invalid param\n");
-               return SOFTAP_ERROR_INVALID_PARAMETER;
-       }
-
-       __softap_h *sa = (__softap_h *) softap;
-       sa->sec_type = type;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-
-API int softap_get_security_type(softap_h softap, softap_security_type_e *type)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                               "parameter(softap) is NULL\n");
-       _retvm_if(type == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                               "parameter(type) is NULL\n");
-
-       return __get_security_type(type);
-}
-
-API int softap_set_ssid(softap_h softap, const char *ssid)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(ssid == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(ssid) is NULL\n");
-
-       __softap_h *sa = (__softap_h *) softap;
-       char *p_ssid = NULL;
-       int ssid_len = 0;
-
-       ssid_len = strlen(ssid);
-       if (ssid_len > SOFTAP_SSID_MAX_LEN) {
-               ERR("parameter(ssid) is too long");
-               return SOFTAP_ERROR_INVALID_PARAMETER;
-       }
-
-       p_ssid = strdup(ssid);
-       if (p_ssid == NULL) {
-               ERR("strdup failed\n");
-               return SOFTAP_ERROR_OUT_OF_MEMORY;
-       }
-
-       if (sa->ssid)
-               g_free(sa->ssid);
-       sa->ssid = p_ssid;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_get_ssid(softap_h softap, char **ssid)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(ssid == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(ssid) is NULL\n");
-
-       __softap_h *sa = (__softap_h *) softap;
-
-       char val[SOFTAP_SSID_MAX_LEN + 1] = {0, };
-
-       if (__get_ssid_from_vconf(VCONFKEY_SOFTAP_SSID, val, sizeof(val)) == false) {
-               if (__get_common_ssid(val, sizeof(val)) != SOFTAP_ERROR_NONE) {
-                       ERR("Fail to get default ssid!!");
-                       free(sa);
-                       return SOFTAP_ERROR_OPERATION_FAILED;
-               }
-
-       }
-
-       *ssid = strdup(val);
-       if (*ssid == NULL) {
-               ERR("strdup is failed\n");
-               return SOFTAP_ERROR_OUT_OF_MEMORY;
-       }
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_set_ssid_visibility(softap_h softap, bool visible)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       __softap_h *sa = (__softap_h *) softap;
-       sa->visibility = visible ? TRUE : FALSE;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_get_ssid_visibility(softap_h softap, bool *visible)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(visible == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(visible) is NULL\n");
-
-       return __get_visibility(visible);
-}
-
-API int softap_set_passphrase(softap_h softap, const char *passphrase)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(passphrase == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(passphrase) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-       int passphrase_len = 0;
-
-       DBG("+");
-       passphrase_len = strlen(passphrase);
-       if (passphrase_len < SOFTAP_KEY_MIN_LEN ||
-                       passphrase_len > SOFTAP_KEY_MAX_LEN) {
-               ERR("parameter(passphrase) is too short or long\n");
-               return SOFTAP_ERROR_INVALID_PARAMETER;
-       }
-
-       g_strlcpy(sa->passphrase, passphrase, sizeof(sa->passphrase));
-
-       DBG("-");
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_get_passphrase(softap_h softap, char **passphrase)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(passphrase == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(passphrase) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
-       GVariant *parameters = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
-               "get_passphrase", NULL, &gdbus_error);
-       int ret = _softap_convert_to_error(gdbus_error);
-       if (ret != SOFTAP_ERROR_NONE)
-               return ret;
-
-       g_variant_get(parameters, "(su)", passphrase, &ret);
-       g_variant_unref(parameters);
-       return __get_error(ret);
-}
-
-API int softap_push_wps_button(softap_h softap)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL");
-
-       DBG("+");
-       __softap_h *sa = (__softap_h *)softap;
-       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
-       GVariant *parameters = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
-               "push_wps_button", NULL, &gdbus_error);
-       int ret = _softap_convert_to_error(gdbus_error);
-       if (ret != SOFTAP_ERROR_NONE)
-               return ret;
-
-       if (parameters != NULL) {
-               guint info;
-               g_variant_get(parameters, "(u)", &info);
-               g_variant_unref(parameters);
-               return __get_error(info);
-       }
-       return ret;
-}
-
-API int softap_set_wps_pin(softap_h softap, const char *wps_pin)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL");
-       _retvm_if(wps_pin == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(wps_pin) is NULL");
-
-       DBG("+");
-
-       __softap_h *sa = (__softap_h *)softap;
-       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
-       GVariant *parameters = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
-               "set_wps_pin", g_variant_new("(s)", wps_pin), &gdbus_error);
-       int ret = _softap_convert_to_error(gdbus_error);
-       if (ret != SOFTAP_ERROR_NONE)
-               return ret;
-
-       if (parameters != NULL) {
-               guint info;
-               g_variant_get(parameters, "(u)", &info);
-               g_variant_unref(parameters);
-               return __get_error(info);
-       }
-       return ret;
-}
-
-API int softap_get_vendor_element(softap_h softap, char **vendor_element)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(vendor_element == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(vendor) is NULL\n");
-
-       char val[SOFTAP_VENDOR_MAX_LEN + 1] = {0, };
-
-       int ret = __get_vsie(val, sizeof(val));
-       if (ret != SOFTAP_ERROR_NONE) {
-               ERR("Failed to get vendor elements");
-               return ret;
-       }
-
-       *vendor_element = strdup(val);
-       if (*vendor_element == NULL) {
-               ERR("strdup is failed");
-               return SOFTAP_ERROR_OUT_OF_MEMORY;
-       }
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_set_vendor_element(softap_h softap, const char *vendor_element)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(vendor_element == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(vendor_element) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-       int vendor_len = 0;
-
-       vendor_len = strlen(vendor_element);
-       if (vendor_len > SOFTAP_VENDOR_MAX_LEN) {
-               ERR("parameter(vendor) is too long");
-               return SOFTAP_ERROR_INVALID_PARAMETER;
-       }
-
-       g_strlcpy(sa->vendor, vendor_element, sizeof(sa->vendor));
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_set_channel(softap_h softap, int channel)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-
-       if (channel == 0)
-               CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP_ACS);
-
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       __softap_h *sa = (__softap_h *) softap;
-       sa->channel = channel;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_get_channel(softap_h softap, int *channel)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                               "parameter(softap) is NULL\n");
-       _retvm_if(channel == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                               "parameter(channel) is NULL\n");
-
-       return __get_channel(channel);
-}
-
-API int softap_set_mode(softap_h softap, softap_wireless_mode_e mode)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-       sa->mode = mode;
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_get_mode(softap_h softap, softap_wireless_mode_e *mode)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
-                       SOFTAP_ERROR_PERMISSION_DENIED,
-                       "permission denied!");
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(mode == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(mode) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-       *mode = sa->mode;
-       return __get_mode(mode);
-}
-
-API int softap_enable_dhcp(softap_h softap)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       return _softap_enable_dhcp(softap, NULL, NULL);
-}
-
-API int softap_disable_dhcp(softap_h softap)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
-       GVariant *parameters = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
-               "disable_dhcp", NULL, &gdbus_error);
-       int ret = _softap_convert_to_error(gdbus_error);
-       if (ret != SOFTAP_ERROR_NONE)
-               return ret;
-
-       g_variant_get(parameters, "(u)", &ret);
-       g_variant_unref(parameters);
-       sa->dhcp_enabled = FALSE;
-
-       return SOFTAP_ERROR_NONE;
-}
-
-API int softap_is_dhcp_enabled(softap_h softap, bool *dhcp_enabled)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(dhcp_enabled == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(dhcp_enabled) is NULL\n");
-
-       __softap_h *sa = (__softap_h *)softap;
-       gboolean enabled = FALSE;
-       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
-       GVariant *parameters = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
-               "get_dhcp_state", NULL, &gdbus_error);
-
-       int ret = _softap_convert_to_error(gdbus_error);
-       if (ret == SOFTAP_ERROR_NONE) {
-               g_variant_get(parameters, "(b)", &enabled);
-               g_variant_unref(parameters);
-       }
-
-       sa->dhcp_enabled = enabled;
-       *dhcp_enabled = sa->dhcp_enabled == TRUE ? true : false;
-
-       return ret;
-}
-
-API int softap_enable_dhcp_with_range(softap_h softap, char *rangestart, char *rangestop)
-{
-       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
-
-       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(softap) is NULL\n");
-       _retvm_if(rangestart == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(rangestart) is NULL\n");
-       _retvm_if(rangestop == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
-                       "parameter(rangestop) is NULL\n");
-
-       return _softap_enable_dhcp(softap, rangestart, rangestop);
-}
diff --git a/src/softap.cpp b/src/softap.cpp
new file mode 100755 (executable)
index 0000000..a79e228
--- /dev/null
@@ -0,0 +1,1703 @@
+/*
+* Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <net/if.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <dbus/dbus.h>
+#include <gio/gio.h>
+#include <vconf.h>
+
+#include "softap_private.h"
+#include "softap_gdbus.h"
+#include "softap_dlog.h"
+
+#include "SoftapEventHandler.h"
+#include "SoftapEventCallback.h"
+
+static int retry = 0;
+
+static int __get_common_ssid(char *ssid, unsigned int size)
+{
+       if (ssid == NULL) {
+               ERR("ssid is null!!");
+               return SOFTAP_ERROR_INVALID_PARAMETER;
+       }
+
+       char *device_name = NULL;
+       char *end = NULL;
+
+       device_name = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
+       if (device_name == NULL) {
+               ERR("vconf_get_str is failed and set default ssid!!");
+               g_strlcpy(ssid, SOFTAP_DEFAULT_SSID, size);
+       } else
+               g_strlcpy(ssid, device_name, size);
+
+       if (!g_utf8_validate(ssid, -1, (const char **)&end))
+               *end = '\0';
+
+       free(device_name);
+
+       return SOFTAP_ERROR_NONE;
+}
+
+static softap_error_e __get_security_type(softap_security_type_e *security_type)
+{
+       if (security_type == NULL) {
+               ERR("Invalid param\n");
+               return SOFTAP_ERROR_INVALID_PARAMETER;
+       }
+
+       if (vconf_get_int(VCONFKEY_SOFTAP_SECURITY,
+                               (int *)security_type) < 0) {
+               ERR("vconf_get_int is failed\n");
+               return SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       return SOFTAP_ERROR_NONE;
+}
+
+static softap_error_e __get_visibility(bool *visible)
+{
+       if (visible == NULL) {
+               ERR("Invalid param\n");
+               return SOFTAP_ERROR_INVALID_PARAMETER;
+       }
+
+       int hide = 0;
+
+       if (vconf_get_int(VCONFKEY_SOFTAP_HIDE, &hide) < 0) {
+               ERR("vconf_get_int is failed\n");
+               return SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       if (hide)
+               *visible = false;
+       else
+               *visible = true;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+static softap_error_e __get_vsie(char *vsie, unsigned int size)
+{
+       char *ptr = NULL;
+
+       ptr = vconf_get_str(VCONFKEY_SOFTAP_VSIE);
+       if (ptr == NULL)
+               return SOFTAP_ERROR_OPERATION_FAILED;
+
+       g_strlcpy(vsie, ptr, size);
+       free(ptr);
+
+       return SOFTAP_ERROR_NONE;
+}
+
+static softap_error_e __get_channel(int *channel)
+{
+       if (channel == NULL) {
+               ERR("Invalid param\n");
+               return SOFTAP_ERROR_INVALID_PARAMETER;
+       }
+
+       if (vconf_get_int(VCONFKEY_SOFTAP_CHANNEL, channel) < 0) {
+               ERR("vconf_get_int is failed\n");
+               return SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       return SOFTAP_ERROR_NONE;
+}
+
+static softap_error_e __get_mode(softap_wireless_mode_e *mode)
+{
+       if (mode == NULL) {
+               ERR("Invalid param\n");
+               return SOFTAP_ERROR_INVALID_PARAMETER;
+       }
+
+       if (vconf_get_int(VCONFKEY_SOFTAP_MODE, (int *)mode) < 0) {
+               ERR("vconf_get_int is failed\n");
+               return SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       return SOFTAP_ERROR_NONE;
+}
+
+static int __get_initial_passphrase(char *passphrase, unsigned int size)
+{
+       if (passphrase == NULL ||
+                       size == 0 || size < SOFTAP_KEY_MIN_LEN + 1)
+               return 0;
+
+       guint32 rand_int = 0;
+       int index = 0;
+
+       for (index = 0; index < SOFTAP_KEY_MIN_LEN; index++) {
+               rand_int = g_random_int_range('a', 'z');
+               passphrase[index] = rand_int;
+       }
+       passphrase[index] = '\0';
+
+       return index;
+}
+
+static softap_error_e __get_error(int agent_error)
+{
+       softap_error_e err = SOFTAP_ERROR_NONE;
+
+       switch (agent_error) {
+       case MOBILE_AP_ERROR_NONE:
+               err = SOFTAP_ERROR_NONE;
+               break;
+
+       case MOBILE_AP_ERROR_RESOURCE:
+               err = SOFTAP_ERROR_OUT_OF_MEMORY;
+               break;
+
+       case MOBILE_AP_ERROR_INTERNAL:
+               err = SOFTAP_ERROR_OPERATION_FAILED;
+               break;
+
+       case MOBILE_AP_ERROR_INVALID_PARAM:
+               err = SOFTAP_ERROR_INVALID_PARAMETER;
+               break;
+
+       case MOBILE_AP_ERROR_ALREADY_ENABLED:
+               err = SOFTAP_ERROR_ALREADY_ENABLED;
+               break;
+
+       case MOBILE_AP_ERROR_NET_OPEN:
+               err = SOFTAP_ERROR_OPERATION_FAILED;
+               break;
+
+       case MOBILE_AP_ERROR_NET_CLOSE:
+               err = SOFTAP_ERROR_OPERATION_FAILED;
+               break;
+
+       case MOBILE_AP_ERROR_DHCP:
+               err = SOFTAP_ERROR_OPERATION_FAILED;
+               break;
+
+       case MOBILE_AP_ERROR_IN_PROGRESS:
+               err = SOFTAP_ERROR_OPERATION_FAILED;
+               break;
+
+       case MOBILE_AP_ERROR_NOT_PERMITTED:
+               err = SOFTAP_ERROR_NOT_PERMITTED;
+               break;
+
+       case MOBILE_AP_ERROR_PERMISSION_DENIED:
+               err = SOFTAP_ERROR_PERMISSION_DENIED;
+               break;
+
+       default:
+               ERR("Not defined error : %d\n", agent_error);
+               err = SOFTAP_ERROR_OPERATION_FAILED;
+               break;
+       }
+
+       return err;
+}
+
+static void __handle_softap_on(bool is_requested, void *user_data)
+{
+       DBG("+");
+       if (user_data == NULL) {
+               ERR("parameter(user_data) is NULL");
+               return;
+       }
+
+       __softap_h *sa = (__softap_h *)user_data;
+       softap_enabled_cb ecb = sa->enabled_cb;
+       if (ecb == NULL)
+               return;
+
+       ecb(SOFTAP_ERROR_NONE, is_requested, sa->enabled_user_data);
+       DBG("-");
+}
+
+static void __handle_softap_off(int disabled_code, void *user_data)
+{
+       DBG("+");
+       if (user_data == NULL) {
+               ERR("parameter(user_data) is NULL");
+               return;
+       }
+
+       __softap_h *sa = (__softap_h *)user_data;
+       softap_disabled_cb dcb = sa->disabled_cb;
+       if (dcb == NULL)
+               return;
+
+       dcb(SOFTAP_ERROR_NONE, (softap_disabled_cause_e)disabled_code, sa->disabled_user_data);
+       DBG("-");
+}
+
+static void __invoke_disabled_cb_with_reason(__softap_h *sa, softap_disabled_cause_e code)
+{
+       if (sa == NULL || sa->disabled_cb == NULL) {
+               ERR("sa or sa->disabled_cb is NULL");
+               return;
+       }
+
+       sa->disabled_cb(SOFTAP_ERROR_NONE, code, sa->disabled_user_data);
+}
+
+static void __handle_low_battery_mode(void *user_data)
+{
+       DBG("+");
+       __invoke_disabled_cb_with_reason((__softap_h *)user_data, SOFTAP_DISABLED_BY_LOW_BATTERY);
+       DBG("-");
+}
+
+static void __handle_flight_mode(void *user_data)
+{
+       DBG("+");
+       __invoke_disabled_cb_with_reason((__softap_h *)user_data, SOFTAP_DISABLED_BY_FLIGHT_MODE);
+       DBG("-");
+}
+
+static void __handle_security_type_changed(int type, void *user_data)
+{
+       DBG("+");
+       if (user_data == NULL) {
+               ERR("parameter(user_data) is NULL");
+               return;
+       }
+
+       __softap_h *sa = (__softap_h *)user_data;
+       if (sa->security_type_changed_cb)
+               sa->security_type_changed_cb((softap_security_type_e)type, sa->security_type_user_data);
+       DBG("-");
+}
+
+static void __handle_ssid_visibility_changed(bool visible, void *user_data)
+{
+       DBG("+");
+       if (user_data == NULL) {
+               ERR("parameter(user_data) is NULL");
+               return;
+       }
+
+       __softap_h *sa = (__softap_h *)user_data;
+       if (sa->ssid_visibility_changed_cb)
+               sa->ssid_visibility_changed_cb(visible, sa->ssid_visibility_user_data);
+       DBG("-");
+}
+
+static void __handle_passphrase_changed(void *user_data)
+{
+       DBG("+");
+       if (user_data == NULL) {
+               ERR("parameter(user_data) is NULL");
+               return;
+       }
+
+       __softap_h *sa = (__softap_h *)user_data;
+       if (sa->passphrase_changed_cb)
+               sa->passphrase_changed_cb(sa->passphrase_user_data);
+       DBG("-");
+}
+
+static void __handle_client_connection_changed(softap_client_h client, bool opened, void *user_data)
+{
+       DBG("+");
+       if (user_data == NULL) {
+               ERR("parameter(user_data) is NULL");
+               return;
+       }
+
+       __softap_h *sa = (__softap_h *)user_data;
+       if (sa->changed_cb)
+               sa->changed_cb(client, opened, sa->changed_user_data);
+       DBG("-");
+}
+
+static void __enabled_cfm_cb(GObject *source_object, GAsyncResult *res,
+               gpointer user_data)
+{
+       DBG("+");
+       SOFTAP_LOCK;
+
+       if (user_data == NULL) {
+               ERR("parameter(user_data) is NULL");
+               SOFTAP_UNLOCK;
+               return;
+       }
+
+       __softap_h *sa = (__softap_h *)user_data;
+       softap_error_e error;
+       softap_enabled_cb ecb = sa->enabled_cb;
+       void *data = sa->enabled_user_data;
+
+       if (!_softap_check_handle((softap_h)user_data)) {
+               DBG("Softap handle is already destroyed");
+               SOFTAP_UNLOCK;
+               return;
+       }
+
+       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
+       GVariant *g_var = softap_gdbus_proxy_finish(sa->gdbus_handle,
+               res, &gdbus_error);
+       if (g_var != NULL) {
+               guint info;
+               g_variant_get(g_var, "(u)", &info);
+               g_variant_unref(g_var);
+               error = __get_error(info);
+               if (error != SOFTAP_ERROR_NONE)
+                       ERR("Fail to enable Soft AP (%d)!!", error);
+       } else {
+               if (gdbus_error == GDBUS_ERROR_NO_REPLY
+                       && ++retry < SOFTAP_ERROR_RECOVERY_MAX) {
+                       softap_enable((softap_h)sa);
+                       SOFTAP_UNLOCK;
+                       DBG("-");
+                       return;
+               }
+               error = gdbus_error == GDBUS_ERROR_ACCESS_DENIED ?
+                       SOFTAP_ERROR_PERMISSION_DENIED : SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       retry = 0;
+       static_cast<SoftapEventHandler*>(sa->event_handler)->startEnabledEvent();
+       if (ecb)
+               ecb(error, true, data);
+
+       SOFTAP_UNLOCK;
+       DBG("-");
+       return;
+}
+
+static void __disabled_cfm_cb(GObject *source_object, GAsyncResult *res,
+               gpointer user_data)
+{
+       DBG("+");
+       SOFTAP_LOCK;
+
+       if (user_data == NULL) {
+               ERR("parameter(user_data) is NULL");
+               SOFTAP_UNLOCK;
+               return;
+       }
+
+       __softap_h *sa = (__softap_h *)user_data;
+       softap_error_e error;
+       softap_disabled_cause_e code = SOFTAP_DISABLED_BY_REQUEST;
+       softap_disabled_cb dcb = sa->disabled_cb;
+       void *data = sa->disabled_user_data;
+
+       if (!_softap_check_handle((softap_h) sa)) {
+               DBG("Softap handle is already destroyed");
+               SOFTAP_UNLOCK;
+               return;
+       }
+
+       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
+       GVariant *g_var = softap_gdbus_proxy_finish(sa->gdbus_handle,
+               res, &gdbus_error);
+       if (gdbus_error) {
+               SOFTAP_UNLOCK;
+               DBG("-");
+               return;
+       } else {
+               guint info;
+               g_variant_get(g_var, "(u)", &info);
+               g_variant_unref(g_var);
+               error = __get_error(info);
+               if (error != SOFTAP_ERROR_NONE)
+                       ERR("Fail to disable Soft AP (%d)!!", error);
+       }
+
+       static_cast<SoftapEventHandler*>(sa->event_handler)->startDisabledEvent();
+       if (dcb)
+               dcb(error, code, data);
+
+       SOFTAP_UNLOCK;
+       DBG("-");
+       return;
+}
+
+static void __settings_reloaded_cb(GObject *source_object, GAsyncResult *res,
+               gpointer user_data)
+{
+       DBG("+\n");
+       SOFTAP_LOCK;
+
+       if (user_data == NULL) {
+               ERR("parameter(user_data) is NULL");
+               SOFTAP_UNLOCK;
+               return;
+       }
+
+       __softap_h *sa = (__softap_h *)user_data;
+       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
+       GVariant *g_var = softap_gdbus_proxy_finish(sa->gdbus_handle,
+               res, &gdbus_error);
+       softap_error_e error = static_cast<softap_error_e>(_softap_convert_to_error(gdbus_error));
+       if (error == SOFTAP_ERROR_NONE) {
+               guint info;
+               g_variant_get(g_var, "(u)", &info);
+               g_variant_unref(g_var);
+               error = __get_error(info);
+       }
+
+       if (sa->settings_reloaded_cb == NULL) {
+               DBG("There is no settings_reloaded_cb\n");
+               SOFTAP_UNLOCK;
+               return;
+       }
+
+       sa->settings_reloaded_cb(error,
+                       sa->settings_reloaded_user_data);
+
+       sa->settings_reloaded_cb = NULL;
+       sa->settings_reloaded_user_data = NULL;
+
+       SOFTAP_UNLOCK;
+       DBG("-\n");
+}
+
+static GVariant *__prepare_softap_settings(softap_h softap)
+{
+       DBG("+");
+
+       __softap_h *sa = (__softap_h *) softap;
+       if (sa == NULL) {
+               ERR("Parameter is NULL!!");
+               return NULL;
+       }
+
+       GVariantBuilder *builder = NULL;
+       GVariant *params = NULL;
+
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+       if (builder == NULL) {
+               ERR("Failed to create builder");
+               return NULL;
+       }
+
+       g_variant_builder_add(builder, "{sv}", "ssid", g_variant_new_string(sa->ssid));
+       g_variant_builder_add(builder, "{sv}", "sec_type", g_variant_new_int32(sa->sec_type));
+       g_variant_builder_add(builder, "{sv}", "visibility", g_variant_new_boolean(sa->visibility));
+       g_variant_builder_add(builder, "{sv}", "channel", g_variant_new_int32(sa->channel));
+       g_variant_builder_add(builder, "{sv}", "mode", g_variant_new_int32(sa->mode));
+
+       if (sa->sec_type != SOFTAP_SECURITY_TYPE_NONE)
+               g_variant_builder_add(builder, "{sv}", "passphrase", g_variant_new_string(sa->passphrase));
+
+       if (strlen(sa->ip_address))
+               g_variant_builder_add(builder, "{sv}", "ip_address", g_variant_new_string(sa->ip_address));
+
+       if (strlen(sa->vendor))
+               g_variant_builder_add(builder, "{sv}", "vendor", g_variant_new_string(sa->vendor));
+
+       params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
+       g_variant_builder_unref(builder);
+
+       DBG("-");
+       return params;
+}
+
+static bool __get_ssid_from_vconf(const char *path, char *ssid, unsigned int size)
+{
+       if (path == NULL || ssid == NULL || size == 0)
+               return false;
+
+       char *ptr = NULL;
+       char *ptr_tmp = NULL;
+
+       ptr = vconf_get_str(path);
+       if (ptr == NULL || strlen(ptr) == 0) {
+               free(ptr);
+               return false;
+       }
+
+       if (!g_utf8_validate(ptr, -1, (const char **)&ptr_tmp))
+               *ptr_tmp = '\0';
+
+       g_strlcpy(ssid, ptr, size);
+       free(ptr);
+
+       return true;
+}
+
+int _softap_enable_dhcp(softap_h softap, char *rangestart, char *rangestop)
+{
+       __softap_h *sa = (__softap_h *)softap;
+       GVariant *result = NULL;
+       GVariant *parameters = NULL;
+       const char *method = NULL;
+       if (rangestart == NULL && rangestop == NULL) {
+               parameters = NULL;
+               method = "enable_dhcp";
+       } else {
+               parameters = g_variant_new("(ss)", rangestart, rangestop);
+               method = "enable_dhcp_with_range";
+       }
+
+       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
+       result = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
+               method, parameters, &gdbus_error);
+       int ret = _softap_convert_to_error(gdbus_error);
+       if (ret != SOFTAP_ERROR_NONE) {
+               sa->dhcp_enabled = FALSE;
+               return ret;
+       }
+
+       guint info;
+       g_variant_get(result, "(u)", &info);
+       g_variant_unref(result);
+
+       sa->dhcp_enabled = TRUE;
+       return ret;
+}
+
+static SoftapEventCallback *__create_event_callback()
+{
+       return new SoftapEventCallback(__handle_softap_on, __handle_softap_off,
+               __handle_low_battery_mode, __handle_flight_mode,
+               __handle_security_type_changed, __handle_ssid_visibility_changed,
+               __handle_passphrase_changed, __handle_client_connection_changed);
+}
+
+API int softap_create(softap_h *softap)
+{
+       DBG("+");
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       __softap_h *sa = NULL;
+
+       sa = (__softap_h *) calloc(1, sizeof(__softap_h));
+       _retvm_if(sa == NULL, SOFTAP_ERROR_OUT_OF_MEMORY, "Not enough memory\n");
+
+       sa->visibility = TRUE;
+       sa->sec_type = SOFTAP_SECURITY_TYPE_WPA2_PSK;
+
+       char ssid[SOFTAP_SSID_MAX_LEN + 1] = {0, };
+       if (__get_common_ssid(ssid, sizeof(ssid)) != SOFTAP_ERROR_NONE) {
+               ERR("Fail to get default ssid!!");
+               free(sa);
+               return SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       sa->ssid = g_strdup(ssid);
+       if (sa->ssid == NULL) {
+               ERR("Fail to get default ssid!!");
+               free(sa);
+               return SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       if (__get_initial_passphrase(sa->passphrase, sizeof(sa->passphrase)) == 0) {
+               ERR("Fail to generate random passphrase!!");
+               g_free(sa->ssid);
+               free(sa);
+               return SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       sa->channel = SOFTAP_DEFAULT_CHANNEL;
+       sa->mode = SOFTAP_WIRELESS_MODE_G;
+       sa->dhcp_enabled = FALSE;
+
+       sa->gdbus_handle = softap_gdbus_create();
+       if (sa->gdbus_handle == NULL) {
+               g_free(sa->ssid);
+               free(sa);
+               return SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       SoftapEventHandler *event_handler = new SoftapEventHandler(sa, sa->gdbus_handle);
+       event_handler->registerEvents(__create_event_callback());
+       sa->event_handler = static_cast<void *>(event_handler);
+
+       *softap = (softap_h) sa;
+       _softap_add_handle(sa);
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_destroy(softap_h softap)
+{
+       DBG("+");
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+
+       DBG("SoftAP Handle : %p\n", sa);
+       if (sa->ssid)
+               free(sa->ssid);
+
+       SoftapEventHandler *event_handler = static_cast<SoftapEventHandler *>(sa->event_handler);
+       if (event_handler) {
+               event_handler->unregisterEvents();
+               delete event_handler;
+       }
+
+       softap_gdbus_destroy(sa->gdbus_handle);
+       memset(sa, 0x00, sizeof(__softap_h));
+       _softap_remove_handle(sa);
+
+       free(sa);
+       sa = NULL;
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_enable(softap_h softap)
+{
+       DBG("+");
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                        "parameter(softap) is NULL");
+
+       __softap_h *sa = (__softap_h *) softap;
+       softap_gdbus_proxy_reset_timeout(sa->gdbus_handle);
+       GVariant *settings = __prepare_softap_settings(softap);
+       if (!settings) {
+               ERR("Fail to initialize softap settings\n");
+               return SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       SoftapEventHandler *event_handler = static_cast<SoftapEventHandler *>(sa->event_handler);
+       event_handler->stopEnabledEvent();
+
+       softap_gdbus_proxy_invoke_method(sa->gdbus_handle, "enable", settings,
+               (GAsyncReadyCallback) __enabled_cfm_cb, softap);
+       softap_gdbus_proxy_set_timeout(sa->gdbus_handle);
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_disable(softap_h softap)
+{
+       DBG("+");
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL");
+
+       __softap_h *sa = (__softap_h *) softap;
+       SoftapEventHandler *event_handler = static_cast<SoftapEventHandler *>(sa->event_handler);
+       event_handler->stopDisabledEvent();
+
+       softap_gdbus_proxy_invoke_method(sa->gdbus_handle,
+               "disable", NULL, (GAsyncReadyCallback) __disabled_cfm_cb, softap);
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_reload_settings(softap_h softap, softap_settings_reloaded_cb callback, void *user_data)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(callback) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+       _retvm_if(sa->settings_reloaded_cb, SOFTAP_ERROR_OPERATION_FAILED,
+                       "Operation in progress\n");
+
+       GVariant *settings = __prepare_softap_settings(softap);
+       _retvm_if(settings == NULL, SOFTAP_ERROR_OPERATION_FAILED,
+                       "softap settings initialization failed\n");
+
+       sa->settings_reloaded_cb = callback;
+       sa->settings_reloaded_user_data = user_data;
+
+       softap_gdbus_proxy_invoke_method(sa->gdbus_handle,
+               "reload_settings", settings, (GAsyncReadyCallback) __settings_reloaded_cb, (gpointer)softap);
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_is_enabled(softap_h softap, bool *enable)
+{
+       DBG("+");
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL");
+       _retvm_if(enable == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(enable) is NULL");
+
+       int is_on = 0;
+       int vconf_type = VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI_AP;
+
+       if (vconf_get_int(VCONFKEY_MOBILE_HOTSPOT_MODE, &is_on) != 0) {
+               ERR("Fail to get vconf key!!");
+               return SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       *enable = is_on & vconf_type ? true : false;
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_get_mac_address(softap_h softap, char **mac_address)
+{
+       DBG("+");
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(mac_address == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(mac_address) is NULL\n");
+
+       struct ifreq ifr;
+       int ret = SOFTAP_ERROR_NONE;
+       int s = 0;
+       char *macbuf = NULL;
+       bool enabled = false;
+
+       ret = softap_is_enabled(softap, &enabled);
+       _retvm_if(ret != SOFTAP_ERROR_NONE, SOFTAP_ERROR_OPERATION_FAILED, "Fail to check softap is enabled!!\n");
+       _retvm_if(enabled == false, SOFTAP_ERROR_NOT_PERMITTED, "Soft AP is not enabled\n");
+
+       g_strlcpy(ifr.ifr_name, SOFTAP_IF, sizeof(ifr.ifr_name));
+       s = socket(AF_INET, SOCK_DGRAM, 0);
+       _retvm_if(s < 0, SOFTAP_ERROR_OPERATION_FAILED,
+                       "Fail to get socket!!\n");
+
+       if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) {
+               ERR("Fail to get mac address!!");
+               close(s);
+               return SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       close(s);
+
+       macbuf = (char *)malloc(SOFTAP_STR_INFO_LEN);
+       _retvm_if(macbuf == NULL, SOFTAP_ERROR_OUT_OF_MEMORY, "Not enough memory\n");
+
+       snprintf(macbuf, SOFTAP_STR_INFO_LEN, "%02X:%02X:%02X:%02X:%02X:%02X",
+                       (unsigned char)ifr.ifr_hwaddr.sa_data[0],
+                       (unsigned char)ifr.ifr_hwaddr.sa_data[1],
+                       (unsigned char)ifr.ifr_hwaddr.sa_data[2],
+                       (unsigned char)ifr.ifr_hwaddr.sa_data[3],
+                       (unsigned char)ifr.ifr_hwaddr.sa_data[4],
+                       (unsigned char)ifr.ifr_hwaddr.sa_data[5]);
+
+       *mac_address = macbuf;
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_get_network_interface_name(softap_h softap, char **interface_name)
+{
+       DBG("+");
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(interface_name == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(interface_name) is NULL\n");
+
+       int ret = SOFTAP_ERROR_NONE;
+       bool enabled = false;
+
+       ret = softap_is_enabled(softap, &enabled);
+       _retvm_if(ret != SOFTAP_ERROR_NONE, SOFTAP_ERROR_OPERATION_FAILED, "Fail to check softap is enabled!!\n");
+       _retvm_if(enabled == false, SOFTAP_ERROR_NOT_PERMITTED, "Soft AP is not enabled\n");
+
+       *interface_name = strdup(SOFTAP_IF);
+       _retvm_if(*interface_name == NULL, SOFTAP_ERROR_OUT_OF_MEMORY,
+                       "Not enough memory!!\n");
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_set_ip_address(softap_h softap, softap_address_family_e address_family, const char *ip_address)
+{
+       DBG("+");
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(ip_address == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(ip_address) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+       int ip_len = 0;
+
+       if (address_family == SOFTAP_ADDRESS_FAMILY_IPV4) {
+               ip_len = strlen(ip_address);
+               if (ip_len < SOFTAP_IPV4_ADDRESS_MIN_LEN || ip_len > SOFTAP_IPV4_ADDRESS_MAX_LEN) {
+                       ERR("parameter(ip_address) is too short or long\n");
+                       return SOFTAP_ERROR_INVALID_PARAMETER;
+               }
+               g_strlcpy(sa->ip_address, ip_address, sizeof(sa->ip_address));
+       } else {
+               /* IPv6 is not supported yet. */
+               ERR("IPv6 address is not supported yet\n");
+               return SOFTAP_ERROR_NOT_SUPPORTED;
+       }
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_get_ip_address(softap_h softap, softap_address_family_e address_family,  char **ip_address)
+{
+       DBG("+");
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(ip_address == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(ip_address) is NULL\n");
+
+       struct ifreq ifr;
+       int ret = SOFTAP_ERROR_NONE;
+       int s = 0;
+       bool enabled = false;
+       char *ipbuf = NULL;
+
+       ret = softap_is_enabled(softap, &enabled);
+       _retvm_if(ret != SOFTAP_ERROR_NONE, SOFTAP_ERROR_OPERATION_FAILED, "Fail to check softap is enabled!!\n");
+       _retvm_if(enabled == false, SOFTAP_ERROR_NOT_PERMITTED, "Soft AP is not enabled\n");
+
+       g_strlcpy(ifr.ifr_name, SOFTAP_IF, sizeof(ifr.ifr_name));
+       s = socket(AF_INET, SOCK_DGRAM, 0);
+       _retvm_if(s < 0, SOFTAP_ERROR_OPERATION_FAILED, "Fail to get socket!!\n");
+
+       if (ioctl(s, SIOCGIFADDR, &ifr) < 0) {
+               ERR("Fail to get interface name!!");
+               close(s);
+               return SOFTAP_ERROR_OPERATION_FAILED;
+       }
+
+       close(s);
+
+       ipbuf = inet_ntoa(((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr);
+       *ip_address = strdup(ipbuf);
+       _retvm_if(*ip_address == NULL, SOFTAP_ERROR_OUT_OF_MEMORY,
+                       "Not enough memory\n");
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_get_gateway_address(softap_h softap, softap_address_family_e address_family, char **gateway_address)
+{
+       DBG("+");
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(gateway_address == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(gateway_address) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+       int ret = SOFTAP_ERROR_NONE;
+       bool enabled = false;
+
+       ret = softap_is_enabled(softap, &enabled);
+       _retvm_if(ret != SOFTAP_ERROR_NONE, SOFTAP_ERROR_OPERATION_FAILED, "Fail to check softap is enabled!!\n");
+       _retvm_if(enabled == false, SOFTAP_ERROR_NOT_PERMITTED, "Soft AP is not enabled\n");
+
+       if (strlen(sa->ip_address) > 0)
+               *gateway_address = strdup(sa->ip_address);
+       else
+               *gateway_address = strdup(SOFTAP_GATEWAY);
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_get_subnet_mask(softap_h softap, softap_address_family_e address_family, char **subnet_mask)
+{
+       DBG("+");
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(subnet_mask == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(subnet_mask) is NULL\n");
+
+       int ret = SOFTAP_ERROR_NONE;
+       bool enabled = false;
+
+       ret = softap_is_enabled(softap, &enabled);
+       _retvm_if(ret != SOFTAP_ERROR_NONE, SOFTAP_ERROR_OPERATION_FAILED, "Fail to check softap is enabled!!\n");
+       _retvm_if(enabled == false, SOFTAP_ERROR_NOT_PERMITTED, "Soft AP is not enabled\n");
+
+       *subnet_mask = strdup(SOFTAP_SUBNET_MASK);
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_foreach_connected_clients(softap_h softap, softap_connected_client_cb callback, void *user_data)
+{
+       DBG("+\n");
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(callback) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+       __softap_client_h client = {"", "", NULL, 0};
+       gchar *ip = NULL;
+       gchar *mac = NULL;
+       gchar *hostname = NULL;
+       guint timestamp = 0;
+       GVariantIter *outer_iter = NULL;
+       GVariantIter *inner_iter = NULL;
+       GVariant *station = NULL;
+       GVariant *value = NULL;
+       gchar *key = NULL;
+       int interface = 0;
+
+       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
+       GVariant *result = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
+               "get_station_info", NULL, &gdbus_error);
+
+       g_variant_get(result, "(a(a{sv}))", &outer_iter);
+
+       while (g_variant_iter_loop(outer_iter, "(@a{sv})", &station)) {
+               g_variant_get(station, "a{sv}", &inner_iter);
+
+               while (g_variant_iter_loop(inner_iter, "{sv}", &key, &value)) {
+                       if (g_strcmp0(key, "Type") == 0) {
+                               interface = g_variant_get_int32(value);
+                               if (interface != 4) {
+                                       g_free(key);
+                                       key = NULL;
+                                       g_variant_unref(value);
+                                       break;
+                               }
+                       }
+                       if (g_strcmp0(key, "IP") == 0) {
+                               g_variant_get(value, "s", &ip);
+                               SDBG("ip is %s\n", ip);
+                               g_strlcpy(client.ip, ip, sizeof(client.ip));
+                       } else if (g_strcmp0(key, "MAC") == 0) {
+                               g_variant_get(value, "s", &mac);
+                               SDBG("mac is %s\n", mac);
+                               g_strlcpy(client.mac, mac, sizeof(client.mac));
+                       } else if (g_strcmp0(key, "Name") == 0) {
+                               g_variant_get(value, "s", &hostname);
+                               SDBG("hostname is %s\n", hostname);
+                               if (hostname)
+                                       client.hostname = g_strdup(hostname);
+                       } else if (g_strcmp0(key, "Time") == 0) {
+                               timestamp = g_variant_get_int32(value);
+                               DBG("timestamp is %d\n", timestamp);
+                               client.tm = (time_t)timestamp;
+                       } else {
+                               ERR("Key %s not required\n", key);
+                       }
+               }
+               g_free(hostname);
+               hostname = NULL;
+               g_free(ip);
+               ip = NULL;
+               g_free(mac);
+               mac = NULL;
+               g_variant_iter_free(inner_iter);
+               if (callback((softap_client_h)&client, user_data) == false) {
+                       DBG("iteration is stopped\n");
+                       g_free(client.hostname);
+                       client.hostname = NULL;
+                       g_variant_iter_free(outer_iter);
+                       g_variant_unref(result);
+                       DBG("-\n");
+                       return SOFTAP_ERROR_OPERATION_FAILED;
+               }
+               g_free(client.hostname);
+               client.hostname = NULL;
+       }
+       g_variant_iter_free(outer_iter);
+       g_variant_unref(result);
+       DBG("-\n");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_set_enabled_cb(softap_h softap, softap_enabled_cb callback, void *user_data)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(callback) is NULL\n");
+
+       __softap_h *sa = (__softap_h *) softap;
+
+       sa->enabled_cb = callback;
+       sa->enabled_user_data = user_data;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_unset_enabled_cb(softap_h softap)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       __softap_h *sa = (__softap_h *) softap;
+
+       sa->enabled_cb = NULL;
+       sa->enabled_user_data = NULL;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_set_disabled_cb(softap_h softap, softap_disabled_cb callback, void *user_data)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(callback) is NULL\n");
+
+       __softap_h *sa = (__softap_h *) softap;
+
+       sa->disabled_cb = callback;
+       sa->disabled_user_data = user_data;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_unset_disabled_cb(softap_h softap)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       __softap_h *sa = (__softap_h *) softap;
+
+       sa->disabled_cb = NULL;
+       sa->disabled_user_data = NULL;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_set_client_connection_state_changed_cb(softap_h softap, softap_client_connection_state_changed_cb callback, void *user_data)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(callback) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+
+       sa->changed_cb = callback;
+       sa->changed_user_data = user_data;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_unset_client_connection_state_changed_cb(softap_h softap)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+
+       sa->changed_cb = NULL;
+       sa->changed_user_data = NULL;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+
+API int softap_set_security_type_changed_cb(softap_h softap, softap_security_type_changed_cb callback, void *user_data)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(callback) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+
+       sa->security_type_changed_cb = callback;
+       sa->security_type_user_data = user_data;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_unset_security_type_changed_cb(softap_h softap)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+
+       sa->security_type_changed_cb = NULL;
+       sa->security_type_user_data = NULL;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_set_ssid_visibility_changed_cb(softap_h softap, softap_ssid_visibility_changed_cb callback, void *user_data)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(callback) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+
+       sa->ssid_visibility_changed_cb = callback;
+       sa->ssid_visibility_user_data = user_data;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_unset_ssid_visibility_changed_cb(softap_h softap)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+
+       sa->ssid_visibility_changed_cb = NULL;
+       sa->ssid_visibility_user_data = NULL;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_set_passphrase_changed_cb(softap_h softap, softap_passphrase_changed_cb callback, void *user_data)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(callback == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(callback) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+
+       sa->passphrase_changed_cb = callback;
+       sa->passphrase_user_data = user_data;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_unset_passphrase_changed_cb(softap_h softap)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+
+       sa->passphrase_changed_cb = NULL;
+       sa->passphrase_user_data = NULL;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_set_security_type(softap_h softap, softap_security_type_e type)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       if (type != SOFTAP_SECURITY_TYPE_NONE &&
+                       type != SOFTAP_SECURITY_TYPE_WPA2_PSK &&
+                       type != SOFTAP_SECURITY_TYPE_WPS) {
+               ERR("Invalid param\n");
+               return SOFTAP_ERROR_INVALID_PARAMETER;
+       }
+
+       __softap_h *sa = (__softap_h *) softap;
+       sa->sec_type = type;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+
+API int softap_get_security_type(softap_h softap, softap_security_type_e *type)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                               "parameter(softap) is NULL\n");
+       _retvm_if(type == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                               "parameter(type) is NULL\n");
+
+       return __get_security_type(type);
+}
+
+API int softap_set_ssid(softap_h softap, const char *ssid)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(ssid == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(ssid) is NULL\n");
+
+       __softap_h *sa = (__softap_h *) softap;
+       char *p_ssid = NULL;
+       int ssid_len = 0;
+
+       ssid_len = strlen(ssid);
+       if (ssid_len > SOFTAP_SSID_MAX_LEN) {
+               ERR("parameter(ssid) is too long");
+               return SOFTAP_ERROR_INVALID_PARAMETER;
+       }
+
+       p_ssid = strdup(ssid);
+       if (p_ssid == NULL) {
+               ERR("strdup failed\n");
+               return SOFTAP_ERROR_OUT_OF_MEMORY;
+       }
+
+       if (sa->ssid)
+               g_free(sa->ssid);
+       sa->ssid = p_ssid;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_get_ssid(softap_h softap, char **ssid)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(ssid == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(ssid) is NULL\n");
+
+       __softap_h *sa = (__softap_h *) softap;
+
+       char val[SOFTAP_SSID_MAX_LEN + 1] = {0, };
+
+       if (__get_ssid_from_vconf(VCONFKEY_SOFTAP_SSID, val, sizeof(val)) == false) {
+               if (__get_common_ssid(val, sizeof(val)) != SOFTAP_ERROR_NONE) {
+                       ERR("Fail to get default ssid!!");
+                       free(sa);
+                       return SOFTAP_ERROR_OPERATION_FAILED;
+               }
+
+       }
+
+       *ssid = strdup(val);
+       if (*ssid == NULL) {
+               ERR("strdup is failed\n");
+               return SOFTAP_ERROR_OUT_OF_MEMORY;
+       }
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_set_ssid_visibility(softap_h softap, bool visible)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       __softap_h *sa = (__softap_h *) softap;
+       sa->visibility = visible ? TRUE : FALSE;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_get_ssid_visibility(softap_h softap, bool *visible)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(visible == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(visible) is NULL\n");
+
+       return __get_visibility(visible);
+}
+
+API int softap_set_passphrase(softap_h softap, const char *passphrase)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(passphrase == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(passphrase) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+       int passphrase_len = 0;
+
+       DBG("+");
+       passphrase_len = strlen(passphrase);
+       if (passphrase_len < SOFTAP_KEY_MIN_LEN ||
+                       passphrase_len > SOFTAP_KEY_MAX_LEN) {
+               ERR("parameter(passphrase) is too short or long\n");
+               return SOFTAP_ERROR_INVALID_PARAMETER;
+       }
+
+       g_strlcpy(sa->passphrase, passphrase, sizeof(sa->passphrase));
+
+       DBG("-");
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_get_passphrase(softap_h softap, char **passphrase)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(passphrase == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(passphrase) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
+       GVariant *parameters = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
+               "get_passphrase", NULL, &gdbus_error);
+       int ret = _softap_convert_to_error(gdbus_error);
+       if (ret != SOFTAP_ERROR_NONE)
+               return ret;
+
+       g_variant_get(parameters, "(su)", passphrase, &ret);
+       g_variant_unref(parameters);
+       return __get_error(ret);
+}
+
+API int softap_push_wps_button(softap_h softap)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL");
+
+       DBG("+");
+       __softap_h *sa = (__softap_h *)softap;
+       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
+       GVariant *parameters = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
+               "push_wps_button", NULL, &gdbus_error);
+       int ret = _softap_convert_to_error(gdbus_error);
+       if (ret != SOFTAP_ERROR_NONE)
+               return ret;
+
+       if (parameters != NULL) {
+               guint info;
+               g_variant_get(parameters, "(u)", &info);
+               g_variant_unref(parameters);
+               return __get_error(info);
+       }
+       return ret;
+}
+
+API int softap_set_wps_pin(softap_h softap, const char *wps_pin)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL");
+       _retvm_if(wps_pin == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(wps_pin) is NULL");
+
+       DBG("+");
+
+       __softap_h *sa = (__softap_h *)softap;
+       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
+       GVariant *parameters = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
+               "set_wps_pin", g_variant_new("(s)", wps_pin), &gdbus_error);
+       int ret = _softap_convert_to_error(gdbus_error);
+       if (ret != SOFTAP_ERROR_NONE)
+               return ret;
+
+       if (parameters != NULL) {
+               guint info;
+               g_variant_get(parameters, "(u)", &info);
+               g_variant_unref(parameters);
+               return __get_error(info);
+       }
+       return ret;
+}
+
+API int softap_get_vendor_element(softap_h softap, char **vendor_element)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(vendor_element == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(vendor) is NULL\n");
+
+       char val[SOFTAP_VENDOR_MAX_LEN + 1] = {0, };
+
+       int ret = __get_vsie(val, sizeof(val));
+       if (ret != SOFTAP_ERROR_NONE) {
+               ERR("Failed to get vendor elements");
+               return ret;
+       }
+
+       *vendor_element = strdup(val);
+       if (*vendor_element == NULL) {
+               ERR("strdup is failed");
+               return SOFTAP_ERROR_OUT_OF_MEMORY;
+       }
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_set_vendor_element(softap_h softap, const char *vendor_element)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(vendor_element == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(vendor_element) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+       int vendor_len = 0;
+
+       vendor_len = strlen(vendor_element);
+       if (vendor_len > SOFTAP_VENDOR_MAX_LEN) {
+               ERR("parameter(vendor) is too long");
+               return SOFTAP_ERROR_INVALID_PARAMETER;
+       }
+
+       g_strlcpy(sa->vendor, vendor_element, sizeof(sa->vendor));
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_set_channel(softap_h softap, int channel)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+
+       if (channel == 0)
+               CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP_ACS);
+
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       __softap_h *sa = (__softap_h *) softap;
+       sa->channel = channel;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_get_channel(softap_h softap, int *channel)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                               "parameter(softap) is NULL\n");
+       _retvm_if(channel == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                               "parameter(channel) is NULL\n");
+
+       return __get_channel(channel);
+}
+
+API int softap_set_mode(softap_h softap, softap_wireless_mode_e mode)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+       sa->mode = mode;
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_get_mode(softap_h softap, softap_wireless_mode_e *mode)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(_softap_check_permission() != SOFTAP_ERROR_NONE,
+                       SOFTAP_ERROR_PERMISSION_DENIED,
+                       "permission denied!");
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(mode == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(mode) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+       *mode = sa->mode;
+       return __get_mode(mode);
+}
+
+API int softap_enable_dhcp(softap_h softap)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       return _softap_enable_dhcp(softap, NULL, NULL);
+}
+
+API int softap_disable_dhcp(softap_h softap)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
+       GVariant *parameters = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
+               "disable_dhcp", NULL, &gdbus_error);
+       int ret = _softap_convert_to_error(gdbus_error);
+       if (ret != SOFTAP_ERROR_NONE)
+               return ret;
+
+       g_variant_get(parameters, "(u)", &ret);
+       g_variant_unref(parameters);
+       sa->dhcp_enabled = FALSE;
+
+       return SOFTAP_ERROR_NONE;
+}
+
+API int softap_is_dhcp_enabled(softap_h softap, bool *dhcp_enabled)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(dhcp_enabled == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(dhcp_enabled) is NULL\n");
+
+       __softap_h *sa = (__softap_h *)softap;
+       gboolean enabled = FALSE;
+       softap_gdbus_error_e gdbus_error = GDBUS_ERROR_NONE;
+       GVariant *parameters = softap_gdbus_proxy_invoke_method_sync(sa->gdbus_handle,
+               "get_dhcp_state", NULL, &gdbus_error);
+
+       int ret = _softap_convert_to_error(gdbus_error);
+       if (ret == SOFTAP_ERROR_NONE) {
+               g_variant_get(parameters, "(b)", &enabled);
+               g_variant_unref(parameters);
+       }
+
+       sa->dhcp_enabled = enabled;
+       *dhcp_enabled = sa->dhcp_enabled == TRUE ? true : false;
+
+       return ret;
+}
+
+API int softap_enable_dhcp_with_range(softap_h softap, char *rangestart, char *rangestop)
+{
+       CHECK_FEATURE_SUPPORTED(SUPPORTED_FEATURE_SOFTAP);
+
+       _retvm_if(softap == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(softap) is NULL\n");
+       _retvm_if(rangestart == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(rangestart) is NULL\n");
+       _retvm_if(rangestop == NULL, SOFTAP_ERROR_INVALID_PARAMETER,
+                       "parameter(rangestop) is NULL\n");
+
+       return _softap_enable_dhcp(softap, rangestart, rangestop);
+}
\ No newline at end of file
index 528f0348188d317adf3d98c49849b0ec0e383f64..5f1ae40b8d6561df47ba49652217a8b97001267d 100644 (file)
@@ -3,10 +3,10 @@ ADD_DEFINITIONS("-DSOFTAP_GTEST")
 
 pkg_check_modules(gtest_pkgs REQUIRED gmock glib-2.0)
 INCLUDE_DIRECTORIES(${gtest_pkgs_INCLUDE_DIRS})
-LINK_DIRECTORIES(${gtest_pkgs_LIBRARY_DIRS})
+LINK_DIRECTORIES(${gtest_pkgs_LIBRARY_DIRS} ${CMAKE_SOURCE_DIR}/src/include)
 
 SET(SOFTAP_GTEST "softap-gtest")
-FILE(GLOB GTEST_SRCS *.cpp mocks/*.c ${CMAKE_SOURCE_DIR}/src/*.c)
+FILE(GLOB GTEST_SRCS *.cpp mocks/*.c ${CMAKE_SOURCE_DIR}/src/*.c ${CMAKE_SOURCE_DIR}/src/*.cpp)
 ADD_EXECUTABLE(${SOFTAP_GTEST} ${GTEST_SRCS})
 TARGET_LINK_LIBRARIES(${SOFTAP_GTEST} ${gtest_pkgs_LIBRARIES} ${${fw_name}_LIBRARIES})
 SET_TARGET_PROPERTIES(${SOFTAP_GTEST} PROPERTIES
diff --git a/tests/softap-gtest-event-handler.cpp b/tests/softap-gtest-event-handler.cpp
new file mode 100755 (executable)
index 0000000..65346db
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include <gtest/gtest.h>
+
+#include "SoftapEventHandler.h"
+#include "SoftapEventCallback.h"
+#include "softap_gdbus.h"
+
+extern "C" {
+#include "mocks/softap_dummy_client.h"
+#include "mocks/softap_memory.h"
+#include "mocks/softap_gdbus.h"
+}
+
+static void __handle_softap_on(bool is_requested, void *user_data);
+static void __handle_softap_off(int disabled_code, void *user_data);
+static void __handle_low_battery_mode(void *user_data);
+static void __handle_flight_mode(void *user_data);
+static void __handle_security_type_changed(int type, void *user_data);
+static void __handle_ssid_visibility_changed(bool visible, void *user_data);
+static void __handle_passphrase_changed(void *user_data);
+static void __handle_client_connection_changed(softap_client_h client, bool opened, void *user_data);
+
+class SoftApEventHandlerTest: public ::testing::Test {
+       protected:
+               void SetUp() override
+               {
+                       softap_mock_set_memory_result(true);
+                       softap_mock_set_gdbus_result(true);
+
+                       gdbus = softap_gdbus_create();
+                       eventHandler = new SoftapEventHandler(NULL, gdbus);
+               }
+
+               void TearDown() override
+               {
+                       softap_mock_set_memory_result(true);
+                       softap_mock_set_gdbus_result(true);
+
+                       eventHandler->unregisterEvents();
+                       delete eventHandler;
+                       softap_gdbus_destroy(gdbus);
+               }
+
+               void RegisterEvents()
+               {
+                       eventHandler->registerEvents(new SoftapEventCallback(__handle_softap_on, __handle_softap_off,
+                                __handle_low_battery_mode, __handle_flight_mode,
+                                __handle_security_type_changed, __handle_ssid_visibility_changed,
+                                __handle_passphrase_changed, __handle_client_connection_changed));
+               }
+
+               SoftapEventHandler *eventHandler;
+               softap_gdbus_h *gdbus;
+
+               const int ERROR_NONE = 0;
+};
+
+static void __handle_softap_on(bool is_requested, void *user_data)
+{
+}
+
+static void __handle_softap_off(int disabled_code, void *user_data)
+{
+}
+
+static void __handle_low_battery_mode(void *user_data)
+{
+}
+
+static void __handle_flight_mode(void *user_data)
+{
+}
+
+static void __handle_security_type_changed(int type, void *user_data)
+{
+}
+
+static void __handle_ssid_visibility_changed(bool visible, void *user_data)
+{
+}
+
+static void __handle_passphrase_changed(void *user_data)
+{
+}
+
+static void __handle_client_connection_changed(softap_client_h client, bool opened, void *user_data)
+{
+}
+
+TEST_F(SoftApEventHandlerTest, registerEventsN)
+{
+       SoftapEventHandler *handler = new SoftapEventHandler(NULL, NULL);
+       int ret = handler->registerEvents(NULL);
+       EXPECT_NE(ERROR_NONE, ret);
+}
+
+TEST_F(SoftApEventHandlerTest, registerEventsP)
+{
+       int ret = eventHandler->registerEvents(new SoftapEventCallback(__handle_softap_on, __handle_softap_off,
+               __handle_low_battery_mode, __handle_flight_mode,
+               __handle_security_type_changed, __handle_ssid_visibility_changed,
+               __handle_passphrase_changed, __handle_client_connection_changed));
+
+       EXPECT_EQ(ERROR_NONE, ret);
+}
+
+TEST_F(SoftApEventHandlerTest, unregisterEventsP)
+{
+       RegisterEvents();
+       EXPECT_EQ(ERROR_NONE, eventHandler->unregisterEvents());
+}
+
+TEST_F(SoftApEventHandlerTest, startEnabledEventN)
+{
+       softap_mock_set_gdbus_result(false);
+       EXPECT_NE(ERROR_NONE, eventHandler->startEnabledEvent());
+}
+
+TEST_F(SoftApEventHandlerTest, startEnabledEventP)
+{
+       RegisterEvents();
+       EXPECT_EQ(ERROR_NONE, eventHandler->startEnabledEvent());
+}
+
+TEST_F(SoftApEventHandlerTest, startDisabledEventN)
+{
+       softap_mock_set_gdbus_result(false);
+       EXPECT_NE(ERROR_NONE, eventHandler->startDisabledEvent());
+}
+
+TEST_F(SoftApEventHandlerTest, startDisabledEventP)
+{
+       RegisterEvents();
+       EXPECT_EQ(ERROR_NONE, eventHandler->startDisabledEvent());
+}
\ No newline at end of file