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 static __thread wifi_direct_client_info_s g_client_info = {0, };
73 /*****************************************************************************
74 * Local Functions Definition
75 *****************************************************************************/
77 static wifi_direct_client_info_s *__wfd_get_control()
79 return &g_client_info;
82 static int __net_wifidirect_gerror_to_enum(GError* error)
84 int ret = WIFI_DIRECT_ERROR_NONE;
86 WDC_LOGI("GError is NULL!!");
90 WDC_LOGE("wifi_direct_dbus_method_call_sync() failed. error [%d: %s]",
91 error->code, error->message);
93 if (NULL == strstr(error->message, "net.wifidirect.Error")) {
95 if (NULL != strstr(error->message, ".AccessDenied")) {
96 WDC_LOGE("Client doesn't have wifidirect privilege");
97 ret = WIFI_DIRECT_ERROR_PERMISSION_DENIED;
99 WDC_LOGE("DBus failure");
100 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
104 if (NULL != strstr(error->message, "InvalidParameter"))
105 ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
106 else if (NULL != strstr(error->message, "NotPermitted"))
107 ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
108 else if (NULL != strstr(error->message, "OperationFailed"))
109 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
111 else if (NULL != strstr(error->message, "TooManyClient"))
112 ret = WIFI_DIRECT_ERROR_TOO_MANY_CLIENT;
114 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
122 void __wfd_vconf_state_changed_cb(keynode_t *key, void *data)
124 __WDC_LOG_FUNC_START__;
128 if (!g_client_info.state_cb) {
129 WDC_LOGI("g_state_cb is NULL!!");
130 __WDC_LOG_FUNC_END__;
131 return; //LCOV_EXCL_LINE
134 res = vconf_get_int(VCONFKEY_WIFI_DIRECT_STATE, &state);
136 WDC_LOGE("Failed to get vconf value [%s]\n",
137 VCONFKEY_WIFI_DIRECT_STATE);
138 __WDC_LOG_FUNC_END__;
142 if (state == VCONFKEY_WIFI_DIRECT_ACTIVATED) {
143 state = WIFI_DIRECT_STATE_ACTIVATED;
144 } else if (state == VCONFKEY_WIFI_DIRECT_DEACTIVATED) {
145 state = WIFI_DIRECT_STATE_DEACTIVATED;
146 } else if (state == VCONFKEY_WIFI_DIRECT_CONNECTED) {
147 state = WIFI_DIRECT_STATE_CONNECTED;
148 } else if (state == VCONFKEY_WIFI_DIRECT_GROUP_OWNER) {
149 state = WIFI_DIRECT_STATE_CONNECTED;
150 } else if (state == VCONFKEY_WIFI_DIRECT_DISCOVERING) {
151 state = WIFI_DIRECT_STATE_DISCOVERING;
153 WDC_LOGE("This state cannot be set as wifi_direct vconf state[%d]", state);
154 __WDC_LOG_FUNC_END__;
158 g_client_info.state_cb(state, g_client_info.user_data_for_cb_state);
160 __WDC_LOG_FUNC_END__;
166 void wifi_direct_process_manage_activation(GDBusConnection *connection,
167 const gchar *object_path, GVariant *parameters)
169 __WDC_LOG_FUNC_START__;
171 wifi_direct_client_info_s *client = __wfd_get_control();
173 if (!client->activation_cb) {
174 WDC_LOGI("activation_cb is NULL!!");
175 return; //LCOV_EXCL_LINE
179 __WDC_LOG_FUNC_END__;
183 g_variant_get(parameters, "(i)", &error_code);
185 client->activation_cb(error_code,
186 WIFI_DIRECT_DEVICE_STATE_ACTIVATED,
187 client->user_data_for_cb_activation);
189 __WDC_LOG_FUNC_END__;
192 void wifi_direct_process_manage_deactivation(GDBusConnection *connection,
193 const gchar *object_path, GVariant *parameters)
195 __WDC_LOG_FUNC_START__;
197 wifi_direct_client_info_s *client = __wfd_get_control();
200 __WDC_LOG_FUNC_END__;
201 return; //LCOV_EXCL_LINE
204 if (!client->activation_cb) {
205 WDC_LOGI("activation_cb is NULL!!");
206 __WDC_LOG_FUNC_END__;
210 g_variant_get(parameters, "(i)", &error_code);
212 client->activation_cb(error_code,
213 WIFI_DIRECT_DEVICE_STATE_DEACTIVATED,
214 client->user_data_for_cb_activation);
216 __WDC_LOG_FUNC_END__;
220 void wifi_direct_process_manage_connection(GDBusConnection *connection,
221 const gchar *object_path, GVariant *parameters)
223 __WDC_LOG_FUNC_START__;
225 wifi_direct_connection_state_e connection_state;
226 const gchar *peer_mac_address = NULL;
227 wifi_direct_client_info_s *client = __wfd_get_control();
230 __WDC_LOG_FUNC_END__;
234 if (!client->connection_cb) {
235 WDC_LOGI("connection_cb is NULL!!");
236 __WDC_LOG_FUNC_END__;
240 g_variant_get(parameters, "(ii&s)",
241 &error_code, &connection_state, &peer_mac_address);
243 client->connection_cb(error_code,
246 client->user_data_for_cb_connection);
248 __WDC_LOG_FUNC_END__;
251 void wifi_direct_process_manage_disconnection(GDBusConnection *connection,
252 const gchar *object_path, GVariant *parameters)
254 __WDC_LOG_FUNC_START__;
256 wifi_direct_connection_state_e connection_state;
257 const gchar *peer_mac_address = NULL;
258 wifi_direct_client_info_s *client = __wfd_get_control();
261 __WDC_LOG_FUNC_END__;
265 if (!client->connection_cb) {
266 WDC_LOGI("connection_cb is NULL!!");
267 __WDC_LOG_FUNC_END__;
271 g_variant_get(parameters, "(ii&s)",
272 &error_code, &connection_state, &peer_mac_address);
274 client->connection_cb(error_code,
277 client->user_data_for_cb_connection);
279 __WDC_LOG_FUNC_END__;
282 void wifi_direct_process_manage_peer_ip_assigned(GDBusConnection *connection,
283 const gchar *object_path, GVariant *parameters)
285 __WDC_LOG_FUNC_START__;
286 char *get_str = NULL;
287 GError* error = NULL;
288 GVariant *reply = NULL;
289 const gchar *peer_mac_address = NULL;
290 const gchar *assigned_ip_address = NULL;
292 wifi_direct_client_info_s *client = __wfd_get_control();
295 __WDC_LOG_FUNC_END__;
299 g_variant_get(parameters, "(&s&s)",
300 &peer_mac_address, &assigned_ip_address);
302 if (!client->ip_assigned_cb) {
303 WDC_LOGI("ip_assigned_cb is NULL!!");
304 __WDC_LOG_FUNC_END__;
308 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
313 WDC_LOGE("wifi_direct_dbus_method_call_sync() failed."
314 "error [%d: %s]", error->code, error->message);
316 __WDC_LOG_FUNC_END__;
320 g_variant_get(reply, "(i&s)", ret, &get_str);
321 g_variant_unref(reply);
323 WDC_LOGD("Interface Name = [%s]", get_str);
324 WDC_LOGD("%s() return : [%d]", __func__, ret);
326 client->ip_assigned_cb(peer_mac_address, assigned_ip_address, get_str,
327 client->user_data_for_cb_ip_assigned);
329 __WDC_LOG_FUNC_END__;
332 void wifi_direct_process_manage_listen_started(GDBusConnection *connection,
333 const gchar *object_path, GVariant *parameters)
335 __WDC_LOG_FUNC_START__;
336 wifi_direct_client_info_s *client = __wfd_get_control();
338 if (!client->discover_cb) {
339 WDC_LOGI("discover_cb is NULL!!");
340 __WDC_LOG_FUNC_END__;
344 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
345 WIFI_DIRECT_ONLY_LISTEN_STARTED,
346 client->user_data_for_cb_discover);
348 __WDC_LOG_FUNC_END__;
351 void wifi_direct_process_manage_discovery_started(GDBusConnection *connection,
352 const gchar *object_path, GVariant *parameters)
354 __WDC_LOG_FUNC_START__;
355 wifi_direct_client_info_s *client = __wfd_get_control();
357 if (!client->discover_cb) {
358 WDC_LOGI("discover_cb is NULL!!");
359 __WDC_LOG_FUNC_END__;
363 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
364 WIFI_DIRECT_DISCOVERY_STARTED,
365 client->user_data_for_cb_discover);
367 __WDC_LOG_FUNC_END__;
370 void wifi_direct_process_manage_discovery_finished(GDBusConnection *connection,
371 const gchar *object_path, GVariant *parameters)
373 __WDC_LOG_FUNC_START__;
374 wifi_direct_client_info_s *client = __wfd_get_control();
376 if (!client->discover_cb) {
377 WDC_LOGI("discover_cb is NULL!!");
378 __WDC_LOG_FUNC_END__;
382 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
383 WIFI_DIRECT_DISCOVERY_FINISHED,
384 client->user_data_for_cb_discover);
386 __WDC_LOG_FUNC_END__;
389 void wifi_direct_process_manage_peer_found(GDBusConnection *connection,
390 const gchar *object_path, GVariant *parameters)
392 __WDC_LOG_FUNC_START__;
393 const gchar *peer_mac_address = NULL;
394 wifi_direct_client_info_s *client = __wfd_get_control();
397 __WDC_LOG_FUNC_END__;
401 g_variant_get(parameters, "(&s)", &peer_mac_address);
403 if (client->peer_found_cb) {
404 client->peer_found_cb(WIFI_DIRECT_ERROR_NONE,
405 WIFI_DIRECT_DISCOVERY_FOUND,
407 client->user_data_for_cb_discover);
409 WDC_LOGI("peer_found_cb is NULL!!");
412 if (!client->discover_cb) {
413 WDC_LOGI("discover_cb is NULL!!");
414 __WDC_LOG_FUNC_END__;
418 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
419 WIFI_DIRECT_DISCOVERY_FOUND,
420 client->user_data_for_cb_discover);
422 __WDC_LOG_FUNC_END__;
425 void wifi_direct_process_manage_peer_lost(GDBusConnection *connection,
426 const gchar *object_path, GVariant *parameters)
428 __WDC_LOG_FUNC_START__;
429 const gchar *peer_mac_address = NULL;
430 wifi_direct_client_info_s *client = __wfd_get_control();
433 __WDC_LOG_FUNC_END__;
437 g_variant_get(parameters, "(&s)", &peer_mac_address);
439 if (client->peer_found_cb) {
440 client->peer_found_cb(WIFI_DIRECT_ERROR_NONE,
441 WIFI_DIRECT_DISCOVERY_LOST,
443 client->user_data_for_cb_discover);
445 WDC_LOGI("peer_found_cb is NULL!!");
448 if (!client->discover_cb) {
449 WDC_LOGI("discover_cb is NULL!!");
450 __WDC_LOG_FUNC_END__;
454 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
455 WIFI_DIRECT_DISCOVERY_LOST,
456 client->user_data_for_cb_discover);
458 __WDC_LOG_FUNC_END__;
462 void wifi_direct_process_group_created(GDBusConnection *connection,
463 const gchar *object_path, GVariant *parameters)
465 __WDC_LOG_FUNC_START__;
466 wifi_direct_client_info_s *client = __wfd_get_control();
468 if (!client->connection_cb) {
469 WDC_LOGI("connection_cb is NULL!!");
470 __WDC_LOG_FUNC_END__;
474 client->connection_cb(WIFI_DIRECT_ERROR_NONE,
475 WIFI_DIRECT_GROUP_CREATED,
477 client->user_data_for_cb_connection);
479 __WDC_LOG_FUNC_END__;
482 void wifi_direct_process_group_destroyed(GDBusConnection *connection,
483 const gchar *object_path, GVariant *parameters)
485 __WDC_LOG_FUNC_START__;
486 wifi_direct_client_info_s *client = __wfd_get_control();
488 if (!client->connection_cb) {
489 WDC_LOGI("connection_cb is NULL!!");
490 __WDC_LOG_FUNC_END__;
494 client->connection_cb(WIFI_DIRECT_ERROR_NONE,
495 WIFI_DIRECT_GROUP_DESTROYED,
497 client->user_data_for_cb_connection);
499 __WDC_LOG_FUNC_END__;
502 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
504 void wifi_direct_process_service_discovery_started(GDBusConnection *connection,
505 const gchar *object_path, GVariant *parameters)
507 __WDC_LOG_FUNC_START__;
508 wifi_direct_client_info_s *client = __wfd_get_control();
510 if (!client->service_cb) {
511 WDC_LOGI("service_cb is NULL!!\n");
512 __WDC_LOG_FUNC_END__;
516 client->service_cb(WIFI_DIRECT_ERROR_NONE,
517 WIFI_DIRECT_SERVICE_DISCOVERY_STARTED,
518 WIFI_DIRECT_SERVICE_TYPE_ALL,
521 client->user_data_for_cb_service);
523 __WDC_LOG_FUNC_END__;
526 void wifi_direct_process_service_discovery_found(GDBusConnection *connection,
527 const gchar *object_path, GVariant *parameters)
529 __WDC_LOG_FUNC_START__;
530 wifi_direct_service_type_e service_type;
531 const gchar* response_data = NULL;
532 const gchar* peer_mac_address = NULL;
533 wifi_direct_client_info_s *client = __wfd_get_control();
536 __WDC_LOG_FUNC_END__;
540 g_variant_get(parameters, "(i&s&s)",
541 &service_type, &response_data, &peer_mac_address);
543 if (!client->service_cb) {
544 WDC_LOGI("service_cb is NULL!!\n");
545 __WDC_LOG_FUNC_END__;
549 client->service_cb(WIFI_DIRECT_ERROR_NONE,
550 WIFI_DIRECT_SERVICE_DISCOVERY_FOUND,
552 (void *) response_data,
554 client->user_data_for_cb_service);
556 __WDC_LOG_FUNC_END__;
559 void wifi_direct_process_service_discovery_finished(GDBusConnection *connection,
560 const gchar *object_path, GVariant *parameters)
562 __WDC_LOG_FUNC_START__;
563 wifi_direct_client_info_s *client = __wfd_get_control();
565 if (!client->service_cb) {
566 WDC_LOGI("service_cb is NULL!!\n");
567 __WDC_LOG_FUNC_END__;
571 client->service_cb(WIFI_DIRECT_ERROR_NONE,
572 WIFI_DIRECT_SERVICE_DISCOVERY_FINISHED,
573 WIFI_DIRECT_SERVICE_TYPE_ALL,
576 client->user_data_for_cb_service);
578 __WDC_LOG_FUNC_END__;
580 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
582 void __wfd_client_print_entry_list(wfd_discovery_entry_s *list, int num)
586 WDC_LOGD("------------------------------------------");
587 for (i = 0; i < num; i++) {
588 WDC_LOGD("== Peer index : %d ==", i);
589 WDC_LOGD("is Group Owner ? %s", list[i].is_group_owner ? "YES" : "NO");
590 WDC_LOGD("device_name : %s", list[i].device_name);
591 WDC_LOGD("MAC address : "MACSECSTR, MAC2SECSTR(list[i].mac_address));
592 WDC_LOGD("wps cfg method : %x", list[i].wps_cfg_methods);
593 WDC_LOGD("Device Type: %d - %d", list[i].category, list[i].subcategory);
594 WDC_LOGD("Listen channel: %d", list[i].channel);
596 WDC_LOGD("------------------------------------------");
599 void __wfd_client_print_connected_peer_info(wfd_connected_peer_info_s *list, int num)
603 WDC_LOGD("------------------------------------------\n");
604 for (i = 0; i < num; i++) {
605 WDC_LOGD("== Peer index : %d ==\n", i);
606 WDC_LOGD("device_name : %s\n", list[i].device_name);
607 WDC_LOGD("Device MAC : " MACSECSTR "\n", MAC2SECSTR(list[i].mac_address));
608 WDC_LOGD("Device Type: %d - %d", list[i].category, list[i].subcategory);
609 WDC_LOGD("channel : %d\n", list[i].channel);
610 WDC_LOGD("IP ["IPSECSTR"]\n", IP2SECSTR(list[i].ip_address));
612 WDC_LOGD("------------------------------------------\n");
615 void __wfd_client_print_persistent_group_info(wfd_persistent_group_info_s *list, int num)
619 WDC_LOGD("------------------------------------------\n");
620 for (i = 0; i < num; i++) {
621 WDC_LOGD("== Persistent Group index : %d ==", i);
622 WDC_LOGD("ssid : %s", list[i].ssid);
623 WDC_LOGD("GO MAC : " MACSECSTR, MAC2SECSTR(list[i].go_mac_address));
625 WDC_LOGD("------------------------------------------\n");
629 int wifi_direct_initialize(void)
631 __WDC_LOG_FUNC_START__;
633 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
635 GError* error = NULL;
636 GVariant *reply = NULL;
637 bool wifi_direct_enable;
641 if (g_client_info.is_registered == TRUE) {
642 WDC_LOGW("Warning!!! Already registered\nUpdate user data and callback!");
643 __WDC_LOG_FUNC_END__;
644 return WIFI_DIRECT_ERROR_ALREADY_INITIALIZED;
647 res = system_info_get_platform_bool("tizen.org/feature/network.wifi.direct", &wifi_direct_enable);
649 WDC_LOGE("Failed to get sys info");
650 __WDC_LOG_FUNC_END__;
651 return res; //LCOV_EXCL_LINE
654 if (!wifi_direct_enable) {
655 WDC_LOGE("Wi-Fi Direct not supported");
656 return WIFI_DIRECT_ERROR_NOT_SUPPORTED; //LCOV_EXCL_LINE
659 if (wifi_direct_dbus_init() == FALSE) {
660 WDC_LOGW("Failed to initialize dbus");
661 __WDC_LOG_FUNC_END__;
662 return WIFI_DIRECT_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
665 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
666 "IsGroupOwner", NULL, &error);
668 res = __net_wifidirect_gerror_to_enum(error);
669 if (res != WIFI_DIRECT_ERROR_NONE)
672 g_variant_get(reply, "(b)", &val);
673 WDC_LOGD("is group owner [%s]", val ? "YES" : "NO");
675 g_client_info.is_registered = TRUE;
677 /* Initialize callbacks */
678 g_client_info.activation_cb = NULL;
679 g_client_info.user_data_for_cb_activation = NULL;
681 g_client_info.discover_cb = NULL;
682 g_client_info.user_data_for_cb_discover = NULL;
684 g_client_info.connection_cb = NULL;
685 g_client_info.user_data_for_cb_connection = NULL;
687 g_client_info.ip_assigned_cb = NULL;
688 g_client_info.user_data_for_cb_ip_assigned = NULL;
690 g_client_info.peer_found_cb = NULL;
691 g_client_info.user_data_for_cb_peer_found = NULL;
693 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
694 g_client_info.service_cb = NULL;
695 g_client_info.user_data_for_cb_service = NULL;
696 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
698 __WDC_LOG_FUNC_END__;
699 return WIFI_DIRECT_ERROR_NONE;
702 int wifi_direct_deinitialize(void)
704 __WDC_LOG_FUNC_START__;
706 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
708 if (g_client_info.is_registered == false) {
709 WDC_LOGE("Client is already deregistered");
710 __WDC_LOG_FUNC_END__;
711 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
714 wifi_direct_dbus_deinit();
716 g_client_info.activation_cb = NULL;
717 g_client_info.user_data_for_cb_activation = NULL;
719 g_client_info.discover_cb = NULL;
720 g_client_info.user_data_for_cb_discover = NULL;
722 g_client_info.connection_cb = NULL;
723 g_client_info.user_data_for_cb_connection = NULL;
725 g_client_info.ip_assigned_cb = NULL;
726 g_client_info.user_data_for_cb_ip_assigned = NULL;
728 g_client_info.peer_found_cb = NULL;
729 g_client_info.user_data_for_cb_peer_found = NULL;
731 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
732 g_client_info.service_cb = NULL;
733 g_client_info.user_data_for_cb_service = NULL;
734 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
736 g_client_info.is_registered = FALSE;
738 __WDC_LOG_FUNC_END__;
739 return WIFI_DIRECT_ERROR_NONE;
743 int wifi_direct_set_device_state_changed_cb(wifi_direct_device_state_changed_cb cb,
746 __WDC_LOG_FUNC_START__;
748 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
751 WDC_LOGE("Invalid parameter");
752 __WDC_LOG_FUNC_END__;
753 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
756 if (g_client_info.is_registered == false) {
757 WDC_LOGE("Client is not initialized.");
758 __WDC_LOG_FUNC_END__;
759 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
762 g_client_info.activation_cb = cb;
763 g_client_info.user_data_for_cb_activation = user_data;
765 __WDC_LOG_FUNC_END__;
766 return WIFI_DIRECT_ERROR_NONE;
770 int wifi_direct_unset_device_state_changed_cb(void)
772 __WDC_LOG_FUNC_START__;
774 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
776 if (g_client_info.is_registered == false) {
777 WDC_LOGE("Client is not initialized.\n");
778 __WDC_LOG_FUNC_END__;
779 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
782 g_client_info.activation_cb = NULL;
783 g_client_info.user_data_for_cb_activation = NULL;
785 __WDC_LOG_FUNC_END__;
786 return WIFI_DIRECT_ERROR_NONE;
791 wifi_direct_set_discovery_state_changed_cb(wifi_direct_discovery_state_chagned_cb cb,
794 __WDC_LOG_FUNC_START__;
796 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
799 WDC_LOGE("Callback is NULL.\n");
800 __WDC_LOG_FUNC_END__;
801 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
804 if (g_client_info.is_registered == false) {
805 WDC_LOGE("Client is not initialized.\n");
806 __WDC_LOG_FUNC_END__;
807 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
810 g_client_info.discover_cb = cb;
811 g_client_info.user_data_for_cb_discover = user_data;
813 __WDC_LOG_FUNC_END__;
814 return WIFI_DIRECT_ERROR_NONE;
818 int wifi_direct_unset_discovery_state_changed_cb(void)
820 __WDC_LOG_FUNC_START__;
822 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
824 if (g_client_info.is_registered == false) {
825 WDC_LOGE("Client is not initialized.\n");
826 __WDC_LOG_FUNC_END__;
827 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
830 g_client_info.discover_cb = NULL;
831 g_client_info.user_data_for_cb_discover = NULL;
833 __WDC_LOG_FUNC_END__;
834 return WIFI_DIRECT_ERROR_NONE;
837 int wifi_direct_set_peer_found_cb(wifi_direct_peer_found_cb cb,
840 __WDC_LOG_FUNC_START__;
842 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
845 WDC_LOGE("Callback is NULL.\n");
846 __WDC_LOG_FUNC_END__;
847 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
850 if (g_client_info.is_registered == false) {
851 WDC_LOGE("Client is not initialized.\n");
852 __WDC_LOG_FUNC_END__;
853 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
856 g_client_info.peer_found_cb = cb;
857 g_client_info.user_data_for_cb_peer_found = user_data;
859 __WDC_LOG_FUNC_END__;
860 return WIFI_DIRECT_ERROR_NONE;
864 int wifi_direct_unset_peer_found_cb(void)
866 __WDC_LOG_FUNC_START__;
868 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
870 if (g_client_info.is_registered == false) {
871 WDC_LOGE("Client is not initialized.\n");
872 __WDC_LOG_FUNC_END__;
873 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
876 g_client_info.peer_found_cb = NULL;
877 g_client_info.user_data_for_cb_peer_found = NULL;
879 __WDC_LOG_FUNC_END__;
880 return WIFI_DIRECT_ERROR_NONE;
883 int wifi_direct_set_service_state_changed_cb(wifi_direct_service_state_changed_cb cb,
886 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
887 __WDC_LOG_FUNC_START__;
889 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
893 WDC_LOGE("Callback is NULL.");
894 __WDC_LOG_FUNC_END__;
895 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
898 if (g_client_info.is_registered == false) {
899 WDC_LOGE("Client is not initialized.");
900 __WDC_LOG_FUNC_END__;
901 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
904 g_client_info.service_cb = cb;
905 g_client_info.user_data_for_cb_service = user_data;
907 __WDC_LOG_FUNC_END__;
908 return WIFI_DIRECT_ERROR_NONE;
910 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
911 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
912 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
916 int wifi_direct_unset_service_state_changed_cb(void)
918 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
919 __WDC_LOG_FUNC_START__;
921 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
924 if (g_client_info.is_registered == false) {
925 WDC_LOGE("Client is not initialized.");
926 __WDC_LOG_FUNC_END__;
927 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
930 g_client_info.service_cb = NULL;
931 g_client_info.user_data_for_cb_service = NULL;
933 __WDC_LOG_FUNC_END__;
934 return WIFI_DIRECT_ERROR_NONE;
936 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
937 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
938 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
941 int wifi_direct_set_connection_state_changed_cb(wifi_direct_connection_state_changed_cb cb,
944 __WDC_LOG_FUNC_START__;
946 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
949 WDC_LOGE("Callback is NULL.\n");
950 __WDC_LOG_FUNC_END__;
951 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
954 if (g_client_info.is_registered == false) {
955 WDC_LOGE("Client is not initialized.\n");
956 __WDC_LOG_FUNC_END__;
957 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
960 g_client_info.connection_cb = cb;
961 g_client_info.user_data_for_cb_connection = user_data;
963 __WDC_LOG_FUNC_END__;
964 return WIFI_DIRECT_ERROR_NONE;
968 int wifi_direct_unset_connection_state_changed_cb(void)
970 __WDC_LOG_FUNC_START__;
972 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
974 if (g_client_info.is_registered == false) {
975 WDC_LOGE("Client is not initialized");
976 __WDC_LOG_FUNC_END__;
977 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
980 g_client_info.connection_cb = NULL;
981 g_client_info.user_data_for_cb_connection = NULL;
983 __WDC_LOG_FUNC_END__;
984 return WIFI_DIRECT_ERROR_NONE;
988 int wifi_direct_set_client_ip_address_assigned_cb(wifi_direct_client_ip_address_assigned_cb cb,
991 __WDC_LOG_FUNC_START__;
993 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
996 WDC_LOGE("Callback is NULL");
997 __WDC_LOG_FUNC_END__;
998 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1001 if (g_client_info.is_registered == false) {
1002 WDC_LOGE("Client is not initialized");
1003 __WDC_LOG_FUNC_END__;
1004 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1007 g_client_info.ip_assigned_cb = cb;
1008 g_client_info.user_data_for_cb_ip_assigned = user_data;
1010 __WDC_LOG_FUNC_END__;
1011 return WIFI_DIRECT_ERROR_NONE;
1014 int wifi_direct_unset_client_ip_address_assigned_cb(void)
1016 __WDC_LOG_FUNC_START__;
1018 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1020 if (g_client_info.is_registered == false) {
1021 WDC_LOGE("Client is not initialized");
1022 __WDC_LOG_FUNC_END__;
1023 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1026 g_client_info.ip_assigned_cb = NULL;
1027 g_client_info.user_data_for_cb_ip_assigned = NULL;
1029 __WDC_LOG_FUNC_END__;
1030 return WIFI_DIRECT_ERROR_NONE;
1033 int wifi_direct_set_state_changed_cb(wifi_direct_state_changed_cb cb, void *user_data)
1035 __WDC_LOG_FUNC_START__;
1036 int ret = WIFI_DIRECT_ERROR_NONE;
1038 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1041 WDC_LOGE("Callback is NULL");
1042 __WDC_LOG_FUNC_END__;
1043 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1046 ret = vconf_notify_key_changed(VCONFKEY_WIFI_DIRECT_STATE,
1047 __wfd_vconf_state_changed_cb, NULL);
1049 WDC_LOGE("Failed to set vconf notification callback");
1050 __WDC_LOG_FUNC_END__;
1051 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1054 g_client_info.state_cb = cb;
1055 g_client_info.user_data_for_cb_state = user_data;
1057 __WDC_LOG_FUNC_END__;
1058 return WIFI_DIRECT_ERROR_NONE;
1061 int wifi_direct_unset_state_changed_cb(void)
1063 __WDC_LOG_FUNC_START__;
1064 int ret = WIFI_DIRECT_ERROR_NONE;
1066 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1068 ret = vconf_ignore_key_changed(VCONFKEY_WIFI_DIRECT_STATE,
1069 __wfd_vconf_state_changed_cb);
1071 WDC_LOGE("Failed to ignore vconf notification callback");
1072 __WDC_LOG_FUNC_END__;
1073 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1076 g_client_info.state_cb = NULL;
1077 g_client_info.user_data_for_cb_state = NULL;
1079 __WDC_LOG_FUNC_END__;
1080 return WIFI_DIRECT_ERROR_NONE;
1083 int wifi_direct_activate(void)
1085 __WDC_LOG_FUNC_START__;
1086 GError *error = NULL;
1087 GVariant *reply = NULL;
1088 int ret = WIFI_DIRECT_ERROR_NONE;
1090 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1092 if (g_client_info.is_registered == false) {
1093 WDC_LOGE("Client is NOT registered");
1094 __WDC_LOG_FUNC_END__;
1095 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1098 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1099 "Activate", NULL, &error);
1101 ret = __net_wifidirect_gerror_to_enum(error);
1102 if (ret == WIFI_DIRECT_ERROR_NONE) {
1103 g_variant_get(reply, "(i)", &ret);
1104 g_variant_unref(reply);
1107 WDC_LOGD("%s() return : [%d]", __func__, ret);
1108 __WDC_LOG_FUNC_END__;
1112 int wifi_direct_deactivate(void)
1114 __WDC_LOG_FUNC_START__;
1115 GError *error = NULL;
1116 GVariant *reply = NULL;
1117 int ret = WIFI_DIRECT_ERROR_NONE;
1119 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1121 if (g_client_info.is_registered == false) {
1122 WDC_LOGE("Client is NOT registered");
1123 __WDC_LOG_FUNC_END__;
1124 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1127 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1128 "Deactivate", NULL, &error);
1130 ret = __net_wifidirect_gerror_to_enum(error);
1131 if (ret == WIFI_DIRECT_ERROR_NONE) {
1132 g_variant_get(reply, "(i)", &ret);
1133 g_variant_unref(reply);
1136 WDC_LOGD("%s() return : [%d]", __func__, ret);
1137 __WDC_LOG_FUNC_END__;
1141 int wifi_direct_start_discovery(bool listen_only, int timeout)
1143 __WDC_LOG_FUNC_START__;
1144 GVariantBuilder *builder = NULL;
1145 GVariant *params = NULL;
1146 GError *error = NULL;
1147 GVariant *reply = NULL;
1148 int ret = WIFI_DIRECT_ERROR_NONE;
1150 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1152 if (g_client_info.is_registered == false) {
1153 WDC_LOGE("Client is NOT registered");
1154 __WDC_LOG_FUNC_END__;
1155 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1159 WDC_LOGE("Negative value. Param [timeout]!");
1160 __WDC_LOG_FUNC_END__;
1161 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1164 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1165 g_variant_builder_add(builder, "{sv}", "Mode", g_variant_new("b", listen_only));
1166 g_variant_builder_add(builder, "{sv}", "Timeout", g_variant_new("i", timeout));
1167 params = g_variant_new("(a{sv})", builder);
1168 g_variant_builder_unref(builder);
1169 WDC_LOGI("listen only (%d) timeout (%d)", listen_only, timeout);
1171 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1172 "StartDiscovery", params, &error);
1174 ret = __net_wifidirect_gerror_to_enum(error);
1175 if (ret == WIFI_DIRECT_ERROR_NONE) {
1176 g_variant_get(reply, "(i)", &ret);
1177 g_variant_unref(reply);
1180 WDC_LOGD("%s() return : [%d]", __func__, ret);
1181 __WDC_LOG_FUNC_END__;
1185 int wifi_direct_start_discovery_specific_channel(bool listen_only,
1187 wifi_direct_discovery_channel_e channel)
1189 __WDC_LOG_FUNC_START__;
1190 GVariantBuilder *builder = NULL;
1191 GVariant *params = NULL;
1192 GError *error = NULL;
1193 GVariant *reply = NULL;
1194 int ret = WIFI_DIRECT_ERROR_NONE;
1196 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1198 if (g_client_info.is_registered == false) {
1199 WDC_LOGE("Client is NOT registered");
1200 __WDC_LOG_FUNC_END__;
1201 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1205 WDC_LOGE("Negative value. Param [timeout]!");
1206 __WDC_LOG_FUNC_END__;
1207 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1210 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1211 g_variant_builder_add(builder, "{sv}", "Mode", g_variant_new("b", listen_only));
1212 g_variant_builder_add(builder, "{sv}", "Timeout", g_variant_new("i", timeout));
1213 g_variant_builder_add(builder, "{sv}", "Channel", g_variant_new("i", channel));
1214 params = g_variant_new("(a{sv})", builder);
1215 g_variant_builder_unref(builder);
1216 WDC_LOGI("listen only (%d) timeout (%d)", listen_only, timeout);
1218 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1219 "StartDiscovery", params, &error);
1221 ret = __net_wifidirect_gerror_to_enum(error);
1222 if (ret == WIFI_DIRECT_ERROR_NONE) {
1223 g_variant_get(reply, "(i)", &ret);
1224 g_variant_unref(reply);
1227 WDC_LOGD("%s() return : [%d]", __func__, ret);
1228 __WDC_LOG_FUNC_END__;
1232 int wifi_direct_cancel_discovery(void)
1234 __WDC_LOG_FUNC_START__;
1235 GError *error = NULL;
1236 GVariant *reply = NULL;
1237 int ret = WIFI_DIRECT_ERROR_NONE;
1239 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1241 if (g_client_info.is_registered == false) {
1242 WDC_LOGE("Client is NOT registered");
1243 __WDC_LOG_FUNC_END__;
1244 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1247 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1248 "StopDiscovery", NULL, &error);
1250 ret = __net_wifidirect_gerror_to_enum(error);
1251 if (ret == WIFI_DIRECT_ERROR_NONE) {
1252 g_variant_get(reply, "(i)", &ret);
1253 g_variant_unref(reply);
1256 WDC_LOGD("%s() return : [%d]", __func__, ret);
1257 __WDC_LOG_FUNC_END__;
1262 static char **get_service_list(char *services, unsigned int *count)
1264 __WDC_LOG_FUNC_START__;
1265 char **result = NULL;
1268 unsigned int cnt = 0;
1271 char *saveptr = NULL;
1273 if (!count || !services || (services && strlen(services) <= 0)) {
1274 WDC_LOGE("Invalid parameters.");
1275 __WDC_LOG_FUNC_END__;
1280 pos2 = g_strdup(services);
1282 pos1 = strtok_r(pos1, ",\n", &saveptr);
1285 pos1 = strtok_r(NULL, ",\n", &saveptr);
1287 WDC_LOGD("Total Service Count = %d", cnt);
1290 result = (char**) g_try_malloc0_n(cnt, sizeof(char *));
1292 WDC_LOGE("Failed to allocate memory for result");
1296 pos2 = strtok_r(pos2, ",\n", &saveptr);
1297 while (pos2 != NULL) {
1298 char *s = strchr(pos2, ' ');
1301 result[i++] = strdup(pos2);
1302 pos2 = strtok_r(NULL, ",\n", &saveptr);
1316 for (j = 0; j < i && result[j] != NULL; j++)
1323 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
1325 int wifi_direct_foreach_discovered_peers(wifi_direct_discovered_peer_cb cb,
1328 __WDC_LOG_FUNC_START__;
1330 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1332 GVariant *params = NULL;
1333 GError *error = NULL;
1334 GVariant *reply = NULL;
1335 GVariantIter *iter_peers = NULL;
1336 GVariantIter *iter_peer = NULL;
1337 GVariant *var = NULL;
1339 int ret = WIFI_DIRECT_ERROR_NONE;
1341 if (g_client_info.is_registered == false) {
1342 WDC_LOGE("Client is NOT registered");
1343 __WDC_LOG_FUNC_END__;
1344 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1348 WDC_LOGE("NULL Param [callback]!");
1349 __WDC_LOG_FUNC_END__;
1350 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1353 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1354 "GetDiscoveredPeers", params, &error);
1356 ret = __net_wifidirect_gerror_to_enum(error);
1357 if (ret != WIFI_DIRECT_ERROR_NONE)
1360 g_variant_get(reply, "(iaa{sv})", &ret, &iter_peers);
1361 if (ret != WIFI_DIRECT_ERROR_NONE) {
1362 __WDC_LOG_FUNC_END__;
1363 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1366 WDC_LOGD("wifi_direct_foreach_discovered_peers() SUCCESS");
1368 while (g_variant_iter_loop(iter_peers, "a{sv}", &iter_peer)) {
1369 wifi_direct_discovered_peer_info_s *peer_list = NULL;
1371 peer_list = (wifi_direct_discovered_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_discovered_peer_info_s));
1373 WDC_LOGE("Failed to allocate memory");
1377 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
1378 if (!g_strcmp0(key, "DeviceName")) {
1379 const char *device_name = NULL;
1381 g_variant_get(var, "&s", &device_name);
1382 peer_list->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
1384 } else if (!g_strcmp0(key, "DeviceAddress")) {
1385 unsigned char mac_address[MACADDR_LEN] = {0, };
1387 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
1388 peer_list->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
1389 if (peer_list->mac_address)
1390 g_snprintf(peer_list->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
1392 } else if (!g_strcmp0(key, "InterfaceAddress")) {
1393 unsigned char intf_address[MACADDR_LEN] = {0, };
1395 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
1396 peer_list->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
1397 if (peer_list->interface_address)
1398 g_snprintf(peer_list->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
1400 } else if (!g_strcmp0(key, "Channel")) {
1401 peer_list->channel = g_variant_get_uint16(var);
1403 } else if (!g_strcmp0(key, "IsGroupOwner")) {
1404 peer_list->is_group_owner = g_variant_get_boolean(var);
1406 } else if (!g_strcmp0(key, "IsPersistentGO")) {
1407 peer_list->is_persistent_group_owner = g_variant_get_boolean(var);
1409 } else if (!g_strcmp0(key, "IsConnected")) {
1410 peer_list->is_connected = g_variant_get_boolean(var);
1412 } else if (!g_strcmp0(key, "Category")) {
1413 peer_list->primary_device_type = g_variant_get_uint16(var);
1415 } else if (!g_strcmp0(key, "SubCategory")) {
1416 peer_list->secondary_device_type = g_variant_get_uint16(var);
1418 } else if (!g_strcmp0(key, "IsWfdDevice")) {
1419 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
1420 peer_list->is_miracast_device = g_variant_get_boolean(var);
1421 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
1427 /* __wfd_client_print_entry_list(peer_list, 1); */
1428 if (!cb(peer_list, user_data)) {
1429 g_variant_iter_free(iter_peer);
1434 g_variant_iter_free(iter_peers);
1435 g_variant_unref(reply);
1436 __WDC_LOG_FUNC_END__;
1437 return WIFI_DIRECT_ERROR_NONE;
1440 int wifi_direct_connect(char *mac_address)
1442 __WDC_LOG_FUNC_START__;
1444 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1446 GVariant *params = NULL;
1447 GError *error = NULL;
1448 GVariant *reply = NULL;
1449 int ret = WIFI_DIRECT_ERROR_NONE;
1451 if (g_client_info.is_registered == false) {
1452 WDC_LOGE("Client is NOT registered");
1453 __WDC_LOG_FUNC_END__;
1454 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1458 WDC_LOGE("mac_addr is NULL");
1459 __WDC_LOG_FUNC_END__;
1460 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1463 params = g_variant_new("(s)", mac_address);
1464 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1465 "Connect", params, &error);
1467 ret = __net_wifidirect_gerror_to_enum(error);
1468 if (ret == WIFI_DIRECT_ERROR_NONE) {
1469 g_variant_get(reply, "(i)", &ret);
1470 g_variant_unref(reply);
1473 WDC_LOGD("%s() return : [%d]", __func__, ret);
1474 __WDC_LOG_FUNC_END__;
1479 int wifi_direct_cancel_connection(char *mac_address)
1481 __WDC_LOG_FUNC_START__;
1483 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1485 GVariant *params = NULL;
1486 GError *error = NULL;
1487 GVariant *reply = NULL;
1488 int ret = WIFI_DIRECT_ERROR_NONE;
1490 if (g_client_info.is_registered == false) {
1491 WDC_LOGE("Client is NOT registered");
1492 __WDC_LOG_FUNC_END__;
1493 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1497 WDC_LOGE("mac_addr is NULL");
1498 __WDC_LOG_FUNC_END__;
1499 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1502 params = g_variant_new("(s)", mac_address);
1503 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1504 "CancelConnection", params, &error);
1506 ret = __net_wifidirect_gerror_to_enum(error);
1507 if (ret == WIFI_DIRECT_ERROR_NONE) {
1508 g_variant_get(reply, "(i)", &ret);
1509 g_variant_unref(reply);
1512 WDC_LOGD("%s() return : [%d]", __func__, ret);
1513 __WDC_LOG_FUNC_END__;
1518 int wifi_direct_reject_connection(char *mac_address)
1520 __WDC_LOG_FUNC_START__;
1522 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1524 GVariant *params = NULL;
1525 GError *error = NULL;
1526 GVariant *reply = NULL;
1527 int ret = WIFI_DIRECT_ERROR_NONE;
1529 if (g_client_info.is_registered == false) {
1530 WDC_LOGE("Client is NOT registered");
1531 __WDC_LOG_FUNC_END__;
1532 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1536 WDC_LOGE("mac_addr is NULL");
1537 __WDC_LOG_FUNC_END__;
1538 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1541 params = g_variant_new("(s)", mac_address);
1542 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1543 "RejectConnection", params, &error);
1545 ret = __net_wifidirect_gerror_to_enum(error);
1546 if (ret == WIFI_DIRECT_ERROR_NONE) {
1547 g_variant_get(reply, "(i)", &ret);
1548 g_variant_unref(reply);
1551 WDC_LOGD("%s() return : [%d]", __func__, ret);
1552 __WDC_LOG_FUNC_END__;
1557 int wifi_direct_disconnect_all(void)
1559 __WDC_LOG_FUNC_START__;
1561 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1563 GError *error = NULL;
1564 GVariant *reply = NULL;
1565 int ret = WIFI_DIRECT_ERROR_NONE;
1567 if (g_client_info.is_registered == false) {
1568 WDC_LOGE("Client is NOT registered");
1569 __WDC_LOG_FUNC_END__;
1570 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1573 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1574 "DisconnectAll", NULL, &error);
1576 ret = __net_wifidirect_gerror_to_enum(error);
1577 if (ret == WIFI_DIRECT_ERROR_NONE) {
1578 g_variant_get(reply, "(i)", &ret);
1579 g_variant_unref(reply);
1582 WDC_LOGD("%s() return : [%d]", __func__, ret);
1583 __WDC_LOG_FUNC_END__;
1588 int wifi_direct_disconnect(char *mac_address)
1590 __WDC_LOG_FUNC_START__;
1592 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1594 GVariant *params = NULL;
1595 GError *error = NULL;
1596 GVariant *reply = NULL;
1597 int ret = WIFI_DIRECT_ERROR_NONE;
1599 if (g_client_info.is_registered == false) {
1600 WDC_LOGE("Client is NOT registered");
1601 __WDC_LOG_FUNC_END__;
1602 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1606 WDC_LOGE("mac_addr is NULL");
1607 __WDC_LOG_FUNC_END__;
1608 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1611 params = g_variant_new("(s)", mac_address);
1612 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1613 "Disconnect", params, &error);
1615 ret = __net_wifidirect_gerror_to_enum(error);
1616 if (ret == WIFI_DIRECT_ERROR_NONE) {
1617 g_variant_get(reply, "(i)", &ret);
1618 g_variant_unref(reply);
1621 WDC_LOGD("%s() return : [%d]", __func__, ret);
1622 __WDC_LOG_FUNC_END__;
1626 int wifi_direct_accept_connection(char *mac_address)
1628 __WDC_LOG_FUNC_START__;
1630 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1632 GVariant *params = NULL;
1633 GError *error = NULL;
1634 GVariant *reply = NULL;
1635 int ret = WIFI_DIRECT_ERROR_NONE;
1637 if (g_client_info.is_registered == false) {
1638 WDC_LOGE("Client is NOT registered");
1639 __WDC_LOG_FUNC_END__;
1640 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1644 WDC_LOGE("mac_addr is NULL");
1645 __WDC_LOG_FUNC_END__;
1646 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1649 params = g_variant_new("(s)", mac_address);
1650 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1651 "AcceptConnection", params, &error);
1653 ret = __net_wifidirect_gerror_to_enum(error);
1654 if (ret == WIFI_DIRECT_ERROR_NONE) {
1655 g_variant_get(reply, "(i)", &ret);
1656 g_variant_unref(reply);
1659 WDC_LOGD("%s() return : [%d]", __func__, ret);
1660 __WDC_LOG_FUNC_END__;
1665 int wifi_direct_foreach_connected_peers(wifi_direct_connected_peer_cb cb,
1668 __WDC_LOG_FUNC_START__;
1670 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1672 GVariant *params = NULL;
1673 GError *error = NULL;
1674 GVariant *reply = NULL;
1675 GVariantIter *iter_peers = NULL;
1676 GVariantIter *iter_peer = NULL;
1677 GVariant *var = NULL;
1679 int ret = WIFI_DIRECT_ERROR_NONE;
1681 if (g_client_info.is_registered == false) {
1682 WDC_LOGE("Client is NOT registered");
1683 __WDC_LOG_FUNC_END__;
1684 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1688 WDC_LOGE("NULL Param [callback]!");
1689 __WDC_LOG_FUNC_END__;
1690 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1694 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1695 "GetConnectedPeers", params, &error);
1697 ret = __net_wifidirect_gerror_to_enum(error);
1698 if (ret != WIFI_DIRECT_ERROR_NONE)
1701 g_variant_get(reply, "(iaa{sv})", &ret, &iter_peers);
1702 if (ret != WIFI_DIRECT_ERROR_NONE) {
1703 __WDC_LOG_FUNC_END__;
1704 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1707 WDC_LOGD("wifi_direct_foreach_connected_peers() SUCCESS");
1709 while (g_variant_iter_loop(iter_peers, "a{sv}", &iter_peer)) {
1710 wifi_direct_connected_peer_info_s *peer_list = NULL;
1712 peer_list = (wifi_direct_connected_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_connected_peer_info_s));
1714 WDC_LOGE("Failed to allocate memory");
1718 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
1719 if (!g_strcmp0(key, "DeviceName")) {
1720 const char *device_name = NULL;
1722 g_variant_get(var, "&s", &device_name);
1723 peer_list->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
1725 } else if (!g_strcmp0(key, "DeviceAddress")) {
1726 unsigned char mac_address[MACADDR_LEN] = {0, };
1728 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
1729 peer_list->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
1730 if (peer_list->mac_address)
1731 g_snprintf(peer_list->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
1733 } else if (!g_strcmp0(key, "InterfaceAddress")) {
1734 unsigned char intf_address[MACADDR_LEN] = {0, };
1736 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
1737 peer_list->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
1738 if (peer_list->interface_address)
1739 g_snprintf(peer_list->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
1741 } else if (!g_strcmp0(key, "IPAddress")) {
1742 unsigned char ip_address[IPADDR_LEN] = {0, };
1744 wifi_direct_dbus_unpack_ay(ip_address, var, IPADDR_LEN);
1745 peer_list->ip_address = (char*) g_try_malloc0(IPSTR_LEN);
1746 if (peer_list->ip_address)
1747 g_snprintf(peer_list->ip_address, IPSTR_LEN, IPSTR, IP2STR(ip_address));
1749 } else if (!g_strcmp0(key, "Channel")) {
1750 peer_list->channel = g_variant_get_uint16(var);
1752 } else if (!g_strcmp0(key, "Category")) {
1753 peer_list->primary_device_type = g_variant_get_uint16(var);
1755 } else if (!g_strcmp0(key, "SubCategory")) {
1756 peer_list->secondary_device_type = g_variant_get_uint16(var);
1758 } else if (!g_strcmp0(key, "IsWfdDevice")) {
1759 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
1760 peer_list->is_miracast_device = g_variant_get_boolean(var);
1761 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
1762 } else if (!g_strcmp0(key, "IsP2P")) {
1763 peer_list->p2p_supported = g_variant_get_boolean(var);
1770 /* __wfd_client_print_connected_peer_info(peer_list, 1); */
1771 if (!cb(peer_list, user_data)) {
1772 g_variant_iter_free(iter_peer);
1777 g_variant_iter_free(iter_peers);
1778 g_variant_unref(reply);
1780 __WDC_LOG_FUNC_END__;
1781 return WIFI_DIRECT_ERROR_NONE;
1785 int wifi_direct_create_group(void)
1787 __WDC_LOG_FUNC_START__;
1789 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1791 GError *error = NULL;
1792 GVariant *reply = NULL;
1793 int ret = WIFI_DIRECT_ERROR_NONE;
1795 if (g_client_info.is_registered == false) {
1796 WDC_LOGE("Client is NOT registered");
1797 __WDC_LOG_FUNC_END__;
1798 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1801 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1802 "CreateGroup", NULL, &error);
1804 ret = __net_wifidirect_gerror_to_enum(error);
1805 if (ret == WIFI_DIRECT_ERROR_NONE) {
1806 g_variant_get(reply, "(i)", &ret);
1807 g_variant_unref(reply);
1810 WDC_LOGD("%s() return : [%d]", __func__, ret);
1811 __WDC_LOG_FUNC_END__;
1816 int wifi_direct_destroy_group(void)
1818 __WDC_LOG_FUNC_START__;
1820 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1822 GError *error = NULL;
1823 GVariant *reply = NULL;
1824 int ret = WIFI_DIRECT_ERROR_NONE;
1826 if (g_client_info.is_registered == false) {
1827 WDC_LOGE("Client is NOT registered");
1828 __WDC_LOG_FUNC_END__;
1829 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1832 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1833 "DestroyGroup", NULL, &error);
1835 ret = __net_wifidirect_gerror_to_enum(error);
1836 if (ret == WIFI_DIRECT_ERROR_NONE) {
1837 g_variant_get(reply, "(i)", &ret);
1838 g_variant_unref(reply);
1841 WDC_LOGD("%s() return : [%d]", __func__, ret);
1842 __WDC_LOG_FUNC_END__;
1847 int wifi_direct_is_group_owner(bool *owner)
1849 __WDC_LOG_FUNC_START__;
1851 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1853 GError* error = NULL;
1854 GVariant *reply = NULL;
1855 int ret = WIFI_DIRECT_ERROR_NONE;
1858 if (g_client_info.is_registered == false) {
1859 WDC_LOGE("Client is NOT registered");
1860 __WDC_LOG_FUNC_END__;
1861 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1865 WDC_LOGE("NULL Param [owner]!");
1866 __WDC_LOG_FUNC_END__;
1867 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1870 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1875 ret = __net_wifidirect_gerror_to_enum(error);
1876 if (ret != WIFI_DIRECT_ERROR_NONE)
1879 WDC_LOGD("%s() SUCCESS", __func__);
1880 g_variant_get(reply, "(b)", &val);
1882 g_variant_unref(reply);
1884 __WDC_LOG_FUNC_END__;
1885 return WIFI_DIRECT_ERROR_NONE;
1888 int wifi_direct_is_autonomous_group(bool *autonomous_group)
1890 __WDC_LOG_FUNC_START__;
1892 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1894 GError* error = NULL;
1895 GVariant *reply = NULL;
1896 int ret = WIFI_DIRECT_ERROR_NONE;
1899 if (g_client_info.is_registered == false) {
1900 WDC_LOGE("Client is NOT registered");
1901 __WDC_LOG_FUNC_END__;
1902 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1905 if (!autonomous_group) {
1906 WDC_LOGE("NULL Param [autonomous_group]!\n");
1907 __WDC_LOG_FUNC_END__;
1908 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1911 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1916 ret = __net_wifidirect_gerror_to_enum(error);
1917 if (ret != WIFI_DIRECT_ERROR_NONE)
1920 WDC_LOGD("%s() SUCCESS", __func__);
1921 g_variant_get(reply, "(b)", &val);
1922 *autonomous_group = val;
1923 g_variant_unref(reply);
1925 __WDC_LOG_FUNC_END__;
1926 return WIFI_DIRECT_ERROR_NONE;
1930 int wifi_direct_set_group_owner_intent(int intent)
1932 __WDC_LOG_FUNC_START__;
1934 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1936 GError* error = NULL;
1937 GVariant *reply = NULL;
1938 GVariant *params = NULL;
1939 int ret = WIFI_DIRECT_ERROR_NONE;
1941 if (g_client_info.is_registered == false) {
1942 WDC_LOGE("Client is NOT registered");
1943 __WDC_LOG_FUNC_END__;
1944 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1947 if (intent < 0 || intent > 15) {
1948 WDC_LOGE("Invalid Param : intent[%d]", intent);
1949 __WDC_LOG_FUNC_END__;
1950 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1953 params = g_variant_new("(i)", intent);
1954 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1959 ret = __net_wifidirect_gerror_to_enum(error);
1960 if (ret == WIFI_DIRECT_ERROR_NONE) {
1961 g_variant_get(reply, "(i)", &ret);
1962 g_variant_unref(reply);
1965 WDC_LOGD("%s() return : [%d]", __func__, ret);
1966 __WDC_LOG_FUNC_END__;
1970 int wifi_direct_get_group_owner_intent(int *intent)
1972 __WDC_LOG_FUNC_START__;
1974 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1976 GError* error = NULL;
1977 GVariant *reply = NULL;
1979 int ret = WIFI_DIRECT_ERROR_NONE;
1981 if (g_client_info.is_registered == false) {
1982 WDC_LOGE("Client is NOT registered");
1983 __WDC_LOG_FUNC_END__;
1984 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1988 WDC_LOGE("Invalid Parameter");
1989 __WDC_LOG_FUNC_END__;
1990 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1993 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1998 ret = __net_wifidirect_gerror_to_enum(error);
1999 if (ret != WIFI_DIRECT_ERROR_NONE)
2002 g_variant_get(reply, "(ii)", &ret, &val);
2004 g_variant_unref(reply);
2006 WDC_LOGD("Intent = [%d]", *intent);
2007 WDC_LOGD("%s() return : [%d]", __func__, ret);
2008 __WDC_LOG_FUNC_END__;
2012 int wifi_direct_set_max_clients(int max)
2014 __WDC_LOG_FUNC_START__;
2016 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2018 GError* error = NULL;
2019 GVariant *reply = NULL;
2020 GVariant *params = NULL;
2021 int ret = WIFI_DIRECT_ERROR_NONE;
2023 if (g_client_info.is_registered == false) {
2024 WDC_LOGE("Client is NOT registered");
2025 __WDC_LOG_FUNC_END__;
2026 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2028 WDC_LOGD("max client [%d]\n", max);
2030 params = g_variant_new("(i)", max);
2031 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2036 ret = __net_wifidirect_gerror_to_enum(error);
2037 if (ret == WIFI_DIRECT_ERROR_NONE) {
2038 g_variant_get(reply, "(i)", &ret);
2039 g_variant_unref(reply);
2042 WDC_LOGD("%s() return : [%d]", __func__, ret);
2043 __WDC_LOG_FUNC_END__;
2047 int wifi_direct_get_max_clients(int *max)
2049 __WDC_LOG_FUNC_START__;
2051 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2053 GError* error = NULL;
2054 GVariant *reply = NULL;
2056 int ret = WIFI_DIRECT_ERROR_NONE;
2058 if (g_client_info.is_registered == false) {
2059 WDC_LOGE("Client is NOT registered");
2060 __WDC_LOG_FUNC_END__;
2061 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2065 WDC_LOGE("Invalid Parameter");
2066 __WDC_LOG_FUNC_END__;
2067 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2070 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2075 ret = __net_wifidirect_gerror_to_enum(error);
2076 if (ret != WIFI_DIRECT_ERROR_NONE)
2079 g_variant_get(reply, "(ii)", &ret, &val);
2081 g_variant_unref(reply);
2083 WDC_LOGD("max_client = [%d]", *max);
2084 WDC_LOGD("%s() return : [%d]", __func__, ret);
2085 __WDC_LOG_FUNC_END__;
2086 return WIFI_DIRECT_ERROR_NONE;
2089 int wifi_direct_get_operating_channel(int *channel)
2091 __WDC_LOG_FUNC_START__;
2093 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2095 GError* error = NULL;
2096 GVariant *reply = NULL;
2098 int ret = WIFI_DIRECT_ERROR_NONE;
2100 if (g_client_info.is_registered == false) {
2101 WDC_LOGE("Client is NOT registered");
2102 __WDC_LOG_FUNC_END__;
2103 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2107 WDC_LOGE("NULL Param [channel]!\n");
2108 __WDC_LOG_FUNC_END__;
2109 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2112 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2113 "GetOperatingChannel",
2117 ret = __net_wifidirect_gerror_to_enum(error);
2118 if (ret != WIFI_DIRECT_ERROR_NONE)
2121 g_variant_get(reply, "(ii)", &ret, &val);
2123 g_variant_unref(reply);
2125 WDC_LOGD("channel = [%d]", *channel);
2126 WDC_LOGD("%s() return : [%d]", __func__, ret);
2127 __WDC_LOG_FUNC_END__;
2128 return WIFI_DIRECT_ERROR_NONE;
2131 int wifi_direct_activate_pushbutton(void)
2133 __WDC_LOG_FUNC_START__;
2135 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2137 GError* error = NULL;
2138 GVariant *reply = NULL;
2139 int ret = WIFI_DIRECT_ERROR_NONE;
2141 if (g_client_info.is_registered == false) {
2142 WDC_LOGE("Client is NOT registered");
2143 __WDC_LOG_FUNC_END__;
2144 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2147 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
2148 "ActivatePushButton",
2152 ret = __net_wifidirect_gerror_to_enum(error);
2153 if (ret == WIFI_DIRECT_ERROR_NONE) {
2154 g_variant_get(reply, "(i)", &ret);
2155 g_variant_unref(reply);
2158 WDC_LOGD("%s() return : [%d]", __func__, ret);
2159 __WDC_LOG_FUNC_END__;
2163 int wifi_direct_set_wps_pin(char *pin)
2165 __WDC_LOG_FUNC_START__;
2167 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2169 GError* error = NULL;
2170 GVariant *reply = NULL;
2171 GVariant *params = NULL;
2172 int ret = WIFI_DIRECT_ERROR_NONE;
2174 if (g_client_info.is_registered == false) {
2175 WDC_LOGE("Client is NOT registered");
2176 __WDC_LOG_FUNC_END__;
2177 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2181 WDC_LOGE("NULL Param [pin]!");
2182 __WDC_LOG_FUNC_END__;
2183 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2185 WDC_LOGE("pin = [%s]\n", pin);
2187 params = g_variant_new("(s)", pin);
2188 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2193 ret = __net_wifidirect_gerror_to_enum(error);
2194 if (ret == WIFI_DIRECT_ERROR_NONE) {
2195 g_variant_get(reply, "(i)", &ret);
2196 g_variant_unref(reply);
2199 WDC_LOGD("%s() return : [%d]", __func__, ret);
2200 __WDC_LOG_FUNC_END__;
2205 int wifi_direct_get_wps_pin(char **pin)
2207 __WDC_LOG_FUNC_START__;
2209 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2211 GError* error = NULL;
2212 GVariant *reply = NULL;
2213 const char *str = NULL;
2214 int ret = WIFI_DIRECT_ERROR_NONE;
2216 if (g_client_info.is_registered == false) {
2217 WDC_LOGE("Client is NOT registered");
2218 __WDC_LOG_FUNC_END__;
2219 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2223 WDC_LOGE("NULL Param [pin]!");
2224 __WDC_LOG_FUNC_END__;
2225 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2228 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2233 ret = __net_wifidirect_gerror_to_enum(error);
2234 if (ret != WIFI_DIRECT_ERROR_NONE)
2237 g_variant_get(reply, "(i&s)", &ret, &str);
2238 if (pin != NULL && str != NULL)
2239 *pin = g_strdup(str);
2240 g_variant_unref(reply);
2242 WDC_LOGD("%s() return : [%d]", __func__, ret);
2243 __WDC_LOG_FUNC_END__;
2247 int wifi_direct_get_supported_wps_mode(int *wps_mode)
2249 __WDC_LOG_FUNC_START__;
2251 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2253 GError* error = NULL;
2254 GVariant *reply = NULL;
2256 int ret = WIFI_DIRECT_ERROR_NONE;
2258 if (g_client_info.is_registered == false) {
2259 WDC_LOGE("Client is NOT registered");
2260 __WDC_LOG_FUNC_END__;
2261 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2265 WDC_LOGE("NULL Param [wps_mode]!");
2266 __WDC_LOG_FUNC_END__;
2267 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2270 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2271 "GetSupportedWpsMode",
2275 ret = __net_wifidirect_gerror_to_enum(error);
2276 if (ret != WIFI_DIRECT_ERROR_NONE)
2279 g_variant_get(reply, "(ii)", &ret, &mode);
2281 g_variant_unref(reply);
2283 WDC_LOGD("%s() return : [%d]", __func__, ret);
2284 __WDC_LOG_FUNC_END__;
2288 int wifi_direct_foreach_supported_wps_types(wifi_direct_supported_wps_type_cb cb, void* user_data)
2290 __WDC_LOG_FUNC_START__;
2292 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2294 GError* error = NULL;
2295 GVariant *reply = NULL;
2297 int ret = WIFI_DIRECT_ERROR_NONE;
2298 gboolean result = FALSE;
2300 if (g_client_info.is_registered == false) {
2301 WDC_LOGE("Client is NOT registered");
2302 __WDC_LOG_FUNC_END__;
2303 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2307 WDC_LOGE("NULL Param [callback]!");
2308 __WDC_LOG_FUNC_END__;
2309 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2312 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2313 "GetSupportedWpsMode",
2317 ret = __net_wifidirect_gerror_to_enum(error);
2318 if (ret != WIFI_DIRECT_ERROR_NONE)
2321 g_variant_get(reply, "(ii)", &ret, &wps_mode);
2322 g_variant_unref(reply);
2324 if (wps_mode & WIFI_DIRECT_WPS_TYPE_PBC)
2325 result = cb(WIFI_DIRECT_WPS_TYPE_PBC, user_data);
2326 if ((result == TRUE) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY))
2327 result = cb(WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY, user_data);
2328 if ((result == TRUE) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD))
2329 result = cb(WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD, user_data);
2331 WDC_LOGD("%s() return : [%d]", __func__, ret);
2332 __WDC_LOG_FUNC_END__;
2336 int wifi_direct_get_local_wps_type(wifi_direct_wps_type_e *type)
2338 __WDC_LOG_FUNC_START__;
2340 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2342 GError* error = NULL;
2343 GVariant *reply = NULL;
2345 int ret = WIFI_DIRECT_ERROR_NONE;
2347 if (g_client_info.is_registered == false) {
2348 WDC_LOGE("Client is NOT registered");
2349 __WDC_LOG_FUNC_END__;
2350 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2354 WDC_LOGE("NULL Param [type]!\n");
2355 __WDC_LOG_FUNC_END__;
2356 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2359 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2364 ret = __net_wifidirect_gerror_to_enum(error);
2365 if (ret != WIFI_DIRECT_ERROR_NONE)
2368 g_variant_get(reply, "(ii)", &ret, &mode);
2370 g_variant_unref(reply);
2372 WDC_LOGD("%s() return : [%d]", __func__, ret);
2373 __WDC_LOG_FUNC_END__;
2377 int wifi_direct_set_req_wps_type(wifi_direct_wps_type_e type)
2379 __WDC_LOG_FUNC_START__;
2381 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2383 GError* error = NULL;
2384 GVariant *reply = NULL;
2385 GVariant *params = NULL;
2386 int ret = WIFI_DIRECT_ERROR_NONE;
2388 if (g_client_info.is_registered == false) {
2389 WDC_LOGE("Client is NOT registered");
2390 __WDC_LOG_FUNC_END__;
2391 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2394 if (type == WIFI_DIRECT_WPS_TYPE_PBC ||
2395 type == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY ||
2396 type == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) {
2397 WDC_LOGD("Param wps_mode [%d]", type);
2399 WDC_LOGE("Invalid Param [wps_mode]!");
2400 __WDC_LOG_FUNC_END__;
2401 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2404 params = g_variant_new("(i)", type);
2405 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2410 ret = __net_wifidirect_gerror_to_enum(error);
2411 if (ret == WIFI_DIRECT_ERROR_NONE) {
2412 g_variant_get(reply, "(i)", &ret);
2413 g_variant_unref(reply);
2416 WDC_LOGD("%s() return : [%d]", __func__, ret);
2417 __WDC_LOG_FUNC_END__;
2421 int wifi_direct_get_req_wps_type(wifi_direct_wps_type_e *type)
2423 __WDC_LOG_FUNC_START__;
2425 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2427 GError* error = NULL;
2428 GVariant *reply = NULL;
2432 if (g_client_info.is_registered == false) {
2433 WDC_LOGE("Client is NOT registered");
2434 __WDC_LOG_FUNC_END__;
2435 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2439 WDC_LOGE("NULL Param [type]!\n");
2440 __WDC_LOG_FUNC_END__;
2441 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2444 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2449 ret = __net_wifidirect_gerror_to_enum(error);
2450 if (ret != WIFI_DIRECT_ERROR_NONE)
2453 g_variant_get(reply, "(ii)", &ret, &mode);
2455 g_variant_unref(reply);
2457 WDC_LOGD("%s() return : [%d]", __func__, ret);
2458 __WDC_LOG_FUNC_END__;
2462 int wifi_direct_get_ssid(char **ssid)
2464 __WDC_LOG_FUNC_START__;
2466 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2468 GError* error = NULL;
2469 GVariant *reply = NULL;
2470 const char *str = NULL;
2471 int ret = WIFI_DIRECT_ERROR_NONE;
2473 if (g_client_info.is_registered == false) {
2474 WDC_LOGE("Client is NOT registered");
2475 __WDC_LOG_FUNC_END__;
2476 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2480 WDC_LOGE("Invalid Parameter");
2481 __WDC_LOG_FUNC_END__;
2482 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2485 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2490 ret = __net_wifidirect_gerror_to_enum(error);
2491 if (ret != WIFI_DIRECT_ERROR_NONE)
2494 g_variant_get(reply, "(i&s)", &ret, &str);
2495 *ssid = g_strdup(str);
2496 g_variant_unref(reply);
2498 WDC_LOGD("%s() return : [%d]", __func__, ret);
2499 __WDC_LOG_FUNC_END__;
2503 int wifi_direct_get_device_name(char **device_name)
2505 __WDC_LOG_FUNC_START__;
2507 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2509 GError* error = NULL;
2510 GVariant *reply = NULL;
2511 const char *str = NULL;
2512 int ret = WIFI_DIRECT_ERROR_NONE;
2514 if (g_client_info.is_registered == false) {
2515 WDC_LOGE("Client is NOT registered");
2516 __WDC_LOG_FUNC_END__;
2517 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2521 WDC_LOGE("Invalid Parameter");
2522 __WDC_LOG_FUNC_END__;
2523 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2526 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2531 ret = __net_wifidirect_gerror_to_enum(error);
2532 if (ret != WIFI_DIRECT_ERROR_NONE)
2535 g_variant_get(reply, "(i&s)", &ret, &str);
2536 *device_name = g_strdup(str);
2537 g_variant_unref(reply);
2539 WDC_LOGD("%s() return : [%d]", __func__, ret);
2540 __WDC_LOG_FUNC_END__;
2544 int wifi_direct_set_device_name(const char *device_name)
2546 __WDC_LOG_FUNC_START__;
2548 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2550 GError* error = NULL;
2551 GVariant *reply = NULL;
2552 GVariant *params = NULL;
2553 int ret = WIFI_DIRECT_ERROR_NONE;
2555 if (g_client_info.is_registered == false) {
2556 WDC_LOGE("Client is NOT registered");
2557 __WDC_LOG_FUNC_END__;
2558 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2562 WDC_LOGE("NULL Param [device_name]!");
2563 __WDC_LOG_FUNC_END__;
2564 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2566 WDC_LOGE("device_name = [%s]", device_name);
2568 params = g_variant_new("(s)", device_name);
2569 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2574 ret = __net_wifidirect_gerror_to_enum(error);
2575 if (ret == WIFI_DIRECT_ERROR_NONE) {
2576 g_variant_get(reply, "(i)", &ret);
2577 g_variant_unref(reply);
2580 WDC_LOGD("%s() return : [%d]", __func__, ret);
2581 __WDC_LOG_FUNC_END__;
2586 int wifi_direct_get_network_interface_name(char **name)
2588 __WDC_LOG_FUNC_START__;
2590 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2592 wifi_direct_state_e status = 0;
2593 char *get_str = NULL;
2594 GError* error = NULL;
2595 GVariant *reply = NULL;
2596 int ret = WIFI_DIRECT_ERROR_NONE;
2598 if (g_client_info.is_registered == false) {
2599 WDC_LOGE("Client is NOT registered");
2600 __WDC_LOG_FUNC_END__;
2601 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2605 WDC_LOGE("NULL Param [name]!\n");
2606 __WDC_LOG_FUNC_END__;
2607 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2610 ret = wifi_direct_get_state(&status);
2611 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]\n", status, ret);
2613 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2614 WDC_LOGE("Device is not connected!\n");
2615 __WDC_LOG_FUNC_END__;
2616 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2619 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2624 ret = __net_wifidirect_gerror_to_enum(error);
2625 if (ret != WIFI_DIRECT_ERROR_NONE)
2628 g_variant_get(reply, "(i&s)", ret, &get_str);
2629 *name = g_strdup(get_str);
2630 g_variant_unref(reply);
2632 WDC_LOGD("Interface Name = [%s]", *name);
2633 WDC_LOGD("%s() return : [%d]", __func__, ret);
2635 __WDC_LOG_FUNC_END__;
2636 return WIFI_DIRECT_ERROR_NONE;
2639 int wifi_direct_get_ip_address(char **ip_address)
2641 __WDC_LOG_FUNC_START__;
2643 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2645 GError* error = NULL;
2646 GVariant *reply = NULL;
2647 const char *str = NULL;
2648 int ret = WIFI_DIRECT_ERROR_NONE;
2650 if (g_client_info.is_registered == false) {
2651 WDC_LOGE("Client is NOT registered");
2652 __WDC_LOG_FUNC_END__;
2653 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2657 WDC_LOGE("NULL Param [ip_address]!\n");
2658 __WDC_LOG_FUNC_END__;
2659 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2662 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2667 ret = __net_wifidirect_gerror_to_enum(error);
2668 if (ret != WIFI_DIRECT_ERROR_NONE)
2671 g_variant_get(reply, "(i&s)", ret, &str);
2672 *ip_address = g_strdup(str);
2673 g_variant_unref(reply);
2675 WDC_LOGD("IP address = [%s]", *ip_address);
2676 WDC_LOGD("%s() return : [%d]", __func__, ret);
2677 __WDC_LOG_FUNC_END__;
2681 int wifi_direct_get_subnet_mask(char **subnet_mask)
2683 __WDC_LOG_FUNC_START__;
2685 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2687 wifi_direct_state_e status = 0;
2688 GError* error = NULL;
2689 GVariant *reply = NULL;
2690 char *get_str = NULL;
2691 int ret = WIFI_DIRECT_ERROR_NONE;
2693 if (g_client_info.is_registered == false) {
2694 WDC_LOGE("Client is NOT registered");
2695 __WDC_LOG_FUNC_END__;
2696 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2700 WDC_LOGE("NULL Param [subnet_mask]!");
2701 __WDC_LOG_FUNC_END__;
2702 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2705 ret = wifi_direct_get_state(&status);
2706 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]", status, ret);
2707 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2708 WDC_LOGE("Device is not connected!");
2709 __WDC_LOG_FUNC_END__;
2710 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2713 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2718 ret = __net_wifidirect_gerror_to_enum(error);
2719 if (ret != WIFI_DIRECT_ERROR_NONE)
2722 g_variant_get(reply, "(i&s)", ret, &get_str);
2723 *subnet_mask = g_strdup(get_str);
2724 g_variant_unref(reply);
2726 WDC_LOGD("Subnet Mask = [%s]", *subnet_mask);
2727 WDC_LOGD("%s() return : [%d]", __func__, ret);
2729 __WDC_LOG_FUNC_END__;
2730 return WIFI_DIRECT_ERROR_NONE;
2733 int wifi_direct_get_gateway_address(char **gateway_address)
2735 __WDC_LOG_FUNC_START__;
2737 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2739 wifi_direct_state_e status = 0;
2740 GError* error = NULL;
2741 GVariant *reply = NULL;
2742 char *get_str = NULL;
2743 int ret = WIFI_DIRECT_ERROR_NONE;
2745 if (g_client_info.is_registered == false) {
2746 WDC_LOGE("Client is NOT registered");
2747 __WDC_LOG_FUNC_END__;
2748 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2751 if (!gateway_address) {
2752 WDC_LOGE("NULL Param [gateway_address]!");
2753 __WDC_LOG_FUNC_END__;
2754 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2757 ret = wifi_direct_get_state(&status);
2758 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]", status, ret);
2759 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2760 WDC_LOGE("Device is not connected!");
2761 __WDC_LOG_FUNC_END__;
2762 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2765 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2770 ret = __net_wifidirect_gerror_to_enum(error);
2771 if (ret != WIFI_DIRECT_ERROR_NONE)
2774 g_variant_get(reply, "(i&s)", ret, &get_str);
2775 *gateway_address = g_strdup(get_str);
2776 g_variant_unref(reply);
2778 WDC_LOGD("Gateway Address = [%s]", *gateway_address);
2779 WDC_LOGD("%s() return : [%d]", __func__, ret);
2781 __WDC_LOG_FUNC_END__;
2782 return WIFI_DIRECT_ERROR_NONE;
2786 int wifi_direct_get_mac_address(char **mac_address)
2788 __WDC_LOG_FUNC_START__;
2790 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2792 GError* error = NULL;
2793 GVariant *reply = NULL;
2794 const char *str = NULL;
2795 int ret = WIFI_DIRECT_ERROR_NONE;
2797 if (g_client_info.is_registered == false) {
2798 WDC_LOGE("Client is NOT registered");
2799 __WDC_LOG_FUNC_END__;
2800 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2804 WDC_LOGE("NULL Param [mac_address]!");
2805 __WDC_LOG_FUNC_END__;
2806 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2809 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2814 ret = __net_wifidirect_gerror_to_enum(error);
2815 if (ret != WIFI_DIRECT_ERROR_NONE)
2818 g_variant_get(reply, "(i&s)", &ret, &str);
2819 *mac_address = g_strdup(str);
2820 g_variant_unref(reply);
2822 WDC_SECLOGD("MAC address = [%s]", *mac_address);
2823 WDC_LOGD("%s() return : [%d]", __func__, ret);
2824 __WDC_LOG_FUNC_END__;
2828 int wifi_direct_get_state(wifi_direct_state_e *state)
2830 __WDC_LOG_FUNC_START__;
2832 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2835 int ret = WIFI_DIRECT_ERROR_NONE;
2838 WDC_LOGE("Invalid Parameter");
2839 __WDC_LOG_FUNC_END__;
2840 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2843 ret = vconf_get_int(VCONFKEY_WIFI_DIRECT_STATE, &val);
2845 WDC_LOGE("Failed to get vconf value [%s]\n", VCONFKEY_WIFI_DIRECT_STATE);
2846 __WDC_LOG_FUNC_END__;
2847 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2850 if (val == VCONFKEY_WIFI_DIRECT_ACTIVATED) {
2851 *state = WIFI_DIRECT_STATE_ACTIVATED;
2852 } else if (val == VCONFKEY_WIFI_DIRECT_DEACTIVATED) {
2853 *state = WIFI_DIRECT_STATE_DEACTIVATED;
2854 } else if (val == VCONFKEY_WIFI_DIRECT_CONNECTED) {
2855 *state = WIFI_DIRECT_STATE_CONNECTED;
2856 } else if (val == VCONFKEY_WIFI_DIRECT_GROUP_OWNER) {
2857 *state = WIFI_DIRECT_STATE_CONNECTED;
2858 } else if (val == VCONFKEY_WIFI_DIRECT_DISCOVERING) {
2859 *state = WIFI_DIRECT_STATE_DISCOVERING;
2861 WDC_LOGE("This state cannot be set as wifi_direct vconf state[%d]", val);
2862 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2865 WDC_LOGD("State = [%d]", *state);
2866 WDC_LOGD("%s() return : [%d]", __func__, ret);
2867 __WDC_LOG_FUNC_END__;
2871 int wifi_direct_is_discoverable(bool* discoverable)
2873 __WDC_LOG_FUNC_START__;
2875 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2877 GError* error = NULL;
2878 GVariant *reply = NULL;
2879 int ret = WIFI_DIRECT_ERROR_NONE;
2881 if (g_client_info.is_registered == false) {
2882 WDC_LOGE("Client is NOT registered");
2883 __WDC_LOG_FUNC_END__;
2884 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2887 if (!discoverable) {
2888 WDC_LOGE("Invalid Parameter");
2889 __WDC_LOG_FUNC_END__;
2890 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2893 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
2894 "IsDiscoverable", NULL, &error);
2896 ret = __net_wifidirect_gerror_to_enum(error);
2897 if (ret != WIFI_DIRECT_ERROR_NONE)
2900 g_variant_get(reply, "(b)", discoverable);
2901 WDC_LOGD("Discoverable = [%s]", *discoverable ? "Yes" : "No");
2903 WDC_LOGD("%s() SUCCESS", __func__);
2904 g_variant_unref(reply);
2906 __WDC_LOG_FUNC_END__;
2907 return WIFI_DIRECT_ERROR_NONE;
2910 int wifi_direct_is_listening_only(bool* listen_only)
2912 __WDC_LOG_FUNC_START__;
2914 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2916 GError* error = NULL;
2917 GVariant *reply = NULL;
2918 int ret = WIFI_DIRECT_ERROR_NONE;
2920 if (g_client_info.is_registered == false) {
2921 WDC_LOGE("Client is NOT registered");
2922 __WDC_LOG_FUNC_END__;
2923 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2927 WDC_LOGE("Invalid Parameter");
2928 __WDC_LOG_FUNC_END__;
2929 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2932 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
2933 "IsListeningOnly", NULL, &error);
2935 ret = __net_wifidirect_gerror_to_enum(error);
2936 if (ret != WIFI_DIRECT_ERROR_NONE)
2939 g_variant_get(reply, "(b)", listen_only);
2941 WDC_LOGD("Is listen only = [%s]", *listen_only ? "Yes" : "No");
2942 WDC_LOGD("%s() SUCCESS", __func__);
2943 g_variant_unref(reply);
2945 __WDC_LOG_FUNC_END__;
2946 return WIFI_DIRECT_ERROR_NONE;
2950 int wifi_direct_get_primary_device_type(wifi_direct_primary_device_type_e* type)
2952 __WDC_LOG_FUNC_START__;
2954 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2957 WDC_LOGE("NULL Param [type]!");
2958 __WDC_LOG_FUNC_END__;
2959 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2962 if (g_client_info.is_registered == false) {
2963 WDC_LOGE("Client is NOT registered");
2964 __WDC_LOG_FUNC_END__;
2965 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2969 WDC_LOGD("Current primary_dev_type [%d]", WIFI_DIRECT_PRIMARY_DEVICE_TYPE_DISPLAY);
2970 *type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_DISPLAY;
2971 #else /* TIZEN_TV */
2972 WDC_LOGD("Current primary_dev_type [%d]", WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE);
2973 *type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE;
2974 #endif /* TIZEN_TV */
2976 __WDC_LOG_FUNC_END__;
2977 return WIFI_DIRECT_ERROR_NONE;
2980 int wifi_direct_get_secondary_device_type(wifi_direct_secondary_device_type_e* type)
2982 __WDC_LOG_FUNC_START__;
2984 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2986 if (g_client_info.is_registered == false) {
2987 WDC_LOGE("Client is NOT registered");
2988 __WDC_LOG_FUNC_END__;
2989 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2993 WDC_LOGE("NULL Param [type]!");
2994 __WDC_LOG_FUNC_END__;
2995 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2999 WDC_LOGD("Current second_dev_type [%d]", WIFI_DIRECT_SECONDARY_DEVICE_TYPE_DISPLAY_TV);
3000 *type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_DISPLAY_TV;
3001 #else /* TIZEN_TV */
3002 WDC_LOGD("Current second_dev_type [%d]", WIFI_DIRECT_SECONDARY_DEVICE_TYPE_TELEPHONE_SMARTPHONE_DUAL);
3003 *type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_TELEPHONE_SMARTPHONE_DUAL; /* smart phone dual mode (wifi and cellular) */
3004 #endif /* TIZEN_TV */
3006 __WDC_LOG_FUNC_END__;
3007 return WIFI_DIRECT_ERROR_NONE;
3010 int wifi_direct_set_autoconnection_mode(bool mode)
3012 __WDC_LOG_FUNC_START__;
3014 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3016 GError* error = NULL;
3017 GVariant *reply = NULL;
3018 GVariant *params = NULL;
3019 int ret = WIFI_DIRECT_ERROR_NONE;
3021 if (g_client_info.is_registered == false) {
3022 WDC_LOGE("Client is NOT registered");
3023 __WDC_LOG_FUNC_END__;
3024 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3027 params = g_variant_new("(b)", mode);
3028 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
3029 "SetAutoConnectionMode",
3033 ret = __net_wifidirect_gerror_to_enum(error);
3034 if (ret == WIFI_DIRECT_ERROR_NONE) {
3035 g_variant_get(reply, "(i)", &ret);
3036 g_variant_unref(reply);
3039 WDC_LOGD("%s() return : [%d]", __func__, ret);
3040 __WDC_LOG_FUNC_END__;
3044 int wifi_direct_is_autoconnection_mode(bool *mode)
3046 __WDC_LOG_FUNC_START__;
3048 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3050 GError* error = NULL;
3051 GVariant *reply = NULL;
3053 int ret = WIFI_DIRECT_ERROR_NONE;
3055 if (g_client_info.is_registered == false) {
3056 WDC_LOGE("Client is NOT registered");
3057 __WDC_LOG_FUNC_END__;
3058 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3062 WDC_LOGE("NULL Param [mode]!");
3063 __WDC_LOG_FUNC_END__;
3064 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3067 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
3068 "IsAutoConnectionMode",
3072 ret = __net_wifidirect_gerror_to_enum(error);
3073 if (ret != WIFI_DIRECT_ERROR_NONE)
3076 g_variant_get(reply, "(ib)", &ret, &val);
3078 g_variant_unref(reply);
3080 WDC_LOGD("%s() return : [%d]", __func__, ret);
3081 __WDC_LOG_FUNC_END__;
3086 int wifi_direct_set_persistent_group_enabled(bool enabled)
3088 __WDC_LOG_FUNC_START__;
3090 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3092 GError* error = NULL;
3093 GVariant *reply = NULL;
3094 GVariant *params = NULL;
3095 int ret = WIFI_DIRECT_ERROR_NONE;
3097 if (g_client_info.is_registered == false) {
3098 WDC_LOGE("Client is NOT registered");
3099 __WDC_LOG_FUNC_END__;
3100 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3103 params = g_variant_new("(b)", enabled);
3104 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3105 "SetPersistentGroupEnabled",
3109 ret = __net_wifidirect_gerror_to_enum(error);
3110 if (ret == WIFI_DIRECT_ERROR_NONE) {
3111 g_variant_get(reply, "(i)", &ret);
3112 g_variant_unref(reply);
3115 WDC_LOGD("%s() return : [%d]", __func__, ret);
3117 __WDC_LOG_FUNC_END__;
3118 return WIFI_DIRECT_ERROR_NONE;
3122 int wifi_direct_is_persistent_group_enabled(bool *enabled)
3124 __WDC_LOG_FUNC_START__;
3126 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3128 GError* error = NULL;
3129 GVariant *reply = NULL;
3130 int ret = WIFI_DIRECT_ERROR_NONE;
3133 if (g_client_info.is_registered == false) {
3134 WDC_LOGE("Client is NOT registered");
3135 __WDC_LOG_FUNC_END__;
3136 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3140 WDC_LOGE("NULL Param [enabled]!");
3141 __WDC_LOG_FUNC_END__;
3142 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3145 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3146 "IsPersistentGroupEnabled",
3150 ret = __net_wifidirect_gerror_to_enum(error);
3151 if (ret != WIFI_DIRECT_ERROR_NONE)
3154 WDC_LOGD("%s() SUCCESS", __func__);
3155 g_variant_get(reply, "(b)", &val);
3157 g_variant_unref(reply);
3159 __WDC_LOG_FUNC_END__;
3160 return WIFI_DIRECT_ERROR_NONE;
3163 int wifi_direct_foreach_persistent_groups(wifi_direct_persistent_group_cb cb,
3166 __WDC_LOG_FUNC_START__;
3168 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3170 GVariant *params = NULL;
3171 GError *error = NULL;
3172 GVariant *reply = NULL;
3173 GVariantIter *iter_groups = NULL;
3174 GVariantIter *iter_group = NULL;
3175 GVariant *var = NULL;
3177 int ret = WIFI_DIRECT_ERROR_NONE;
3179 if (g_client_info.is_registered == false) {
3180 WDC_LOGE("Client is NOT registered");
3181 __WDC_LOG_FUNC_END__;
3182 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3186 WDC_LOGE("NULL Param [callback]!");
3187 __WDC_LOG_FUNC_END__;
3188 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3191 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3192 "GetPersistentGroups", params, &error);
3194 ret = __net_wifidirect_gerror_to_enum(error);
3195 if (ret != WIFI_DIRECT_ERROR_NONE)
3198 g_variant_get(reply, "(iaa{sv})", &ret, &iter_groups);
3199 if (ret != WIFI_DIRECT_ERROR_NONE) {
3200 __WDC_LOG_FUNC_END__;
3201 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3204 WDC_LOGD("wifi_direct_foreach_persistent_groups() SUCCESS");
3206 while (g_variant_iter_loop(iter_groups, "a{sv}", &iter_group)) {
3207 const char *ssid = NULL;
3208 char *go_mac_address = NULL;
3210 while (g_variant_iter_loop(iter_group, "{sv}", &key, &var)) {
3211 if (!g_strcmp0(key, "SSID")) {
3212 g_variant_get(var, "&s", &ssid);
3214 } else if (!g_strcmp0(key, "GOMacAddress")) {
3215 unsigned char mac_address[MACADDR_LEN] = {0, };
3217 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
3218 go_mac_address = (char*) g_try_malloc0(MACSTR_LEN);
3220 g_snprintf(go_mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
3227 ret = cb(go_mac_address, ssid, user_data);
3228 g_free(go_mac_address);
3229 go_mac_address = NULL;
3231 g_variant_iter_free(iter_group);
3236 g_variant_iter_free(iter_groups);
3237 __WDC_LOG_FUNC_END__;
3238 return WIFI_DIRECT_ERROR_NONE;
3242 int wifi_direct_remove_persistent_group(char *mac_address, const char *ssid)
3244 __WDC_LOG_FUNC_START__;
3246 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3248 GError* error = NULL;
3249 GVariant *reply = NULL;
3250 GVariant *params = NULL;
3251 int ret = WIFI_DIRECT_ERROR_NONE;
3253 if (g_client_info.is_registered == false) {
3254 WDC_LOGE("Client is NOT registered");
3255 __WDC_LOG_FUNC_END__;
3256 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3259 if (!mac_address || !ssid) {
3260 WDC_LOGE("NULL Param");
3261 __WDC_LOG_FUNC_END__;
3262 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3265 params = g_variant_new("(ss)", mac_address, ssid);
3266 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3267 "RemovePersistentGroup",
3271 ret = __net_wifidirect_gerror_to_enum(error);
3272 if (ret == WIFI_DIRECT_ERROR_NONE) {
3273 g_variant_get(reply, "(i)", &ret);
3274 g_variant_unref(reply);
3277 WDC_LOGD("%s() return : [%d]", __func__, ret);
3279 __WDC_LOG_FUNC_END__;
3280 return WIFI_DIRECT_ERROR_NONE;
3284 int wifi_direct_start_service_discovery(char *mac_address,
3285 wifi_direct_service_type_e type)
3287 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3288 __WDC_LOG_FUNC_START__;
3290 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3294 GError* error = NULL;
3295 GVariant *reply = NULL;
3296 GVariant *params = NULL;
3297 int ret = WIFI_DIRECT_ERROR_NONE;
3299 if (g_client_info.is_registered == false) {
3300 WDC_LOGE("Client is NOT registered.");
3301 __WDC_LOG_FUNC_END__;
3302 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3305 if (type >= WIFI_DIRECT_SERVICE_TYPE_ALL &&
3306 type <= WIFI_DIRECT_SERVICE_TYPE_CONTACT_INFO) {
3307 WDC_LOGD("Param service_type [%d]", type);
3309 WDC_LOGE("Invalid Param [type]!");
3310 __WDC_LOG_FUNC_END__;
3311 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3315 params = g_variant_new("(is)", type, mac_address);
3317 params = g_variant_new("(is)", type, "00:00:00:00:00:00");
3319 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3324 ret = __net_wifidirect_gerror_to_enum(error);
3325 if (ret == WIFI_DIRECT_ERROR_NONE) {
3326 g_variant_get(reply, "(i)", &ret);
3327 g_variant_unref(reply);
3330 WDC_LOGD("%s() return : [%d]", __func__, ret);
3331 __WDC_LOG_FUNC_END__;
3334 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3335 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3336 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3340 int wifi_direct_cancel_service_discovery(char *mac_address,
3341 wifi_direct_service_type_e type)
3343 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3344 __WDC_LOG_FUNC_START__;
3346 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3348 GError* error = NULL;
3349 GVariant *reply = NULL;
3350 GVariant *params = NULL;
3351 int ret = WIFI_DIRECT_ERROR_NONE;
3353 if (g_client_info.is_registered == false) {
3354 WDC_LOGE("Client is NOT registered.");
3355 __WDC_LOG_FUNC_END__;
3356 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3359 if (type >= WIFI_DIRECT_SERVICE_TYPE_ALL &&
3360 type <= WIFI_DIRECT_SERVICE_TYPE_CONTACT_INFO) {
3361 WDC_LOGD("Param service_type [%d]", type);
3363 WDC_LOGE("Invalid Param [type]!");
3364 __WDC_LOG_FUNC_END__;
3365 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3369 params = g_variant_new("(is)", type, mac_address);
3371 params = g_variant_new("(is)", type, "00:00:00:00:00:00");
3373 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3378 ret = __net_wifidirect_gerror_to_enum(error);
3379 if (ret == WIFI_DIRECT_ERROR_NONE) {
3380 g_variant_get(reply, "(i)", &ret);
3381 g_variant_unref(reply);
3384 WDC_LOGD("%s() return : [%d]", __func__, ret);
3385 __WDC_LOG_FUNC_END__;
3388 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3389 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3390 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3393 int wifi_direct_register_service(wifi_direct_service_type_e type, char *info1, char *info2, unsigned int *service_id)
3395 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3396 __WDC_LOG_FUNC_START__;
3398 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3400 GError* error = NULL;
3401 GVariant *reply = NULL;
3402 GVariant *params = NULL;
3404 int ret = WIFI_DIRECT_ERROR_NONE;
3407 if (g_client_info.is_registered == false) {
3408 WDC_LOGE("Client is NOT registered.");
3409 __WDC_LOG_FUNC_END__;
3410 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3413 if (!info1 || !info2) {
3414 WDC_LOGE("info1 or info2 is NULL");
3415 __WDC_LOG_FUNC_END__;
3416 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3419 if (type < WIFI_DIRECT_SERVICE_TYPE_ALL ||
3420 type > WIFI_DIRECT_SERVICE_TYPE_VENDOR) {
3421 WDC_LOGE("Invalid Param [type]!");
3422 __WDC_LOG_FUNC_END__;
3423 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3427 WDC_LOGE("Invalid Param [service_id]!");
3428 __WDC_LOG_FUNC_END__;
3429 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3432 WDC_LOGD("Service type [%d]", type);
3434 len = strlen(info1) + strlen(info2) + 2;
3435 WDC_LOGD("info [%s|%s], len [%d]", info1, info2, len);
3437 buf = g_try_malloc0(len);
3439 WDC_LOGE("Failed to allocate memory for buf");
3440 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
3443 g_snprintf(buf, len, "%s|%s", info1, info2);
3445 params = g_variant_new("(is)", type, buf);
3446 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3451 ret = __net_wifidirect_gerror_to_enum(error);
3452 if (ret != WIFI_DIRECT_ERROR_NONE) {
3457 g_variant_get(reply, "(ii)", &ret, service_id);
3458 g_variant_unref(reply);
3461 WDC_LOGD("%s() return : [%d]", __func__, ret);
3462 __WDC_LOG_FUNC_END__;
3465 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3466 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3467 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3470 int wifi_direct_deregister_service(unsigned int service_id)
3472 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3473 __WDC_LOG_FUNC_START__;
3475 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3477 GError* error = NULL;
3478 GVariant *reply = NULL;
3479 GVariant *params = NULL;
3480 int ret = WIFI_DIRECT_ERROR_NONE;
3482 if (g_client_info.is_registered == false) {
3483 WDC_LOGE("Client is NOT registered.");
3484 __WDC_LOG_FUNC_END__;
3485 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3488 params = g_variant_new("(i)", service_id);
3489 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3494 ret = __net_wifidirect_gerror_to_enum(error);
3495 if (ret == WIFI_DIRECT_ERROR_NONE) {
3496 g_variant_get(reply, "(i)", &ret);
3497 g_variant_unref(reply);
3500 WDC_LOGD("%s() return : [%d]", __func__, ret);
3501 __WDC_LOG_FUNC_END__;
3504 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3505 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3506 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3509 int wifi_direct_init_miracast(bool enable)
3511 __WDC_LOG_FUNC_START__;
3512 int ret = WIFI_DIRECT_ERROR_NONE;
3515 ret = wifi_direct_init_display();
3517 ret = wifi_direct_deinit_display();
3519 __WDC_LOG_FUNC_END__;
3523 int wifi_direct_get_peer_info(char* mac_address, wifi_direct_discovered_peer_info_s** peer_info)
3525 __WDC_LOG_FUNC_START__;
3527 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3529 GVariant *params = NULL;
3530 GError *error = NULL;
3531 GVariant *reply = NULL;
3532 GVariantIter *iter_peer = NULL;
3533 GVariant *var = NULL;
3535 int ret = WIFI_DIRECT_ERROR_NONE;
3537 if (g_client_info.is_registered == false) {
3538 WDC_LOGE("Client is NOT registered");
3539 __WDC_LOG_FUNC_END__;
3540 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3544 WDC_LOGE("mac_addr is NULL");
3545 __WDC_LOG_FUNC_END__;
3546 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3550 WDC_LOGE("peer_info is NULL");
3551 __WDC_LOG_FUNC_END__;
3552 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3555 params = g_variant_new("(s)", mac_address);
3556 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
3557 "GetPeerInfo", params, &error);
3559 ret = __net_wifidirect_gerror_to_enum(error);
3560 if (ret != WIFI_DIRECT_ERROR_NONE)
3563 g_variant_get(reply, "(ia{sv})", &ret, &iter_peer);
3564 if (ret != WIFI_DIRECT_ERROR_NONE) {
3565 __WDC_LOG_FUNC_END__;
3566 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3569 WDC_LOGD("wifi_direct_get_peer() SUCCESS");
3571 wifi_direct_discovered_peer_info_s *peer = NULL;
3573 peer = (wifi_direct_discovered_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_discovered_peer_info_s));
3575 WDC_LOGE("Failed to allocate memory");
3576 __WDC_LOG_FUNC_END__;
3577 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3580 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
3581 if (!g_strcmp0(key, "DeviceName")) {
3582 const char *device_name = NULL;
3584 g_variant_get(var, "&s", &device_name);
3585 peer->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
3587 } else if (!g_strcmp0(key, "DeviceAddress")) {
3588 unsigned char l_mac_address[MACADDR_LEN] = {0, };
3590 wifi_direct_dbus_unpack_ay(l_mac_address, var, MACADDR_LEN);
3591 peer->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
3592 if (peer->mac_address)
3593 g_snprintf(peer->mac_address, MACSTR_LEN, MACSTR, MAC2STR(l_mac_address));
3595 } else if (!g_strcmp0(key, "InterfaceAddress")) {
3596 unsigned char intf_address[MACADDR_LEN] = {0, };
3598 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
3599 peer->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
3600 if (peer->interface_address)
3601 g_snprintf(peer->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
3603 } else if (!g_strcmp0(key, "Channel")) {
3604 peer->channel = g_variant_get_uint16(var);
3606 } else if (!g_strcmp0(key, "IsGroupOwner")) {
3607 peer->is_group_owner = g_variant_get_boolean(var);
3609 } else if (!g_strcmp0(key, "IsPersistentGO")) {
3610 peer->is_persistent_group_owner = g_variant_get_boolean(var);
3612 } else if (!g_strcmp0(key, "IsConnected")) {
3613 peer->is_connected = g_variant_get_boolean(var);
3615 } else if (!g_strcmp0(key, "Category")) {
3616 peer->primary_device_type = g_variant_get_uint16(var);
3618 } else if (!g_strcmp0(key, "SubCategory")) {
3619 peer->secondary_device_type = g_variant_get_uint16(var);
3621 } else if (!g_strcmp0(key, "IsWfdDevice")) {
3622 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3623 peer->is_miracast_device = g_variant_get_boolean(var);
3624 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3632 g_variant_unref(reply);
3634 __WDC_LOG_FUNC_END__;
3635 return WIFI_DIRECT_ERROR_NONE;
3638 int wifi_direct_set_passphrase(const char *passphrase)
3640 __WDC_LOG_FUNC_START__;
3642 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3644 GError* error = NULL;
3645 GVariant *reply = NULL;
3646 GVariant *params = NULL;
3647 int ret = WIFI_DIRECT_ERROR_NONE;
3649 if (g_client_info.is_registered == false) {
3650 WDC_LOGE("Client is NOT registered.");
3651 __WDC_LOG_FUNC_END__;
3652 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3656 WDC_LOGE("NULL Param [passphrase]!");
3657 __WDC_LOG_FUNC_END__;
3658 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3660 WDC_LOGD("passphrase = [%s]", passphrase);
3662 params = g_variant_new("(s)", passphrase);
3663 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3668 ret = __net_wifidirect_gerror_to_enum(error);
3669 if (ret == WIFI_DIRECT_ERROR_NONE) {
3670 g_variant_get(reply, "(i)", &ret);
3671 g_variant_unref(reply);
3674 WDC_LOGD("%s() SUCCESS", __func__);
3676 __WDC_LOG_FUNC_END__;
3677 return WIFI_DIRECT_ERROR_NONE;
3680 int wifi_direct_get_passphrase(char** passphrase)
3682 __WDC_LOG_FUNC_START__;
3684 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3686 GError* error = NULL;
3687 GVariant *reply = NULL;
3688 const char *val = NULL;
3689 int ret = WIFI_DIRECT_ERROR_NONE;
3691 if (g_client_info.is_registered == false) {
3692 WDC_LOGE("Client is NOT registered.");
3693 __WDC_LOG_FUNC_END__;
3694 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3698 WDC_LOGE("NULL Param [passphrase]!");
3699 __WDC_LOG_FUNC_END__;
3700 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3703 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3708 ret = __net_wifidirect_gerror_to_enum(error);
3709 if (ret != WIFI_DIRECT_ERROR_NONE)
3712 WDC_LOGD("%s() SUCCESS", __func__);
3713 g_variant_get(reply, "(i&s)", &ret, &val);
3714 *passphrase = g_strdup(val);
3715 g_variant_unref(reply);
3717 WDC_LOGD("%s() return : [%d]", __func__, ret);
3718 __WDC_LOG_FUNC_END__;
3722 int wifi_direct_set_autoconnection_peer(char *mac_address)
3724 __WDC_LOG_FUNC_START__;
3726 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3728 GError* error = NULL;
3729 GVariant *reply = NULL;
3730 GVariant *params = NULL;
3731 int ret = WIFI_DIRECT_ERROR_NONE;
3733 if (g_client_info.is_registered == false) {
3734 WDC_LOGE("Client is NOT registered.");
3735 __WDC_LOG_FUNC_END__;
3736 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3740 WDC_LOGE("NULL Param!");
3741 __WDC_LOG_FUNC_END__;
3742 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3745 params = g_variant_new("(s)", mac_address);
3746 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
3747 "SetAutoConnectionPeer",
3751 ret = __net_wifidirect_gerror_to_enum(error);
3752 if (ret == WIFI_DIRECT_ERROR_NONE) {
3753 g_variant_get(reply, "(i)", &ret);
3754 g_variant_unref(reply);
3757 WDC_LOGD("%s() return : [%d]", __func__, ret);
3758 __WDC_LOG_FUNC_END__;
3762 int wifi_direct_init_display(void)
3764 __WDC_LOG_FUNC_START__;
3765 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3767 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3769 GError* error = NULL;
3770 GVariant *reply = NULL;
3771 int ret = WIFI_DIRECT_ERROR_NONE;
3773 if (g_client_info.is_registered == false) {
3774 WDC_LOGE("Client is NOT registered.");
3775 __WDC_LOG_FUNC_END__;
3776 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3779 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3784 ret = __net_wifidirect_gerror_to_enum(error);
3785 if (ret == WIFI_DIRECT_ERROR_NONE) {
3786 g_variant_get(reply, "(i)", &ret);
3787 g_variant_unref(reply);
3790 WDC_LOGD("%s() return : [%d]", __func__, ret);
3791 __WDC_LOG_FUNC_END__;
3793 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3794 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3795 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3798 int wifi_direct_deinit_display(void)
3800 __WDC_LOG_FUNC_START__;
3801 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3803 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3805 GError* error = NULL;
3806 GVariant *reply = NULL;
3807 int ret = WIFI_DIRECT_ERROR_NONE;
3809 if (g_client_info.is_registered == false) {
3810 WDC_LOGE("Client is NOT registered");
3811 __WDC_LOG_FUNC_END__;
3812 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3815 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3820 ret = __net_wifidirect_gerror_to_enum(error);
3821 if (ret == WIFI_DIRECT_ERROR_NONE) {
3822 g_variant_get(reply, "(i)", &ret);
3823 g_variant_unref(reply);
3826 WDC_LOGD("%s() return : [%d]", __func__, ret);
3827 __WDC_LOG_FUNC_END__;
3829 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3830 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3831 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3834 int wifi_direct_set_display(wifi_direct_display_type_e type, int port, int hdcp)
3836 __WDC_LOG_FUNC_START__;
3837 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3839 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3841 GError* error = NULL;
3842 GVariant *reply = NULL;
3843 GVariant *params = NULL;
3844 int ret = WIFI_DIRECT_ERROR_NONE;
3846 if (g_client_info.is_registered == false) {
3847 WDC_LOGE("Client is NOT registered");
3848 __WDC_LOG_FUNC_END__;
3849 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3852 if (type < WIFI_DIRECT_DISPLAY_TYPE_SOURCE ||
3853 type > WIFI_DIRECT_DISPLAY_TYPE_DUAL || port < 0 ||
3855 WDC_LOGE("Invalid paramaeters passed type[%d], port[%d], hdcp[%d]!");
3856 __WDC_LOG_FUNC_END__;
3857 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3860 params = g_variant_new("(iii)", type, port, hdcp);
3861 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3866 ret = __net_wifidirect_gerror_to_enum(error);
3867 if (ret == WIFI_DIRECT_ERROR_NONE) {
3868 g_variant_get(reply, "(i)", &ret);
3869 g_variant_unref(reply);
3872 WDC_LOGD("%s() return : [%d]", __func__, ret);
3873 __WDC_LOG_FUNC_END__;
3875 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3876 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3877 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3880 int wifi_direct_set_display_availability(bool availability)
3882 __WDC_LOG_FUNC_START__;
3883 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3885 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3887 GError* error = NULL;
3888 GVariant *reply = NULL;
3889 GVariant *params = NULL;
3890 int ret = WIFI_DIRECT_ERROR_NONE;
3892 if (g_client_info.is_registered == false) {
3893 WDC_LOGE("Client is NOT registered.");
3894 __WDC_LOG_FUNC_END__;
3895 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3899 params = g_variant_new("(i)", availability);
3900 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3905 ret = __net_wifidirect_gerror_to_enum(error);
3906 if (ret == WIFI_DIRECT_ERROR_NONE) {
3907 g_variant_get(reply, "(i)", &ret);
3908 g_variant_unref(reply);
3911 WDC_LOGD("%s() return : [%d]", __func__, ret);
3912 __WDC_LOG_FUNC_END__;
3914 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3915 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3916 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3920 int wifi_direct_get_peer_display_type(char *mac_address, wifi_direct_display_type_e *type)
3922 __WDC_LOG_FUNC_START__;
3923 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3925 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3927 GError* error = NULL;
3928 GVariant *reply = NULL;
3929 GVariant *params = NULL;
3931 int ret = WIFI_DIRECT_ERROR_NONE;
3933 if (g_client_info.is_registered == false) {
3934 WDC_LOGE("Client is NOT registered");
3935 __WDC_LOG_FUNC_END__;
3936 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3939 if (!mac_address || !type) {
3940 WDC_LOGE("NULL Param!");
3941 __WDC_LOG_FUNC_END__;
3942 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3945 params = g_variant_new("(s)", mac_address);
3946 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3951 ret = __net_wifidirect_gerror_to_enum(error);
3952 if (ret != WIFI_DIRECT_ERROR_NONE)
3955 g_variant_get(reply, "(ii)", &ret, &val);
3957 g_variant_unref(reply);
3959 WDC_LOGD("%s() return : [%d]", __func__, ret);
3960 __WDC_LOG_FUNC_END__;
3962 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3963 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3964 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3967 int wifi_direct_get_peer_display_availability(char *mac_address, bool *availability)
3969 __WDC_LOG_FUNC_START__;
3970 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3972 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3974 GError* error = NULL;
3975 GVariant *reply = NULL;
3976 GVariant *params = NULL;
3978 int ret = WIFI_DIRECT_ERROR_NONE;
3980 if (g_client_info.is_registered == false) {
3981 WDC_LOGE("Client is NOT registered");
3982 __WDC_LOG_FUNC_END__;
3983 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3986 if (!mac_address || !availability) {
3987 WDC_LOGE("NULL Param!");
3988 __WDC_LOG_FUNC_END__;
3989 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3992 params = g_variant_new("(s)", mac_address);
3993 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3994 "GetPeerAvailability",
3998 ret = __net_wifidirect_gerror_to_enum(error);
3999 if (ret != WIFI_DIRECT_ERROR_NONE)
4002 g_variant_get(reply, "(ii)", &ret, &val);
4003 *availability = val;
4004 g_variant_unref(reply);
4006 WDC_LOGD("%s() return : [%d]", __func__, ret);
4007 __WDC_LOG_FUNC_END__;
4009 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4010 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4011 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4014 int wifi_direct_get_peer_display_hdcp(char *mac_address, int *hdcp)
4016 __WDC_LOG_FUNC_START__;
4017 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
4019 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
4021 GError* error = NULL;
4022 GVariant *reply = NULL;
4023 GVariant *params = NULL;
4025 int ret = WIFI_DIRECT_ERROR_NONE;
4027 if (g_client_info.is_registered == false) {
4028 WDC_LOGE("Client is NOT registered");
4029 __WDC_LOG_FUNC_END__;
4030 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4033 if (!mac_address || !hdcp) {
4034 WDC_LOGE("NULL Param!");
4035 __WDC_LOG_FUNC_END__;
4036 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4039 params = g_variant_new("(s)", mac_address);
4040 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4045 ret = __net_wifidirect_gerror_to_enum(error);
4046 if (ret != WIFI_DIRECT_ERROR_NONE)
4049 g_variant_get(reply, "(ii)", &ret, &val);
4051 g_variant_unref(reply);
4053 WDC_LOGD("%s() return : [%d]", __func__, ret);
4054 __WDC_LOG_FUNC_END__;
4056 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4057 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4058 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4061 int wifi_direct_get_peer_display_port(char *mac_address, int *port)
4063 __WDC_LOG_FUNC_START__;
4064 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
4066 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
4068 GError* error = NULL;
4069 GVariant *reply = NULL;
4070 GVariant *params = NULL;
4072 int ret = WIFI_DIRECT_ERROR_NONE;
4074 if (g_client_info.is_registered == false) {
4075 WDC_LOGE("Client is NOT registered");
4076 __WDC_LOG_FUNC_END__;
4077 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4080 if (!mac_address || !port) {
4081 WDC_LOGE("NULL Param!");
4082 __WDC_LOG_FUNC_END__;
4083 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4086 params = g_variant_new("(s)", mac_address);
4087 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4092 ret = __net_wifidirect_gerror_to_enum(error);
4093 if (ret != WIFI_DIRECT_ERROR_NONE)
4096 g_variant_get(reply, "(ii)", &ret, &val);
4098 g_variant_unref(reply);
4100 WDC_LOGD("%s() return : [%d]", __func__, ret);
4101 __WDC_LOG_FUNC_END__;
4103 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4104 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4105 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4108 int wifi_direct_get_peer_display_throughput(char *mac_address, int *throughput)
4110 __WDC_LOG_FUNC_START__;
4111 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
4113 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
4115 GError* error = NULL;
4116 GVariant *reply = NULL;
4117 GVariant *params = NULL;
4119 int ret = WIFI_DIRECT_ERROR_NONE;
4121 if (g_client_info.is_registered == false) {
4122 WDC_LOGE("Client is NOT registered");
4123 __WDC_LOG_FUNC_END__;
4124 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4127 if (!mac_address || !throughput) {
4128 WDC_LOGE("NULL Param!");
4129 __WDC_LOG_FUNC_END__;
4130 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4133 params = g_variant_new("(s)", mac_address);
4134 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4135 "GetPeerThroughput",
4139 ret = __net_wifidirect_gerror_to_enum(error);
4140 if (ret != WIFI_DIRECT_ERROR_NONE)
4143 g_variant_get(reply, "(ii)", &ret, &val);
4145 g_variant_unref(reply);
4147 WDC_LOGD("%s() return : [%d]", __func__, ret);
4148 __WDC_LOG_FUNC_END__;
4150 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4151 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4152 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4155 int wifi_direct_set_session_timer(int seconds)
4157 __WDC_LOG_FUNC_START__;
4159 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
4161 GError* error = NULL;
4162 GVariant *reply = NULL;
4163 GVariant *params = NULL;
4164 int ret = WIFI_DIRECT_ERROR_NONE;
4166 if (g_client_info.is_registered == false) {
4167 WDC_LOGE("Client is NOT registered.");
4168 __WDC_LOG_FUNC_END__;
4169 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4172 WDC_LOGE("Negative Timer Value");
4173 __WDC_LOG_FUNC_END__;
4174 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4177 WDC_LOGD("seconds = [%d]", seconds);
4179 params = g_variant_new("(i)", seconds);
4180 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
4185 ret = __net_wifidirect_gerror_to_enum(error);
4186 if (ret == WIFI_DIRECT_ERROR_NONE) {
4187 g_variant_get(reply, "(i)", &ret);
4188 g_variant_unref(reply);
4191 WDC_LOGD("%s() SUCCESS", __func__);
4193 __WDC_LOG_FUNC_END__;
4194 return WIFI_DIRECT_ERROR_NONE;
4198 int wifi_direct_get_session_timer(int *seconds)
4200 __WDC_LOG_FUNC_START__;
4202 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
4204 GError* error = NULL;
4205 GVariant *reply = NULL;
4207 int ret = WIFI_DIRECT_ERROR_NONE;
4209 if (g_client_info.is_registered == false) {
4210 WDC_LOGE("Client is NOT registered");
4211 __WDC_LOG_FUNC_END__;
4212 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4216 WDC_LOGE("Invalid Parameter");
4217 __WDC_LOG_FUNC_END__;
4218 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4221 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
4226 ret = __net_wifidirect_gerror_to_enum(error);
4227 if (ret != WIFI_DIRECT_ERROR_NONE)
4230 g_variant_get(reply, "(ii)", &ret, &val);
4232 g_variant_unref(reply);
4234 WDC_LOGD("Session Timer = [%d] Seconds", *seconds);
4235 WDC_LOGD("%s() return : [%d]", __func__, ret);
4237 __WDC_LOG_FUNC_END__;
4241 int wifi_direct_set_auto_group_removal(bool enable)
4243 __WDC_LOG_FUNC_START__;
4245 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
4247 GError* error = NULL;
4248 GVariant *reply = NULL;
4249 GVariant *params = NULL;
4250 int ret = WIFI_DIRECT_ERROR_NONE;
4252 if (g_client_info.is_registered == false) {
4253 WDC_LOGE("Client is NOT registered");
4254 __WDC_LOG_FUNC_END__;
4255 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4258 params = g_variant_new("(b)", enable);
4259 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
4260 "SetAutoGroupRemoval",
4264 ret = __net_wifidirect_gerror_to_enum(error);
4265 if (ret == WIFI_DIRECT_ERROR_NONE) {
4266 g_variant_get(reply, "(i)", &ret);
4267 g_variant_unref(reply);
4270 WDC_LOGD("%s() return : [%d]", __func__, ret);
4271 __WDC_LOG_FUNC_END__;