4 * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Sungsik Jang <sungsik.jang@samsung.com>, Dongwook Lee <dwmax.lee@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
24 /*****************************************************************************
26 *****************************************************************************/
32 #include <sys/socket.h>
38 #include <sys/ioctl.h>
41 #include <linux/unistd.h>
46 /*****************************************************************************
47 * Wi-Fi Direct Service headers
48 *****************************************************************************/
49 #include "wifi-direct.h"
50 #include "wifi-direct-client-proxy.h"
51 #include "wifi-direct-internal.h"
53 /*****************************************************************************
55 *****************************************************************************/
58 /*****************************************************************************
60 *****************************************************************************/
61 wifi_direct_client_info_s g_client_info = {
62 .is_registered = FALSE,
66 .activation_cb = NULL,
68 .connection_cb = NULL,
69 .user_data_for_cb_activation = NULL,
70 .user_data_for_cb_discover = NULL,
71 .user_data_for_cb_connection = NULL
74 /*****************************************************************************
75 * Local Functions Definition
76 *****************************************************************************/
77 static int __wfd_client_read_socket(int sockfd, char *dataptr, int datalen);
82 return syscall(__NR_gettid);
85 #error "__NR_gettid is not defined, please include linux/unistd.h "
88 static wifi_direct_client_info_s *__wfd_get_control()
90 return &g_client_info;
93 static void __wfd_reset_control()
96 if (g_client_info.g_source_id > 0)
97 g_source_remove(g_client_info.g_source_id);
98 g_client_info.g_source_id = -1;
100 // Protect standard input / output / error
101 if (g_client_info.sync_sockfd > 2)
102 close(g_client_info.sync_sockfd);
103 g_client_info.sync_sockfd = -1;
105 if (g_client_info.async_sockfd > 2)
106 close(g_client_info.async_sockfd);
107 g_client_info.async_sockfd = -1;
109 g_client_info.is_registered = FALSE;
111 // Initialize callbacks
112 g_client_info.activation_cb = NULL;
113 g_client_info.discover_cb = NULL;
114 g_client_info.connection_cb = NULL;
115 g_client_info.user_data_for_cb_activation = NULL;
116 g_client_info.user_data_for_cb_discover = NULL;
117 g_client_info.user_data_for_cb_connection = NULL;
121 static int macaddr_atoe(char *p, unsigned char mac[])
125 WDC_LOGD( "macaddr_atoe : input MAC = [%s]\n", p);
129 mac[i++] = (char) strtoul(p, &p, 16);
138 static char *__wfd_print_event(wfd_client_event_e event)
142 case WIFI_DIRECT_CLI_EVENT_ACTIVATION:
145 case WIFI_DIRECT_CLI_EVENT_DEACTIVATION:
146 return "DEACTIVATION";
148 case WIFI_DIRECT_CLI_EVENT_INVALID:
149 return "WIFI_DIRECT_CLI_EVENT_INVALID";
151 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START:
152 return "WIFI_DIRECT_CLI_EVENT_DISCOVER_START";
154 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START_LISTEN_ONLY:
155 return "WIFI_DIRECT_CLI_EVENT_DISCOVER_START_LISTEN_ONLY";
157 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START_SEARCH_LISTEN:
158 return "WIFI_DIRECT_CLI_EVENT_DISCOVER_START_SEARCH_LISTEN";
160 case WIFI_DIRECT_CLI_EVENT_DISCOVER_END:
161 return "WIFI_DIRECT_CLI_EVENT_DISCOVER_END";
163 case WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS:
164 return "WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS";
167 case WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ:
168 return "WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ";
171 case WIFI_DIRECT_CLI_EVENT_CONNECTION_START:
172 return "WIFI_DIRECT_CLI_EVENT_CONNECTION_START";
175 case WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP:
176 return "WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP";
178 case WIFI_DIRECT_CLI_EVENT_CONNECTION_WPS_REQ:
179 return "WIFI_DIRECT_CLI_EVENT_CONNECTION_WPS_REQ";
182 case WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP:
183 return "WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP";
185 case WIFI_DIRECT_CLI_EVENT_DISCONNECTION_IND:
186 return "WIFI_DIRECT_CLI_EVENT_DISCONNECTION_IND";
189 case WIFI_DIRECT_CLI_EVENT_GROUP_CREATE_RSP:
190 return "WIFI_DIRECT_CLI_EVENT_GROUP_CREATE_RSP";
192 case WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP:
193 return "WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP";
195 case WIFI_DIRECT_CLI_EVENT_IP_LEASED_IND:
196 return "WIFI_DIRECT_CLI_EVENT_IP_LEASED_IND";
200 return "WIFI_DIRECT_CLI_EVENT_unknown";
205 static char *__wfd_print_error(wifi_direct_error_e error)
209 case WIFI_DIRECT_ERROR_OPERATION_FAILED:
210 return "WIFI_DIRECT_ERROR_OPERATION_FAILED";
211 case WIFI_DIRECT_ERROR_OUT_OF_MEMORY:
212 return "WIFI_DIRECT_ERROR_OUT_OF_MEMORY";
213 case WIFI_DIRECT_ERROR_COMMUNICATION_FAILED:
214 return "WIFI_DIRECT_ERROR_COMMUNICATION_FAILED";
215 case WIFI_DIRECT_ERROR_NOT_PERMITTED:
216 return "WIFI_DIRECT_ERROR_NOT_PERMITTED";
217 case WIFI_DIRECT_ERROR_INVALID_PARAMETER:
218 return "WIFI_DIRECT_ERROR_INVALID_PARAMETER";
219 case WIFI_DIRECT_ERROR_NOT_INITIALIZED:
220 return "WIFI_DIRECT_ERROR_NOT_INITIALIZED";
221 case WIFI_DIRECT_ERROR_TOO_MANY_CLIENT:
222 return "WIFI_DIRECT_ERROR_TOO_MANY_CLIENT";
223 case WIFI_DIRECT_ERROR_RESOURCE_BUSY:
224 return "WIFI_DIRECT_ERROR_RESOURCE_BUSY";
225 case WIFI_DIRECT_ERROR_NONE:
226 return "WIFI_DIRECT_ERROR_NONE";
228 WDC_LOGE("Invalid error value: [%d]", error);
229 return "Invalid error";
233 static int __wfd_convert_client_event(wfd_client_event_e event)
235 __WDC_LOG_FUNC_START__;
239 case WIFI_DIRECT_CLI_EVENT_ACTIVATION:
240 return WIFI_DIRECT_DEVICE_STATE_ACTIVATED;
242 case WIFI_DIRECT_CLI_EVENT_DEACTIVATION:
243 return WIFI_DIRECT_DEVICE_STATE_DEACTIVATED;
246 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START_LISTEN_ONLY:
247 return WIFI_DIRECT_ONLY_LISTEN_STARTED;
249 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START:
250 return WIFI_DIRECT_DISCOVERY_STARTED;
252 case WIFI_DIRECT_CLI_EVENT_DISCOVER_END:
253 return WIFI_DIRECT_DISCOVERY_FINISHED;
255 case WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS:
256 return WIFI_DIRECT_DISCOVERY_FOUND;
259 case WIFI_DIRECT_CLI_EVENT_CONNECTION_START:
260 return WIFI_DIRECT_CONNECTION_IN_PROGRESS;
262 case WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ:
263 return WIFI_DIRECT_CONNECTION_REQ;
265 case WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP:
266 return WIFI_DIRECT_CONNECTION_RSP;
268 case WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP:
269 return WIFI_DIRECT_DISCONNECTION_RSP;
271 case WIFI_DIRECT_CLI_EVENT_CONNECTION_WPS_REQ:
272 return WIFI_DIRECT_CONNECTION_WPS_REQ;
274 case WIFI_DIRECT_CLI_EVENT_DISCONNECTION_IND:
275 return WIFI_DIRECT_DISCONNECTION_IND;
277 case WIFI_DIRECT_CLI_EVENT_DISASSOCIATION_IND:
278 return WIFI_DIRECT_DISASSOCIATION_IND;
280 case WIFI_DIRECT_CLI_EVENT_GROUP_CREATE_RSP:
281 return WIFI_DIRECT_GROUP_CREATED;
283 case WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP:
284 return WIFI_DIRECT_GROUP_DESTROYED;
287 WDC_LOGE("Invalid event : [%d]", event);
291 __WDC_LOG_FUNC_END__;
295 static gboolean __wfd_client_process_event(GIOChannel * source,
296 GIOCondition condition,
299 wfd_client_event_e event = WIFI_DIRECT_CLI_EVENT_INVALID;
300 wifi_direct_client_info_s *client = __wfd_get_control();
301 int sockfd = client->async_sockfd;
302 wifi_direct_client_noti_s client_noti;
303 wifi_direct_error_e error = WIFI_DIRECT_ERROR_NONE;
304 char param1[64] = { 0, };
305 char param2[64] = { 0, };
307 memset(&client_noti, 0, sizeof(wifi_direct_client_noti_s));
310 if (__wfd_client_read_socket(sockfd, (char *) &client_noti,
311 sizeof(wifi_direct_client_noti_s)) <= 0)
313 WDC_LOGE("Error!!! Reading Async Event[%d]", sockfd);
315 __wfd_reset_control();
316 __WDC_LOG_FUNC_END__;
320 WDC_LOGD( "Received Event is [%d,%s], error[%d]\n",
321 client_noti.event, __wfd_print_event(client_noti.event),
324 event = client_noti.event;
325 error = client_noti.error;
326 memcpy(param1, client_noti.param1, sizeof(client_noti.param1));
327 memcpy(param2, client_noti.param2, sizeof(client_noti.param2));
334 case WIFI_DIRECT_CLI_EVENT_ACTIVATION:
335 case WIFI_DIRECT_CLI_EVENT_DEACTIVATION:
336 if (client->activation_cb != NULL)
337 client->activation_cb(error,
338 (wifi_direct_device_state_e)
339 __wfd_convert_client_event(event),
340 client->user_data_for_cb_activation);
342 WDC_LOGE("activation_cb is NULL!!");
345 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START:
346 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START_LISTEN_ONLY:
347 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START_SEARCH_LISTEN:
348 case WIFI_DIRECT_CLI_EVENT_DISCOVER_END:
349 case WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS:
350 if (client->discover_cb != NULL)
351 client->discover_cb(error,
352 (wifi_direct_discovery_state_e)
353 __wfd_convert_client_event(event),
354 client->user_data_for_cb_discover);
356 WDC_LOGE("discover_cb is NULL!!");
359 case WIFI_DIRECT_CLI_EVENT_CONNECTION_START:
360 case WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ:
361 case WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP:
362 case WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP:
363 case WIFI_DIRECT_CLI_EVENT_CONNECTION_WPS_REQ:
364 case WIFI_DIRECT_CLI_EVENT_DISCONNECTION_IND:
365 case WIFI_DIRECT_CLI_EVENT_DISASSOCIATION_IND:
366 case WIFI_DIRECT_CLI_EVENT_GROUP_CREATE_RSP:
367 case WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP:
368 if (client->connection_cb != NULL)
369 client->connection_cb(error,
370 (wifi_direct_connection_state_e)
371 __wfd_convert_client_event(event), param1,
372 client->user_data_for_cb_connection);
374 WDC_LOGE("connection_cb is NULL!!");
377 // ToDo: Handling IP lease event...
378 case WIFI_DIRECT_CLI_EVENT_IP_LEASED_IND:
379 if (client->ip_assigned_cb != NULL)
382 ifname = vconf_get_str(VCONFKEY_IFNAME);
385 WDC_LOGD("vconf (%s) value is NULL!!!", VCONFKEY_IFNAME);
387 WDC_LOGD("VCONFKEY_IFNAME(%s) : %s", VCONFKEY_IFNAME, ifname);
389 client->ip_assigned_cb(param1,
392 client->user_data_for_cb_ip_assigned);
396 WDC_LOGE("ip_assigned_cb is NULL!!");
403 __WDC_LOG_FUNC_END__;
408 static wifi_direct_error_e __wfd_client_send_request(int sockfd, void *req_data, int dataLength)
412 __WDC_LOG_FUNC_START__;
416 WDC_LOGD("Write [%d] bytes to socket [%d].", dataLength, sockfd);
418 retval = write(sockfd, (char *) req_data, dataLength);
422 WDC_LOGE("Error!!! writing to the socket. Error = %s", strerror(errno));
423 __WDC_LOG_FUNC_END__;
424 return WIFI_DIRECT_ERROR_NONE;
427 __WDC_LOG_FUNC_END__;
428 return WIFI_DIRECT_ERROR_NONE;
431 WDC_LOGE("Error!!! Invalid sockfd [%d]", sockfd);
432 __WDC_LOG_FUNC_END__;
433 return WIFI_DIRECT_ERROR_NONE;
436 static wifi_direct_error_e __wfd_client_async_event_init(int clientid)
440 struct sockaddr_un servAddr;
441 char *path = "/tmp/wfd_client_socket";
443 wifi_direct_client_info_s *client_info = __wfd_get_control();
445 __WDC_LOG_FUNC_START__;
448 if ((sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
450 WDC_LOGE("Error!!! creating async socket. Error = [%s].", strerror(errno));
451 __WDC_LOG_FUNC_END__;
452 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
455 WDC_LOGD("Created async socket [%d]", sockfd);
457 memset(&servAddr, 0, sizeof(servAddr));
458 servAddr.sun_family = AF_UNIX;
459 strcpy(servAddr.sun_path, path);
460 len = sizeof(servAddr.sun_family) + strlen(path);
462 WDC_LOGD("Connecting to server socket to register async socket [%d]", sockfd);
464 if ((connect(sockfd, (struct sockaddr *) &servAddr, len)) < 0)
466 WDC_LOGE("Error!!! connecting to server socket. Error = [%s].", strerror(errno));
468 __WDC_LOG_FUNC_END__;
469 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
473 wifi_direct_client_request_s req;
474 int result = WIFI_DIRECT_ERROR_NONE;
476 memset(&req, 0, sizeof(wifi_direct_client_request_s));
478 req.cmd = WIFI_DIRECT_CMD_INIT_ASYNC_SOCKET;
479 req.client_id = clientid;
482 __wfd_client_send_request(sockfd, &req, sizeof(wifi_direct_client_request_s));
484 if (result != WIFI_DIRECT_ERROR_NONE)
486 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
487 WDC_LOGE("Error!!! [%s]", __wfd_print_error(result));
489 __WDC_LOG_FUNC_END__;
493 client_info->async_sockfd = sockfd;
495 WDC_LOGE("Async socket is created= %d", sockfd);
503 static int __wfd_client_read_socket(int sockfd, char *dataptr, int datalen)
506 struct pollfd pollfd;
507 int timeout = 60000; /** for 60 sec */
509 int total_data_recd = 0;
511 __WDC_LOG_FUNC_START__;
515 WDC_LOGE("Error!!! Invalid socket FD [%d]", sockfd);
516 __WDC_LOG_FUNC_END__;
520 if ((dataptr == NULL) || (datalen <= 0))
522 WDC_LOGE("Error!!! Invalid parameter");
523 __WDC_LOG_FUNC_END__;
527 WDC_LOGE("@@@@@@@ len = %d @@@@@@@@@@@", datalen);
530 pollfd.events = POLLIN | POLLERR | POLLHUP;
531 pollret = poll(&pollfd, 1, timeout);
533 WDC_LOGE("POLL ret = %d", pollret);
537 if (pollfd.revents == POLLIN)
544 retval = read(sockfd, (char *) dataptr, datalen);
545 WDC_LOGE("sockfd %d retval %d", sockfd,
549 WDC_LOGE("Error!!! reading data, error [%s]", strerror(errno));
550 __WDC_LOG_FUNC_END__;
553 total_data_recd += retval;
557 __WDC_LOG_FUNC_END__;
558 return total_data_recd;
560 else if (pollfd.revents & POLLHUP)
563 __WDC_LOG_FUNC_END__;
566 else if (pollfd.revents & POLLERR)
569 __WDC_LOG_FUNC_END__;
573 else if (pollret == 0)
575 WDC_LOGE("POLLing timeout");
576 __WDC_LOG_FUNC_END__;
581 WDC_LOGE("Polling unknown error");
582 __WDC_LOG_FUNC_END__;
585 __WDC_LOG_FUNC_END__;
590 static int __wfd_client_read_more_data(int sockfd, void *pData, int Datalen)
594 __WDC_LOG_FUNC_START__;
598 WDC_LOGE("Error!!! Inavlid argument passed");
599 __WDC_LOG_FUNC_END__;
600 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
605 WDC_LOGE("Error!!! Inavlid argument passed");
606 __WDC_LOG_FUNC_END__;
607 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
612 WDC_LOGE("Error!!! Inavlid argument passed");
613 __WDC_LOG_FUNC_END__;
614 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
617 /** Initialising the structure variable */
618 memset(pData, 0, Datalen);
620 retval = __wfd_client_read_socket(sockfd, (char *) pData, Datalen);
623 WDC_LOGE("Error!!! reading response from CM. errno = [%d]", errno);
624 __WDC_LOG_FUNC_END__;
625 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
628 __WDC_LOG_FUNC_END__;
629 return WIFI_DIRECT_ERROR_NONE;
632 void __wfd_client_print_entry_list(wfd_discovery_entry_s * list, int num)
636 WDC_LOGD("------------------------------------------");
637 for (i = 0; i < num; i++)
639 WDC_LOGD("== Peer index : %d ==", i);
640 WDC_LOGD("is Group Owner ? %s", list[i].is_group_owner ? "YES" : "NO");
641 WDC_LOGD("device_name : %s", list[i].device_name);
642 WDC_LOGD("MAC address : "MACSTR, MAC2STR(list[i].mac_address));
643 WDC_LOGD("wps cfg method : %x", list[i].wps_cfg_methods);
645 WDC_LOGD("------------------------------------------");
648 void __wfd_client_print_connected_peer_info(wfd_connected_peer_info_s * list, int num)
652 WDC_LOGD("------------------------------------------\n");
653 for (i = 0; i < num; i++)
655 WDC_LOGD("== Peer index : %d ==\n", i);
656 WDC_LOGD("device_name : %s\n", list[i].device_name);
657 WDC_LOGD("Device MAC : " MACSTR "\n", MAC2STR(list[i].mac_address));
658 WDC_LOGD("Interface MAC : " MACSTR "\n", MAC2STR(list[i].intf_mac_address));
659 WDC_LOGD("services : %d\n", list[i].services);
660 WDC_LOGD("is_p2p : %d\n", list[i].is_p2p);
661 WDC_LOGD("category : %d\n", list[i].category);
662 WDC_LOGD("channel : %d\n", list[i].channel);
663 WDC_LOGD("IP ["IPSTR"]\n", IP2STR(list[i].ip_address));
665 WDC_LOGD("------------------------------------------\n");
669 void __wfd_client_print_persistent_group_info(wfd_persistent_group_info_s * list, int num)
673 WDC_LOGD("------------------------------------------\n");
674 for (i = 0; i < num; i++)
676 WDC_LOGD("== Persistent Group index : %d ==\n", i);
677 WDC_LOGD("ssid : %s\n", list[i].ssid);
678 WDC_LOGD("GO MAC : " MACSTR "\n",
679 MAC2STR(list[i].go_mac_address));
681 WDC_LOGD("------------------------------------------\n");
686 void __wfd_client_print_config_data(wfd_config_data_s * config)
691 WDC_LOGD("Operating channel = [%d]\n", config->channel);
692 WDC_LOGD("WPS method = [%d, %s]\n", config->wps_config,
693 (config->wps_config == WIFI_DIRECT_WPS_TYPE_PBC) ?
694 "Pushbutton" : (config-> wps_config == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY)
695 ? "Display" : "Keypad");
697 WDC_LOGD("Max client = [%d]\n", config->max_clients);
698 WDC_LOGD("grp_owner_intent = [%d]\n", config->group_owner_intent);
699 WDC_LOGD("hide-SSID = [%d]\n", config->hide_SSID);
700 WDC_LOGD("want_persistent_group = [%d]\n", config->want_persistent_group);
701 WDC_LOGD("auto_connection = [%d]\n", config->auto_connection);
702 WDC_LOGD("primary_dev_type = [%d]\n", config->primary_dev_type);
703 WDC_LOGD("secondary_dev_type = [%d]\n",
704 config->secondary_dev_type);
709 int wifi_direct_initialize(void)
711 struct sockaddr_un servAddr;
712 char *path = "/tmp/wfd_client_socket";
713 wifi_direct_client_info_s *client_info = __wfd_get_control();
718 __WDC_LOG_FUNC_START__;
720 if (client_info->is_registered == TRUE)
722 WDC_LOGE("Warning!!! Already registered\nUpdate user data and callback!");
723 __WDC_LOG_FUNC_END__;
724 return WIFI_DIRECT_ERROR_NONE;
728 if ((sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
730 WDC_LOGE("Error!!! creating sync socket. Error = [%s].", strerror(errno));
731 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
734 WDC_LOGD("Created sync socket [%d]", sockfd);
736 memset(&servAddr, 0, sizeof(servAddr));
737 servAddr.sun_family = AF_UNIX;
738 strcpy(servAddr.sun_path, path);
739 len = sizeof(servAddr.sun_family) + strlen(path);
741 WDC_LOGD("Connecting to server socket to register sync socket [%d]", sockfd);
744 while (retry_count > 0)
747 if ((ret = connect(sockfd, (struct sockaddr *) &servAddr, len)) < 0)
749 WDC_LOGD("Launching wfd-server..\n");
750 system("dbus-send --system --print-reply --dest=net.netconfig /net/netconfig/wifi net.netconfig.wifi.LaunchDirect");
761 WDC_LOGE("Error!!! connecting to server socket. Error = [%d] %s.\n",
762 errno, strerror(errno));
766 __WDC_LOG_FUNC_END__;
767 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
771 wifi_direct_client_request_s req;
772 wifi_direct_client_response_s resp;
774 int status = WIFI_DIRECT_ERROR_NONE;
776 memset(&req, 0, sizeof(wifi_direct_client_request_s));
777 memset(&resp, 0, sizeof(wifi_direct_client_response_s));
779 req.cmd = WIFI_DIRECT_CMD_REGISTER;
780 req.client_id = gettid();
781 WDC_LOGD("Client ID = %d\n", req.client_id);
783 status = __wfd_client_send_request(sockfd, &req, sizeof(wifi_direct_client_request_s));
785 if (status != WIFI_DIRECT_ERROR_NONE)
787 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
788 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
790 __WDC_LOG_FUNC_END__;
791 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
795 if ((status = __wfd_client_read_socket(sockfd, (char *) &resp,
796 sizeof(wifi_direct_client_response_s))) <= 0)
798 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
799 __WDC_LOG_FUNC_END__;
800 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
804 if (resp.cmd == WIFI_DIRECT_CMD_REGISTER)
806 if (resp.result == WIFI_DIRECT_ERROR_NONE)
808 WDC_LOGD("Client ID received = %d \n",
810 WDC_LOGD("Connected sync socket %d to the wifi direct server socket\n",
812 client_info->sync_sockfd = sockfd;
813 client_info->client_id = resp.client_id;
814 client_info->is_registered = TRUE;
818 WDC_LOGE("Error!!! Client Register = %d\n",
821 __WDC_LOG_FUNC_END__;
825 int async_sockfd = -1;
826 /* Send request for establishing async communication channel */
828 __wfd_client_async_event_init(client_info->client_id)) ==
829 WIFI_DIRECT_ERROR_COMMUNICATION_FAILED)
831 WDC_LOGE("Error!!! creating Async Socket \n");
832 __wfd_reset_control();
833 __WDC_LOG_FUNC_END__;
834 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
837 client_info->async_sockfd = async_sockfd;
841 WDC_LOGE("Error!!! Invalid Response received from wfd Server. cmd = %d \n",
844 __WDC_LOG_FUNC_END__;
845 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
850 GIOChannel *gio = g_io_channel_unix_new(client_info->async_sockfd);
853 g_io_add_watch(gio, G_IO_IN | G_IO_ERR | G_IO_HUP,
854 (GIOFunc) __wfd_client_process_event, NULL);
856 g_io_channel_unref(gio);
858 WDC_LOGD("Scoket is successfully registered to g_main_loop.\n");
860 client_info->g_source_id = g_source_id;
862 // Initialize callbacks
863 client_info->activation_cb = NULL;
864 client_info->discover_cb = NULL;
865 client_info->connection_cb = NULL;
866 client_info->user_data_for_cb_activation = NULL;
867 client_info->user_data_for_cb_discover = NULL;
868 client_info->user_data_for_cb_connection = NULL;
870 __WDC_LOG_FUNC_END__;
872 return WIFI_DIRECT_ERROR_NONE;
877 int wifi_direct_deinitialize(void)
879 wifi_direct_client_info_s *client_info = __wfd_get_control();
881 __WDC_LOG_FUNC_START__;
883 if (client_info->is_registered == false)
885 WDC_LOGE("Client is already deregistered.\n");
886 __WDC_LOG_FUNC_END__;
887 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
890 client_info->activation_cb = NULL;
891 client_info->discover_cb = NULL;
892 client_info->connection_cb = NULL;
893 client_info->user_data_for_cb_activation = NULL;
894 client_info->user_data_for_cb_discover = NULL;
895 client_info->user_data_for_cb_connection = NULL;
897 wifi_direct_client_request_s req;
898 wifi_direct_client_response_s rsp;
900 int status = WIFI_DIRECT_ERROR_NONE;
902 memset(&req, 0, sizeof(wifi_direct_client_request_s));
903 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
905 req.cmd = WIFI_DIRECT_CMD_DEREGISTER;
906 req.client_id = client_info->client_id;
909 __wfd_client_send_request(client_info->sync_sockfd, &req,
910 sizeof(wifi_direct_client_request_s));
911 if (status != WIFI_DIRECT_ERROR_NONE)
913 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
914 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
915 client_info->sync_sockfd = -1;
916 __wfd_reset_control();
917 __WDC_LOG_FUNC_END__;
918 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
922 // Deinit protocol: Send the deregister cmd and wait for socket close...
925 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
926 sizeof(wifi_direct_client_response_s))) <= 0)
928 WDC_LOGD( "Deinit Successfull\n");
930 if (client_info->g_source_id > 0)
931 g_source_remove(client_info->g_source_id);
932 client_info->g_source_id = -1;
934 close(client_info->sync_sockfd);
935 client_info->sync_sockfd = -1;
936 __wfd_reset_control();
937 __WDC_LOG_FUNC_END__;
938 return WIFI_DIRECT_ERROR_NONE;
942 WDC_LOGD("Error.. Something wrong...!!!\n");
945 __wfd_reset_control();
947 __WDC_LOG_FUNC_END__;
948 return WIFI_DIRECT_ERROR_NONE;
952 int wifi_direct_set_device_state_changed_cb(wifi_direct_device_state_changed_cb
955 wifi_direct_client_info_s *client_info = __wfd_get_control();
957 __WDC_LOG_FUNC_START__;
961 WDC_LOGE("Callback is NULL.\n");
962 __WDC_LOG_FUNC_END__;
963 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
966 if (client_info->is_registered == false)
968 WDC_LOGE("Client is not initialized.\n");
969 __WDC_LOG_FUNC_END__;
970 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
973 client_info->activation_cb = cb;
974 client_info->user_data_for_cb_activation = user_data;
976 return WIFI_DIRECT_ERROR_NONE;
980 int wifi_direct_unset_device_state_changed_cb(void)
982 wifi_direct_client_info_s *client_info = __wfd_get_control();
984 __WDC_LOG_FUNC_START__;
986 if (client_info->is_registered == false)
988 WDC_LOGE("Client is not initialized.\n");
989 __WDC_LOG_FUNC_END__;
990 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
993 client_info->activation_cb = NULL;
994 client_info->user_data_for_cb_activation = NULL;
996 return WIFI_DIRECT_ERROR_NONE;
1001 wifi_direct_set_discovery_state_changed_cb
1002 (wifi_direct_discovery_state_chagned_cb cb, void *user_data)
1004 wifi_direct_client_info_s *client_info = __wfd_get_control();
1006 __WDC_LOG_FUNC_START__;
1010 WDC_LOGE("Callback is NULL.\n");
1011 __WDC_LOG_FUNC_END__;
1012 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1015 if (client_info->is_registered == false)
1017 WDC_LOGE("Client is not initialized.\n");
1018 __WDC_LOG_FUNC_END__;
1019 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1022 client_info->discover_cb = cb;
1023 client_info->user_data_for_cb_discover = user_data;
1025 return WIFI_DIRECT_ERROR_NONE;
1029 int wifi_direct_unset_discovery_state_changed_cb(void)
1031 wifi_direct_client_info_s *client_info = __wfd_get_control();
1033 __WDC_LOG_FUNC_START__;
1035 if (client_info->is_registered == false)
1037 WDC_LOGE("Client is not initialized.\n");
1038 __WDC_LOG_FUNC_END__;
1039 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1042 client_info->discover_cb = NULL;
1043 client_info->user_data_for_cb_discover = NULL;
1045 return WIFI_DIRECT_ERROR_NONE;
1050 wifi_direct_set_connection_state_changed_cb
1051 (wifi_direct_connection_state_changed_cb cb, void *user_data)
1053 wifi_direct_client_info_s *client_info = __wfd_get_control();
1055 __WDC_LOG_FUNC_START__;
1059 WDC_LOGE("Callback is NULL.\n");
1060 __WDC_LOG_FUNC_END__;
1061 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1064 if (client_info->is_registered == false)
1066 WDC_LOGE("Client is not initialized.\n");
1067 __WDC_LOG_FUNC_END__;
1068 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1071 client_info->connection_cb = cb;
1072 client_info->user_data_for_cb_connection = user_data;
1074 return WIFI_DIRECT_ERROR_NONE;
1078 int wifi_direct_unset_connection_state_changed_cb(void)
1080 wifi_direct_client_info_s *client_info = __wfd_get_control();
1082 __WDC_LOG_FUNC_START__;
1084 if (client_info->is_registered == false)
1086 WDC_LOGE("Client is not initialized.\n");
1087 __WDC_LOG_FUNC_END__;
1088 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1091 client_info->connection_cb = NULL;
1092 client_info->user_data_for_cb_connection = NULL;
1094 return WIFI_DIRECT_ERROR_NONE;
1098 int wifi_direct_set_client_ip_address_assigned_cb(wifi_direct_client_ip_address_assigned_cb cb, void* user_data)
1100 wifi_direct_client_info_s *client_info = __wfd_get_control();
1102 __WDC_LOG_FUNC_START__;
1106 WDC_LOGE("Callback is NULL.\n");
1107 __WDC_LOG_FUNC_END__;
1108 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1111 if (client_info->is_registered == false)
1113 WDC_LOGE("Client is not initialized.\n");
1114 __WDC_LOG_FUNC_END__;
1115 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1118 client_info->ip_assigned_cb = cb;
1119 client_info->user_data_for_cb_ip_assigned = user_data;
1121 return WIFI_DIRECT_ERROR_NONE;
1124 int wifi_direct_unset_client_ip_address_assigned_cb(void)
1126 wifi_direct_client_info_s *client_info = __wfd_get_control();
1128 __WDC_LOG_FUNC_START__;
1130 if (client_info->is_registered == false)
1132 WDC_LOGE("Client is not initialized.\n");
1133 __WDC_LOG_FUNC_END__;
1134 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1137 client_info->ip_assigned_cb = NULL;
1138 client_info->user_data_for_cb_ip_assigned = NULL;
1140 return WIFI_DIRECT_ERROR_NONE;
1144 int wifi_direct_activate(void)
1146 wifi_direct_client_info_s *client_info = __wfd_get_control();
1148 __WDC_LOG_FUNC_START__;
1150 if ((client_info->is_registered == false)
1151 || (client_info->client_id == WFD_INVALID_ID))
1153 WDC_LOGE("Client is NOT registered.\n");
1154 __WDC_LOG_FUNC_END__;
1155 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1158 wifi_direct_client_request_s req;
1159 wifi_direct_client_response_s rsp;
1161 int status = WIFI_DIRECT_ERROR_NONE;
1163 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1164 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1166 req.cmd = WIFI_DIRECT_CMD_ACTIVATE;
1167 req.client_id = client_info->client_id;
1170 __wfd_client_send_request(client_info->sync_sockfd, &req,
1171 sizeof(wifi_direct_client_request_s));
1172 if (status != WIFI_DIRECT_ERROR_NONE)
1174 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
1175 WDC_LOGE("Error!!! [%s]\n",
1176 __wfd_print_error(status));
1177 client_info->sync_sockfd = -1;
1178 __wfd_reset_control();
1179 __WDC_LOG_FUNC_END__;
1180 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1184 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1185 sizeof(wifi_direct_client_response_s))) <= 0)
1187 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
1188 client_info->sync_sockfd = -1;
1189 __wfd_reset_control();
1190 __WDC_LOG_FUNC_END__;
1191 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1195 if (rsp.cmd == WIFI_DIRECT_CMD_ACTIVATE)
1197 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1199 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1200 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
1201 __WDC_LOG_FUNC_END__;
1206 WDC_LOGE("Activating device is successfull.\n");
1211 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1213 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1217 __WDC_LOG_FUNC_END__;
1218 return WIFI_DIRECT_ERROR_NONE;
1221 int wifi_direct_deactivate(void)
1223 wifi_direct_client_info_s *client_info = __wfd_get_control();
1225 __WDC_LOG_FUNC_START__;
1227 if ((client_info->is_registered == false)
1228 || (client_info->client_id == WFD_INVALID_ID))
1230 WDC_LOGE("Client is NOT registered.\n");
1231 __WDC_LOG_FUNC_END__;
1232 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1235 wifi_direct_client_request_s req;
1236 wifi_direct_client_response_s rsp;
1238 int status = WIFI_DIRECT_ERROR_NONE;
1240 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1241 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1243 req.cmd = WIFI_DIRECT_CMD_DEACTIVATE;
1244 req.client_id = client_info->client_id;
1247 __wfd_client_send_request(client_info->sync_sockfd, &req,
1248 sizeof(wifi_direct_client_request_s));
1249 if (status != WIFI_DIRECT_ERROR_NONE)
1251 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
1252 WDC_LOGE("Error!!! [%s]\n",
1253 __wfd_print_error(status));
1254 client_info->sync_sockfd = -1;
1255 __wfd_reset_control();
1256 __WDC_LOG_FUNC_END__;
1257 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1261 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1262 sizeof(wifi_direct_client_response_s))) <= 0)
1264 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
1265 client_info->sync_sockfd = -1;
1266 __wfd_reset_control();
1267 __WDC_LOG_FUNC_END__;
1268 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1272 if (rsp.cmd == WIFI_DIRECT_CMD_DEACTIVATE)
1274 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1276 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1277 WDC_LOGE("Error!!! [%s]\n",
1278 __wfd_print_error(rsp.result));
1279 __WDC_LOG_FUNC_END__;
1284 WDC_LOGE("Device Deactivated! \n");
1289 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1291 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1295 __WDC_LOG_FUNC_END__;
1296 return WIFI_DIRECT_ERROR_NONE;
1299 int wifi_direct_start_discovery(bool listen_only, int timeout)
1301 wifi_direct_client_info_s *client_info = __wfd_get_control();
1303 __WDC_LOG_FUNC_START__;
1305 if ((client_info->is_registered == false)
1306 || (client_info->client_id == WFD_INVALID_ID))
1308 WDC_LOGE("Client is NOT registered.\n");
1309 __WDC_LOG_FUNC_END__;
1310 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1315 WDC_LOGE("Nagative value. Param [timeout]!\n");
1316 __WDC_LOG_FUNC_END__;
1317 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1320 wifi_direct_client_request_s req;
1321 wifi_direct_client_response_s rsp;
1323 int status = WIFI_DIRECT_ERROR_NONE;
1325 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1326 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1328 req.cmd = WIFI_DIRECT_CMD_START_DISCOVERY;
1329 req.client_id = client_info->client_id;
1330 req.data.listen_only = listen_only;
1331 req.data.timeout = timeout;
1333 WDC_LOGE("listen only (%d) timeout (%d) \n",
1334 listen_only, timeout);
1337 __wfd_client_send_request(client_info->sync_sockfd, &req,
1338 sizeof(wifi_direct_client_request_s));
1339 if (status != WIFI_DIRECT_ERROR_NONE)
1341 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
1342 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
1343 client_info->sync_sockfd = -1;
1344 __wfd_reset_control();
1345 __WDC_LOG_FUNC_END__;
1346 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1350 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1351 sizeof(wifi_direct_client_response_s))) <= 0)
1353 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
1354 client_info->sync_sockfd = -1;
1355 __wfd_reset_control();
1356 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1360 if (rsp.cmd == WIFI_DIRECT_CMD_START_DISCOVERY)
1362 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1364 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1365 WDC_LOGE("Error!!! [%s]\n",
1366 __wfd_print_error(rsp.result));
1367 __WDC_LOG_FUNC_END__;
1372 WDC_LOGE("wifi_direct_start_discovery() SUCCESS \n");
1377 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1379 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1383 __WDC_LOG_FUNC_END__;
1385 return WIFI_DIRECT_ERROR_NONE;
1388 int wifi_direct_cancel_discovery(void)
1390 wifi_direct_client_info_s *client_info = __wfd_get_control();
1392 __WDC_LOG_FUNC_START__;
1394 if ((client_info->is_registered == false)
1395 || (client_info->client_id == WFD_INVALID_ID))
1397 WDC_LOGE("Client is NOT registered.\n");
1398 __WDC_LOG_FUNC_END__;
1399 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1402 wifi_direct_client_request_s req;
1403 wifi_direct_client_response_s rsp;
1405 int status = WIFI_DIRECT_ERROR_NONE;
1407 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1408 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1410 req.cmd = WIFI_DIRECT_CMD_CANCEL_DISCOVERY;
1411 req.client_id = client_info->client_id;
1414 __wfd_client_send_request(client_info->sync_sockfd, &req,
1415 sizeof(wifi_direct_client_request_s));
1416 if (status != WIFI_DIRECT_ERROR_NONE)
1418 WDC_LOGE("Error!!! writing to socket, Errno = %s\n",
1420 WDC_LOGE("Error!!! [%s]\n",
1421 __wfd_print_error(status));
1422 client_info->sync_sockfd = -1;
1423 __wfd_reset_control();
1424 __WDC_LOG_FUNC_END__;
1425 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1429 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1430 sizeof(wifi_direct_client_response_s))) <= 0)
1432 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
1433 status, strerror(errno));
1434 client_info->sync_sockfd = -1;
1435 __wfd_reset_control();
1436 __WDC_LOG_FUNC_END__;
1437 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1441 if (rsp.cmd == WIFI_DIRECT_CMD_CANCEL_DISCOVERY)
1443 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1445 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1446 WDC_LOGE("Error!!! [%s]\n",
1447 __wfd_print_error(rsp.result));
1448 __WDC_LOG_FUNC_END__;
1453 WDC_LOGE("wifi_direct_cancel_discovery() SUCCESS \n");
1458 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1460 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1464 __WDC_LOG_FUNC_END__;
1466 return WIFI_DIRECT_ERROR_NONE;
1470 int wifi_direct_foreach_discovered_peers(wifi_direct_discovered_peer_cb callback, void *user_data)
1472 wifi_direct_client_info_s *client_info = __wfd_get_control();
1474 __WDC_LOG_FUNC_START__;
1476 if ((client_info->is_registered == false)
1477 || (client_info->client_id == WFD_INVALID_ID))
1479 WDC_LOGE("Client is NOT registered.\n");
1480 __WDC_LOG_FUNC_END__;
1481 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1484 if (callback == NULL)
1486 WDC_LOGE("NULL Param [callback]!\n");
1487 __WDC_LOG_FUNC_END__;
1488 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1491 wifi_direct_client_request_s req;
1492 wifi_direct_client_response_s rsp;
1495 int status = WIFI_DIRECT_ERROR_NONE;
1497 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1498 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1500 req.cmd = WIFI_DIRECT_CMD_GET_DISCOVERY_RESULT;
1501 req.client_id = client_info->client_id;
1504 __wfd_client_send_request(client_info->sync_sockfd, &req,
1505 sizeof(wifi_direct_client_request_s));
1506 if (status != WIFI_DIRECT_ERROR_NONE)
1508 WDC_LOGE("Error!!! writing to socket, Errno = %s\n",
1510 WDC_LOGE("Error!!! [%s]\n",
1511 __wfd_print_error(status));
1512 client_info->sync_sockfd = -1;
1513 __wfd_reset_control();
1514 __WDC_LOG_FUNC_END__;
1515 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1519 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1520 sizeof(wifi_direct_client_response_s))) <= 0)
1522 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
1523 status, strerror(errno));
1524 client_info->sync_sockfd = -1;
1525 __wfd_reset_control();
1526 __WDC_LOG_FUNC_END__;
1527 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1531 if (rsp.cmd == WIFI_DIRECT_CMD_GET_DISCOVERY_RESULT)
1533 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1535 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1536 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
1537 __WDC_LOG_FUNC_END__;
1542 int num = rsp.param1;
1544 wfd_discovery_entry_s *buff = NULL;
1546 WDC_LOGD("Num of found peers = %d \n",
1552 (wfd_discovery_entry_s *) malloc(num * sizeof (wfd_discovery_entry_s));
1555 WDC_LOGE("malloc() failed!!!.\n");
1556 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1560 __wfd_client_read_more_data(client_info->sync_sockfd,
1564 (wfd_discovery_entry_s));
1565 if (status != WIFI_DIRECT_ERROR_NONE)
1570 WDC_LOGE("socket read error.\n");
1571 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1575 __wfd_client_print_entry_list(buff, num);
1577 WDC_LOGD("wifi_direct_foreach_discovered_peers() SUCCESS\n");
1580 wifi_direct_discovered_peer_info_s *peer_list;
1582 for (i = 0; i < num; i++)
1584 peer_list = (wifi_direct_discovered_peer_info_s *) calloc(1, sizeof(wifi_direct_discovered_peer_info_s));
1585 peer_list->is_group_owner = buff[i].is_group_owner;
1586 peer_list->device_name = strdup(buff[i].device_name);
1587 peer_list->mac_address = (char *) calloc(1, 18);
1588 snprintf(peer_list->mac_address, 18, MACSTR, MAC2STR(buff[i].mac_address));
1589 peer_list->channel = buff[i].channel;
1590 peer_list->is_connected = buff[i].is_connected;
1591 peer_list->is_persistent_group_owner = buff[i].is_persistent_go;
1592 peer_list->interface_address = (char *) calloc(1, 18);
1593 snprintf(peer_list->interface_address, 18, MACSTR, MAC2STR(buff[i].intf_mac_address));
1594 peer_list->supported_wps_types= buff[i].wps_cfg_methods;
1595 peer_list->primary_device_type = buff[i].category;
1596 peer_list->secondary_device_type = buff[i].subcategory;
1598 if (!callback(peer_list, user_data))
1609 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1611 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1615 __WDC_LOG_FUNC_END__;
1617 return WIFI_DIRECT_ERROR_NONE;
1621 int wifi_direct_connect(const char *mac_address)
1623 wifi_direct_client_info_s *client_info = __wfd_get_control();
1624 unsigned char la_mac_addr[6];
1626 __WDC_LOG_FUNC_START__;
1628 if ((client_info->is_registered == false)
1629 || (client_info->client_id == WFD_INVALID_ID))
1631 WDC_LOGE("Client is NOT registered.\n");
1632 __WDC_LOG_FUNC_END__;
1633 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1636 if (mac_address == NULL)
1638 WDC_LOGE("mac_addr is NULL.\n");
1639 __WDC_LOG_FUNC_END__;
1640 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1643 wifi_direct_client_request_s req;
1644 wifi_direct_client_response_s rsp;
1646 int status = WIFI_DIRECT_ERROR_NONE;
1648 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1649 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1651 req.cmd = WIFI_DIRECT_CMD_CONNECT;
1652 req.client_id = client_info->client_id;
1654 macaddr_atoe(mac_address, la_mac_addr);
1656 req.data.mac_addr[0] = la_mac_addr[0];
1657 req.data.mac_addr[1] = la_mac_addr[1];
1658 req.data.mac_addr[2] = la_mac_addr[2];
1659 req.data.mac_addr[3] = la_mac_addr[3];
1660 req.data.mac_addr[4] = la_mac_addr[4];
1661 req.data.mac_addr[5] = la_mac_addr[5];
1665 __wfd_client_send_request(client_info->sync_sockfd, &req,
1666 sizeof(wifi_direct_client_request_s));
1667 if (status != WIFI_DIRECT_ERROR_NONE)
1669 WDC_LOGE("Error!!! writing to socket, Errno = %s\n",
1671 WDC_LOGE("Error!!! [%s]\n",
1672 __wfd_print_error(status));
1673 client_info->sync_sockfd = -1;
1674 __wfd_reset_control();
1675 __WDC_LOG_FUNC_END__;
1676 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1680 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1681 sizeof(wifi_direct_client_response_s))) <= 0)
1683 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
1684 status, strerror(errno));
1685 client_info->sync_sockfd = -1;
1686 __wfd_reset_control();
1687 __WDC_LOG_FUNC_END__;
1688 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1692 if (rsp.cmd == WIFI_DIRECT_CMD_CONNECT)
1694 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1696 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1697 WDC_LOGE("Error!!! [%s]\n",
1698 __wfd_print_error(rsp.result));
1699 __WDC_LOG_FUNC_END__;
1704 WDC_LOGD("wifi_direct_connect() SUCCESS \n");
1709 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1711 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1715 __WDC_LOG_FUNC_END__;
1717 return WIFI_DIRECT_ERROR_NONE;
1721 int wifi_direct_disconnect_all(void)
1723 wifi_direct_client_info_s *client_info = __wfd_get_control();
1725 __WDC_LOG_FUNC_START__;
1727 if ((client_info->is_registered == false)
1728 || (client_info->client_id == WFD_INVALID_ID))
1730 WDC_LOGE("Client is NOT registered.\n");
1731 __WDC_LOG_FUNC_END__;
1732 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1735 wifi_direct_client_request_s req;
1736 wifi_direct_client_response_s rsp;
1738 int status = WIFI_DIRECT_ERROR_NONE;
1740 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1741 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1743 req.cmd = WIFI_DIRECT_CMD_DISCONNECT_ALL;
1744 req.client_id = client_info->client_id;
1747 __wfd_client_send_request(client_info->sync_sockfd, &req,
1748 sizeof(wifi_direct_client_request_s));
1749 if (status != WIFI_DIRECT_ERROR_NONE)
1751 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
1752 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
1753 client_info->sync_sockfd = -1;
1754 __wfd_reset_control();
1755 __WDC_LOG_FUNC_END__;
1756 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1760 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1761 sizeof(wifi_direct_client_response_s))) <= 0)
1763 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
1764 client_info->sync_sockfd = -1;
1765 __wfd_reset_control();
1766 __WDC_LOG_FUNC_END__;
1767 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1771 if (rsp.cmd == WIFI_DIRECT_CMD_DISCONNECT_ALL)
1773 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1775 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1776 WDC_LOGE("Error!!! [%s]\n",
1777 __wfd_print_error(rsp.result));
1778 __WDC_LOG_FUNC_END__;
1783 WDC_LOGE("wifi_direct_disconnect_all() SUCCESS \n");
1788 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1790 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1794 __WDC_LOG_FUNC_END__;
1796 return WIFI_DIRECT_ERROR_NONE;
1800 int wifi_direct_disconnect(const char *mac_address)
1802 wifi_direct_client_info_s *client_info = __wfd_get_control();
1803 unsigned char la_mac_addr[6];
1805 __WDC_LOG_FUNC_START__;
1807 if (mac_address == NULL)
1809 WDC_LOGE("mac_address is NULL.\n");
1810 __WDC_LOG_FUNC_END__;
1811 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1814 if ((client_info->is_registered == false)
1815 || (client_info->client_id == WFD_INVALID_ID))
1817 WDC_LOGE("Client is NOT registered.\n");
1818 __WDC_LOG_FUNC_END__;
1819 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1822 wifi_direct_client_request_s req;
1823 wifi_direct_client_response_s rsp;
1825 int status = WIFI_DIRECT_ERROR_NONE;
1827 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1828 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1830 req.cmd = WIFI_DIRECT_CMD_DISCONNECT;
1831 req.client_id = client_info->client_id;
1833 macaddr_atoe(mac_address, la_mac_addr);
1835 req.data.mac_addr[0] = la_mac_addr[0];
1836 req.data.mac_addr[1] = la_mac_addr[1];
1837 req.data.mac_addr[2] = la_mac_addr[2];
1838 req.data.mac_addr[3] = la_mac_addr[3];
1839 req.data.mac_addr[4] = la_mac_addr[4];
1840 req.data.mac_addr[5] = la_mac_addr[5];
1843 __wfd_client_send_request(client_info->sync_sockfd, &req,
1844 sizeof(wifi_direct_client_request_s));
1845 if (status != WIFI_DIRECT_ERROR_NONE)
1847 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
1848 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
1849 client_info->sync_sockfd = -1;
1850 __wfd_reset_control();
1851 __WDC_LOG_FUNC_END__;
1852 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1856 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1857 sizeof(wifi_direct_client_response_s))) <= 0)
1859 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
1860 status, strerror(errno));
1861 client_info->sync_sockfd = -1;
1862 __wfd_reset_control();
1863 __WDC_LOG_FUNC_END__;
1864 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1868 if (rsp.cmd == WIFI_DIRECT_CMD_DISCONNECT)
1870 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1872 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1873 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
1874 __WDC_LOG_FUNC_END__;
1879 WDC_LOGE("wifi_direct_disconnect() SUCCESS \n");
1884 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1886 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1890 __WDC_LOG_FUNC_END__;
1892 return WIFI_DIRECT_ERROR_NONE;
1898 int wifi_direct_accept_connection(char *mac_address)
1900 wifi_direct_client_info_s *client_info = __wfd_get_control();
1901 unsigned char la_mac_addr[6];
1903 __WDC_LOG_FUNC_START__;
1905 if ((client_info->is_registered == false)
1906 || (client_info->client_id == WFD_INVALID_ID))
1908 WDC_LOGE("Client is NOT registered.\n");
1909 __WDC_LOG_FUNC_END__;
1910 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1913 if (mac_address == NULL)
1915 WDC_LOGE("mac_addr is NULL.\n");
1916 __WDC_LOG_FUNC_END__;
1917 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1920 wifi_direct_client_request_s req;
1921 wifi_direct_client_response_s rsp;
1923 int status = WIFI_DIRECT_ERROR_NONE;
1925 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1926 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1928 req.cmd = WIFI_DIRECT_CMD_SEND_CONNECT_REQ;
1929 req.client_id = client_info->client_id;
1931 macaddr_atoe(mac_address, la_mac_addr);
1933 req.data.mac_addr[0] = la_mac_addr[0];
1934 req.data.mac_addr[1] = la_mac_addr[1];
1935 req.data.mac_addr[2] = la_mac_addr[2];
1936 req.data.mac_addr[3] = la_mac_addr[3];
1937 req.data.mac_addr[4] = la_mac_addr[4];
1938 req.data.mac_addr[5] = la_mac_addr[5];
1941 __wfd_client_send_request(client_info->sync_sockfd, &req,
1942 sizeof(wifi_direct_client_request_s));
1943 if (status != WIFI_DIRECT_ERROR_NONE)
1945 WDC_LOGE("Error!!! writing to socket, Errno = %s\n",
1947 WDC_LOGE("Error!!! [%s]\n",
1948 __wfd_print_error(status));
1949 client_info->sync_sockfd = -1;
1950 __wfd_reset_control();
1951 __WDC_LOG_FUNC_END__;
1952 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1956 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1957 sizeof(wifi_direct_client_response_s))) <= 0)
1959 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
1960 status, strerror(errno));
1961 client_info->sync_sockfd = -1;
1962 __wfd_reset_control();
1963 __WDC_LOG_FUNC_END__;
1964 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1968 if (rsp.cmd == WIFI_DIRECT_CMD_SEND_CONNECT_REQ)
1970 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1972 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1973 WDC_LOGE("Error!!! [%s]\n",
1974 __wfd_print_error(rsp.result));
1975 __WDC_LOG_FUNC_END__;
1980 WDC_LOGE("wifi_direct_connect() SUCCESS \n");
1985 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1987 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1991 __WDC_LOG_FUNC_END__;
1993 return WIFI_DIRECT_ERROR_NONE;
1997 int wifi_direct_foreach_connected_peers(wifi_direct_connected_peer_cb callback, void *user_data)
1999 wifi_direct_client_info_s *client_info = __wfd_get_control();
2001 __WDC_LOG_FUNC_START__;
2003 if ((client_info->is_registered == false)
2004 || (client_info->client_id == WFD_INVALID_ID))
2006 WDC_LOGE("Client is NOT registered.\n");
2007 __WDC_LOG_FUNC_END__;
2008 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2011 if (callback == NULL)
2013 WDC_LOGE("NULL Param [callback]!\n");
2014 __WDC_LOG_FUNC_END__;
2015 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2018 wifi_direct_client_request_s req;
2019 wifi_direct_client_response_s rsp;
2022 int status = WIFI_DIRECT_ERROR_NONE;
2024 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2025 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2027 req.cmd = WIFI_DIRECT_CMD_GET_CONNECTED_PEERS_INFO;
2028 req.client_id = client_info->client_id;
2031 __wfd_client_send_request(client_info->sync_sockfd, &req,
2032 sizeof(wifi_direct_client_request_s));
2033 if (status != WIFI_DIRECT_ERROR_NONE)
2035 WDC_LOGE("Error!!! writing to socket, Errno = %s\n",
2037 WDC_LOGE("Error!!! [%s]\n",
2038 __wfd_print_error(status));
2039 client_info->sync_sockfd = -1;
2040 __wfd_reset_control();
2041 __WDC_LOG_FUNC_END__;
2042 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2046 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2047 sizeof(wifi_direct_client_response_s))) <= 0)
2049 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
2050 status, strerror(errno));
2051 client_info->sync_sockfd = -1;
2052 __wfd_reset_control();
2053 __WDC_LOG_FUNC_END__;
2054 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2058 if (rsp.cmd == WIFI_DIRECT_CMD_GET_CONNECTED_PEERS_INFO)
2060 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2062 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
2063 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
2064 __WDC_LOG_FUNC_END__;
2070 int num = rsp.param1;
2072 wfd_connected_peer_info_s *buff = NULL;
2074 WDC_LOGD("Num of connected peers = %d \n",
2080 (wfd_connected_peer_info_s *) malloc(num *
2082 (wfd_connected_peer_info_s));
2085 WDC_LOGE("malloc() failed!!!.\n");
2086 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2090 __wfd_client_read_more_data(client_info->sync_sockfd,
2094 (wfd_connected_peer_info_s));
2095 if (status != WIFI_DIRECT_ERROR_NONE)
2099 WDC_LOGE("socket read error.\n");
2100 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2104 __wfd_client_print_connected_peer_info(buff, num);
2106 WDC_LOGD("wifi_direct_foreach_connected_peers() SUCCESS\n");
2108 wifi_direct_connected_peer_info_s *peer_list;
2110 for (i = 0; i < num; i++)
2112 peer_list = (wifi_direct_connected_peer_info_s *) calloc(1, sizeof(wifi_direct_connected_peer_info_s));
2113 peer_list->device_name = strdup(buff[i].device_name);
2114 peer_list->ip_address= (char *) calloc(1, 16);
2115 snprintf(peer_list->ip_address, 16, IPSTR, IP2STR(buff[i].ip_address));
2116 peer_list->mac_address = (char *) calloc(1, 18);
2117 snprintf(peer_list->mac_address, 18, MACSTR, MAC2STR(buff[i].mac_address));
2118 peer_list->interface_address = (char *) calloc(1, 18);
2119 snprintf(peer_list->interface_address, 18, MACSTR, MAC2STR(buff[i].intf_mac_address));
2120 peer_list->p2p_supported = buff[i].is_p2p;
2121 peer_list->primary_device_type = buff[i].category;
2122 peer_list->channel = buff[i].channel;
2124 if (!callback(peer_list, user_data))
2135 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2137 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2141 __WDC_LOG_FUNC_END__;
2143 return WIFI_DIRECT_ERROR_NONE;
2147 int wifi_direct_create_group(void)
2149 wifi_direct_client_info_s *client_info = __wfd_get_control();
2151 __WDC_LOG_FUNC_START__;
2153 if ((client_info->is_registered == false)
2154 || (client_info->client_id == WFD_INVALID_ID))
2156 WDC_LOGE("Client is NOT registered.\n");
2157 __WDC_LOG_FUNC_END__;
2158 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2161 wifi_direct_client_request_s req;
2162 wifi_direct_client_response_s rsp;
2164 int status = WIFI_DIRECT_ERROR_NONE;
2166 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2167 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2169 req.cmd = WIFI_DIRECT_CMD_CREATE_GROUP;
2170 req.client_id = client_info->client_id;
2173 __wfd_client_send_request(client_info->sync_sockfd, &req,
2174 sizeof(wifi_direct_client_request_s));
2175 if (status != WIFI_DIRECT_ERROR_NONE)
2177 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2178 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2179 client_info->sync_sockfd = -1;
2180 __wfd_reset_control();
2181 __WDC_LOG_FUNC_END__;
2182 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2186 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2187 sizeof(wifi_direct_client_response_s))) <= 0)
2189 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
2190 status, strerror(errno));
2191 client_info->sync_sockfd = -1;
2192 __wfd_reset_control();
2193 __WDC_LOG_FUNC_END__;
2194 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2198 if (rsp.cmd == WIFI_DIRECT_CMD_CREATE_GROUP)
2200 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2202 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
2203 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
2204 __WDC_LOG_FUNC_END__;
2209 WDC_LOGE("wifi_direct_create_group() SUCCESS \n");
2214 WDC_LOGE("Error!!! Invalid resp cmd = %d\n", rsp.cmd);
2215 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2219 __WDC_LOG_FUNC_END__;
2221 return WIFI_DIRECT_ERROR_NONE;
2225 int wifi_direct_destroy_group(void)
2227 wifi_direct_client_info_s *client_info = __wfd_get_control();
2229 __WDC_LOG_FUNC_START__;
2231 if ((client_info->is_registered == false)
2232 || (client_info->client_id == WFD_INVALID_ID))
2234 WDC_LOGE("Client is NOT registered.\n");
2235 __WDC_LOG_FUNC_END__;
2236 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2239 wifi_direct_client_request_s req;
2240 wifi_direct_client_response_s rsp;
2242 int status = WIFI_DIRECT_ERROR_NONE;
2244 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2245 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2247 req.cmd = WIFI_DIRECT_CMD_CANCEL_GROUP;
2248 req.client_id = client_info->client_id;
2251 __wfd_client_send_request(client_info->sync_sockfd, &req,
2252 sizeof(wifi_direct_client_request_s));
2253 if (status != WIFI_DIRECT_ERROR_NONE)
2255 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2256 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2257 client_info->sync_sockfd = -1;
2258 __wfd_reset_control();
2259 __WDC_LOG_FUNC_END__;
2260 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2264 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2265 sizeof(wifi_direct_client_response_s))) <= 0)
2267 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
2268 status, strerror(errno));
2269 client_info->sync_sockfd = -1;
2270 __wfd_reset_control();
2271 __WDC_LOG_FUNC_END__;
2272 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2276 if (rsp.cmd == WIFI_DIRECT_CMD_CANCEL_GROUP)
2278 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2280 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
2281 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
2282 __WDC_LOG_FUNC_END__;
2287 WDC_LOGE("wifi_direct_destroy_group() SUCCESS \n");
2292 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2294 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2298 __WDC_LOG_FUNC_END__;
2300 return WIFI_DIRECT_ERROR_NONE;
2304 int wifi_direct_is_group_owner(bool * owner)
2306 wifi_direct_client_info_s *client_info = __wfd_get_control();
2308 __WDC_LOG_FUNC_START__;
2312 WDC_LOGE("NULL Param [owner]!\n");
2313 __WDC_LOG_FUNC_END__;
2314 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2317 if ((client_info->is_registered == false)
2318 || (client_info->client_id == WFD_INVALID_ID))
2320 WDC_LOGE("Client is NOT registered.\n");
2321 __WDC_LOG_FUNC_END__;
2322 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2325 wifi_direct_client_request_s req;
2326 wifi_direct_client_response_s rsp;
2328 int status = WIFI_DIRECT_ERROR_NONE;
2330 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2331 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2333 req.cmd = WIFI_DIRECT_CMD_IS_GROUPOWNER;
2334 req.client_id = client_info->client_id;
2337 __wfd_client_send_request(client_info->sync_sockfd, &req,
2338 sizeof(wifi_direct_client_request_s));
2339 if (status != WIFI_DIRECT_ERROR_NONE)
2341 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2342 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2343 client_info->sync_sockfd = -1;
2344 __wfd_reset_control();
2345 __WDC_LOG_FUNC_END__;
2346 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2350 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2351 sizeof(wifi_direct_client_response_s))) <= 0)
2353 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
2354 client_info->sync_sockfd = -1;
2355 __wfd_reset_control();
2356 __WDC_LOG_FUNC_END__;
2357 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2361 if (rsp.cmd == WIFI_DIRECT_CMD_IS_GROUPOWNER)
2363 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2365 WDC_LOGD("Error!!! Result received = %d \n",
2367 WDC_LOGD("Error!!! [%s]\n",
2368 __wfd_print_error(rsp.result));
2369 __WDC_LOG_FUNC_END__;
2374 WDC_LOGD("wifi_direct_is_group_owner() %s SUCCESS \n", rsp.param2);
2375 *owner = (bool) rsp.param1;
2380 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2382 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2386 __WDC_LOG_FUNC_END__;
2388 return WIFI_DIRECT_ERROR_NONE;
2393 int wifi_direct_is_autonomous_group(bool * autonomous_group)
2395 wifi_direct_client_info_s *client_info = __wfd_get_control();
2397 __WDC_LOG_FUNC_START__;
2399 if (autonomous_group == NULL)
2401 WDC_LOGE("NULL Param [autonomous_group]!\n");
2402 __WDC_LOG_FUNC_END__;
2403 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2406 if ((client_info->is_registered == false)
2407 || (client_info->client_id == WFD_INVALID_ID))
2409 WDC_LOGE("Client is NOT registered.\n");
2410 __WDC_LOG_FUNC_END__;
2411 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2414 wifi_direct_client_request_s req;
2415 wifi_direct_client_response_s rsp;
2417 int status = WIFI_DIRECT_ERROR_NONE;
2419 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2420 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2422 req.cmd = WIFI_DIRECT_CMD_IS_AUTONOMOUS_GROUP;
2423 req.client_id = client_info->client_id;
2426 __wfd_client_send_request(client_info->sync_sockfd, &req,
2427 sizeof(wifi_direct_client_request_s));
2428 if (status != WIFI_DIRECT_ERROR_NONE)
2430 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2431 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2432 client_info->sync_sockfd = -1;
2433 __wfd_reset_control();
2434 __WDC_LOG_FUNC_END__;
2435 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2439 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2440 sizeof(wifi_direct_client_response_s))) <= 0)
2442 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
2443 status, strerror(errno));
2444 client_info->sync_sockfd = -1;
2445 __wfd_reset_control();
2446 __WDC_LOG_FUNC_END__;
2447 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2451 if (rsp.cmd == WIFI_DIRECT_CMD_IS_AUTONOMOUS_GROUP)
2453 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2455 WDC_LOGD("Error!!! Result received = %d \n", rsp.result);
2456 WDC_LOGD("Error!!! [%s]\n", __wfd_print_error(rsp.result));
2457 __WDC_LOG_FUNC_END__;
2462 WDC_LOGD("wifi_direct_is_autonomous_group() %s SUCCESS \n", rsp.param2);
2463 *autonomous_group = (bool) rsp.param1;
2468 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2470 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2474 __WDC_LOG_FUNC_END__;
2476 return WIFI_DIRECT_ERROR_NONE;
2481 int wifi_direct_set_group_owner_intent(int intent)
2483 wifi_direct_client_info_s *client_info = __wfd_get_control();
2485 __WDC_LOG_FUNC_START__;
2487 if ((client_info->is_registered == false)
2488 || (client_info->client_id == WFD_INVALID_ID))
2490 WDC_LOGE("Client is NOT registered.\n");
2491 __WDC_LOG_FUNC_END__;
2492 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2495 if (intent < 0 || intent > 15)
2497 WDC_LOGE("Invalid Param : intent[%d]\n", intent);
2498 __WDC_LOG_FUNC_END__;
2499 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2502 wifi_direct_client_request_s req;
2503 wifi_direct_client_response_s rsp;
2505 int status = WIFI_DIRECT_ERROR_NONE;
2507 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2508 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2510 req.cmd = WIFI_DIRECT_CMD_SET_GO_INTENT;
2511 req.client_id = client_info->client_id;
2513 status =__wfd_client_send_request(client_info->sync_sockfd, &req,
2514 sizeof(wifi_direct_client_request_s));
2515 if (status != WIFI_DIRECT_ERROR_NONE)
2517 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2518 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2519 client_info->sync_sockfd = -1;
2520 __wfd_reset_control();
2521 __WDC_LOG_FUNC_END__;
2522 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2525 WDC_LOGD("writing msg hdr is success!\n");
2528 __wfd_client_send_request(client_info->sync_sockfd, &intent,
2530 if (status != WIFI_DIRECT_ERROR_NONE)
2532 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2533 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2534 client_info->sync_sockfd = -1;
2535 __wfd_reset_control();
2536 __WDC_LOG_FUNC_END__;
2537 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2541 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2542 sizeof(wifi_direct_client_response_s))) <= 0)
2544 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
2545 client_info->sync_sockfd = -1;
2546 __wfd_reset_control();
2547 __WDC_LOG_FUNC_END__;
2548 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2552 if (rsp.cmd == WIFI_DIRECT_CMD_SET_GO_INTENT)
2554 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2556 WDC_LOGD("Error!!! Result received = %d \n",
2558 WDC_LOGD("Error!!! [%s]\n",
2559 __wfd_print_error(rsp.result));
2560 __WDC_LOG_FUNC_END__;
2566 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2568 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2572 __WDC_LOG_FUNC_END__;
2574 return WIFI_DIRECT_ERROR_NONE;
2578 int wifi_direct_get_group_owner_intent(int* intent)
2580 wifi_direct_client_info_s *client_info = __wfd_get_control();
2582 __WDC_LOG_FUNC_START__;
2584 if ((client_info->is_registered == false)
2585 || (client_info->client_id == WFD_INVALID_ID))
2587 WDC_LOGE("Client is NOT registered.\n");
2588 __WDC_LOG_FUNC_END__;
2589 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2592 wifi_direct_client_request_s req;
2593 wifi_direct_client_response_s rsp;
2595 int status = WIFI_DIRECT_ERROR_NONE;
2597 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2598 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2600 req.cmd = WIFI_DIRECT_CMD_GET_GO_INTENT;
2601 req.client_id = client_info->client_id;
2604 __wfd_client_send_request(client_info->sync_sockfd, &req,
2605 sizeof(wifi_direct_client_request_s));
2606 if (status != WIFI_DIRECT_ERROR_NONE)
2608 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2609 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2610 client_info->sync_sockfd = -1;
2611 __wfd_reset_control();
2612 __WDC_LOG_FUNC_END__;
2613 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2617 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2618 sizeof(wifi_direct_client_response_s))) <= 0)
2620 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
2621 client_info->sync_sockfd = -1;
2622 __wfd_reset_control();
2623 __WDC_LOG_FUNC_END__;
2624 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2628 if (rsp.cmd == WIFI_DIRECT_CMD_GET_GO_INTENT)
2630 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2632 WDC_LOGD("Error!!! Result received = %d \n",
2634 WDC_LOGD("Error!!! [%s]\n",
2635 __wfd_print_error(rsp.result));
2636 __WDC_LOG_FUNC_END__;
2641 WDC_LOGD("int wifi_direct_get_group_owner_intent() intent[%d] SUCCESS \n", rsp.param1);
2642 *intent = rsp.param1;
2647 WDC_LOGE("Error!!! Invalid resp cmd = %d\n", rsp.cmd);
2648 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2652 __WDC_LOG_FUNC_END__;
2654 return WIFI_DIRECT_ERROR_NONE;
2657 int wifi_direct_set_max_clients(int max)
2659 wifi_direct_client_info_s *client_info = __wfd_get_control();
2661 __WDC_LOG_FUNC_START__;
2663 if ((client_info->is_registered == false)
2664 || (client_info->client_id == WFD_INVALID_ID))
2666 WDC_LOGE("Client is NOT registered.\n");
2667 __WDC_LOG_FUNC_END__;
2668 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2671 WDC_LOGD("max client [%d]\n", max);
2673 wifi_direct_client_request_s req;
2674 wifi_direct_client_response_s rsp;
2676 int status = WIFI_DIRECT_ERROR_NONE;
2678 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2679 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2681 req.cmd = WIFI_DIRECT_CMD_SET_MAX_CLIENT;
2682 req.client_id = client_info->client_id;
2684 status =__wfd_client_send_request(client_info->sync_sockfd, &req,
2685 sizeof(wifi_direct_client_request_s));
2686 if (status != WIFI_DIRECT_ERROR_NONE)
2688 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2689 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2690 client_info->sync_sockfd = -1;
2691 __wfd_reset_control();
2692 __WDC_LOG_FUNC_END__;
2693 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2696 WDC_LOGD("writing msg hdr is success!\n");
2699 __wfd_client_send_request(client_info->sync_sockfd, &max,
2701 if (status != WIFI_DIRECT_ERROR_NONE)
2703 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2704 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2705 client_info->sync_sockfd = -1;
2706 __wfd_reset_control();
2707 __WDC_LOG_FUNC_END__;
2708 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2712 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2713 sizeof(wifi_direct_client_response_s))) <= 0)
2715 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
2716 client_info->sync_sockfd = -1;
2717 __wfd_reset_control();
2718 __WDC_LOG_FUNC_END__;
2719 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2723 if (rsp.cmd == WIFI_DIRECT_CMD_SET_MAX_CLIENT)
2725 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2727 WDC_LOGD("Error!!! Result received = %d \n",
2729 WDC_LOGD("Error!!! [%s]\n",
2730 __wfd_print_error(rsp.result));
2731 __WDC_LOG_FUNC_END__;
2737 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2739 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2743 __WDC_LOG_FUNC_END__;
2745 return WIFI_DIRECT_ERROR_NONE;
2748 int wifi_direct_get_max_clients(int* max)
2750 wifi_direct_client_info_s *client_info = __wfd_get_control();
2752 __WDC_LOG_FUNC_START__;
2754 if ((client_info->is_registered == false)
2755 || (client_info->client_id == WFD_INVALID_ID))
2757 WDC_LOGE("Client is NOT registered.\n");
2758 __WDC_LOG_FUNC_END__;
2759 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2762 wifi_direct_client_request_s req;
2763 wifi_direct_client_response_s rsp;
2765 int status = WIFI_DIRECT_ERROR_NONE;
2767 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2768 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2770 req.cmd = WIFI_DIRECT_CMD_GET_MAX_CLIENT;
2771 req.client_id = client_info->client_id;
2774 __wfd_client_send_request(client_info->sync_sockfd, &req,
2775 sizeof(wifi_direct_client_request_s));
2776 if (status != WIFI_DIRECT_ERROR_NONE)
2778 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2779 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2780 client_info->sync_sockfd = -1;
2781 __wfd_reset_control();
2782 __WDC_LOG_FUNC_END__;
2783 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2787 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2788 sizeof(wifi_direct_client_response_s))) <= 0)
2790 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
2791 client_info->sync_sockfd = -1;
2792 __wfd_reset_control();
2793 __WDC_LOG_FUNC_END__;
2794 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2798 if (rsp.cmd == WIFI_DIRECT_CMD_GET_MAX_CLIENT)
2800 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2802 WDC_LOGD("Error!!! Result received = %d \n",
2804 WDC_LOGD("Error!!! [%s]\n",
2805 __wfd_print_error(rsp.result));
2806 __WDC_LOG_FUNC_END__;
2811 WDC_LOGD("int wifi_direct_get_max_clients() max_client[%d] SUCCESS \n", rsp.param1);
2817 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2819 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2823 __WDC_LOG_FUNC_END__;
2825 return WIFI_DIRECT_ERROR_NONE;
2830 int wifi_direct_get_own_group_channel(int* channel)
2832 wifi_direct_client_info_s *client_info = __wfd_get_control();
2834 __WDC_LOG_FUNC_START__;
2836 if ((client_info->is_registered == false)
2837 || (client_info->client_id == WFD_INVALID_ID))
2839 WDC_LOGE("Client is NOT registered.\n");
2840 __WDC_LOG_FUNC_END__;
2841 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2844 wifi_direct_client_request_s req;
2845 wifi_direct_client_response_s rsp;
2847 int ret = WIFI_DIRECT_ERROR_NONE;
2849 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2850 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2852 req.cmd = WIFI_DIRECT_CMD_GET_OWN_GROUP_CHANNEL;
2853 req.client_id = client_info->client_id;
2856 __wfd_client_send_request(client_info->sync_sockfd, &req,
2857 sizeof(wifi_direct_client_request_s));
2858 if (ret != WIFI_DIRECT_ERROR_NONE)
2860 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2861 WDC_LOGE("Error!!! [%s]\n",
2862 __wfd_print_error(ret));
2863 client_info->sync_sockfd = -1;
2864 __wfd_reset_control();
2865 __WDC_LOG_FUNC_END__;
2866 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2870 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2871 sizeof(wifi_direct_client_response_s))) <= 0)
2873 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", ret, strerror(errno));
2874 client_info->sync_sockfd = -1;
2875 __wfd_reset_control();
2876 __WDC_LOG_FUNC_END__;
2877 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2881 if (rsp.cmd == WIFI_DIRECT_CMD_GET_OWN_GROUP_CHANNEL)
2883 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2885 WDC_LOGD("Error!!! Result received = %d \n",
2887 WDC_LOGD("Error!!! [%s]\n",
2888 __wfd_print_error(rsp.result));
2889 __WDC_LOG_FUNC_END__;
2894 WDC_LOGD("channel = [%d]\n",
2896 *channel = rsp.param1;
2901 WDC_LOGE("Error!!! Invalid resp cmd = %d\n", rsp.cmd);
2902 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2906 __WDC_LOG_FUNC_END__;
2908 return WIFI_DIRECT_ERROR_NONE;
2913 int wifi_direct_get_operating_channel(int* channel)
2915 wifi_direct_client_info_s *client_info = __wfd_get_control();
2917 __WDC_LOG_FUNC_START__;
2919 if ((client_info->is_registered == false)
2920 || (client_info->client_id == WFD_INVALID_ID))
2922 WDC_LOGE("Client is NOT registered.\n");
2923 __WDC_LOG_FUNC_END__;
2924 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2927 wifi_direct_client_request_s req;
2928 wifi_direct_client_response_s rsp;
2930 int ret = WIFI_DIRECT_ERROR_NONE;
2932 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2933 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2935 req.cmd = WIFI_DIRECT_CMD_GET_OWN_GROUP_CHANNEL;
2936 req.client_id = client_info->client_id;
2939 __wfd_client_send_request(client_info->sync_sockfd, &req,
2940 sizeof(wifi_direct_client_request_s));
2941 if (ret != WIFI_DIRECT_ERROR_NONE)
2943 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2944 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(ret));
2945 client_info->sync_sockfd = -1;
2946 __wfd_reset_control();
2947 __WDC_LOG_FUNC_END__;
2948 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2952 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2953 sizeof(wifi_direct_client_response_s))) <= 0)
2955 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", ret, strerror(errno));
2956 client_info->sync_sockfd = -1;
2957 __wfd_reset_control();
2958 __WDC_LOG_FUNC_END__;
2959 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2963 if (rsp.cmd == WIFI_DIRECT_CMD_GET_OWN_GROUP_CHANNEL)
2965 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2967 WDC_LOGD("Error!!! Result received = %d \n", rsp.result);
2968 WDC_LOGD("Error!!! [%s]\n", __wfd_print_error(rsp.result));
2969 __WDC_LOG_FUNC_END__;
2974 WDC_LOGD("channel = [%d]\n", (int) rsp.param1);
2975 *channel = rsp.param1;
2980 WDC_LOGE("Error!!! Invalid resp cmd = %d\n", rsp.cmd);
2981 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2985 __WDC_LOG_FUNC_END__;
2987 return WIFI_DIRECT_ERROR_NONE;
2992 int wifi_direct_set_wpa_passphrase(char *passphrase)
2994 wifi_direct_client_info_s *client_info = __wfd_get_control();
2996 __WDC_LOG_FUNC_START__;
2998 if ((client_info->is_registered == false)
2999 || (client_info->client_id == WFD_INVALID_ID))
3001 WDC_LOGE("Client is NOT registered.\n");
3002 __WDC_LOG_FUNC_END__;
3003 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3006 if (NULL == passphrase)
3008 WDC_LOGE("NULL Param [passphrase]!\n");
3009 __WDC_LOG_FUNC_END__;
3010 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3013 WDC_LOGE("passphrase = [%s]\n", passphrase);
3015 wifi_direct_client_request_s req;
3016 wifi_direct_client_response_s rsp;
3018 int status = WIFI_DIRECT_ERROR_NONE;
3020 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3021 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3023 req.cmd = WIFI_DIRECT_CMD_SET_WPA;
3024 req.client_id = client_info->client_id;
3027 __wfd_client_send_request(client_info->sync_sockfd, &req,
3028 sizeof(wifi_direct_client_request_s));
3029 if (status != WIFI_DIRECT_ERROR_NONE)
3031 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3032 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3033 client_info->sync_sockfd = -1;
3034 __wfd_reset_control();
3035 __WDC_LOG_FUNC_END__;
3036 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3039 WDC_LOGD("writing msg hdr is success!\n");
3042 __wfd_client_send_request(client_info->sync_sockfd, passphrase, 64);
3043 if (status != WIFI_DIRECT_ERROR_NONE)
3045 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3046 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3047 client_info->sync_sockfd = -1;
3048 __wfd_reset_control();
3049 __WDC_LOG_FUNC_END__;
3050 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3054 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3055 sizeof(wifi_direct_client_response_s))) <= 0)
3057 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3058 client_info->sync_sockfd = -1;
3059 __wfd_reset_control();
3060 __WDC_LOG_FUNC_END__;
3061 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3065 if (rsp.cmd == WIFI_DIRECT_CMD_SET_WPA)
3067 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3069 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
3070 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
3071 __WDC_LOG_FUNC_END__;
3077 WDC_LOGE("Error!!! Invalid resp cmd = %d\n", rsp.cmd);
3078 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3082 __WDC_LOG_FUNC_END__;
3084 return WIFI_DIRECT_ERROR_NONE;
3088 int wifi_direct_activate_pushbutton(void)
3090 wifi_direct_client_info_s *client_info = __wfd_get_control();
3092 __WDC_LOG_FUNC_START__;
3094 if ((client_info->is_registered == false)
3095 || (client_info->client_id == WFD_INVALID_ID))
3097 WDC_LOGE("Client is NOT registered.\n");
3098 __WDC_LOG_FUNC_END__;
3099 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3102 wifi_direct_client_request_s req;
3103 wifi_direct_client_response_s rsp;
3105 int status = WIFI_DIRECT_ERROR_NONE;
3107 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3108 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3110 req.cmd = WIFI_DIRECT_CMD_ACTIVATE_PUSHBUTTON;
3111 req.client_id = client_info->client_id;
3114 __wfd_client_send_request(client_info->sync_sockfd, &req,
3115 sizeof(wifi_direct_client_request_s));
3116 if (status != WIFI_DIRECT_ERROR_NONE)
3118 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3119 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3120 client_info->sync_sockfd = -1;
3121 __wfd_reset_control();
3122 __WDC_LOG_FUNC_END__;
3123 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3127 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3128 sizeof(wifi_direct_client_response_s))) <= 0)
3130 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
3131 status, strerror(errno));
3132 client_info->sync_sockfd = -1;
3133 __wfd_reset_control();
3134 __WDC_LOG_FUNC_END__;
3135 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3139 if (rsp.cmd == WIFI_DIRECT_CMD_ACTIVATE_PUSHBUTTON)
3141 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3143 WDC_LOGD("Error!!! Result received = %d \n",
3145 WDC_LOGD("Error!!! [%s]\n",
3146 __wfd_print_error(rsp.result));
3147 __WDC_LOG_FUNC_END__;
3152 WDC_LOGD("wifi_direct_activate_pushbutton() SUCCESS");
3157 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3159 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3163 __WDC_LOG_FUNC_END__;
3165 return WIFI_DIRECT_ERROR_NONE;
3169 int wifi_direct_set_wps_pin(char *pin)
3172 wifi_direct_client_info_s *client_info = __wfd_get_control();
3174 __WDC_LOG_FUNC_START__;
3176 if ((client_info->is_registered == false)
3177 || (client_info->client_id == WFD_INVALID_ID))
3179 WDC_LOGE("Client is NOT registered.\n");
3180 __WDC_LOG_FUNC_END__;
3181 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3186 WDC_LOGE("NULL Param [pin]!\n");
3187 __WDC_LOG_FUNC_END__;
3188 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3190 WDC_LOGE("pin = [%s]\n", pin);
3192 wifi_direct_client_request_s req;
3193 wifi_direct_client_response_s rsp;
3195 int status = WIFI_DIRECT_ERROR_NONE;
3197 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3198 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3200 req.cmd = WIFI_DIRECT_CMD_SET_WPS_PIN;
3201 req.client_id = client_info->client_id;
3204 __wfd_client_send_request(client_info->sync_sockfd, &req,
3205 sizeof(wifi_direct_client_request_s));
3206 if (status != WIFI_DIRECT_ERROR_NONE)
3208 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3209 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3210 client_info->sync_sockfd = -1;
3211 __wfd_reset_control();
3212 __WDC_LOG_FUNC_END__;
3213 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3216 WDC_LOGD("writing msg hdr is success!\n");
3219 __wfd_client_send_request(client_info->sync_sockfd, pin,
3220 WIFI_DIRECT_WPS_PIN_LEN);
3221 if (status != WIFI_DIRECT_ERROR_NONE)
3223 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3224 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3225 client_info->sync_sockfd = -1;
3226 __wfd_reset_control();
3227 __WDC_LOG_FUNC_END__;
3228 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3232 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3233 sizeof(wifi_direct_client_response_s))) <= 0)
3235 WDC_LOGE( "Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3236 __WDC_LOG_FUNC_END__;
3237 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3241 if (rsp.cmd == WIFI_DIRECT_CMD_SET_WPS_PIN)
3243 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3245 WDC_LOGD("Error!!! Result received = %d \n",
3247 WDC_LOGD("Error!!! [%s]\n",
3248 __wfd_print_error(rsp.result));
3249 __WDC_LOG_FUNC_END__;
3255 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3257 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3261 __WDC_LOG_FUNC_END__;
3263 return WIFI_DIRECT_ERROR_NONE;
3267 int wifi_direct_get_wps_pin(char **pin)
3269 wifi_direct_client_info_s *client_info = __wfd_get_control();
3271 __WDC_LOG_FUNC_START__;
3273 if ((client_info->is_registered == false)
3274 || (client_info->client_id == WFD_INVALID_ID))
3276 WDC_LOGE("Client is NOT registered.\n");
3277 __WDC_LOG_FUNC_END__;
3278 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3281 wifi_direct_client_request_s req;
3282 wifi_direct_client_response_s rsp;
3283 char la_pin[WIFI_DIRECT_WPS_PIN_LEN + 1] = { 0, };
3285 int status = WIFI_DIRECT_ERROR_NONE;
3287 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3288 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3290 req.cmd = WIFI_DIRECT_CMD_GET_WPS_PIN;
3291 req.client_id = client_info->client_id;
3294 __wfd_client_send_request(client_info->sync_sockfd, &req,
3295 sizeof(wifi_direct_client_request_s));
3296 if (status != WIFI_DIRECT_ERROR_NONE)
3298 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3299 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3300 client_info->sync_sockfd = -1;
3301 __wfd_reset_control();
3302 __WDC_LOG_FUNC_END__;
3303 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3307 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3308 sizeof(wifi_direct_client_response_s))) <= 0)
3310 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3311 client_info->sync_sockfd = -1;
3312 __wfd_reset_control();
3313 __WDC_LOG_FUNC_END__;
3314 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3318 if (rsp.cmd == WIFI_DIRECT_CMD_GET_WPS_PIN)
3320 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3322 WDC_LOGD("Error!!! Result received = %d \n",
3324 WDC_LOGD("Error!!! [%s]\n",
3325 __wfd_print_error(rsp.result));
3326 __WDC_LOG_FUNC_END__;
3331 WDC_LOGD("wifi_direct_get_wps_pin() SUCCESS");
3332 strncpy(la_pin, rsp.param2, WIFI_DIRECT_WPS_PIN_LEN);
3335 temp_pin = strdup(la_pin);
3342 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3344 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3348 __WDC_LOG_FUNC_END__;
3350 return WIFI_DIRECT_ERROR_NONE;
3354 int wifi_direct_generate_wps_pin(void)
3356 wifi_direct_client_info_s *client_info = __wfd_get_control();
3358 __WDC_LOG_FUNC_START__;
3360 if ((client_info->is_registered == false)
3361 || (client_info->client_id == WFD_INVALID_ID))
3363 WDC_LOGE("Client is NOT registered.\n");
3364 __WDC_LOG_FUNC_END__;
3365 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3368 wifi_direct_client_request_s req;
3369 wifi_direct_client_response_s rsp;
3371 int status = WIFI_DIRECT_ERROR_NONE;
3373 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3374 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3376 req.cmd = WIFI_DIRECT_CMD_GENERATE_WPS_PIN;
3377 req.client_id = client_info->client_id;
3380 __wfd_client_send_request(client_info->sync_sockfd, &req,
3381 sizeof(wifi_direct_client_request_s));
3382 if (status != WIFI_DIRECT_ERROR_NONE)
3384 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3385 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3386 client_info->sync_sockfd = -1;
3387 __wfd_reset_control();
3388 __WDC_LOG_FUNC_END__;
3389 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3393 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3394 sizeof(wifi_direct_client_response_s))) <= 0)
3396 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3397 client_info->sync_sockfd = -1;
3398 __wfd_reset_control();
3399 __WDC_LOG_FUNC_END__;
3400 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3404 if (rsp.cmd == WIFI_DIRECT_CMD_GENERATE_WPS_PIN)
3406 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3408 WDC_LOGD("Error!!! Result received = %d",
3410 WDC_LOGD("Error!!! [%s]\n",
3411 __wfd_print_error(rsp.result));
3412 __WDC_LOG_FUNC_END__;
3417 WDC_LOGD("wifi_direct_generate_wps_pin() SUCCESS");
3422 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3424 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3428 __WDC_LOG_FUNC_END__;
3430 return WIFI_DIRECT_ERROR_NONE;
3434 int wifi_direct_get_supported_wps_mode(int *wps_mode)
3436 wifi_direct_client_info_s *client_info = __wfd_get_control();
3438 __WDC_LOG_FUNC_START__;
3440 if ((client_info->is_registered == false)
3441 || (client_info->client_id == WFD_INVALID_ID))
3443 WDC_LOGE("Client is NOT registered.\n");
3444 __WDC_LOG_FUNC_END__;
3445 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3448 wifi_direct_client_request_s req;
3449 wifi_direct_client_response_s rsp;
3451 int ret = WIFI_DIRECT_ERROR_NONE;
3453 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3454 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3456 req.cmd = WIFI_DIRECT_CMD_GET_SUPPORTED_WPS_MODE;
3457 req.client_id = client_info->client_id;
3460 __wfd_client_send_request(client_info->sync_sockfd, &req,
3461 sizeof(wifi_direct_client_request_s));
3462 if (ret != WIFI_DIRECT_ERROR_NONE)
3464 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3465 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(ret));
3466 client_info->sync_sockfd = -1;
3467 __wfd_reset_control();
3468 __WDC_LOG_FUNC_END__;
3469 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3473 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3474 sizeof(wifi_direct_client_response_s))) <= 0)
3476 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", ret, strerror(errno));
3477 client_info->sync_sockfd = -1;
3478 __wfd_reset_control();
3479 __WDC_LOG_FUNC_END__;
3480 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3484 if (rsp.cmd == WIFI_DIRECT_CMD_GET_SUPPORTED_WPS_MODE)
3486 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3488 WDC_LOGD("Error!!! Result received = %d \n",
3490 WDC_LOGD("Error!!! [%s]\n",
3491 __wfd_print_error(rsp.result));
3492 __WDC_LOG_FUNC_END__;
3497 WDC_LOGD("Supported wps config = [%d]\n",
3499 *wps_mode = rsp.param1;
3504 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3506 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3510 __WDC_LOG_FUNC_END__;
3512 return WIFI_DIRECT_ERROR_NONE;
3517 int wifi_direct_foreach_supported_wps_types(wifi_direct_supported_wps_type_cb callback, void* user_data)
3519 wifi_direct_client_info_s *client_info = __wfd_get_control();
3521 __WDC_LOG_FUNC_START__;
3523 if ((client_info->is_registered == false)
3524 || (client_info->client_id == WFD_INVALID_ID))
3526 WDC_LOGE("Client is NOT registered.\n");
3527 __WDC_LOG_FUNC_END__;
3528 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3531 if (callback == NULL)
3533 WDC_LOGE("NULL Param [callback]!\n");
3534 __WDC_LOG_FUNC_END__;
3535 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3538 wifi_direct_client_request_s req;
3539 wifi_direct_client_response_s rsp;
3541 int ret = WIFI_DIRECT_ERROR_NONE;
3543 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3544 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3546 req.cmd = WIFI_DIRECT_CMD_GET_SUPPORTED_WPS_MODE;
3547 req.client_id = client_info->client_id;
3550 __wfd_client_send_request(client_info->sync_sockfd, &req,
3551 sizeof(wifi_direct_client_request_s));
3552 if (ret != WIFI_DIRECT_ERROR_NONE)
3554 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3555 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(ret));
3556 client_info->sync_sockfd = -1;
3557 __wfd_reset_control();
3558 __WDC_LOG_FUNC_END__;
3559 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3563 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3564 sizeof(wifi_direct_client_response_s))) <= 0)
3567 "Error!!! reading socket, status = %d errno = %s\n", ret,
3569 client_info->sync_sockfd = -1;
3570 __wfd_reset_control();
3571 __WDC_LOG_FUNC_END__;
3572 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3576 if (rsp.cmd == WIFI_DIRECT_CMD_GET_SUPPORTED_WPS_MODE)
3578 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3580 WDC_LOGD("Error!!! Result received = %d \n",
3582 WDC_LOGD("Error!!! [%s]\n",
3583 __wfd_print_error(rsp.result));
3584 __WDC_LOG_FUNC_END__;
3589 WDC_LOGD( "Supported wps config = [%d]\n",
3594 wps_mode = rsp.param1;
3596 if (wps_mode & WIFI_DIRECT_WPS_TYPE_PBC)
3597 result = callback(WIFI_DIRECT_WPS_TYPE_PBC, user_data);
3599 if ((result == true) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY))
3600 result = callback(WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY, user_data);
3603 if ((result == true) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD))
3604 result = callback(WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD, user_data);
3609 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3611 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3615 __WDC_LOG_FUNC_END__;
3617 return WIFI_DIRECT_ERROR_NONE;
3622 int wifi_direct_set_wps_type(wifi_direct_wps_type_e type)
3624 wifi_direct_client_info_s *client_info = __wfd_get_control();
3626 __WDC_LOG_FUNC_START__;
3628 if ((client_info->is_registered == false)
3629 || (client_info->client_id == WFD_INVALID_ID))
3631 WDC_LOGE("Client is NOT registered.\n");
3632 __WDC_LOG_FUNC_END__;
3633 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3636 if (type == WIFI_DIRECT_WPS_TYPE_PBC
3637 || type == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY
3638 || type == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD)
3640 WDC_LOGD("Param wps_mode [%d]\n", type);
3644 WDC_LOGE("Invalid Param [wps_mode]!\n");
3645 __WDC_LOG_FUNC_END__;
3646 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3649 wifi_direct_client_request_s req;
3650 wifi_direct_client_response_s rsp;
3652 int status = WIFI_DIRECT_ERROR_NONE;
3654 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3655 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3657 req.cmd = WIFI_DIRECT_CMD_SET_CURRENT_WPS_MODE;
3658 req.client_id = client_info->client_id;
3660 status =__wfd_client_send_request(client_info->sync_sockfd, &req,
3661 sizeof(wifi_direct_client_request_s));
3662 if (status != WIFI_DIRECT_ERROR_NONE)
3664 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3665 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3666 client_info->sync_sockfd = -1;
3667 __wfd_reset_control();
3668 __WDC_LOG_FUNC_END__;
3669 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3672 WDC_LOGD("writing msg hdr is success!\n");
3675 __wfd_client_send_request(client_info->sync_sockfd, &type,
3676 sizeof(wifi_direct_wps_type_e));
3677 if (status != WIFI_DIRECT_ERROR_NONE)
3679 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3680 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3681 client_info->sync_sockfd = -1;
3682 __wfd_reset_control();
3683 __WDC_LOG_FUNC_END__;
3684 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3688 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3689 sizeof(wifi_direct_client_response_s))) <= 0)
3691 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3692 client_info->sync_sockfd = -1;
3693 __wfd_reset_control();
3694 __WDC_LOG_FUNC_END__;
3695 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3699 if (rsp.cmd == WIFI_DIRECT_CMD_SET_CURRENT_WPS_MODE)
3701 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3703 WDC_LOGD("Error!!! Result received = %d \n",
3705 WDC_LOGD("Error!!! [%s]\n",
3706 __wfd_print_error(rsp.result));
3707 __WDC_LOG_FUNC_END__;
3713 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3715 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3719 __WDC_LOG_FUNC_END__;
3721 return WIFI_DIRECT_ERROR_NONE;
3724 int wifi_direct_get_wps_type(wifi_direct_wps_type_e* type)
3726 wifi_direct_client_info_s *client_info = __wfd_get_control();
3728 __WDC_LOG_FUNC_START__;
3730 if ((client_info->is_registered == false)
3731 || (client_info->client_id == WFD_INVALID_ID))
3733 WDC_LOGE("Client is NOT registered.\n");
3734 __WDC_LOG_FUNC_END__;
3735 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3740 WDC_LOGE("NULL Param [type]!\n");
3741 __WDC_LOG_FUNC_END__;
3742 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3745 wifi_direct_client_request_s req;
3746 wifi_direct_client_response_s rsp;
3747 wfd_config_data_s ls_config;
3749 int status = WIFI_DIRECT_ERROR_NONE;
3751 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3752 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3754 req.cmd = WIFI_DIRECT_CMD_GET_CONFIG;
3755 req.client_id = client_info->client_id;
3758 __wfd_client_send_request(client_info->sync_sockfd, &req,
3759 sizeof(wifi_direct_client_request_s));
3760 if (status != WIFI_DIRECT_ERROR_NONE)
3762 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3763 WDC_LOGE("Error!!! [%s]\n",
3764 __wfd_print_error(status));
3765 client_info->sync_sockfd = -1;
3766 __wfd_reset_control();
3767 __WDC_LOG_FUNC_END__;
3768 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3772 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3773 sizeof(wifi_direct_client_response_s))) <= 0)
3775 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3776 client_info->sync_sockfd = -1;
3777 __wfd_reset_control();
3778 __WDC_LOG_FUNC_END__;
3779 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3783 if (rsp.cmd == WIFI_DIRECT_CMD_GET_CONFIG)
3785 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3787 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
3788 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
3789 __WDC_LOG_FUNC_END__;
3796 WDC_LOGD("Link status = %d \n",
3800 __wfd_client_read_more_data(client_info->sync_sockfd,
3802 sizeof(wfd_config_data_s));
3803 if (status != WIFI_DIRECT_ERROR_NONE)
3805 WDC_LOGE("socket read error.");
3806 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3809 __wfd_client_print_config_data(&ls_config);
3811 *type = ls_config.wps_config;
3813 WDC_LOGD("wifi_direct_get_wps_type() SUCCESS");
3818 WDC_LOGE("Error!!! Invalid resp cmd = %d\n", rsp.cmd);
3819 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3823 __WDC_LOG_FUNC_END__;
3825 return WIFI_DIRECT_ERROR_NONE;
3829 int wifi_direct_set_ssid(const char *ssid)
3831 wifi_direct_client_info_s *client_info = __wfd_get_control();
3833 __WDC_LOG_FUNC_START__;
3835 if ((client_info->is_registered == false)
3836 || (client_info->client_id == WFD_INVALID_ID))
3838 WDC_LOGE("Client is NOT registered.\n");
3839 __WDC_LOG_FUNC_END__;
3840 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3845 WDC_LOGE("NULL Param [ssid]!\n");
3846 __WDC_LOG_FUNC_END__;
3847 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3850 WDC_LOGE("ssid = [%s]\n", ssid);
3852 wifi_direct_client_request_s req;
3853 wifi_direct_client_response_s rsp;
3855 int status = WIFI_DIRECT_ERROR_NONE;
3857 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3858 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3860 req.cmd = WIFI_DIRECT_CMD_SET_SSID;
3861 req.client_id = client_info->client_id;
3864 __wfd_client_send_request(client_info->sync_sockfd, &req,
3865 sizeof(wifi_direct_client_request_s));
3866 if (status != WIFI_DIRECT_ERROR_NONE)
3868 WDC_LOGE("Error!!! writing to socket, Errno = %s\n",
3870 WDC_LOGE("Error!!! [%s]\n",
3871 __wfd_print_error(status));
3872 client_info->sync_sockfd = -1;
3873 __wfd_reset_control();
3874 __WDC_LOG_FUNC_END__;
3875 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3878 WDC_LOGD("writing msg hdr is success!");
3881 __wfd_client_send_request(client_info->sync_sockfd, ssid,
3882 WIFI_DIRECT_MAX_SSID_LEN);
3883 if (status != WIFI_DIRECT_ERROR_NONE)
3886 "Error!!! writing to socket, Errno = %s\n",
3888 WDC_LOGE("Error!!! [%s]\n",
3889 __wfd_print_error(status));
3890 client_info->sync_sockfd = -1;
3891 __wfd_reset_control();
3892 __WDC_LOG_FUNC_END__;
3893 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3897 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3898 sizeof(wifi_direct_client_response_s))) <= 0)
3900 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3901 client_info->sync_sockfd = -1;
3902 __wfd_reset_control();
3903 __WDC_LOG_FUNC_END__;
3904 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3908 if (rsp.cmd == WIFI_DIRECT_CMD_SET_SSID)
3910 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3912 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
3913 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
3914 __WDC_LOG_FUNC_END__;
3920 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3922 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3926 __WDC_LOG_FUNC_END__;
3928 return WIFI_DIRECT_ERROR_NONE;
3931 int wifi_direct_get_ssid(char **ssid)
3933 wifi_direct_client_info_s *client_info = __wfd_get_control();
3935 __WDC_LOG_FUNC_START__;
3939 WDC_LOGE("NULL Param [ssid]!\n");
3940 __WDC_LOG_FUNC_END__;
3941 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3944 if ((client_info->is_registered == false)
3945 || (client_info->client_id == WFD_INVALID_ID))
3947 WDC_LOGE("Client is NOT registered.\n");
3948 __WDC_LOG_FUNC_END__;
3949 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3952 wifi_direct_client_request_s req;
3953 wifi_direct_client_response_s rsp;
3954 char la_ssid[WIFI_DIRECT_MAX_SSID_LEN + 1] = { 0, };
3956 int status = WIFI_DIRECT_ERROR_NONE;
3958 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3959 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3961 req.cmd = WIFI_DIRECT_CMD_GET_SSID;
3962 req.client_id = client_info->client_id;
3965 __wfd_client_send_request(client_info->sync_sockfd, &req,
3966 sizeof(wifi_direct_client_request_s));
3967 if (status != WIFI_DIRECT_ERROR_NONE)
3969 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3970 WDC_LOGE("Error!!! [%s]\n",
3971 __wfd_print_error(status));
3972 client_info->sync_sockfd = -1;
3973 __wfd_reset_control();
3974 __WDC_LOG_FUNC_END__;
3975 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3979 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3980 sizeof(wifi_direct_client_response_s))) <= 0)
3982 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3983 client_info->sync_sockfd = -1;
3984 __wfd_reset_control();
3985 __WDC_LOG_FUNC_END__;
3986 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3990 if (rsp.cmd == WIFI_DIRECT_CMD_GET_SSID)
3992 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3994 WDC_LOGD("Error!!! Result received = %d \n",
3996 WDC_LOGD("Error!!! [%s]\n",
3997 __wfd_print_error(rsp.result));
3998 __WDC_LOG_FUNC_END__;
4004 "wifi_direct_get_ssid() %s SUCCESS \n",
4006 strncpy(la_ssid, rsp.param2, WIFI_DIRECT_MAX_SSID_LEN);
4008 char *temp_ssid = NULL;
4009 temp_ssid = strdup(la_ssid);
4010 if (NULL == temp_ssid)
4012 WDC_LOGE("Failed to allocate memory for SSID\n");
4013 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4022 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
4024 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4028 __WDC_LOG_FUNC_END__;
4030 return WIFI_DIRECT_ERROR_NONE;
4033 int wifi_direct_get_device_name(char** device_name)
4035 wifi_direct_client_info_s *client_info = __wfd_get_control();
4037 __WDC_LOG_FUNC_START__;
4039 if (NULL == device_name)
4041 WDC_LOGE("NULL Param [device_name]!\n");
4042 __WDC_LOG_FUNC_END__;
4043 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4046 if ((client_info->is_registered == false)
4047 || (client_info->client_id == WFD_INVALID_ID))
4049 WDC_LOGE("Client is NOT registered.\n");
4050 __WDC_LOG_FUNC_END__;
4051 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4054 wifi_direct_client_request_s req;
4055 wifi_direct_client_response_s rsp;
4056 char la_device_name[WIFI_DIRECT_MAX_DEVICE_NAME_LEN + 1] = { 0, };
4058 int status = WIFI_DIRECT_ERROR_NONE;
4060 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4061 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4063 req.cmd = WIFI_DIRECT_CMD_GET_DEVICE_NAME;
4064 req.client_id = client_info->client_id;
4067 __wfd_client_send_request(client_info->sync_sockfd, &req,
4068 sizeof(wifi_direct_client_request_s));
4069 if (status != WIFI_DIRECT_ERROR_NONE)
4071 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
4072 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
4073 client_info->sync_sockfd = -1;
4074 __wfd_reset_control();
4075 __WDC_LOG_FUNC_END__;
4076 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4080 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4081 sizeof(wifi_direct_client_response_s))) <= 0)
4083 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
4084 client_info->sync_sockfd = -1;
4085 __wfd_reset_control();
4086 __WDC_LOG_FUNC_END__;
4087 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4091 if (rsp.cmd == WIFI_DIRECT_CMD_GET_DEVICE_NAME)
4093 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4095 WDC_LOGD("Error!!! Result received = %d \n",
4097 WDC_LOGD("Error!!! [%s]\n",
4098 __wfd_print_error(rsp.result));
4099 __WDC_LOG_FUNC_END__;
4104 WDC_LOGD("wifi_direct_get_device_name() %s SUCCESS \n", rsp.param2);
4105 strncpy(la_device_name, rsp.param2, WIFI_DIRECT_MAX_DEVICE_NAME_LEN);
4107 char *temp_device_name = NULL;
4108 temp_device_name = strdup(la_device_name);
4109 if (NULL == temp_device_name)
4111 WDC_LOGE("Failed to allocate memory for device name\n");
4112 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4115 *device_name = temp_device_name;
4121 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
4123 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4127 __WDC_LOG_FUNC_END__;
4129 return WIFI_DIRECT_ERROR_NONE;
4133 int wifi_direct_set_device_name(const char *device_name)
4135 wifi_direct_client_info_s *client_info = __wfd_get_control();
4137 __WDC_LOG_FUNC_START__;
4139 if ((client_info->is_registered == false)
4140 || (client_info->client_id == WFD_INVALID_ID))
4142 WDC_LOGE("Client is NOT registered.\n");
4143 __WDC_LOG_FUNC_END__;
4144 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4147 if (NULL == device_name)
4149 WDC_LOGE("NULL Param [device_name]!\n");
4150 __WDC_LOG_FUNC_END__;
4151 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4154 WDC_LOGE("device_name = [%s]\n", device_name);
4156 wifi_direct_client_request_s req;
4157 wifi_direct_client_response_s rsp;
4159 int status = WIFI_DIRECT_ERROR_NONE;
4161 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4162 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4164 req.cmd = WIFI_DIRECT_CMD_SET_DEVICE_NAME;
4165 req.client_id = client_info->client_id;
4168 __wfd_client_send_request(client_info->sync_sockfd, &req,
4169 sizeof(wifi_direct_client_request_s));
4170 if (status != WIFI_DIRECT_ERROR_NONE)
4172 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
4173 WDC_LOGE("Error!!! [%s]\n",
4174 __wfd_print_error(status));
4175 client_info->sync_sockfd = -1;
4176 __wfd_reset_control();
4177 __WDC_LOG_FUNC_END__;
4178 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4181 WDC_LOGD( "writing msg hdr is success!\n");
4184 __wfd_client_send_request(client_info->sync_sockfd, device_name,
4185 WIFI_DIRECT_MAX_DEVICE_NAME_LEN);
4186 if (status != WIFI_DIRECT_ERROR_NONE)
4188 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
4189 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
4190 client_info->sync_sockfd = -1;
4191 __wfd_reset_control();
4192 __WDC_LOG_FUNC_END__;
4193 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4197 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4198 sizeof(wifi_direct_client_response_s))) <= 0)
4200 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
4201 client_info->sync_sockfd = -1;
4202 __wfd_reset_control();
4203 __WDC_LOG_FUNC_END__;
4204 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4208 if (rsp.cmd == WIFI_DIRECT_CMD_SET_DEVICE_NAME)
4210 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4212 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
4213 WDC_LOGE("Error!!! [%s]\n",
4214 __wfd_print_error(rsp.result));
4215 __WDC_LOG_FUNC_END__;
4221 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
4223 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4227 __WDC_LOG_FUNC_END__;
4229 return WIFI_DIRECT_ERROR_NONE;
4233 int wifi_direct_get_network_interface_name(char** name)
4235 wifi_direct_client_info_s *client_info = __wfd_get_control();
4237 __WDC_LOG_FUNC_START__;
4241 WDC_LOGE("NULL Param [name]!\n");
4242 __WDC_LOG_FUNC_END__;
4243 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4246 if ((client_info->is_registered == false)
4247 || (client_info->client_id == WFD_INVALID_ID))
4249 WDC_LOGE("Client is NOT registered.\n");
4250 __WDC_LOG_FUNC_END__;
4251 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4254 wifi_direct_state_e status = 0;
4256 result = wifi_direct_get_state(&status);
4257 WDC_LOGD("wifi_direct_get_state() state=[%d], result=[%d]\n", status, result);
4259 if( status < WIFI_DIRECT_STATE_CONNECTED)
4261 WDC_LOGE("Device is not connected!\n");
4262 __WDC_LOG_FUNC_END__;
4263 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4266 char* get_str = NULL;
4267 get_str = vconf_get_str(VCONFKEY_IFNAME);
4269 if (get_str == NULL)
4271 WDC_LOGD( "vconf (%s) value is NULL!!!\n", VCONFKEY_IFNAME);
4272 __WDC_LOG_FUNC_END__;
4273 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4277 WDC_LOGD( "VCONFKEY_IFNAME(%s) : %s\n", VCONFKEY_IFNAME, get_str);
4279 char *temp_ifname = NULL;
4280 temp_ifname = strdup(get_str);
4281 if (NULL == temp_ifname)
4283 WDC_LOGE("Failed to allocate memory for ifname.\n");
4284 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4287 *name = temp_ifname;
4290 __WDC_LOG_FUNC_END__;
4292 return WIFI_DIRECT_ERROR_NONE;
4297 int wifi_direct_get_ip_address(char **ip_address)
4299 wifi_direct_client_info_s *client_info = __wfd_get_control();
4301 __WDC_LOG_FUNC_START__;
4303 if (NULL == ip_address)
4305 WDC_LOGE("NULL Param [ip_address]!\n");
4306 __WDC_LOG_FUNC_END__;
4307 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4310 if ((client_info->is_registered == false)
4311 || (client_info->client_id == WFD_INVALID_ID))
4313 WDC_LOGE("Client is NOT registered.\n");
4314 __WDC_LOG_FUNC_END__;
4315 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4318 wifi_direct_state_e state = 0;
4320 result = wifi_direct_get_state(&state);
4321 WDC_LOGD( "wifi_direct_get_state() state=[%d], result=[%d]\n", state, result);
4323 if( state < WIFI_DIRECT_STATE_CONNECTED)
4325 WDC_LOGE("Device is not connected!\n");
4326 __WDC_LOG_FUNC_END__;
4327 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4330 char* get_str = NULL;
4331 get_str = vconf_get_str(VCONFKEY_LOCAL_IP);
4333 if (get_str == NULL)
4335 WDC_LOGD("vconf (%s) value is NULL!!!\n", VCONFKEY_LOCAL_IP);
4336 __WDC_LOG_FUNC_END__;
4337 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4341 WDC_LOGD("VCONFKEY_LOCAL_IP(%s) : %s\n", VCONFKEY_LOCAL_IP, get_str);
4343 char *temp_ip = NULL;
4344 temp_ip = strdup(get_str);
4345 if (NULL == temp_ip)
4347 WDC_LOGE("Failed to allocate memory for local ip address.\n");
4348 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4351 *ip_address = temp_ip;
4356 wifi_direct_client_request_s req;
4357 wifi_direct_client_response_s rsp;
4358 char la_ip[64] = { 0, };
4360 int status = WIFI_DIRECT_ERROR_NONE;
4362 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4363 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4365 req.cmd = WIFI_DIRECT_CMD_GET_IP_ADDR;
4366 req.client_id = client_info->client_id;
4369 __wfd_client_send_request(client_info->sync_sockfd, &req,
4370 sizeof(wifi_direct_client_request_s));
4371 if (status != WIFI_DIRECT_ERROR_NONE)
4373 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
4374 WDC_LOGE("Error!!! [%s]\n",
4375 __wfd_print_error(status));
4376 client_info->sync_sockfd = -1;
4377 __wfd_reset_control();
4378 __WDC_LOG_FUNC_END__;
4379 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4383 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4384 sizeof(wifi_direct_client_response_s))) <= 0)
4386 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
4387 client_info->sync_sockfd = -1;
4388 __wfd_reset_control();
4389 __WDC_LOG_FUNC_END__;
4390 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4394 if (rsp.cmd == WIFI_DIRECT_CMD_GET_IP_ADDR)
4396 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4398 WDC_LOGD("Error!!! Result received = %d \n",
4400 WDC_LOGD("Error!!! [%s]\n",
4401 __wfd_print_error(rsp.result));
4402 __WDC_LOG_FUNC_END__;
4407 WDC_LOGD("wifi_direct_get_ip_address() SUCCESS \n");
4408 strncpy(la_ip, rsp.param2, strlen(rsp.param2));
4410 char *temp_ip = NULL;
4411 temp_ip = strdup(la_ip);
4412 if (NULL == temp_ip)
4414 WDC_LOGE("Failed to allocate memory for IP address\n");
4415 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4418 *ip_address = temp_ip;
4423 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
4425 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4430 __WDC_LOG_FUNC_END__;
4432 return WIFI_DIRECT_ERROR_NONE;
4436 int wifi_direct_get_subnet_mask(char** subnet_mask)
4438 wifi_direct_client_info_s *client_info = __wfd_get_control();
4440 __WDC_LOG_FUNC_START__;
4442 if (NULL == subnet_mask)
4444 WDC_LOGE("NULL Param [subnet_mask]!\n");
4445 __WDC_LOG_FUNC_END__;
4446 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4449 if ((client_info->is_registered == false)
4450 || (client_info->client_id == WFD_INVALID_ID))
4452 WDC_LOGE("Client is NOT registered.\n");
4453 __WDC_LOG_FUNC_END__;
4454 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4457 wifi_direct_state_e status = 0;
4459 result = wifi_direct_get_state(&status);
4460 WDC_LOGD("wifi_direct_get_state() state=[%d], result=[%d]\n", status, result);
4462 if( status < WIFI_DIRECT_STATE_CONNECTED)
4464 WDC_LOGE("Device is not connected!\n");
4465 __WDC_LOG_FUNC_END__;
4466 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4470 char* get_str = NULL;
4471 get_str = vconf_get_str(VCONFKEY_SUBNET_MASK);
4473 if (get_str == NULL)
4475 WDC_LOGD("vconf (%s) value is NULL!!!\n", VCONFKEY_SUBNET_MASK);
4476 __WDC_LOG_FUNC_END__;
4477 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4481 WDC_LOGD(VCONFKEY_SUBNET_MASK(%s) : %s\n", VCONFKEY_SUBNET_MASK, get_str);
4483 char *temp_subnetmask = NULL;
4484 temp_subnetmask = strdup(get_str);
4485 if (NULL == temp_subnetmask)
4487 WDC_LOGE("Failed to allocate memory for subnet mask.\n");
4488 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4491 *subnet_mask = temp_subnetmask;
4494 __WDC_LOG_FUNC_END__;
4496 return WIFI_DIRECT_ERROR_NONE;
4500 int wifi_direct_get_gateway_address(char** gateway_address)
4502 wifi_direct_client_info_s *client_info = __wfd_get_control();
4504 __WDC_LOG_FUNC_START__;
4506 if (NULL == gateway_address)
4508 WDC_LOGE("NULL Param [gateway_address]!\n");
4509 __WDC_LOG_FUNC_END__;
4510 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4513 if ((client_info->is_registered == false)
4514 || (client_info->client_id == WFD_INVALID_ID))
4516 WDC_LOGE("Client is NOT registered.\n");
4517 __WDC_LOG_FUNC_END__;
4518 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4521 wifi_direct_state_e status = 0;
4523 result = wifi_direct_get_state(&status);
4524 WDC_LOGD("wifi_direct_get_state() state=[%d], result=[%d]\n", status, result);
4526 if( status < WIFI_DIRECT_STATE_CONNECTED)
4528 WDC_LOGE("Device is not connected!\n");
4529 __WDC_LOG_FUNC_END__;
4530 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4533 char* get_str = NULL;
4534 get_str = vconf_get_str(VCONFKEY_GATEWAY);
4536 if (get_str == NULL)
4538 WDC_LOGD("vconf (%s) value is NULL!!!\n", VCONFKEY_GATEWAY);
4539 __WDC_LOG_FUNC_END__;
4540 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4544 WDC_LOGD("VCONFKEY_GATEWAY(%s) : %s", VCONFKEY_GATEWAY, get_str);
4546 char *temp_gateway = NULL;
4547 temp_gateway = strdup(get_str);
4548 if (NULL == temp_gateway)
4550 WDC_LOGE("Failed to allocate memory for gateway address.");
4551 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4554 *gateway_address = temp_gateway;
4557 __WDC_LOG_FUNC_END__;
4559 return WIFI_DIRECT_ERROR_NONE;
4563 int wifi_direct_get_mac_address(char **mac_address)
4565 wifi_direct_client_info_s *client_info = __wfd_get_control();
4567 __WDC_LOG_FUNC_START__;
4569 if (NULL == mac_address)
4571 WDC_LOGE("NULL Param [mac_address]!");
4572 __WDC_LOG_FUNC_END__;
4573 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4576 if ((client_info->is_registered == false)
4577 || (client_info->client_id == WFD_INVALID_ID))
4579 WDC_LOGD("Client is NOT registered.");
4580 __WDC_LOG_FUNC_END__;
4581 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4585 wifi_direct_client_request_s req;
4586 wifi_direct_client_response_s rsp;
4587 unsigned char la_mac_addr[6] = { 0, };
4589 int status = WIFI_DIRECT_ERROR_NONE;
4591 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4592 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4594 req.cmd = WIFI_DIRECT_CMD_GET_DEVICE_MAC;
4595 req.client_id = client_info->client_id;
4598 __wfd_client_send_request(client_info->sync_sockfd, &req,
4599 sizeof(wifi_direct_client_request_s));
4600 if (status != WIFI_DIRECT_ERROR_NONE)
4602 WDC_LOGD("Error!!! writing to socket, Errno = %s\n", strerror(errno));
4603 WDC_LOGD("Error!!! [%s]\n", __wfd_print_error(status));
4604 close(client_info->sync_sockfd);
4605 __WDC_LOG_FUNC_END__;
4606 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4610 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4611 sizeof(wifi_direct_client_response_s))) <= 0)
4613 WDC_LOGD("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
4614 __WDC_LOG_FUNC_END__;
4615 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4619 if (rsp.cmd == WIFI_DIRECT_CMD_GET_DEVICE_MAC)
4621 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4623 WDC_LOGD("Error!!! Result received = %d", rsp.result);
4624 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
4625 __WDC_LOG_FUNC_END__;
4630 WDC_LOGD("wifi_direct_get_mac_addr() SUCCESS");
4631 strncpy((char *) la_mac_addr, (char *) rsp.param2,
4632 strlen(rsp.param2));
4634 char *temp_mac = NULL;
4635 temp_mac = (char *) calloc(1, 18);
4636 if (NULL == temp_mac)
4638 WDC_LOGE("Failed to allocate memory for MAC address");
4639 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4642 sprintf(temp_mac, MACSTR, MAC2STR(la_mac_addr));
4644 *mac_address = temp_mac;
4650 WDC_LOGE("Error!!! Invalid resp cmd = %d",
4652 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4660 unsigned char la_mac_addr[6];
4662 memset(mac_info, 0, sizeof(mac_info));
4664 if( (fd = open(WIFI_DIRECT_MAC_ADDRESS_INFO_FILE, O_RDONLY)) == -1)
4666 WDC_LOGE("[.mac.info] file open failed.");
4667 __WDC_LOG_FUNC_END__;
4668 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4671 n = read(fd, mac_info, 18);
4674 WDC_LOGE("[.mac.info] file read failed.");
4675 __WDC_LOG_FUNC_END__;
4676 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4679 WDC_LOGD("mac_address = [%s]", mac_info);
4681 memset(la_mac_addr, 0, sizeof(la_mac_addr));
4682 macaddr_atoe(mac_info, la_mac_addr);
4683 la_mac_addr[0] = la_mac_addr[0] | 0x02;
4684 la_mac_addr[1] = la_mac_addr[1];
4685 la_mac_addr[2] = la_mac_addr[2];
4686 la_mac_addr[3] = la_mac_addr[3];
4687 la_mac_addr[4] = la_mac_addr[4];
4688 la_mac_addr[5] = la_mac_addr[5];
4690 char *temp_mac = NULL;
4691 temp_mac = (char *) calloc(1, 18);
4692 if (NULL == temp_mac)
4694 WDC_LOGE("Failed to allocate memory for MAC address");
4695 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4698 //strncpy(temp_mac, mac_info, strlen(mac_info));
4699 snprintf(temp_mac, 18, MACSTR, MAC2STR(la_mac_addr));
4701 *mac_address = temp_mac;
4705 __WDC_LOG_FUNC_END__;
4707 return WIFI_DIRECT_ERROR_NONE;
4711 int wifi_direct_get_state(wifi_direct_state_e * state)
4713 wifi_direct_client_info_s *client_info = __wfd_get_control();
4715 __WDC_LOG_FUNC_START__;
4719 WDC_LOGE("NULL Param [state]!");
4720 __WDC_LOG_FUNC_END__;
4721 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4724 if ((client_info->is_registered == false)
4725 || (client_info->client_id == WFD_INVALID_ID))
4727 WDC_LOGE("Client is NOT registered.");
4728 __WDC_LOG_FUNC_END__;
4729 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4732 wifi_direct_client_request_s req;
4733 wifi_direct_client_response_s rsp;
4735 int ret = WIFI_DIRECT_ERROR_NONE;
4737 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4738 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4740 req.cmd = WIFI_DIRECT_CMD_GET_LINK_STATUS;
4741 req.client_id = client_info->client_id;
4744 __wfd_client_send_request(client_info->sync_sockfd, &req,
4745 sizeof(wifi_direct_client_request_s));
4746 if (ret != WIFI_DIRECT_ERROR_NONE)
4748 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
4749 WDC_LOGE("Error!!! [%s]", __wfd_print_error(ret));
4750 client_info->sync_sockfd = -1;
4751 __wfd_reset_control();
4752 __WDC_LOG_FUNC_END__;
4753 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4757 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4758 sizeof(wifi_direct_client_response_s))) <= 0)
4760 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", ret,
4762 client_info->sync_sockfd = -1;
4763 __wfd_reset_control();
4764 __WDC_LOG_FUNC_END__;
4765 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4769 if (rsp.cmd == WIFI_DIRECT_CMD_GET_LINK_STATUS)
4771 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4773 WDC_LOGD("Error!!! Result received = %d %s", rsp.result, __wfd_print_error(rsp.result));
4774 __WDC_LOG_FUNC_END__;
4779 WDC_LOGD("Link Status = %d", (int) rsp.param1);
4780 *state = (wifi_direct_state_e) rsp.param1;
4782 /* for CAPI : there is no WIFI_DIRECT_STATE_GROUP_OWNER type in CAPI */
4783 if(*state == WIFI_DIRECT_STATE_GROUP_OWNER)
4784 *state = WIFI_DIRECT_STATE_CONNECTED;
4790 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
4791 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4795 __WDC_LOG_FUNC_END__;
4797 return WIFI_DIRECT_ERROR_NONE;
4801 int wifi_direct_is_discoverable(bool* discoverable)
4803 wifi_direct_client_info_s *client_info = __wfd_get_control();
4805 __WDC_LOG_FUNC_START__;
4807 if (discoverable == NULL)
4809 WDC_LOGE("NULL Param [discoverable]!");
4810 __WDC_LOG_FUNC_END__;
4811 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4814 if ((client_info->is_registered == false)
4815 || (client_info->client_id == WFD_INVALID_ID))
4817 WDC_LOGE("Client is NOT registered.");
4818 __WDC_LOG_FUNC_END__;
4819 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4822 wifi_direct_client_request_s req;
4823 wifi_direct_client_response_s rsp;
4825 int status = WIFI_DIRECT_ERROR_NONE;
4827 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4828 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4830 req.cmd = WIFI_DIRECT_CMD_IS_DISCOVERABLE;
4831 req.client_id = client_info->client_id;
4834 __wfd_client_send_request(client_info->sync_sockfd, &req,
4835 sizeof(wifi_direct_client_request_s));
4836 if (status != WIFI_DIRECT_ERROR_NONE)
4838 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
4839 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
4840 client_info->sync_sockfd = -1;
4841 __wfd_reset_control();
4842 __WDC_LOG_FUNC_END__;
4843 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4847 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4848 sizeof(wifi_direct_client_response_s))) <= 0)
4850 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
4851 client_info->sync_sockfd = -1;
4852 __wfd_reset_control();
4853 __WDC_LOG_FUNC_END__;
4854 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4858 if (rsp.cmd == WIFI_DIRECT_CMD_IS_DISCOVERABLE)
4860 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4862 WDC_LOGD("Error!!! Result received = %d", rsp.result);
4863 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
4864 __WDC_LOG_FUNC_END__;
4869 WDC_LOGD("wifi_direct_is_discoverable() %s SUCCESS", rsp.param2);
4870 *discoverable = (bool) rsp.param1;
4875 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
4876 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4880 __WDC_LOG_FUNC_END__;
4882 return WIFI_DIRECT_ERROR_NONE;
4887 int wifi_direct_is_listening_only(bool* listen_only)
4889 wifi_direct_client_info_s *client_info = __wfd_get_control();
4891 __WDC_LOG_FUNC_START__;
4893 if (listen_only == NULL)
4895 WDC_LOGE("NULL Param [listen_only]!");
4896 __WDC_LOG_FUNC_END__;
4897 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4900 if ((client_info->is_registered == false)
4901 || (client_info->client_id == WFD_INVALID_ID))
4903 WDC_LOGE("Client is NOT registered.");
4904 __WDC_LOG_FUNC_END__;
4905 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4908 wifi_direct_client_request_s req;
4909 wifi_direct_client_response_s rsp;
4911 int status = WIFI_DIRECT_ERROR_NONE;
4913 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4914 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4916 req.cmd = WIFI_DIRECT_CMD_IS_LISTENING_ONLY;
4917 req.client_id = client_info->client_id;
4920 __wfd_client_send_request(client_info->sync_sockfd, &req,
4921 sizeof(wifi_direct_client_request_s));
4922 if (status != WIFI_DIRECT_ERROR_NONE)
4924 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
4925 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
4926 client_info->sync_sockfd = -1;
4927 __wfd_reset_control();
4928 __WDC_LOG_FUNC_END__;
4929 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4933 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4934 sizeof(wifi_direct_client_response_s))) <= 0)
4936 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
4937 client_info->sync_sockfd = -1;
4938 __wfd_reset_control();
4939 __WDC_LOG_FUNC_END__;
4940 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4944 if (rsp.cmd == WIFI_DIRECT_CMD_IS_LISTENING_ONLY)
4946 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4948 WDC_LOGD("Error!!! Result received = %d", rsp.result);
4949 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
4950 __WDC_LOG_FUNC_END__;
4955 WDC_LOGD("wifi_direct_is_listening_only() %s SUCCESS", rsp.param2);
4956 *listen_only = (bool) rsp.param1;
4961 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
4962 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4966 __WDC_LOG_FUNC_END__;
4968 return WIFI_DIRECT_ERROR_NONE;
4973 int wifi_direct_get_primary_device_type(wifi_direct_primary_device_type_e* type)
4975 wifi_direct_client_info_s *client_info = __wfd_get_control();
4977 __WDC_LOG_FUNC_START__;
4981 WDC_LOGE("NULL Param [type]!");
4982 __WDC_LOG_FUNC_END__;
4983 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4986 if ((client_info->is_registered == false)
4987 || (client_info->client_id == WFD_INVALID_ID))
4989 WDC_LOGE("Client is NOT registered.");
4990 __WDC_LOG_FUNC_END__;
4991 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4994 WDC_LOGD("Current primary_dev_type [%d]", WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE);
4996 *type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE; // Telephone
4998 __WDC_LOG_FUNC_END__;
5000 return WIFI_DIRECT_ERROR_NONE;
5003 int wifi_direct_get_secondary_device_type(wifi_direct_secondary_device_type_e* type)
5005 wifi_direct_client_info_s *client_info = __wfd_get_control();
5007 __WDC_LOG_FUNC_START__;
5011 WDC_LOGE("NULL Param [type]!");
5012 __WDC_LOG_FUNC_END__;
5013 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
5016 if ((client_info->is_registered == false)
5017 || (client_info->client_id == WFD_INVALID_ID))
5019 WDC_LOGE("Client is NOT registered.");
5020 __WDC_LOG_FUNC_END__;
5021 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5025 WDC_LOGD("Current second_dev_type [%d]", WIFI_DIRECT_SECONDARY_DEVICE_TYPE_PHONE_SM_DUAL);
5027 *type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_PHONE_SM_DUAL; // smart phone dual mode (wifi and cellular)
5029 __WDC_LOG_FUNC_END__;
5031 return WIFI_DIRECT_ERROR_NONE;
5034 int wifi_direct_set_autoconnection_mode(bool mode)
5036 wifi_direct_client_info_s *client_info = __wfd_get_control();
5038 __WDC_LOG_FUNC_START__;
5040 if ((client_info->is_registered == false)
5041 || (client_info->client_id == WFD_INVALID_ID))
5043 WDC_LOGE("Client is NOT registered.");
5044 __WDC_LOG_FUNC_END__;
5045 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5048 wifi_direct_client_request_s req;
5049 wifi_direct_client_response_s rsp;
5051 int status = WIFI_DIRECT_ERROR_NONE;
5053 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5054 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5056 req.cmd = WIFI_DIRECT_CMD_SET_AUTOCONNECTION_MODE;
5057 req.client_id = client_info->client_id;
5059 status =__wfd_client_send_request(client_info->sync_sockfd, &req,
5060 sizeof(wifi_direct_client_request_s));
5061 if (status != WIFI_DIRECT_ERROR_NONE)
5063 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5064 WDC_LOGE("Error!!! [%s]\n",
5065 __wfd_print_error(status));
5066 client_info->sync_sockfd = -1;
5067 __wfd_reset_control();
5068 __WDC_LOG_FUNC_END__;
5069 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5072 WDC_LOGD("writing msg hdr is success!");
5075 __wfd_client_send_request(client_info->sync_sockfd, &mode,
5077 if (status != WIFI_DIRECT_ERROR_NONE)
5079 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5080 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
5081 client_info->sync_sockfd = -1;
5082 __wfd_reset_control();
5083 __WDC_LOG_FUNC_END__;
5084 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5088 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5089 sizeof(wifi_direct_client_response_s))) <= 0)
5091 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
5092 client_info->sync_sockfd = -1;
5093 __wfd_reset_control();
5094 __WDC_LOG_FUNC_END__;
5095 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5099 if (rsp.cmd == WIFI_DIRECT_CMD_SET_AUTOCONNECTION_MODE)
5101 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5103 WDC_LOGD("Error!!! Result received = %d", rsp.result);
5104 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
5105 __WDC_LOG_FUNC_END__;
5111 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5112 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5116 __WDC_LOG_FUNC_END__;
5118 return WIFI_DIRECT_ERROR_NONE;
5121 int wifi_direct_is_autoconnection_mode(bool* mode)
5123 wifi_direct_client_info_s *client_info = __wfd_get_control();
5125 __WDC_LOG_FUNC_START__;
5129 WDC_LOGE("NULL Param [mode]!");
5130 __WDC_LOG_FUNC_END__;
5131 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
5134 if ((client_info->is_registered == false)
5135 || (client_info->client_id == WFD_INVALID_ID))
5137 WDC_LOGE("Client is NOT registered.");
5138 __WDC_LOG_FUNC_END__;
5139 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5142 wifi_direct_client_request_s req;
5143 wifi_direct_client_response_s rsp;
5145 int status = WIFI_DIRECT_ERROR_NONE;
5147 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5148 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5150 req.cmd = WIFI_DIRECT_CMD_IS_AUTOCONNECTION_MODE;
5151 req.client_id = client_info->client_id;
5154 __wfd_client_send_request(client_info->sync_sockfd, &req,
5155 sizeof(wifi_direct_client_request_s));
5156 if (status != WIFI_DIRECT_ERROR_NONE)
5158 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5159 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
5160 client_info->sync_sockfd = -1;
5161 __wfd_reset_control();
5162 __WDC_LOG_FUNC_END__;
5163 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5167 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5168 sizeof(wifi_direct_client_response_s))) <= 0)
5170 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
5171 client_info->sync_sockfd = -1;
5172 __wfd_reset_control();
5173 __WDC_LOG_FUNC_END__;
5174 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5178 if (rsp.cmd == WIFI_DIRECT_CMD_IS_AUTOCONNECTION_MODE)
5180 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5182 WDC_LOGD("Error!!! Result received = %d", rsp.result);
5183 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
5184 __WDC_LOG_FUNC_END__;
5189 WDC_LOGD("wifi_direct_is_autoconnection_mode() %s SUCCESS", rsp.param2);
5190 *mode = (bool) rsp.param1;
5195 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5196 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5200 __WDC_LOG_FUNC_END__;
5202 return WIFI_DIRECT_ERROR_NONE;
5207 int wifi_direct_set_persistent_group_enabled(bool enabled)
5209 wifi_direct_client_info_s *client_info = __wfd_get_control();
5211 __WDC_LOG_FUNC_START__;
5213 if ((client_info->is_registered == false)
5214 || (client_info->client_id == WFD_INVALID_ID))
5216 WDC_LOGE("Client is NOT registered.");
5217 __WDC_LOG_FUNC_END__;
5218 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5221 wifi_direct_client_request_s req;
5222 wifi_direct_client_response_s rsp;
5224 int status = WIFI_DIRECT_ERROR_NONE;
5226 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5227 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5229 if (enabled == true)
5230 req.cmd = WIFI_DIRECT_CMD_ACTIVATE_PERSISTENT_GROUP;
5232 req.cmd = WIFI_DIRECT_CMD_DEACTIVATE_PERSISTENT_GROUP;
5234 req.client_id = client_info->client_id;
5237 __wfd_client_send_request(client_info->sync_sockfd, &req,
5238 sizeof(wifi_direct_client_request_s));
5239 if (status != WIFI_DIRECT_ERROR_NONE)
5241 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5242 WDC_LOGE("Error!!! [%s]",
5243 __wfd_print_error(status));
5244 client_info->sync_sockfd = -1;
5245 __wfd_reset_control();
5246 __WDC_LOG_FUNC_END__;
5247 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5251 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5252 sizeof(wifi_direct_client_response_s))) <= 0)
5254 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
5255 client_info->sync_sockfd = -1;
5256 __wfd_reset_control();
5257 __WDC_LOG_FUNC_END__;
5258 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5262 if (rsp.cmd == WIFI_DIRECT_CMD_ACTIVATE_PERSISTENT_GROUP
5263 || rsp.cmd == WIFI_DIRECT_CMD_DEACTIVATE_PERSISTENT_GROUP)
5265 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5267 WDC_LOGD( "Error!!! Result received = %d", rsp.result);
5268 WDC_LOGD( "Error!!! [%s]", __wfd_print_error(rsp.result));
5269 __WDC_LOG_FUNC_END__;
5274 WDC_LOGD("wifi_direct_set_persistent_group_enabled() SUCCESS");
5279 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5280 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5284 __WDC_LOG_FUNC_END__;
5286 return WIFI_DIRECT_ERROR_NONE;
5290 int wifi_direct_is_persistent_group_enabled(bool* enabled)
5292 wifi_direct_client_info_s *client_info = __wfd_get_control();
5294 __WDC_LOG_FUNC_START__;
5296 if (enabled == NULL)
5298 WDC_LOGE("NULL Param [enabled]!");
5299 __WDC_LOG_FUNC_END__;
5300 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
5303 if ((client_info->is_registered == false)
5304 || (client_info->client_id == WFD_INVALID_ID))
5306 WDC_LOGE("Client is NOT registered.");
5307 __WDC_LOG_FUNC_END__;
5308 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5311 wifi_direct_client_request_s req;
5312 wifi_direct_client_response_s rsp;
5314 int status = WIFI_DIRECT_ERROR_NONE;
5316 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5317 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5319 req.cmd = WIFI_DIRECT_CMD_IS_PERSISTENT_GROUP;
5320 req.client_id = client_info->client_id;
5323 __wfd_client_send_request(client_info->sync_sockfd, &req,
5324 sizeof(wifi_direct_client_request_s));
5325 if (status != WIFI_DIRECT_ERROR_NONE)
5327 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5328 WDC_LOGE("Error!!! [%s]\n",
5329 __wfd_print_error(status));
5330 client_info->sync_sockfd = -1;
5331 __wfd_reset_control();
5332 __WDC_LOG_FUNC_END__;
5333 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5337 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5338 sizeof(wifi_direct_client_response_s))) <= 0)
5340 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
5341 client_info->sync_sockfd = -1;
5342 __wfd_reset_control();
5343 __WDC_LOG_FUNC_END__;
5344 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5348 if (rsp.cmd == WIFI_DIRECT_CMD_IS_PERSISTENT_GROUP)
5350 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5352 WDC_LOGD("Error!!! Result received = %d", rsp.result);
5353 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
5354 __WDC_LOG_FUNC_END__;
5359 WDC_LOGD("wifi_direct_is_persistent_group_enabled() %s SUCCESS", rsp.param2);
5360 *enabled = (bool) rsp.param1;
5365 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5366 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5370 __WDC_LOG_FUNC_END__;
5372 return WIFI_DIRECT_ERROR_NONE;
5376 int wifi_direct_foreach_persistent_groups(wifi_direct_persistent_group_cb callback, void* user_data)
5378 wifi_direct_client_info_s *client_info = __wfd_get_control();
5380 __WDC_LOG_FUNC_START__;
5382 if ((client_info->is_registered == false)
5383 || (client_info->client_id == WFD_INVALID_ID))
5385 WDC_LOGE("Client is NOT registered.");
5386 __WDC_LOG_FUNC_END__;
5387 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5390 if (callback == NULL)
5392 WDC_LOGE("NULL Param [callback]!");
5393 __WDC_LOG_FUNC_END__;
5394 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
5397 wifi_direct_client_request_s req;
5398 wifi_direct_client_response_s rsp;
5401 int status = WIFI_DIRECT_ERROR_NONE;
5403 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5404 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5406 req.cmd = WIFI_DIRECT_CMD_GET_PERSISTENT_GROUP_INFO;
5407 req.client_id = client_info->client_id;
5410 __wfd_client_send_request(client_info->sync_sockfd, &req,
5411 sizeof(wifi_direct_client_request_s));
5412 if (status != WIFI_DIRECT_ERROR_NONE)
5414 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5415 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
5416 client_info->sync_sockfd = -1;
5417 __wfd_reset_control();
5418 __WDC_LOG_FUNC_END__;
5419 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5423 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5424 sizeof(wifi_direct_client_response_s))) <= 0)
5426 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
5427 client_info->sync_sockfd = -1;
5428 __wfd_reset_control();
5429 __WDC_LOG_FUNC_END__;
5430 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5434 if (rsp.cmd == WIFI_DIRECT_CMD_GET_PERSISTENT_GROUP_INFO)
5436 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5438 WDC_LOGE("Error!!! Result received = %d", rsp.result);
5439 WDC_LOGE("Error!!! [%s]", __wfd_print_error(rsp.result));
5440 __WDC_LOG_FUNC_END__;
5446 int num = rsp.param1;
5448 wfd_persistent_group_info_s *buff = NULL;
5450 WDC_LOGD("Num of persistent groups = %d", (int) rsp.param1);
5454 buff = (wfd_persistent_group_info_s *) malloc(num * sizeof(wfd_persistent_group_info_s));
5457 WDC_LOGE("malloc() failed!!!.");
5458 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5462 __wfd_client_read_more_data(client_info->sync_sockfd,
5466 (wfd_persistent_group_info_s));
5467 if (status != WIFI_DIRECT_ERROR_NONE)
5471 WDC_LOGE("socket read error.");
5472 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5476 __wfd_client_print_persistent_group_info(buff, num);
5478 WDC_LOGD("wifi_direct_foreach_persistent_groups() SUCCESS");
5481 char* go_mac_address;
5483 for (i = 0; i < num; i++)
5485 ssid = strdup(buff[i].ssid);
5486 go_mac_address = (char *) calloc(1, 18);
5487 snprintf(go_mac_address, 18, MACSTR, MAC2STR(buff[i].go_mac_address));
5489 if (!callback(go_mac_address, ssid, user_data))
5500 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5501 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5505 __WDC_LOG_FUNC_END__;
5507 return WIFI_DIRECT_ERROR_NONE;
5510 int wifi_direct_remove_persistent_group(const char* mac_address, const char* ssid)
5512 __WDC_LOG_FUNC_START__;
5514 wifi_direct_client_info_s *client_info = __wfd_get_control();
5516 if ((client_info->is_registered == false)
5517 || (client_info->client_id == WFD_INVALID_ID))
5519 WDC_LOGE("Client is NOT registered.");
5520 __WDC_LOG_FUNC_END__;
5521 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5524 if ( NULL== mac_address )
5526 WDC_LOGE("NULL Param [mac_address]!");
5527 __WDC_LOG_FUNC_END__;
5528 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
5533 WDC_LOGE("NULL Param [ssid]!");
5534 __WDC_LOG_FUNC_END__;
5535 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
5538 wifi_direct_client_request_s req;
5539 wifi_direct_client_response_s rsp;
5540 wfd_persistent_group_info_s persistent_group_info;
5541 unsigned char la_mac_addr[6];
5543 int status = WIFI_DIRECT_ERROR_NONE;
5545 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5546 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5548 req.cmd = WIFI_DIRECT_CMD_REMOVE_PERSISTENT_GROUP;
5549 req.client_id = client_info->client_id;
5552 __wfd_client_send_request(client_info->sync_sockfd, &req,
5553 sizeof(wifi_direct_client_request_s));
5554 if (status != WIFI_DIRECT_ERROR_NONE)
5556 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5557 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
5558 client_info->sync_sockfd = -1;
5559 __wfd_reset_control();
5560 __WDC_LOG_FUNC_END__;
5561 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5564 WDC_LOGD("writing msg hdr is success!");
5566 strncpy(persistent_group_info.ssid, ssid, strlen(ssid));
5568 memset(la_mac_addr, 0, sizeof(la_mac_addr));
5569 macaddr_atoe(mac_address, la_mac_addr);
5570 persistent_group_info.go_mac_address[0] = la_mac_addr[0];
5571 persistent_group_info.go_mac_address[1] = la_mac_addr[1];
5572 persistent_group_info.go_mac_address[2] = la_mac_addr[2];
5573 persistent_group_info.go_mac_address[3] = la_mac_addr[3];
5574 persistent_group_info.go_mac_address[4] = la_mac_addr[4];
5575 persistent_group_info.go_mac_address[5] = la_mac_addr[5];
5578 __wfd_client_send_request(client_info->sync_sockfd, &persistent_group_info,
5579 sizeof(wfd_persistent_group_info_s));
5580 if (status != WIFI_DIRECT_ERROR_NONE)
5582 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5583 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
5584 client_info->sync_sockfd = -1;
5585 __wfd_reset_control();
5586 __WDC_LOG_FUNC_END__;
5587 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5591 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5592 sizeof(wifi_direct_client_response_s))) <= 0)
5594 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
5595 client_info->sync_sockfd = -1;
5596 __wfd_reset_control();
5597 __WDC_LOG_FUNC_END__;
5598 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5602 if (rsp.cmd == WIFI_DIRECT_CMD_REMOVE_PERSISTENT_GROUP)
5604 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5606 WDC_LOGD("Error!!! Result received = %d", rsp.result);
5607 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
5608 __WDC_LOG_FUNC_END__;
5614 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5615 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5619 __WDC_LOG_FUNC_END__;
5621 return WIFI_DIRECT_ERROR_NONE;
5624 int wifi_direct_set_p2poem_loglevel(int increase_log_level)
5626 wifi_direct_client_info_s *client_info = __wfd_get_control();
5628 __WDC_LOG_FUNC_START__;
5630 if ((client_info->is_registered == false)
5631 || (client_info->client_id == WFD_INVALID_ID))
5633 WDC_LOGE("Client is NOT registered.");
5634 __WDC_LOG_FUNC_END__;
5635 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5638 wifi_direct_client_request_s req;
5639 wifi_direct_client_response_s rsp;
5641 int ret = WIFI_DIRECT_ERROR_NONE;
5643 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5644 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5646 req.cmd = WIFI_DIRECT_CMD_SET_OEM_LOGLEVEL;
5647 req.client_id = client_info->client_id;
5648 if (increase_log_level == 0)
5649 req.data.listen_only = false;
5651 req.data.listen_only = true;
5654 __wfd_client_send_request(client_info->sync_sockfd, &req,
5655 sizeof(wifi_direct_client_request_s));
5656 if (ret != WIFI_DIRECT_ERROR_NONE)
5658 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5659 WDC_LOGE("Error!!! [%s]", __wfd_print_error(ret));
5660 client_info->sync_sockfd = -1;
5661 __wfd_reset_control();
5662 __WDC_LOG_FUNC_END__;
5663 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5667 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5668 sizeof(wifi_direct_client_response_s))) <= 0)
5670 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", ret, strerror(errno));
5671 client_info->sync_sockfd = -1;
5672 __wfd_reset_control();
5673 __WDC_LOG_FUNC_END__;
5674 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5678 if (rsp.cmd == WIFI_DIRECT_CMD_SET_OEM_LOGLEVEL)
5680 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5682 WDC_LOGD("Error!!! Result received = %d", rsp.result);
5683 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
5684 __WDC_LOG_FUNC_END__;
5690 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5691 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5695 __WDC_LOG_FUNC_END__;
5697 return WIFI_DIRECT_ERROR_NONE;