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
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")
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")
typedef struct {
guint sig_id;
- char name[SOFTAP_SIGNAL_NAME_LEN];
+ const char *name;
__handle_cb_t cb;
} softap_sig_t;
typedef struct {
softap_gdbus_h *gdbus_handle;
+ void *event_handler;
/* Callbacks*/
softap_enabled_cb enabled_cb;
--- /dev/null
+#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, ×tamp);
+
+ 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;
+}
--- /dev/null
+#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
--- /dev/null
+#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;
+};
+++ /dev/null
-/*
-* 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, ×tamp);
-
- 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);
-}
--- /dev/null
+/*
+* 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
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
--- /dev/null
+/*
+* 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