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 *****************************************************************************/
70 wifi_direct_client_info_s g_client_info = {
71 .is_registered = FALSE,
75 .activation_cb = NULL,
77 .connection_cb = NULL,
78 .ip_assigned_cb = NULL,
79 .peer_found_cb = NULL,
80 .user_data_for_cb_activation = NULL,
81 .user_data_for_cb_discover = NULL,
82 .user_data_for_cb_connection = NULL,
83 .user_data_for_cb_ip_assigned = NULL,
84 .user_data_for_cb_peer_found = NULL,
85 .user_data_for_cb_device_name = NULL,
86 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
88 .user_data_for_cb_service = NULL,
89 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
91 .mutex = PTHREAD_MUTEX_INITIALIZER
94 /*****************************************************************************
95 * Local Functions Definition
96 *****************************************************************************/
98 static wifi_direct_client_info_s *__wfd_get_control()
100 return &g_client_info;
103 static int __net_wifidirect_gerror_to_enum(GError* error)
105 int ret = WIFI_DIRECT_ERROR_NONE;
107 WDC_LOGI("GError is NULL!!");
111 WDC_LOGE("wifi_direct_dbus_method_call_sync() failed. error [%d: %s]",
112 error->code, error->message);
114 if (NULL == strstr(error->message, "net.wifidirect.Error")) {
116 if (NULL != strstr(error->message, ".AccessDenied")) {
117 WDC_LOGE("Client doesn't have wifidirect privilege");
118 ret = WIFI_DIRECT_ERROR_PERMISSION_DENIED;
120 WDC_LOGE("DBus failure");
121 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
125 if (NULL != strstr(error->message, "InvalidParameter"))
126 ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
127 else if (NULL != strstr(error->message, "NotPermitted"))
128 ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
129 else if (NULL != strstr(error->message, "OperationFailed"))
130 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
132 else if (NULL != strstr(error->message, "TooManyClient"))
133 ret = WIFI_DIRECT_ERROR_TOO_MANY_CLIENT;
135 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
143 void wifi_direct_process_manage_activation(GDBusConnection *connection,
144 const gchar *object_path, GVariant *parameters)
146 __WDC_LOG_FUNC_START__;
148 wifi_direct_client_info_s *client = __wfd_get_control();
150 if (!client->activation_cb) {
151 WDC_LOGI("activation_cb is NULL!!");
152 return; //LCOV_EXCL_LINE
156 __WDC_LOG_FUNC_END__;
160 g_variant_get(parameters, "(i)", &error_code);
162 client->activation_cb(error_code,
163 WIFI_DIRECT_DEVICE_STATE_ACTIVATED,
164 client->user_data_for_cb_activation);
166 __WDC_LOG_FUNC_END__;
169 void wifi_direct_process_manage_deactivation(GDBusConnection *connection,
170 const gchar *object_path, GVariant *parameters)
172 __WDC_LOG_FUNC_START__;
174 wifi_direct_client_info_s *client = __wfd_get_control();
177 __WDC_LOG_FUNC_END__;
178 return; //LCOV_EXCL_LINE
181 if (!client->activation_cb) {
182 WDC_LOGI("activation_cb is NULL!!");
183 __WDC_LOG_FUNC_END__;
187 g_variant_get(parameters, "(i)", &error_code);
189 client->activation_cb(error_code,
190 WIFI_DIRECT_DEVICE_STATE_DEACTIVATED,
191 client->user_data_for_cb_activation);
193 __WDC_LOG_FUNC_END__;
197 void wifi_direct_process_manage_connection(GDBusConnection *connection,
198 const gchar *object_path, GVariant *parameters)
200 __WDC_LOG_FUNC_START__;
202 wifi_direct_connection_state_e connection_state;
203 const gchar *peer_mac_address = NULL;
204 wifi_direct_client_info_s *client = __wfd_get_control();
207 __WDC_LOG_FUNC_END__;
211 if (!client->connection_cb) {
212 WDC_LOGI("connection_cb is NULL!!");
213 __WDC_LOG_FUNC_END__;
217 g_variant_get(parameters, "(ii&s)",
218 &error_code, &connection_state, &peer_mac_address);
220 client->connection_cb(error_code,
223 client->user_data_for_cb_connection);
225 __WDC_LOG_FUNC_END__;
228 void wifi_direct_process_manage_disconnection(GDBusConnection *connection,
229 const gchar *object_path, GVariant *parameters)
231 __WDC_LOG_FUNC_START__;
233 wifi_direct_connection_state_e connection_state;
234 const gchar *peer_mac_address = NULL;
235 wifi_direct_client_info_s *client = __wfd_get_control();
238 __WDC_LOG_FUNC_END__;
242 if (!client->connection_cb) {
243 WDC_LOGI("connection_cb is NULL!!");
244 __WDC_LOG_FUNC_END__;
248 g_variant_get(parameters, "(ii&s)",
249 &error_code, &connection_state, &peer_mac_address);
251 client->connection_cb(error_code,
254 client->user_data_for_cb_connection);
256 __WDC_LOG_FUNC_END__;
259 void wifi_direct_process_manage_peer_ip_assigned(GDBusConnection *connection,
260 const gchar *object_path, GVariant *parameters)
262 __WDC_LOG_FUNC_START__;
263 char *get_str = NULL;
264 GError* error = NULL;
265 GVariant *reply = NULL;
266 const gchar *peer_mac_address = NULL;
267 const gchar *assigned_ip_address = NULL;
269 wifi_direct_client_info_s *client = __wfd_get_control();
272 __WDC_LOG_FUNC_END__;
276 g_variant_get(parameters, "(&s&s)",
277 &peer_mac_address, &assigned_ip_address);
279 if (!client->ip_assigned_cb) {
280 WDC_LOGI("ip_assigned_cb is NULL!!");
281 __WDC_LOG_FUNC_END__;
285 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
290 WDC_LOGE("wifi_direct_dbus_method_call_sync() failed."
291 "error [%d: %s]", error->code, error->message);
293 __WDC_LOG_FUNC_END__;
297 g_variant_get(reply, "(i&s)", ret, &get_str);
298 g_variant_unref(reply);
300 WDC_LOGD("Interface Name = [%s]", get_str);
301 WDC_LOGD("%s() return : [%d]", __func__, ret);
303 client->ip_assigned_cb(peer_mac_address, assigned_ip_address, get_str,
304 client->user_data_for_cb_ip_assigned);
306 __WDC_LOG_FUNC_END__;
309 void wifi_direct_process_manage_listen_started(GDBusConnection *connection,
310 const gchar *object_path, GVariant *parameters)
312 __WDC_LOG_FUNC_START__;
313 wifi_direct_client_info_s *client = __wfd_get_control();
315 if (!client->discover_cb) {
316 WDC_LOGI("discover_cb is NULL!!");
317 __WDC_LOG_FUNC_END__;
321 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
322 WIFI_DIRECT_ONLY_LISTEN_STARTED,
323 client->user_data_for_cb_discover);
325 __WDC_LOG_FUNC_END__;
328 void wifi_direct_process_manage_discovery_started(GDBusConnection *connection,
329 const gchar *object_path, GVariant *parameters)
331 __WDC_LOG_FUNC_START__;
332 wifi_direct_client_info_s *client = __wfd_get_control();
334 if (!client->discover_cb) {
335 WDC_LOGI("discover_cb is NULL!!");
336 __WDC_LOG_FUNC_END__;
340 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
341 WIFI_DIRECT_DISCOVERY_STARTED,
342 client->user_data_for_cb_discover);
344 __WDC_LOG_FUNC_END__;
347 void wifi_direct_process_manage_discovery_finished(GDBusConnection *connection,
348 const gchar *object_path, GVariant *parameters)
350 __WDC_LOG_FUNC_START__;
351 wifi_direct_client_info_s *client = __wfd_get_control();
353 if (!client->discover_cb) {
354 WDC_LOGI("discover_cb is NULL!!");
355 __WDC_LOG_FUNC_END__;
359 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
360 WIFI_DIRECT_DISCOVERY_FINISHED,
361 client->user_data_for_cb_discover);
363 __WDC_LOG_FUNC_END__;
366 void wifi_direct_process_manage_peer_found(GDBusConnection *connection,
367 const gchar *object_path, GVariant *parameters)
369 __WDC_LOG_FUNC_START__;
370 const gchar *peer_mac_address = NULL;
371 wifi_direct_client_info_s *client = __wfd_get_control();
374 __WDC_LOG_FUNC_END__;
378 g_variant_get(parameters, "(&s)", &peer_mac_address);
380 if (client->peer_found_cb) {
381 client->peer_found_cb(WIFI_DIRECT_ERROR_NONE,
382 WIFI_DIRECT_DISCOVERY_FOUND,
384 client->user_data_for_cb_discover);
386 WDC_LOGI("peer_found_cb is NULL!!");
389 if (!client->discover_cb) {
390 WDC_LOGI("discover_cb is NULL!!");
391 __WDC_LOG_FUNC_END__;
395 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
396 WIFI_DIRECT_DISCOVERY_FOUND,
397 client->user_data_for_cb_discover);
399 __WDC_LOG_FUNC_END__;
402 void wifi_direct_process_manage_peer_lost(GDBusConnection *connection,
403 const gchar *object_path, GVariant *parameters)
405 __WDC_LOG_FUNC_START__;
406 const gchar *peer_mac_address = NULL;
407 wifi_direct_client_info_s *client = __wfd_get_control();
410 __WDC_LOG_FUNC_END__;
414 g_variant_get(parameters, "(&s)", &peer_mac_address);
416 if (client->peer_found_cb) {
417 client->peer_found_cb(WIFI_DIRECT_ERROR_NONE,
418 WIFI_DIRECT_DISCOVERY_LOST,
420 client->user_data_for_cb_discover);
422 WDC_LOGI("peer_found_cb is NULL!!");
425 if (!client->discover_cb) {
426 WDC_LOGI("discover_cb is NULL!!");
427 __WDC_LOG_FUNC_END__;
431 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
432 WIFI_DIRECT_DISCOVERY_LOST,
433 client->user_data_for_cb_discover);
435 __WDC_LOG_FUNC_END__;
439 void wifi_direct_process_group_created(GDBusConnection *connection,
440 const gchar *object_path, GVariant *parameters)
442 __WDC_LOG_FUNC_START__;
443 wifi_direct_client_info_s *client = __wfd_get_control();
445 if (!client->connection_cb) {
446 WDC_LOGI("connection_cb is NULL!!");
447 __WDC_LOG_FUNC_END__;
451 client->connection_cb(WIFI_DIRECT_ERROR_NONE,
452 WIFI_DIRECT_GROUP_CREATED,
454 client->user_data_for_cb_connection);
456 __WDC_LOG_FUNC_END__;
459 void wifi_direct_process_group_destroyed(GDBusConnection *connection,
460 const gchar *object_path, GVariant *parameters)
462 __WDC_LOG_FUNC_START__;
463 wifi_direct_client_info_s *client = __wfd_get_control();
465 if (!client->connection_cb) {
466 WDC_LOGI("connection_cb is NULL!!");
467 __WDC_LOG_FUNC_END__;
471 client->connection_cb(WIFI_DIRECT_ERROR_NONE,
472 WIFI_DIRECT_GROUP_DESTROYED,
474 client->user_data_for_cb_connection);
476 __WDC_LOG_FUNC_END__;
479 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
481 void wifi_direct_process_service_discovery_started(GDBusConnection *connection,
482 const gchar *object_path, GVariant *parameters)
484 __WDC_LOG_FUNC_START__;
485 wifi_direct_client_info_s *client = __wfd_get_control();
487 if (!client->service_cb) {
488 WDC_LOGI("service_cb is NULL!!\n");
489 __WDC_LOG_FUNC_END__;
493 client->service_cb(WIFI_DIRECT_ERROR_NONE,
494 WIFI_DIRECT_SERVICE_DISCOVERY_STARTED,
495 WIFI_DIRECT_SERVICE_TYPE_ALL,
498 client->user_data_for_cb_service);
500 __WDC_LOG_FUNC_END__;
503 void wifi_direct_process_service_discovery_found(GDBusConnection *connection,
504 const gchar *object_path, GVariant *parameters)
506 __WDC_LOG_FUNC_START__;
507 wifi_direct_service_type_e service_type;
508 const gchar* response_data = NULL;
509 const gchar* peer_mac_address = NULL;
510 wifi_direct_client_info_s *client = __wfd_get_control();
513 __WDC_LOG_FUNC_END__;
517 g_variant_get(parameters, "(i&s&s)",
518 &service_type, &response_data, &peer_mac_address);
520 if (!client->service_cb) {
521 WDC_LOGI("service_cb is NULL!!\n");
522 __WDC_LOG_FUNC_END__;
526 client->service_cb(WIFI_DIRECT_ERROR_NONE,
527 WIFI_DIRECT_SERVICE_DISCOVERY_FOUND,
529 (void *) response_data,
531 client->user_data_for_cb_service);
533 __WDC_LOG_FUNC_END__;
536 void wifi_direct_process_service_discovery_finished(GDBusConnection *connection,
537 const gchar *object_path, GVariant *parameters)
539 __WDC_LOG_FUNC_START__;
540 wifi_direct_client_info_s *client = __wfd_get_control();
542 if (!client->service_cb) {
543 WDC_LOGI("service_cb is NULL!!\n");
544 __WDC_LOG_FUNC_END__;
548 client->service_cb(WIFI_DIRECT_ERROR_NONE,
549 WIFI_DIRECT_SERVICE_DISCOVERY_FINISHED,
550 WIFI_DIRECT_SERVICE_TYPE_ALL,
553 client->user_data_for_cb_service);
555 __WDC_LOG_FUNC_END__;
557 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
559 void __wfd_client_print_entry_list(wfd_discovery_entry_s *list, int num)
563 WDC_LOGD("------------------------------------------");
564 for (i = 0; i < num; i++) {
565 WDC_LOGD("== Peer index : %d ==", i);
566 WDC_LOGD("is Group Owner ? %s", list[i].is_group_owner ? "YES" : "NO");
567 WDC_LOGD("device_name : %s", list[i].device_name);
568 WDC_LOGD("MAC address : "MACSECSTR, MAC2SECSTR(list[i].mac_address));
569 WDC_LOGD("wps cfg method : %x", list[i].wps_cfg_methods);
570 WDC_LOGD("Device Type: %d - %d", list[i].category, list[i].subcategory);
571 WDC_LOGD("Listen channel: %d", list[i].channel);
573 WDC_LOGD("------------------------------------------");
576 void __wfd_client_print_connected_peer_info(wfd_connected_peer_info_s *list, int num)
580 WDC_LOGD("------------------------------------------\n");
581 for (i = 0; i < num; i++) {
582 WDC_LOGD("== Peer index : %d ==\n", i);
583 WDC_LOGD("device_name : %s\n", list[i].device_name);
584 WDC_LOGD("Device MAC : " MACSECSTR "\n", MAC2SECSTR(list[i].mac_address));
585 WDC_LOGD("Device Type: %d - %d", list[i].category, list[i].subcategory);
586 WDC_LOGD("channel : %d\n", list[i].channel);
587 WDC_LOGD("IP ["IPSECSTR"]\n", IP2SECSTR(list[i].ip_address));
589 WDC_LOGD("------------------------------------------\n");
592 void __wfd_client_print_persistent_group_info(wfd_persistent_group_info_s *list, int num)
596 WDC_LOGD("------------------------------------------\n");
597 for (i = 0; i < num; i++) {
598 WDC_LOGD("== Persistent Group index : %d ==", i);
599 WDC_LOGD("ssid : %s", list[i].ssid);
600 WDC_LOGD("GO MAC : " MACSECSTR, MAC2SECSTR(list[i].go_mac_address));
602 WDC_LOGD("------------------------------------------\n");
606 int wifi_direct_initialize(void)
608 __WDC_LOG_FUNC_START__;
610 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
612 GError* error = NULL;
613 GVariant *reply = NULL;
614 bool wifi_direct_enable;
618 if (g_client_info.is_registered == TRUE) {
619 WDC_LOGW("Warning!!! Already registered\nUpdate user data and callback!");
620 __WDC_LOG_FUNC_END__;
621 return WIFI_DIRECT_ERROR_ALREADY_INITIALIZED;
624 res = system_info_get_platform_bool("tizen.org/feature/network.wifi.direct", &wifi_direct_enable);
626 WDC_LOGE("Failed to get sys info");
627 __WDC_LOG_FUNC_END__;
628 return res; //LCOV_EXCL_LINE
631 if (!wifi_direct_enable) {
632 WDC_LOGE("Wi-Fi Direct not supported");
633 return WIFI_DIRECT_ERROR_NOT_SUPPORTED; //LCOV_EXCL_LINE
636 if (wifi_direct_dbus_init() == FALSE) {
637 WDC_LOGW("Failed to initialize dbus");
638 __WDC_LOG_FUNC_END__;
639 return WIFI_DIRECT_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
642 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
643 "GetState", NULL, &error);
645 res = __net_wifidirect_gerror_to_enum(error);
646 if (res != WIFI_DIRECT_ERROR_NONE)
649 g_variant_get(reply, "(ii)", &res, &state);
650 WDC_LOGD("State = [%d]", state);
652 g_client_info.is_registered = TRUE;
654 /* Initialize callbacks */
655 g_client_info.activation_cb = NULL;
656 g_client_info.discover_cb = NULL;
657 g_client_info.connection_cb = NULL;
658 g_client_info.ip_assigned_cb = NULL;
660 g_client_info.peer_found_cb = NULL;
661 g_client_info.user_data_for_cb_activation = NULL;
662 g_client_info.user_data_for_cb_discover = NULL;
663 g_client_info.user_data_for_cb_connection = NULL;
664 g_client_info.user_data_for_cb_ip_assigned = NULL;
665 g_client_info.user_data_for_cb_peer_found = NULL;
666 g_client_info.user_data_for_cb_device_name = NULL;
668 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
669 g_client_info.service_cb = NULL;
670 g_client_info.user_data_for_cb_service = NULL;
671 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
673 __WDC_LOG_FUNC_END__;
674 return WIFI_DIRECT_ERROR_NONE;
677 int wifi_direct_deinitialize(void)
679 __WDC_LOG_FUNC_START__;
681 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
683 if (g_client_info.is_registered == false) {
684 WDC_LOGE("Client is already deregistered");
685 __WDC_LOG_FUNC_END__;
686 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
689 wifi_direct_dbus_deinit();
691 g_client_info.activation_cb = NULL;
692 g_client_info.discover_cb = NULL;
693 g_client_info.connection_cb = NULL;
694 g_client_info.ip_assigned_cb = NULL;
695 g_client_info.peer_found_cb = NULL;
696 g_client_info.user_data_for_cb_activation = NULL;
697 g_client_info.user_data_for_cb_discover = NULL;
698 g_client_info.user_data_for_cb_connection = NULL;
699 g_client_info.user_data_for_cb_ip_assigned = NULL;
700 g_client_info.user_data_for_cb_peer_found = NULL;
702 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
703 g_client_info.service_cb = NULL;
704 g_client_info.user_data_for_cb_service = NULL;
705 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
707 g_client_info.is_registered = FALSE;
709 __WDC_LOG_FUNC_END__;
710 return WIFI_DIRECT_ERROR_NONE;
714 int wifi_direct_set_device_state_changed_cb(wifi_direct_device_state_changed_cb cb,
717 __WDC_LOG_FUNC_START__;
719 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
722 WDC_LOGE("Invalid parameter");
723 __WDC_LOG_FUNC_END__;
724 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
727 if (g_client_info.is_registered == false) {
728 WDC_LOGE("Client is not initialized.");
729 __WDC_LOG_FUNC_END__;
730 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
733 g_client_info.activation_cb = cb;
734 g_client_info.user_data_for_cb_activation = user_data;
736 __WDC_LOG_FUNC_END__;
737 return WIFI_DIRECT_ERROR_NONE;
741 int wifi_direct_unset_device_state_changed_cb(void)
743 __WDC_LOG_FUNC_START__;
745 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
747 if (g_client_info.is_registered == false) {
748 WDC_LOGE("Client is not initialized.\n");
749 __WDC_LOG_FUNC_END__;
750 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
753 g_client_info.activation_cb = NULL;
754 g_client_info.user_data_for_cb_activation = NULL;
756 __WDC_LOG_FUNC_END__;
757 return WIFI_DIRECT_ERROR_NONE;
762 wifi_direct_set_discovery_state_changed_cb(wifi_direct_discovery_state_chagned_cb cb,
765 __WDC_LOG_FUNC_START__;
767 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
770 WDC_LOGE("Callback is NULL.\n");
771 __WDC_LOG_FUNC_END__;
772 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
775 if (g_client_info.is_registered == false) {
776 WDC_LOGE("Client is not initialized.\n");
777 __WDC_LOG_FUNC_END__;
778 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
781 g_client_info.discover_cb = cb;
782 g_client_info.user_data_for_cb_discover = user_data;
784 __WDC_LOG_FUNC_END__;
785 return WIFI_DIRECT_ERROR_NONE;
789 int wifi_direct_unset_discovery_state_changed_cb(void)
791 __WDC_LOG_FUNC_START__;
793 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
795 if (g_client_info.is_registered == false) {
796 WDC_LOGE("Client is not initialized.\n");
797 __WDC_LOG_FUNC_END__;
798 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
801 g_client_info.discover_cb = NULL;
802 g_client_info.user_data_for_cb_discover = NULL;
804 __WDC_LOG_FUNC_END__;
805 return WIFI_DIRECT_ERROR_NONE;
808 int wifi_direct_set_peer_found_cb(wifi_direct_peer_found_cb cb,
811 __WDC_LOG_FUNC_START__;
813 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
816 WDC_LOGE("Callback is NULL.\n");
817 __WDC_LOG_FUNC_END__;
818 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
821 if (g_client_info.is_registered == false) {
822 WDC_LOGE("Client is not initialized.\n");
823 __WDC_LOG_FUNC_END__;
824 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
827 g_client_info.peer_found_cb = cb;
828 g_client_info.user_data_for_cb_peer_found = user_data;
830 __WDC_LOG_FUNC_END__;
831 return WIFI_DIRECT_ERROR_NONE;
835 int wifi_direct_unset_peer_found_cb(void)
837 __WDC_LOG_FUNC_START__;
839 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
841 if (g_client_info.is_registered == false) {
842 WDC_LOGE("Client is not initialized.\n");
843 __WDC_LOG_FUNC_END__;
844 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
847 g_client_info.peer_found_cb = NULL;
848 g_client_info.user_data_for_cb_peer_found = NULL;
850 __WDC_LOG_FUNC_END__;
851 return WIFI_DIRECT_ERROR_NONE;
854 int wifi_direct_set_service_state_changed_cb(wifi_direct_service_state_changed_cb cb,
857 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
858 __WDC_LOG_FUNC_START__;
860 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
864 WDC_LOGE("Callback is NULL.");
865 __WDC_LOG_FUNC_END__;
866 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
869 if (g_client_info.is_registered == false) {
870 WDC_LOGE("Client is not initialized.");
871 __WDC_LOG_FUNC_END__;
872 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
875 g_client_info.service_cb = cb;
876 g_client_info.user_data_for_cb_service = user_data;
878 __WDC_LOG_FUNC_END__;
879 return WIFI_DIRECT_ERROR_NONE;
881 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
882 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
883 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
887 int wifi_direct_unset_service_state_changed_cb(void)
889 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
890 __WDC_LOG_FUNC_START__;
892 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
895 if (g_client_info.is_registered == false) {
896 WDC_LOGE("Client is not initialized.");
897 __WDC_LOG_FUNC_END__;
898 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
901 g_client_info.service_cb = NULL;
902 g_client_info.user_data_for_cb_service = NULL;
904 __WDC_LOG_FUNC_END__;
905 return WIFI_DIRECT_ERROR_NONE;
907 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
908 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
909 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
912 int wifi_direct_set_connection_state_changed_cb(wifi_direct_connection_state_changed_cb cb,
915 __WDC_LOG_FUNC_START__;
917 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
920 WDC_LOGE("Callback is NULL.\n");
921 __WDC_LOG_FUNC_END__;
922 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
925 if (g_client_info.is_registered == false) {
926 WDC_LOGE("Client is not initialized.\n");
927 __WDC_LOG_FUNC_END__;
928 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
931 g_client_info.connection_cb = cb;
932 g_client_info.user_data_for_cb_connection = user_data;
934 __WDC_LOG_FUNC_END__;
935 return WIFI_DIRECT_ERROR_NONE;
939 int wifi_direct_unset_connection_state_changed_cb(void)
941 __WDC_LOG_FUNC_START__;
943 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
945 if (g_client_info.is_registered == false) {
946 WDC_LOGE("Client is not initialized");
947 __WDC_LOG_FUNC_END__;
948 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
951 g_client_info.connection_cb = NULL;
952 g_client_info.user_data_for_cb_connection = NULL;
954 __WDC_LOG_FUNC_END__;
955 return WIFI_DIRECT_ERROR_NONE;
959 int wifi_direct_set_client_ip_address_assigned_cb(wifi_direct_client_ip_address_assigned_cb cb,
962 __WDC_LOG_FUNC_START__;
964 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
967 WDC_LOGE("Callback is NULL");
968 __WDC_LOG_FUNC_END__;
969 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
972 if (g_client_info.is_registered == false) {
973 WDC_LOGE("Client is not initialized");
974 __WDC_LOG_FUNC_END__;
975 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
978 g_client_info.ip_assigned_cb = cb;
979 g_client_info.user_data_for_cb_ip_assigned = user_data;
981 __WDC_LOG_FUNC_END__;
982 return WIFI_DIRECT_ERROR_NONE;
985 int wifi_direct_unset_client_ip_address_assigned_cb(void)
987 __WDC_LOG_FUNC_START__;
989 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
991 if (g_client_info.is_registered == false) {
992 WDC_LOGE("Client is not initialized");
993 __WDC_LOG_FUNC_END__;
994 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
997 g_client_info.ip_assigned_cb = NULL;
998 g_client_info.user_data_for_cb_ip_assigned = NULL;
1000 __WDC_LOG_FUNC_END__;
1001 return WIFI_DIRECT_ERROR_NONE;
1004 int wifi_direct_activate(void)
1006 __WDC_LOG_FUNC_START__;
1007 GError *error = NULL;
1008 GVariant *reply = NULL;
1009 int ret = WIFI_DIRECT_ERROR_NONE;
1011 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1013 if (g_client_info.is_registered == false) {
1014 WDC_LOGE("Client is NOT registered");
1015 __WDC_LOG_FUNC_END__;
1016 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1019 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1020 "Activate", NULL, &error);
1022 ret = __net_wifidirect_gerror_to_enum(error);
1023 if (ret == WIFI_DIRECT_ERROR_NONE) {
1024 g_variant_get(reply, "(i)", &ret);
1025 g_variant_unref(reply);
1028 WDC_LOGD("%s() return : [%d]", __func__, ret);
1029 __WDC_LOG_FUNC_END__;
1033 int wifi_direct_deactivate(void)
1035 __WDC_LOG_FUNC_START__;
1036 GError *error = NULL;
1037 GVariant *reply = NULL;
1038 int ret = WIFI_DIRECT_ERROR_NONE;
1040 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1042 if (g_client_info.is_registered == false) {
1043 WDC_LOGE("Client is NOT registered");
1044 __WDC_LOG_FUNC_END__;
1045 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1048 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1049 "Deactivate", NULL, &error);
1051 ret = __net_wifidirect_gerror_to_enum(error);
1052 if (ret == WIFI_DIRECT_ERROR_NONE) {
1053 g_variant_get(reply, "(i)", &ret);
1054 g_variant_unref(reply);
1057 WDC_LOGD("%s() return : [%d]", __func__, ret);
1058 __WDC_LOG_FUNC_END__;
1062 int wifi_direct_start_discovery(bool listen_only, int timeout)
1064 __WDC_LOG_FUNC_START__;
1065 GVariantBuilder *builder = NULL;
1066 GVariant *params = NULL;
1067 GError *error = NULL;
1068 GVariant *reply = NULL;
1069 int ret = WIFI_DIRECT_ERROR_NONE;
1071 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1073 if (g_client_info.is_registered == false) {
1074 WDC_LOGE("Client is NOT registered");
1075 __WDC_LOG_FUNC_END__;
1076 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1080 WDC_LOGE("Negative value. Param [timeout]!");
1081 __WDC_LOG_FUNC_END__;
1082 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1085 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1086 g_variant_builder_add(builder, "{sv}", "Mode", g_variant_new("b", listen_only));
1087 g_variant_builder_add(builder, "{sv}", "Timeout", g_variant_new("i", timeout));
1088 params = g_variant_new("(a{sv})", builder);
1089 g_variant_builder_unref(builder);
1090 WDC_LOGI("listen only (%d) timeout (%d)", listen_only, timeout);
1092 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1093 "StartDiscovery", params, &error);
1095 ret = __net_wifidirect_gerror_to_enum(error);
1096 if (ret == WIFI_DIRECT_ERROR_NONE) {
1097 g_variant_get(reply, "(i)", &ret);
1098 g_variant_unref(reply);
1101 WDC_LOGD("%s() return : [%d]", __func__, ret);
1102 __WDC_LOG_FUNC_END__;
1106 int wifi_direct_start_discovery_specific_channel(bool listen_only,
1108 wifi_direct_discovery_channel_e channel)
1110 __WDC_LOG_FUNC_START__;
1111 GVariantBuilder *builder = NULL;
1112 GVariant *params = NULL;
1113 GError *error = NULL;
1114 GVariant *reply = NULL;
1115 int ret = WIFI_DIRECT_ERROR_NONE;
1117 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1119 if (g_client_info.is_registered == false) {
1120 WDC_LOGE("Client is NOT registered");
1121 __WDC_LOG_FUNC_END__;
1122 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1126 WDC_LOGE("Negative value. Param [timeout]!");
1127 __WDC_LOG_FUNC_END__;
1128 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1131 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1132 g_variant_builder_add(builder, "{sv}", "Mode", g_variant_new("b", listen_only));
1133 g_variant_builder_add(builder, "{sv}", "Timeout", g_variant_new("i", timeout));
1134 g_variant_builder_add(builder, "{sv}", "Channel", g_variant_new("i", channel));
1135 params = g_variant_new("(a{sv})", builder);
1136 g_variant_builder_unref(builder);
1137 WDC_LOGI("listen only (%d) timeout (%d)", listen_only, timeout);
1139 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1140 "StartDiscovery", params, &error);
1142 ret = __net_wifidirect_gerror_to_enum(error);
1143 if (ret == WIFI_DIRECT_ERROR_NONE) {
1144 g_variant_get(reply, "(i)", &ret);
1145 g_variant_unref(reply);
1148 WDC_LOGD("%s() return : [%d]", __func__, ret);
1149 __WDC_LOG_FUNC_END__;
1153 int wifi_direct_cancel_discovery(void)
1155 __WDC_LOG_FUNC_START__;
1156 GError *error = NULL;
1157 GVariant *reply = NULL;
1158 int ret = WIFI_DIRECT_ERROR_NONE;
1160 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1162 if (g_client_info.is_registered == false) {
1163 WDC_LOGE("Client is NOT registered");
1164 __WDC_LOG_FUNC_END__;
1165 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1168 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1169 "StopDiscovery", NULL, &error);
1171 ret = __net_wifidirect_gerror_to_enum(error);
1172 if (ret == WIFI_DIRECT_ERROR_NONE) {
1173 g_variant_get(reply, "(i)", &ret);
1174 g_variant_unref(reply);
1177 WDC_LOGD("%s() return : [%d]", __func__, ret);
1178 __WDC_LOG_FUNC_END__;
1183 static char **get_service_list(char *services, unsigned int *count)
1185 __WDC_LOG_FUNC_START__;
1186 char **result = NULL;
1189 unsigned int cnt = 0;
1192 char *saveptr = NULL;
1194 if (!count || !services || (services && strlen(services) <= 0)) {
1195 WDC_LOGE("Invalid parameters.");
1196 __WDC_LOG_FUNC_END__;
1201 pos2 = g_strdup(services);
1203 pos1 = strtok_r(pos1, ",\n", &saveptr);
1206 pos1 = strtok_r(NULL, ",\n", &saveptr);
1208 WDC_LOGD("Total Service Count = %d", cnt);
1211 result = (char**) g_try_malloc0_n(cnt, sizeof(char *));
1213 WDC_LOGE("Failed to allocate memory for result");
1217 pos2 = strtok_r(pos2, ",\n", &saveptr);
1218 while (pos2 != NULL) {
1219 char *s = strchr(pos2, ' ');
1222 result[i++] = strdup(pos2);
1223 pos2 = strtok_r(NULL, ",\n", &saveptr);
1237 for (j = 0; j < i && result[j] != NULL; j++)
1244 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
1246 int wifi_direct_foreach_discovered_peers(wifi_direct_discovered_peer_cb cb,
1249 __WDC_LOG_FUNC_START__;
1251 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1253 GVariant *params = NULL;
1254 GError *error = NULL;
1255 GVariant *reply = NULL;
1256 GVariantIter *iter_peers = NULL;
1257 GVariantIter *iter_peer = NULL;
1258 GVariant *var = NULL;
1260 int ret = WIFI_DIRECT_ERROR_NONE;
1262 if (g_client_info.is_registered == false) {
1263 WDC_LOGE("Client is NOT registered");
1264 __WDC_LOG_FUNC_END__;
1265 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1269 WDC_LOGE("NULL Param [callback]!");
1270 __WDC_LOG_FUNC_END__;
1271 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1274 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1275 "GetDiscoveredPeers", params, &error);
1277 ret = __net_wifidirect_gerror_to_enum(error);
1278 if (ret != WIFI_DIRECT_ERROR_NONE)
1281 g_variant_get(reply, "(iaa{sv})", &ret, &iter_peers);
1282 if (ret != WIFI_DIRECT_ERROR_NONE) {
1283 __WDC_LOG_FUNC_END__;
1284 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1287 WDC_LOGD("wifi_direct_foreach_discovered_peers() SUCCESS");
1289 while (g_variant_iter_loop(iter_peers, "a{sv}", &iter_peer)) {
1290 wifi_direct_discovered_peer_info_s *peer_list = NULL;
1292 peer_list = (wifi_direct_discovered_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_discovered_peer_info_s));
1294 WDC_LOGE("Failed to allocate memory");
1298 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
1299 if (!g_strcmp0(key, "DeviceName")) {
1300 const char *device_name = NULL;
1302 g_variant_get(var, "&s", &device_name);
1303 peer_list->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
1305 } else if (!g_strcmp0(key, "DeviceAddress")) {
1306 unsigned char mac_address[MACADDR_LEN] = {0, };
1308 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
1309 peer_list->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
1310 if (peer_list->mac_address)
1311 g_snprintf(peer_list->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
1313 } else if (!g_strcmp0(key, "InterfaceAddress")) {
1314 unsigned char intf_address[MACADDR_LEN] = {0, };
1316 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
1317 peer_list->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
1318 if (peer_list->interface_address)
1319 g_snprintf(peer_list->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
1321 } else if (!g_strcmp0(key, "Channel")) {
1322 peer_list->channel = g_variant_get_uint16(var);
1324 } else if (!g_strcmp0(key, "IsGroupOwner")) {
1325 peer_list->is_group_owner = g_variant_get_boolean(var);
1327 } else if (!g_strcmp0(key, "IsPersistentGO")) {
1328 peer_list->is_persistent_group_owner = g_variant_get_boolean(var);
1330 } else if (!g_strcmp0(key, "IsConnected")) {
1331 peer_list->is_connected = g_variant_get_boolean(var);
1333 } else if (!g_strcmp0(key, "Category")) {
1334 peer_list->primary_device_type = g_variant_get_uint16(var);
1336 } else if (!g_strcmp0(key, "SubCategory")) {
1337 peer_list->secondary_device_type = g_variant_get_uint16(var);
1339 } else if (!g_strcmp0(key, "IsWfdDevice")) {
1340 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
1341 peer_list->is_miracast_device = g_variant_get_boolean(var);
1342 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
1348 /* __wfd_client_print_entry_list(peer_list, 1); */
1349 if (!cb(peer_list, user_data)) {
1350 g_variant_iter_free(iter_peer);
1355 g_variant_iter_free(iter_peers);
1356 g_variant_unref(reply);
1357 __WDC_LOG_FUNC_END__;
1358 return WIFI_DIRECT_ERROR_NONE;
1361 int wifi_direct_connect(char *mac_address)
1363 __WDC_LOG_FUNC_START__;
1365 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1367 GVariant *params = NULL;
1368 GError *error = NULL;
1369 GVariant *reply = NULL;
1370 int ret = WIFI_DIRECT_ERROR_NONE;
1372 if (g_client_info.is_registered == false) {
1373 WDC_LOGE("Client is NOT registered");
1374 __WDC_LOG_FUNC_END__;
1375 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1379 WDC_LOGE("mac_addr is NULL");
1380 __WDC_LOG_FUNC_END__;
1381 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1384 params = g_variant_new("(s)", mac_address);
1385 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1386 "Connect", params, &error);
1388 ret = __net_wifidirect_gerror_to_enum(error);
1389 if (ret == WIFI_DIRECT_ERROR_NONE) {
1390 g_variant_get(reply, "(i)", &ret);
1391 g_variant_unref(reply);
1394 WDC_LOGD("%s() return : [%d]", __func__, ret);
1395 __WDC_LOG_FUNC_END__;
1400 int wifi_direct_cancel_connection(char *mac_address)
1402 __WDC_LOG_FUNC_START__;
1404 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1406 GVariant *params = NULL;
1407 GError *error = NULL;
1408 GVariant *reply = NULL;
1409 int ret = WIFI_DIRECT_ERROR_NONE;
1411 if (g_client_info.is_registered == false) {
1412 WDC_LOGE("Client is NOT registered");
1413 __WDC_LOG_FUNC_END__;
1414 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1418 WDC_LOGE("mac_addr is NULL");
1419 __WDC_LOG_FUNC_END__;
1420 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1423 params = g_variant_new("(s)", mac_address);
1424 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1425 "CancelConnection", params, &error);
1427 ret = __net_wifidirect_gerror_to_enum(error);
1428 if (ret == WIFI_DIRECT_ERROR_NONE) {
1429 g_variant_get(reply, "(i)", &ret);
1430 g_variant_unref(reply);
1433 WDC_LOGD("%s() return : [%d]", __func__, ret);
1434 __WDC_LOG_FUNC_END__;
1439 int wifi_direct_reject_connection(char *mac_address)
1441 __WDC_LOG_FUNC_START__;
1443 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1445 GVariant *params = NULL;
1446 GError *error = NULL;
1447 GVariant *reply = NULL;
1448 int ret = WIFI_DIRECT_ERROR_NONE;
1450 if (g_client_info.is_registered == false) {
1451 WDC_LOGE("Client is NOT registered");
1452 __WDC_LOG_FUNC_END__;
1453 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1457 WDC_LOGE("mac_addr is NULL");
1458 __WDC_LOG_FUNC_END__;
1459 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1462 params = g_variant_new("(s)", mac_address);
1463 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1464 "RejectConnection", params, &error);
1466 ret = __net_wifidirect_gerror_to_enum(error);
1467 if (ret == WIFI_DIRECT_ERROR_NONE) {
1468 g_variant_get(reply, "(i)", &ret);
1469 g_variant_unref(reply);
1472 WDC_LOGD("%s() return : [%d]", __func__, ret);
1473 __WDC_LOG_FUNC_END__;
1478 int wifi_direct_disconnect_all(void)
1480 __WDC_LOG_FUNC_START__;
1482 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1484 GError *error = NULL;
1485 GVariant *reply = NULL;
1486 int ret = WIFI_DIRECT_ERROR_NONE;
1488 if (g_client_info.is_registered == false) {
1489 WDC_LOGE("Client is NOT registered");
1490 __WDC_LOG_FUNC_END__;
1491 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1494 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1495 "DisconnectAll", NULL, &error);
1497 ret = __net_wifidirect_gerror_to_enum(error);
1498 if (ret == WIFI_DIRECT_ERROR_NONE) {
1499 g_variant_get(reply, "(i)", &ret);
1500 g_variant_unref(reply);
1503 WDC_LOGD("%s() return : [%d]", __func__, ret);
1504 __WDC_LOG_FUNC_END__;
1509 int wifi_direct_disconnect(char *mac_address)
1511 __WDC_LOG_FUNC_START__;
1513 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1515 GVariant *params = NULL;
1516 GError *error = NULL;
1517 GVariant *reply = NULL;
1518 int ret = WIFI_DIRECT_ERROR_NONE;
1520 if (g_client_info.is_registered == false) {
1521 WDC_LOGE("Client is NOT registered");
1522 __WDC_LOG_FUNC_END__;
1523 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1527 WDC_LOGE("mac_addr is NULL");
1528 __WDC_LOG_FUNC_END__;
1529 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1532 params = g_variant_new("(s)", mac_address);
1533 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1534 "Disconnect", params, &error);
1536 ret = __net_wifidirect_gerror_to_enum(error);
1537 if (ret == WIFI_DIRECT_ERROR_NONE) {
1538 g_variant_get(reply, "(i)", &ret);
1539 g_variant_unref(reply);
1542 WDC_LOGD("%s() return : [%d]", __func__, ret);
1543 __WDC_LOG_FUNC_END__;
1547 int wifi_direct_accept_connection(char *mac_address)
1549 __WDC_LOG_FUNC_START__;
1551 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1553 GVariant *params = NULL;
1554 GError *error = NULL;
1555 GVariant *reply = NULL;
1556 int ret = WIFI_DIRECT_ERROR_NONE;
1558 if (g_client_info.is_registered == false) {
1559 WDC_LOGE("Client is NOT registered");
1560 __WDC_LOG_FUNC_END__;
1561 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1565 WDC_LOGE("mac_addr is NULL");
1566 __WDC_LOG_FUNC_END__;
1567 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1570 params = g_variant_new("(s)", mac_address);
1571 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1572 "AcceptConnection", params, &error);
1574 ret = __net_wifidirect_gerror_to_enum(error);
1575 if (ret == WIFI_DIRECT_ERROR_NONE) {
1576 g_variant_get(reply, "(i)", &ret);
1577 g_variant_unref(reply);
1580 WDC_LOGD("%s() return : [%d]", __func__, ret);
1581 __WDC_LOG_FUNC_END__;
1586 int wifi_direct_foreach_connected_peers(wifi_direct_connected_peer_cb cb,
1589 __WDC_LOG_FUNC_START__;
1591 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1593 GVariant *params = NULL;
1594 GError *error = NULL;
1595 GVariant *reply = NULL;
1596 GVariantIter *iter_peers = NULL;
1597 GVariantIter *iter_peer = NULL;
1598 GVariant *var = NULL;
1600 int ret = WIFI_DIRECT_ERROR_NONE;
1602 if (g_client_info.is_registered == false) {
1603 WDC_LOGE("Client is NOT registered");
1604 __WDC_LOG_FUNC_END__;
1605 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1609 WDC_LOGE("NULL Param [callback]!");
1610 __WDC_LOG_FUNC_END__;
1611 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1615 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1616 "GetConnectedPeers", params, &error);
1618 ret = __net_wifidirect_gerror_to_enum(error);
1619 if (ret != WIFI_DIRECT_ERROR_NONE)
1622 g_variant_get(reply, "(iaa{sv})", &ret, &iter_peers);
1623 if (ret != WIFI_DIRECT_ERROR_NONE) {
1624 __WDC_LOG_FUNC_END__;
1625 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1628 WDC_LOGD("wifi_direct_foreach_connected_peers() SUCCESS");
1630 while (g_variant_iter_loop(iter_peers, "a{sv}", &iter_peer)) {
1631 wifi_direct_connected_peer_info_s *peer_list = NULL;
1633 peer_list = (wifi_direct_connected_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_connected_peer_info_s));
1635 WDC_LOGE("Failed to allocate memory");
1639 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
1640 if (!g_strcmp0(key, "DeviceName")) {
1641 const char *device_name = NULL;
1643 g_variant_get(var, "&s", &device_name);
1644 peer_list->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
1646 } else if (!g_strcmp0(key, "DeviceAddress")) {
1647 unsigned char mac_address[MACADDR_LEN] = {0, };
1649 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
1650 peer_list->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
1651 if (peer_list->mac_address)
1652 g_snprintf(peer_list->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
1654 } else if (!g_strcmp0(key, "InterfaceAddress")) {
1655 unsigned char intf_address[MACADDR_LEN] = {0, };
1657 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
1658 peer_list->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
1659 if (peer_list->interface_address)
1660 g_snprintf(peer_list->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
1662 } else if (!g_strcmp0(key, "IPAddress")) {
1663 unsigned char ip_address[IPADDR_LEN] = {0, };
1665 wifi_direct_dbus_unpack_ay(ip_address, var, IPADDR_LEN);
1666 peer_list->ip_address = (char*) g_try_malloc0(IPSTR_LEN);
1667 if (peer_list->ip_address)
1668 g_snprintf(peer_list->ip_address, IPSTR_LEN, IPSTR, IP2STR(ip_address));
1670 } else if (!g_strcmp0(key, "Channel")) {
1671 peer_list->channel = g_variant_get_uint16(var);
1673 } else if (!g_strcmp0(key, "Category")) {
1674 peer_list->primary_device_type = g_variant_get_uint16(var);
1676 } else if (!g_strcmp0(key, "SubCategory")) {
1677 peer_list->secondary_device_type = g_variant_get_uint16(var);
1679 } else if (!g_strcmp0(key, "IsWfdDevice")) {
1680 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
1681 peer_list->is_miracast_device = g_variant_get_boolean(var);
1682 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
1683 } else if (!g_strcmp0(key, "IsP2P")) {
1684 peer_list->p2p_supported = g_variant_get_boolean(var);
1691 /* __wfd_client_print_connected_peer_info(peer_list, 1); */
1692 if (!cb(peer_list, user_data)) {
1693 g_variant_iter_free(iter_peer);
1698 g_variant_iter_free(iter_peers);
1699 g_variant_unref(reply);
1701 __WDC_LOG_FUNC_END__;
1702 return WIFI_DIRECT_ERROR_NONE;
1706 int wifi_direct_create_group(void)
1708 __WDC_LOG_FUNC_START__;
1710 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1712 GError *error = NULL;
1713 GVariant *reply = NULL;
1714 int ret = WIFI_DIRECT_ERROR_NONE;
1716 if (g_client_info.is_registered == false) {
1717 WDC_LOGE("Client is NOT registered");
1718 __WDC_LOG_FUNC_END__;
1719 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1722 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1723 "CreateGroup", NULL, &error);
1725 ret = __net_wifidirect_gerror_to_enum(error);
1726 if (ret == WIFI_DIRECT_ERROR_NONE) {
1727 g_variant_get(reply, "(i)", &ret);
1728 g_variant_unref(reply);
1731 WDC_LOGD("%s() return : [%d]", __func__, ret);
1732 __WDC_LOG_FUNC_END__;
1737 int wifi_direct_destroy_group(void)
1739 __WDC_LOG_FUNC_START__;
1741 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1743 GError *error = NULL;
1744 GVariant *reply = NULL;
1745 int ret = WIFI_DIRECT_ERROR_NONE;
1747 if (g_client_info.is_registered == false) {
1748 WDC_LOGE("Client is NOT registered");
1749 __WDC_LOG_FUNC_END__;
1750 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1753 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1754 "DestroyGroup", NULL, &error);
1756 ret = __net_wifidirect_gerror_to_enum(error);
1757 if (ret == WIFI_DIRECT_ERROR_NONE) {
1758 g_variant_get(reply, "(i)", &ret);
1759 g_variant_unref(reply);
1762 WDC_LOGD("%s() return : [%d]", __func__, ret);
1763 __WDC_LOG_FUNC_END__;
1768 int wifi_direct_is_group_owner(bool *owner)
1770 __WDC_LOG_FUNC_START__;
1772 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1774 GError* error = NULL;
1775 GVariant *reply = NULL;
1776 int ret = WIFI_DIRECT_ERROR_NONE;
1779 if (g_client_info.is_registered == false) {
1780 WDC_LOGE("Client is NOT registered");
1781 __WDC_LOG_FUNC_END__;
1782 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1786 WDC_LOGE("NULL Param [owner]!");
1787 __WDC_LOG_FUNC_END__;
1788 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1791 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1796 ret = __net_wifidirect_gerror_to_enum(error);
1797 if (ret != WIFI_DIRECT_ERROR_NONE)
1800 WDC_LOGD("%s() SUCCESS", __func__);
1801 g_variant_get(reply, "(b)", &val);
1803 g_variant_unref(reply);
1805 __WDC_LOG_FUNC_END__;
1806 return WIFI_DIRECT_ERROR_NONE;
1809 int wifi_direct_is_autonomous_group(bool *autonomous_group)
1811 __WDC_LOG_FUNC_START__;
1813 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1815 GError* error = NULL;
1816 GVariant *reply = NULL;
1817 int ret = WIFI_DIRECT_ERROR_NONE;
1820 if (g_client_info.is_registered == false) {
1821 WDC_LOGE("Client is NOT registered");
1822 __WDC_LOG_FUNC_END__;
1823 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1826 if (!autonomous_group) {
1827 WDC_LOGE("NULL Param [autonomous_group]!\n");
1828 __WDC_LOG_FUNC_END__;
1829 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1832 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1837 ret = __net_wifidirect_gerror_to_enum(error);
1838 if (ret != WIFI_DIRECT_ERROR_NONE)
1841 WDC_LOGD("%s() SUCCESS", __func__);
1842 g_variant_get(reply, "(b)", &val);
1843 *autonomous_group = val;
1844 g_variant_unref(reply);
1846 __WDC_LOG_FUNC_END__;
1847 return WIFI_DIRECT_ERROR_NONE;
1851 int wifi_direct_set_group_owner_intent(int intent)
1853 __WDC_LOG_FUNC_START__;
1855 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1857 GError* error = NULL;
1858 GVariant *reply = NULL;
1859 GVariant *params = NULL;
1860 int ret = WIFI_DIRECT_ERROR_NONE;
1862 if (g_client_info.is_registered == false) {
1863 WDC_LOGE("Client is NOT registered");
1864 __WDC_LOG_FUNC_END__;
1865 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1868 if (intent < 0 || intent > 15) {
1869 WDC_LOGE("Invalid Param : intent[%d]", intent);
1870 __WDC_LOG_FUNC_END__;
1871 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1874 params = g_variant_new("(i)", intent);
1875 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1880 ret = __net_wifidirect_gerror_to_enum(error);
1881 if (ret == WIFI_DIRECT_ERROR_NONE) {
1882 g_variant_get(reply, "(i)", &ret);
1883 g_variant_unref(reply);
1886 WDC_LOGD("%s() return : [%d]", __func__, ret);
1887 __WDC_LOG_FUNC_END__;
1891 int wifi_direct_get_group_owner_intent(int *intent)
1893 __WDC_LOG_FUNC_START__;
1895 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1897 GError* error = NULL;
1898 GVariant *reply = NULL;
1900 int ret = WIFI_DIRECT_ERROR_NONE;
1902 if (g_client_info.is_registered == false) {
1903 WDC_LOGE("Client is NOT registered");
1904 __WDC_LOG_FUNC_END__;
1905 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1909 WDC_LOGE("Invalid Parameter");
1910 __WDC_LOG_FUNC_END__;
1911 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1914 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1919 ret = __net_wifidirect_gerror_to_enum(error);
1920 if (ret != WIFI_DIRECT_ERROR_NONE)
1923 g_variant_get(reply, "(ii)", &ret, &val);
1925 g_variant_unref(reply);
1927 WDC_LOGD("Intent = [%d]", *intent);
1928 WDC_LOGD("%s() return : [%d]", __func__, ret);
1929 __WDC_LOG_FUNC_END__;
1933 int wifi_direct_set_max_clients(int max)
1935 __WDC_LOG_FUNC_START__;
1937 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1939 GError* error = NULL;
1940 GVariant *reply = NULL;
1941 GVariant *params = NULL;
1942 int ret = WIFI_DIRECT_ERROR_NONE;
1944 if (g_client_info.is_registered == false) {
1945 WDC_LOGE("Client is NOT registered");
1946 __WDC_LOG_FUNC_END__;
1947 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1949 WDC_LOGD("max client [%d]\n", max);
1951 params = g_variant_new("(i)", max);
1952 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1957 ret = __net_wifidirect_gerror_to_enum(error);
1958 if (ret == WIFI_DIRECT_ERROR_NONE) {
1959 g_variant_get(reply, "(i)", &ret);
1960 g_variant_unref(reply);
1963 WDC_LOGD("%s() return : [%d]", __func__, ret);
1964 __WDC_LOG_FUNC_END__;
1968 int wifi_direct_get_max_clients(int *max)
1970 __WDC_LOG_FUNC_START__;
1972 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1974 GError* error = NULL;
1975 GVariant *reply = NULL;
1977 int ret = WIFI_DIRECT_ERROR_NONE;
1979 if (g_client_info.is_registered == false) {
1980 WDC_LOGE("Client is NOT registered");
1981 __WDC_LOG_FUNC_END__;
1982 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1986 WDC_LOGE("Invalid Parameter");
1987 __WDC_LOG_FUNC_END__;
1988 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1991 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1996 ret = __net_wifidirect_gerror_to_enum(error);
1997 if (ret != WIFI_DIRECT_ERROR_NONE)
2000 g_variant_get(reply, "(ii)", &ret, &val);
2002 g_variant_unref(reply);
2004 WDC_LOGD("max_client = [%d]", *max);
2005 WDC_LOGD("%s() return : [%d]", __func__, ret);
2006 __WDC_LOG_FUNC_END__;
2007 return WIFI_DIRECT_ERROR_NONE;
2010 int wifi_direct_get_operating_channel(int *channel)
2012 __WDC_LOG_FUNC_START__;
2014 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2016 GError* error = NULL;
2017 GVariant *reply = NULL;
2019 int ret = WIFI_DIRECT_ERROR_NONE;
2021 if (g_client_info.is_registered == false) {
2022 WDC_LOGE("Client is NOT registered");
2023 __WDC_LOG_FUNC_END__;
2024 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2028 WDC_LOGE("NULL Param [channel]!\n");
2029 __WDC_LOG_FUNC_END__;
2030 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2033 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2034 "GetOperatingChannel",
2038 ret = __net_wifidirect_gerror_to_enum(error);
2039 if (ret != WIFI_DIRECT_ERROR_NONE)
2042 g_variant_get(reply, "(ii)", &ret, &val);
2044 g_variant_unref(reply);
2046 WDC_LOGD("channel = [%d]", *channel);
2047 WDC_LOGD("%s() return : [%d]", __func__, ret);
2048 __WDC_LOG_FUNC_END__;
2049 return WIFI_DIRECT_ERROR_NONE;
2052 int wifi_direct_activate_pushbutton(void)
2054 __WDC_LOG_FUNC_START__;
2056 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2058 GError* error = NULL;
2059 GVariant *reply = NULL;
2060 int ret = WIFI_DIRECT_ERROR_NONE;
2062 if (g_client_info.is_registered == false) {
2063 WDC_LOGE("Client is NOT registered");
2064 __WDC_LOG_FUNC_END__;
2065 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2068 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
2069 "ActivatePushButton",
2073 ret = __net_wifidirect_gerror_to_enum(error);
2074 if (ret == WIFI_DIRECT_ERROR_NONE) {
2075 g_variant_get(reply, "(i)", &ret);
2076 g_variant_unref(reply);
2079 WDC_LOGD("%s() return : [%d]", __func__, ret);
2080 __WDC_LOG_FUNC_END__;
2084 int wifi_direct_set_wps_pin(char *pin)
2086 __WDC_LOG_FUNC_START__;
2088 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2090 GError* error = NULL;
2091 GVariant *reply = NULL;
2092 GVariant *params = NULL;
2093 int ret = WIFI_DIRECT_ERROR_NONE;
2095 if (g_client_info.is_registered == false) {
2096 WDC_LOGE("Client is NOT registered");
2097 __WDC_LOG_FUNC_END__;
2098 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2102 WDC_LOGE("NULL Param [pin]!");
2103 __WDC_LOG_FUNC_END__;
2104 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2106 WDC_LOGE("pin = [%s]\n", pin);
2108 params = g_variant_new("(s)", pin);
2109 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2114 ret = __net_wifidirect_gerror_to_enum(error);
2115 if (ret == WIFI_DIRECT_ERROR_NONE) {
2116 g_variant_get(reply, "(i)", &ret);
2117 g_variant_unref(reply);
2120 WDC_LOGD("%s() return : [%d]", __func__, ret);
2121 __WDC_LOG_FUNC_END__;
2126 int wifi_direct_get_wps_pin(char **pin)
2128 __WDC_LOG_FUNC_START__;
2130 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2132 GError* error = NULL;
2133 GVariant *reply = NULL;
2134 const char *str = NULL;
2135 int ret = WIFI_DIRECT_ERROR_NONE;
2137 if (g_client_info.is_registered == false) {
2138 WDC_LOGE("Client is NOT registered");
2139 __WDC_LOG_FUNC_END__;
2140 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2144 WDC_LOGE("NULL Param [pin]!");
2145 __WDC_LOG_FUNC_END__;
2146 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2149 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2154 ret = __net_wifidirect_gerror_to_enum(error);
2155 if (ret != WIFI_DIRECT_ERROR_NONE)
2158 g_variant_get(reply, "(i&s)", &ret, &str);
2159 if (pin != NULL && str != NULL)
2160 *pin = g_strdup(str);
2161 g_variant_unref(reply);
2163 WDC_LOGD("%s() return : [%d]", __func__, ret);
2164 __WDC_LOG_FUNC_END__;
2168 int wifi_direct_get_supported_wps_mode(int *wps_mode)
2170 __WDC_LOG_FUNC_START__;
2172 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2174 GError* error = NULL;
2175 GVariant *reply = NULL;
2177 int ret = WIFI_DIRECT_ERROR_NONE;
2179 if (g_client_info.is_registered == false) {
2180 WDC_LOGE("Client is NOT registered");
2181 __WDC_LOG_FUNC_END__;
2182 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2186 WDC_LOGE("NULL Param [wps_mode]!");
2187 __WDC_LOG_FUNC_END__;
2188 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2191 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2192 "GetSupportedWpsMode",
2196 ret = __net_wifidirect_gerror_to_enum(error);
2197 if (ret != WIFI_DIRECT_ERROR_NONE)
2200 g_variant_get(reply, "(ii)", &ret, &mode);
2202 g_variant_unref(reply);
2204 WDC_LOGD("%s() return : [%d]", __func__, ret);
2205 __WDC_LOG_FUNC_END__;
2209 int wifi_direct_foreach_supported_wps_types(wifi_direct_supported_wps_type_cb cb, void* user_data)
2211 __WDC_LOG_FUNC_START__;
2213 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2215 GError* error = NULL;
2216 GVariant *reply = NULL;
2218 int ret = WIFI_DIRECT_ERROR_NONE;
2219 gboolean result = FALSE;
2221 if (g_client_info.is_registered == false) {
2222 WDC_LOGE("Client is NOT registered");
2223 __WDC_LOG_FUNC_END__;
2224 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2228 WDC_LOGE("NULL Param [callback]!");
2229 __WDC_LOG_FUNC_END__;
2230 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2233 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2234 "GetSupportedWpsMode",
2238 ret = __net_wifidirect_gerror_to_enum(error);
2239 if (ret != WIFI_DIRECT_ERROR_NONE)
2242 g_variant_get(reply, "(ii)", &ret, &wps_mode);
2243 g_variant_unref(reply);
2245 if (wps_mode & WIFI_DIRECT_WPS_TYPE_PBC)
2246 result = cb(WIFI_DIRECT_WPS_TYPE_PBC, user_data);
2247 if ((result == TRUE) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY))
2248 result = cb(WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY, user_data);
2249 if ((result == TRUE) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD))
2250 result = cb(WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD, user_data);
2252 WDC_LOGD("%s() return : [%d]", __func__, ret);
2253 __WDC_LOG_FUNC_END__;
2257 int wifi_direct_get_local_wps_type(wifi_direct_wps_type_e *type)
2259 __WDC_LOG_FUNC_START__;
2261 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2263 GError* error = NULL;
2264 GVariant *reply = NULL;
2266 int ret = WIFI_DIRECT_ERROR_NONE;
2268 if (g_client_info.is_registered == false) {
2269 WDC_LOGE("Client is NOT registered");
2270 __WDC_LOG_FUNC_END__;
2271 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2275 WDC_LOGE("NULL Param [type]!\n");
2276 __WDC_LOG_FUNC_END__;
2277 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2280 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2285 ret = __net_wifidirect_gerror_to_enum(error);
2286 if (ret != WIFI_DIRECT_ERROR_NONE)
2289 g_variant_get(reply, "(ii)", &ret, &mode);
2291 g_variant_unref(reply);
2293 WDC_LOGD("%s() return : [%d]", __func__, ret);
2294 __WDC_LOG_FUNC_END__;
2298 int wifi_direct_set_req_wps_type(wifi_direct_wps_type_e type)
2300 __WDC_LOG_FUNC_START__;
2302 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2304 GError* error = NULL;
2305 GVariant *reply = NULL;
2306 GVariant *params = NULL;
2307 int ret = WIFI_DIRECT_ERROR_NONE;
2309 if (g_client_info.is_registered == false) {
2310 WDC_LOGE("Client is NOT registered");
2311 __WDC_LOG_FUNC_END__;
2312 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2315 if (type == WIFI_DIRECT_WPS_TYPE_PBC ||
2316 type == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY ||
2317 type == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) {
2318 WDC_LOGD("Param wps_mode [%d]", type);
2320 WDC_LOGE("Invalid Param [wps_mode]!");
2321 __WDC_LOG_FUNC_END__;
2322 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2325 params = g_variant_new("(i)", type);
2326 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2331 ret = __net_wifidirect_gerror_to_enum(error);
2332 if (ret == WIFI_DIRECT_ERROR_NONE) {
2333 g_variant_get(reply, "(i)", &ret);
2334 g_variant_unref(reply);
2337 WDC_LOGD("%s() return : [%d]", __func__, ret);
2338 __WDC_LOG_FUNC_END__;
2342 int wifi_direct_get_req_wps_type(wifi_direct_wps_type_e *type)
2344 __WDC_LOG_FUNC_START__;
2346 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2348 GError* error = NULL;
2349 GVariant *reply = NULL;
2353 if (g_client_info.is_registered == false) {
2354 WDC_LOGE("Client is NOT registered");
2355 __WDC_LOG_FUNC_END__;
2356 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2360 WDC_LOGE("NULL Param [type]!\n");
2361 __WDC_LOG_FUNC_END__;
2362 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2365 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2370 ret = __net_wifidirect_gerror_to_enum(error);
2371 if (ret != WIFI_DIRECT_ERROR_NONE)
2374 g_variant_get(reply, "(ii)", &ret, &mode);
2376 g_variant_unref(reply);
2378 WDC_LOGD("%s() return : [%d]", __func__, ret);
2379 __WDC_LOG_FUNC_END__;
2383 int wifi_direct_get_ssid(char **ssid)
2385 __WDC_LOG_FUNC_START__;
2387 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2389 GError* error = NULL;
2390 GVariant *reply = NULL;
2391 const char *str = NULL;
2392 int ret = WIFI_DIRECT_ERROR_NONE;
2394 if (g_client_info.is_registered == false) {
2395 WDC_LOGE("Client is NOT registered");
2396 __WDC_LOG_FUNC_END__;
2397 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2401 WDC_LOGE("Invalid Parameter");
2402 __WDC_LOG_FUNC_END__;
2403 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2406 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2411 ret = __net_wifidirect_gerror_to_enum(error);
2412 if (ret != WIFI_DIRECT_ERROR_NONE)
2415 g_variant_get(reply, "(i&s)", &ret, &str);
2416 *ssid = g_strdup(str);
2417 g_variant_unref(reply);
2419 WDC_LOGD("%s() return : [%d]", __func__, ret);
2420 __WDC_LOG_FUNC_END__;
2424 int wifi_direct_get_device_name(char **device_name)
2426 __WDC_LOG_FUNC_START__;
2428 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2430 GError* error = NULL;
2431 GVariant *reply = NULL;
2432 const char *str = NULL;
2433 int ret = WIFI_DIRECT_ERROR_NONE;
2435 if (g_client_info.is_registered == false) {
2436 WDC_LOGE("Client is NOT registered");
2437 __WDC_LOG_FUNC_END__;
2438 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2442 WDC_LOGE("Invalid Parameter");
2443 __WDC_LOG_FUNC_END__;
2444 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2447 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2452 ret = __net_wifidirect_gerror_to_enum(error);
2453 if (ret != WIFI_DIRECT_ERROR_NONE)
2456 g_variant_get(reply, "(i&s)", &ret, &str);
2457 *device_name = g_strdup(str);
2458 g_variant_unref(reply);
2460 WDC_LOGD("%s() return : [%d]", __func__, ret);
2461 __WDC_LOG_FUNC_END__;
2465 int wifi_direct_set_device_name(const char *device_name)
2467 __WDC_LOG_FUNC_START__;
2469 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2471 GError* error = NULL;
2472 GVariant *reply = NULL;
2473 GVariant *params = NULL;
2474 int ret = WIFI_DIRECT_ERROR_NONE;
2476 if (g_client_info.is_registered == false) {
2477 WDC_LOGE("Client is NOT registered");
2478 __WDC_LOG_FUNC_END__;
2479 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2483 WDC_LOGE("NULL Param [device_name]!");
2484 __WDC_LOG_FUNC_END__;
2485 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2487 WDC_LOGE("device_name = [%s]", device_name);
2489 params = g_variant_new("(s)", device_name);
2490 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2495 ret = __net_wifidirect_gerror_to_enum(error);
2496 if (ret == WIFI_DIRECT_ERROR_NONE) {
2497 g_variant_get(reply, "(i)", &ret);
2498 g_variant_unref(reply);
2501 WDC_LOGD("%s() return : [%d]", __func__, ret);
2502 __WDC_LOG_FUNC_END__;
2507 int wifi_direct_get_network_interface_name(char **name)
2509 __WDC_LOG_FUNC_START__;
2511 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2513 wifi_direct_state_e status = 0;
2514 char *get_str = NULL;
2515 GError* error = NULL;
2516 GVariant *reply = NULL;
2517 int ret = WIFI_DIRECT_ERROR_NONE;
2519 if (g_client_info.is_registered == false) {
2520 WDC_LOGE("Client is NOT registered");
2521 __WDC_LOG_FUNC_END__;
2522 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2526 WDC_LOGE("NULL Param [name]!\n");
2527 __WDC_LOG_FUNC_END__;
2528 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2531 ret = wifi_direct_get_state(&status);
2532 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]\n", status, ret);
2534 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2535 WDC_LOGE("Device is not connected!\n");
2536 __WDC_LOG_FUNC_END__;
2537 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2540 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2545 ret = __net_wifidirect_gerror_to_enum(error);
2546 if (ret != WIFI_DIRECT_ERROR_NONE)
2549 g_variant_get(reply, "(i&s)", ret, &get_str);
2550 *name = g_strdup(get_str);
2551 g_variant_unref(reply);
2553 WDC_LOGD("Interface Name = [%s]", *name);
2554 WDC_LOGD("%s() return : [%d]", __func__, ret);
2556 __WDC_LOG_FUNC_END__;
2557 return WIFI_DIRECT_ERROR_NONE;
2560 int wifi_direct_get_ip_address(char **ip_address)
2562 __WDC_LOG_FUNC_START__;
2564 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2566 GError* error = NULL;
2567 GVariant *reply = NULL;
2568 const char *str = NULL;
2569 int ret = WIFI_DIRECT_ERROR_NONE;
2571 if (g_client_info.is_registered == false) {
2572 WDC_LOGE("Client is NOT registered");
2573 __WDC_LOG_FUNC_END__;
2574 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2578 WDC_LOGE("NULL Param [ip_address]!\n");
2579 __WDC_LOG_FUNC_END__;
2580 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2583 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2588 ret = __net_wifidirect_gerror_to_enum(error);
2589 if (ret != WIFI_DIRECT_ERROR_NONE)
2592 g_variant_get(reply, "(i&s)", ret, &str);
2593 *ip_address = g_strdup(str);
2594 g_variant_unref(reply);
2596 WDC_LOGD("IP address = [%s]", *ip_address);
2597 WDC_LOGD("%s() return : [%d]", __func__, ret);
2598 __WDC_LOG_FUNC_END__;
2602 int wifi_direct_get_subnet_mask(char **subnet_mask)
2604 __WDC_LOG_FUNC_START__;
2606 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2608 wifi_direct_state_e status = 0;
2609 GError* error = NULL;
2610 GVariant *reply = NULL;
2611 char *get_str = NULL;
2612 int ret = WIFI_DIRECT_ERROR_NONE;
2614 if (g_client_info.is_registered == false) {
2615 WDC_LOGE("Client is NOT registered");
2616 __WDC_LOG_FUNC_END__;
2617 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2621 WDC_LOGE("NULL Param [subnet_mask]!");
2622 __WDC_LOG_FUNC_END__;
2623 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2626 ret = wifi_direct_get_state(&status);
2627 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]", status, ret);
2628 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2629 WDC_LOGE("Device is not connected!");
2630 __WDC_LOG_FUNC_END__;
2631 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2634 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2639 ret = __net_wifidirect_gerror_to_enum(error);
2640 if (ret != WIFI_DIRECT_ERROR_NONE)
2643 g_variant_get(reply, "(i&s)", ret, &get_str);
2644 *subnet_mask = g_strdup(get_str);
2645 g_variant_unref(reply);
2647 WDC_LOGD("Subnet Mask = [%s]", *subnet_mask);
2648 WDC_LOGD("%s() return : [%d]", __func__, ret);
2650 __WDC_LOG_FUNC_END__;
2651 return WIFI_DIRECT_ERROR_NONE;
2654 int wifi_direct_get_gateway_address(char **gateway_address)
2656 __WDC_LOG_FUNC_START__;
2658 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2660 wifi_direct_state_e status = 0;
2661 GError* error = NULL;
2662 GVariant *reply = NULL;
2663 char *get_str = NULL;
2664 int ret = WIFI_DIRECT_ERROR_NONE;
2666 if (g_client_info.is_registered == false) {
2667 WDC_LOGE("Client is NOT registered");
2668 __WDC_LOG_FUNC_END__;
2669 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2672 if (!gateway_address) {
2673 WDC_LOGE("NULL Param [gateway_address]!");
2674 __WDC_LOG_FUNC_END__;
2675 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2678 ret = wifi_direct_get_state(&status);
2679 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]", status, ret);
2680 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2681 WDC_LOGE("Device is not connected!");
2682 __WDC_LOG_FUNC_END__;
2683 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2686 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2691 ret = __net_wifidirect_gerror_to_enum(error);
2692 if (ret != WIFI_DIRECT_ERROR_NONE)
2695 g_variant_get(reply, "(i&s)", ret, &get_str);
2696 *gateway_address = g_strdup(get_str);
2697 g_variant_unref(reply);
2699 WDC_LOGD("Gateway Address = [%s]", *gateway_address);
2700 WDC_LOGD("%s() return : [%d]", __func__, ret);
2702 __WDC_LOG_FUNC_END__;
2703 return WIFI_DIRECT_ERROR_NONE;
2707 int wifi_direct_get_mac_address(char **mac_address)
2709 __WDC_LOG_FUNC_START__;
2711 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2713 GError* error = NULL;
2714 GVariant *reply = NULL;
2715 const char *str = NULL;
2716 int ret = WIFI_DIRECT_ERROR_NONE;
2718 if (g_client_info.is_registered == false) {
2719 WDC_LOGE("Client is NOT registered");
2720 __WDC_LOG_FUNC_END__;
2721 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2725 WDC_LOGE("NULL Param [mac_address]!");
2726 __WDC_LOG_FUNC_END__;
2727 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2730 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2735 ret = __net_wifidirect_gerror_to_enum(error);
2736 if (ret != WIFI_DIRECT_ERROR_NONE)
2739 g_variant_get(reply, "(i&s)", &ret, &str);
2740 *mac_address = g_strdup(str);
2741 g_variant_unref(reply);
2743 WDC_SECLOGD("MAC address = [%s]", *mac_address);
2744 WDC_LOGD("%s() return : [%d]", __func__, ret);
2745 __WDC_LOG_FUNC_END__;
2750 int wifi_direct_get_state(wifi_direct_state_e *state)
2752 __WDC_LOG_FUNC_START__;
2754 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2756 GError* error = NULL;
2757 GVariant *reply = NULL;
2759 int ret = WIFI_DIRECT_ERROR_NONE;
2761 if (g_client_info.is_registered == false) {
2762 WDC_LOGE("Client is NOT registered");
2763 __WDC_LOG_FUNC_END__;
2764 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2768 WDC_LOGE("Invalid Parameter");
2769 __WDC_LOG_FUNC_END__;
2770 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2773 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
2774 "GetState", NULL, &error);
2776 ret = __net_wifidirect_gerror_to_enum(error);
2777 if (ret != WIFI_DIRECT_ERROR_NONE)
2780 g_variant_get(reply, "(ii)", &ret, &val);
2781 *state = (wifi_direct_state_e) val;
2782 /* for CAPI : there is no WIFI_DIRECT_STATE_GROUP_OWNER type in CAPI */
2783 if (*state == WIFI_DIRECT_STATE_GROUP_OWNER)
2784 *state = WIFI_DIRECT_STATE_CONNECTED;
2786 g_variant_unref(reply);
2788 WDC_LOGD("State = [%d]", *state);
2789 WDC_LOGD("%s() return : [%d]", __func__, ret);
2790 __WDC_LOG_FUNC_END__;
2795 int wifi_direct_is_discoverable(bool* discoverable)
2797 __WDC_LOG_FUNC_START__;
2799 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2801 GError* error = NULL;
2802 GVariant *reply = NULL;
2803 int ret = WIFI_DIRECT_ERROR_NONE;
2805 if (g_client_info.is_registered == false) {
2806 WDC_LOGE("Client is NOT registered");
2807 __WDC_LOG_FUNC_END__;
2808 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2811 if (!discoverable) {
2812 WDC_LOGE("Invalid Parameter");
2813 __WDC_LOG_FUNC_END__;
2814 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2817 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
2818 "IsDiscoverable", NULL, &error);
2820 ret = __net_wifidirect_gerror_to_enum(error);
2821 if (ret != WIFI_DIRECT_ERROR_NONE)
2824 g_variant_get(reply, "(b)", discoverable);
2825 WDC_LOGD("Discoverable = [%s]", *discoverable ? "Yes" : "No");
2827 WDC_LOGD("%s() SUCCESS", __func__);
2828 g_variant_unref(reply);
2830 __WDC_LOG_FUNC_END__;
2831 return WIFI_DIRECT_ERROR_NONE;
2834 int wifi_direct_is_listening_only(bool* listen_only)
2836 __WDC_LOG_FUNC_START__;
2838 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2840 GError* error = NULL;
2841 GVariant *reply = NULL;
2842 int ret = WIFI_DIRECT_ERROR_NONE;
2844 if (g_client_info.is_registered == false) {
2845 WDC_LOGE("Client is NOT registered");
2846 __WDC_LOG_FUNC_END__;
2847 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2851 WDC_LOGE("Invalid Parameter");
2852 __WDC_LOG_FUNC_END__;
2853 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2856 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
2857 "IsListeningOnly", NULL, &error);
2859 ret = __net_wifidirect_gerror_to_enum(error);
2860 if (ret != WIFI_DIRECT_ERROR_NONE)
2863 g_variant_get(reply, "(b)", listen_only);
2865 WDC_LOGD("Is listen only = [%s]", *listen_only ? "Yes" : "No");
2866 WDC_LOGD("%s() SUCCESS", __func__);
2867 g_variant_unref(reply);
2869 __WDC_LOG_FUNC_END__;
2870 return WIFI_DIRECT_ERROR_NONE;
2874 int wifi_direct_get_primary_device_type(wifi_direct_primary_device_type_e* type)
2876 __WDC_LOG_FUNC_START__;
2878 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2881 WDC_LOGE("NULL Param [type]!");
2882 __WDC_LOG_FUNC_END__;
2883 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2886 if (g_client_info.is_registered == false) {
2887 WDC_LOGE("Client is NOT registered");
2888 __WDC_LOG_FUNC_END__;
2889 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2893 WDC_LOGD("Current primary_dev_type [%d]", WIFI_DIRECT_PRIMARY_DEVICE_TYPE_DISPLAY);
2894 *type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_DISPLAY;
2895 #else /* TIZEN_TV */
2896 WDC_LOGD("Current primary_dev_type [%d]", WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE);
2897 *type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE;
2898 #endif /* TIZEN_TV */
2900 __WDC_LOG_FUNC_END__;
2901 return WIFI_DIRECT_ERROR_NONE;
2904 int wifi_direct_get_secondary_device_type(wifi_direct_secondary_device_type_e* type)
2906 __WDC_LOG_FUNC_START__;
2908 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2910 if (g_client_info.is_registered == false) {
2911 WDC_LOGE("Client is NOT registered");
2912 __WDC_LOG_FUNC_END__;
2913 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2917 WDC_LOGE("NULL Param [type]!");
2918 __WDC_LOG_FUNC_END__;
2919 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2923 WDC_LOGD("Current second_dev_type [%d]", WIFI_DIRECT_SECONDARY_DEVICE_TYPE_DISPLAY_TV);
2924 *type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_DISPLAY_TV;
2925 #else /* TIZEN_TV */
2926 WDC_LOGD("Current second_dev_type [%d]", WIFI_DIRECT_SECONDARY_DEVICE_TYPE_TELEPHONE_SMARTPHONE_DUAL);
2927 *type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_TELEPHONE_SMARTPHONE_DUAL; /* smart phone dual mode (wifi and cellular) */
2928 #endif /* TIZEN_TV */
2930 __WDC_LOG_FUNC_END__;
2931 return WIFI_DIRECT_ERROR_NONE;
2934 int wifi_direct_set_autoconnection_mode(bool mode)
2936 __WDC_LOG_FUNC_START__;
2938 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2940 GError* error = NULL;
2941 GVariant *reply = NULL;
2942 GVariant *params = NULL;
2943 int ret = WIFI_DIRECT_ERROR_NONE;
2945 if (g_client_info.is_registered == false) {
2946 WDC_LOGE("Client is NOT registered");
2947 __WDC_LOG_FUNC_END__;
2948 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2951 params = g_variant_new("(b)", mode);
2952 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2953 "SetAutoConnectionMode",
2957 ret = __net_wifidirect_gerror_to_enum(error);
2958 if (ret == WIFI_DIRECT_ERROR_NONE) {
2959 g_variant_get(reply, "(i)", &ret);
2960 g_variant_unref(reply);
2963 WDC_LOGD("%s() return : [%d]", __func__, ret);
2964 __WDC_LOG_FUNC_END__;
2968 int wifi_direct_is_autoconnection_mode(bool *mode)
2970 __WDC_LOG_FUNC_START__;
2972 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2974 GError* error = NULL;
2975 GVariant *reply = NULL;
2977 int ret = WIFI_DIRECT_ERROR_NONE;
2979 if (g_client_info.is_registered == false) {
2980 WDC_LOGE("Client is NOT registered");
2981 __WDC_LOG_FUNC_END__;
2982 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2986 WDC_LOGE("NULL Param [mode]!");
2987 __WDC_LOG_FUNC_END__;
2988 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2991 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2992 "IsAutoConnectionMode",
2996 ret = __net_wifidirect_gerror_to_enum(error);
2997 if (ret != WIFI_DIRECT_ERROR_NONE)
3000 g_variant_get(reply, "(ib)", &ret, &val);
3002 g_variant_unref(reply);
3004 WDC_LOGD("%s() return : [%d]", __func__, ret);
3005 __WDC_LOG_FUNC_END__;
3010 int wifi_direct_set_persistent_group_enabled(bool enabled)
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)", enabled);
3028 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3029 "SetPersistentGroupEnabled",
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);
3041 __WDC_LOG_FUNC_END__;
3042 return WIFI_DIRECT_ERROR_NONE;
3046 int wifi_direct_is_persistent_group_enabled(bool *enabled)
3048 __WDC_LOG_FUNC_START__;
3050 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3052 GError* error = NULL;
3053 GVariant *reply = NULL;
3054 int ret = WIFI_DIRECT_ERROR_NONE;
3057 if (g_client_info.is_registered == false) {
3058 WDC_LOGE("Client is NOT registered");
3059 __WDC_LOG_FUNC_END__;
3060 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3064 WDC_LOGE("NULL Param [enabled]!");
3065 __WDC_LOG_FUNC_END__;
3066 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3069 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3070 "IsPersistentGroupEnabled",
3074 ret = __net_wifidirect_gerror_to_enum(error);
3075 if (ret != WIFI_DIRECT_ERROR_NONE)
3078 WDC_LOGD("%s() SUCCESS", __func__);
3079 g_variant_get(reply, "(b)", &val);
3081 g_variant_unref(reply);
3083 __WDC_LOG_FUNC_END__;
3084 return WIFI_DIRECT_ERROR_NONE;
3087 int wifi_direct_foreach_persistent_groups(wifi_direct_persistent_group_cb cb,
3090 __WDC_LOG_FUNC_START__;
3092 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3094 GVariant *params = NULL;
3095 GError *error = NULL;
3096 GVariant *reply = NULL;
3097 GVariantIter *iter_groups = NULL;
3098 GVariantIter *iter_group = NULL;
3099 GVariant *var = NULL;
3101 int ret = WIFI_DIRECT_ERROR_NONE;
3103 if (g_client_info.is_registered == false) {
3104 WDC_LOGE("Client is NOT registered");
3105 __WDC_LOG_FUNC_END__;
3106 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3110 WDC_LOGE("NULL Param [callback]!");
3111 __WDC_LOG_FUNC_END__;
3112 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3115 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3116 "GetPersistentGroups", params, &error);
3118 ret = __net_wifidirect_gerror_to_enum(error);
3119 if (ret != WIFI_DIRECT_ERROR_NONE)
3122 g_variant_get(reply, "(iaa{sv})", &ret, &iter_groups);
3123 if (ret != WIFI_DIRECT_ERROR_NONE) {
3124 __WDC_LOG_FUNC_END__;
3125 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3128 WDC_LOGD("wifi_direct_foreach_persistent_groups() SUCCESS");
3130 while (g_variant_iter_loop(iter_groups, "a{sv}", &iter_group)) {
3131 const char *ssid = NULL;
3132 char *go_mac_address = NULL;
3134 while (g_variant_iter_loop(iter_group, "{sv}", &key, &var)) {
3135 if (!g_strcmp0(key, "SSID")) {
3136 g_variant_get(var, "&s", &ssid);
3138 } else if (!g_strcmp0(key, "GOMacAddress")) {
3139 unsigned char mac_address[MACADDR_LEN] = {0, };
3141 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
3142 go_mac_address = (char*) g_try_malloc0(MACSTR_LEN);
3144 g_snprintf(go_mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
3151 ret = cb(go_mac_address, ssid, user_data);
3152 g_free(go_mac_address);
3153 go_mac_address = NULL;
3155 g_variant_iter_free(iter_group);
3160 g_variant_iter_free(iter_groups);
3161 __WDC_LOG_FUNC_END__;
3162 return WIFI_DIRECT_ERROR_NONE;
3166 int wifi_direct_remove_persistent_group(char *mac_address, const char *ssid)
3168 __WDC_LOG_FUNC_START__;
3170 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3172 GError* error = NULL;
3173 GVariant *reply = NULL;
3174 GVariant *params = NULL;
3175 int ret = WIFI_DIRECT_ERROR_NONE;
3177 if (g_client_info.is_registered == false) {
3178 WDC_LOGE("Client is NOT registered");
3179 __WDC_LOG_FUNC_END__;
3180 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3183 if (!mac_address || !ssid) {
3184 WDC_LOGE("NULL Param");
3185 __WDC_LOG_FUNC_END__;
3186 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3189 params = g_variant_new("(ss)", mac_address, ssid);
3190 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3191 "RemovePersistentGroup",
3195 ret = __net_wifidirect_gerror_to_enum(error);
3196 if (ret == WIFI_DIRECT_ERROR_NONE) {
3197 g_variant_get(reply, "(i)", &ret);
3198 g_variant_unref(reply);
3201 WDC_LOGD("%s() return : [%d]", __func__, ret);
3203 __WDC_LOG_FUNC_END__;
3204 return WIFI_DIRECT_ERROR_NONE;
3208 int wifi_direct_start_service_discovery(char *mac_address,
3209 wifi_direct_service_type_e type)
3211 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3212 __WDC_LOG_FUNC_START__;
3214 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3218 GError* error = NULL;
3219 GVariant *reply = NULL;
3220 GVariant *params = NULL;
3221 int ret = WIFI_DIRECT_ERROR_NONE;
3223 if (g_client_info.is_registered == false) {
3224 WDC_LOGE("Client is NOT registered.");
3225 __WDC_LOG_FUNC_END__;
3226 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3229 if (type >= WIFI_DIRECT_SERVICE_TYPE_ALL &&
3230 type <= WIFI_DIRECT_SERVICE_TYPE_CONTACT_INFO) {
3231 WDC_LOGD("Param service_type [%d]", type);
3233 WDC_LOGE("Invalid Param [type]!");
3234 __WDC_LOG_FUNC_END__;
3235 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3239 params = g_variant_new("(is)", type, mac_address);
3241 params = g_variant_new("(is)", type, "00:00:00:00:00:00");
3243 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3248 ret = __net_wifidirect_gerror_to_enum(error);
3249 if (ret == WIFI_DIRECT_ERROR_NONE) {
3250 g_variant_get(reply, "(i)", &ret);
3251 g_variant_unref(reply);
3254 WDC_LOGD("%s() return : [%d]", __func__, ret);
3255 __WDC_LOG_FUNC_END__;
3258 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3259 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3260 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3264 int wifi_direct_cancel_service_discovery(char *mac_address,
3265 wifi_direct_service_type_e type)
3267 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3268 __WDC_LOG_FUNC_START__;
3270 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3272 GError* error = NULL;
3273 GVariant *reply = NULL;
3274 GVariant *params = NULL;
3275 int ret = WIFI_DIRECT_ERROR_NONE;
3277 if (g_client_info.is_registered == false) {
3278 WDC_LOGE("Client is NOT registered.");
3279 __WDC_LOG_FUNC_END__;
3280 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3283 if (type >= WIFI_DIRECT_SERVICE_TYPE_ALL &&
3284 type <= WIFI_DIRECT_SERVICE_TYPE_CONTACT_INFO) {
3285 WDC_LOGD("Param service_type [%d]", type);
3287 WDC_LOGE("Invalid Param [type]!");
3288 __WDC_LOG_FUNC_END__;
3289 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3293 params = g_variant_new("(is)", type, mac_address);
3295 params = g_variant_new("(is)", type, "00:00:00:00:00:00");
3297 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3302 ret = __net_wifidirect_gerror_to_enum(error);
3303 if (ret == WIFI_DIRECT_ERROR_NONE) {
3304 g_variant_get(reply, "(i)", &ret);
3305 g_variant_unref(reply);
3308 WDC_LOGD("%s() return : [%d]", __func__, ret);
3309 __WDC_LOG_FUNC_END__;
3312 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3313 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3314 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3317 int wifi_direct_register_service(wifi_direct_service_type_e type, char *info1, char *info2, unsigned int *service_id)
3319 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3320 __WDC_LOG_FUNC_START__;
3322 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3324 GError* error = NULL;
3325 GVariant *reply = NULL;
3326 GVariant *params = NULL;
3328 int ret = WIFI_DIRECT_ERROR_NONE;
3331 if (g_client_info.is_registered == false) {
3332 WDC_LOGE("Client is NOT registered.");
3333 __WDC_LOG_FUNC_END__;
3334 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3337 if (!info1 || !info2) {
3338 WDC_LOGE("info1 or info2 is NULL");
3339 __WDC_LOG_FUNC_END__;
3340 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3343 if (type < WIFI_DIRECT_SERVICE_TYPE_ALL ||
3344 type > WIFI_DIRECT_SERVICE_TYPE_VENDOR) {
3345 WDC_LOGE("Invalid Param [type]!");
3346 __WDC_LOG_FUNC_END__;
3347 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3351 WDC_LOGE("Invalid Param [service_id]!");
3352 __WDC_LOG_FUNC_END__;
3353 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3356 WDC_LOGD("Service type [%d]", type);
3358 len = strlen(info1) + strlen(info2) + 2;
3359 WDC_LOGD("info [%s|%s], len [%d]", info1, info2, len);
3361 buf = g_try_malloc0(len);
3363 WDC_LOGE("Failed to allocate memory for buf");
3364 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
3367 g_snprintf(buf, len, "%s|%s", info1, info2);
3369 params = g_variant_new("(is)", type, buf);
3370 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3375 ret = __net_wifidirect_gerror_to_enum(error);
3376 if (ret != WIFI_DIRECT_ERROR_NONE) {
3381 g_variant_get(reply, "(ii)", &ret, service_id);
3382 g_variant_unref(reply);
3385 WDC_LOGD("%s() return : [%d]", __func__, ret);
3386 __WDC_LOG_FUNC_END__;
3389 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3390 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3391 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3394 int wifi_direct_deregister_service(unsigned int service_id)
3396 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3397 __WDC_LOG_FUNC_START__;
3399 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3401 GError* error = NULL;
3402 GVariant *reply = NULL;
3403 GVariant *params = NULL;
3404 int ret = WIFI_DIRECT_ERROR_NONE;
3406 if (g_client_info.is_registered == false) {
3407 WDC_LOGE("Client is NOT registered.");
3408 __WDC_LOG_FUNC_END__;
3409 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3412 params = g_variant_new("(i)", service_id);
3413 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3418 ret = __net_wifidirect_gerror_to_enum(error);
3419 if (ret == WIFI_DIRECT_ERROR_NONE) {
3420 g_variant_get(reply, "(i)", &ret);
3421 g_variant_unref(reply);
3424 WDC_LOGD("%s() return : [%d]", __func__, ret);
3425 __WDC_LOG_FUNC_END__;
3428 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3429 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3430 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3433 int wifi_direct_init_miracast(bool enable)
3435 __WDC_LOG_FUNC_START__;
3436 int ret = WIFI_DIRECT_ERROR_NONE;
3439 ret = wifi_direct_init_display();
3441 ret = wifi_direct_deinit_display();
3443 __WDC_LOG_FUNC_END__;
3447 int wifi_direct_get_peer_info(char* mac_address, wifi_direct_discovered_peer_info_s** peer_info)
3449 __WDC_LOG_FUNC_START__;
3451 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3453 GVariant *params = NULL;
3454 GError *error = NULL;
3455 GVariant *reply = NULL;
3456 GVariantIter *iter_peer = NULL;
3457 GVariant *var = NULL;
3459 int ret = WIFI_DIRECT_ERROR_NONE;
3461 if (g_client_info.is_registered == false) {
3462 WDC_LOGE("Client is NOT registered");
3463 __WDC_LOG_FUNC_END__;
3464 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3468 WDC_LOGE("mac_addr is NULL");
3469 __WDC_LOG_FUNC_END__;
3470 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3474 WDC_LOGE("peer_info is NULL");
3475 __WDC_LOG_FUNC_END__;
3476 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3479 params = g_variant_new("(s)", mac_address);
3480 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
3481 "GetPeerInfo", params, &error);
3483 ret = __net_wifidirect_gerror_to_enum(error);
3484 if (ret != WIFI_DIRECT_ERROR_NONE)
3487 g_variant_get(reply, "(ia{sv})", &ret, &iter_peer);
3488 if (ret != WIFI_DIRECT_ERROR_NONE) {
3489 __WDC_LOG_FUNC_END__;
3490 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3493 WDC_LOGD("wifi_direct_get_peer() SUCCESS");
3495 wifi_direct_discovered_peer_info_s *peer = NULL;
3497 peer = (wifi_direct_discovered_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_discovered_peer_info_s));
3499 WDC_LOGE("Failed to allocate memory");
3500 __WDC_LOG_FUNC_END__;
3501 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3504 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
3505 if (!g_strcmp0(key, "DeviceName")) {
3506 const char *device_name = NULL;
3508 g_variant_get(var, "&s", &device_name);
3509 peer->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
3511 } else if (!g_strcmp0(key, "DeviceAddress")) {
3512 unsigned char mac_address[MACADDR_LEN] = {0, };
3514 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
3515 peer->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
3516 if (peer->mac_address)
3517 g_snprintf(peer->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
3519 } else if (!g_strcmp0(key, "InterfaceAddress")) {
3520 unsigned char intf_address[MACADDR_LEN] = {0, };
3522 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
3523 peer->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
3524 if (peer->interface_address)
3525 g_snprintf(peer->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
3527 } else if (!g_strcmp0(key, "Channel")) {
3528 peer->channel = g_variant_get_uint16(var);
3530 } else if (!g_strcmp0(key, "IsGroupOwner")) {
3531 peer->is_group_owner = g_variant_get_boolean(var);
3533 } else if (!g_strcmp0(key, "IsPersistentGO")) {
3534 peer->is_persistent_group_owner = g_variant_get_boolean(var);
3536 } else if (!g_strcmp0(key, "IsConnected")) {
3537 peer->is_connected = g_variant_get_boolean(var);
3539 } else if (!g_strcmp0(key, "Category")) {
3540 peer->primary_device_type = g_variant_get_uint16(var);
3542 } else if (!g_strcmp0(key, "SubCategory")) {
3543 peer->secondary_device_type = g_variant_get_uint16(var);
3545 } else if (!g_strcmp0(key, "IsWfdDevice")) {
3546 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3547 peer->is_miracast_device = g_variant_get_boolean(var);
3548 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3556 g_variant_unref(reply);
3558 __WDC_LOG_FUNC_END__;
3559 return WIFI_DIRECT_ERROR_NONE;
3562 int wifi_direct_set_passphrase(const char *passphrase)
3564 __WDC_LOG_FUNC_START__;
3566 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3568 GError* error = NULL;
3569 GVariant *reply = NULL;
3570 GVariant *params = NULL;
3571 int ret = WIFI_DIRECT_ERROR_NONE;
3573 if (g_client_info.is_registered == false) {
3574 WDC_LOGE("Client is NOT registered.");
3575 __WDC_LOG_FUNC_END__;
3576 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3580 WDC_LOGE("NULL Param [passphrase]!");
3581 __WDC_LOG_FUNC_END__;
3582 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3584 WDC_LOGD("passphrase = [%s]", passphrase);
3586 params = g_variant_new("(s)", passphrase);
3587 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3592 ret = __net_wifidirect_gerror_to_enum(error);
3593 if (ret == WIFI_DIRECT_ERROR_NONE) {
3594 g_variant_get(reply, "(i)", &ret);
3595 g_variant_unref(reply);
3598 WDC_LOGD("%s() SUCCESS", __func__);
3600 __WDC_LOG_FUNC_END__;
3601 return WIFI_DIRECT_ERROR_NONE;
3604 int wifi_direct_get_passphrase(char** passphrase)
3606 __WDC_LOG_FUNC_START__;
3608 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3610 GError* error = NULL;
3611 GVariant *reply = NULL;
3612 const char *val = NULL;
3613 int ret = WIFI_DIRECT_ERROR_NONE;
3615 if (g_client_info.is_registered == false) {
3616 WDC_LOGE("Client is NOT registered.");
3617 __WDC_LOG_FUNC_END__;
3618 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3622 WDC_LOGE("NULL Param [passphrase]!");
3623 __WDC_LOG_FUNC_END__;
3624 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3627 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3632 ret = __net_wifidirect_gerror_to_enum(error);
3633 if (ret != WIFI_DIRECT_ERROR_NONE)
3636 WDC_LOGD("%s() SUCCESS", __func__);
3637 g_variant_get(reply, "(i&s)", &ret, &val);
3638 *passphrase = g_strdup(val);
3639 g_variant_unref(reply);
3641 WDC_LOGD("%s() return : [%d]", __func__, ret);
3642 __WDC_LOG_FUNC_END__;
3646 int wifi_direct_set_autoconnection_peer(char *mac_address)
3648 __WDC_LOG_FUNC_START__;
3650 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3652 GError* error = NULL;
3653 GVariant *reply = NULL;
3654 GVariant *params = NULL;
3655 int ret = WIFI_DIRECT_ERROR_NONE;
3657 if (g_client_info.is_registered == false) {
3658 WDC_LOGE("Client is NOT registered.");
3659 __WDC_LOG_FUNC_END__;
3660 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3664 WDC_LOGE("NULL Param!");
3665 __WDC_LOG_FUNC_END__;
3666 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3669 params = g_variant_new("(s)", mac_address);
3670 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
3671 "SetAutoConnectionPeer",
3675 ret = __net_wifidirect_gerror_to_enum(error);
3676 if (ret == WIFI_DIRECT_ERROR_NONE) {
3677 g_variant_get(reply, "(i)", &ret);
3678 g_variant_unref(reply);
3681 WDC_LOGD("%s() return : [%d]", __func__, ret);
3682 __WDC_LOG_FUNC_END__;
3686 int wifi_direct_init_display(void)
3688 __WDC_LOG_FUNC_START__;
3689 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3691 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3693 GError* error = NULL;
3694 GVariant *reply = NULL;
3695 int ret = WIFI_DIRECT_ERROR_NONE;
3697 if (g_client_info.is_registered == false) {
3698 WDC_LOGE("Client is NOT registered.");
3699 __WDC_LOG_FUNC_END__;
3700 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3703 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3708 ret = __net_wifidirect_gerror_to_enum(error);
3709 if (ret == WIFI_DIRECT_ERROR_NONE) {
3710 g_variant_get(reply, "(i)", &ret);
3711 g_variant_unref(reply);
3714 WDC_LOGD("%s() return : [%d]", __func__, ret);
3715 __WDC_LOG_FUNC_END__;
3717 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3718 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3719 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3722 int wifi_direct_deinit_display(void)
3724 __WDC_LOG_FUNC_START__;
3725 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3727 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3729 GError* error = NULL;
3730 GVariant *reply = 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;
3739 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3744 ret = __net_wifidirect_gerror_to_enum(error);
3745 if (ret == WIFI_DIRECT_ERROR_NONE) {
3746 g_variant_get(reply, "(i)", &ret);
3747 g_variant_unref(reply);
3750 WDC_LOGD("%s() return : [%d]", __func__, ret);
3751 __WDC_LOG_FUNC_END__;
3753 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3754 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3755 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3758 int wifi_direct_set_display(wifi_direct_display_type_e type, int port, int hdcp)
3760 __WDC_LOG_FUNC_START__;
3761 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3763 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3765 GError* error = NULL;
3766 GVariant *reply = NULL;
3767 GVariant *params = NULL;
3768 int ret = WIFI_DIRECT_ERROR_NONE;
3770 if (g_client_info.is_registered == false) {
3771 WDC_LOGE("Client is NOT registered");
3772 __WDC_LOG_FUNC_END__;
3773 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3776 if (type < WIFI_DIRECT_DISPLAY_TYPE_SOURCE ||
3777 type > WIFI_DIRECT_DISPLAY_TYPE_DUAL || port < 0 ||
3779 WDC_LOGE("Invalid paramaeters passed type[%d], port[%d], hdcp[%d]!");
3780 __WDC_LOG_FUNC_END__;
3781 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3784 params = g_variant_new("(iii)", type, port, hdcp);
3785 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3790 ret = __net_wifidirect_gerror_to_enum(error);
3791 if (ret == WIFI_DIRECT_ERROR_NONE) {
3792 g_variant_get(reply, "(i)", &ret);
3793 g_variant_unref(reply);
3796 WDC_LOGD("%s() return : [%d]", __func__, ret);
3797 __WDC_LOG_FUNC_END__;
3799 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3800 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3801 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3804 int wifi_direct_set_display_availability(bool availability)
3806 __WDC_LOG_FUNC_START__;
3807 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3809 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3811 GError* error = NULL;
3812 GVariant *reply = NULL;
3813 GVariant *params = NULL;
3814 int ret = WIFI_DIRECT_ERROR_NONE;
3816 if (g_client_info.is_registered == false) {
3817 WDC_LOGE("Client is NOT registered.");
3818 __WDC_LOG_FUNC_END__;
3819 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3823 params = g_variant_new("(i)", availability);
3824 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3829 ret = __net_wifidirect_gerror_to_enum(error);
3830 if (ret == WIFI_DIRECT_ERROR_NONE) {
3831 g_variant_get(reply, "(i)", &ret);
3832 g_variant_unref(reply);
3835 WDC_LOGD("%s() return : [%d]", __func__, ret);
3836 __WDC_LOG_FUNC_END__;
3838 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3839 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3840 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3844 int wifi_direct_get_peer_display_type(char *mac_address, wifi_direct_display_type_e *type)
3846 __WDC_LOG_FUNC_START__;
3847 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3849 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3851 GError* error = NULL;
3852 GVariant *reply = NULL;
3853 GVariant *params = NULL;
3855 int ret = WIFI_DIRECT_ERROR_NONE;
3857 if (g_client_info.is_registered == false) {
3858 WDC_LOGE("Client is NOT registered");
3859 __WDC_LOG_FUNC_END__;
3860 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3863 if (!mac_address || !type) {
3864 WDC_LOGE("NULL Param!");
3865 __WDC_LOG_FUNC_END__;
3866 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3869 params = g_variant_new("(s)", mac_address);
3870 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3875 ret = __net_wifidirect_gerror_to_enum(error);
3876 if (ret != WIFI_DIRECT_ERROR_NONE)
3879 g_variant_get(reply, "(ii)", &ret, &val);
3881 g_variant_unref(reply);
3883 WDC_LOGD("%s() return : [%d]", __func__, ret);
3884 __WDC_LOG_FUNC_END__;
3886 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3887 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3888 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3891 int wifi_direct_get_peer_display_availability(char *mac_address, bool *availability)
3893 __WDC_LOG_FUNC_START__;
3894 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3896 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3898 GError* error = NULL;
3899 GVariant *reply = NULL;
3900 GVariant *params = NULL;
3902 int ret = WIFI_DIRECT_ERROR_NONE;
3904 if (g_client_info.is_registered == false) {
3905 WDC_LOGE("Client is NOT registered");
3906 __WDC_LOG_FUNC_END__;
3907 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3910 if (!mac_address || !availability) {
3911 WDC_LOGE("NULL Param!");
3912 __WDC_LOG_FUNC_END__;
3913 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3916 params = g_variant_new("(s)", mac_address);
3917 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3918 "GetPeerAvailability",
3922 ret = __net_wifidirect_gerror_to_enum(error);
3923 if (ret != WIFI_DIRECT_ERROR_NONE)
3926 g_variant_get(reply, "(ii)", &ret, &val);
3927 *availability = val;
3928 g_variant_unref(reply);
3930 WDC_LOGD("%s() return : [%d]", __func__, ret);
3931 __WDC_LOG_FUNC_END__;
3933 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3934 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3935 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3938 int wifi_direct_get_peer_display_hdcp(char *mac_address, int *hdcp)
3940 __WDC_LOG_FUNC_START__;
3941 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3943 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3945 GError* error = NULL;
3946 GVariant *reply = NULL;
3947 GVariant *params = NULL;
3949 int ret = WIFI_DIRECT_ERROR_NONE;
3951 if (g_client_info.is_registered == false) {
3952 WDC_LOGE("Client is NOT registered");
3953 __WDC_LOG_FUNC_END__;
3954 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3957 if (!mac_address || !hdcp) {
3958 WDC_LOGE("NULL Param!");
3959 __WDC_LOG_FUNC_END__;
3960 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3963 params = g_variant_new("(s)", mac_address);
3964 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3969 ret = __net_wifidirect_gerror_to_enum(error);
3970 if (ret != WIFI_DIRECT_ERROR_NONE)
3973 g_variant_get(reply, "(ii)", &ret, &val);
3975 g_variant_unref(reply);
3977 WDC_LOGD("%s() return : [%d]", __func__, ret);
3978 __WDC_LOG_FUNC_END__;
3980 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3981 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3982 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3985 int wifi_direct_get_peer_display_port(char *mac_address, int *port)
3987 __WDC_LOG_FUNC_START__;
3988 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3990 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3992 GError* error = NULL;
3993 GVariant *reply = NULL;
3994 GVariant *params = NULL;
3996 int ret = WIFI_DIRECT_ERROR_NONE;
3998 if (g_client_info.is_registered == false) {
3999 WDC_LOGE("Client is NOT registered");
4000 __WDC_LOG_FUNC_END__;
4001 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4004 if (!mac_address || !port) {
4005 WDC_LOGE("NULL Param!");
4006 __WDC_LOG_FUNC_END__;
4007 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4010 params = g_variant_new("(s)", mac_address);
4011 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4016 ret = __net_wifidirect_gerror_to_enum(error);
4017 if (ret != WIFI_DIRECT_ERROR_NONE)
4020 g_variant_get(reply, "(ii)", &ret, &val);
4022 g_variant_unref(reply);
4024 WDC_LOGD("%s() return : [%d]", __func__, ret);
4025 __WDC_LOG_FUNC_END__;
4027 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4028 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4029 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4032 int wifi_direct_get_peer_display_throughput(char *mac_address, int *throughput)
4034 __WDC_LOG_FUNC_START__;
4035 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
4037 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
4039 GError* error = NULL;
4040 GVariant *reply = NULL;
4041 GVariant *params = NULL;
4043 int ret = WIFI_DIRECT_ERROR_NONE;
4045 if (g_client_info.is_registered == false) {
4046 WDC_LOGE("Client is NOT registered");
4047 __WDC_LOG_FUNC_END__;
4048 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4051 if (!mac_address || !throughput) {
4052 WDC_LOGE("NULL Param!");
4053 __WDC_LOG_FUNC_END__;
4054 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4057 params = g_variant_new("(s)", mac_address);
4058 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4059 "GetPeerThroughput",
4063 ret = __net_wifidirect_gerror_to_enum(error);
4064 if (ret != WIFI_DIRECT_ERROR_NONE)
4067 g_variant_get(reply, "(ii)", &ret, &val);
4069 g_variant_unref(reply);
4071 WDC_LOGD("%s() return : [%d]", __func__, ret);
4072 __WDC_LOG_FUNC_END__;
4074 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4075 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4076 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4079 int wifi_direct_set_session_timer(int seconds)
4081 __WDC_LOG_FUNC_START__;
4083 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
4085 GError* error = NULL;
4086 GVariant *reply = NULL;
4087 GVariant *params = NULL;
4088 int ret = WIFI_DIRECT_ERROR_NONE;
4090 if (g_client_info.is_registered == false) {
4091 WDC_LOGE("Client is NOT registered.");
4092 __WDC_LOG_FUNC_END__;
4093 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4096 WDC_LOGE("Negative Timer Value");
4097 __WDC_LOG_FUNC_END__;
4098 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4101 WDC_LOGD("seconds = [%d]", seconds);
4103 params = g_variant_new("(i)", seconds);
4104 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
4109 ret = __net_wifidirect_gerror_to_enum(error);
4110 if(ret == WIFI_DIRECT_ERROR_NONE) {
4111 g_variant_get(reply, "(i)", &ret);
4112 g_variant_unref(reply);
4115 WDC_LOGD("%s() SUCCESS", __func__);
4117 __WDC_LOG_FUNC_END__;
4118 return WIFI_DIRECT_ERROR_NONE;
4122 int wifi_direct_get_session_timer(int *seconds)
4124 __WDC_LOG_FUNC_START__;
4126 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
4128 GError* error = NULL;
4129 GVariant *reply = NULL;
4131 int ret = WIFI_DIRECT_ERROR_NONE;
4133 if (g_client_info.is_registered == false) {
4134 WDC_LOGE("Client is NOT registered");
4135 __WDC_LOG_FUNC_END__;
4136 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4140 WDC_LOGE("Invalid Parameter");
4141 __WDC_LOG_FUNC_END__;
4142 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4145 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
4150 ret = __net_wifidirect_gerror_to_enum(error);
4151 if (ret != WIFI_DIRECT_ERROR_NONE)
4154 g_variant_get(reply, "(ii)", &ret, &val);
4156 g_variant_unref(reply);
4158 WDC_LOGD("Session Timer = [%d] Seconds", *seconds);
4159 WDC_LOGD("%s() return : [%d]", __func__, ret);
4161 __WDC_LOG_FUNC_END__;
4165 int wifi_direct_set_auto_group_removal(bool enable)
4167 __WDC_LOG_FUNC_START__;
4169 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
4171 GError* error = NULL;
4172 GVariant *reply = NULL;
4173 GVariant *params = NULL;
4174 int ret = WIFI_DIRECT_ERROR_NONE;
4176 if (g_client_info.is_registered == false) {
4177 WDC_LOGE("Client is NOT registered");
4178 __WDC_LOG_FUNC_END__;
4179 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4182 params = g_variant_new("(b)", enable);
4183 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
4184 "SetAutoGroupRemoval",
4188 ret = __net_wifidirect_gerror_to_enum(error);
4189 if (ret == WIFI_DIRECT_ERROR_NONE) {
4190 g_variant_get(reply, "(i)", &ret);
4191 g_variant_unref(reply);
4194 WDC_LOGD("%s() return : [%d]", __func__, ret);
4195 __WDC_LOG_FUNC_END__;