[wifi-direct-manager]ADD IP over EAPol feature 46/57846/2
authorYu Jiung <jiung.yu@samsung.com>
Wed, 20 Jan 2016 06:54:38 +0000 (15:54 +0900)
committerYu Jiung <jiung.yu@samsung.com>
Mon, 1 Feb 2016 01:15:46 +0000 (10:15 +0900)
Change-Id: I29e27ee3ccd5c5f0e8fcfd304a4b5d582c300e3e
Signed-off-by: Yu jiung <jiung.yu@samsung.com>
17 files changed:
CMakeLists.txt
include/wifi-direct-manager.h
include/wifi-direct-util.h
oem/wifi-direct-oem.c
oem/wifi-direct-oem.h
packaging/wifi-direct-manager.spec
plugin/wpasupplicant/ctrl_iface_dbus/include/wfd-plugin-wpasupplicant.h
plugin/wpasupplicant/ctrl_iface_dbus/wfd-plugin-wpasupplicant.c
plugin/wpasupplicant/ctrl_iface_sock/include/wfd-plugin-log.h [new file with mode: 0644]
plugin/wpasupplicant/ctrl_iface_sock/include/wfd-plugin-wpasupplicant.h
plugin/wpasupplicant/ctrl_iface_sock/wfd-plugin-wpasupplicant.c
src/wifi-direct-client.c
src/wifi-direct-event.c
src/wifi-direct-group.c
src/wifi-direct-manager.c
src/wifi-direct-service.c
src/wifi-direct-util.c

index 1a6264f..4dd7f27 100755 (executable)
@@ -44,6 +44,9 @@ ENDIF(TIZEN_FEATURE_WIFI_DISPLAY)
 IF(TIZEN_WLAN_CONCURRENT_ENABLE)
        ADD_DEFINITIONS(-DTIZEN_WLAN_CONCURRENT_ENABLE)
 ENDIF(TIZEN_WLAN_CONCURRENT_ENABLE)
+IF(TIZEN_FEATURE_IP_OVER_EAPOL)
+       ADD_DEFINITIONS(-DTIZEN_FEATURE_IP_OVER_EAPOL)
+ENDIF(TIZEN_FEATURE_IP_OVER_EAPOL)
 
 IF(TIZEN_ARCH_64)
        ADD_DEFINITIONS(-DTIZEN_ARCH_64)
index 98dc6a2..e1bcb42 100755 (executable)
@@ -109,7 +109,9 @@ typedef enum {
 
 typedef enum {
        WFD_IP_TYPE_DYNAMIC = 0x0,
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
        WFD_IP_TYPE_OVER_EAPOL = 0x1,
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
 } wfd_ip_type_e;
 
 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
index 8581ab3..92b2015 100755 (executable)
@@ -115,7 +115,6 @@ int wfd_util_check_mobile_ap_state();
 int wfd_util_wifi_direct_activatable();
 #if 0
 int wfd_util_get_wifi_direct_state();
-unsigned int wfd_util_static_ip_convert_order(unsigned int net_ip);
 #endif
 int wfd_util_set_wifi_direct_state(int state);
 int wfd_util_get_local_dev_mac(unsigned char *dev_mac);
@@ -132,14 +131,11 @@ 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_get_local_ip(unsigned char* ip_addr);
-
-#ifdef CTRL_IFACE_DBUS
+int wfd_util_local_get_ip(char *ifname, unsigned char *ip_addr, int is_IPv6);
+#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 */
-/*TODO: ODROID Image does not have support libnl-2.0*/
-int wfd_util_ip_over_eap_assign(wfd_device_s *peer, const char *ifname);
-int wfd_util_ip_over_eap_lease(wfd_device_s *peer);
-#endif /* CTRL_IFACE_DBUS */
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
 #endif /* __WIFI_DIRECT_UTIL_H__ */
index 19d7b3e..5af2258 100644 (file)
@@ -28,6 +28,7 @@
 #include <stdio.h>
 
 #include <glib.h>
+
 #include "wifi-direct-oem.h"
 
 int wfd_oem_init(wfd_oem_ops_s *ops, wfd_oem_event_cb event_callback, void *user_data)
@@ -202,6 +203,7 @@ int wfd_oem_generate_pin(wfd_oem_ops_s *ops, char **pin)
 
        return ops->generate_pin(pin);
 }
+
 int wfd_oem_get_supported_wps_mode(wfd_oem_ops_s *ops, int *wps_mode)
 {
        if (!ops || !ops->get_supported_wps_mode) {
index 62b91d3..23e9dfd 100755 (executable)
@@ -43,6 +43,8 @@
 #define OEM_QUERY_ID_LEN 15
 #define OEM_SERVICE_MAX_LEN 1024
 
+#define OEM_MAX_PEER_NUM 8
+
 typedef enum {
        WFD_OEM_SC_SUCCESS = 0,
        WFD_OEM_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE = 1,
@@ -195,9 +197,11 @@ typedef struct {
        int freq;
        char pass[OEM_PASS_PHRASE_LEN+1];
        unsigned char go_dev_addr[OEM_MACADDR_LEN];
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
        unsigned char ip_addr[OEM_IPADDR_LEN];
        unsigned char ip_addr_mask[OEM_IPADDR_LEN];
        unsigned char ip_addr_go[OEM_IPADDR_LEN];
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
 } wfd_oem_group_data_s;
 
 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
@@ -223,11 +227,11 @@ typedef struct {
        int event_id;
        unsigned char dev_addr[OEM_MACADDR_LEN];        // device address
        unsigned char intf_addr[OEM_MACADDR_LEN];
-       unsigned char ip_addr_peer[OEM_IPADDR_LEN];
        int wps_mode;
        char wps_pin[OEM_PINSTR_LEN+1]; // just for DISPLAY
        char ifname[OEM_IFACE_NAME_LEN+1];
        int dev_role;
+       unsigned char ip_addr_peer[OEM_IPADDR_LEN];
        int edata_type;
        void *edata;
 } wfd_oem_event_s;
index 9745ba0..416d2e4 100755 (executable)
@@ -77,6 +77,7 @@ cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DARCHITECTURE=$ARCH \
         -DTIZEN_WLAN_CONCURRENT_ENABLE=1 \
         -DTIZEN_FEATURE_WIFI_DISPLAY=1 \
         -DTIZEN_FEATURE_DEFAULT_CONNECTION_AGENT=0 \
+        -DTIZEN_FEATURE_IP_OVER_EAPOL=1 \
         -DCTRL_IFACE_DBUS=1 \
         -DTIZEN_MOBILE=1 \
 %else
@@ -84,6 +85,7 @@ cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DARCHITECTURE=$ARCH \
        -DTIZEN_FEATURE_SERVICE_DISCOVERY=1 \
        -DTIZEN_WLAN_CONCURRENT_ENABLE=0 \
        -DTIZEN_FEATURE_WIFI_DISPLAY=1 \
+       -DTIZEN_FEATURE_IP_OVER_EAPOL=1 \
        -DCTRL_IFACE_DBUS=1 \
        -DTIZEN_WIFI_MODULE_BUNDLE=0 \
        -DTIZEN_TV=1 \
index b460623..a5f383e 100755 (executable)
 #define DEFAULT_NO_GROUP_IFACE 1
 #endif
 
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
 #define DEFAULT_IP_GO "\xc0\xa8\x31\x01"
 #define DEFAULT_IP_MASK "\xff\xff\xff\x00"
 #define DEFAULT_IP_START "\xc0\xa8\x31\x33"
 #define DEFAULT_IP_END "\xc0\xa8\x31\x64"
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
 
 #define WS_POLL_TIMEOUT 5000
 #define WS_CONN_RETRY_COUNT 10
index d0deb28..bdb3913 100755 (executable)
@@ -796,7 +796,9 @@ void __ws_extract_group_details(const char *key, GVariant *value, void *user_dat
                return;
        }
 
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
        wfd_oem_group_data_s *group = (wfd_oem_group_data_s *)event->edata;
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
 #if defined (TIZEN_DEBUG_DBUS_VALUE)
        CHECK_KEY_VALUE(key, value);
 #endif /* TIZEN_DEBUG_DBUS_VALUE */
@@ -821,7 +823,7 @@ void __ws_extract_group_details(const char *key, GVariant *value, void *user_dat
                        event->dev_role = WFD_OEM_DEV_ROLE_GO;
                else if (!strncmp(role, "client", 6))
                        event->dev_role = WFD_OEM_DEV_ROLE_GC;
-
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
        } else if (g_strcmp0(key, "IpAddr") == 0) {
 
                if (__ws_unpack_ay(group->ip_addr, value, OEM_IPADDR_LEN))
@@ -836,7 +838,7 @@ void __ws_extract_group_details(const char *key, GVariant *value, void *user_dat
 
                if (__ws_unpack_ay(group->ip_addr_go, value, OEM_IPADDR_LEN))
                        WDP_LOGD("GO IP address [" IPSTR "]", IP2STR(group->ip_addr_go));
-
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
        } else if (g_strcmp0(key, "group_object") == 0) {
                static char group_path[DBUS_OBJECT_PATH_MAX] = {'\0',};
                const char *g_path;
@@ -1940,7 +1942,9 @@ static void __ws_parse_peer_joined(char *peer_path,
        static unsigned char peer_dev[WS_MACSTR_LEN] = {'\0',};
        const char *path = NULL;
        char *loc = NULL;
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
        int i = 0;
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
 
        g_variant_get(parameter, "(&oay)", &path, &iter);
        g_strlcpy(peer_path, path, DBUS_OBJECT_PATH_MAX);
@@ -1951,11 +1955,12 @@ static void __ws_parse_peer_joined(char *peer_path,
                __ws_mac_compact_to_normal(loc + 1, peer_dev);
        __ws_txt_to_mac(peer_dev, dev_addr);
        WDP_LOGD("peer mac [" MACSTR "]", MAC2STR(dev_addr));
-
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
        for(i = 0; i < OEM_IPADDR_LEN; i++)
                g_variant_iter_loop (iter, "y", &ip_addr[i]);
 
        WDP_LOGD("peer ip [" IPSTR "]", IP2STR(ip_addr));
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
 
        __WDP_LOG_FUNC_EXIT__;
        return;
@@ -2662,10 +2667,13 @@ int __ws_init_p2pdevice()
        dbus_method_param_s params;
 
        const char *primary_device_type = PRIMARY_DEVICE_TYPE;
+
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
        const char *ip_addr_go = DEFAULT_IP_GO;
        const char *ip_addr_mask = DEFAULT_IP_MASK;
        const char *ip_addr_start = DEFAULT_IP_START;
        const char *ip_addr_end = DEFAULT_IP_END;
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
        int i = 0;
        int res = 0;
 
@@ -2721,7 +2729,7 @@ int __ws_init_p2pdevice()
        g_variant_builder_add (builder, "{sv}", "PrimaryDeviceType",
                        g_variant_new ("ay", type_builder));
        g_variant_builder_unref (type_builder);
-
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
        type_builder = g_variant_builder_new (G_VARIANT_TYPE ("ay"));
        for(i = 0; i < OEM_IPADDR_LEN; i++)
                g_variant_builder_add(type_builder, "y", ip_addr_go[i]);
@@ -2749,7 +2757,7 @@ int __ws_init_p2pdevice()
        g_variant_builder_add (builder, "{sv}", "IpAddrEnd",
                        g_variant_new ("ay", type_builder));
        g_variant_builder_unref (type_builder);
-
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
        value = g_variant_new ("a{sv}", builder);
        g_variant_builder_unref (builder);
 
diff --git a/plugin/wpasupplicant/ctrl_iface_sock/include/wfd-plugin-log.h b/plugin/wpasupplicant/ctrl_iface_sock/include/wfd-plugin-log.h
new file mode 100644 (file)
index 0000000..a515aa5
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Network Configuration Module
+ *
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/**
+ * This file declares wifi direct wpasupplicant plugin functions and structures.
+ *
+ * @file               wfd-plugin-log.h
+ * @author     Gibyoung Kim (lastkgb.kim@samsung.com)
+ * @version    0.7
+ */
+
+#ifndef __WFD_PLUGIN_LOG_H_
+#define __WFD_PLUGIN_LOG_H_
+
+#ifdef USE_DLOG
+#include <dlog.h>
+
+#undef LOG_TAG
+#define LOG_TAG "WIFI_DIRECT_PLUGIN"
+
+#define WDP_LOGV(format, args...) LOGV(format, ##args)
+#define WDP_LOGD(format, args...) LOGD(format, ##args)
+#define WDP_LOGI(format, args...) LOGI(format, ##args)
+#define WDP_LOGW(format, args...) LOGW(format, ##args)
+#define WDP_LOGE(format, args...) LOGE(format, ##args)
+#define WDP_LOGF(format, args...) LOGF(format, ##args)
+
+#define __WDP_LOG_FUNC_ENTER__ LOGD("Enter")
+#define __WDP_LOG_FUNC_EXIT__ LOGD("Quit")
+
+#define WDP_SECLOGI(format, args...) SECURE_LOG(LOG_INFO, LOG_TAG, format, ##args)
+#define WDP_SECLOGD(format, args...) SECURE_LOG(LOG_DEBUG, LOG_TAG, format, ##args)
+
+#else /* USE_DLOG */
+
+#define WDP_LOGV(format, args...)
+#define WDP_LOGD(format, args...)
+#define WDP_LOGI(format, args...)
+#define WDP_LOGW(format, args...)
+#define WDP_LOGE(format, args...)
+#define WDP_LOGF(format, args...)
+
+#define __WDP_LOG_FUNC_ENTER__
+#define __WDP_LOG_FUNC_EXIT__
+
+#define WDP_SECLOGI(format, args...)
+#define WDP_SECLOGD(format, args...)
+
+#endif /* USE_DLOG */
+
+#endif /* __WFD_PLUGIN_LOG_H_ */
index c6df598..51a9638 100755 (executable)
 #define __WFD_PLUGIN_WPASUPPLICANT_H__
 
 
-#ifdef USE_DLOG
-#include <dlog.h>
-
-#undef LOG_TAG
-#define LOG_TAG "WIFI_DIRECT_PLUGIN"
-
-#define WDP_LOGV(format, args...) LOGV(format, ##args)
-#define WDP_LOGD(format, args...) LOGD(format, ##args)
-#define WDP_LOGI(format, args...) LOGI(format, ##args)
-#define WDP_LOGW(format, args...) LOGW(format, ##args)
-#define WDP_LOGE(format, args...) LOGE(format, ##args)
-#define WDP_LOGF(format, args...) LOGF(format, ##args)
-
-#define __WDP_LOG_FUNC_ENTER__ LOGD("Enter")
-#define __WDP_LOG_FUNC_EXIT__ LOGD("Quit")
-
-#define WDP_SECLOGI(format, args...) SECURE_LOG(LOG_INFO, LOG_TAG, format, ##args)
-#define WDP_SECLOGD(format, args...) SECURE_LOG(LOG_DEBUG, LOG_TAG, format, ##args)
-
-#else /* USE_DLOG */
-
-#define WDP_LOGV(format, args...)
-#define WDP_LOGD(format, args...)
-#define WDP_LOGI(format, args...)
-#define WDP_LOGW(format, args...)
-#define WDP_LOGE(format, args...)
-#define WDP_LOGF(format, args...)
-
-#define __WDP_LOG_FUNC_ENTER__
-#define __WDP_LOG_FUNC_EXIT__
-
-#define WDP_SECLOGI(format, args...)
-#define WDP_SECLOGD(format, args...)
-
-#endif /* USE_DLOG */
-
 #define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
 #define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
 #define IP2STR(a) (a)[0], (a)[1], (a)[2], (a)[3]
 #define IPSTR "%d.%d.%d.%d"
 #define MAC2SECSTR(a) (a)[0], (a)[4], (a)[5]
 #define MACSECSTR "%02x:%02x:%02x"
+#define ISZEROMACADDR(a) !(a[0] | a[1] | a[2] | a[3] | a[4] | a[5])
 #define IP2SECSTR(a) (a)[0], (a)[3]
 #define IPSECSTR "%d..%d"
 
 #define GROUP_IFACE_PREFIX "p2p"
 #endif
 
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
+#define DEFAULT_IP_GO "192.168.49.1"
+#define DEFAULT_IP_MASK "255.255.255.0"
+#define DEFAULT_IP_START "192.168.49.51"
+#define DEFAULT_IP_END "192.168.49.100"
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
+
 #define WS_POLL_TIMEOUT 5000
 #define WS_CONN_RETRY_COUNT 10
 #define WS_PINSTR_LEN 8
 #define WS_NETFLAG_LEN 32
 #define WS_MAX_PERSISTENT_COUNT 20
 #define WS_SCAN_RETRY_COUNT 10
+#define WS_IP_LEN 4
 
 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
 
 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
 #define WS_WFD_INFO_PRIMARY_SINK 0x01
 #define WS_WFD_INFO_SECONDARY_SINK 0x02
-#define WS_WFD_INFO_AVAILABILITY 0x10
+#define WS_WFD_INFO_AVAILABLITY 0x10
 #define WS_WFD_INFO_WSD_SUPPORT 0x40
 #define WS_WFD_INFO_TDLS_SUPPORT 0x80
 #define WS_WFD_INFO_HDCP_SUPPORT 0x100
@@ -326,7 +299,11 @@ typedef enum {
        WS_GROUP_INFO_PASS,     // passphrase=
        WS_GROUP_INFO_GO_DEV_ADDR,      // go_dev_addr=
        WS_GROUP_INFO_STATUS,           // status=
-
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
+       WS_GROUP_INFO_IP_ADDR,  //ip_addr=
+       WS_GROUP_INFO_IP_MASK,  //ip_mask=
+       WS_GROUP_INFO_GO_IP_ADDR, //go_ip_addr=
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
        WS_GROUP_INFO_LIMIT,
 } ws_group_info_id_e;
 
index f815394..4972208 100755 (executable)
 #include <errno.h>
 #include <sys/ioctl.h>
 #include <net/if.h>
+#include <arpa/inet.h>
 
 #include <glib.h>
 #include <gio/gio.h>
 
 #include "wifi-direct-oem.h"
+#include "wfd-plugin-log.h"
 #include "wfd-plugin-wpasupplicant.h"
 
 #define NETCONFIG_SERVICE                              "net.netconfig"
@@ -137,6 +139,11 @@ ws_string_s ws_group_info_strs[] = {
        {"passphrase", WS_GROUP_INFO_PASS},
        {"go_dev_addr", WS_GROUP_INFO_GO_DEV_ADDR},
        {"status", WS_GROUP_INFO_STATUS},
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
+       {"ip_addr", WS_GROUP_INFO_IP_ADDR},
+       {"ip_mask", WS_GROUP_INFO_IP_MASK},
+       {"go_ip_addr", WS_GROUP_INFO_GO_IP_ADDR},
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
        {"", WS_GROUP_INFO_LIMIT},
 
        };
@@ -1175,7 +1182,7 @@ static int _parsing_wfd_info(char *msg, wfd_oem_display_s *display )
        if (wfd_info & WS_WFD_INFO_SECONDARY_SINK)
                display->type |= WS_WFD_INFO_SECONDARY_SINK;
 
-       display->availability = (wfd_info & WS_WFD_INFO_AVAILABILITY) >> 4;
+       display->availability = (wfd_info & WS_WFD_INFO_AVAILABLITY) >> 4;
        display->hdcp_support = (wfd_info & WS_WFD_INFO_HDCP_SUPPORT) >> 8;
 
        strncpy(ctrl_port_msg, msg+4, 4);
@@ -1588,8 +1595,11 @@ static wfd_oem_group_data_s *_convert_msg_to_group_info(char *msg)
        int info_cnt = 0;
        ws_string_s infos[WS_GROUP_INFO_LIMIT];
        wfd_oem_group_data_s *edata = NULL;
-       int res = 0;
 
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
+       unsigned int addr = 0;
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
+       int res = 0;
        if (!msg) {
                WDP_LOGE("Invalid parameter");
                return NULL;
@@ -1635,6 +1645,26 @@ static wfd_oem_group_data_s *_convert_msg_to_group_info(char *msg)
                        if (res < 0)
                                memset(edata->go_dev_addr, 0x00, OEM_MACADDR_LEN);
                        break;
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
+               case WS_GROUP_INFO_IP_ADDR:
+                       WDP_LOGD("Extracted peer ip = %s", infos[i].string);
+                       res = inet_aton(infos[i].string, (struct in_addr *)&addr);
+                       if(res == 1)
+                               memcpy(&(edata->ip_addr), &addr, sizeof(edata->ip_addr));
+                       break;
+               case WS_GROUP_INFO_IP_MASK:
+                       WDP_LOGD("Extracted ip mask= %s", infos[i].string);
+                       res = inet_aton(infos[i].string, (struct in_addr *)&addr);
+                       if(res == 1)
+                               memcpy(&(edata->ip_addr_mask), &addr, sizeof(edata->ip_addr_mask));
+                       break;
+               case WS_GROUP_INFO_GO_IP_ADDR:
+                       WDP_LOGD("Extracted peer go ip = %s", infos[i].string);
+                       res = inet_aton(infos[i].string, (struct in_addr *)&addr);
+                       if(res == 1)
+                               memcpy(&(edata->ip_addr_go), &addr, sizeof(edata->ip_addr_go));
+                       break;
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
                default:
                        WDP_LOGE("Unknown parameter [%d:%s]", infos[i].index, infos[i].string);
                        break;
@@ -1969,15 +1999,25 @@ static int _parsing_event_info(char *ifname, char *msg, wfd_oem_event_s *data)
                        /* Interface address of connected peer will come up */
                        _ws_txt_to_mac(info_str, data->intf_addr);
 
-                       char *temp_mac = NULL;
-                       res = _extract_value_str(info_str, "p2p_dev_addr", &temp_mac);
+                       char *temp = NULL;
+                       res = _extract_value_str(info_str, "p2p_dev_addr", &temp);
                        if (res < 0) {
                                WDP_LOGE("Failed to extract interface address");
                                break;
                        }
-                       _ws_txt_to_mac(temp_mac, data->dev_addr);
-                       if (temp_mac)
-                               g_free(temp_mac);
+                       _ws_txt_to_mac(temp, data->dev_addr);
+                       if (temp)
+                               free(temp);
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
+                       res = _extract_value_str(info_str, "ip_addr", &temp);
+                       if(res > 0 && temp) {
+                               unsigned int addr = 0;
+                               WDP_LOGD("Extracted peer ip = %s", temp);
+                               res = inet_aton(temp, (struct in_addr *)&addr);
+                               if(res == 1)
+                                       memcpy(&(data->ip_addr_peer), &addr, sizeof(data->ip_addr_peer));
+                       }
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
                        data->edata_type = WFD_OEM_EDATA_TYPE_NONE;
                }
                break;
@@ -2743,6 +2783,91 @@ failed:
        return 1;
 }
 
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
+int _ws_set_default_eapol_over_ip()
+{
+       __WDP_LOG_FUNC_ENTER__;
+
+       ws_sock_data_s *sock = g_pd->common;
+       char cmd[80] = {0, };
+       char reply[1024]={0,};
+       int res;
+
+       if (!sock) {
+               WDP_LOGE("Socket is NULL");
+               return -1;
+       }
+
+       g_snprintf(cmd, sizeof(cmd), WS_CMD_SET "ip_addr_go %s",
+                       DEFAULT_IP_GO);
+
+       res = _ws_send_cmd(sock->ctrl_sock, cmd, (char*) reply, sizeof(reply));
+       if (res < 0) {
+               WDP_LOGE("Failed to send command to wpa_supplicant");
+               __WDP_LOG_FUNC_EXIT__;
+               return -1;
+       }
+
+       if (strstr(reply, "FAIL")) {
+               WDP_LOGE("Failed to set go intent");
+               __WDP_LOG_FUNC_EXIT__;
+               return -1;
+       }
+
+       g_snprintf(cmd, sizeof(cmd), WS_CMD_SET "ip_addr_mask %s",
+                       DEFAULT_IP_MASK);
+
+       res = _ws_send_cmd(sock->ctrl_sock, cmd, (char*) reply, sizeof(reply));
+       if (res < 0) {
+               WDP_LOGE("Failed to send command to wpa_supplicant");
+               __WDP_LOG_FUNC_EXIT__;
+               return -1;
+       }
+
+       if (strstr(reply, "FAIL")) {
+               WDP_LOGE("Failed to set go intent");
+               __WDP_LOG_FUNC_EXIT__;
+               return -1;
+       }
+
+       g_snprintf(cmd, sizeof(cmd), WS_CMD_SET "ip_addr_start %s",
+                       DEFAULT_IP_START);
+
+       res = _ws_send_cmd(sock->ctrl_sock, cmd, (char*) reply, sizeof(reply));
+       if (res < 0) {
+               WDP_LOGE("Failed to send command to wpa_supplicant");
+               __WDP_LOG_FUNC_EXIT__;
+               return -1;
+       }
+
+       if (strstr(reply, "FAIL")) {
+               WDP_LOGE("Failed to set go intent");
+               __WDP_LOG_FUNC_EXIT__;
+               return -1;
+       }
+
+       g_snprintf(cmd, sizeof(cmd), WS_CMD_SET "ip_addr_end %s",
+                       DEFAULT_IP_END);
+
+       res = _ws_send_cmd(sock->ctrl_sock, cmd, (char*) reply, sizeof(reply));
+       if (res < 0) {
+               WDP_LOGE("Failed to send command to wpa_supplicant");
+               __WDP_LOG_FUNC_EXIT__;
+               return -1;
+       }
+
+       if (strstr(reply, "FAIL")) {
+               WDP_LOGE("Failed to set go intent");
+               __WDP_LOG_FUNC_EXIT__;
+               return -1;
+       }
+       WDP_LOGD("Succeeded to set default EAPol over IP");
+
+       __WDP_LOG_FUNC_EXIT__;
+       return 0;
+}
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
+
 int ws_activate(int concurrent)
 {
        __WDP_LOG_FUNC_ENTER__;
@@ -2804,6 +2929,9 @@ int ws_activate(int concurrent)
        g_pd->activated = TRUE;
 
        _ws_update_local_dev_addr();
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
+       _ws_set_default_eapol_over_ip();
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
 
        __WDP_LOG_FUNC_EXIT__;
        return 0;
index ffb67ca..266e790 100755 (executable)
@@ -1620,15 +1620,11 @@ static gboolean wfd_client_process_request(GIOChannel *source,
                        break;
                }
 
-               unsigned char ip_addr[IPADDR_LEN] = {0,};
-
-               res = wfd_util_get_local_ip(ip_addr);
+               res = wfd_local_get_ip_addr(rsp.param2);
                if (res < 0) {
                        WDS_LOGE("Failed to get local IP address");
                        rsp.result = WIFI_DIRECT_ERROR_OPERATION_FAILED;
                }
-               g_snprintf(rsp.param2, IPSTR_LEN, IPSTR, IP2STR(ip_addr));
-               WDS_LOGI("IP addr : [%s]", rsp.param2);
                break;
        case WIFI_DIRECT_CMD_GET_GO_INTENT:     // manager (sync)
                res = wfd_manager_get_go_intent(&rsp.param1);
index 6ac4aee..cc71b10 100644 (file)
@@ -131,8 +131,8 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        return G_SOURCE_REMOVE;
 }
 
- static void __wfd_process_deactivated(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
+static void __wfd_process_deactivated(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
        __WDS_LOG_FUNC_ENTER__;
 
        wifi_direct_client_noti_s noti;
@@ -161,12 +161,12 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        wfd_util_stop_wifi_direct_popup();
 #endif /* TIZEN_FEATURE_DEFAULT_CONNECTION_AGENT */
        __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       return;
+}
 
- static void __wfd_process_peer_found(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_peer_found(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
        wfd_oem_dev_data_s *edata = NULL;
        wifi_direct_client_noti_s noti;
@@ -203,11 +203,11 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        }
 
        __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       return;
+}
 
- static void __wfd_process_peer_disappeared(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
+static void __wfd_process_peer_disappeared(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
        __WDS_LOG_FUNC_ENTER__;
 
        wifi_direct_client_noti_s noti;
@@ -228,10 +228,10 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
 
        __WDS_LOG_FUNC_EXIT__;
        return;
- }
+}
 
- static void __wfd_process_discovery_finished(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
+static void __wfd_process_discovery_finished(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
        __WDS_LOG_FUNC_ENTER__;
 
        wifi_direct_client_noti_s noti;
@@ -269,15 +269,15 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        noti.error = WIFI_DIRECT_ERROR_NONE;
        wfd_client_send_event(manager, &noti);
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_prov_disc_req(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
+static void __wfd_process_prov_disc_req(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
        __WDS_LOG_FUNC_ENTER__;
 
-       wfd_device_s *peer = NULL;
+       wfd_device_s *peer = NULL;
        int res = 0;
 
        if (event == NULL || manager == NULL) {
@@ -328,12 +328,12 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        if (res < 0)
                WDS_LOGE("Failed to process event of session");
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_prov_disc_resp(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
+static void __wfd_process_prov_disc_resp(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
        __WDS_LOG_FUNC_ENTER__;
 
        wfd_device_s *peer = NULL;
@@ -379,13 +379,13 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        if (res < 0)
                WDS_LOGE("Failed to process event of session");
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_prov_disc_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_prov_disc_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
        wfd_session_s *session = NULL;
        wifi_direct_client_noti_s noti;
@@ -446,13 +446,13 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        wfd_oem_start_scan(manager->oem_ops, &param);
        manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
 #endif
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_go_neg_req(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_go_neg_req(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
        wfd_session_s *session = NULL;
        wifi_direct_client_noti_s noti;
@@ -472,6 +472,7 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
 
 #ifdef CTRL_IFACE_DBUS
        wfd_oem_dev_data_s *edata = NULL;
+       int res = 0;
 
        edata = (wfd_oem_dev_data_s*) event->edata;
        if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
@@ -480,7 +481,8 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
                return;
        }
 
-       if (_wfd_event_update_peer(manager, edata) < 0) {
+       res = _wfd_event_update_peer(manager, edata);
+       if (res < 0) {
                WDS_LOGE("Failed to update peer data");
                __WDS_LOG_FUNC_EXIT__;
                return;
@@ -537,13 +539,13 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        } else {
                wfd_session_process_event(manager, event);
        }
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
  static void __wfd_process_go_neg_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
  {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;
 
        wfd_session_s *session = NULL;
        wfd_oem_conn_data_s *edata = NULL;
@@ -575,7 +577,7 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
                WDS_LOGE("Invalid p2p connection data");
                __WDS_LOG_FUNC_EXIT__;
                return;
-        }
+       }
 
        if (edata->status < 0 && session->connecting_120) {
                if (session->retry_gsrc) {
@@ -600,14 +602,13 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        wfd_destroy_group(manager, GROUP_IFNAME);
        wfd_destroy_session(manager);
        manager->local->dev_role = WFD_DEV_ROLE_NONE;
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
-
- static void __wfd_process_go_neg_done(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_go_neg_done(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
 #ifdef CTRL_IFACE_DBUS
        wfd_session_s *session = NULL;
@@ -635,13 +636,13 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        manager->local->dev_role = event->dev_role;
        wfd_session_process_event(manager, event);
 #endif /* CTRL_IFACE_DBUS */
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_wps_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_wps_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
        wfd_session_s *session = NULL;
        wifi_direct_client_noti_s noti;
@@ -702,9 +703,9 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        wfd_oem_start_scan(manager->oem_ops, &param);
        manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
 #endif
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
  static void __wfd_process_wps_done(wfd_manager_s *manager, wfd_oem_event_s *event)
  {
@@ -713,12 +714,12 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        wfd_session_process_event(manager, event);
 
        __WDS_LOG_FUNC_EXIT__;
-       return;
+       return;
  }
 
- static void __wfd_process_key_neg_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-        __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_key_neg_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
        wfd_session_s *session = NULL;
        wifi_direct_client_noti_s noti;
@@ -779,37 +780,37 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        wfd_oem_start_scan(manager->oem_ops, &param);
        manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
 #endif
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_key_neg_done(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_key_neg_done(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_conn_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_conn_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_conn_done(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_conn_done(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_group_created(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_group_created(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
        wfd_group_s *group = NULL;
        wfd_session_s *session = NULL;
@@ -868,12 +869,30 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
 
        memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
        if (group->role == WFD_DEV_ROLE_GC && session) {
-#ifdef CTRL_IFACE_DBUS
-               if(session->peer && session->peer->ip_type == WFD_IP_TYPE_OVER_EAPOL)
-                       wfd_util_ip_over_eap_assign(session->peer, event->ifname);
-#else /* CTRL_IFACE_DBUS */
-               wfd_destroy_session(manager);
-#endif /* CTRL_IFACE_DBUS */
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
+               wfd_device_s *peer = session->peer;
+               if(peer == NULL) {
+                       WDS_LOGE("Unexpected event. Peer doesn't exist");
+                       return;
+               }
+
+               wfd_update_peer(manager, peer);
+
+               if(peer->ip_type == WFD_IP_TYPE_OVER_EAPOL) {
+
+                       wfd_util_ip_over_eap_assign(peer, event->ifname);
+
+                       noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+                       noti.error = WIFI_DIRECT_ERROR_NONE;
+                       snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
+                       wfd_client_send_event(manager, &noti);
+
+                       wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTED);
+                       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTED);
+
+                       wfd_destroy_session(manager);
+               }
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
                wfd_peer_clear_all(manager);
        } else {
                if (group->flags & WFD_GROUP_FLAG_AUTONOMOUS) {
@@ -883,14 +902,13 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
                        wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
                }
        }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
-
- static void __wfd_process_group_destroyed(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_group_destroyed(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
        wifi_direct_client_noti_s noti;
 
@@ -931,13 +949,13 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        wfd_destroy_session(manager);
        manager->local->dev_role = WFD_DEV_ROLE_NONE;
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_invitation_req(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_invitation_req(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
        wfd_device_s *peer = NULL;
        wfd_session_s *session = NULL;
@@ -992,26 +1010,26 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        snprintf(noti.param1, sizeof(noti.param1), MACSTR, MAC2STR(event->dev_addr));
        wfd_client_send_event(manager, &noti);
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_invitation_res(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_invitation_res(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
        __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       return;
+}
 
- static void __wfd_process_sta_connected(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_sta_connected(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
-       wfd_session_s *session = NULL;
-       wfd_device_s *peer = NULL;
-       wfd_group_s *group = NULL;
-       wifi_direct_client_noti_s noti;
+       wfd_session_s *session = NULL;
+       wfd_device_s *peer = NULL;
+       wfd_group_s *group = NULL;
+       wifi_direct_client_noti_s noti;
 
        if (event == NULL || manager == NULL) {
                WDS_LOGE("Invalid parameter");
@@ -1073,6 +1091,8 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
        wfd_client_send_event(manager, &noti);
 #ifdef CTRL_IFACE_DBUS
        wfd_update_peer(manager, peer);
+#endif /* CTRL_IFACE_DBUS */
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
        if (event->ip_addr_peer[3]) {
                peer->ip_type = WFD_IP_TYPE_OVER_EAPOL;
                memcpy(peer->client_ip_addr, event->ip_addr_peer, IPADDR_LEN);
@@ -1080,20 +1100,28 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
                memcpy(peer->go_ip_addr, manager->local->ip_addr, IPADDR_LEN);
                WDS_LOGE("Peer's GO IP [" IPSTR "]", IP2STR((char*) &peer->go_ip_addr));
        }
-       if(peer->ip_type == WFD_IP_TYPE_OVER_EAPOL)
-               wfd_util_ip_over_eap_lease(peer);
-       else
-#endif /* CTRL_IFACE_DBUS */
+       if(peer->ip_type == WFD_IP_TYPE_OVER_EAPOL) {
+               memcpy(peer->ip_addr, peer->client_ip_addr, IPADDR_LEN);
+
+               wifi_direct_client_noti_s noti;
+               memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
+               noti.event = WIFI_DIRECT_CLI_EVENT_IP_LEASED_IND;
+               noti.error = WIFI_DIRECT_ERROR_NONE;
+               snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
+               snprintf(noti.param2, IPSTR_LEN, IPSTR, IP2STR(peer->ip_addr));
+               wfd_client_send_event(manager, &noti);
+       } else
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
        wfd_util_dhcps_wait_ip_leased(peer);
        wfd_destroy_session(manager);
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_sta_disconnected(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_sta_disconnected(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
        wfd_group_s *group = NULL;
        wfd_device_s *peer = NULL;
@@ -1361,15 +1389,16 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
 
  static void __wfd_process_terminating(wfd_manager_s *manager, wfd_oem_event_s *event)
  {
-       __WDS_LOG_FUNC_ENTER__;
+       __WDS_LOG_FUNC_ENTER__;
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
+       __WDS_LOG_FUNC_EXIT__;
+       return;
  }
+
 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
- static void __wfd_process_serv_disc_resp(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_serv_disc_resp(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
        wifi_direct_client_noti_s noti;
 
@@ -1427,17 +1456,17 @@ next:
                wfd_client_send_event(manager, &noti);
        }
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 
- static void __wfd_process_serv_disc_started(wfd_manager_s *manager, wfd_oem_event_s *event)
- {
-       __WDS_LOG_FUNC_ENTER__;
+static void __wfd_process_serv_disc_started(wfd_manager_s *manager, wfd_oem_event_s *event)
+{
+       __WDS_LOG_FUNC_ENTER__;
 
-       __WDS_LOG_FUNC_EXIT__;
-       return;
- }
+       __WDS_LOG_FUNC_EXIT__;
+       return;
+}
 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
 
 static struct {
index 1789eee..fb5b98f 100755 (executable)
@@ -191,24 +191,26 @@ int wfd_group_complete(void *data, wfd_oem_event_s *group_info)
                wfd_util_dhcps_start();
                WDS_LOGD("Role is Group Owner. DHCP Server started");
        } else {
-#ifdef CTRL_IFACE_DBUS
+               if(!peer) {
+                       WDS_LOGE("Peer is not in the session");
+                       return -1;
+               }
                WDS_LOGD("Role is Group Client.complete session and add peer to member");
-               if (peer) {
-                       memcpy(peer->intf_addr, group->go_dev_addr, MACADDR_LEN);
-                       wfd_group_add_member(group, peer->dev_addr);
-                       session->state = SESSION_STATE_COMPLETED;
-                       /* memcpy(peer->intf_addr, event->intf_addr, MACADDR_LEN); */
-                       peer->state = WFD_PEER_STATE_CONNECTED;
-                       if(edata->ip_addr[3] && edata->ip_addr_go[3]) {
-                               peer->ip_type = WFD_IP_TYPE_OVER_EAPOL;
-                               memcpy(peer->client_ip_addr, edata->ip_addr, IPADDR_LEN);
-                               WDS_LOGE("Peer's client IP [" IPSTR "]", IP2STR((char*) &peer->client_ip_addr));
-                               memcpy(peer->go_ip_addr, edata->ip_addr_go, IPADDR_LEN);
-                               WDS_LOGE("Peer's GO IP [" IPSTR "]", IP2STR((char*) &peer->go_ip_addr));
-                       }
+               memcpy(peer->intf_addr, group->go_dev_addr, MACADDR_LEN);
+               wfd_group_add_member(group, peer->dev_addr);
+               session->state = SESSION_STATE_COMPLETED;
+               /* memcpy(peer->intf_addr, event->intf_addr, MACADDR_LEN); */
+               peer->state = WFD_PEER_STATE_CONNECTED;
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
+               if(edata->ip_addr[3] && edata->ip_addr_go[3]) {
+                       peer->ip_type = WFD_IP_TYPE_OVER_EAPOL;
+                       memcpy(peer->client_ip_addr, edata->ip_addr, IPADDR_LEN);
+                       WDS_LOGE("Peer's client IP [" IPSTR "]", IP2STR((char*) &peer->client_ip_addr));
+                       memcpy(peer->go_ip_addr, edata->ip_addr_go, IPADDR_LEN);
+                       WDS_LOGE("Peer's GO IP [" IPSTR "]", IP2STR((char*) &peer->go_ip_addr));
                }
-               if(peer && peer->ip_type != WFD_IP_TYPE_OVER_EAPOL)
-#endif /* CTRL_IFACE_DBUS */
+               if(peer->ip_type != WFD_IP_TYPE_OVER_EAPOL)
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
                wfd_util_dhcpc_start(peer);
        }
 
index 018d792..d8e2bec 100755 (executable)
@@ -34,6 +34,7 @@
 
 #include <glib.h>
 #include <glib-object.h>
+
 #include <wifi-direct.h>
 
 #include "wifi-direct-ipc.h"
index a1f6c23..23db0e0 100755 (executable)
@@ -2,7 +2,9 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
+
 #include <glib.h>
+
 #include <wifi-direct.h>
 
 #include "wifi-direct-ipc.h"
index 0a4b084..5f4b373 100755 (executable)
@@ -60,7 +60,7 @@
 #include "wifi-direct-session.h"
 #endif /* CTRL_IFACE_DBUS */
 
-#ifdef CTRL_IFACE_DBUS
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
 #include <linux/unistd.h>
 #include <asm/types.h>
 #include <linux/netlink.h>
 #include <netlink/netlink.h>
 #include <netlink/socket.h>
 #include <netlink/route/neighbour.h>
-#endif /* CTRL_IFACE_DBUS */
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */
+
+#define TIZEN_P2P_GO_IPADDR "192.168.49.1"
+#define MAX_SIZE_ERROR_BUFFER 256
 
 static int _txt_to_mac(char *txt, unsigned char *mac)
 {
@@ -790,6 +793,7 @@ int wfd_util_dhcps_start()
        const char *path = "/usr/bin/wifi-direct-dhcp.sh";
        char *const args[] = { "/usr/bin/wifi-direct-dhcp.sh", "server", NULL };
        char *const envs[] = { NULL };
+       wfd_manager_s *manager = wfd_get_manager();
 
        vconf_set_int(VCONFKEY_DHCPS_IP_LEASE, 0);
 
@@ -811,6 +815,8 @@ int wfd_util_dhcps_start()
 
        WDS_LOGD("Successfully started wifi-direct-dhcp.sh server");
 
+       _txt_to_ip(TIZEN_P2P_GO_IPADDR, manager->local->ip_addr);
+
        __WDS_LOG_FUNC_EXIT__;
        return 0;
 }
@@ -985,46 +991,7 @@ int wfd_util_dhcpc_get_server_ip(unsigned char* ip_addr)
        return 0;
 }
 
-int wfd_util_get_local_ip(unsigned char* ip_addr)
-{
-       __WDS_LOG_FUNC_ENTER__;
-       char* get_str = NULL;
-       int count = 0;
-
-       if (!ip_addr) {
-               WDS_LOGE("Invalid parameter");
-               __WDS_LOG_FUNC_EXIT__;
-               return -1;
-       }
-
-       while(count < 10) {
-               get_str = vconf_get_str(VCONFKEY_LOCAL_IP);
-               if (!get_str) {
-                       WDS_LOGE("Failed to get vconf value[%s]", VCONFKEY_LOCAL_IP);
-                       __WDS_LOG_FUNC_EXIT__;
-                       return -1;
-               }
-
-               if(strcmp(get_str, ZEROIP) == 0) {
-                       WDS_LOGE("Failed to get vconf value[%s]", VCONFKEY_LOCAL_IP);
-                       g_free(get_str);
-                       __WDS_LOG_FUNC_EXIT__;
-                       return -1;
-               }
-
-               WDS_LOGD("VCONFKEY_DHCPC_SERVER_IP(%s) : %s\n", VCONFKEY_LOCAL_IP, get_str);
-               _txt_to_ip(get_str, ip_addr);
-               g_free(get_str);
-               if (*ip_addr)
-                       break;
-               count++;
-       }
-
-       __WDS_LOG_FUNC_EXIT__;
-       return 0;
-}
-
-#ifdef CTRL_IFACE_DBUS
+#ifdef TIZEN_FEATURE_IP_OVER_EAPOL
 static int _wfd_util_set_vconf_for_static_ip(const char *ifname, char *static_ip)
 {
        __WDS_LOG_FUNC_ENTER__;
@@ -1142,7 +1109,28 @@ static int _wfd_util_static_ip_set(const char *ifname, unsigned char *static_ip)
        return res;
 }
 
-#ifdef TIZEN_VENDOR_ATH
+int wfd_util_ip_over_eap_assign(wfd_device_s *peer, const char *ifname)
+{
+       __WDS_LOG_FUNC_ENTER__;
+
+       char ip_str[IPSTR_LEN] = {0, };
+
+       if (!peer) {
+               WDS_LOGE("Invalid paramater");
+               return -1;
+       }
+
+       _wfd_util_static_ip_set(ifname, peer->client_ip_addr);
+       memcpy(peer->ip_addr, peer->go_ip_addr, IPADDR_LEN);
+
+       g_snprintf(ip_str, IPSTR_LEN, IPSTR, IP2STR(peer->ip_addr));
+       _connect_remote_device(ip_str);
+
+       __WDS_LOG_FUNC_EXIT__;
+       return 0;
+}
+
+#ifdef TIZEN_WLAN_BOARD_SPRD
 int wfd_util_static_ip_unset(const char *ifname)
 {
        __WDS_LOG_FUNC_ENTER__;
@@ -1169,7 +1157,7 @@ int wfd_util_static_ip_unset(const char *ifname)
                return -1;
        }
 
-       res = wfd_util_dhcpc_get_ip(ifname, ip_addr, 0);
+       res = wfd_util_dhcpc_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__;
@@ -1240,62 +1228,5 @@ int wfd_util_static_ip_unset(const char *ifname)
        __WDS_LOG_FUNC_EXIT__;
        return res;
 }
-#endif /* TIZEN_VENDOR_ATH */
-
-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();
-       char ip_str[IPSTR_LEN] = {0, };
-       if (!peer) {
-               WDS_LOGE("Invalid paramater");
-               return -1;
-       }
-
-       _wfd_util_static_ip_set(ifname, peer->client_ip_addr);
-       memcpy(peer->ip_addr, peer->go_ip_addr, IPADDR_LEN);
-
-       wfd_destroy_session(manager);
-
-       g_snprintf(ip_str, IPSTR_LEN, IPSTR, IP2STR(peer->ip_addr));
-       _connect_remote_device(ip_str);
-
-       wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTED);
-       wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_CONNECTED);
-
-       wifi_direct_client_noti_s noti;
-       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-       noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
-       noti.error = WIFI_DIRECT_ERROR_NONE;
-       snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
-       wfd_client_send_event(manager, &noti);
-
-       __WDS_LOG_FUNC_EXIT__;
-       return 0;
-}
-
-int wfd_util_ip_over_eap_lease(wfd_device_s *peer)
-{
-       __WDS_LOG_FUNC_ENTER__;
-       wfd_manager_s *manager = wfd_get_manager();
-       wfd_group_s *group = (wfd_group_s*)manager->group;
-
-       if (!peer || !group) {
-               WDS_LOGE("Invalid paramater");
-               return -1;
-       }
-
-       memcpy(peer->ip_addr, peer->client_ip_addr, IPADDR_LEN);
-
-       wifi_direct_client_noti_s noti;
-       memset(&noti, 0x0, sizeof(wifi_direct_client_noti_s));
-       noti.event = WIFI_DIRECT_CLI_EVENT_IP_LEASED_IND;
-       noti.error = WIFI_DIRECT_ERROR_NONE;
-       snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
-       snprintf(noti.param2, IPSTR_LEN, IPSTR, IP2STR(peer->ip_addr));
-       wfd_client_send_event(manager, &noti);
-
-       __WDS_LOG_FUNC_EXIT__;
-       return 0;
-}
-#endif /* CTRL_IFACE_DBUS */
+#endif /* TIZEN_WLAN_BOARD_SPRD */
+#endif /* TIZEN_FEATURE_IP_OVER_EAPOL */