Add modification to make wifi-direct pass current test cases 45/61645/2
authorYu Jiung <jiung.yu@samsung.com>
Wed, 9 Mar 2016 09:07:17 +0000 (18:07 +0900)
committerYu Jiung <jiung.yu@samsung.com>
Thu, 10 Mar 2016 05:59:14 +0000 (14:59 +0900)
Description:
Make some function provide interal vconf data
Change some functions from synchronous to asynchronous
Add DBus auto-activation
Fix some issues pointed by static analysis tool

Change-Id: Ic0af862ae029c4bc54ebd90ba24b6cf63fc9b8e7
Signed-off-by: Yu jiung <jiung.yu@samsung.com>
15 files changed:
CMakeLists.txt
LICENSE [moved from LICENSE.APLv2 with 100% similarity]
include/wifi-direct-dbus.h
include/wifi-direct-manager.h
include/wifi-direct-util.h
oem/wifi-direct-oem.h
packaging/dbus-wfd-manager.conf [new file with mode: 0644]
packaging/net.wifidirect.service [new file with mode: 0644]
packaging/wifi-direct-manager.spec
plugin/wpasupplicant/ctrl_iface_dbus/wfd-plugin-wpasupplicant.c
src/wifi-direct-dbus.c
src/wifi-direct-iface.c
src/wifi-direct-manager.c
src/wifi-direct-peer.c
src/wifi-direct-util.c

index 6f1265b..a08893f 100755 (executable)
@@ -67,6 +67,9 @@ ENDIF(TIZEN_WIFI_MODULE_BUNDLE)
 IF(CTRL_IFACE_DBUS)
        ADD_DEFINITIONS(-DCTRL_IFACE_DBUS)
 ENDIF(CTRL_IFACE_DBUS)
+IF(TIZEN_DEBUG_DBUS_VALUE)
+       ADD_DEFINITIONS(-DTIZEN_DEBUG_DBUS_VALUE)
+ENDIF(TIZEN_DEBUG_DBUS_VALUE)
 
 SET(SRCS
        ${CMAKE_SOURCE_DIR}/src/wifi-direct-manager.c
@@ -95,7 +98,6 @@ INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/common/udhcp_script.non-autoip DESTINATI
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/common/wifi-direct-server.sh DESTINATION bin)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/common/p2p_supp.sh DESTINATION sbin)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/common/ccode.conf DESTINATION etc/wifi-direct)
-INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/common/persistent-peer DESTINATION /opt/etc)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/files/common/wfd-manager.conf DESTINATION /etc/dbus-1/system.d)
 IF(TIZEN_TV)
        IF(TIZEN_WIFI_MODULE_BUNDLE)
similarity index 100%
rename from LICENSE.APLv2
rename to LICENSE
index 90571ed..7f21653 100644 (file)
@@ -61,7 +61,7 @@ void wfd_manager_dbus_deinit(void);
 
 guint wfd_manager_dbus_iface_register(const gchar* iface_name,
                                      const gchar* iface_path,
-                                     const gchar *xml_data,
+                                     GDBusNodeInfo *node_info,
                                      const GDBusInterfaceVTable *interface_vtable);
 
 gboolean wfd_manager_dbus_iface_unregister(guint reg_id);
index 2d99091..1b39a9f 100755 (executable)
@@ -67,7 +67,7 @@
 #define IPADDR_LEN 4
 #define IPSTR_LEN 16
 #define PINSTR_LEN 8
-#define PASSPHRASE_LEN_MAX 63
+#define PASSPHRASE_LEN_MAX 64
 #define PASSPHRASE_LEN_MIN 8
 
 typedef enum {
index 196056d..5781809 100755 (executable)
@@ -93,13 +93,10 @@ int wfd_util_dhcps_wait_ip_leased(wfd_device_s *peer);
 int wfd_util_dhcps_stop();
 int wfd_util_dhcpc_start(wfd_device_s *peer);
 int wfd_util_dhcpc_stop();
-int wfd_util_dhcpc_get_ip(char *ifname, unsigned char *ip_addr, int is_IPv6);
-int wfd_util_dhcpc_get_server_ip(unsigned char* ip_addr);
 int wfd_util_local_get_ip(char *ifname, unsigned char *ip_addr, int is_IPv6);
+int wfd_util_dhcpc_get_server_ip(unsigned char* ip_addr);
 #ifdef TIZEN_FEATURE_IP_OVER_EAPOL
 int wfd_util_ip_over_eap_assign(wfd_device_s *peer, const char *ifname);
-#ifdef TIZEN_WLAN_BOARD_SPRD
-int wfd_util_static_ip_unset(const char *ifname);
-#endif /* TIZEN_WLAN_BOARD_SPRD */
 #endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
+int wfd_util_ip_unset(const char *ifname);
 #endif /* __WIFI_DIRECT_UTIL_H__ */
index 7247c67..7cebff8 100755 (executable)
@@ -165,6 +165,7 @@ typedef struct {
        int dev_flags;
        int group_flags;
        int dev_role;
+       int device_go_intent;
 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
        wfd_oem_display_s display;
 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
diff --git a/packaging/dbus-wfd-manager.conf b/packaging/dbus-wfd-manager.conf
new file mode 100644 (file)
index 0000000..2ec9812
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+       "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+       <policy user="root">
+               <allow own="net.wifidirect"/>
+               <allow send_destination="net.wifidirect"/>
+               <allow allow send_interface="net.wifidirect"/>
+               <allow receive_sender="net.wifidirect"/>
+       </policy>
+       <policy context="default">
+               <check send_destination="net.wifidirect" send_interface="net.wifidirect" privilege="http://tizen.org/feature/wifidirect" />
+               <check send_destination="net.wifidirect" send_interface="net.wifidirect.group" privilege="http://tizen.org/feature/wifidirect" />
+               <check send_destination="net.wifidirect" send_interface="net.wifidirect.config" privilege="http://tizen.org/feature/wifidirect" />
+               <check send_destination="net.wifidirect" send_interface="net.wifidirect.service" privilege="http://tizen.org/feature/wifidirect" />
+               <check send_destination="net.wifidirect" send_interface="net.wifidirect.display" privilege="http://tizen.org/feature/wifidirect" />
+       </policy>
+</busconfig>
diff --git a/packaging/net.wifidirect.service b/packaging/net.wifidirect.service
new file mode 100644 (file)
index 0000000..1e9b078
--- /dev/null
@@ -0,0 +1,4 @@
+[D-BUS Service]
+Name=net.wifidirect
+Exec=/usr/bin/wfd-manager
+User=root
\ No newline at end of file
index 8d199ed..f341259 100755 (executable)
@@ -5,6 +5,8 @@ Release:        1
 Group:      Network & Connectivity/Wireless
 License:    Apache-2.0
 Source0:       %{name}-%{version}.tar.gz
+Source1:       dbus-wfd-manager.conf
+Source2:       net.wifidirect.service
 BuildRequires: pkgconfig(capi-network-wifi-direct)
 BuildRequires: pkgconfig(gio-2.0)
 BuildRequires: pkgconfig(dlog)
@@ -40,6 +42,10 @@ Wi-Fi direct manager plugin to abstract wpa_supplicant
 %prep
 %setup -q
 chmod 644 %{SOURCE0}
+chmod 644 %{SOURCE1}
+chmod 644 %{SOURCE2}
+cp -a %{SOURCE1} ./wfd-manager.conf
+cp -a %{SOURCE2} .
 
 %build
 export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE"
@@ -79,6 +85,7 @@ cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DARCHITECTURE=$ARCH \
         -DTIZEN_FEATURE_DEFAULT_CONNECTION_AGENT=0 \
         -DTIZEN_FEATURE_IP_OVER_EAPOL=1 \
         -DCTRL_IFACE_DBUS=1 \
+        -DTIZEN_DEBUG_DBUS_VALUE=1 \
         -DTIZEN_MOBILE=1 \
 %else
 %if "%{profile}" == "tv"
@@ -87,6 +94,7 @@ cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DARCHITECTURE=$ARCH \
        -DTIZEN_FEATURE_WIFI_DISPLAY=1 \
        -DTIZEN_FEATURE_IP_OVER_EAPOL=1 \
        -DCTRL_IFACE_DBUS=1 \
+       -DTIZEN_DEBUG_DBUS_VALUE=1 \
        -DTIZEN_WIFI_MODULE_BUNDLE=0 \
        -DTIZEN_TV=1 \
 %endif
@@ -105,10 +113,10 @@ rm -rf %{buildroot}
 
 %make_install
 
-#License
-mkdir -p %{buildroot}%{_datadir}/license
-cp %{_builddir}/%{buildsubdir}/LICENSE.APLv2 %{buildroot}%{_datadir}/license/%{name}
-cp %{_builddir}/%{buildsubdir}/LICENSE.APLv2 %{buildroot}%{_datadir}/license/wifi-direct-plugin-wpasupplicant
+mkdir -p %{buildroot}%{_sysconfdir}/dbus-1/system.d
+cp wfd-manager.conf %{buildroot}%{_sysconfdir}/dbus-1/system.d/wfd-manager.conf
+mkdir -p %{buildroot}%{_datadir}/dbus-1/system-services/
+cp net.wifidirect.service %{buildroot}%{_datadir}/dbus-1/system-services/net.wifidirect.service
 
 %post
 chmod 644 /usr/etc/wifi-direct/dhcpd.*.conf
@@ -139,6 +147,7 @@ chmod 755 /usr/sbin/p2p_supp.sh
 
 %files
 %manifest wifi-direct-manager.manifest
+%license LICENSE
 %defattr(-,root,root,-)
 %{_bindir}/wfd-manager
 /usr/etc/wifi-direct/dhcpd.*.conf
@@ -146,8 +155,6 @@ chmod 755 /usr/sbin/p2p_supp.sh
 /usr/etc/wifi-direct/p2p_supp.conf
 /opt/etc/p2p_supp.conf
 /usr/etc/wifi-direct/ccode.conf
-/opt/etc/persistent-peer
-%config %{_sysconfdir}/dbus-1/system.d/*.conf
 %{_bindir}/dhcpd-notify.sh
 %{_bindir}/wifi-direct-server.sh
 %{_bindir}/wifi-direct-dhcp.sh
@@ -156,12 +163,12 @@ chmod 755 /usr/sbin/p2p_supp.sh
 %attr(755,-,-) %{_bindir}/wifi-direct-server.sh
 %attr(755,-,-) %{_bindir}/wifi-direct-dhcp.sh
 %attr(755,-,-) /usr/etc/wifi-direct/udhcp_script.non-autoip
-%attr(644,-,-) %{_sysconfdir}/dbus-1/system.d/*.conf
+%attr(644,root,root) %{_sysconfdir}/dbus-1/system.d/*
+%attr(644,root,root) %{_datadir}/dbus-1/system-services/*
 %attr(755,-,-) %{_sbindir}/p2p_supp.sh
-%attr(644,-,-) %{_datadir}/license/%{name}
 
 %files -n wifi-direct-plugin-wpasupplicant
 %manifest wifi-direct-plugin-wpasupplicant.manifest
+%license LICENSE
 %defattr(-,root,root,-)
 %{_libdir}/wifi-direct-plugin-wpasupplicant.so
-%attr(644,-,-) %{_datadir}/license/wifi-direct-plugin-wpasupplicant
index f154263..6ab2471 100755 (executable)
@@ -1604,7 +1604,8 @@ static void _ws_process_go_neg_request(GDBusConnection *connection,
        const char *path = NULL;
        char * loc = NULL;
 
-       int dev_pwd_id = 0;
+       int dev_passwd_id = 0;
+       int device_go_intent = 0;
 
        edata = (wfd_oem_dev_data_s *) g_try_malloc0(sizeof(wfd_oem_dev_data_s));
        if (!edata) {
@@ -1619,20 +1620,22 @@ static void _ws_process_go_neg_request(GDBusConnection *connection,
        event.edata_type = WFD_OEM_EDATA_TYPE_DEVICE;
        event.event_id = WFD_OEM_EVENT_GO_NEG_REQ;
 
-       g_variant_get(parameters, "(&oq)", &path, &dev_pwd_id);
+       g_variant_get(parameters, "(&oqy)", &path, &dev_passwd_id, &device_go_intent);
        g_strlcpy(peer_path, path, DBUS_OBJECT_PATH_MAX);
 
        WDP_LOGD("Retrive peer path [%s]", peer_path);
-       WDP_LOGD("Retrive dev_passwd_id [%d]", dev_pwd_id);
+       WDP_LOGD("Retrive dev_passwd_id [%d]", dev_passwd_id);
+       WDP_LOGD("Retrive device_go_intent [%d]", device_go_intent);
 
-       if (dev_pwd_id == WS_DEV_PASSWD_ID_PUSH_BUTTON)
+       if (dev_passwd_id == WS_DEV_PASSWD_ID_PUSH_BUTTON)
                event.wps_mode = WFD_OEM_WPS_MODE_PBC;
-       else if (dev_pwd_id == WS_DEV_PASSWD_ID_REGISTRAR_SPECIFIED)
+       else if (dev_passwd_id == WS_DEV_PASSWD_ID_REGISTRAR_SPECIFIED)
                event.wps_mode = WFD_OEM_WPS_MODE_DISPLAY;
-       else if (dev_pwd_id == WS_DEV_PASSWD_ID_USER_SPECIFIED)
+       else if (dev_passwd_id == WS_DEV_PASSWD_ID_USER_SPECIFIED)
                event.wps_mode = WFD_OEM_WPS_MODE_KEYPAD;
        else
                event.wps_mode = WFD_OEM_WPS_MODE_NONE;
+       edata->device_go_intent = device_go_intent;
 
        loc = strrchr(peer_path,'/');
        if(loc != NULL)
index 16f0f14..db48c18 100644 (file)
  * @version     0.1
  */
 
+#include <glib.h>
+#include "wifi-direct-iface.h"
 #include "wifi-direct-dbus.h"
 #include "wifi-direct-log.h"
 
-static GDBusConnection *connection = NULL;
+static GDBusConnection *g_connection = NULL;
 static guint g_owner_id = 0;  //Name Owner ID
 
 static GDBusConnection *__dbus_get_gdbus_conn(void)
 {
-       return connection;
+       return g_connection;
 }
 
 static void __on_name_acquired(GDBusConnection *connection,
@@ -41,6 +43,7 @@ static void __on_name_acquired(GDBusConnection *connection,
                               gpointer user_data)
 {
        WDS_LOGD("on_name_acquired: %s", name);
+       wfd_manager_dbus_register();
 }
 
 static void __on_name_lost(GDBusConnection *connection,
@@ -52,10 +55,9 @@ static void __on_name_lost(GDBusConnection *connection,
 
 guint wfd_manager_dbus_iface_register(const gchar* iface_name,
                                      const gchar* iface_path,
-                                     const gchar *xml_data,
+                                     GDBusNodeInfo *node_info,
                                      const GDBusInterfaceVTable *interface_vtable)
 {
-       GDBusNodeInfo *node_info = NULL;
        GDBusInterfaceInfo *interface_info = NULL;
        GError *Error = NULL;
        guint reg_id = 0;
@@ -67,18 +69,11 @@ guint wfd_manager_dbus_iface_register(const gchar* iface_name,
                return 0;
        }
 
-       if (!iface_name || !iface_path || !xml_data || !interface_vtable) {
+       if (!iface_name || !iface_path || !node_info || !interface_vtable) {
                WDS_LOGE("Invalid Parameters");
                return 0;
        }
 
-       node_info = g_dbus_node_info_new_for_xml(xml_data, &Error);
-       if (node_info == NULL) {
-               WDS_LOGE("Failed to get node info, Error: %s", Error->message);
-               g_clear_error(&Error);
-               return 0;
-       }
-
        /* Register interface */
        interface_info = g_dbus_node_info_lookup_interface(node_info, iface_name);
        if (interface_info == NULL) {
@@ -99,7 +94,6 @@ guint wfd_manager_dbus_iface_register(const gchar* iface_name,
 
        WDS_LOGD("Interface Registration ID [%d], Interface Name [%s]", reg_id, iface_name);
 
-       g_dbus_node_info_unref(node_info);
        return reg_id;
 }
 
@@ -117,7 +111,6 @@ gboolean wfd_manager_dbus_iface_unregister(guint reg_id)
                if(g_dbus_connection_unregister_object (connection, reg_id) == FALSE)
                        WDS_LOGE("netconfig network migration unregister object");
        }
-
        return TRUE;
 }
 
@@ -125,19 +118,19 @@ gboolean wfd_manager_dbus_init(void)
 {
        GError *Error = NULL;
 
-       if (connection != NULL) {
+       if (g_connection != NULL) {
                WDS_LOGE("Conenciton already present");
                return TRUE;
        }
 
-       connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &Error);
-       if(connection == NULL) {
+       g_connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &Error);
+       if(g_connection == NULL) {
                WDS_LOGE("Failed to get connection, Error[%s]", Error->message);
                g_error_free(Error);
                return FALSE;
        }
 
-       g_owner_id = g_bus_own_name_on_connection(connection,
+       g_owner_id = g_bus_own_name_on_connection(g_connection,
                                                  WFD_MANAGER_SERVICE,
                                                  G_BUS_NAME_OWNER_FLAGS_NONE,
                                                  __on_name_acquired,
@@ -150,16 +143,15 @@ gboolean wfd_manager_dbus_init(void)
        }
        WDS_LOGD("DBus Owner id is [%d]", g_owner_id);
 
-       connection = connection;
        return TRUE;
 }
 
 void wfd_manager_dbus_deinit(void)
 {
-       if (connection == NULL || g_owner_id == 0)
+       if (g_connection == NULL || g_owner_id == 0)
                return;
 
-       g_object_unref(connection);
+       g_object_unref(g_connection);
        g_bus_unown_name(g_owner_id);
 }
 
index 93f7b82..4765b8a 100644 (file)
 #include "wifi-direct-util.h"
 #include "wifi-direct-group.h"
 #include "wifi-direct-state.h"
+#include <vconf.h>
 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
 #include "wifi-direct-service.h"
 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
 
+#define WFD_DBUS_REPLY_RET(invocation, error) \
+       g_dbus_method_invocation_return_value((invocation), g_variant_new("(i)", (error)))
+
+#define WFD_DBUS_REPLY_PARAMS(invocation, params) \
+       g_dbus_method_invocation_return_value((invocation), (params))
+
 static int macaddr_atoe(const char *p, unsigned char mac[])
 {
        int i = 0;
@@ -275,6 +282,22 @@ const gchar wfd_manager_introspection_xml[] = {
                                "<arg type='s' name='peer_mac_address' direction='in'/>"
                                "<arg type='i' name='error_code' direction='out'/>"
                        "</method>"
+                       "<method name='GetConnectingPeer'>"
+                               "<arg type='i' name='error_code' direction='out'/>"
+                               "<arg type='s' name='local_mac_address' direction='out'/>"
+                       "</method>"
+                       "<method name='GetInterfaceName'>"
+                               "<arg type='i' name='error_code' direction='out'/>"
+                               "<arg type='s' name='ifname' direction='out'/>"
+                       "</method>"
+                       "<method name='GetSubnetMask'>"
+                               "<arg type='i' name='error_code' direction='out'/>"
+                               "<arg type='s' name='subnet_mask' direction='out'/>"
+                       "</method>"
+                       "<method name='GetGateway'>"
+                               "<arg type='i' name='error_code' direction='out'/>"
+                               "<arg type='s' name='gateway_address' direction='out'/>"
+                       "</method>"
                "</interface>"
 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
                "<interface name='net.wifidirect.service'>"
@@ -357,28 +380,39 @@ const gchar wfd_manager_introspection_xml[] = {
        "</node>"
 };
 
-static int __wfd_manager_manage_iface_handler(const gchar *method_name,
+
+static void __wfd_manager_manage_iface_handler(const gchar *method_name,
                                              GVariant    *parameters,
-                                             GVariant    **return_parameters)
+                                             GDBusMethodInvocation *invocation)
 {
        int ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
        wfd_manager_s *manager = wfd_get_manager();
+       GVariant *return_parameters = NULL;
+       WDS_LOGD("%s", method_name);
 
        if (!g_strcmp0(method_name, "Activate")) {
+
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+
                ret = wfd_manager_activate(manager);
-               if (ret == WIFI_DIRECT_ERROR_NONE)
-                       wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
-                                                    "Activation",
-                                                    g_variant_new("(i)", ret));
-               *return_parameters = g_variant_new("(i)", ret);
+               wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
+                                            "Activation",
+                                            g_variant_new("(i)", ret));
 
        } else if (!g_strcmp0(method_name, "Deactivate")) {
+
+               if (manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
+                       WDS_LOGE("Already deactivated");
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
+               }
+
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+
                ret = wfd_manager_deactivate(manager);
-               if (ret == WIFI_DIRECT_ERROR_NONE)
-                       wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
-                                                    "Deactivation",
-                                                    g_variant_new("(i)", ret));
-               *return_parameters = g_variant_new("(i)", ret);
+               wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
+                                            "Deactivation",
+                                            g_variant_new("(i)", ret));
 
        } else if (!g_strcmp0(method_name, "StartDiscovery")) {
                gboolean mode = FALSE;
@@ -404,6 +438,23 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                }
                g_variant_iter_free(iter);
 
+               if (manager->state != WIFI_DIRECT_STATE_ACTIVATED &&
+                               manager->state != WIFI_DIRECT_STATE_DISCOVERING &&
+                               manager->state != WIFI_DIRECT_STATE_GROUP_OWNER) {
+                       WDS_LOGE("Wi-Fi Direct is not available status for scanning.");
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
+               }
+
+               if (mode && (manager->local->dev_role == WFD_DEV_ROLE_GO)) {
+                       WDS_LOGW("Wi-Fi Direct device is already visible, do not start listen");
+                       ret = WIFI_DIRECT_ERROR_NONE;
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+                       return;
+               }
+
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+
                ret = wfd_manager_start_discovery(manager, mode, timeout, type, channel);
                if (ret == WIFI_DIRECT_ERROR_NONE) {
                        if (mode == WFD_OEM_SCAN_MODE_PASSIVE) {
@@ -416,16 +467,23 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                                                             NULL);
                        }
                }
-               *return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "StopDiscovery")) {
                int mode =  manager->scan_mode;
+               if (manager->state != WIFI_DIRECT_STATE_ACTIVATED &&
+                               manager->state != WIFI_DIRECT_STATE_DISCOVERING) {
+
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
+               }
+
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+
                ret = wfd_manager_cancel_discovery(manager);
                if (ret == WIFI_DIRECT_ERROR_NONE && mode == WFD_SCAN_MODE_PASSIVE)
                        wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
                                                     "DiscoveryFinished",
                                                     NULL);
-               *return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "GetDiscoveredPeers")) {
                wfd_discovery_entry_s *peers = NULL;
@@ -440,9 +498,10 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                if (peer_cnt < 0) {
                        WDS_LOGE("Failed to get scan result");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(iaa{sv})", ret, builder_peers);
+                       return_parameters = g_variant_new("(iaa{sv})", ret, builder_peers);
                        g_variant_builder_unref(builder_peers);
-                       goto done;
+                       WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
+                       return;
                }
 
                if (peer_cnt > 255)
@@ -501,13 +560,31 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(iaa{sv})", ret, builder_peers);
+               return_parameters = g_variant_new("(iaa{sv})", ret, builder_peers);
                g_variant_builder_unref(builder_peers);
+               WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
 
        } else if (!g_strcmp0(method_name, "Connect")) {
                const char *peer_mac_address = NULL;
                unsigned char mac_addr[MACADDR_LEN] = {0, };
 
+               if (manager->state != WIFI_DIRECT_STATE_ACTIVATED &&
+                               manager->state != WIFI_DIRECT_STATE_DISCOVERING &&
+                               manager->state != WIFI_DIRECT_STATE_GROUP_OWNER) {
+
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
+               }
+
+               wfd_group_s *group = (wfd_group_s*) manager->group;
+               if (group && group->member_count >= manager->max_station) {
+
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_TOO_MANY_CLIENT);
+                       return;
+               }
+
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+
                g_variant_get(parameters, "(&s)", &peer_mac_address);
                macaddr_atoe(peer_mac_address, mac_addr);
 
@@ -519,12 +596,34 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                                                                            WFD_EVENT_CONNECTION_IN_PROGRESS,
                                                                            peer_mac_address));
 
-               *return_parameters = g_variant_new("(i)", ret);
-
        } else if (!g_strcmp0(method_name, "Disconnect")) {
                const char *peer_mac_address = NULL;
                unsigned char mac_addr[MACADDR_LEN] = {0, };
 
+               if (!manager->group || manager->state < WIFI_DIRECT_STATE_CONNECTED) {
+                       if (WIFI_DIRECT_STATE_DISCOVERING == manager->state) {
+                               ret = wfd_oem_stop_scan(manager->oem_ops);
+                               if (ret < 0) {
+                                       WDS_LOGE("Failed to stop scan");
+                                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_OPERATION_FAILED);
+                                       return;
+                               }
+                               WDS_LOGI("Succeeded to stop scan");
+                               if (WFD_DEV_ROLE_GO == manager->local->dev_role) {
+                                       wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+                                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
+                               } else {
+                                       wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+                                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+                               }
+                       } else {
+                               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                               return;
+                       }
+               }
+
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+
                g_variant_get(parameters, "(&s)", &peer_mac_address);
                macaddr_atoe(peer_mac_address, mac_addr);
 
@@ -536,12 +635,18 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                                                                            WFD_EVENT_DISCONNECTION_RSP,
                                                                            peer_mac_address));
 
-               *return_parameters = g_variant_new("(i)", ret);
-
        } else if (!g_strcmp0(method_name, "CancelConnection")) {
                const char *peer_mac_address = NULL;
                unsigned char mac_addr[MACADDR_LEN] = {0, };
 
+               if (!manager->session && manager->state != WIFI_DIRECT_STATE_CONNECTING) {
+                       WDS_LOGE("It's not CONNECTING state");
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
+               }
+
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+
                g_variant_get(parameters, "(&s)", &peer_mac_address);
                macaddr_atoe(peer_mac_address, mac_addr);
 
@@ -553,12 +658,25 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                                                                            WFD_EVENT_CONNECTION_RSP,
                                                                            peer_mac_address));
 
-               *return_parameters = g_variant_new("(i)", ret);
-
        } else if (!g_strcmp0(method_name, "AcceptConnection")) {
                const char *peer_mac_address = NULL;
                unsigned char mac_addr[MACADDR_LEN] = {0, };
 
+               if (manager->state != WIFI_DIRECT_STATE_CONNECTING) {
+
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
+               }
+
+               wfd_group_s *group = (wfd_group_s*) manager->group;
+               if (group && group->member_count >= manager->max_station) {
+
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_TOO_MANY_CLIENT);
+                       return ;
+               }
+
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+
                g_variant_get(parameters, "(&s)", &peer_mac_address);
                macaddr_atoe(peer_mac_address, mac_addr);
 
@@ -577,12 +695,25 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                                                                            peer_mac_address));
                }
 
-               *return_parameters = g_variant_new("(i)", ret);
-
        } else if (!g_strcmp0(method_name, "RejectConnection")) {
+               wfd_session_s *session = manager->session;
                const char *peer_mac_address = NULL;
                unsigned char mac_addr[MACADDR_LEN] = {0, };
 
+               if (!session || manager->state != WIFI_DIRECT_STATE_CONNECTING) {
+                       WDS_LOGE("It's not permitted with this state [%d]", manager->state);
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
+               }
+
+               if (session->direction != SESSION_DIRECTION_INCOMING) {
+                       WDS_LOGE("Only incomming session can be rejected");
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
+               }
+
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+
                g_variant_get(parameters, "(&s)", &peer_mac_address);
                macaddr_atoe(peer_mac_address, mac_addr);
 
@@ -594,9 +725,32 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                                                                            WFD_EVENT_CONNECTION_RSP,
                                                                            peer_mac_address));
 
-               *return_parameters = g_variant_new("(i)", ret);
-
        } else if (!g_strcmp0(method_name, "DisconnectAll")) {
+
+               if (!manager->group || manager->state < WIFI_DIRECT_STATE_CONNECTED) {
+                       if (WIFI_DIRECT_STATE_DISCOVERING == manager->state) {
+                               ret = wfd_oem_stop_scan(manager->oem_ops);
+                               if (ret < 0) {
+                                       WDS_LOGE("Failed to stop scan");
+                                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_OPERATION_FAILED);
+                                       return;
+                               }
+                               WDS_LOGI("Succeeded to stop scan");
+                               if (WFD_DEV_ROLE_GO == manager->local->dev_role) {
+                                       wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+                                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
+                               } else {
+                                       wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+                                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+                               }
+                       } else {
+                               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                               return;
+                       }
+               }
+
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+
                ret = wfd_manager_disconnect_all(manager);
                if (ret == WIFI_DIRECT_ERROR_NONE)
                        wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
@@ -605,8 +759,6 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                                                                            WFD_EVENT_DISCONNECTION_RSP,
                                                                            ""));
 
-               *return_parameters = g_variant_new("(i)", ret);
-
        } else if (!g_strcmp0(method_name, "GetConnectedPeers")) {
                wfd_connected_peer_info_s *peers = NULL;
                GVariantBuilder *builder_peers = NULL;
@@ -619,9 +771,10 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                if (!manager->group && manager->state < WIFI_DIRECT_STATE_CONNECTED) {
                        WDS_LOGD("It's not connected state [%d]", manager->state);
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(iaa{sv})", ret, builder_peers);
+                       return_parameters = g_variant_new("(iaa{sv})", ret, builder_peers);
                        g_variant_builder_unref(builder_peers);
-                       goto done;
+                       g_dbus_method_invocation_return_value(invocation, return_parameters);
+                       return;
                }
 
                peer_cnt = wfd_manager_get_connected_peers(manager, &peers);
@@ -629,9 +782,10 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                if (peer_cnt < 0) {
                        WDS_LOGE("Failed to get scan result");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(iaa{sv})", ret, builder_peers);
+                       return_parameters = g_variant_new("(iaa{sv})", ret, builder_peers);
                        g_variant_builder_unref(builder_peers);
-                       goto done;
+                       g_dbus_method_invocation_return_value(invocation, return_parameters);
+                       return;
                }
 
                for (i = 0; i < peer_cnt; i++) {
@@ -678,18 +832,21 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(iaa{sv})", ret, builder_peers);
+               return_parameters = g_variant_new("(iaa{sv})", ret, builder_peers);
                g_variant_builder_unref(builder_peers);
+               WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
 
        } else if (!g_strcmp0(method_name, "IsDiscoverable")) {
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(b)",
+               return_parameters = g_variant_new("(b)",
                                                   (manager->state == WIFI_DIRECT_STATE_DISCOVERING ||
                                                    wfd_group_is_autonomous(manager->group) == TRUE));
+               WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
 
        } else if (!g_strcmp0(method_name, "IsListeningOnly")) {
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(b)", (manager->scan_mode == WFD_SCAN_MODE_PASSIVE));
+               return_parameters = g_variant_new("(b)", (manager->scan_mode == WFD_SCAN_MODE_PASSIVE));
+               WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
 
        } else if (!g_strcmp0(method_name, "GetPeerInfo")) {
                wfd_discovery_entry_s *peer = NULL;
@@ -706,9 +863,10 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
                if (ret < 0 || !peer) {
                        WDS_LOGE("Failed to get peer info");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(ia{sv})", ret, builder_peer);
+                       return_parameters = g_variant_new("(ia{sv})", ret, builder_peer);
                        g_free(peer);
-                       goto done;
+                       WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
+                       return;
                }
 
                g_variant_builder_add(builder_peer, "{sv}",
@@ -756,29 +914,29 @@ static int __wfd_manager_manage_iface_handler(const gchar *method_name,
 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ia{sv})", ret, builder_peer);
+               return_parameters = g_variant_new("(ia{sv})", ret, builder_peer);
                g_variant_builder_unref(builder_peer);
                g_free(peer);
+               WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
 
        } else if (!g_strcmp0(method_name, "GetState")) {
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ii)", ret, manager->state);
+               return_parameters = g_variant_new("(ii)", ret, manager->state);
+               WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
 
        } else {
                WDS_LOGD("method not handled");
-               ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_OPERATION_FAILED);
        }
-
-done:
-       return ret;
 }
 
-static int __wfd_manager_group_iface_handler(const gchar *method_name,
+static void __wfd_manager_group_iface_handler(const gchar *method_name,
                                             GVariant    *parameters,
-                                            GVariant    **return_parameters)
+                                            GDBusMethodInvocation *invocation)
 {
        int ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
        wfd_manager_s *manager = wfd_get_manager();
+       GVariant *return_parameters = NULL;
        WDS_LOGD("%s", method_name);
 
        if (!g_strcmp0(method_name, "CreateGroup")) {
@@ -787,9 +945,8 @@ static int __wfd_manager_group_iface_handler(const gchar *method_name,
 
                if (group || manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                        WDS_LOGE("Group already exist or not a proper state");
-                       ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
-                       goto done;
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
                }
 
 #ifdef TIZEN_WLAN_BOARD_SPRD
@@ -799,9 +956,8 @@ static int __wfd_manager_group_iface_handler(const gchar *method_name,
 #endif
                if (!group) {
                        WDS_LOGE("Failed to create pending group");
-                       ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
-                       goto done;
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_OPERATION_FAILED);
+                       return;
                }
                group->flags |= WFD_GROUP_FLAG_AUTONOMOUS;
                manager->group = group;
@@ -821,30 +977,29 @@ static int __wfd_manager_group_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to create group");
                        wfd_destroy_group(manager, GROUP_IFNAME);
-                       ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_OPERATION_FAILED);
+                       return;
                }
 
                WDS_LOGD("Succeeded to create pending group");
                memset(manager->local->passphrase, 0x0, PASSPHRASE_LEN_MAX + 1);
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+               return;
 
        } else if (!g_strcmp0(method_name, "DestroyGroup")) {
                wfd_group_s *group = manager->group;
                if (!group && manager->state < WIFI_DIRECT_STATE_CONNECTED) {
                        WDS_LOGE("Group not exist");
-                       ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
-                       goto done;
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
                }
 
                ret = wfd_oem_destroy_group(manager->oem_ops, group->ifname);
                if (ret < 0) {
                        WDS_LOGE("Failed to destroy group");
-                       ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
-                       goto done;
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_OPERATION_FAILED);
+                       return;
                }
 
                ret = wfd_destroy_group(manager, group->ifname);
@@ -854,49 +1009,42 @@ static int __wfd_manager_group_iface_handler(const gchar *method_name,
                wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
                wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
 
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
+
                wfd_manager_dbus_emit_signal(WFD_MANAGER_GROUP_INTERFACE,
                                "Destroyed", NULL);
-               ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "IsGroupOwner")) {
                gboolean result;
                wfd_device_s *local = manager->local;
                result = local->dev_role == WFD_DEV_ROLE_GO;
                WDS_LOGI("Is group owner : [%s]", result ? "Yes" : "No");
-               *return_parameters = g_variant_new("(b)", result);
-               ret = WIFI_DIRECT_ERROR_NONE;
-
+               return_parameters = g_variant_new("(b)", result);
+               WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
        } else if (!g_strcmp0(method_name, "IsAutoGroup")) {
                int result;
                if ((result = wfd_group_is_autonomous(manager->group)) < 0) {
-                       ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       goto done;
+                       return;
                }
                WDS_LOGI("Is autonomous group : [%s]", result ? "Yes" : "No");
-               *return_parameters = g_variant_new("(b)", result);
-               ret = WIFI_DIRECT_ERROR_NONE;
-
+               return_parameters = g_variant_new("(b)", result);
+               WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
        } else if (!g_strcmp0(method_name, "ActivatePushButton")) {
                if (manager->local->dev_role != WFD_DEV_ROLE_GO) {
                        WDS_LOGE("Wi-Fi Direct is not Group Owner.");
-                       ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
-                       goto done;
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
                }
 
                ret = wfd_oem_wps_start(manager->oem_ops, NULL,
                                WFD_WPS_MODE_PBC, NULL);
                if (ret < 0) {
                        WDS_LOGE("Failed to start wps");
-                       ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
-                       goto done;
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_OPERATION_FAILED);
+                       return;
                }
 
-               ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
-
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
        } else if (!g_strcmp0(method_name, "GetPersistentGroups")) {
                int persistent_group_count = 0;
                wfd_persistent_group_info_s *plist;
@@ -908,9 +1056,11 @@ static int __wfd_manager_group_iface_handler(const gchar *method_name,
                if (manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                        WDS_LOGE("Wi-Fi Direct is not activated.");
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(iaa{sv})", ret, builder_groups);
+                       return_parameters = g_variant_new("(iaa{sv})", ret, builder_groups);
                        g_variant_builder_unref(builder_groups);
-                       goto done;
+
+                       WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
+                       return;
                }
 
                ret = wfd_oem_get_persistent_groups(manager->oem_ops,
@@ -918,9 +1068,11 @@ static int __wfd_manager_group_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Error!! wfd_oem_get_persistent_group_info() failed..");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(iaa{sv})", ret, builder_groups);
+                       return_parameters = g_variant_new("(iaa{sv})", ret, builder_groups);
                        g_variant_builder_unref(builder_groups);
-                       goto done;
+
+                       WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
+                       return;
                }
 
                for (i = 0; i < persistent_group_count; i++) {
@@ -942,18 +1094,17 @@ static int __wfd_manager_group_iface_handler(const gchar *method_name,
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(iaa{sv})", ret, builder_groups);
+               return_parameters = g_variant_new("(iaa{sv})", ret, builder_groups);
                g_variant_builder_unref(builder_groups);
-
+               WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
        } else if (!g_strcmp0(method_name, "RemovePersistentGroup")) {
                gchar *ssid;
                gchar *mac_address;
                unsigned char go_mac_address[6];
                if (manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                        WDS_LOGE("Wi-Fi Direct is not activated.");
-                       ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
-                       goto done;
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
                }
 
                g_variant_get(parameters, "(&s&s)", &mac_address, &ssid);
@@ -964,14 +1115,11 @@ static int __wfd_manager_group_iface_handler(const gchar *method_name,
                                go_mac_address);
                if (ret < 0) {
                        WDS_LOGE("Failed to remove persistent group");
-                       ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
-                       goto done;
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_OPERATION_FAILED);
+                       return;
                }
 
-               ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
-
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
        } else if (!g_strcmp0(method_name, "SetPassphrase")) {
                gchar *passphrase;
                int passphrase_len = 0;
@@ -979,9 +1127,8 @@ static int __wfd_manager_group_iface_handler(const gchar *method_name,
 
                if (group) {
                        WDS_LOGE("Group already exists");
-                       ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
-                       goto done;
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
                }
 
                g_variant_get(parameters, "(&s)", &passphrase);
@@ -991,36 +1138,36 @@ static int __wfd_manager_group_iface_handler(const gchar *method_name,
                                passphrase_len > PASSPHRASE_LEN_MAX) {
                        WDS_LOGE("Passphrase length incorrect [%s]:[%d]",
                                        passphrase, passphrase_len);
-                       ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
-                       goto done;
+                       WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NOT_PERMITTED);
+                       return;
                }
 
                g_strlcpy(manager->local->passphrase, passphrase, PASSPHRASE_LEN_MAX + 1);
                WDS_LOGI("Passphrase string [%s]", manager->local->passphrase);
 
-               ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
-
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
        } else if (!g_strcmp0(method_name, "GetPassphrase")) {
                wfd_group_s *group = manager->group;
                if (!group) {
                        WDS_LOGE("Group not exist");
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(is)", ret, "");
-                       goto done;
+                       return_parameters = g_variant_new("(is)", ret, "");
+                       WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
+                       return;
                }
 
                if (group->role == WFD_DEV_ROLE_GC) {
                        WDS_LOGE("Device is not GO");
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(is)", ret, "");
-                       goto done;
+                       WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
+                       return;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(is)", ret, group->passphrase);
+               return_parameters = g_variant_new("(is)", ret, group->passphrase);
                WDS_LOGI("group->pass : [%s]", group->passphrase);
+               WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
+               return;
 
        } else if (!g_strcmp0(method_name, "SetPersistentGroupEnabled")) {
                gboolean enabled;
@@ -1033,33 +1180,31 @@ static int __wfd_manager_group_iface_handler(const gchar *method_name,
                else
                        manager->local->group_flags &= ~(WFD_GROUP_FLAG_PERSISTENT);
 
-               ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
-
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_NONE);
        } else if (!g_strcmp0(method_name, "IsPersistentGroupEnabled")) {
                gboolean result;
                result = ((manager->local->group_flags &
                                        WFD_GROUP_FLAG_PERSISTENT)
                                == WFD_GROUP_FLAG_PERSISTENT);
                WDS_LOGI("Is persistent group : [%s]", result ? "Yes" : "No");
-               *return_parameters = g_variant_new("(b)", result);
-               ret = WIFI_DIRECT_ERROR_NONE;
+               return_parameters = g_variant_new("(b)", result);
+
+               WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
+               return;
 
        } else {
                WDS_LOGD("method not handled");
-               ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_OPERATION_FAILED);
        }
-
-done:
-       return ret;
 }
 
-static int __wfd_manager_config_iface_handler(const gchar *method_name,
+static void __wfd_manager_config_iface_handler(const gchar *method_name,
                                              GVariant    *parameters,
-                                             GVariant    **return_parameters)
+                                             GDBusMethodInvocation *invocation)
 {
        int ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
        wfd_manager_s *manager = wfd_get_manager();
+       GVariant *return_parameters = NULL;
        WDS_LOGD("%s", method_name);
 
        if (!g_strcmp0(method_name, "GetDeviceName")) {
@@ -1069,13 +1214,13 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to get device name");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(is)", ret, "");
-                       goto done;
-               }
-
-               ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(is)", ret, device_name);
+                       return_parameters = g_variant_new("(is)", ret, "");
+               } else {
 
+                       ret = WIFI_DIRECT_ERROR_NONE;
+                       return_parameters = g_variant_new("(is)", ret, device_name);
+               }
+               WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
        } else if (!g_strcmp0(method_name, "SetDeviceName")) {
                const char *device_name = NULL;
                g_variant_get(parameters, "(&s)", &device_name);
@@ -1084,31 +1229,31 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to set device name");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "GetWpsPin")) {
                wfd_session_s *session = (wfd_session_s*) manager->session;
                if (!session || manager->auto_pin[0] != 0) {
                        WDS_LOGE("Session not exist");
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(is)", ret, "");
+                       return_parameters = g_variant_new("(is)", ret, "");
                        goto done;
                }
 
                if (session->wps_pin[0] == '\0') {
                        WDS_LOGE("WPS PIN is not set");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(is)", ret, "");
+                       return_parameters = g_variant_new("(is)", ret, "");
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(is)", ret, session->wps_pin);
+               return_parameters = g_variant_new("(is)", ret, session->wps_pin);
 
        } else if (!g_strcmp0(method_name, "SetWpsPin")) {
                const char *pin = NULL;
@@ -1124,7 +1269,7 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "GetSupportedWpsMode")) {
                int config_methods = 0;
@@ -1133,12 +1278,12 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to get supported wps mode");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(ii)", ret, config_methods);
+                       return_parameters = g_variant_new("(ii)", ret, config_methods);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ii)", ret, config_methods);
+               return_parameters = g_variant_new("(ii)", ret, config_methods);
 
        } else if (!g_strcmp0(method_name, "GetReqWpsMode")) {
                int wps_mode = 0;
@@ -1147,12 +1292,12 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to get request wps mode");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(ii)", ret, wps_mode);
+                       return_parameters = g_variant_new("(ii)", ret, wps_mode);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ii)", ret, wps_mode);
+               return_parameters = g_variant_new("(ii)", ret, wps_mode);
 
        } else if (!g_strcmp0(method_name, "SetReqWpsMode")) {
                int type = 0;
@@ -1162,12 +1307,12 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if(ret < 0) {
                        WDS_LOGE("Failed to set request wps mode");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "GetLocalWpsMode")) {
                int wps_mode = 0;
@@ -1176,36 +1321,32 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to get request wps mode");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ii)", ret, wps_mode);
+               return_parameters = g_variant_new("(ii)", ret, wps_mode);
 
        } else if (!g_strcmp0(method_name, "GetIPAddress")) {
-               unsigned char ip_addr[IPADDR_LEN] = {0,};
                char ip_addr_str[IPSTR_LEN+1] = {0, };
 
                if (manager->state < WIFI_DIRECT_STATE_CONNECTED) {
                        WDS_LOGE("Device is not connected yet");
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       g_snprintf(ip_addr_str, IPSTR_LEN, IPSTR, IP2STR(ip_addr));
-                       *return_parameters = g_variant_new("(is)", ret, ip_addr_str);
+                       return_parameters = g_variant_new("(is)", ret, ip_addr_str);
                        goto done;
                }
 
-               ret = wfd_local_get_ip_addr((char *)ip_addr);
+               ret = wfd_local_get_ip_addr((char *)ip_addr_str);
                if (ret < 0) {
                        WDS_LOGE("Failed to get local IP address");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       g_snprintf(ip_addr_str, IPSTR_LEN, IPSTR, IP2STR(ip_addr));
-                       *return_parameters = g_variant_new("(is)", ret, ip_addr_str);
+                       return_parameters = g_variant_new("(is)", ret, ip_addr_str);
                        goto done;
                }
 
-               g_snprintf(ip_addr_str, IPSTR_LEN, IPSTR, IP2STR(ip_addr));
-               *return_parameters = g_variant_new("(is)", ret, ip_addr_str);
+               return_parameters = g_variant_new("(is)", ret, ip_addr_str);
                WDS_LOGI("IP addr : [%s]", ip_addr_str);
 
        } else if (!g_strcmp0(method_name, "GetMacAddress")) {
@@ -1215,12 +1356,12 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to get device mac");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(is)", "");
+                       return_parameters = g_variant_new("(is)", "");
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(is)", ret, device_mac);
+               return_parameters = g_variant_new("(is)", ret, device_mac);
 
        } else if (!g_strcmp0(method_name, "GetGoIntent")) {
                int go_intent = 0;
@@ -1229,12 +1370,12 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to get GO intent");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ii)", ret, go_intent);
+               return_parameters = g_variant_new("(ii)", ret, go_intent);
 
        } else if (!g_strcmp0(method_name, "SetGoIntent")) {
                int go_intent = 0;
@@ -1244,12 +1385,12 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if(ret < 0) {
                        WDS_LOGE("Failed to set GO intent");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "GetMaxClient")) {
                int max_client = 0;
@@ -1258,12 +1399,12 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to get max station");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ii)", ret, max_client);
+               return_parameters = g_variant_new("(ii)", ret, max_client);
 
        } else if (!g_strcmp0(method_name, "SetMaxClient")) {
                int max_client = 0;
@@ -1273,12 +1414,12 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if(ret < 0) {
                        WDS_LOGE("Failed to set max station");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "SetAutoConnectionMode")) {
                gboolean mode = FALSE;
@@ -1288,12 +1429,12 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if(ret < 0) {
                        WDS_LOGE("Failed to set autoconnection");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "IsAutoConnectionMode")) {
                int mode = 0;
@@ -1302,12 +1443,12 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to get autoconnection");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(ib)", ret, FALSE);
+                       return_parameters = g_variant_new("(ib)", ret, FALSE);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ib)", ret, mode);
+               return_parameters = g_variant_new("(ib)", ret, mode);
 
        } else if (!g_strcmp0(method_name, "GetOperatingChannel")) {
                int channel = 0;
@@ -1316,40 +1457,86 @@ static int __wfd_manager_config_iface_handler(const gchar *method_name,
                if (!group) {
                        WDS_LOGE("Group not exist");
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                channel = wfd_util_freq_to_channel(group->freq);
                if (channel < 0) {
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ii)", ret, channel);
+               return_parameters = g_variant_new("(ii)", ret, channel);
 
        } else if (!g_strcmp0(method_name, "SetAutoConnectionPeer")) {
                ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
+       } else if (!g_strcmp0(method_name, "GetInterfaceName")) {
+               wfd_group_s *group = (wfd_group_s *)manager->group;
+               if (!group) {
+                       WDS_LOGE("Group not exist");
+                       ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
+                       return_parameters = g_variant_new("(is)", ret, "");
+                       goto done;
+               }
+               ret = WIFI_DIRECT_ERROR_NONE;
+               return_parameters = g_variant_new("(is)", ret, group->ifname);
+       } else if (!g_strcmp0(method_name, "GetSubnetMask")) {
+                       char *get_str = NULL;
+                       char subnet_mask[IPSTR_LEN+1] = {0, };
+
+                       get_str = vconf_get_str(VCONFKEY_SUBNET_MASK);
+                       if (!get_str) {
+                               WDS_LOGE("Get Subnet Mask failed");
+                               ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
+                               return_parameters = g_variant_new("(is)", ret, "");
+                               goto done;
+                       }
+                       WDS_LOGD("VCONFKEY_SUBNET_MASK(%s) : %s", VCONFKEY_SUBNET_MASK,
+                               get_str);
+                       ret = WIFI_DIRECT_ERROR_NONE;
+                       g_strlcpy(subnet_mask, get_str, IPSTR_LEN + 1);
+                       return_parameters = g_variant_new("(is)", ret, subnet_mask);
+                       free(get_str);
+       } else if (!g_strcmp0(method_name, "GetGateway")) {
+                       char *get_str = NULL;
+                       char gateway_addr[IPSTR_LEN+1] = {0, };
+                       get_str = vconf_get_str(VCONFKEY_GATEWAY);
+                       if (!get_str) {
+                               WDS_LOGE("Get Gateway failed");
+                               ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
+                               return_parameters = g_variant_new("(is)", ret, "");
+                               goto done;
+                       }
+                       WDS_LOGD("VCONFKEY_GATEWAY_ADDR(%s) : %s", VCONFKEY_GATEWAY,
+                               get_str);
+                       ret = WIFI_DIRECT_ERROR_NONE;
+                       g_strlcpy(gateway_addr, get_str, IPSTR_LEN + 1);
+                       return_parameters = g_variant_new("(is)", ret, gateway_addr);
+                       free(get_str);
        } else {
                WDS_LOGD("method not handled");
-               ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_OPERATION_FAILED);
+               return;
        }
 
 done:
-       return ret;
+       WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
+       return;
 }
 
 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
-static int __wfd_manager_service_iface_handler(const gchar *method_name,
+static void __wfd_manager_service_iface_handler(const gchar *method_name,
                                               GVariant    *parameters,
-                                              GVariant    **return_parameters)
+                                              GDBusMethodInvocation *invocation)
 {
        int ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
        wfd_manager_s *manager = wfd_get_manager();
+       GVariant *return_parameters = NULL;
        WDS_LOGD("%s", method_name);
 
        if (!g_strcmp0(method_name, "StartDiscovery")) {
@@ -1360,7 +1547,7 @@ static int __wfd_manager_service_iface_handler(const gchar *method_name,
                if (manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                        WDS_LOGE("Wi-Fi Direct is not activated.");
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
@@ -1373,12 +1560,12 @@ static int __wfd_manager_service_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to start service discovery");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
                wfd_manager_dbus_emit_signal(WFD_MANAGER_SERVICE_INTERFACE,
                                "DiscoveryStarted", NULL);
@@ -1391,7 +1578,7 @@ static int __wfd_manager_service_iface_handler(const gchar *method_name,
                if (manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                        WDS_LOGE("Wi-Fi Direct is not activated.");
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
@@ -1404,12 +1591,12 @@ static int __wfd_manager_service_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to cancel service discovery");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "Register")) {
                int service_type;
@@ -1419,7 +1606,7 @@ static int __wfd_manager_service_iface_handler(const gchar *method_name,
                if (manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                        WDS_LOGE("Wi-Fi Direct is not activated.");
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(ii)", ret, service_id);
+                       return_parameters = g_variant_new("(ii)", ret, service_id);
                        goto done;
                }
 
@@ -1430,12 +1617,12 @@ static int __wfd_manager_service_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to add service");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(ii)", ret, service_id);
+                       return_parameters = g_variant_new("(ii)", ret, service_id);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ii)", ret, service_id);
+               return_parameters = g_variant_new("(ii)", ret, service_id);
 
        } else if (!g_strcmp0(method_name, "Deregister")) {
                int service_id = 0;
@@ -1443,7 +1630,7 @@ static int __wfd_manager_service_iface_handler(const gchar *method_name,
                if (manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                        WDS_LOGE("Wi-Fi Direct is not activated.");
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
@@ -1454,37 +1641,40 @@ static int __wfd_manager_service_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to delete service");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
        } else {
                WDS_LOGD("method not handled");
-               ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_OPERATION_FAILED);
+               return;
        }
 
 done:
-       return ret;
+       WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
+       return;
 }
 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
 
 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
-static int __wfd_manager_display_iface_handler(const gchar *method_name,
+static void __wfd_manager_display_iface_handler(const gchar *method_name,
                                               GVariant    *parameters,
-                                              GVariant    **return_parameters)
+                                              GDBusMethodInvocation *invocation)
 {
        int ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
        wfd_manager_s *manager = wfd_get_manager();
+       GVariant *return_parameters = NULL;
        WDS_LOGD("%s", method_name);
 
        if (!g_strcmp0(method_name, "Init")) {
                if(manager->state < WIFI_DIRECT_STATE_ACTIVATED ||
                                manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
@@ -1494,7 +1684,7 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to initialize display");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
@@ -1504,13 +1694,13 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
                device->display.hdcp_support = WIFI_DISPLAY_DEFAULT_HDCP;
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "Deinit")) {
                if(manager->state < WIFI_DIRECT_STATE_ACTIVATED ||
                                manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
@@ -1520,14 +1710,14 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to deinitialize display");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
                memset(&(device->display), 0x0, sizeof(wfd_display_type_e));
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "SetConfig")) {
                int type, port, hdcp;
@@ -1536,7 +1726,7 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
                if(manager->state < WIFI_DIRECT_STATE_ACTIVATED ||
                                manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
@@ -1546,12 +1736,12 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
                if(ret < 0) {
                        WDS_LOGE("Failed to set display device settings");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "SetAvailiability")) {
                int availability;
@@ -1560,7 +1750,7 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
                if(manager->state < WIFI_DIRECT_STATE_ACTIVATED ||
                                manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
@@ -1568,12 +1758,12 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
                if (ret < 0) {
                        WDS_LOGE("Failed to set session availability");
                        ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       *return_parameters = g_variant_new("(i)", ret);
+                       return_parameters = g_variant_new("(i)", ret);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(i)", ret);
+               return_parameters = g_variant_new("(i)", ret);
 
        } else if (!g_strcmp0(method_name, "GetPeerType")) {
                wfd_device_s *peer = NULL;
@@ -1585,7 +1775,7 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
 
                if(manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
@@ -1593,12 +1783,12 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
                if(!peer) {
                        WDS_LOGE("Failed to get peer");
                        ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ii)", ret, peer->display.type);
+               return_parameters = g_variant_new("(ii)", ret, peer->display.type);
 
        } else if (!g_strcmp0(method_name, "GetPeerAvailability")) {
                wfd_device_s *peer = NULL;
@@ -1610,19 +1800,19 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
 
                if(manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                peer = wfd_manager_get_peer_by_addr(manager, mac_addr);
-               if(peer) {
+               if(!peer) {
                        WDS_LOGE("Failed to get peer");
                        ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
-               *return_parameters = g_variant_new("(ii)", ret, peer->display.availability);
+               return_parameters = g_variant_new("(ii)", ret, peer->display.availability);
                ret = WIFI_DIRECT_ERROR_NONE;
 
        } else if (!g_strcmp0(method_name, "GetPeerHdcp")) {
@@ -1635,20 +1825,20 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
 
                if(manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                peer = wfd_manager_get_peer_by_addr(manager, mac_addr);
-               if(peer) {
+               if(!peer) {
                        WDS_LOGE("Failed to get peer");
                        ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ii)", ret, peer->display.hdcp_support);
+               return_parameters = g_variant_new("(ii)", ret, peer->display.hdcp_support);
 
        } else if (!g_strcmp0(method_name, "GetPeerPort")) {
                wfd_device_s *peer = NULL;
@@ -1660,20 +1850,20 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
 
                if(manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                peer = wfd_manager_get_peer_by_addr(manager, mac_addr);
-               if(peer) {
+               if(!peer) {
                        WDS_LOGE("Failed to get peer");
                        ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ii)", ret, peer->display.port);
+               return_parameters = g_variant_new("(ii)", ret, peer->display.port);
 
        } else if (!g_strcmp0(method_name, "GetPeerThroughput")) {
                wfd_device_s *peer = NULL;
@@ -1685,37 +1875,39 @@ static int __wfd_manager_display_iface_handler(const gchar *method_name,
 
                if(manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
                        ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                peer = wfd_manager_get_peer_by_addr(manager, mac_addr);
-               if(peer) {
+               if(!peer) {
                        WDS_LOGE("Failed to get peer");
                        ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
-                       *return_parameters = g_variant_new("(ii)", ret, 0);
+                       return_parameters = g_variant_new("(ii)", ret, 0);
                        goto done;
                }
 
                ret = WIFI_DIRECT_ERROR_NONE;
-               *return_parameters = g_variant_new("(ii)", ret, peer->display.max_tput);
+               return_parameters = g_variant_new("(ii)", ret, peer->display.max_tput);
 
        } else {
                WDS_LOGD("method not handled");
-               ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
+               WFD_DBUS_REPLY_RET(invocation, WIFI_DIRECT_ERROR_OPERATION_FAILED);
+               return;
        }
 
 done:
-       return ret;
+       WFD_DBUS_REPLY_PARAMS(invocation, return_parameters);
+       return;
 }
 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
 
 static struct {
        guint reg_id;
        const gchar *iface_name;
-        int (*function) (const gchar *method_name,
+        void (*function) (const gchar *method_name,
                         GVariant    *parameters,
-                        GVariant    **return_parameters);
+                        GDBusMethodInvocation *invocation);
 } wfd_manager_iface_map[] = {
        {
                0,
@@ -1764,7 +1956,6 @@ static void wfd_manager_method_call_handler (GDBusConnection       *connection,
                                             gpointer               user_data)
 {
        int count = 0;
-       GVariant *return_parameters = NULL;
 
        /* Method Call */
        WDS_LOGD("interface : [%s], method : [%s]", interface_name, method_name);
@@ -1775,13 +1966,11 @@ static void wfd_manager_method_call_handler (GDBusConnection       *connection,
 
                        wfd_manager_iface_map[count].function(method_name,
                                                              parameters,
-                                                             &return_parameters);
+                                                             invocation);
                        break;
                }
                count++;
        }
-
-       g_dbus_method_invocation_return_value(invocation, return_parameters);
 }
 
 static const GDBusInterfaceVTable wfd_manager_interface_vtable =
@@ -1795,22 +1984,26 @@ void wfd_manager_dbus_unregister(void)
                wfd_manager_dbus_iface_unregister(wfd_manager_iface_map[count].reg_id);
                count++;
        }
-
-       wfd_manager_dbus_deinit();
 }
 
 gboolean wfd_manager_dbus_register(void)
 {
+       GDBusNodeInfo *node_info = NULL;
+       GError *Error = NULL;
        int count = 0;
 
-       if (wfd_manager_dbus_init() == 0)
+       node_info = g_dbus_node_info_new_for_xml(wfd_manager_introspection_xml, &Error);
+       if (node_info == NULL) {
+               WDS_LOGE("Failed to get node info, Error: %s", Error->message);
+               g_clear_error(&Error);
                return FALSE;
+       }
 
        while (wfd_manager_iface_map[count].iface_name != NULL) {
                wfd_manager_iface_map[count].reg_id =
                        wfd_manager_dbus_iface_register(wfd_manager_iface_map[count].iface_name,
                                                        WFD_MANAGER_PATH,
-                                                       wfd_manager_introspection_xml,
+                                                       node_info,
                                                        &wfd_manager_interface_vtable);
 
                WDS_LOGD("Registered Interface [%d, %s]",
@@ -1820,5 +2013,6 @@ gboolean wfd_manager_dbus_register(void)
                count++;
        }
 
+       g_dbus_node_info_unref(node_info);
        return TRUE;
 }
index 2996052..00d8b8d 100755 (executable)
@@ -49,7 +49,7 @@
 #include "wifi-direct-log.h"
 #include "wifi-direct-error.h"
 #include "wifi-direct-iface.h"
-
+#include "wifi-direct-dbus.h"
 
 wfd_manager_s *g_manager;
 
@@ -566,11 +566,6 @@ int wfd_manager_deactivate(wfd_manager_s *manager)
                return WIFI_DIRECT_ERROR_OPERATION_FAILED;
        }
 
-       if (manager->state < WIFI_DIRECT_STATE_ACTIVATING) {
-               WDS_LOGE("Already deactivated");
-               return WIFI_DIRECT_ERROR_NOT_PERMITTED;
-       }
-
        wfd_state_get(manager, &prev_state);
        wfd_state_set(manager, WIFI_DIRECT_STATE_DEACTIVATING);
 
@@ -874,28 +869,6 @@ int wfd_manager_disconnect(wfd_manager_s *manager, unsigned char *peer_addr)
                return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
        }
 
-       if (!manager->group || manager->state < WIFI_DIRECT_STATE_CONNECTED) {
-               if (WIFI_DIRECT_STATE_DISCOVERING == manager->state) {
-                       res = wfd_oem_stop_scan(manager->oem_ops);
-                       if (res < 0) {
-                               WDS_LOGE("Failed to stop scan");
-                               return WIFI_DIRECT_ERROR_OPERATION_FAILED;
-                       }
-                       WDS_LOGI("Succeeded to stop scan");
-
-                       if (WFD_DEV_ROLE_GO == manager->local->dev_role) {
-                               wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
-                               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
-                       } else {
-                               wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
-                               wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
-                       }
-               } else {
-                       WDS_LOGE("It's not permitted with this state [%d]", manager->state);
-                       return WIFI_DIRECT_ERROR_NOT_PERMITTED;
-               }
-       }
-
        group = (wfd_group_s*) manager->group;
        if (!group) {
                WDS_LOGE("Group not found");
@@ -1448,12 +1421,6 @@ int wfd_manager_cancel_discovery(wfd_manager_s *manager)
        __WDS_LOG_FUNC_ENTER__;
        int res = 0;
 
-       if (manager->state != WIFI_DIRECT_STATE_ACTIVATED &&
-                       manager->state != WIFI_DIRECT_STATE_DISCOVERING) {
-               __WDS_LOG_FUNC_EXIT__;
-               return WIFI_DIRECT_ERROR_NOT_PERMITTED;
-       }
-
        res = wfd_oem_stop_scan(manager->oem_ops);
        if (res < 0) {
                WDS_LOGE("Failed to stop scan");
@@ -1655,7 +1622,13 @@ int main(int argc, char *argv[])
        }
        WDS_LOGD("Succeeded to load plugin");
 
-       wfd_manager_dbus_register();
+       if (!wfd_manager_dbus_init()) {
+               WDS_LOGE("Failed to DBus");
+               wfd_plugin_deinit(g_manager);
+               wfd_manager_deinit(g_manager);
+               __WDS_LOG_FUNC_EXIT__;
+               return -1;
+       }
 
        main_loop = g_main_loop_new(NULL, FALSE);
        if (main_loop == NULL) {
@@ -1667,6 +1640,7 @@ int main(int argc, char *argv[])
        g_main_loop_run(main_loop);
 
        wfd_manager_dbus_unregister();
+       wfd_manager_dbus_deinit();
 
        wfd_plugin_deinit(g_manager);
        wfd_manager_deinit(g_manager);
index c9f9e3e..07b1e57 100644 (file)
@@ -158,7 +158,9 @@ int wfd_update_peer(void *data, wfd_device_s *peer)
                return -1;
        }
        g_strlcpy(peer->dev_name, oem_dev->dev_name, DEV_NAME_LEN + 1);
+#ifndef CTRL_IFACE_DBUS
        memcpy(peer->intf_addr, oem_dev->intf_addr, MACADDR_LEN);
+#endif /* CTRL_IFACE_DBUS */
        memcpy(peer->go_dev_addr, oem_dev->go_dev_addr, MACADDR_LEN);
        peer->channel = oem_dev->channel;
        peer->dev_role = oem_dev->dev_role;
index 3f52d63..0a59522 100755 (executable)
@@ -60,7 +60,6 @@
 #include "wifi-direct-log.h"
 #include "wifi-direct-dbus.h"
 
-#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
 #include <linux/unistd.h>
 #include <asm/types.h>
 #include <linux/netlink.h>
@@ -69,7 +68,6 @@
 #include <netlink/netlink.h>
 #include <netlink/socket.h>
 #include <netlink/route/neighbour.h>
-#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
 
 #define TIZEN_P2P_GO_IPADDR "192.168.49.1"
 #define MAX_SIZE_ERROR_BUFFER 256
@@ -755,7 +753,7 @@ static gboolean _polling_ip(gpointer user_data)
                __WDS_LOG_FUNC_EXIT__;
                return FALSE;
        }
-       res = wfd_util_dhcpc_get_ip(ifname, local->ip_addr, 0);
+       res = wfd_util_local_get_ip(ifname, local->ip_addr, 0);
        if (res < 0) {
                WDS_LOGE("Failed to get local IP for interface %s(count=%d)", ifname, count++);
                __WDS_LOG_FUNC_EXIT__;
@@ -913,7 +911,7 @@ int wfd_util_dhcpc_stop()
        return 0;
 }
 
-int wfd_util_dhcpc_get_ip(char *ifname, unsigned char *ip_addr, int is_IPv6)
+int wfd_util_local_get_ip(char *ifname, unsigned char *ip_addr, int is_IPv6)
 {
        __WDS_LOG_FUNC_ENTER__;
        struct ifreq ifr;
@@ -1119,6 +1117,8 @@ static int _wfd_util_static_ip_set(const char *ifname, unsigned char *static_ip)
 int wfd_util_ip_over_eap_assign(wfd_device_s *peer, const char *ifname)
 {
        __WDS_LOG_FUNC_ENTER__;
+       wfd_manager_s *manager = wfd_get_manager();
+       wfd_device_s *local = (wfd_device_s*) manager->local;
 
        char ip_str[IPSTR_LEN] = {0, };
 
@@ -1129,6 +1129,7 @@ int wfd_util_ip_over_eap_assign(wfd_device_s *peer, const char *ifname)
 
        _wfd_util_static_ip_set(ifname, peer->client_ip_addr);
        memcpy(peer->ip_addr, peer->go_ip_addr, IPADDR_LEN);
+       memcpy(local->ip_addr, peer->client_ip_addr, IPADDR_LEN);
 
        g_snprintf(ip_str, IPSTR_LEN, IPSTR, IP2STR(peer->ip_addr));
        _connect_remote_device(ip_str);
@@ -1136,9 +1137,9 @@ int wfd_util_ip_over_eap_assign(wfd_device_s *peer, const char *ifname)
        __WDS_LOG_FUNC_EXIT__;
        return 0;
 }
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
 
-#ifdef TIZEN_WLAN_BOARD_SPRD
-int wfd_util_static_ip_unset(const char *ifname)
+int wfd_util_ip_unset(const char *ifname)
 {
        __WDS_LOG_FUNC_ENTER__;
        int res = 0;
@@ -1164,7 +1165,7 @@ int wfd_util_static_ip_unset(const char *ifname)
                return -1;
        }
 
-       res = wfd_util_dhcpc_get_ip((char *)ifname, ip_addr, 0);
+       res = wfd_util_local_get_ip((char *)ifname, ip_addr, 0);
        if (res < 0) {
                WDS_LOGE("Failed to get local IP for interface %s", ifname);
                __WDS_LOG_FUNC_EXIT__;
@@ -1235,5 +1236,3 @@ int wfd_util_static_ip_unset(const char *ifname)
        __WDS_LOG_FUNC_EXIT__;
        return res;
 }
-#endif /* TIZEN_WLAN_BOARD_SPRD */
-#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */