4 * Copyright (c) 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.
23 /*****************************************************************************
25 *****************************************************************************/
32 #include <sys/socket.h>
37 #include <sys/ioctl.h>
39 #include <linux/unistd.h>
47 /*****************************************************************************
49 *****************************************************************************/
51 #include <system_info.h>
53 /*****************************************************************************
54 * Wi-Fi Direct Service headers
55 *****************************************************************************/
56 #include "wifi-direct.h"
57 #include "wifi-direct-internal.h"
58 #include "wifi-direct-client-proxy.h"
59 #include "wifi-direct-ipc.h"
60 #include "wifi-direct-log.h"
61 #include "wifi-direct-dbus.h"
63 /*****************************************************************************
65 *****************************************************************************/
67 /*****************************************************************************
69 *****************************************************************************/
71 wifi_direct_client_info_s g_client_info = {
72 .is_registered = FALSE,
76 .activation_cb = NULL,
78 .connection_cb = NULL,
79 .ip_assigned_cb = NULL,
80 .peer_found_cb = NULL,
82 .user_data_for_cb_activation = NULL,
83 .user_data_for_cb_discover = NULL,
84 .user_data_for_cb_connection = NULL,
85 .user_data_for_cb_ip_assigned = NULL,
86 .user_data_for_cb_peer_found = NULL,
87 .user_data_for_cb_device_name = NULL,
88 .user_data_for_cb_state = NULL,
89 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
91 .user_data_for_cb_service = NULL,
92 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
94 .mutex = PTHREAD_MUTEX_INITIALIZER
97 /*****************************************************************************
98 * Local Functions Definition
99 *****************************************************************************/
101 static wifi_direct_client_info_s *__wfd_get_control()
103 return &g_client_info;
106 static int __net_wifidirect_gerror_to_enum(GError* error)
108 int ret = WIFI_DIRECT_ERROR_NONE;
110 WDC_LOGI("GError is NULL!!");
114 WDC_LOGE("wifi_direct_dbus_method_call_sync() failed. error [%d: %s]",
115 error->code, error->message);
117 if (NULL == strstr(error->message, "net.wifidirect.Error")) {
119 if (NULL != strstr(error->message, ".AccessDenied")) {
120 WDC_LOGE("Client doesn't have wifidirect privilege");
121 ret = WIFI_DIRECT_ERROR_PERMISSION_DENIED;
123 WDC_LOGE("DBus failure");
124 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
128 if (NULL != strstr(error->message, "InvalidParameter"))
129 ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
130 else if (NULL != strstr(error->message, "NotPermitted"))
131 ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
132 else if (NULL != strstr(error->message, "OperationFailed"))
133 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
135 else if (NULL != strstr(error->message, "TooManyClient"))
136 ret = WIFI_DIRECT_ERROR_TOO_MANY_CLIENT;
138 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
145 void __wfd_vconf_state_changed_cb(keynode_t *key, void *data)
147 __WDC_LOG_FUNC_START__;
151 if (!g_client_info.state_cb) {
152 WDC_LOGI("g_state_cb is NULL!!");
153 __WDC_LOG_FUNC_END__;
154 return; //LCOV_EXCL_LINE
157 res = vconf_get_int(VCONFKEY_WIFI_DIRECT_STATE, &state);
159 WDC_LOGE("Failed to get vconf value [%s]\n", VCONFKEY_WIFI_DIRECT_STATE);
160 __WDC_LOG_FUNC_END__;
164 if (state == VCONFKEY_WIFI_DIRECT_ACTIVATED) {
165 state = WIFI_DIRECT_STATE_ACTIVATED;
166 } else if (state == VCONFKEY_WIFI_DIRECT_DEACTIVATED) {
167 state = WIFI_DIRECT_STATE_DEACTIVATED;
168 } else if (state == VCONFKEY_WIFI_DIRECT_CONNECTED) {
169 state = WIFI_DIRECT_STATE_CONNECTED;
170 } else if (state == VCONFKEY_WIFI_DIRECT_GROUP_OWNER) {
171 state = WIFI_DIRECT_STATE_GROUP_OWNER;
172 } else if (state == VCONFKEY_WIFI_DIRECT_DISCOVERING) {
173 state = WIFI_DIRECT_STATE_DISCOVERING;
175 WDC_LOGE("This state cannot be set as wifi_direct vconf state[%d]", state);
176 __WDC_LOG_FUNC_END__;
180 g_client_info.state_cb(state, g_client_info.user_data_for_cb_state);
182 __WDC_LOG_FUNC_END__;
187 void wifi_direct_process_manage_activation(GDBusConnection *connection,
188 const gchar *object_path, GVariant *parameters)
190 __WDC_LOG_FUNC_START__;
192 wifi_direct_client_info_s *client = __wfd_get_control();
194 if (!client->activation_cb) {
195 WDC_LOGI("activation_cb is NULL!!");
196 return; //LCOV_EXCL_LINE
200 __WDC_LOG_FUNC_END__;
204 g_variant_get(parameters, "(i)", &error_code);
206 client->activation_cb(error_code,
207 WIFI_DIRECT_DEVICE_STATE_ACTIVATED,
208 client->user_data_for_cb_activation);
210 __WDC_LOG_FUNC_END__;
213 void wifi_direct_process_manage_deactivation(GDBusConnection *connection,
214 const gchar *object_path, GVariant *parameters)
216 __WDC_LOG_FUNC_START__;
218 wifi_direct_client_info_s *client = __wfd_get_control();
221 __WDC_LOG_FUNC_END__;
222 return; //LCOV_EXCL_LINE
225 if (!client->activation_cb) {
226 WDC_LOGI("activation_cb is NULL!!");
227 __WDC_LOG_FUNC_END__;
231 g_variant_get(parameters, "(i)", &error_code);
233 client->activation_cb(error_code,
234 WIFI_DIRECT_DEVICE_STATE_DEACTIVATED,
235 client->user_data_for_cb_activation);
237 __WDC_LOG_FUNC_END__;
241 void wifi_direct_process_manage_connection(GDBusConnection *connection,
242 const gchar *object_path, GVariant *parameters)
244 __WDC_LOG_FUNC_START__;
246 wifi_direct_connection_state_e connection_state;
247 const gchar *peer_mac_address = NULL;
248 wifi_direct_client_info_s *client = __wfd_get_control();
251 __WDC_LOG_FUNC_END__;
255 if (!client->connection_cb) {
256 WDC_LOGI("connection_cb is NULL!!");
257 __WDC_LOG_FUNC_END__;
261 g_variant_get(parameters, "(ii&s)",
262 &error_code, &connection_state, &peer_mac_address);
264 client->connection_cb(error_code,
267 client->user_data_for_cb_connection);
269 __WDC_LOG_FUNC_END__;
272 void wifi_direct_process_manage_disconnection(GDBusConnection *connection,
273 const gchar *object_path, GVariant *parameters)
275 __WDC_LOG_FUNC_START__;
277 wifi_direct_connection_state_e connection_state;
278 const gchar *peer_mac_address = NULL;
279 wifi_direct_client_info_s *client = __wfd_get_control();
282 __WDC_LOG_FUNC_END__;
286 if (!client->connection_cb) {
287 WDC_LOGI("connection_cb is NULL!!");
288 __WDC_LOG_FUNC_END__;
292 g_variant_get(parameters, "(ii&s)",
293 &error_code, &connection_state, &peer_mac_address);
295 client->connection_cb(error_code,
298 client->user_data_for_cb_connection);
300 __WDC_LOG_FUNC_END__;
303 void wifi_direct_process_manage_peer_ip_assigned(GDBusConnection *connection,
304 const gchar *object_path, GVariant *parameters)
306 __WDC_LOG_FUNC_START__;
307 char *get_str = NULL;
308 GError* error = NULL;
309 GVariant *reply = NULL;
310 const gchar *peer_mac_address = NULL;
311 const gchar *assigned_ip_address = NULL;
313 wifi_direct_client_info_s *client = __wfd_get_control();
316 __WDC_LOG_FUNC_END__;
320 g_variant_get(parameters, "(&s&s)",
321 &peer_mac_address, &assigned_ip_address);
323 if (!client->ip_assigned_cb) {
324 WDC_LOGI("ip_assigned_cb is NULL!!");
325 __WDC_LOG_FUNC_END__;
329 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
334 WDC_LOGE("wifi_direct_dbus_method_call_sync() failed."
335 "error [%d: %s]", error->code, error->message);
337 __WDC_LOG_FUNC_END__;
341 g_variant_get(reply, "(i&s)", ret, &get_str);
342 g_variant_unref(reply);
344 WDC_LOGD("Interface Name = [%s]", get_str);
345 WDC_LOGD("%s() return : [%d]", __func__, ret);
347 client->ip_assigned_cb(peer_mac_address, assigned_ip_address, get_str,
348 client->user_data_for_cb_ip_assigned);
350 __WDC_LOG_FUNC_END__;
353 void wifi_direct_process_manage_listen_started(GDBusConnection *connection,
354 const gchar *object_path, GVariant *parameters)
356 __WDC_LOG_FUNC_START__;
357 wifi_direct_client_info_s *client = __wfd_get_control();
359 if (!client->discover_cb) {
360 WDC_LOGI("discover_cb is NULL!!");
361 __WDC_LOG_FUNC_END__;
365 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
366 WIFI_DIRECT_ONLY_LISTEN_STARTED,
367 client->user_data_for_cb_discover);
369 __WDC_LOG_FUNC_END__;
372 void wifi_direct_process_manage_discovery_started(GDBusConnection *connection,
373 const gchar *object_path, GVariant *parameters)
375 __WDC_LOG_FUNC_START__;
376 wifi_direct_client_info_s *client = __wfd_get_control();
378 if (!client->discover_cb) {
379 WDC_LOGI("discover_cb is NULL!!");
380 __WDC_LOG_FUNC_END__;
384 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
385 WIFI_DIRECT_DISCOVERY_STARTED,
386 client->user_data_for_cb_discover);
388 __WDC_LOG_FUNC_END__;
391 void wifi_direct_process_manage_discovery_finished(GDBusConnection *connection,
392 const gchar *object_path, GVariant *parameters)
394 __WDC_LOG_FUNC_START__;
395 wifi_direct_client_info_s *client = __wfd_get_control();
397 if (!client->discover_cb) {
398 WDC_LOGI("discover_cb is NULL!!");
399 __WDC_LOG_FUNC_END__;
403 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
404 WIFI_DIRECT_DISCOVERY_FINISHED,
405 client->user_data_for_cb_discover);
407 __WDC_LOG_FUNC_END__;
410 void wifi_direct_process_manage_peer_found(GDBusConnection *connection,
411 const gchar *object_path, GVariant *parameters)
413 __WDC_LOG_FUNC_START__;
414 const gchar *peer_mac_address = NULL;
415 wifi_direct_client_info_s *client = __wfd_get_control();
418 __WDC_LOG_FUNC_END__;
422 g_variant_get(parameters, "(&s)", &peer_mac_address);
424 if (client->peer_found_cb) {
425 client->peer_found_cb(WIFI_DIRECT_ERROR_NONE,
426 WIFI_DIRECT_DISCOVERY_FOUND,
428 client->user_data_for_cb_discover);
430 WDC_LOGI("peer_found_cb is NULL!!");
433 if (!client->discover_cb) {
434 WDC_LOGI("discover_cb is NULL!!");
435 __WDC_LOG_FUNC_END__;
439 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
440 WIFI_DIRECT_DISCOVERY_FOUND,
441 client->user_data_for_cb_discover);
443 __WDC_LOG_FUNC_END__;
446 void wifi_direct_process_manage_peer_lost(GDBusConnection *connection,
447 const gchar *object_path, GVariant *parameters)
449 __WDC_LOG_FUNC_START__;
450 const gchar *peer_mac_address = NULL;
451 wifi_direct_client_info_s *client = __wfd_get_control();
454 __WDC_LOG_FUNC_END__;
458 g_variant_get(parameters, "(&s)", &peer_mac_address);
460 if (client->peer_found_cb) {
461 client->peer_found_cb(WIFI_DIRECT_ERROR_NONE,
462 WIFI_DIRECT_DISCOVERY_LOST,
464 client->user_data_for_cb_discover);
466 WDC_LOGI("peer_found_cb is NULL!!");
469 if (!client->discover_cb) {
470 WDC_LOGI("discover_cb is NULL!!");
471 __WDC_LOG_FUNC_END__;
475 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
476 WIFI_DIRECT_DISCOVERY_LOST,
477 client->user_data_for_cb_discover);
479 __WDC_LOG_FUNC_END__;
483 void wifi_direct_process_group_created(GDBusConnection *connection,
484 const gchar *object_path, GVariant *parameters)
486 __WDC_LOG_FUNC_START__;
487 wifi_direct_client_info_s *client = __wfd_get_control();
489 if (!client->connection_cb) {
490 WDC_LOGI("connection_cb is NULL!!");
491 __WDC_LOG_FUNC_END__;
495 client->connection_cb(WIFI_DIRECT_ERROR_NONE,
496 WIFI_DIRECT_GROUP_CREATED,
498 client->user_data_for_cb_connection);
500 __WDC_LOG_FUNC_END__;
503 void wifi_direct_process_group_destroyed(GDBusConnection *connection,
504 const gchar *object_path, GVariant *parameters)
506 __WDC_LOG_FUNC_START__;
507 wifi_direct_client_info_s *client = __wfd_get_control();
509 if (!client->connection_cb) {
510 WDC_LOGI("connection_cb is NULL!!");
511 __WDC_LOG_FUNC_END__;
515 client->connection_cb(WIFI_DIRECT_ERROR_NONE,
516 WIFI_DIRECT_GROUP_DESTROYED,
518 client->user_data_for_cb_connection);
520 __WDC_LOG_FUNC_END__;
523 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
525 void wifi_direct_process_service_discovery_started(GDBusConnection *connection,
526 const gchar *object_path, GVariant *parameters)
528 __WDC_LOG_FUNC_START__;
529 wifi_direct_client_info_s *client = __wfd_get_control();
531 if (!client->service_cb) {
532 WDC_LOGI("service_cb is NULL!!\n");
533 __WDC_LOG_FUNC_END__;
537 client->service_cb(WIFI_DIRECT_ERROR_NONE,
538 WIFI_DIRECT_SERVICE_DISCOVERY_STARTED,
539 WIFI_DIRECT_SERVICE_TYPE_ALL,
542 client->user_data_for_cb_service);
544 __WDC_LOG_FUNC_END__;
547 void wifi_direct_process_service_discovery_found(GDBusConnection *connection,
548 const gchar *object_path, GVariant *parameters)
550 __WDC_LOG_FUNC_START__;
551 wifi_direct_service_type_e service_type;
552 const gchar* response_data = NULL;
553 const gchar* peer_mac_address = NULL;
554 wifi_direct_client_info_s *client = __wfd_get_control();
557 __WDC_LOG_FUNC_END__;
561 g_variant_get(parameters, "(i&s&s)",
562 &service_type, &response_data, &peer_mac_address);
564 if (!client->service_cb) {
565 WDC_LOGI("service_cb is NULL!!\n");
566 __WDC_LOG_FUNC_END__;
570 client->service_cb(WIFI_DIRECT_ERROR_NONE,
571 WIFI_DIRECT_SERVICE_DISCOVERY_FOUND,
573 (void *) response_data,
575 client->user_data_for_cb_service);
577 __WDC_LOG_FUNC_END__;
580 void wifi_direct_process_service_discovery_finished(GDBusConnection *connection,
581 const gchar *object_path, GVariant *parameters)
583 __WDC_LOG_FUNC_START__;
584 wifi_direct_client_info_s *client = __wfd_get_control();
586 if (!client->service_cb) {
587 WDC_LOGI("service_cb is NULL!!\n");
588 __WDC_LOG_FUNC_END__;
592 client->service_cb(WIFI_DIRECT_ERROR_NONE,
593 WIFI_DIRECT_SERVICE_DISCOVERY_FINISHED,
594 WIFI_DIRECT_SERVICE_TYPE_ALL,
597 client->user_data_for_cb_service);
599 __WDC_LOG_FUNC_END__;
601 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
603 void __wfd_client_print_entry_list(wfd_discovery_entry_s *list, int num)
607 WDC_LOGD("------------------------------------------");
608 for (i = 0; i < num; i++) {
609 WDC_LOGD("== Peer index : %d ==", i);
610 WDC_LOGD("is Group Owner ? %s", list[i].is_group_owner ? "YES" : "NO");
611 WDC_LOGD("device_name : %s", list[i].device_name);
612 WDC_LOGD("MAC address : "MACSECSTR, MAC2SECSTR(list[i].mac_address));
613 WDC_LOGD("wps cfg method : %x", list[i].wps_cfg_methods);
614 WDC_LOGD("Device Type: %d - %d", list[i].category, list[i].subcategory);
615 WDC_LOGD("Listen channel: %d", list[i].channel);
617 WDC_LOGD("------------------------------------------");
620 void __wfd_client_print_connected_peer_info(wfd_connected_peer_info_s *list, int num)
624 WDC_LOGD("------------------------------------------\n");
625 for (i = 0; i < num; i++) {
626 WDC_LOGD("== Peer index : %d ==\n", i);
627 WDC_LOGD("device_name : %s\n", list[i].device_name);
628 WDC_LOGD("Device MAC : " MACSECSTR "\n", MAC2SECSTR(list[i].mac_address));
629 WDC_LOGD("Device Type: %d - %d", list[i].category, list[i].subcategory);
630 WDC_LOGD("channel : %d\n", list[i].channel);
631 WDC_LOGD("IP ["IPSECSTR"]\n", IP2SECSTR(list[i].ip_address));
633 WDC_LOGD("------------------------------------------\n");
636 void __wfd_client_print_persistent_group_info(wfd_persistent_group_info_s *list, int num)
640 WDC_LOGD("------------------------------------------\n");
641 for (i = 0; i < num; i++) {
642 WDC_LOGD("== Persistent Group index : %d ==", i);
643 WDC_LOGD("ssid : %s", list[i].ssid);
644 WDC_LOGD("GO MAC : " MACSECSTR, MAC2SECSTR(list[i].go_mac_address));
646 WDC_LOGD("------------------------------------------\n");
650 int wifi_direct_initialize(void)
652 __WDC_LOG_FUNC_START__;
654 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
656 GError* error = NULL;
657 GVariant *reply = NULL;
658 bool wifi_direct_enable;
662 if (g_client_info.is_registered == TRUE) {
663 WDC_LOGW("Warning!!! Already registered\nUpdate user data and callback!");
664 __WDC_LOG_FUNC_END__;
665 return WIFI_DIRECT_ERROR_ALREADY_INITIALIZED;
668 res = system_info_get_platform_bool("tizen.org/feature/network.wifi.direct", &wifi_direct_enable);
670 WDC_LOGE("Failed to get sys info");
671 __WDC_LOG_FUNC_END__;
672 return res; //LCOV_EXCL_LINE
675 if (!wifi_direct_enable) {
676 WDC_LOGE("Wi-Fi Direct not supported");
677 return WIFI_DIRECT_ERROR_NOT_SUPPORTED; //LCOV_EXCL_LINE
680 if (wifi_direct_dbus_init() == FALSE) {
681 WDC_LOGW("Failed to initialize dbus");
682 __WDC_LOG_FUNC_END__;
683 return WIFI_DIRECT_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
686 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
687 "IsGroupOwner", NULL, &error);
689 res = __net_wifidirect_gerror_to_enum(error);
690 if (res != WIFI_DIRECT_ERROR_NONE)
693 g_variant_get(reply, "(b)", &val);
694 WDC_LOGD("is group owner [%s]", val ? "YES" : "NO");
696 g_client_info.is_registered = TRUE;
698 /* Initialize callbacks */
699 g_client_info.activation_cb = NULL;
700 g_client_info.discover_cb = NULL;
701 g_client_info.connection_cb = NULL;
702 g_client_info.ip_assigned_cb = NULL;
704 g_client_info.peer_found_cb = NULL;
705 g_client_info.user_data_for_cb_activation = NULL;
706 g_client_info.user_data_for_cb_discover = NULL;
707 g_client_info.user_data_for_cb_connection = NULL;
708 g_client_info.user_data_for_cb_ip_assigned = NULL;
709 g_client_info.user_data_for_cb_peer_found = NULL;
710 g_client_info.user_data_for_cb_device_name = NULL;
712 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
713 g_client_info.service_cb = NULL;
714 g_client_info.user_data_for_cb_service = NULL;
715 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
717 __WDC_LOG_FUNC_END__;
718 return WIFI_DIRECT_ERROR_NONE;
721 int wifi_direct_deinitialize(void)
723 __WDC_LOG_FUNC_START__;
725 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
727 if (g_client_info.is_registered == false) {
728 WDC_LOGE("Client is already deregistered");
729 __WDC_LOG_FUNC_END__;
730 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
733 wifi_direct_dbus_deinit();
735 g_client_info.activation_cb = NULL;
736 g_client_info.discover_cb = NULL;
737 g_client_info.connection_cb = NULL;
738 g_client_info.ip_assigned_cb = NULL;
739 g_client_info.peer_found_cb = NULL;
740 g_client_info.user_data_for_cb_activation = NULL;
741 g_client_info.user_data_for_cb_discover = NULL;
742 g_client_info.user_data_for_cb_connection = NULL;
743 g_client_info.user_data_for_cb_ip_assigned = NULL;
744 g_client_info.user_data_for_cb_peer_found = NULL;
746 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
747 g_client_info.service_cb = NULL;
748 g_client_info.user_data_for_cb_service = NULL;
749 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
751 g_client_info.is_registered = FALSE;
753 __WDC_LOG_FUNC_END__;
754 return WIFI_DIRECT_ERROR_NONE;
758 int wifi_direct_set_device_state_changed_cb(wifi_direct_device_state_changed_cb cb,
761 __WDC_LOG_FUNC_START__;
763 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
766 WDC_LOGE("Invalid parameter");
767 __WDC_LOG_FUNC_END__;
768 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
771 if (g_client_info.is_registered == false) {
772 WDC_LOGE("Client is not initialized.");
773 __WDC_LOG_FUNC_END__;
774 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
777 g_client_info.activation_cb = cb;
778 g_client_info.user_data_for_cb_activation = user_data;
780 __WDC_LOG_FUNC_END__;
781 return WIFI_DIRECT_ERROR_NONE;
785 int wifi_direct_unset_device_state_changed_cb(void)
787 __WDC_LOG_FUNC_START__;
789 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
791 if (g_client_info.is_registered == false) {
792 WDC_LOGE("Client is not initialized.\n");
793 __WDC_LOG_FUNC_END__;
794 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
797 g_client_info.activation_cb = NULL;
798 g_client_info.user_data_for_cb_activation = NULL;
800 __WDC_LOG_FUNC_END__;
801 return WIFI_DIRECT_ERROR_NONE;
806 wifi_direct_set_discovery_state_changed_cb(wifi_direct_discovery_state_chagned_cb cb,
809 __WDC_LOG_FUNC_START__;
811 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
814 WDC_LOGE("Callback is NULL.\n");
815 __WDC_LOG_FUNC_END__;
816 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
819 if (g_client_info.is_registered == false) {
820 WDC_LOGE("Client is not initialized.\n");
821 __WDC_LOG_FUNC_END__;
822 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
825 g_client_info.discover_cb = cb;
826 g_client_info.user_data_for_cb_discover = user_data;
828 __WDC_LOG_FUNC_END__;
829 return WIFI_DIRECT_ERROR_NONE;
833 int wifi_direct_unset_discovery_state_changed_cb(void)
835 __WDC_LOG_FUNC_START__;
837 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
839 if (g_client_info.is_registered == false) {
840 WDC_LOGE("Client is not initialized.\n");
841 __WDC_LOG_FUNC_END__;
842 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
845 g_client_info.discover_cb = NULL;
846 g_client_info.user_data_for_cb_discover = NULL;
848 __WDC_LOG_FUNC_END__;
849 return WIFI_DIRECT_ERROR_NONE;
852 int wifi_direct_set_peer_found_cb(wifi_direct_peer_found_cb cb,
855 __WDC_LOG_FUNC_START__;
857 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
860 WDC_LOGE("Callback is NULL.\n");
861 __WDC_LOG_FUNC_END__;
862 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
865 if (g_client_info.is_registered == false) {
866 WDC_LOGE("Client is not initialized.\n");
867 __WDC_LOG_FUNC_END__;
868 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
871 g_client_info.peer_found_cb = cb;
872 g_client_info.user_data_for_cb_peer_found = user_data;
874 __WDC_LOG_FUNC_END__;
875 return WIFI_DIRECT_ERROR_NONE;
879 int wifi_direct_unset_peer_found_cb(void)
881 __WDC_LOG_FUNC_START__;
883 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
885 if (g_client_info.is_registered == false) {
886 WDC_LOGE("Client is not initialized.\n");
887 __WDC_LOG_FUNC_END__;
888 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
891 g_client_info.peer_found_cb = NULL;
892 g_client_info.user_data_for_cb_peer_found = NULL;
894 __WDC_LOG_FUNC_END__;
895 return WIFI_DIRECT_ERROR_NONE;
898 int wifi_direct_set_service_state_changed_cb(wifi_direct_service_state_changed_cb cb,
901 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
902 __WDC_LOG_FUNC_START__;
904 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
908 WDC_LOGE("Callback is NULL.");
909 __WDC_LOG_FUNC_END__;
910 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
913 if (g_client_info.is_registered == false) {
914 WDC_LOGE("Client is not initialized.");
915 __WDC_LOG_FUNC_END__;
916 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
919 g_client_info.service_cb = cb;
920 g_client_info.user_data_for_cb_service = user_data;
922 __WDC_LOG_FUNC_END__;
923 return WIFI_DIRECT_ERROR_NONE;
925 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
926 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
927 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
931 int wifi_direct_unset_service_state_changed_cb(void)
933 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
934 __WDC_LOG_FUNC_START__;
936 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
939 if (g_client_info.is_registered == false) {
940 WDC_LOGE("Client is not initialized.");
941 __WDC_LOG_FUNC_END__;
942 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
945 g_client_info.service_cb = NULL;
946 g_client_info.user_data_for_cb_service = NULL;
948 __WDC_LOG_FUNC_END__;
949 return WIFI_DIRECT_ERROR_NONE;
951 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
952 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
953 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
956 int wifi_direct_set_connection_state_changed_cb(wifi_direct_connection_state_changed_cb cb,
959 __WDC_LOG_FUNC_START__;
961 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
964 WDC_LOGE("Callback is NULL.\n");
965 __WDC_LOG_FUNC_END__;
966 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
969 if (g_client_info.is_registered == false) {
970 WDC_LOGE("Client is not initialized.\n");
971 __WDC_LOG_FUNC_END__;
972 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
975 g_client_info.connection_cb = cb;
976 g_client_info.user_data_for_cb_connection = user_data;
978 __WDC_LOG_FUNC_END__;
979 return WIFI_DIRECT_ERROR_NONE;
983 int wifi_direct_unset_connection_state_changed_cb(void)
985 __WDC_LOG_FUNC_START__;
987 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
989 if (g_client_info.is_registered == false) {
990 WDC_LOGE("Client is not initialized");
991 __WDC_LOG_FUNC_END__;
992 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
995 g_client_info.connection_cb = NULL;
996 g_client_info.user_data_for_cb_connection = NULL;
998 __WDC_LOG_FUNC_END__;
999 return WIFI_DIRECT_ERROR_NONE;
1003 int wifi_direct_set_client_ip_address_assigned_cb(wifi_direct_client_ip_address_assigned_cb cb,
1006 __WDC_LOG_FUNC_START__;
1008 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1011 WDC_LOGE("Callback is NULL");
1012 __WDC_LOG_FUNC_END__;
1013 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1016 if (g_client_info.is_registered == false) {
1017 WDC_LOGE("Client is not initialized");
1018 __WDC_LOG_FUNC_END__;
1019 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1022 g_client_info.ip_assigned_cb = cb;
1023 g_client_info.user_data_for_cb_ip_assigned = user_data;
1025 __WDC_LOG_FUNC_END__;
1026 return WIFI_DIRECT_ERROR_NONE;
1029 int wifi_direct_unset_client_ip_address_assigned_cb(void)
1031 __WDC_LOG_FUNC_START__;
1033 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1035 if (g_client_info.is_registered == false) {
1036 WDC_LOGE("Client is not initialized");
1037 __WDC_LOG_FUNC_END__;
1038 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1041 g_client_info.ip_assigned_cb = NULL;
1042 g_client_info.user_data_for_cb_ip_assigned = NULL;
1044 __WDC_LOG_FUNC_END__;
1045 return WIFI_DIRECT_ERROR_NONE;
1048 int wifi_direct_set_state_changed_cb(wifi_direct_state_changed_cb cb, void *user_data)
1050 __WDC_LOG_FUNC_START__;
1051 int ret = WIFI_DIRECT_ERROR_NONE;
1053 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1056 WDC_LOGE("Callback is NULL");
1057 __WDC_LOG_FUNC_END__;
1058 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1061 ret = vconf_notify_key_changed(VCONFKEY_WIFI_DIRECT_STATE,
1062 __wfd_vconf_state_changed_cb, NULL);
1064 WDC_LOGE("Failed to set vconf notification callback");
1065 __WDC_LOG_FUNC_END__;
1066 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1069 g_client_info.state_cb = cb;
1070 g_client_info.user_data_for_cb_state = user_data;
1072 __WDC_LOG_FUNC_END__;
1073 return WIFI_DIRECT_ERROR_NONE;
1076 int wifi_direct_unset_state_changed_cb(void)
1078 __WDC_LOG_FUNC_START__;
1079 int ret = WIFI_DIRECT_ERROR_NONE;
1081 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1083 ret = vconf_ignore_key_changed(VCONFKEY_WIFI_DIRECT_STATE,
1084 __wfd_vconf_state_changed_cb);
1086 WDC_LOGE("Failed to ignore vconf notification callback");
1087 __WDC_LOG_FUNC_END__;
1088 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1091 g_client_info.state_cb = NULL;
1092 g_client_info.user_data_for_cb_state = NULL;
1094 __WDC_LOG_FUNC_END__;
1095 return WIFI_DIRECT_ERROR_NONE;
1098 int wifi_direct_activate(void)
1100 __WDC_LOG_FUNC_START__;
1101 GError *error = NULL;
1102 GVariant *reply = NULL;
1103 int ret = WIFI_DIRECT_ERROR_NONE;
1105 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1107 if (g_client_info.is_registered == false) {
1108 WDC_LOGE("Client is NOT registered");
1109 __WDC_LOG_FUNC_END__;
1110 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1113 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1114 "Activate", NULL, &error);
1116 ret = __net_wifidirect_gerror_to_enum(error);
1117 if (ret == WIFI_DIRECT_ERROR_NONE) {
1118 g_variant_get(reply, "(i)", &ret);
1119 g_variant_unref(reply);
1122 WDC_LOGD("%s() return : [%d]", __func__, ret);
1123 __WDC_LOG_FUNC_END__;
1127 int wifi_direct_deactivate(void)
1129 __WDC_LOG_FUNC_START__;
1130 GError *error = NULL;
1131 GVariant *reply = NULL;
1132 int ret = WIFI_DIRECT_ERROR_NONE;
1134 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1136 if (g_client_info.is_registered == false) {
1137 WDC_LOGE("Client is NOT registered");
1138 __WDC_LOG_FUNC_END__;
1139 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1142 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1143 "Deactivate", NULL, &error);
1145 ret = __net_wifidirect_gerror_to_enum(error);
1146 if (ret == WIFI_DIRECT_ERROR_NONE) {
1147 g_variant_get(reply, "(i)", &ret);
1148 g_variant_unref(reply);
1151 WDC_LOGD("%s() return : [%d]", __func__, ret);
1152 __WDC_LOG_FUNC_END__;
1156 int wifi_direct_start_discovery(bool listen_only, int timeout)
1158 __WDC_LOG_FUNC_START__;
1159 GVariantBuilder *builder = NULL;
1160 GVariant *params = NULL;
1161 GError *error = NULL;
1162 GVariant *reply = NULL;
1163 int ret = WIFI_DIRECT_ERROR_NONE;
1165 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1167 if (g_client_info.is_registered == false) {
1168 WDC_LOGE("Client is NOT registered");
1169 __WDC_LOG_FUNC_END__;
1170 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1174 WDC_LOGE("Negative value. Param [timeout]!");
1175 __WDC_LOG_FUNC_END__;
1176 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1179 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1180 g_variant_builder_add(builder, "{sv}", "Mode", g_variant_new("b", listen_only));
1181 g_variant_builder_add(builder, "{sv}", "Timeout", g_variant_new("i", timeout));
1182 params = g_variant_new("(a{sv})", builder);
1183 g_variant_builder_unref(builder);
1184 WDC_LOGI("listen only (%d) timeout (%d)", listen_only, timeout);
1186 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1187 "StartDiscovery", params, &error);
1189 ret = __net_wifidirect_gerror_to_enum(error);
1190 if (ret == WIFI_DIRECT_ERROR_NONE) {
1191 g_variant_get(reply, "(i)", &ret);
1192 g_variant_unref(reply);
1195 WDC_LOGD("%s() return : [%d]", __func__, ret);
1196 __WDC_LOG_FUNC_END__;
1200 int wifi_direct_start_discovery_specific_channel(bool listen_only,
1202 wifi_direct_discovery_channel_e channel)
1204 __WDC_LOG_FUNC_START__;
1205 GVariantBuilder *builder = NULL;
1206 GVariant *params = NULL;
1207 GError *error = NULL;
1208 GVariant *reply = NULL;
1209 int ret = WIFI_DIRECT_ERROR_NONE;
1211 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1213 if (g_client_info.is_registered == false) {
1214 WDC_LOGE("Client is NOT registered");
1215 __WDC_LOG_FUNC_END__;
1216 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1220 WDC_LOGE("Negative value. Param [timeout]!");
1221 __WDC_LOG_FUNC_END__;
1222 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1225 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1226 g_variant_builder_add(builder, "{sv}", "Mode", g_variant_new("b", listen_only));
1227 g_variant_builder_add(builder, "{sv}", "Timeout", g_variant_new("i", timeout));
1228 g_variant_builder_add(builder, "{sv}", "Channel", g_variant_new("i", channel));
1229 params = g_variant_new("(a{sv})", builder);
1230 g_variant_builder_unref(builder);
1231 WDC_LOGI("listen only (%d) timeout (%d)", listen_only, timeout);
1233 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1234 "StartDiscovery", params, &error);
1236 ret = __net_wifidirect_gerror_to_enum(error);
1237 if (ret == WIFI_DIRECT_ERROR_NONE) {
1238 g_variant_get(reply, "(i)", &ret);
1239 g_variant_unref(reply);
1242 WDC_LOGD("%s() return : [%d]", __func__, ret);
1243 __WDC_LOG_FUNC_END__;
1247 int wifi_direct_cancel_discovery(void)
1249 __WDC_LOG_FUNC_START__;
1250 GError *error = NULL;
1251 GVariant *reply = NULL;
1252 int ret = WIFI_DIRECT_ERROR_NONE;
1254 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1256 if (g_client_info.is_registered == false) {
1257 WDC_LOGE("Client is NOT registered");
1258 __WDC_LOG_FUNC_END__;
1259 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1262 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1263 "StopDiscovery", NULL, &error);
1265 ret = __net_wifidirect_gerror_to_enum(error);
1266 if (ret == WIFI_DIRECT_ERROR_NONE) {
1267 g_variant_get(reply, "(i)", &ret);
1268 g_variant_unref(reply);
1271 WDC_LOGD("%s() return : [%d]", __func__, ret);
1272 __WDC_LOG_FUNC_END__;
1277 static char **get_service_list(char *services, unsigned int *count)
1279 __WDC_LOG_FUNC_START__;
1280 char **result = NULL;
1283 unsigned int cnt = 0;
1286 char *saveptr = NULL;
1288 if (!count || !services || (services && strlen(services) <= 0)) {
1289 WDC_LOGE("Invalid parameters.");
1290 __WDC_LOG_FUNC_END__;
1295 pos2 = g_strdup(services);
1297 pos1 = strtok_r(pos1, ",\n", &saveptr);
1300 pos1 = strtok_r(NULL, ",\n", &saveptr);
1302 WDC_LOGD("Total Service Count = %d", cnt);
1305 result = (char**) g_try_malloc0_n(cnt, sizeof(char *));
1307 WDC_LOGE("Failed to allocate memory for result");
1311 pos2 = strtok_r(pos2, ",\n", &saveptr);
1312 while (pos2 != NULL) {
1313 char *s = strchr(pos2, ' ');
1316 result[i++] = strdup(pos2);
1317 pos2 = strtok_r(NULL, ",\n", &saveptr);
1331 for (j = 0; j < i && result[j] != NULL; j++)
1338 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
1340 int wifi_direct_foreach_discovered_peers(wifi_direct_discovered_peer_cb cb,
1343 __WDC_LOG_FUNC_START__;
1345 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1347 GVariant *params = NULL;
1348 GError *error = NULL;
1349 GVariant *reply = NULL;
1350 GVariantIter *iter_peers = NULL;
1351 GVariantIter *iter_peer = NULL;
1352 GVariant *var = NULL;
1354 int ret = WIFI_DIRECT_ERROR_NONE;
1356 if (g_client_info.is_registered == false) {
1357 WDC_LOGE("Client is NOT registered");
1358 __WDC_LOG_FUNC_END__;
1359 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1363 WDC_LOGE("NULL Param [callback]!");
1364 __WDC_LOG_FUNC_END__;
1365 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1368 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1369 "GetDiscoveredPeers", params, &error);
1371 ret = __net_wifidirect_gerror_to_enum(error);
1372 if (ret != WIFI_DIRECT_ERROR_NONE)
1375 g_variant_get(reply, "(iaa{sv})", &ret, &iter_peers);
1376 if (ret != WIFI_DIRECT_ERROR_NONE) {
1377 __WDC_LOG_FUNC_END__;
1378 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1381 WDC_LOGD("wifi_direct_foreach_discovered_peers() SUCCESS");
1383 while (g_variant_iter_loop(iter_peers, "a{sv}", &iter_peer)) {
1384 wifi_direct_discovered_peer_info_s *peer_list = NULL;
1386 peer_list = (wifi_direct_discovered_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_discovered_peer_info_s));
1388 WDC_LOGE("Failed to allocate memory");
1392 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
1393 if (!g_strcmp0(key, "DeviceName")) {
1394 const char *device_name = NULL;
1396 g_variant_get(var, "&s", &device_name);
1397 peer_list->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
1399 } else if (!g_strcmp0(key, "DeviceAddress")) {
1400 unsigned char mac_address[MACADDR_LEN] = {0, };
1402 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
1403 peer_list->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
1404 if (peer_list->mac_address)
1405 g_snprintf(peer_list->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
1407 } else if (!g_strcmp0(key, "InterfaceAddress")) {
1408 unsigned char intf_address[MACADDR_LEN] = {0, };
1410 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
1411 peer_list->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
1412 if (peer_list->interface_address)
1413 g_snprintf(peer_list->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
1415 } else if (!g_strcmp0(key, "Channel")) {
1416 peer_list->channel = g_variant_get_uint16(var);
1418 } else if (!g_strcmp0(key, "IsGroupOwner")) {
1419 peer_list->is_group_owner = g_variant_get_boolean(var);
1421 } else if (!g_strcmp0(key, "IsPersistentGO")) {
1422 peer_list->is_persistent_group_owner = g_variant_get_boolean(var);
1424 } else if (!g_strcmp0(key, "IsConnected")) {
1425 peer_list->is_connected = g_variant_get_boolean(var);
1427 } else if (!g_strcmp0(key, "Category")) {
1428 peer_list->primary_device_type = g_variant_get_uint16(var);
1430 } else if (!g_strcmp0(key, "SubCategory")) {
1431 peer_list->secondary_device_type = g_variant_get_uint16(var);
1433 } else if (!g_strcmp0(key, "IsWfdDevice")) {
1434 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
1435 peer_list->is_miracast_device = g_variant_get_boolean(var);
1436 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
1442 /* __wfd_client_print_entry_list(peer_list, 1); */
1443 if (!cb(peer_list, user_data)) {
1444 g_variant_iter_free(iter_peer);
1449 g_variant_iter_free(iter_peers);
1450 g_variant_unref(reply);
1451 __WDC_LOG_FUNC_END__;
1452 return WIFI_DIRECT_ERROR_NONE;
1455 int wifi_direct_connect(char *mac_address)
1457 __WDC_LOG_FUNC_START__;
1459 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1461 GVariant *params = NULL;
1462 GError *error = NULL;
1463 GVariant *reply = NULL;
1464 int ret = WIFI_DIRECT_ERROR_NONE;
1466 if (g_client_info.is_registered == false) {
1467 WDC_LOGE("Client is NOT registered");
1468 __WDC_LOG_FUNC_END__;
1469 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1473 WDC_LOGE("mac_addr is NULL");
1474 __WDC_LOG_FUNC_END__;
1475 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1478 params = g_variant_new("(s)", mac_address);
1479 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1480 "Connect", params, &error);
1482 ret = __net_wifidirect_gerror_to_enum(error);
1483 if (ret == WIFI_DIRECT_ERROR_NONE) {
1484 g_variant_get(reply, "(i)", &ret);
1485 g_variant_unref(reply);
1488 WDC_LOGD("%s() return : [%d]", __func__, ret);
1489 __WDC_LOG_FUNC_END__;
1494 int wifi_direct_cancel_connection(char *mac_address)
1496 __WDC_LOG_FUNC_START__;
1498 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1500 GVariant *params = NULL;
1501 GError *error = NULL;
1502 GVariant *reply = NULL;
1503 int ret = WIFI_DIRECT_ERROR_NONE;
1505 if (g_client_info.is_registered == false) {
1506 WDC_LOGE("Client is NOT registered");
1507 __WDC_LOG_FUNC_END__;
1508 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1512 WDC_LOGE("mac_addr is NULL");
1513 __WDC_LOG_FUNC_END__;
1514 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1517 params = g_variant_new("(s)", mac_address);
1518 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1519 "CancelConnection", params, &error);
1521 ret = __net_wifidirect_gerror_to_enum(error);
1522 if (ret == WIFI_DIRECT_ERROR_NONE) {
1523 g_variant_get(reply, "(i)", &ret);
1524 g_variant_unref(reply);
1527 WDC_LOGD("%s() return : [%d]", __func__, ret);
1528 __WDC_LOG_FUNC_END__;
1533 int wifi_direct_reject_connection(char *mac_address)
1535 __WDC_LOG_FUNC_START__;
1537 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1539 GVariant *params = NULL;
1540 GError *error = NULL;
1541 GVariant *reply = NULL;
1542 int ret = WIFI_DIRECT_ERROR_NONE;
1544 if (g_client_info.is_registered == false) {
1545 WDC_LOGE("Client is NOT registered");
1546 __WDC_LOG_FUNC_END__;
1547 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1551 WDC_LOGE("mac_addr is NULL");
1552 __WDC_LOG_FUNC_END__;
1553 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1556 params = g_variant_new("(s)", mac_address);
1557 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1558 "RejectConnection", params, &error);
1560 ret = __net_wifidirect_gerror_to_enum(error);
1561 if (ret == WIFI_DIRECT_ERROR_NONE) {
1562 g_variant_get(reply, "(i)", &ret);
1563 g_variant_unref(reply);
1566 WDC_LOGD("%s() return : [%d]", __func__, ret);
1567 __WDC_LOG_FUNC_END__;
1572 int wifi_direct_disconnect_all(void)
1574 __WDC_LOG_FUNC_START__;
1576 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1578 GError *error = NULL;
1579 GVariant *reply = NULL;
1580 int ret = WIFI_DIRECT_ERROR_NONE;
1582 if (g_client_info.is_registered == false) {
1583 WDC_LOGE("Client is NOT registered");
1584 __WDC_LOG_FUNC_END__;
1585 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1588 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1589 "DisconnectAll", NULL, &error);
1591 ret = __net_wifidirect_gerror_to_enum(error);
1592 if (ret == WIFI_DIRECT_ERROR_NONE) {
1593 g_variant_get(reply, "(i)", &ret);
1594 g_variant_unref(reply);
1597 WDC_LOGD("%s() return : [%d]", __func__, ret);
1598 __WDC_LOG_FUNC_END__;
1603 int wifi_direct_disconnect(char *mac_address)
1605 __WDC_LOG_FUNC_START__;
1607 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1609 GVariant *params = NULL;
1610 GError *error = NULL;
1611 GVariant *reply = NULL;
1612 int ret = WIFI_DIRECT_ERROR_NONE;
1614 if (g_client_info.is_registered == false) {
1615 WDC_LOGE("Client is NOT registered");
1616 __WDC_LOG_FUNC_END__;
1617 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1621 WDC_LOGE("mac_addr is NULL");
1622 __WDC_LOG_FUNC_END__;
1623 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1626 params = g_variant_new("(s)", mac_address);
1627 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1628 "Disconnect", params, &error);
1630 ret = __net_wifidirect_gerror_to_enum(error);
1631 if (ret == WIFI_DIRECT_ERROR_NONE) {
1632 g_variant_get(reply, "(i)", &ret);
1633 g_variant_unref(reply);
1636 WDC_LOGD("%s() return : [%d]", __func__, ret);
1637 __WDC_LOG_FUNC_END__;
1641 int wifi_direct_accept_connection(char *mac_address)
1643 __WDC_LOG_FUNC_START__;
1645 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1647 GVariant *params = NULL;
1648 GError *error = NULL;
1649 GVariant *reply = NULL;
1650 int ret = WIFI_DIRECT_ERROR_NONE;
1652 if (g_client_info.is_registered == false) {
1653 WDC_LOGE("Client is NOT registered");
1654 __WDC_LOG_FUNC_END__;
1655 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1659 WDC_LOGE("mac_addr is NULL");
1660 __WDC_LOG_FUNC_END__;
1661 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1664 params = g_variant_new("(s)", mac_address);
1665 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1666 "AcceptConnection", params, &error);
1668 ret = __net_wifidirect_gerror_to_enum(error);
1669 if (ret == WIFI_DIRECT_ERROR_NONE) {
1670 g_variant_get(reply, "(i)", &ret);
1671 g_variant_unref(reply);
1674 WDC_LOGD("%s() return : [%d]", __func__, ret);
1675 __WDC_LOG_FUNC_END__;
1680 int wifi_direct_foreach_connected_peers(wifi_direct_connected_peer_cb cb,
1683 __WDC_LOG_FUNC_START__;
1685 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1687 GVariant *params = NULL;
1688 GError *error = NULL;
1689 GVariant *reply = NULL;
1690 GVariantIter *iter_peers = NULL;
1691 GVariantIter *iter_peer = NULL;
1692 GVariant *var = NULL;
1694 int ret = WIFI_DIRECT_ERROR_NONE;
1696 if (g_client_info.is_registered == false) {
1697 WDC_LOGE("Client is NOT registered");
1698 __WDC_LOG_FUNC_END__;
1699 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1703 WDC_LOGE("NULL Param [callback]!");
1704 __WDC_LOG_FUNC_END__;
1705 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1709 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1710 "GetConnectedPeers", params, &error);
1712 ret = __net_wifidirect_gerror_to_enum(error);
1713 if (ret != WIFI_DIRECT_ERROR_NONE)
1716 g_variant_get(reply, "(iaa{sv})", &ret, &iter_peers);
1717 if (ret != WIFI_DIRECT_ERROR_NONE) {
1718 __WDC_LOG_FUNC_END__;
1719 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1722 WDC_LOGD("wifi_direct_foreach_connected_peers() SUCCESS");
1724 while (g_variant_iter_loop(iter_peers, "a{sv}", &iter_peer)) {
1725 wifi_direct_connected_peer_info_s *peer_list = NULL;
1727 peer_list = (wifi_direct_connected_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_connected_peer_info_s));
1729 WDC_LOGE("Failed to allocate memory");
1733 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
1734 if (!g_strcmp0(key, "DeviceName")) {
1735 const char *device_name = NULL;
1737 g_variant_get(var, "&s", &device_name);
1738 peer_list->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
1740 } else if (!g_strcmp0(key, "DeviceAddress")) {
1741 unsigned char mac_address[MACADDR_LEN] = {0, };
1743 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
1744 peer_list->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
1745 if (peer_list->mac_address)
1746 g_snprintf(peer_list->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
1748 } else if (!g_strcmp0(key, "InterfaceAddress")) {
1749 unsigned char intf_address[MACADDR_LEN] = {0, };
1751 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
1752 peer_list->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
1753 if (peer_list->interface_address)
1754 g_snprintf(peer_list->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
1756 } else if (!g_strcmp0(key, "IPAddress")) {
1757 unsigned char ip_address[IPADDR_LEN] = {0, };
1759 wifi_direct_dbus_unpack_ay(ip_address, var, IPADDR_LEN);
1760 peer_list->ip_address = (char*) g_try_malloc0(IPSTR_LEN);
1761 if (peer_list->ip_address)
1762 g_snprintf(peer_list->ip_address, IPSTR_LEN, IPSTR, IP2STR(ip_address));
1764 } else if (!g_strcmp0(key, "Channel")) {
1765 peer_list->channel = g_variant_get_uint16(var);
1767 } else if (!g_strcmp0(key, "Category")) {
1768 peer_list->primary_device_type = g_variant_get_uint16(var);
1770 } else if (!g_strcmp0(key, "SubCategory")) {
1771 peer_list->secondary_device_type = g_variant_get_uint16(var);
1773 } else if (!g_strcmp0(key, "IsWfdDevice")) {
1774 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
1775 peer_list->is_miracast_device = g_variant_get_boolean(var);
1776 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
1777 } else if (!g_strcmp0(key, "IsP2P")) {
1778 peer_list->p2p_supported = g_variant_get_boolean(var);
1785 /* __wfd_client_print_connected_peer_info(peer_list, 1); */
1786 if (!cb(peer_list, user_data)) {
1787 g_variant_iter_free(iter_peer);
1792 g_variant_iter_free(iter_peers);
1793 g_variant_unref(reply);
1795 __WDC_LOG_FUNC_END__;
1796 return WIFI_DIRECT_ERROR_NONE;
1800 int wifi_direct_create_group(void)
1802 __WDC_LOG_FUNC_START__;
1804 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1806 GError *error = NULL;
1807 GVariant *reply = NULL;
1808 int ret = WIFI_DIRECT_ERROR_NONE;
1810 if (g_client_info.is_registered == false) {
1811 WDC_LOGE("Client is NOT registered");
1812 __WDC_LOG_FUNC_END__;
1813 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1816 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1817 "CreateGroup", NULL, &error);
1819 ret = __net_wifidirect_gerror_to_enum(error);
1820 if (ret == WIFI_DIRECT_ERROR_NONE) {
1821 g_variant_get(reply, "(i)", &ret);
1822 g_variant_unref(reply);
1825 WDC_LOGD("%s() return : [%d]", __func__, ret);
1826 __WDC_LOG_FUNC_END__;
1831 int wifi_direct_destroy_group(void)
1833 __WDC_LOG_FUNC_START__;
1835 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1837 GError *error = NULL;
1838 GVariant *reply = NULL;
1839 int ret = WIFI_DIRECT_ERROR_NONE;
1841 if (g_client_info.is_registered == false) {
1842 WDC_LOGE("Client is NOT registered");
1843 __WDC_LOG_FUNC_END__;
1844 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1847 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1848 "DestroyGroup", NULL, &error);
1850 ret = __net_wifidirect_gerror_to_enum(error);
1851 if (ret == WIFI_DIRECT_ERROR_NONE) {
1852 g_variant_get(reply, "(i)", &ret);
1853 g_variant_unref(reply);
1856 WDC_LOGD("%s() return : [%d]", __func__, ret);
1857 __WDC_LOG_FUNC_END__;
1862 int wifi_direct_is_group_owner(bool *owner)
1864 __WDC_LOG_FUNC_START__;
1866 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1868 GError* error = NULL;
1869 GVariant *reply = NULL;
1870 int ret = WIFI_DIRECT_ERROR_NONE;
1873 if (g_client_info.is_registered == false) {
1874 WDC_LOGE("Client is NOT registered");
1875 __WDC_LOG_FUNC_END__;
1876 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1880 WDC_LOGE("NULL Param [owner]!");
1881 __WDC_LOG_FUNC_END__;
1882 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1885 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1890 ret = __net_wifidirect_gerror_to_enum(error);
1891 if (ret != WIFI_DIRECT_ERROR_NONE)
1894 WDC_LOGD("%s() SUCCESS", __func__);
1895 g_variant_get(reply, "(b)", &val);
1897 g_variant_unref(reply);
1899 __WDC_LOG_FUNC_END__;
1900 return WIFI_DIRECT_ERROR_NONE;
1903 int wifi_direct_is_autonomous_group(bool *autonomous_group)
1905 __WDC_LOG_FUNC_START__;
1907 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1909 GError* error = NULL;
1910 GVariant *reply = NULL;
1911 int ret = WIFI_DIRECT_ERROR_NONE;
1914 if (g_client_info.is_registered == false) {
1915 WDC_LOGE("Client is NOT registered");
1916 __WDC_LOG_FUNC_END__;
1917 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1920 if (!autonomous_group) {
1921 WDC_LOGE("NULL Param [autonomous_group]!\n");
1922 __WDC_LOG_FUNC_END__;
1923 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1926 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1931 ret = __net_wifidirect_gerror_to_enum(error);
1932 if (ret != WIFI_DIRECT_ERROR_NONE)
1935 WDC_LOGD("%s() SUCCESS", __func__);
1936 g_variant_get(reply, "(b)", &val);
1937 *autonomous_group = val;
1938 g_variant_unref(reply);
1940 __WDC_LOG_FUNC_END__;
1941 return WIFI_DIRECT_ERROR_NONE;
1945 int wifi_direct_set_group_owner_intent(int intent)
1947 __WDC_LOG_FUNC_START__;
1949 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1951 GError* error = NULL;
1952 GVariant *reply = NULL;
1953 GVariant *params = NULL;
1954 int ret = WIFI_DIRECT_ERROR_NONE;
1956 if (g_client_info.is_registered == false) {
1957 WDC_LOGE("Client is NOT registered");
1958 __WDC_LOG_FUNC_END__;
1959 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1962 if (intent < 0 || intent > 15) {
1963 WDC_LOGE("Invalid Param : intent[%d]", intent);
1964 __WDC_LOG_FUNC_END__;
1965 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1968 params = g_variant_new("(i)", intent);
1969 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1974 ret = __net_wifidirect_gerror_to_enum(error);
1975 if (ret == WIFI_DIRECT_ERROR_NONE) {
1976 g_variant_get(reply, "(i)", &ret);
1977 g_variant_unref(reply);
1980 WDC_LOGD("%s() return : [%d]", __func__, ret);
1981 __WDC_LOG_FUNC_END__;
1985 int wifi_direct_get_group_owner_intent(int *intent)
1987 __WDC_LOG_FUNC_START__;
1989 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1991 GError* error = NULL;
1992 GVariant *reply = NULL;
1994 int ret = WIFI_DIRECT_ERROR_NONE;
1996 if (g_client_info.is_registered == false) {
1997 WDC_LOGE("Client is NOT registered");
1998 __WDC_LOG_FUNC_END__;
1999 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2003 WDC_LOGE("Invalid Parameter");
2004 __WDC_LOG_FUNC_END__;
2005 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2008 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2013 ret = __net_wifidirect_gerror_to_enum(error);
2014 if (ret != WIFI_DIRECT_ERROR_NONE)
2017 g_variant_get(reply, "(ii)", &ret, &val);
2019 g_variant_unref(reply);
2021 WDC_LOGD("Intent = [%d]", *intent);
2022 WDC_LOGD("%s() return : [%d]", __func__, ret);
2023 __WDC_LOG_FUNC_END__;
2027 int wifi_direct_set_max_clients(int max)
2029 __WDC_LOG_FUNC_START__;
2031 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2033 GError* error = NULL;
2034 GVariant *reply = NULL;
2035 GVariant *params = NULL;
2036 int ret = WIFI_DIRECT_ERROR_NONE;
2038 if (g_client_info.is_registered == false) {
2039 WDC_LOGE("Client is NOT registered");
2040 __WDC_LOG_FUNC_END__;
2041 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2043 WDC_LOGD("max client [%d]\n", max);
2045 params = g_variant_new("(i)", max);
2046 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2051 ret = __net_wifidirect_gerror_to_enum(error);
2052 if (ret == WIFI_DIRECT_ERROR_NONE) {
2053 g_variant_get(reply, "(i)", &ret);
2054 g_variant_unref(reply);
2057 WDC_LOGD("%s() return : [%d]", __func__, ret);
2058 __WDC_LOG_FUNC_END__;
2062 int wifi_direct_get_max_clients(int *max)
2064 __WDC_LOG_FUNC_START__;
2066 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2068 GError* error = NULL;
2069 GVariant *reply = NULL;
2071 int ret = WIFI_DIRECT_ERROR_NONE;
2073 if (g_client_info.is_registered == false) {
2074 WDC_LOGE("Client is NOT registered");
2075 __WDC_LOG_FUNC_END__;
2076 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2080 WDC_LOGE("Invalid Parameter");
2081 __WDC_LOG_FUNC_END__;
2082 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2085 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2090 ret = __net_wifidirect_gerror_to_enum(error);
2091 if (ret != WIFI_DIRECT_ERROR_NONE)
2094 g_variant_get(reply, "(ii)", &ret, &val);
2096 g_variant_unref(reply);
2098 WDC_LOGD("max_client = [%d]", *max);
2099 WDC_LOGD("%s() return : [%d]", __func__, ret);
2100 __WDC_LOG_FUNC_END__;
2101 return WIFI_DIRECT_ERROR_NONE;
2104 int wifi_direct_get_operating_channel(int *channel)
2106 __WDC_LOG_FUNC_START__;
2108 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2110 GError* error = NULL;
2111 GVariant *reply = NULL;
2113 int ret = WIFI_DIRECT_ERROR_NONE;
2115 if (g_client_info.is_registered == false) {
2116 WDC_LOGE("Client is NOT registered");
2117 __WDC_LOG_FUNC_END__;
2118 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2122 WDC_LOGE("NULL Param [channel]!\n");
2123 __WDC_LOG_FUNC_END__;
2124 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2127 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2128 "GetOperatingChannel",
2132 ret = __net_wifidirect_gerror_to_enum(error);
2133 if (ret != WIFI_DIRECT_ERROR_NONE)
2136 g_variant_get(reply, "(ii)", &ret, &val);
2138 g_variant_unref(reply);
2140 WDC_LOGD("channel = [%d]", *channel);
2141 WDC_LOGD("%s() return : [%d]", __func__, ret);
2142 __WDC_LOG_FUNC_END__;
2143 return WIFI_DIRECT_ERROR_NONE;
2146 int wifi_direct_activate_pushbutton(void)
2148 __WDC_LOG_FUNC_START__;
2150 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2152 GError* error = NULL;
2153 GVariant *reply = NULL;
2154 int ret = WIFI_DIRECT_ERROR_NONE;
2156 if (g_client_info.is_registered == false) {
2157 WDC_LOGE("Client is NOT registered");
2158 __WDC_LOG_FUNC_END__;
2159 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2162 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
2163 "ActivatePushButton",
2167 ret = __net_wifidirect_gerror_to_enum(error);
2168 if (ret == WIFI_DIRECT_ERROR_NONE) {
2169 g_variant_get(reply, "(i)", &ret);
2170 g_variant_unref(reply);
2173 WDC_LOGD("%s() return : [%d]", __func__, ret);
2174 __WDC_LOG_FUNC_END__;
2178 int wifi_direct_set_wps_pin(char *pin)
2180 __WDC_LOG_FUNC_START__;
2182 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2184 GError* error = NULL;
2185 GVariant *reply = NULL;
2186 GVariant *params = NULL;
2187 int ret = WIFI_DIRECT_ERROR_NONE;
2189 if (g_client_info.is_registered == false) {
2190 WDC_LOGE("Client is NOT registered");
2191 __WDC_LOG_FUNC_END__;
2192 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2196 WDC_LOGE("NULL Param [pin]!");
2197 __WDC_LOG_FUNC_END__;
2198 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2200 WDC_LOGE("pin = [%s]\n", pin);
2202 params = g_variant_new("(s)", pin);
2203 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2208 ret = __net_wifidirect_gerror_to_enum(error);
2209 if (ret == WIFI_DIRECT_ERROR_NONE) {
2210 g_variant_get(reply, "(i)", &ret);
2211 g_variant_unref(reply);
2214 WDC_LOGD("%s() return : [%d]", __func__, ret);
2215 __WDC_LOG_FUNC_END__;
2220 int wifi_direct_get_wps_pin(char **pin)
2222 __WDC_LOG_FUNC_START__;
2224 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2226 GError* error = NULL;
2227 GVariant *reply = NULL;
2228 const char *str = NULL;
2229 int ret = WIFI_DIRECT_ERROR_NONE;
2231 if (g_client_info.is_registered == false) {
2232 WDC_LOGE("Client is NOT registered");
2233 __WDC_LOG_FUNC_END__;
2234 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2238 WDC_LOGE("NULL Param [pin]!");
2239 __WDC_LOG_FUNC_END__;
2240 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2243 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2248 ret = __net_wifidirect_gerror_to_enum(error);
2249 if (ret != WIFI_DIRECT_ERROR_NONE)
2252 g_variant_get(reply, "(i&s)", &ret, &str);
2253 if (pin != NULL && str != NULL)
2254 *pin = g_strdup(str);
2255 g_variant_unref(reply);
2257 WDC_LOGD("%s() return : [%d]", __func__, ret);
2258 __WDC_LOG_FUNC_END__;
2262 int wifi_direct_get_supported_wps_mode(int *wps_mode)
2264 __WDC_LOG_FUNC_START__;
2266 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2268 GError* error = NULL;
2269 GVariant *reply = NULL;
2271 int ret = WIFI_DIRECT_ERROR_NONE;
2273 if (g_client_info.is_registered == false) {
2274 WDC_LOGE("Client is NOT registered");
2275 __WDC_LOG_FUNC_END__;
2276 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2280 WDC_LOGE("NULL Param [wps_mode]!");
2281 __WDC_LOG_FUNC_END__;
2282 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2285 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2286 "GetSupportedWpsMode",
2290 ret = __net_wifidirect_gerror_to_enum(error);
2291 if (ret != WIFI_DIRECT_ERROR_NONE)
2294 g_variant_get(reply, "(ii)", &ret, &mode);
2296 g_variant_unref(reply);
2298 WDC_LOGD("%s() return : [%d]", __func__, ret);
2299 __WDC_LOG_FUNC_END__;
2303 int wifi_direct_foreach_supported_wps_types(wifi_direct_supported_wps_type_cb cb, void* user_data)
2305 __WDC_LOG_FUNC_START__;
2307 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2309 GError* error = NULL;
2310 GVariant *reply = NULL;
2312 int ret = WIFI_DIRECT_ERROR_NONE;
2313 gboolean result = FALSE;
2315 if (g_client_info.is_registered == false) {
2316 WDC_LOGE("Client is NOT registered");
2317 __WDC_LOG_FUNC_END__;
2318 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2322 WDC_LOGE("NULL Param [callback]!");
2323 __WDC_LOG_FUNC_END__;
2324 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2327 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2328 "GetSupportedWpsMode",
2332 ret = __net_wifidirect_gerror_to_enum(error);
2333 if (ret != WIFI_DIRECT_ERROR_NONE)
2336 g_variant_get(reply, "(ii)", &ret, &wps_mode);
2337 g_variant_unref(reply);
2339 if (wps_mode & WIFI_DIRECT_WPS_TYPE_PBC)
2340 result = cb(WIFI_DIRECT_WPS_TYPE_PBC, user_data);
2341 if ((result == TRUE) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY))
2342 result = cb(WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY, user_data);
2343 if ((result == TRUE) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD))
2344 result = cb(WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD, user_data);
2346 WDC_LOGD("%s() return : [%d]", __func__, ret);
2347 __WDC_LOG_FUNC_END__;
2351 int wifi_direct_get_local_wps_type(wifi_direct_wps_type_e *type)
2353 __WDC_LOG_FUNC_START__;
2355 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2357 GError* error = NULL;
2358 GVariant *reply = NULL;
2360 int ret = WIFI_DIRECT_ERROR_NONE;
2362 if (g_client_info.is_registered == false) {
2363 WDC_LOGE("Client is NOT registered");
2364 __WDC_LOG_FUNC_END__;
2365 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2369 WDC_LOGE("NULL Param [type]!\n");
2370 __WDC_LOG_FUNC_END__;
2371 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2374 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2379 ret = __net_wifidirect_gerror_to_enum(error);
2380 if (ret != WIFI_DIRECT_ERROR_NONE)
2383 g_variant_get(reply, "(ii)", &ret, &mode);
2385 g_variant_unref(reply);
2387 WDC_LOGD("%s() return : [%d]", __func__, ret);
2388 __WDC_LOG_FUNC_END__;
2392 int wifi_direct_set_req_wps_type(wifi_direct_wps_type_e type)
2394 __WDC_LOG_FUNC_START__;
2396 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2398 GError* error = NULL;
2399 GVariant *reply = NULL;
2400 GVariant *params = NULL;
2401 int ret = WIFI_DIRECT_ERROR_NONE;
2403 if (g_client_info.is_registered == false) {
2404 WDC_LOGE("Client is NOT registered");
2405 __WDC_LOG_FUNC_END__;
2406 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2409 if (type == WIFI_DIRECT_WPS_TYPE_PBC ||
2410 type == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY ||
2411 type == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) {
2412 WDC_LOGD("Param wps_mode [%d]", type);
2414 WDC_LOGE("Invalid Param [wps_mode]!");
2415 __WDC_LOG_FUNC_END__;
2416 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2419 params = g_variant_new("(i)", type);
2420 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2425 ret = __net_wifidirect_gerror_to_enum(error);
2426 if (ret == WIFI_DIRECT_ERROR_NONE) {
2427 g_variant_get(reply, "(i)", &ret);
2428 g_variant_unref(reply);
2431 WDC_LOGD("%s() return : [%d]", __func__, ret);
2432 __WDC_LOG_FUNC_END__;
2436 int wifi_direct_get_req_wps_type(wifi_direct_wps_type_e *type)
2438 __WDC_LOG_FUNC_START__;
2440 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2442 GError* error = NULL;
2443 GVariant *reply = NULL;
2447 if (g_client_info.is_registered == false) {
2448 WDC_LOGE("Client is NOT registered");
2449 __WDC_LOG_FUNC_END__;
2450 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2454 WDC_LOGE("NULL Param [type]!\n");
2455 __WDC_LOG_FUNC_END__;
2456 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2459 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2464 ret = __net_wifidirect_gerror_to_enum(error);
2465 if (ret != WIFI_DIRECT_ERROR_NONE)
2468 g_variant_get(reply, "(ii)", &ret, &mode);
2470 g_variant_unref(reply);
2472 WDC_LOGD("%s() return : [%d]", __func__, ret);
2473 __WDC_LOG_FUNC_END__;
2477 int wifi_direct_get_ssid(char **ssid)
2479 __WDC_LOG_FUNC_START__;
2481 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2483 GError* error = NULL;
2484 GVariant *reply = NULL;
2485 const char *str = NULL;
2486 int ret = WIFI_DIRECT_ERROR_NONE;
2488 if (g_client_info.is_registered == false) {
2489 WDC_LOGE("Client is NOT registered");
2490 __WDC_LOG_FUNC_END__;
2491 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2495 WDC_LOGE("Invalid Parameter");
2496 __WDC_LOG_FUNC_END__;
2497 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2500 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2505 ret = __net_wifidirect_gerror_to_enum(error);
2506 if (ret != WIFI_DIRECT_ERROR_NONE)
2509 g_variant_get(reply, "(i&s)", &ret, &str);
2510 *ssid = g_strdup(str);
2511 g_variant_unref(reply);
2513 WDC_LOGD("%s() return : [%d]", __func__, ret);
2514 __WDC_LOG_FUNC_END__;
2518 int wifi_direct_get_device_name(char **device_name)
2520 __WDC_LOG_FUNC_START__;
2522 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2524 GError* error = NULL;
2525 GVariant *reply = NULL;
2526 const char *str = NULL;
2527 int ret = WIFI_DIRECT_ERROR_NONE;
2529 if (g_client_info.is_registered == false) {
2530 WDC_LOGE("Client is NOT registered");
2531 __WDC_LOG_FUNC_END__;
2532 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2536 WDC_LOGE("Invalid Parameter");
2537 __WDC_LOG_FUNC_END__;
2538 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2541 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2546 ret = __net_wifidirect_gerror_to_enum(error);
2547 if (ret != WIFI_DIRECT_ERROR_NONE)
2550 g_variant_get(reply, "(i&s)", &ret, &str);
2551 *device_name = g_strdup(str);
2552 g_variant_unref(reply);
2554 WDC_LOGD("%s() return : [%d]", __func__, ret);
2555 __WDC_LOG_FUNC_END__;
2559 int wifi_direct_set_device_name(const char *device_name)
2561 __WDC_LOG_FUNC_START__;
2563 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2565 GError* error = NULL;
2566 GVariant *reply = NULL;
2567 GVariant *params = NULL;
2568 int ret = WIFI_DIRECT_ERROR_NONE;
2570 if (g_client_info.is_registered == false) {
2571 WDC_LOGE("Client is NOT registered");
2572 __WDC_LOG_FUNC_END__;
2573 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2577 WDC_LOGE("NULL Param [device_name]!");
2578 __WDC_LOG_FUNC_END__;
2579 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2581 WDC_LOGE("device_name = [%s]", device_name);
2583 params = g_variant_new("(s)", device_name);
2584 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2589 ret = __net_wifidirect_gerror_to_enum(error);
2590 if (ret == WIFI_DIRECT_ERROR_NONE) {
2591 g_variant_get(reply, "(i)", &ret);
2592 g_variant_unref(reply);
2595 WDC_LOGD("%s() return : [%d]", __func__, ret);
2596 __WDC_LOG_FUNC_END__;
2601 int wifi_direct_get_network_interface_name(char **name)
2603 __WDC_LOG_FUNC_START__;
2605 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2607 wifi_direct_state_e status = 0;
2608 char *get_str = NULL;
2609 GError* error = NULL;
2610 GVariant *reply = NULL;
2611 int ret = WIFI_DIRECT_ERROR_NONE;
2613 if (g_client_info.is_registered == false) {
2614 WDC_LOGE("Client is NOT registered");
2615 __WDC_LOG_FUNC_END__;
2616 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2620 WDC_LOGE("NULL Param [name]!\n");
2621 __WDC_LOG_FUNC_END__;
2622 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2625 ret = wifi_direct_get_state(&status);
2626 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]\n", status, ret);
2628 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2629 WDC_LOGE("Device is not connected!\n");
2630 __WDC_LOG_FUNC_END__;
2631 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2634 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2639 ret = __net_wifidirect_gerror_to_enum(error);
2640 if (ret != WIFI_DIRECT_ERROR_NONE)
2643 g_variant_get(reply, "(i&s)", ret, &get_str);
2644 *name = g_strdup(get_str);
2645 g_variant_unref(reply);
2647 WDC_LOGD("Interface Name = [%s]", *name);
2648 WDC_LOGD("%s() return : [%d]", __func__, ret);
2650 __WDC_LOG_FUNC_END__;
2651 return WIFI_DIRECT_ERROR_NONE;
2654 int wifi_direct_get_ip_address(char **ip_address)
2656 __WDC_LOG_FUNC_START__;
2658 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2660 GError* error = NULL;
2661 GVariant *reply = NULL;
2662 const char *str = NULL;
2663 int ret = WIFI_DIRECT_ERROR_NONE;
2665 if (g_client_info.is_registered == false) {
2666 WDC_LOGE("Client is NOT registered");
2667 __WDC_LOG_FUNC_END__;
2668 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2672 WDC_LOGE("NULL Param [ip_address]!\n");
2673 __WDC_LOG_FUNC_END__;
2674 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2677 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2682 ret = __net_wifidirect_gerror_to_enum(error);
2683 if (ret != WIFI_DIRECT_ERROR_NONE)
2686 g_variant_get(reply, "(i&s)", ret, &str);
2687 *ip_address = g_strdup(str);
2688 g_variant_unref(reply);
2690 WDC_LOGD("IP address = [%s]", *ip_address);
2691 WDC_LOGD("%s() return : [%d]", __func__, ret);
2692 __WDC_LOG_FUNC_END__;
2696 int wifi_direct_get_subnet_mask(char **subnet_mask)
2698 __WDC_LOG_FUNC_START__;
2700 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2702 wifi_direct_state_e status = 0;
2703 GError* error = NULL;
2704 GVariant *reply = NULL;
2705 char *get_str = NULL;
2706 int ret = WIFI_DIRECT_ERROR_NONE;
2708 if (g_client_info.is_registered == false) {
2709 WDC_LOGE("Client is NOT registered");
2710 __WDC_LOG_FUNC_END__;
2711 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2715 WDC_LOGE("NULL Param [subnet_mask]!");
2716 __WDC_LOG_FUNC_END__;
2717 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2720 ret = wifi_direct_get_state(&status);
2721 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]", status, ret);
2722 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2723 WDC_LOGE("Device is not connected!");
2724 __WDC_LOG_FUNC_END__;
2725 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2728 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2733 ret = __net_wifidirect_gerror_to_enum(error);
2734 if (ret != WIFI_DIRECT_ERROR_NONE)
2737 g_variant_get(reply, "(i&s)", ret, &get_str);
2738 *subnet_mask = g_strdup(get_str);
2739 g_variant_unref(reply);
2741 WDC_LOGD("Subnet Mask = [%s]", *subnet_mask);
2742 WDC_LOGD("%s() return : [%d]", __func__, ret);
2744 __WDC_LOG_FUNC_END__;
2745 return WIFI_DIRECT_ERROR_NONE;
2748 int wifi_direct_get_gateway_address(char **gateway_address)
2750 __WDC_LOG_FUNC_START__;
2752 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2754 wifi_direct_state_e status = 0;
2755 GError* error = NULL;
2756 GVariant *reply = NULL;
2757 char *get_str = NULL;
2758 int ret = WIFI_DIRECT_ERROR_NONE;
2760 if (g_client_info.is_registered == false) {
2761 WDC_LOGE("Client is NOT registered");
2762 __WDC_LOG_FUNC_END__;
2763 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2766 if (!gateway_address) {
2767 WDC_LOGE("NULL Param [gateway_address]!");
2768 __WDC_LOG_FUNC_END__;
2769 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2772 ret = wifi_direct_get_state(&status);
2773 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]", status, ret);
2774 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2775 WDC_LOGE("Device is not connected!");
2776 __WDC_LOG_FUNC_END__;
2777 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2780 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2785 ret = __net_wifidirect_gerror_to_enum(error);
2786 if (ret != WIFI_DIRECT_ERROR_NONE)
2789 g_variant_get(reply, "(i&s)", ret, &get_str);
2790 *gateway_address = g_strdup(get_str);
2791 g_variant_unref(reply);
2793 WDC_LOGD("Gateway Address = [%s]", *gateway_address);
2794 WDC_LOGD("%s() return : [%d]", __func__, ret);
2796 __WDC_LOG_FUNC_END__;
2797 return WIFI_DIRECT_ERROR_NONE;
2801 int wifi_direct_get_mac_address(char **mac_address)
2803 __WDC_LOG_FUNC_START__;
2805 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2807 GError* error = NULL;
2808 GVariant *reply = NULL;
2809 const char *str = NULL;
2810 int ret = WIFI_DIRECT_ERROR_NONE;
2812 if (g_client_info.is_registered == false) {
2813 WDC_LOGE("Client is NOT registered");
2814 __WDC_LOG_FUNC_END__;
2815 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2819 WDC_LOGE("NULL Param [mac_address]!");
2820 __WDC_LOG_FUNC_END__;
2821 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2824 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2829 ret = __net_wifidirect_gerror_to_enum(error);
2830 if (ret != WIFI_DIRECT_ERROR_NONE)
2833 g_variant_get(reply, "(i&s)", &ret, &str);
2834 *mac_address = g_strdup(str);
2835 g_variant_unref(reply);
2837 WDC_SECLOGD("MAC address = [%s]", *mac_address);
2838 WDC_LOGD("%s() return : [%d]", __func__, ret);
2839 __WDC_LOG_FUNC_END__;
2843 int wifi_direct_get_state(wifi_direct_state_e *state)
2845 __WDC_LOG_FUNC_START__;
2847 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2850 int ret = WIFI_DIRECT_ERROR_NONE;
2853 WDC_LOGE("Invalid Parameter");
2854 __WDC_LOG_FUNC_END__;
2855 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2858 ret = vconf_get_int(VCONFKEY_WIFI_DIRECT_STATE, &val);
2860 WDC_LOGE("Failed to get vconf value [%s]\n", VCONFKEY_WIFI_DIRECT_STATE);
2861 __WDC_LOG_FUNC_END__;
2862 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2865 if (val == VCONFKEY_WIFI_DIRECT_ACTIVATED) {
2866 *state = WIFI_DIRECT_STATE_ACTIVATED;
2867 } else if (val == VCONFKEY_WIFI_DIRECT_DEACTIVATED) {
2868 *state = WIFI_DIRECT_STATE_DEACTIVATED;
2869 } else if (val == VCONFKEY_WIFI_DIRECT_CONNECTED) {
2870 *state = WIFI_DIRECT_STATE_CONNECTED;
2871 } else if (val == VCONFKEY_WIFI_DIRECT_GROUP_OWNER) {
2872 *state = WIFI_DIRECT_STATE_GROUP_OWNER;
2873 } else if (val == VCONFKEY_WIFI_DIRECT_DISCOVERING) {
2874 *state = WIFI_DIRECT_STATE_DISCOVERING;
2876 WDC_LOGE("This state cannot be set as wifi_direct vconf state[%d]", val);
2877 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2880 WDC_LOGD("State = [%d]", *state);
2881 WDC_LOGD("%s() return : [%d]", __func__, ret);
2882 __WDC_LOG_FUNC_END__;
2886 int wifi_direct_is_discoverable(bool* discoverable)
2888 __WDC_LOG_FUNC_START__;
2890 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2892 GError* error = NULL;
2893 GVariant *reply = NULL;
2894 int ret = WIFI_DIRECT_ERROR_NONE;
2896 if (g_client_info.is_registered == false) {
2897 WDC_LOGE("Client is NOT registered");
2898 __WDC_LOG_FUNC_END__;
2899 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2902 if (!discoverable) {
2903 WDC_LOGE("Invalid Parameter");
2904 __WDC_LOG_FUNC_END__;
2905 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2908 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
2909 "IsDiscoverable", NULL, &error);
2911 ret = __net_wifidirect_gerror_to_enum(error);
2912 if (ret != WIFI_DIRECT_ERROR_NONE)
2915 g_variant_get(reply, "(b)", discoverable);
2916 WDC_LOGD("Discoverable = [%s]", *discoverable ? "Yes" : "No");
2918 WDC_LOGD("%s() SUCCESS", __func__);
2919 g_variant_unref(reply);
2921 __WDC_LOG_FUNC_END__;
2922 return WIFI_DIRECT_ERROR_NONE;
2925 int wifi_direct_is_listening_only(bool* listen_only)
2927 __WDC_LOG_FUNC_START__;
2929 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2931 GError* error = NULL;
2932 GVariant *reply = NULL;
2933 int ret = WIFI_DIRECT_ERROR_NONE;
2935 if (g_client_info.is_registered == false) {
2936 WDC_LOGE("Client is NOT registered");
2937 __WDC_LOG_FUNC_END__;
2938 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2942 WDC_LOGE("Invalid Parameter");
2943 __WDC_LOG_FUNC_END__;
2944 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2947 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
2948 "IsListeningOnly", NULL, &error);
2950 ret = __net_wifidirect_gerror_to_enum(error);
2951 if (ret != WIFI_DIRECT_ERROR_NONE)
2954 g_variant_get(reply, "(b)", listen_only);
2956 WDC_LOGD("Is listen only = [%s]", *listen_only ? "Yes" : "No");
2957 WDC_LOGD("%s() SUCCESS", __func__);
2958 g_variant_unref(reply);
2960 __WDC_LOG_FUNC_END__;
2961 return WIFI_DIRECT_ERROR_NONE;
2965 int wifi_direct_get_primary_device_type(wifi_direct_primary_device_type_e* type)
2967 __WDC_LOG_FUNC_START__;
2969 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2972 WDC_LOGE("NULL Param [type]!");
2973 __WDC_LOG_FUNC_END__;
2974 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2977 if (g_client_info.is_registered == false) {
2978 WDC_LOGE("Client is NOT registered");
2979 __WDC_LOG_FUNC_END__;
2980 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2984 WDC_LOGD("Current primary_dev_type [%d]", WIFI_DIRECT_PRIMARY_DEVICE_TYPE_DISPLAY);
2985 *type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_DISPLAY;
2986 #else /* TIZEN_TV */
2987 WDC_LOGD("Current primary_dev_type [%d]", WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE);
2988 *type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE;
2989 #endif /* TIZEN_TV */
2991 __WDC_LOG_FUNC_END__;
2992 return WIFI_DIRECT_ERROR_NONE;
2995 int wifi_direct_get_secondary_device_type(wifi_direct_secondary_device_type_e* type)
2997 __WDC_LOG_FUNC_START__;
2999 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3001 if (g_client_info.is_registered == false) {
3002 WDC_LOGE("Client is NOT registered");
3003 __WDC_LOG_FUNC_END__;
3004 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3008 WDC_LOGE("NULL Param [type]!");
3009 __WDC_LOG_FUNC_END__;
3010 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3014 WDC_LOGD("Current second_dev_type [%d]", WIFI_DIRECT_SECONDARY_DEVICE_TYPE_DISPLAY_TV);
3015 *type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_DISPLAY_TV;
3016 #else /* TIZEN_TV */
3017 WDC_LOGD("Current second_dev_type [%d]", WIFI_DIRECT_SECONDARY_DEVICE_TYPE_TELEPHONE_SMARTPHONE_DUAL);
3018 *type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_TELEPHONE_SMARTPHONE_DUAL; /* smart phone dual mode (wifi and cellular) */
3019 #endif /* TIZEN_TV */
3021 __WDC_LOG_FUNC_END__;
3022 return WIFI_DIRECT_ERROR_NONE;
3025 int wifi_direct_set_autoconnection_mode(bool mode)
3027 __WDC_LOG_FUNC_START__;
3029 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3031 GError* error = NULL;
3032 GVariant *reply = NULL;
3033 GVariant *params = NULL;
3034 int ret = WIFI_DIRECT_ERROR_NONE;
3036 if (g_client_info.is_registered == false) {
3037 WDC_LOGE("Client is NOT registered");
3038 __WDC_LOG_FUNC_END__;
3039 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3042 params = g_variant_new("(b)", mode);
3043 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
3044 "SetAutoConnectionMode",
3048 ret = __net_wifidirect_gerror_to_enum(error);
3049 if (ret == WIFI_DIRECT_ERROR_NONE) {
3050 g_variant_get(reply, "(i)", &ret);
3051 g_variant_unref(reply);
3054 WDC_LOGD("%s() return : [%d]", __func__, ret);
3055 __WDC_LOG_FUNC_END__;
3059 int wifi_direct_is_autoconnection_mode(bool *mode)
3061 __WDC_LOG_FUNC_START__;
3063 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3065 GError* error = NULL;
3066 GVariant *reply = NULL;
3068 int ret = WIFI_DIRECT_ERROR_NONE;
3070 if (g_client_info.is_registered == false) {
3071 WDC_LOGE("Client is NOT registered");
3072 __WDC_LOG_FUNC_END__;
3073 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3077 WDC_LOGE("NULL Param [mode]!");
3078 __WDC_LOG_FUNC_END__;
3079 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3082 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
3083 "IsAutoConnectionMode",
3087 ret = __net_wifidirect_gerror_to_enum(error);
3088 if (ret != WIFI_DIRECT_ERROR_NONE)
3091 g_variant_get(reply, "(ib)", &ret, &val);
3093 g_variant_unref(reply);
3095 WDC_LOGD("%s() return : [%d]", __func__, ret);
3096 __WDC_LOG_FUNC_END__;
3101 int wifi_direct_set_persistent_group_enabled(bool enabled)
3103 __WDC_LOG_FUNC_START__;
3105 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3107 GError* error = NULL;
3108 GVariant *reply = NULL;
3109 GVariant *params = NULL;
3110 int ret = WIFI_DIRECT_ERROR_NONE;
3112 if (g_client_info.is_registered == false) {
3113 WDC_LOGE("Client is NOT registered");
3114 __WDC_LOG_FUNC_END__;
3115 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3118 params = g_variant_new("(b)", enabled);
3119 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3120 "SetPersistentGroupEnabled",
3124 ret = __net_wifidirect_gerror_to_enum(error);
3125 if (ret == WIFI_DIRECT_ERROR_NONE) {
3126 g_variant_get(reply, "(i)", &ret);
3127 g_variant_unref(reply);
3130 WDC_LOGD("%s() return : [%d]", __func__, ret);
3132 __WDC_LOG_FUNC_END__;
3133 return WIFI_DIRECT_ERROR_NONE;
3137 int wifi_direct_is_persistent_group_enabled(bool *enabled)
3139 __WDC_LOG_FUNC_START__;
3141 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3143 GError* error = NULL;
3144 GVariant *reply = NULL;
3145 int ret = WIFI_DIRECT_ERROR_NONE;
3148 if (g_client_info.is_registered == false) {
3149 WDC_LOGE("Client is NOT registered");
3150 __WDC_LOG_FUNC_END__;
3151 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3155 WDC_LOGE("NULL Param [enabled]!");
3156 __WDC_LOG_FUNC_END__;
3157 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3160 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3161 "IsPersistentGroupEnabled",
3165 ret = __net_wifidirect_gerror_to_enum(error);
3166 if (ret != WIFI_DIRECT_ERROR_NONE)
3169 WDC_LOGD("%s() SUCCESS", __func__);
3170 g_variant_get(reply, "(b)", &val);
3172 g_variant_unref(reply);
3174 __WDC_LOG_FUNC_END__;
3175 return WIFI_DIRECT_ERROR_NONE;
3178 int wifi_direct_foreach_persistent_groups(wifi_direct_persistent_group_cb cb,
3181 __WDC_LOG_FUNC_START__;
3183 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3185 GVariant *params = NULL;
3186 GError *error = NULL;
3187 GVariant *reply = NULL;
3188 GVariantIter *iter_groups = NULL;
3189 GVariantIter *iter_group = NULL;
3190 GVariant *var = NULL;
3192 int ret = WIFI_DIRECT_ERROR_NONE;
3194 if (g_client_info.is_registered == false) {
3195 WDC_LOGE("Client is NOT registered");
3196 __WDC_LOG_FUNC_END__;
3197 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3201 WDC_LOGE("NULL Param [callback]!");
3202 __WDC_LOG_FUNC_END__;
3203 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3206 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3207 "GetPersistentGroups", params, &error);
3209 ret = __net_wifidirect_gerror_to_enum(error);
3210 if (ret != WIFI_DIRECT_ERROR_NONE)
3213 g_variant_get(reply, "(iaa{sv})", &ret, &iter_groups);
3214 if (ret != WIFI_DIRECT_ERROR_NONE) {
3215 __WDC_LOG_FUNC_END__;
3216 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3219 WDC_LOGD("wifi_direct_foreach_persistent_groups() SUCCESS");
3221 while (g_variant_iter_loop(iter_groups, "a{sv}", &iter_group)) {
3222 const char *ssid = NULL;
3223 char *go_mac_address = NULL;
3225 while (g_variant_iter_loop(iter_group, "{sv}", &key, &var)) {
3226 if (!g_strcmp0(key, "SSID")) {
3227 g_variant_get(var, "&s", &ssid);
3229 } else if (!g_strcmp0(key, "GOMacAddress")) {
3230 unsigned char mac_address[MACADDR_LEN] = {0, };
3232 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
3233 go_mac_address = (char*) g_try_malloc0(MACSTR_LEN);
3235 g_snprintf(go_mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
3242 ret = cb(go_mac_address, ssid, user_data);
3243 g_free(go_mac_address);
3244 go_mac_address = NULL;
3246 g_variant_iter_free(iter_group);
3251 g_variant_iter_free(iter_groups);
3252 __WDC_LOG_FUNC_END__;
3253 return WIFI_DIRECT_ERROR_NONE;
3257 int wifi_direct_remove_persistent_group(char *mac_address, const char *ssid)
3259 __WDC_LOG_FUNC_START__;
3261 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3263 GError* error = NULL;
3264 GVariant *reply = NULL;
3265 GVariant *params = NULL;
3266 int ret = WIFI_DIRECT_ERROR_NONE;
3268 if (g_client_info.is_registered == false) {
3269 WDC_LOGE("Client is NOT registered");
3270 __WDC_LOG_FUNC_END__;
3271 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3274 if (!mac_address || !ssid) {
3275 WDC_LOGE("NULL Param");
3276 __WDC_LOG_FUNC_END__;
3277 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3280 params = g_variant_new("(ss)", mac_address, ssid);
3281 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3282 "RemovePersistentGroup",
3286 ret = __net_wifidirect_gerror_to_enum(error);
3287 if (ret == WIFI_DIRECT_ERROR_NONE) {
3288 g_variant_get(reply, "(i)", &ret);
3289 g_variant_unref(reply);
3292 WDC_LOGD("%s() return : [%d]", __func__, ret);
3294 __WDC_LOG_FUNC_END__;
3295 return WIFI_DIRECT_ERROR_NONE;
3299 int wifi_direct_start_service_discovery(char *mac_address,
3300 wifi_direct_service_type_e type)
3302 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3303 __WDC_LOG_FUNC_START__;
3305 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3309 GError* error = NULL;
3310 GVariant *reply = NULL;
3311 GVariant *params = NULL;
3312 int ret = WIFI_DIRECT_ERROR_NONE;
3314 if (g_client_info.is_registered == false) {
3315 WDC_LOGE("Client is NOT registered.");
3316 __WDC_LOG_FUNC_END__;
3317 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3320 if (type >= WIFI_DIRECT_SERVICE_TYPE_ALL &&
3321 type <= WIFI_DIRECT_SERVICE_TYPE_CONTACT_INFO) {
3322 WDC_LOGD("Param service_type [%d]", type);
3324 WDC_LOGE("Invalid Param [type]!");
3325 __WDC_LOG_FUNC_END__;
3326 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3330 params = g_variant_new("(is)", type, mac_address);
3332 params = g_variant_new("(is)", type, "00:00:00:00:00:00");
3334 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3339 ret = __net_wifidirect_gerror_to_enum(error);
3340 if (ret == WIFI_DIRECT_ERROR_NONE) {
3341 g_variant_get(reply, "(i)", &ret);
3342 g_variant_unref(reply);
3345 WDC_LOGD("%s() return : [%d]", __func__, ret);
3346 __WDC_LOG_FUNC_END__;
3349 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3350 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3351 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3355 int wifi_direct_cancel_service_discovery(char *mac_address,
3356 wifi_direct_service_type_e type)
3358 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3359 __WDC_LOG_FUNC_START__;
3361 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3363 GError* error = NULL;
3364 GVariant *reply = NULL;
3365 GVariant *params = NULL;
3366 int ret = WIFI_DIRECT_ERROR_NONE;
3368 if (g_client_info.is_registered == false) {
3369 WDC_LOGE("Client is NOT registered.");
3370 __WDC_LOG_FUNC_END__;
3371 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3374 if (type >= WIFI_DIRECT_SERVICE_TYPE_ALL &&
3375 type <= WIFI_DIRECT_SERVICE_TYPE_CONTACT_INFO) {
3376 WDC_LOGD("Param service_type [%d]", type);
3378 WDC_LOGE("Invalid Param [type]!");
3379 __WDC_LOG_FUNC_END__;
3380 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3384 params = g_variant_new("(is)", type, mac_address);
3386 params = g_variant_new("(is)", type, "00:00:00:00:00:00");
3388 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3393 ret = __net_wifidirect_gerror_to_enum(error);
3394 if (ret == WIFI_DIRECT_ERROR_NONE) {
3395 g_variant_get(reply, "(i)", &ret);
3396 g_variant_unref(reply);
3399 WDC_LOGD("%s() return : [%d]", __func__, ret);
3400 __WDC_LOG_FUNC_END__;
3403 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3404 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3405 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3408 int wifi_direct_register_service(wifi_direct_service_type_e type, char *info1, char *info2, unsigned int *service_id)
3410 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3411 __WDC_LOG_FUNC_START__;
3413 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3415 GError* error = NULL;
3416 GVariant *reply = NULL;
3417 GVariant *params = NULL;
3419 int ret = WIFI_DIRECT_ERROR_NONE;
3422 if (g_client_info.is_registered == false) {
3423 WDC_LOGE("Client is NOT registered.");
3424 __WDC_LOG_FUNC_END__;
3425 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3428 if (!info1 || !info2) {
3429 WDC_LOGE("info1 or info2 is NULL");
3430 __WDC_LOG_FUNC_END__;
3431 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3434 if (type < WIFI_DIRECT_SERVICE_TYPE_ALL ||
3435 type > WIFI_DIRECT_SERVICE_TYPE_VENDOR) {
3436 WDC_LOGE("Invalid Param [type]!");
3437 __WDC_LOG_FUNC_END__;
3438 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3442 WDC_LOGE("Invalid Param [service_id]!");
3443 __WDC_LOG_FUNC_END__;
3444 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3447 WDC_LOGD("Service type [%d]", type);
3449 len = strlen(info1) + strlen(info2) + 2;
3450 WDC_LOGD("info [%s|%s], len [%d]", info1, info2, len);
3452 buf = g_try_malloc0(len);
3454 WDC_LOGE("Failed to allocate memory for buf");
3455 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
3458 g_snprintf(buf, len, "%s|%s", info1, info2);
3460 params = g_variant_new("(is)", type, buf);
3461 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3466 ret = __net_wifidirect_gerror_to_enum(error);
3467 if (ret != WIFI_DIRECT_ERROR_NONE) {
3472 g_variant_get(reply, "(ii)", &ret, service_id);
3473 g_variant_unref(reply);
3476 WDC_LOGD("%s() return : [%d]", __func__, ret);
3477 __WDC_LOG_FUNC_END__;
3480 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3481 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3482 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3485 int wifi_direct_deregister_service(unsigned int service_id)
3487 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3488 __WDC_LOG_FUNC_START__;
3490 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3492 GError* error = NULL;
3493 GVariant *reply = NULL;
3494 GVariant *params = NULL;
3495 int ret = WIFI_DIRECT_ERROR_NONE;
3497 if (g_client_info.is_registered == false) {
3498 WDC_LOGE("Client is NOT registered.");
3499 __WDC_LOG_FUNC_END__;
3500 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3503 params = g_variant_new("(i)", service_id);
3504 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3509 ret = __net_wifidirect_gerror_to_enum(error);
3510 if (ret == WIFI_DIRECT_ERROR_NONE) {
3511 g_variant_get(reply, "(i)", &ret);
3512 g_variant_unref(reply);
3515 WDC_LOGD("%s() return : [%d]", __func__, ret);
3516 __WDC_LOG_FUNC_END__;
3519 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3520 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3521 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3524 int wifi_direct_init_miracast(bool enable)
3526 __WDC_LOG_FUNC_START__;
3527 int ret = WIFI_DIRECT_ERROR_NONE;
3530 ret = wifi_direct_init_display();
3532 ret = wifi_direct_deinit_display();
3534 __WDC_LOG_FUNC_END__;
3538 int wifi_direct_get_peer_info(char* mac_address, wifi_direct_discovered_peer_info_s** peer_info)
3540 __WDC_LOG_FUNC_START__;
3542 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3544 GVariant *params = NULL;
3545 GError *error = NULL;
3546 GVariant *reply = NULL;
3547 GVariantIter *iter_peer = NULL;
3548 GVariant *var = NULL;
3550 int ret = WIFI_DIRECT_ERROR_NONE;
3552 if (g_client_info.is_registered == false) {
3553 WDC_LOGE("Client is NOT registered");
3554 __WDC_LOG_FUNC_END__;
3555 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3559 WDC_LOGE("mac_addr is NULL");
3560 __WDC_LOG_FUNC_END__;
3561 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3565 WDC_LOGE("peer_info is NULL");
3566 __WDC_LOG_FUNC_END__;
3567 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3570 params = g_variant_new("(s)", mac_address);
3571 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
3572 "GetPeerInfo", params, &error);
3574 ret = __net_wifidirect_gerror_to_enum(error);
3575 if (ret != WIFI_DIRECT_ERROR_NONE)
3578 g_variant_get(reply, "(ia{sv})", &ret, &iter_peer);
3579 if (ret != WIFI_DIRECT_ERROR_NONE) {
3580 __WDC_LOG_FUNC_END__;
3581 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3584 WDC_LOGD("wifi_direct_get_peer() SUCCESS");
3586 wifi_direct_discovered_peer_info_s *peer = NULL;
3588 peer = (wifi_direct_discovered_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_discovered_peer_info_s));
3590 WDC_LOGE("Failed to allocate memory");
3591 __WDC_LOG_FUNC_END__;
3592 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3595 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
3596 if (!g_strcmp0(key, "DeviceName")) {
3597 const char *device_name = NULL;
3599 g_variant_get(var, "&s", &device_name);
3600 peer->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
3602 } else if (!g_strcmp0(key, "DeviceAddress")) {
3603 unsigned char mac_address[MACADDR_LEN] = {0, };
3605 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
3606 peer->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
3607 if (peer->mac_address)
3608 g_snprintf(peer->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
3610 } else if (!g_strcmp0(key, "InterfaceAddress")) {
3611 unsigned char intf_address[MACADDR_LEN] = {0, };
3613 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
3614 peer->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
3615 if (peer->interface_address)
3616 g_snprintf(peer->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
3618 } else if (!g_strcmp0(key, "Channel")) {
3619 peer->channel = g_variant_get_uint16(var);
3621 } else if (!g_strcmp0(key, "IsGroupOwner")) {
3622 peer->is_group_owner = g_variant_get_boolean(var);
3624 } else if (!g_strcmp0(key, "IsPersistentGO")) {
3625 peer->is_persistent_group_owner = g_variant_get_boolean(var);
3627 } else if (!g_strcmp0(key, "IsConnected")) {
3628 peer->is_connected = g_variant_get_boolean(var);
3630 } else if (!g_strcmp0(key, "Category")) {
3631 peer->primary_device_type = g_variant_get_uint16(var);
3633 } else if (!g_strcmp0(key, "SubCategory")) {
3634 peer->secondary_device_type = g_variant_get_uint16(var);
3636 } else if (!g_strcmp0(key, "IsWfdDevice")) {
3637 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3638 peer->is_miracast_device = g_variant_get_boolean(var);
3639 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3647 g_variant_unref(reply);
3649 __WDC_LOG_FUNC_END__;
3650 return WIFI_DIRECT_ERROR_NONE;
3653 int wifi_direct_set_passphrase(const char *passphrase)
3655 __WDC_LOG_FUNC_START__;
3657 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3659 GError* error = NULL;
3660 GVariant *reply = NULL;
3661 GVariant *params = NULL;
3662 int ret = WIFI_DIRECT_ERROR_NONE;
3664 if (g_client_info.is_registered == false) {
3665 WDC_LOGE("Client is NOT registered.");
3666 __WDC_LOG_FUNC_END__;
3667 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3671 WDC_LOGE("NULL Param [passphrase]!");
3672 __WDC_LOG_FUNC_END__;
3673 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3675 WDC_LOGD("passphrase = [%s]", passphrase);
3677 params = g_variant_new("(s)", passphrase);
3678 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3683 ret = __net_wifidirect_gerror_to_enum(error);
3684 if (ret == WIFI_DIRECT_ERROR_NONE) {
3685 g_variant_get(reply, "(i)", &ret);
3686 g_variant_unref(reply);
3689 WDC_LOGD("%s() SUCCESS", __func__);
3691 __WDC_LOG_FUNC_END__;
3692 return WIFI_DIRECT_ERROR_NONE;
3695 int wifi_direct_get_passphrase(char** passphrase)
3697 __WDC_LOG_FUNC_START__;
3699 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3701 GError* error = NULL;
3702 GVariant *reply = NULL;
3703 const char *val = NULL;
3704 int ret = WIFI_DIRECT_ERROR_NONE;
3706 if (g_client_info.is_registered == false) {
3707 WDC_LOGE("Client is NOT registered.");
3708 __WDC_LOG_FUNC_END__;
3709 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3713 WDC_LOGE("NULL Param [passphrase]!");
3714 __WDC_LOG_FUNC_END__;
3715 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3718 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3723 ret = __net_wifidirect_gerror_to_enum(error);
3724 if (ret != WIFI_DIRECT_ERROR_NONE)
3727 WDC_LOGD("%s() SUCCESS", __func__);
3728 g_variant_get(reply, "(i&s)", &ret, &val);
3729 *passphrase = g_strdup(val);
3730 g_variant_unref(reply);
3732 WDC_LOGD("%s() return : [%d]", __func__, ret);
3733 __WDC_LOG_FUNC_END__;
3737 int wifi_direct_set_autoconnection_peer(char *mac_address)
3739 __WDC_LOG_FUNC_START__;
3741 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3743 GError* error = NULL;
3744 GVariant *reply = NULL;
3745 GVariant *params = NULL;
3746 int ret = WIFI_DIRECT_ERROR_NONE;
3748 if (g_client_info.is_registered == false) {
3749 WDC_LOGE("Client is NOT registered.");
3750 __WDC_LOG_FUNC_END__;
3751 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3755 WDC_LOGE("NULL Param!");
3756 __WDC_LOG_FUNC_END__;
3757 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3760 params = g_variant_new("(s)", mac_address);
3761 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
3762 "SetAutoConnectionPeer",
3766 ret = __net_wifidirect_gerror_to_enum(error);
3767 if (ret == WIFI_DIRECT_ERROR_NONE) {
3768 g_variant_get(reply, "(i)", &ret);
3769 g_variant_unref(reply);
3772 WDC_LOGD("%s() return : [%d]", __func__, ret);
3773 __WDC_LOG_FUNC_END__;
3777 int wifi_direct_init_display(void)
3779 __WDC_LOG_FUNC_START__;
3780 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3782 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3784 GError* error = NULL;
3785 GVariant *reply = NULL;
3786 int ret = WIFI_DIRECT_ERROR_NONE;
3788 if (g_client_info.is_registered == false) {
3789 WDC_LOGE("Client is NOT registered.");
3790 __WDC_LOG_FUNC_END__;
3791 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3794 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3799 ret = __net_wifidirect_gerror_to_enum(error);
3800 if (ret == WIFI_DIRECT_ERROR_NONE) {
3801 g_variant_get(reply, "(i)", &ret);
3802 g_variant_unref(reply);
3805 WDC_LOGD("%s() return : [%d]", __func__, ret);
3806 __WDC_LOG_FUNC_END__;
3808 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3809 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3810 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3813 int wifi_direct_deinit_display(void)
3815 __WDC_LOG_FUNC_START__;
3816 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3818 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3820 GError* error = NULL;
3821 GVariant *reply = NULL;
3822 int ret = WIFI_DIRECT_ERROR_NONE;
3824 if (g_client_info.is_registered == false) {
3825 WDC_LOGE("Client is NOT registered");
3826 __WDC_LOG_FUNC_END__;
3827 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3830 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3835 ret = __net_wifidirect_gerror_to_enum(error);
3836 if (ret == WIFI_DIRECT_ERROR_NONE) {
3837 g_variant_get(reply, "(i)", &ret);
3838 g_variant_unref(reply);
3841 WDC_LOGD("%s() return : [%d]", __func__, ret);
3842 __WDC_LOG_FUNC_END__;
3844 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3845 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3846 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3849 int wifi_direct_set_display(wifi_direct_display_type_e type, int port, int hdcp)
3851 __WDC_LOG_FUNC_START__;
3852 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3854 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3856 GError* error = NULL;
3857 GVariant *reply = NULL;
3858 GVariant *params = NULL;
3859 int ret = WIFI_DIRECT_ERROR_NONE;
3861 if (g_client_info.is_registered == false) {
3862 WDC_LOGE("Client is NOT registered");
3863 __WDC_LOG_FUNC_END__;
3864 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3867 if (type < WIFI_DIRECT_DISPLAY_TYPE_SOURCE ||
3868 type > WIFI_DIRECT_DISPLAY_TYPE_DUAL || port < 0 ||
3870 WDC_LOGE("Invalid paramaeters passed type[%d], port[%d], hdcp[%d]!");
3871 __WDC_LOG_FUNC_END__;
3872 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3875 params = g_variant_new("(iii)", type, port, hdcp);
3876 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3881 ret = __net_wifidirect_gerror_to_enum(error);
3882 if (ret == WIFI_DIRECT_ERROR_NONE) {
3883 g_variant_get(reply, "(i)", &ret);
3884 g_variant_unref(reply);
3887 WDC_LOGD("%s() return : [%d]", __func__, ret);
3888 __WDC_LOG_FUNC_END__;
3890 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3891 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3892 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3895 int wifi_direct_set_display_availability(bool availability)
3897 __WDC_LOG_FUNC_START__;
3898 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3900 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3902 GError* error = NULL;
3903 GVariant *reply = NULL;
3904 GVariant *params = NULL;
3905 int ret = WIFI_DIRECT_ERROR_NONE;
3907 if (g_client_info.is_registered == false) {
3908 WDC_LOGE("Client is NOT registered.");
3909 __WDC_LOG_FUNC_END__;
3910 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3914 params = g_variant_new("(i)", availability);
3915 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3920 ret = __net_wifidirect_gerror_to_enum(error);
3921 if (ret == WIFI_DIRECT_ERROR_NONE) {
3922 g_variant_get(reply, "(i)", &ret);
3923 g_variant_unref(reply);
3926 WDC_LOGD("%s() return : [%d]", __func__, ret);
3927 __WDC_LOG_FUNC_END__;
3929 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3930 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3931 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3935 int wifi_direct_get_peer_display_type(char *mac_address, wifi_direct_display_type_e *type)
3937 __WDC_LOG_FUNC_START__;
3938 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3940 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3942 GError* error = NULL;
3943 GVariant *reply = NULL;
3944 GVariant *params = NULL;
3946 int ret = WIFI_DIRECT_ERROR_NONE;
3948 if (g_client_info.is_registered == false) {
3949 WDC_LOGE("Client is NOT registered");
3950 __WDC_LOG_FUNC_END__;
3951 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3954 if (!mac_address || !type) {
3955 WDC_LOGE("NULL Param!");
3956 __WDC_LOG_FUNC_END__;
3957 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3960 params = g_variant_new("(s)", mac_address);
3961 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3966 ret = __net_wifidirect_gerror_to_enum(error);
3967 if (ret != WIFI_DIRECT_ERROR_NONE)
3970 g_variant_get(reply, "(ii)", &ret, &val);
3972 g_variant_unref(reply);
3974 WDC_LOGD("%s() return : [%d]", __func__, ret);
3975 __WDC_LOG_FUNC_END__;
3977 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3978 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3979 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3982 int wifi_direct_get_peer_display_availability(char *mac_address, bool *availability)
3984 __WDC_LOG_FUNC_START__;
3985 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3987 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3989 GError* error = NULL;
3990 GVariant *reply = NULL;
3991 GVariant *params = NULL;
3993 int ret = WIFI_DIRECT_ERROR_NONE;
3995 if (g_client_info.is_registered == false) {
3996 WDC_LOGE("Client is NOT registered");
3997 __WDC_LOG_FUNC_END__;
3998 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4001 if (!mac_address || !availability) {
4002 WDC_LOGE("NULL Param!");
4003 __WDC_LOG_FUNC_END__;
4004 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4007 params = g_variant_new("(s)", mac_address);
4008 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4009 "GetPeerAvailability",
4013 ret = __net_wifidirect_gerror_to_enum(error);
4014 if (ret != WIFI_DIRECT_ERROR_NONE)
4017 g_variant_get(reply, "(ii)", &ret, &val);
4018 *availability = val;
4019 g_variant_unref(reply);
4021 WDC_LOGD("%s() return : [%d]", __func__, ret);
4022 __WDC_LOG_FUNC_END__;
4024 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4025 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4026 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4029 int wifi_direct_get_peer_display_hdcp(char *mac_address, int *hdcp)
4031 __WDC_LOG_FUNC_START__;
4032 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
4034 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
4036 GError* error = NULL;
4037 GVariant *reply = NULL;
4038 GVariant *params = NULL;
4040 int ret = WIFI_DIRECT_ERROR_NONE;
4042 if (g_client_info.is_registered == false) {
4043 WDC_LOGE("Client is NOT registered");
4044 __WDC_LOG_FUNC_END__;
4045 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4048 if (!mac_address || !hdcp) {
4049 WDC_LOGE("NULL Param!");
4050 __WDC_LOG_FUNC_END__;
4051 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4054 params = g_variant_new("(s)", mac_address);
4055 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4060 ret = __net_wifidirect_gerror_to_enum(error);
4061 if (ret != WIFI_DIRECT_ERROR_NONE)
4064 g_variant_get(reply, "(ii)", &ret, &val);
4066 g_variant_unref(reply);
4068 WDC_LOGD("%s() return : [%d]", __func__, ret);
4069 __WDC_LOG_FUNC_END__;
4071 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4072 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4073 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4076 int wifi_direct_get_peer_display_port(char *mac_address, int *port)
4078 __WDC_LOG_FUNC_START__;
4079 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
4081 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
4083 GError* error = NULL;
4084 GVariant *reply = NULL;
4085 GVariant *params = NULL;
4087 int ret = WIFI_DIRECT_ERROR_NONE;
4089 if (g_client_info.is_registered == false) {
4090 WDC_LOGE("Client is NOT registered");
4091 __WDC_LOG_FUNC_END__;
4092 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4095 if (!mac_address || !port) {
4096 WDC_LOGE("NULL Param!");
4097 __WDC_LOG_FUNC_END__;
4098 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4101 params = g_variant_new("(s)", mac_address);
4102 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4107 ret = __net_wifidirect_gerror_to_enum(error);
4108 if (ret != WIFI_DIRECT_ERROR_NONE)
4111 g_variant_get(reply, "(ii)", &ret, &val);
4113 g_variant_unref(reply);
4115 WDC_LOGD("%s() return : [%d]", __func__, ret);
4116 __WDC_LOG_FUNC_END__;
4118 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4119 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4120 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4123 int wifi_direct_get_peer_display_throughput(char *mac_address, int *throughput)
4125 __WDC_LOG_FUNC_START__;
4126 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
4128 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
4130 GError* error = NULL;
4131 GVariant *reply = NULL;
4132 GVariant *params = NULL;
4134 int ret = WIFI_DIRECT_ERROR_NONE;
4136 if (g_client_info.is_registered == false) {
4137 WDC_LOGE("Client is NOT registered");
4138 __WDC_LOG_FUNC_END__;
4139 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4142 if (!mac_address || !throughput) {
4143 WDC_LOGE("NULL Param!");
4144 __WDC_LOG_FUNC_END__;
4145 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4148 params = g_variant_new("(s)", mac_address);
4149 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4150 "GetPeerThroughput",
4154 ret = __net_wifidirect_gerror_to_enum(error);
4155 if (ret != WIFI_DIRECT_ERROR_NONE)
4158 g_variant_get(reply, "(ii)", &ret, &val);
4160 g_variant_unref(reply);
4162 WDC_LOGD("%s() return : [%d]", __func__, ret);
4163 __WDC_LOG_FUNC_END__;
4165 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4166 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4167 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4170 int wifi_direct_set_session_timer(int seconds)
4172 __WDC_LOG_FUNC_START__;
4174 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
4176 GError* error = NULL;
4177 GVariant *reply = NULL;
4178 GVariant *params = NULL;
4179 int ret = WIFI_DIRECT_ERROR_NONE;
4181 if (g_client_info.is_registered == false) {
4182 WDC_LOGE("Client is NOT registered.");
4183 __WDC_LOG_FUNC_END__;
4184 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4187 WDC_LOGE("Negative Timer Value");
4188 __WDC_LOG_FUNC_END__;
4189 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4192 WDC_LOGD("seconds = [%d]", seconds);
4194 params = g_variant_new("(i)", seconds);
4195 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
4200 ret = __net_wifidirect_gerror_to_enum(error);
4201 if(ret == WIFI_DIRECT_ERROR_NONE) {
4202 g_variant_get(reply, "(i)", &ret);
4203 g_variant_unref(reply);
4206 WDC_LOGD("%s() SUCCESS", __func__);
4208 __WDC_LOG_FUNC_END__;
4209 return WIFI_DIRECT_ERROR_NONE;
4213 int wifi_direct_get_session_timer(int *seconds)
4215 __WDC_LOG_FUNC_START__;
4217 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
4219 GError* error = NULL;
4220 GVariant *reply = NULL;
4222 int ret = WIFI_DIRECT_ERROR_NONE;
4224 if (g_client_info.is_registered == false) {
4225 WDC_LOGE("Client is NOT registered");
4226 __WDC_LOG_FUNC_END__;
4227 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4231 WDC_LOGE("Invalid Parameter");
4232 __WDC_LOG_FUNC_END__;
4233 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4236 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
4241 ret = __net_wifidirect_gerror_to_enum(error);
4242 if (ret != WIFI_DIRECT_ERROR_NONE)
4245 g_variant_get(reply, "(ii)", &ret, &val);
4247 g_variant_unref(reply);
4249 WDC_LOGD("Session Timer = [%d] Seconds", *seconds);
4250 WDC_LOGD("%s() return : [%d]", __func__, ret);
4252 __WDC_LOG_FUNC_END__;
4256 int wifi_direct_set_auto_group_removal(bool enable)
4258 __WDC_LOG_FUNC_START__;
4260 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
4262 GError* error = NULL;
4263 GVariant *reply = NULL;
4264 GVariant *params = NULL;
4265 int ret = WIFI_DIRECT_ERROR_NONE;
4267 if (g_client_info.is_registered == false) {
4268 WDC_LOGE("Client is NOT registered");
4269 __WDC_LOG_FUNC_END__;
4270 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4273 params = g_variant_new("(b)", enable);
4274 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
4275 "SetAutoGroupRemoval",
4279 ret = __net_wifidirect_gerror_to_enum(error);
4280 if (ret == WIFI_DIRECT_ERROR_NONE) {
4281 g_variant_get(reply, "(i)", &ret);
4282 g_variant_unref(reply);
4285 WDC_LOGD("%s() return : [%d]", __func__, ret);
4286 __WDC_LOG_FUNC_END__;