Bug fix(N_SE-21973)
authorKim Gibyoung <lastkgb.kim@samsung.com>
Mon, 21 Jan 2013 10:23:06 +0000 (19:23 +0900)
committerKim Gibyoung <lastkgb.kim@samsung.com>
Wed, 23 Jan 2013 05:00:43 +0000 (14:00 +0900)
WPS PIN feature is added for GO

Change-Id: I0deb3676dc4810aece487380aad14918cab66393

12 files changed:
debian/changelog
oem/include/wifi-direct-oem.h
oem/wifi-direct-oem.c
packaging/wifi-direct-manager.spec
plugin/wpasupplicant/include/wifi-direct-wpasupplicant.h
plugin/wpasupplicant/src/wifi-direct-plugin.c
src/include/wifi-direct-service.h
src/wifi-direct-client-handler.c
src/wifi-direct-dhcp.c
src/wifi-direct-event-handler.c
src/wifi-direct-main.c
src/wifi-direct-stub.c

index 7086b24..08157f1 100644 (file)
@@ -1,3 +1,12 @@
+wfi-direct-manager (0.5.7) precise; urgency=low
+
+  * Fix bug(N_SE-21973)
+  * Add WPS PIN feature for GO
+  * Git : framework/connectivity/wifi-direct-manager
+  * Tag : wifi-direct-manager_0.5.7
+
+ -- Gibyoung Kim <lastkgb.kim@samsung.com>  Mon, 21 Jan 2013 17:40:19 +0900
+
 wfi-direct-manager (0.5.6) precise; urgency=low
 
   * Add License files.
index fcdf0f1..4270598 100755 (executable)
@@ -30,7 +30,8 @@ int wfd_oem_destroy(void);
 int wfd_oem_activate(void);
 int wfd_oem_deactivate(void);
 int wfd_oem_connect(unsigned char mac_addr[6], wifi_direct_wps_type_e wps_config);
-int wfd_ws_wps_pbc_start(void);
+int wfd_oem_wps_pbc_start(void);
+int wfd_oem_wps_pin_start(unsigned char mac_addr[6]);
 int wfd_oem_disconnect(void);
 int wfd_oem_disconnect_sta(unsigned char mac_addr[6]); 
 bool wfd_oem_is_discovery_enabled(void);
@@ -79,6 +80,7 @@ struct wfd_oem_operations {
        int (*wfd_oem_deactivate)(void);
        int (*wfd_oem_connect)(unsigned char mac_addr[6], wifi_direct_wps_type_e wps_config);
        int (*wfd_oem_wps_pbc_start)(void);
+       int (*wfd_oem_wps_pin_start)(unsigned char mac_addr[6]);
        int (*wfd_oem_disconnect)(void);
        int (*wfd_oem_disconnect_sta)(unsigned char mac_addr[6]);
        bool (*wfd_oem_is_discovery_enabled)(void);
index 721fd99..1d0270b 100644 (file)
@@ -94,6 +94,17 @@ int wfd_oem_wps_pbc_start()
        return (g_ops->wfd_oem_wps_pbc_start());
 }
 
+int wfd_oem_wps_pin_start(unsigned char mac_addr[6])
+{
+       if (NULL == g_ops->wfd_oem_wps_pin_start)
+       {
+               WDS_LOGE( "g_ops->wfd_oem_wps_pin_start is NULL!!\n");
+               return false;
+       }
+
+       return (g_ops->wfd_oem_wps_pin_start(mac_addr));
+}
+
 int wfd_oem_disconnect()
 {
        if (NULL == g_ops->wfd_oem_disconnect)
index 098d4c9..8c9b4a1 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       wifi-direct-manager
 Summary:    Wi-Fi Direct manger
-Version:    0.5.6
+Version:    0.5.7
 Release:    1
 Group:      TO_BE_FILLED
 License:    Samsung Proprietary License
index 7ae1b7b..1455ce0 100644 (file)
@@ -123,6 +123,7 @@ typedef void (*wfd_noti_cb) (int event_type);
 #define CMD_DISPLAY_STRING "display"
 #define CMD_KEYPAD_STRING "keypad"
 #define CMD_WPS_PUSHBUTTON_START "WPS_PBC"
+#define CMD_WPS_WPS_PIN_START "WPS_PIN"
 #define CMD_GET_PEER_INFO "P2P_PEER"
 #define CMD_SET_PARAM "SET"
 #define CMD_GET_PARAM "GET"
@@ -278,6 +279,9 @@ typedef enum {
        WS_EVENT_PROVISION_DISCOVERY_DISPLAY,
        WS_EVENT_PROVISION_DISCOVERY_KEYPAD,
 
+       WS_EVENT_GROUP_FORMATION_SUCCESS,
+       WS_EVENT_GROUP_FORMATION_FAILURE,
+
        WS_EVENT_GROUP_STARTED,
        WS_EVENT_PERSISTENT_GROUP_STARTED,
        WS_EVENT_GROUP_REMOVED,
@@ -314,6 +318,9 @@ ws_event_id_s g_ws_event_info[] =
        {"P2P-PROV-DISC-SHOW-PIN", WS_EVENT_PROVISION_DISCOVERY_DISPLAY},
        {"P2P-PROV-DISC-ENTER-PIN", WS_EVENT_PROVISION_DISCOVERY_KEYPAD},
 
+       {"P2P-GROUP-FORMATION-SUCCESS", WS_EVENT_GROUP_FORMATION_SUCCESS},
+       {"P2P-GROUP-FORMATION-FAILURE", WS_EVENT_GROUP_FORMATION_FAILURE},
+
        // connection
        {"P2P-GROUP-STARTED", WS_EVENT_GROUP_STARTED},
        {"P2P-GROUP-REMOVED", WS_EVENT_GROUP_REMOVED},
@@ -375,6 +382,8 @@ int wfd_ws_deactivate();
 int wfd_ws_connect(unsigned char mac_addr[6], wifi_direct_wps_type_e wps_config);
 int wfd_ws_disconnect();
 int wfd_ws_disconnect_sta(unsigned char mac_addr[6]);
+int wfd_ws_wps_pbc_start();
+int wfd_ws_wps_pin_start(unsigned char peer_addr[6]);
 bool wfd_ws_is_discovery_enabled();
 int wfd_ws_start_discovery(bool listen_only, int timeout);
 int wfd_ws_cancel_discovery();
index 829c335..4acb234 100644 (file)
@@ -51,7 +51,7 @@ GList *g_conn_peer_addr;
 static unsigned char g_assoc_sta_mac[6];
 static unsigned char g_disassoc_sta_mac[6];
 char g_wps_pin[9];
-int g_current_conn_direction;
+static nt g_pin_event_block;
 
 enum current_conn_direction
 {
@@ -68,6 +68,7 @@ static struct wfd_oem_operations supplicant_ops =
        .wfd_oem_deactivate = wfd_ws_deactivate,
        .wfd_oem_connect = wfd_ws_connect,
        .wfd_oem_wps_pbc_start = wfd_ws_wps_pbc_start,
+       .wfd_oem_wps_pin_start = wfd_ws_wps_pin_start,
        .wfd_oem_disconnect = wfd_ws_disconnect,
        .wfd_oem_disconnect_sta = wfd_ws_disconnect_sta,
        .wfd_oem_is_discovery_enabled = wfd_ws_is_discovery_enabled,
@@ -964,8 +965,14 @@ void __parsing_ws_event(char* buf, ws_event_s *event)
                        WDP_LOGD( "WS EVENT : [MAC : %s]\n", event_str);
                break;
 
+               case WS_EVENT_GROUP_FORMATION_SUCCESS:
+               case WS_EVENT_GROUP_FORMATION_FAILURE:
+                       g_pin_event_block = 0;
+               break;
 
                case WS_EVENT_GROUP_STARTED:
+                       if (g_pin_event_block)
+                               g_pin_event_block = 0;
                        event->id = WS_EVENT_GROUP_STARTED;
                        WDP_LOGD( "WS EVENT : [WS_EVENT_GROUP_STARTED]\n");
                        {
@@ -1119,8 +1126,6 @@ void __parsing_ws_event(char* buf, ws_event_s *event)
                                ptr = __get_event_str(ptr + 19, event_str);
                                strncpy(event->peer_intf_mac_address, event_str, sizeof(event->peer_intf_mac_address));
 
-                               if (wfd_server->config_data.wps_config == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD)
-                                       wfd_ws_connect_for_go_neg(g_incomming_peer_mac_address, wfd_server->config_data.wps_config);
                        }
                break;
                
@@ -1494,6 +1499,10 @@ static gboolean __ws_event_callback(GIOChannel * source,
 
                case WS_EVENT_PROVISION_DISCOVERY_RESPONSE_DISPLAY:
                {
+                       if (g_pin_event_block)
+                               break;
+
+                       g_pin_event_block = 1;
                        unsigned char la_mac_addr[6];
                        wfd_macaddr_atoe(event.peer_mac_address, la_mac_addr);
                        memset(g_incomming_peer_mac_address, 0, sizeof(g_incomming_peer_mac_address));
@@ -1507,6 +1516,10 @@ static gboolean __ws_event_callback(GIOChannel * source,
 
                case WS_EVENT_PROVISION_DISCOVERY_RESPONSE_KEYPAD:
                {
+                       if (g_pin_event_block)
+                               break;
+
+                       g_pin_event_block = 1;
                        unsigned char la_mac_addr[6];
                        wfd_macaddr_atoe(event.peer_mac_address, la_mac_addr);
                        memset(g_incomming_peer_mac_address, 0, sizeof(g_incomming_peer_mac_address));
@@ -1520,7 +1533,10 @@ static gboolean __ws_event_callback(GIOChannel * source,
                case WS_EVENT_PROVISION_DISCOVERY_DISPLAY:
                case WS_EVENT_PROVISION_DISCOVERY_KEYPAD:
                {
-                       g_current_conn_direction = CONN_DIRECTION_INCOMING;
+                       if (g_pin_event_block)
+                               break;
+
+                       g_pin_event_block = 1;
                        WDP_LOGD("Incomming PROV_DISC [%d]", event.id);
                        unsigned char la_mac_addr[6];
                        wfd_macaddr_atoe(event.peer_mac_address, la_mac_addr);
@@ -1639,6 +1655,8 @@ static gboolean __ws_event_callback(GIOChannel * source,
 
                case WS_EVENT_STA_CONNECTED:
                        {
+                               if (g_pin_event_block)
+                                       g_pin_event_block = 0;
                                GList *element = NULL;
                                element = g_list_find_custom(g_conn_peer_addr, event.peer_mac_address, glist_compare_peer_mac_cb);
                                if(element  == NULL)
@@ -2131,6 +2149,8 @@ int wfd_ws_deactivate()
        int res_buffer_len=sizeof(res_buffer);
        int result = 0;
 
+       g_pin_event_block = 0;
+
        // stop p2p_find
        wfd_ws_cancel_discovery();
 
@@ -2229,7 +2249,7 @@ int wfd_ws_wps_pbc_start(void)
        return true;
 }
 
-int wfd_ws_connect(unsigned char mac_addr[6], wifi_direct_wps_type_e wps_config)
+int wfd_ws_wps_pin_start(unsigned char peer_addr[6])
 {
        __WDP_LOG_FUNC_ENTER__;
 
@@ -2240,6 +2260,41 @@ int wfd_ws_connect(unsigned char mac_addr[6], wifi_direct_wps_type_e wps_config)
        int res_buffer_len = sizeof(res_buffer);
        int result;
 
+       snprintf(mac_str, 18, MACSTR, MAC2STR(peer_addr));
+       snprintf(cmd, sizeof(cmd),"%s %s %s", CMD_WPS_WPS_PIN_START, mac_str, g_wps_pin);
+       result = __send_wpa_request(g_control_sockfd, cmd, (char*)res_buffer, res_buffer_len);
+       WDP_LOGD( "__send_wpa_request(WPS_PIN) result=[%d]\n", result);
+       if (result < 0)
+       {
+               WDP_LOGE( "__send_wpa_request FAILED!!\n");
+               __WDP_LOG_FUNC_EXIT__;
+               return false;
+       }
+
+       if ( (result == 0) || (strncmp(res_buffer, "FAIL", 4) == 0))
+       {
+               __WDP_LOG_FUNC_EXIT__;
+               return false;
+       }
+
+       WDP_LOGD( "start WPS PBC...\n");
+
+
+       __WDP_LOG_FUNC_EXIT__;
+       return true;
+}
+
+int wfd_ws_connect(unsigned char mac_addr[6], wifi_direct_wps_type_e wps_config)
+{
+       __WDP_LOG_FUNC_ENTER__;
+
+       char cmd[64] = {0, };
+       char mac_str[18] = {0, };
+       char wps_str[8] = {0, };
+       char res_buffer[1024]={0,};
+       int res_buffer_len = sizeof(res_buffer);
+       int result;
+
        wfd_server_control_t * wfd_server = wfd_server_get_control();
        WDP_LOGD( "wfd_server->current_peer.is_group_owner=[%d]\n", wfd_server->current_peer.is_group_owner);
 
@@ -2253,7 +2308,11 @@ int wfd_ws_connect(unsigned char mac_addr[6], wifi_direct_wps_type_e wps_config)
        if (wfd_server->current_peer.is_group_owner)
        {
                snprintf(mac_str, 18, MACSTR, MAC2STR(mac_addr));
-               snprintf(cmd, sizeof(cmd),"%s %s %s join", CMD_CONNECT, mac_str, __convert_wps_config_methods_value(wps_config));
+               if (wps_config == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD || 
+                       wps_config == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY)
+                       snprintf(cmd, sizeof(cmd),"%s %s %s join", CMD_CONNECT, mac_str, g_wps_pin);
+               else
+                       snprintf(cmd, sizeof(cmd),"%s %s %s join", CMD_CONNECT, mac_str, __convert_wps_config_methods_value(wps_config));
                result = __send_wpa_request(g_control_sockfd, cmd, (char*)res_buffer, res_buffer_len);
                WDP_LOGD( "__send_wpa_request(CMD_CONNECT join) result=[%d]\n", result);
        }
@@ -2267,16 +2326,10 @@ int wfd_ws_connect(unsigned char mac_addr[6], wifi_direct_wps_type_e wps_config)
                        snprintf(cmd, sizeof(cmd), "%s %s %s", CMD_CONNECT, mac_str, CMD_PBC_STRING);
                } else if (wps_config == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY) {
                        WDP_LOGD("WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY");
-                       if (g_current_conn_direction == CONN_DIRECTION_OUTGOING)
-                               snprintf(cmd, sizeof(cmd), "%s %s %s %s", CMD_CONNECT, mac_str, g_wps_pin, CMD_KEYPAD_STRING);
-                       else
-                               snprintf(cmd, sizeof(cmd), "%s %s %s %s", CMD_CONNECT, mac_str, g_wps_pin, CMD_DISPLAY_STRING);
+                       snprintf(cmd, sizeof(cmd), "%s %s %s %s", CMD_CONNECT, mac_str, g_wps_pin, CMD_DISPLAY_STRING);
                } else if (wps_config == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) {
                        WDP_LOGD("WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD");
-                       if (g_current_conn_direction == CONN_DIRECTION_OUTGOING)
-                               snprintf(cmd, sizeof(cmd), "%s %s %s %s", CMD_CONNECT, mac_str, g_wps_pin, CMD_DISPLAY_STRING);
-                       else
-                               snprintf(cmd, sizeof(cmd), "%s %s %s %s", CMD_CONNECT, mac_str, g_wps_pin, CMD_KEYPAD_STRING);
+                       snprintf(cmd, sizeof(cmd), "%s %s %s %s", CMD_CONNECT, mac_str, g_wps_pin, CMD_KEYPAD_STRING);
                } else {
                        WDP_LOGD( "UNKNOWN CONFIG METHOD\n");
                        return false;
@@ -2310,7 +2363,7 @@ int wfd_ws_connect_for_go_neg(unsigned char mac_addr[6],
                wifi_direct_wps_type_e wps_config)
 {
        __WDP_LOG_FUNC_ENTER__;
-       char cmd[50] = {0, };
+       char cmd[64] = {0, };
        char mac_str[18] = {0, };
        char res_buffer[1024]={0,};
        int res_buffer_len = sizeof(res_buffer);
@@ -2318,9 +2371,7 @@ int wfd_ws_connect_for_go_neg(unsigned char mac_addr[6],
 
        WDP_LOGD( "CONNECT REQUEST FOR GO NEGOTIATION");
        snprintf(mac_str, 18, MACSTR, MAC2STR(mac_addr));
-#if 0
-       snprintf(cmd, sizeof(cmd), "%s %s %s", CMD_CONNECT, mac_str,
-                               g_wps_pin);
+       snprintf(cmd, sizeof(cmd), "%s %s %s %s", CMD_CONNECT, mac_str, g_wps_pin, __convert_wps_config_methods_value(wps_config));
 
        if (wps_config == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD ||
                        wps_config == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY) {
@@ -2329,24 +2380,7 @@ int wfd_ws_connect_for_go_neg(unsigned char mac_addr[6],
                WDP_LOGE( "Not expected CONFIG METHOD\n");
                return false;
        }
-#else
-       if (wps_config == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY) {
-               WDP_LOGD("WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY");
-               if (g_current_conn_direction == CONN_DIRECTION_OUTGOING)
-                       snprintf(cmd, sizeof(cmd), "%s %s %s %s", CMD_CONNECT, mac_str, g_wps_pin, CMD_KEYPAD_STRING);
-               else
-                       snprintf(cmd, sizeof(cmd), "%s %s %s %s", CMD_CONNECT, mac_str, g_wps_pin, CMD_DISPLAY_STRING);
-       } else if (wps_config == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) {
-               WDP_LOGD("WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD");
-               if (g_current_conn_direction == CONN_DIRECTION_OUTGOING)
-                       snprintf(cmd, sizeof(cmd), "%s %s %s %s", CMD_CONNECT, mac_str, g_wps_pin, CMD_DISPLAY_STRING);
-               else
-                       snprintf(cmd, sizeof(cmd), "%s %s %s %s", CMD_CONNECT, mac_str, g_wps_pin, CMD_KEYPAD_STRING);
-       } else {
-               WDP_LOGD( "Unexpexted CONFIG METHOD\n");
-               return false;
-       }
-#endif
+
        WDP_LOGD( "COMMAND = [%s]****\n", cmd);
        result = __send_wpa_request(g_control_sockfd, cmd, (char*)res_buffer,
                        res_buffer_len);
@@ -2369,7 +2403,7 @@ int wfd_ws_connect_for_persistent_group(unsigned char mac_addr[6], wifi_direct_w
 {
        __WDP_LOG_FUNC_ENTER__;
 
-       char cmd[50] = {0, };
+       char cmd[64] = {0, };
        char mac_str[18] = {0, };
        char res_buffer[1024]={0,};
        int res_buffer_len = sizeof(res_buffer);
@@ -2503,6 +2537,8 @@ int wfd_ws_disconnect()
        int res_buffer_len = sizeof(res_buffer);
        int result;
 
+       g_pin_event_block = 0;
+
        snprintf(cmd, sizeof(cmd), "%s %s", CMD_GROUP_REMOVE, DEFAULT_IF_NAME);
        result = __send_wpa_request(g_control_sockfd, cmd, (char*)res_buffer, res_buffer_len);
        WDP_LOGD( "__send_wpa_request(P2P_GROUP_REMOVE) result=[%d]\n", result);
@@ -2550,33 +2586,35 @@ bool wfd_ws_is_discovery_enabled()
 
 bool wfd_ws_flush()
 {
-        __WDP_LOG_FUNC_ENTER__;
-
-        char cmd[16] = {0, };
-        char res_buffer[1024]={0,};
-        int res_buffer_len=sizeof(res_buffer);
-        int result = 0;
-
-        // Skip checking result..
-        strncpy(cmd, CMD_FLUSH, sizeof(cmd));
-        result = __send_wpa_request(g_control_sockfd, cmd, (char*)res_buffer, res_buffer_len);
-        WDP_LOGD( "__send_wpa_request(P2P_FLUSH) result=[%d]\n", result);
-
-        if (result < 0)
-        {
-                WDP_LOGE( "__send_wpa_request FAILED!!\n");
-                __WDP_LOG_FUNC_EXIT__;
-                return false;
-        }
-
-        if ( (result == 0) || (strncmp(res_buffer, "FAIL", 4) == 0))
-        {
-                __WDP_LOG_FUNC_EXIT__;
-                return false;
-        }
-
-        __WDP_LOG_FUNC_EXIT__;
-        return true;
+       __WDP_LOG_FUNC_ENTER__;
+
+       char cmd[16] = {0, };
+       char res_buffer[1024]={0,};
+       int res_buffer_len=sizeof(res_buffer);
+       int result = 0;
+
+       g_pin_event_block = 0;
+
+       // Skip checking result..
+       strncpy(cmd, CMD_FLUSH, sizeof(cmd));
+       result = __send_wpa_request(g_control_sockfd, cmd, (char*)res_buffer, res_buffer_len);
+       WDP_LOGD( "__send_wpa_request(P2P_FLUSH) result=[%d]\n", result);
+
+       if (result < 0)
+       {
+               WDP_LOGE( "__send_wpa_request FAILED!!\n");
+               __WDP_LOG_FUNC_EXIT__;
+               return false;
+       }
+
+       if ( (result == 0) || (strncmp(res_buffer, "FAIL", 4) == 0))
+       {
+               __WDP_LOG_FUNC_EXIT__;
+               return false;
+       }
+
+       __WDP_LOG_FUNC_EXIT__;
+       return true;
 }
 
 
@@ -2950,16 +2988,15 @@ int wfd_ws_send_provision_discovery_request(unsigned char mac_addr[6], wifi_dire
 {
        __WDP_LOG_FUNC_ENTER__;
 
-       char cmd[40] = {0, };
+       char cmd[64] = {0, };
        char mac_str[18] = {0, };
        char res_buffer[1024]={0,};
        int res_buffer_len = sizeof(res_buffer);
        int result;
 
-       g_current_conn_direction = CONN_DIRECTION_OUTGOING;
        WDP_LOGD("Outgoing PROV_DISC");
 
-       if (is_peer_go)
+       if (is_peer_go && config_method == WIFI_DIRECT_WPS_TYPE_PBC)
        {
                snprintf(mac_str, 18, MACSTR, MAC2STR(mac_addr));
                snprintf(cmd, sizeof(cmd),"%s %s %s join", CMD_CONNECT, mac_str, __convert_wps_config_methods_value(config_method));
index 1d574b8..efabf5a 100755 (executable)
@@ -29,7 +29,7 @@
  *     Macros
  *****************************************************************************/
 #define WFD_MAX_CLIENTS                16
-#define WFD_MAC_ASSOC_STA        8
+#define WFD_MAX_ASSOC_STA        8
 
 #define WFD_SERVER_SOCKET_PATH "/tmp/wfd_client_socket"
 
@@ -100,7 +100,7 @@ typedef struct
 
        wfd_discovery_entry_s current_peer;   // it is used during connecting/disconnecting
 
-       wfd_local_connected_peer_info_t connected_peers[WFD_MAC_ASSOC_STA];
+       wfd_local_connected_peer_info_t connected_peers[WFD_MAX_ASSOC_STA];
        int connected_peer_count;
 
        int dhcp_pid;
index b26538f..28bc167 100644 (file)
@@ -236,9 +236,9 @@ void __wfd_server_print_entry_list(wfd_discovery_entry_s * list, int num)
                WDS_LOGD( "is Connected ? %s\n", list[i].is_connected ? "YES" : "NO");
                WDS_LOGD( "device_name : %s\n", list[i].device_name);
                WDS_LOGD( "MAC address : " MACSTR "\n", MAC2STR(list[i].mac_address));
+               WDS_LOGD( "Iface address : " MACSTR "\n", MAC2STR(list[i].intf_mac_address));
                WDS_LOGD( "Device type [%d/%d] ==\n", list[i].category, list[i].subcategory);
                WDS_LOGD( "wps cfg method [%d] ==\n", list[i].wps_cfg_methods);
-
        }
        WDS_LOGD( "------------------------------------------\n");
 }
@@ -344,7 +344,6 @@ int wfd_server_send_response(int sockfd, void * data, int len)
 void wfd_server_process_client_request(wifi_direct_client_request_s * client_req)
 {
        __WDS_LOG_FUNC_ENTER__;
-       WDS_LOGD("TEST");
 
        int ret = WIFI_DIRECT_ERROR_NONE;
        wifi_direct_client_response_s   resp;
@@ -412,7 +411,7 @@ void wfd_server_process_client_request(wifi_direct_client_request_s * client_req
                        {
                                int i = -1;
                                unsigned char NULL_MAC[6] = {0,0,0,0,0,0};
-                               for(i=0;i<WFD_MAC_ASSOC_STA;i++)
+                               for(i=0;i<WFD_MAX_ASSOC_STA;i++)
                                {
                                        memset(&wfd_server->connected_peers[i], 0, sizeof(wfd_local_connected_peer_info_t));
                                        wfd_server->connected_peers[i].isUsed = 0;
@@ -831,8 +830,14 @@ void wfd_server_process_client_request(wifi_direct_client_request_s * client_req
                        resp.result = WIFI_DIRECT_ERROR_NONE;
                        wfd_server_send_response(client->sync_sockfd, &resp, sizeof(wifi_direct_client_response_s));
 
-                       if (wfd_oem_is_groupowner())
+                       if (wfd_oem_is_groupowner()) {
+                               if (wps_config == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY ||
+                                         wps_config == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD)
+                                       wfd_oem_wps_pin_start(client_req->data.mac_addr);
+                               else
+                                       wfd_oem_wps_pbc_start();
                                break;
+                       }
 
                        if (wfd_oem_connect(client_req->data.mac_addr, wps_config))
                        {
@@ -1458,9 +1463,9 @@ void wfd_server_process_client_request(wifi_direct_client_request_s * client_req
 
                resp.param1 = wfd_server_get_state();
 
-               if (max_client > WFD_MAC_ASSOC_STA)
+               if (max_client > WFD_MAX_ASSOC_STA)
                {
-                       WDS_LOGF( "ERROR : Max client number shold be under [%d]\n", WFD_MAC_ASSOC_STA);
+                       WDS_LOGF( "ERROR : Max client number shold be under [%d]\n", WFD_MAX_ASSOC_STA);
                        resp.result = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
                }
                else
index 95aba12..abe415b 100644 (file)
@@ -342,7 +342,7 @@ void __wfd_DHCP_lease_add_cb(keynode_t *key, void* data)
         }
         wfd_macaddr_atoe(mac_str, mac_hex);
         __wfd_server_print_connected_peer();
-        for(i=0; i<WFD_MAC_ASSOC_STA; i++)
+        for(i=0; i<WFD_MAX_ASSOC_STA; i++)
         {
 
                if (wfd_server->connected_peers[i].isUsed == 1 &&
@@ -362,7 +362,7 @@ void __wfd_DHCP_lease_add_cb(keynode_t *key, void* data)
                        break;
                }
         }
-        if (i==WFD_MAC_ASSOC_STA)
+        if (i==WFD_MAX_ASSOC_STA)
                WDS_LOGE( "Can't find peer from table\n");
 
         __wfd_server_print_connected_peer();
index bcd1d45..5476cb6 100644 (file)
@@ -183,7 +183,7 @@ void __wfd_server_print_connected_peer()
        wfd_server_control_t *wfd_server = wfd_server_get_control();\r
        int i;\r
 \r
-       for (i = 0; i < WFD_MAC_ASSOC_STA; i++)\r
+       for (i = 0; i < WFD_MAX_ASSOC_STA; i++)\r
        {\r
                if (wfd_server->connected_peers[i].isUsed == 0)\r
                {\r
@@ -356,7 +356,7 @@ bool wfd_server_clear_connected_peer()
        int i;\r
        unsigned char NULL_IP[4] = { 0, 0, 0, 0};\r
 \r
-       for (i = 0; i < WFD_MAC_ASSOC_STA; i++)\r
+       for (i = 0; i < WFD_MAX_ASSOC_STA; i++)\r
        {\r
                wfd_server->connected_peers[i].isUsed = 0;\r
                memcpy(wfd_server->connected_peers[i].ip_address, NULL_IP, 4);\r
@@ -385,7 +385,7 @@ void wfd_server_add_connected_peer(wfd_discovery_entry_s* peer, unsigned char in
        wfd_server_control_t *wfd_server = wfd_server_get_control();\r
        int i;\r
 \r
-       for (i = 0; i < WFD_MAC_ASSOC_STA; i++)\r
+       for (i = 0; i < WFD_MAX_ASSOC_STA; i++)\r
        {\r
                if (wfd_server->connected_peers[i].isUsed == 0)\r
                {\r
@@ -408,7 +408,7 @@ void wfd_server_remove_connected_peer(wfd_discovery_entry_s * peer)
        int i;\r
        unsigned char NULL_IP[4] = { 0, 0, 0, 0};\r
 \r
-       for (i = 0; i < WFD_MAC_ASSOC_STA; i++)\r
+       for (i = 0; i < WFD_MAX_ASSOC_STA; i++)\r
        {\r
                if (wfd_server->connected_peers[i].isUsed==1 &&\r
                                memcmp(wfd_server->connected_peers[i].peer.mac_address, peer->mac_address, 6) == 0 )\r
@@ -430,7 +430,7 @@ void wfd_server_remove_connected_peer_by_interface_mac(unsigned char interface_m
        int i;\r
        unsigned char NULL_IP[4] = { 0, 0, 0, 0};\r
 \r
-       for (i = 0; i < WFD_MAC_ASSOC_STA; i++)\r
+       for (i = 0; i < WFD_MAX_ASSOC_STA; i++)\r
        {\r
                if (wfd_server->connected_peers[i].isUsed==1 &&\r
                                memcmp(wfd_server->connected_peers[i].int_address, interface_mac, 6) == 0 )\r
@@ -452,7 +452,7 @@ int wfd_server_is_connected_peer_by_device_mac(unsigned char device_mac[6])
        wfd_server_control_t *wfd_server = wfd_server_get_control();\r
        int i;\r
 \r
-       for (i = 0; i < WFD_MAC_ASSOC_STA; i++)\r
+       for (i = 0; i < WFD_MAX_ASSOC_STA; i++)\r
        {\r
                if (wfd_server->connected_peers[i].isUsed==1 &&\r
                                memcmp(wfd_server->connected_peers[i].peer.mac_address, device_mac, 6) == 0 )\r
@@ -471,7 +471,7 @@ wfd_server_get_connected_peer_by_device_mac(unsigned char device_mac[6])
        wfd_server_control_t *wfd_server = wfd_server_get_control();\r
        int i;\r
 \r
-       for (i = 0; i < WFD_MAC_ASSOC_STA; i++)\r
+       for (i = 0; i < WFD_MAX_ASSOC_STA; i++)\r
        {\r
                if (wfd_server->connected_peers[i].isUsed==1 &&\r
                                memcmp(wfd_server->connected_peers[i].peer.mac_address, device_mac, 6) == 0 )\r
@@ -493,7 +493,7 @@ wfd_server_get_connected_peer_by_interface_mac(unsigned char int_mac[6])
 \r
        __wfd_server_print_connected_peer();\r
 \r
-       for (i = 0; i < WFD_MAC_ASSOC_STA; i++)\r
+       for (i = 0; i < WFD_MAX_ASSOC_STA; i++)\r
        {\r
                if (wfd_server->connected_peers[i].isUsed == 1 &&\r
                        memcmp(wfd_server->connected_peers[i].int_address, int_mac, 6) == 0)\r
@@ -520,7 +520,7 @@ int wfd_server_is_connected_peer_by_interface_mac(unsigned char interface_mac[6]
        wfd_server_control_t *wfd_server = wfd_server_get_control();\r
        int i;\r
 \r
-       for (i = 0; i < WFD_MAC_ASSOC_STA; i++)\r
+       for (i = 0; i < WFD_MAX_ASSOC_STA; i++)\r
        {\r
                if (wfd_server->connected_peers[i].isUsed==1 &&\r
                                memcmp(wfd_server->connected_peers[i].int_address, interface_mac, 6) == 0 )\r
@@ -784,10 +784,15 @@ void wfd_server_process_event(wfd_event_t event)
 \r
                case WFD_EVENT_PROV_DISCOVERY_RESPONSE_WPS_DISPLAY:\r
                case WFD_EVENT_PROV_DISCOVERY_RESPONSE_WPS_KEYPAD:\r
+                       if (event == WFD_EVENT_PROV_DISCOVERY_RESPONSE_WPS_DISPLAY) {\r
+                               wfd_server->config_data.wps_config = WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY;\r
+                               wfd_oem_connect(g_incomming_peer_mac_address, wfd_server->config_data.wps_config);\r
+                       }\r
+                       else if (event == WFD_EVENT_PROV_DISCOVERY_RESPONSE_WPS_KEYPAD)\r
+                               wfd_server->config_data.wps_config = WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD;\r
                        noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_WPS_REQ;\r
-                       WDS_LOGI("g_incomming_peer_mac_address is [%s]\n", g_incomming_peer_mac_address);\r
+                       WDS_LOGI("g_incomming_peer_mac_address is [" MACSTR "]\n", MAC2STR(g_incomming_peer_mac_address));\r
                        snprintf(noti.param1, sizeof(noti.param1), MACSTR,       MAC2STR(g_incomming_peer_mac_address));\r
-                       WDS_LOGD( "SENDING CLIENT EVENT NOTI MAC = %s\n", g_incomming_peer_mac_address);\r
                        __wfd_server_send_client_event(&noti);\r
                        break;\r
 \r
@@ -846,11 +851,9 @@ void wfd_server_process_event(wfd_event_t event)
                case WFD_EVENT_PROV_DISCOVERY_REQUEST_WPS_KEYPAD:\r
                        {\r
                                if (event == WFD_EVENT_PROV_DISCOVERY_REQUEST)\r
-                                       wfd_server->config_data.wps_config =\r
-                                               WIFI_DIRECT_WPS_TYPE_PBC;\r
+                                       wfd_server->config_data.wps_config = WIFI_DIRECT_WPS_TYPE_PBC;\r
                                else if (event == WFD_EVENT_PROV_DISCOVERY_REQUEST_WPS_DISPLAY)\r
-                                       wfd_server->config_data.wps_config =\r
-                                               WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY;\r
+                                       wfd_server->config_data.wps_config = WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY;\r
                                else if (event == WFD_EVENT_PROV_DISCOVERY_REQUEST_WPS_KEYPAD)\r
                                        wfd_server->config_data.wps_config = WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD;\r
                                else\r
index 09e5a77..d171011 100644 (file)
@@ -320,13 +320,10 @@ void wfd_load_plugin()
 
 static int wfd_server_init(void)
 {
-       int i = -1;
-       unsigned char NULL_MAC[6] = { 0, 0, 0, 0, 0, 0 };
-
        __WDS_LOG_FUNC_ENTER__;
+       int i = -1;
 
-       memset(&g_wfd_server, 0, sizeof(wfd_server_control_t));
-       g_wfd_server.active_clients = 0;
+       memset(&g_wfd_server, 0x00, sizeof(wfd_server_control_t));
        g_wfd_server.async_sockfd = -1;
        g_wfd_server.sync_sockfd = -1;
 
@@ -335,32 +332,12 @@ static int wfd_server_init(void)
        g_wfd_server.config_data.wps_config = WIFI_DIRECT_WPS_TYPE_PBC;
        g_wfd_server.config_data.auto_connection = false;
        g_wfd_server.config_data.want_persistent_group = false;
-       g_wfd_server.config_data.max_clients = WFD_MAC_ASSOC_STA;
+       g_wfd_server.config_data.max_clients = WFD_MAX_ASSOC_STA;
        g_wfd_server.config_data.hide_SSID = false;
        g_wfd_server.config_data.group_owner_intent = 8;
        g_wfd_server.config_data.primary_dev_type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE;  // Telephone
        g_wfd_server.config_data.secondary_dev_type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_PHONE_SM_DUAL;  // smart phone dual mode (wifi and cellular)
 
-       //g_wfd_server.config_data.primary_dev_type = WFD_DEVICE_TYPE_CAT_TELEPHONE;
-       //g_wfd_server.config_data.secondary_dev_type = WFD_DEVICE_TYPE_SUB_CAT_PHONE_WM;
-
-
-       for (i = 0; i < WFD_MAX_CLIENTS; i++)
-       {
-               memset(&g_wfd_server.client[i], 0, sizeof(wfd_server_client_t));
-       }
-
-       for (i = 0; i < 8; i++)
-       {
-               memset(&g_wfd_server.connected_peers[i], 0, sizeof(wfd_local_connected_peer_info_t));
-               g_wfd_server.connected_peers[i].isUsed = 0;
-
-       }
-       g_wfd_server.connected_peer_count = 0;
-       memcpy(g_wfd_server.current_peer.mac_address, NULL_MAC, 6);
-
-       g_wfd_server.autonomous_group_owner = false;
-
        wfd_load_plugin();
 
        wfd_oem_init(wfd_server_process_event);
@@ -644,24 +621,15 @@ int main(gint argc, gchar * argv[])
        WDS_LOGD("========================================\n");
 
        for (i = 0; i < argc; i++)
-       {
                WDS_LOGD( "arg[%d]= %s", i, argv[i]);
-       }
 
        if (!g_thread_supported())
-       {
                g_thread_init(NULL);
-       }
 
        g_type_init();
 
        mainloop = g_main_loop_new(NULL, FALSE);
 
-       WDS_LOGD( "gmainloop is initialized");
-
-
-       WDS_LOGD( "Entering g_main_loop()...");
-
        wfd_server_init();
 
        if (wfd_server_create_socket() == -1)
index 66776c4..2af580b 100644 (file)
@@ -197,18 +197,20 @@ void wfd_server_reset_client(int sync_sockfd)
                        wfd_server->client[index].dev_handle = -1;
 
                        wfd_server->active_clients--;
+                       break;
+               }
+       }
 
-                       wfd_termination_timer_start();
-
-                       wfd_server_print_client();
+       if (wfd_server->active_clients == 0)
+               wfd_termination_timer_start();
 
-                       __WDS_LOG_FUNC_EXIT__;
-                       return;
-               }
+       if (index == WFD_MAX_CLIENTS)
+       {
+               WDS_LOGE("Error!!! Reset client fail: socketfd=%d is not found\n", sync_sockfd);
+               __WDS_LOG_FUNC_EXIT__;
+               return;
        }
 
-       WDS_LOGF(
-                       "Error!!! Reset client fail: socketfd=%d is not found\n", sync_sockfd);
        __WDS_LOG_FUNC_EXIT__;
        return;
 }
@@ -216,11 +218,10 @@ void wfd_server_reset_client(int sync_sockfd)
 void wfd_server_print_client()
 {
        __WDS_LOG_FUNC_ENTER__;
-       
        wfd_server_control_t *wfd_server = wfd_server_get_control();
        int index = 0;
 
-       WDS_LOGI( "--------------------\n", wfd_server->active_clients-1);
+       WDS_LOGI( "--------------------\n");
        for (index = 0; index < WFD_MAX_CLIENTS; index++)
        {
                if (wfd_server->client[index].isUsed == TRUE)
@@ -246,13 +247,12 @@ void wfd_server_print_client()
 
 bool wfd_server_client_request_callback(GIOChannel* source, GIOCondition condition, gpointer data)
 {
+       __WDS_LOG_FUNC_ENTER__;
        int sockfd = (int) data;
        wifi_direct_client_request_s client_req;
        int req_len = sizeof(wifi_direct_client_request_s);
 
-       __WDS_LOG_FUNC_ENTER__;
-
-       memset(&client_req, 0, req_len);
+       memset(&client_req, 0x00, req_len);
 
        if (wfd_server_read_socket_event(sockfd, (char *) &client_req, req_len) < 0)
        {
@@ -271,20 +271,18 @@ bool wfd_server_client_request_callback(GIOChannel* source, GIOCondition conditi
 /* Function to connect client with wfd_server */
 bool wfd_server_register_client(int sockfd)
 {
+       __WDS_LOG_FUNC_ENTER__;
        int index = 0;
        int status = 0;
        wifi_direct_client_request_s register_req;
        wifi_direct_client_response_s register_rsp;
        wfd_server_control_t *wfd_server = wfd_server_get_control();
 
-       __WDS_LOG_FUNC_ENTER__;
-
        if (sockfd <= 0)
        {
-               // invalid socket fd should not be closed!!
                WDS_LOGE( "Error!!! Invalid sockfd argument = [%d] \n", sockfd);
                __WDS_LOG_FUNC_EXIT__;
-               return TRUE;
+               return FALSE;
        }
 
        /** Read the Register socket type*/