2 * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <arpa/inet.h>
18 #include <netinet/in.h>
20 #include "wifi_internal.h"
21 #include "network_internal.h"
22 #include "network_dbus.h"
24 #define DBUS_REPLY_TIMEOUT_SYNC (10 * 1000)
26 #define WIFI_SECURITY_NONE "none"
27 #define WIFI_SECURITY_WEP "wep"
28 #define WIFI_SECURITY_WPA_PSK "psk"
29 #define WIFI_SECURITY_WPA_FT_PSK "ft_psk"
30 #define WIFI_SECURITY_EAP "ieee8021x"
31 #define WIFI_SECURITY_SAE "sae"
32 #define WIFI_SECURITY_OWE "owe"
33 #define WIFI_SECURITY_DPP "dpp"
36 static int __net_error_string_to_enum(const char *error)
38 WIFI_LOG(WIFI_INFO, "Passed error string [%s]", error);
40 if (NULL != strstr(error, "NoReply"))
41 return NET_ERR_TIME_OUT;
42 else if (NULL != strstr(error, "Device or resource busy"))
43 return NET_ERR_FAIL_DEVICE_BUSY;
44 else if (NULL != strstr(error, "UnknownMethod"))
45 return NET_ERR_UNKNOWN_METHOD;
46 else if (NULL != strstr(error, "InvalidArguments"))
47 return NET_ERR_INVALID_PARAM;
48 else if (NULL != strstr(error, "AccessDenied"))
49 return NET_ERR_ACCESS_DENIED;
50 else if (NULL != strstr(error, "PermissionDenied"))
51 return NET_ERR_ACCESS_DENIED;
52 else if (NULL != strstr(error, "PassphraseRequired"))
53 return NET_ERR_INVALID_OPERATION;
54 else if (NULL != strstr(error, "NotRegistered"))
55 return NET_ERR_INVALID_OPERATION;
56 else if (NULL != strstr(error, "NotUnique"))
57 return NET_ERR_INVALID_OPERATION;
58 else if (NULL != strstr(error, "NotSupported"))
59 return NET_ERR_NOT_SUPPORTED;
60 else if (NULL != strstr(error, "NotImplemented"))
61 return NET_ERR_NOT_SUPPORTED;
62 else if (NULL != strstr(error, "NotFound"))
63 return NET_ERR_NOT_SUPPORTED;
64 else if (NULL != strstr(error, "NoCarrier"))
65 return NET_ERR_NOT_SUPPORTED;
66 else if (NULL != strstr(error, "InProgress"))
67 return NET_ERR_IN_PROGRESS;
68 else if (NULL != strstr(error, "AlreadyExists"))
69 return NET_ERR_INVALID_OPERATION;
70 else if (NULL != strstr(error, "AlreadyEnabled"))
71 return NET_ERR_INVALID_OPERATION;
72 else if (NULL != strstr(error, "AlreadyDisabled"))
73 return NET_ERR_INVALID_OPERATION;
74 else if (NULL != strstr(error, "AlreadyConnected"))
75 return NET_ERR_ACTIVE_CONNECTION_EXISTS;
76 else if (NULL != strstr(error, "NotConnected"))
77 return NET_ERR_NO_ACTIVE_CONNECTIONS;
78 else if (NULL != strstr(error, "OperationAborted"))
79 return NET_ERR_OPERATION_ABORTED;
80 else if (NULL != strstr(error, "OperationTimeout"))
81 return NET_ERR_TIME_OUT;
82 else if (NULL != strstr(error, "InvalidService"))
83 return NET_ERR_NO_SERVICE;
84 else if (NULL != strstr(error, "InvalidProperty"))
85 return NET_ERR_INVALID_OPERATION;
86 else if (NULL != strstr(error, "NoProfile"))
87 return NET_ERR_NO_PROFILE;
88 else if (NULL != strstr(error, "FailTdlsDiscover"))
89 return NET_ERR_FAIL_TDLS_DISCOVER;
91 return NET_ERR_UNKNOWN;
94 static int __net_netconfig_error_string_to_enum(const char* error)
96 WIFI_LOG(WIFI_ERROR, "Passed error value [%s]", error);
99 return NET_ERR_UNKNOWN;
101 if (NULL != strstr(error, "WifiDriverFailed"))
102 return NET_ERR_WIFI_DRIVER_FAILURE;
103 else if (NULL != strstr(error, "PermissionDenied"))
104 return NET_ERR_SECURITY_RESTRICTED;
105 else if (NULL != strstr(error, "InProgress"))
106 return NET_ERR_WIFI_DRIVER_LOAD_INPROGRESS;
107 else if (NULL != strstr(error, "AccessDenied"))
108 return NET_ERR_ACCESS_DENIED;
109 else if (NULL != strstr(error, "NoProfile"))
110 return NET_ERR_NO_PROFILE;
111 return NET_ERR_UNKNOWN;
114 static net_wifi_security_type_e __net_wifi_security_type_to_int(const gchar *type)
116 net_wifi_security_type_e ret = WIFI_SEC_NONE;
121 if (g_strcmp0(type, WIFI_SECURITY_NONE) == 0)
123 else if (g_strcmp0(type, WIFI_SECURITY_WEP) == 0)
125 else if (g_strcmp0(type, WIFI_SECURITY_WPA_PSK) == 0)
126 ret = WIFI_SEC_WPA_PSK;
127 else if (g_strcmp0(type, WIFI_SECURITY_EAP) == 0)
129 else if (g_strcmp0(type, WIFI_SECURITY_WPA_FT_PSK) == 0)
130 ret = WIFI_SEC_FT_PSK;
131 else if (g_strcmp0(type, WIFI_SECURITY_SAE) == 0)
133 else if (g_strcmp0(type, WIFI_SECURITY_OWE) == 0)
135 else if (g_strcmp0(type, WIFI_SECURITY_DPP) == 0)
138 WIFI_LOG(WIFI_ERROR, "Not supported type (%s)", type);
143 static int __net_wifi_last_error_to_enum(const gchar *last_error)
145 wifi_manager_error_e ret = WIFI_MANAGER_ERROR_OPERATION_FAILED;
147 if (g_strcmp0(last_error, "ERROR_NONE") == 0) {
148 ret = WIFI_MANAGER_ERROR_NONE;
149 } else if (g_strcmp0(last_error, "invalid-key") == 0) {
150 ret = WIFI_MANAGER_ERROR_INVALID_KEY;
151 } else if (g_strcmp0(last_error, "dhcp-failed") == 0) {
152 ret = WIFI_MANAGER_ERROR_DHCP_FAILED;
154 WIFI_LOG(WIFI_ERROR, "Not supported error type (%s)", last_error);
155 ret = WIFI_MANAGER_ERROR_NONE;
161 gchar *__net_wifi_eap_type_to_string(net_wifi_eap_type_e eap_type)
166 case WIFI_MANAGER_EAP_PEAP:
167 type = g_strdup("PEAP");
169 case WIFI_MANAGER_EAP_TLS:
170 type = g_strdup("TLS");
172 case WIFI_MANAGER_EAP_TTLS:
173 type = g_strdup("TTLS");
175 case WIFI_MANAGER_EAP_SIM:
176 type = g_strdup("SIM");
178 case WIFI_MANAGER_EAP_AKA:
179 type = g_strdup("AKA");
185 gchar *__net_wifi_eap_auth_type_to_string(net_wifi_eap_auth_type_e eap_auth_type)
189 switch (eap_auth_type) {
190 case WIFI_MANAGER_EAP_AUTH_PAP:
191 type = g_strdup("PAP");
193 case WIFI_MANAGER_EAP_AUTH_MSCHAP:
194 type = g_strdup("MSCHAP");
196 case WIFI_MANAGER_EAP_AUTH_MSCHAPV2:
197 type = g_strdup("MSCHAPV2");
199 case WIFI_MANAGER_EAP_AUTH_GTC:
200 type = g_strdup("GTC");
202 case WIFI_MANAGER_EAP_AUTH_MD5:
203 type = g_strdup("MD5");
206 case WIFI_MANAGER_EAP_AUTH_NONE:
213 net_wifi_eap_type_e __net_wifi_eap_type_to_int(const gchar *type)
215 net_wifi_eap_type_e ret = -1;
220 if (g_strcmp0(type, "PEAP") == 0)
221 ret = WIFI_MANAGER_EAP_PEAP;
222 else if (g_strcmp0(type, "TLS") == 0)
223 ret = WIFI_MANAGER_EAP_TLS;
224 else if (g_strcmp0(type, "TTLS") == 0)
225 ret = WIFI_MANAGER_EAP_TTLS;
226 else if (g_strcmp0(type, "SIM") == 0)
227 ret = WIFI_MANAGER_EAP_SIM;
228 else if (g_strcmp0(type, "AKA") == 0)
229 ret = WIFI_MANAGER_EAP_AKA;
231 WIFI_LOG(WIFI_ERROR, "Not supported type (%s)", type);
236 static net_wifi_eap_auth_type_e __net_wifi_eap_auth_type_to_int(const gchar *type)
238 net_wifi_eap_auth_type_e ret = WIFI_MANAGER_EAP_AUTH_TYPE_NONE;
243 if (g_strcmp0(type, "PAP") == 0)
244 ret = WIFI_MANAGER_EAP_AUTH_PAP;
245 else if (g_strcmp0(type, "MSCHAP") == 0)
246 ret = WIFI_MANAGER_EAP_AUTH_MSCHAP;
247 else if (g_strcmp0(type, "MSCHAPV2") == 0)
248 ret = WIFI_MANAGER_EAP_AUTH_MSCHAPV2;
249 else if (g_strcmp0(type, "GTC") == 0)
250 ret = WIFI_MANAGER_EAP_AUTH_GTC;
251 else if (g_strcmp0(type, "MD5") == 0)
252 ret = WIFI_MANAGER_EAP_AUTH_MD5;
254 WIFI_LOG(WIFI_ERROR, "Not supported type (%s)", type);
259 static void __net_open_connection_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
261 __NETWORK_FUNC_ENTER__;
263 GDBusConnection *conn = NULL;
264 GError *error = NULL;
265 net_err_e Error = NET_ERR_NONE;
267 net_event_info_s *event_data = NULL;
268 net_profile_info_s prof_info;
269 network_info_s *network_info = (network_info_s *)user_data;
270 network_request_table_s *request_table;
271 network_request_table_s *open_info;
272 network_request_table_s *wps_info;
274 WIFI_LOG(WIFI_INFO, "__net_open_connection_reply() called");
276 conn = G_DBUS_CONNECTION(source_object);
277 reply = g_dbus_connection_call_finish(conn, res, &error);
280 Error = __net_error_string_to_enum(error->message);
281 if (error->code == G_IO_ERROR_CANCELLED) {
282 WIFI_LOG(WIFI_INFO, "Ignore open connection reply, as operation is cancelled");
284 __NETWORK_FUNC_EXIT__;
292 g_variant_unref(reply);
294 if (Error == NET_ERR_NONE) {
295 __NETWORK_FUNC_EXIT__;
299 if (false == _wifi_find_network_info_from_handle_list(network_info)) {
300 __NETWORK_FUNC_EXIT__;
304 WIFI_LOG(WIFI_ERROR, "Connection open failed[%d]", Error);
306 event_data = g_try_malloc0(sizeof(net_event_info_s));
307 if (event_data == NULL) {
308 __NETWORK_FUNC_EXIT__;
312 request_table = network_info->request_table;
313 open_info = &request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION];
314 wps_info = &request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS];
316 memset(&prof_info, 0, sizeof(net_profile_info_s));
318 if (open_info->flag == TRUE) {
319 g_strlcpy(event_data->ProfileName, open_info->ProfileName,
320 NET_PROFILE_NAME_LEN_MAX + 1);
321 memset(open_info, 0, sizeof(network_request_table_s));
323 event_data->Error = Error;
325 if (Error == NET_ERR_ACTIVE_CONNECTION_EXISTS) {
326 Error = net_get_profile_info(network_info, event_data->ProfileName, &prof_info);
327 if (Error != NET_ERR_NONE) {
328 WIFI_LOG(WIFI_ERROR, "Fail to get profile info[%s]",
329 _net_print_error(Error));
331 event_data->Datalength = 0;
332 event_data->Data = NULL;
334 event_data->Datalength = sizeof(net_profile_info_s);
335 event_data->Data = &prof_info;
339 event_data->Event = NET_EVENT_OPEN_RSP;
340 WIFI_LOG(WIFI_INFO, "Sending NET_EVENT_OPEN_RSP Error[%s]",
341 _net_print_error(event_data->Error));
343 } else if (wps_info->flag == TRUE) {
344 g_strlcpy(event_data->ProfileName, wps_info->ProfileName,
345 NET_PROFILE_NAME_LEN_MAX + 1);
346 memset(wps_info, 0, sizeof(network_request_table_s));
348 event_data->Error = Error;
350 if (Error == NET_ERR_ACTIVE_CONNECTION_EXISTS) {
351 Error = net_get_profile_info(network_info, event_data->ProfileName, &prof_info);
352 if (Error != NET_ERR_NONE) {
353 WIFI_LOG(WIFI_ERROR, "Fail to get profile info[%s]",
354 _net_print_error(Error));
356 event_data->Datalength = 0;
357 event_data->Data = NULL;
359 event_data->Datalength = sizeof(net_profile_info_s);
360 event_data->Data = &prof_info;
364 event_data->Event = NET_EVENT_WIFI_WPS_RSP;
366 WIFI_LOG(WIFI_INFO, "Sending NET_EVENT_WIFI_WPS_RSP Error[%s]",
367 _net_print_error(event_data->Error));
371 __NETWORK_FUNC_EXIT__;
375 if (network_info->event_callback)
376 network_info->event_callback(event_data, network_info->user_data);
378 if (prof_info.vsie_list)
379 g_slist_free_full(prof_info.vsie_list, g_free);
381 if (prof_info.bssid_list)
382 g_slist_free_full(prof_info.bssid_list, g_free);
386 __NETWORK_FUNC_EXIT__;
389 static void __net_scan_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
391 __NETWORK_FUNC_ENTER__;
394 GDBusConnection *conn = NULL;
395 GError *error = NULL;
396 net_err_e Error = NET_ERR_NONE;
397 net_event_info_s *event_data;
399 network_info_s *network_info = (network_info_s *)user_data;
400 network_request_table_s *request_table;
401 network_request_table_s *bssid_scan_info;
403 event_data = g_try_malloc0(sizeof(net_event_info_s));
404 if (event_data == NULL) {
405 __NETWORK_FUNC_EXIT__;
409 conn = G_DBUS_CONNECTION(source_object);
410 reply = g_dbus_connection_call_finish(conn, res, &error);
413 WIFI_LOG(WIFI_ERROR, "Scan failed. Error [%s]",
415 Error = __net_error_string_to_enum(error->message);
416 if (error->code == G_IO_ERROR_CANCELLED) {
417 WIFI_LOG(WIFI_INFO, "Ignore scan reply, as operation is cancelled");
419 __NETWORK_FUNC_EXIT__;
427 g_variant_unref(reply);
429 request_table = network_info->request_table;
430 bssid_scan_info = &request_table[NETWORK_REQUEST_TYPE_BSSID_SCAN];
432 /* Show scan list even if device is in association state */
433 if (bssid_scan_info->flag == TRUE && Error == NET_ERR_FAIL_DEVICE_BUSY) {
434 memset(&request_table[NETWORK_REQUEST_TYPE_BSSID_SCAN],
435 0, sizeof(network_request_table_s));
438 event_data->Event = NET_EVENT_WIFI_BSSID_SCAN_IND;
439 WIFI_LOG(WIFI_INFO, "Sending NET_EVENT_WIFI_BSSID_SCAN_IND[%s]",
440 _net_print_error(event_data->Error));
441 event_data->Error = NET_ERR_NONE;
442 event_data->Datalength = 0;
443 event_data->Data = NULL;
445 if (network_info->event_callback)
446 network_info->event_callback(event_data, network_info->user_data);
450 __NETWORK_FUNC_EXIT__;
452 } else if (Error == NET_ERR_IN_PROGRESS) {
453 /* should retry scan after receiving scan result */
454 if (request_table[NETWORK_REQUEST_TYPE_SCAN].flag == TRUE) {
455 WIFI_LOG(WIFI_INFO, "Full channel Scan pending");
456 network_info->scan_pending = TRUE;
457 } else if (bssid_scan_info->flag == TRUE) {
458 WIFI_LOG(WIFI_INFO, "BSSID Scan pending");
459 network_info->scan_pending = TRUE;
461 } else if (Error != NET_ERR_NONE) {
462 WIFI_LOG(WIFI_ERROR, "Scan failed. Error [%d]", Error);
464 if (request_table[NETWORK_REQUEST_TYPE_SCAN].flag == TRUE) {
465 memset(&request_table[NETWORK_REQUEST_TYPE_SCAN],
466 0, sizeof(network_request_table_s));
468 event_data->Event = NET_EVENT_WIFI_SCAN_RSP;
469 } else if (bssid_scan_info->flag == TRUE) {
470 memset(&request_table[NETWORK_REQUEST_TYPE_BSSID_SCAN],
471 0, sizeof(network_request_table_s));
473 event_data->Event = NET_EVENT_WIFI_BSSID_SCAN_IND;
476 if (event_data->Event) {
477 event_data->Datalength = 0;
478 event_data->Data = NULL;
479 event_data->Error = Error;
481 if (network_info->event_callback)
482 network_info->event_callback(event_data, network_info->user_data);
486 __NETWORK_FUNC_EXIT__;
490 WIFI_LOG(WIFI_INFO, "Scan Request success");
493 __NETWORK_FUNC_EXIT__;
496 static void __net_close_connection_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
498 __NETWORK_FUNC_ENTER__;
500 GDBusConnection *conn = NULL;
501 GError *error = NULL;
502 net_err_e Error = NET_ERR_NONE;
504 net_event_info_s *event_data = NULL;
505 network_info_s *network_info = (network_info_s *)user_data;
506 network_request_table_s *request_table;
507 network_request_table_s *close_info;
509 WIFI_LOG(WIFI_INFO, "__net_close_connection_reply() called");
511 event_data = g_try_malloc0(sizeof(net_event_info_s));
512 if (event_data == NULL) {
513 __NETWORK_FUNC_EXIT__;
517 conn = G_DBUS_CONNECTION(source_object);
518 reply = g_dbus_connection_call_finish(conn, res, &error);
521 Error = __net_error_string_to_enum(error->message);
522 if (error->code == G_IO_ERROR_CANCELLED) {
523 WIFI_LOG(WIFI_INFO, "Ignore close connection reply, as operation is cancelled");
525 __NETWORK_FUNC_EXIT__;
533 g_variant_unref(reply);
535 if (Error == NET_ERR_NONE)
538 WIFI_LOG(WIFI_ERROR, "Connection close failed[%d]", Error);
540 request_table = network_info->request_table;
541 close_info = &request_table[NETWORK_REQUEST_TYPE_CLOSE_CONNECTION];
543 if (close_info->flag == TRUE) {
544 g_strlcpy(event_data->ProfileName, close_info->ProfileName,
545 NET_PROFILE_NAME_LEN_MAX + 1);
546 memset(close_info, 0, sizeof(network_request_table_s));
548 event_data->Error = Error;
549 event_data->Datalength = 0;
550 event_data->Data = NULL;
551 event_data->Event = NET_EVENT_CLOSE_RSP;
553 WIFI_LOG(WIFI_INFO, "Sending NET_EVENT_CLOSE_RSP Error[%s]",
554 _net_print_error(event_data->Error));
557 __NETWORK_FUNC_EXIT__;
562 if (network_info->event_callback)
563 network_info->event_callback(event_data, network_info->user_data);
567 __NETWORK_FUNC_EXIT__;
570 static void __net_wifi_power_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
572 __NETWORK_FUNC_ENTER__;
574 GDBusConnection *conn = NULL;
575 GError *error = NULL;
576 net_err_e Error = NET_ERR_NONE;
577 net_event_info_s *event_data = NULL;
579 network_info_s *network_info = (network_info_s *)user_data;
580 network_request_table_s *request_table;
582 WIFI_LOG(WIFI_INFO, "__net_wifi_power_reply() called");
584 event_data = g_try_malloc0(sizeof(net_event_info_s));
585 if (event_data == NULL) {
586 __NETWORK_FUNC_EXIT__;
590 conn = G_DBUS_CONNECTION(source_object);
591 reply = g_dbus_connection_call_finish(conn, res, &error);
594 Error = __net_netconfig_error_string_to_enum(error->message);
595 if (error->code == G_IO_ERROR_CANCELLED) {
596 WIFI_LOG(WIFI_INFO, "Ignore wifi power reply, as operation is cancelled");
598 __NETWORK_FUNC_EXIT__;
606 g_variant_unref(reply);
608 request_table = network_info->request_table;
610 if (Error != NET_ERR_NONE) {
611 WIFI_LOG(WIFI_ERROR, "Wi-Fi power operation failed. Error [%d]", Error);
613 if (Error != NET_ERR_WIFI_DRIVER_LOAD_INPROGRESS) {
614 if (request_table[NETWORK_REQUEST_TYPE_WIFI_POWER].flag == TRUE) {
615 memset(&request_table[NETWORK_REQUEST_TYPE_WIFI_POWER],
616 0, sizeof(network_request_table_s));
618 event_data->Event = NET_EVENT_WIFI_POWER_RSP;
621 "Sending NET_EVENT_WIFI_POWER_RSP Wi-Fi: %d Error = %d",
622 network_info->wifi_state, Error);
624 event_data->Datalength = sizeof(net_wifi_state_e);
625 event_data->Data = &(network_info->wifi_state);
626 event_data->Error = Error;
631 __NETWORK_FUNC_EXIT__;
635 if (network_info->event_callback)
636 network_info->event_callback(event_data, network_info->user_data);
639 __NETWORK_FUNC_EXIT__;
642 static void __net_bssid_scan_wifi_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
644 __NETWORK_FUNC_ENTER__;
646 GDBusConnection *conn = NULL;
647 GError *error = NULL;
649 net_err_e Error = NET_ERR_NONE;
650 net_event_info_s *event_data = NULL;
651 network_info_s *network_info = (network_info_s *)user_data;
652 network_request_table_s *request_table;
654 event_data = g_try_malloc0(sizeof(net_event_info_s));
655 if (event_data == NULL) {
656 __NETWORK_FUNC_EXIT__;
660 conn = G_DBUS_CONNECTION(source_object);
661 reply = g_dbus_connection_call_finish(conn, res, &error);
664 Error = __net_netconfig_error_string_to_enum(error->message);
665 if (error->code == G_IO_ERROR_CANCELLED) {
666 WIFI_LOG(WIFI_INFO, "Ignore bssid scan reply, as operation is cancelled");
668 __NETWORK_FUNC_EXIT__;
676 g_variant_unref(reply);
678 request_table = network_info->request_table;
680 if (Error != NET_ERR_NONE) {
681 WIFI_LOG(WIFI_ERROR, "bssid scan failed[%d]", Error);
683 if (request_table[NETWORK_REQUEST_TYPE_BSSID_SCAN].flag == TRUE) {
684 memset(&request_table[NETWORK_REQUEST_TYPE_BSSID_SCAN],
685 0, sizeof(network_request_table_s));
687 event_data->Event = NET_EVENT_WIFI_BSSID_SCAN_IND;
688 event_data->Datalength = 0;
689 event_data->Data = NULL;
690 event_data->Error = Error;
692 if (network_info->event_callback)
693 network_info->event_callback(event_data, network_info->user_data);
696 __NETWORK_FUNC_EXIT__;
700 WIFI_LOG(WIFI_INFO, "bssid scan succeed");
703 __NETWORK_FUNC_EXIT__;
706 static void __net_netlink_scan_wifi_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
708 __NETWORK_FUNC_ENTER__;
710 GDBusConnection *conn = NULL;
711 GError *error = NULL;
713 net_err_e Error = NET_ERR_NONE;
714 net_event_info_s *event_data = NULL;
715 network_info_s *network_info = (network_info_s *)user_data;
716 network_request_table_s *request_table;
718 event_data = g_try_malloc0(sizeof(net_event_info_s));
719 if (event_data == NULL) {
720 __NETWORK_FUNC_EXIT__;
724 conn = G_DBUS_CONNECTION(source_object);
725 reply = g_dbus_connection_call_finish(conn, res, &error);
728 Error = __net_netconfig_error_string_to_enum(error->message);
729 if (error->code == G_IO_ERROR_CANCELLED) {
730 WIFI_LOG(WIFI_INFO, "Ignore netlink scan reply, as operation is cancelled");
732 __NETWORK_FUNC_EXIT__;
740 g_variant_unref(reply);
742 request_table = network_info->request_table;
744 if (Error != NET_ERR_NONE) {
745 WIFI_LOG(WIFI_ERROR, "netlink scan failed[%d]", Error);
747 if (request_table[NETWORK_REQUEST_TYPE_NETLINK_SCAN].flag == TRUE) {
748 memset(&request_table[NETWORK_REQUEST_TYPE_NETLINK_SCAN],
749 0, sizeof(network_request_table_s));
750 event_data->Event = NET_EVENT_WIFI_NETLINK_SCAN_IND;
752 event_data->Datalength = 0;
753 event_data->Data = NULL;
754 event_data->Error = Error;
756 if (network_info->event_callback)
757 network_info->event_callback(event_data, network_info->user_data);
761 __NETWORK_FUNC_EXIT__;
765 WIFI_LOG(WIFI_INFO, "netlink scan succeed");
768 __NETWORK_FUNC_EXIT__;
771 static void __net_set_passpoint_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
773 __NETWORK_FUNC_ENTER__;
775 GDBusConnection *conn = NULL;
776 GError *error = NULL;
777 net_err_e Error = NET_ERR_NONE;
780 conn = G_DBUS_CONNECTION(source_object);
781 reply = g_dbus_connection_call_finish(conn, res, &error);
784 Error = __net_netconfig_error_string_to_enum(error->message);
785 if (error->code == G_IO_ERROR_CANCELLED) {
786 WIFI_LOG(WIFI_INFO, "Ignore set passpoint reply, as operation is cancelled");
788 __NETWORK_FUNC_EXIT__;
796 g_variant_unref(reply);
798 if (Error != NET_ERR_NONE)
799 WIFI_LOG(WIFI_ERROR, "set passpoint failed[%d]", Error);
801 WIFI_LOG(WIFI_INFO, "set passpoint succeeded");
803 __NETWORK_FUNC_EXIT__;
806 static char *__net_make_group_name(unsigned char *raw_ssid,
807 int raw_ssid_len, const char *net_mode, const char *sec)
810 const char *hidden_str = "hidden";
812 char ssid_hex[NET_WLAN_ESSID_LEN * 2 + 1] = { 0, };
818 if (net_mode == NULL || sec == NULL)
821 if (NULL != raw_ssid) {
822 actual_len = raw_ssid_len * 2;
824 ssid_len = strlen(hidden_str);
825 actual_len = ssid_len;
828 if (g_strcmp0(net_mode, "managed") != 0)
831 if (!g_strcmp0(sec, "wpa") || !g_strcmp0(sec, "rsn"))
836 buf_len = actual_len + strlen(net_mode) + strlen(g_sec) + 4;
838 buf = g_try_malloc0(buf_len);
842 if (NULL != raw_ssid) {
843 for (i = 0; i < raw_ssid_len; i++)
844 g_snprintf(ssid_hex + i * 2, 3, "%02x", raw_ssid[i]);
846 g_snprintf(ssid_hex, strlen(hidden_str) + 1, "%s", hidden_str);
849 g_snprintf(buf, buf_len, "_%s_%s_%s", ssid_hex, net_mode, g_sec);
851 WIFI_LOG(WIFI_INFO, "Group name: %s", buf);
856 static int __net_dbus_set_agent_field_and_connect(network_info_s *network_info,
857 const char *key, const char *value, const char *profilename)
859 __NETWORK_FUNC_ENTER__;
861 net_err_e Error = NET_ERR_NONE;
862 GVariant *params = NULL;
863 GVariantBuilder *builder;
865 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
866 g_variant_builder_add(builder, "{sv}", key, g_variant_new_string(value));
868 params = g_variant_new("(o@a{sv})", profilename, g_variant_builder_end(builder));
869 g_variant_builder_unref(builder);
871 Error = _net_invoke_dbus_method_nonblock(network_info,
872 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
873 CONNMAN_AGENT_INTERFACE, "SetField", params,
874 DBUS_REPLY_TIMEOUT, __net_open_connection_reply);
876 __NETWORK_FUNC_EXIT__;
881 GVariant *_net_invoke_dbus_method(network_info_s *network_info,
882 const char *dest, const char *path, const char *interface_name,
883 const char *method, GVariant *params, int *dbus_error)
885 __NETWORK_FUNC_ENTER__;
887 GError *error = NULL;
888 GVariant *reply = NULL;
889 *dbus_error = NET_ERR_NONE;
890 GDBusConnection *connection = NULL;
891 gboolean created = FALSE;
893 if ((network_info == NULL || network_info->connection == NULL) &&
894 access(CONTAINER_FILE, F_OK) == 0) {
896 connection = g_dbus_connection_new_for_address_sync(
897 DBUS_HOST_SYSTEM_BUS_ADDRESS,
898 G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT | G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION,
901 } else if (network_info == NULL || network_info->connection == NULL) {
902 connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
905 connection = network_info->connection;
909 /* LCOV_EXCL_START */
910 if (connection == NULL) {
913 "Failed to connect to the D-BUS daemon [%s]", error->message);
920 reply = g_dbus_connection_call_sync(connection,
927 G_DBUS_CALL_FLAGS_NONE,
928 DBUS_REPLY_TIMEOUT_SYNC,
933 WIFI_LOG(WIFI_ERROR, //LCOV_EXCL_LINE
934 "g_dbus_connection_call_sync() failed "
935 "error [%d: %s]", error->code, error->message);
936 *dbus_error = __net_error_string_to_enum(error->message); //LCOV_EXCL_LINE
937 g_error_free(error); //LCOV_EXCL_LINE
939 WIFI_LOG(WIFI_ERROR, //LCOV_EXCL_LINE
940 "g_dbus_connection_call_sync() failed");
941 *dbus_error = NET_ERR_UNKNOWN; //LCOV_EXCL_LINE
945 g_object_unref(connection);
946 __NETWORK_FUNC_EXIT__;
951 g_object_unref(connection);
953 __NETWORK_FUNC_EXIT__;
957 int _net_invoke_dbus_method_nonblock(network_info_s *network_info,
958 const char *dest, const char *path,
959 const char *interface_name, const char *method,
960 GVariant *params, int timeout,
961 GAsyncReadyCallback notify_func)
963 __NETWORK_FUNC_ENTER__;
965 g_dbus_connection_call(network_info->connection,
972 G_DBUS_CALL_FLAGS_NONE,
974 network_info->cancellable,
975 (GAsyncReadyCallback) notify_func,
978 __NETWORK_FUNC_EXIT__;
982 int _net_dbus_open_connection(network_info_s *network_info,
983 const char* profile_name)
985 __NETWORK_FUNC_ENTER__;
987 net_err_e Error = NET_ERR_NONE;
989 /* use DBus signal than reply pending because of performance reason */
990 Error = _net_invoke_dbus_method_nonblock(network_info,
991 CONNMAN_SERVICE, profile_name,
992 CONNMAN_SERVICE_INTERFACE, "Connect", NULL,
993 DBUS_REPLY_TIMEOUT, __net_open_connection_reply);
995 __NETWORK_FUNC_EXIT__;
999 int _net_dbus_close_connection(network_info_s *network_info,
1000 const char* profile_name)
1002 __NETWORK_FUNC_ENTER__;
1004 net_err_e Error = NET_ERR_NONE;
1006 /* use DBus signal than reply pending because of performance reason */
1007 Error = _net_invoke_dbus_method_nonblock(network_info,
1008 CONNMAN_SERVICE, profile_name,
1009 CONNMAN_SERVICE_INTERFACE, "Disconnect", NULL,
1010 DBUS_REPLY_TIMEOUT, __net_close_connection_reply);
1012 __NETWORK_FUNC_EXIT__;
1016 int _net_dbus_scan_request(network_info_s *network_info)
1018 __NETWORK_FUNC_ENTER__;
1020 net_err_e Error = NET_ERR_NONE;
1021 GVariant *params = NULL;
1023 params = g_variant_new("(s)", network_info->interface_name);
1025 /* use DBus signal than reply pending because of performance reason */
1026 Error = _net_invoke_dbus_method_nonblock(network_info,
1027 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
1028 CONNMAN_TECHNOLOGY_INTERFACE, "ScanDevice", params,
1029 DBUS_REPLY_TIMEOUT, __net_scan_reply);
1031 if (Error == NET_ERR_IN_PROGRESS)
1032 Error = NET_ERR_NONE; //LCOV_EXCL_LINE
1034 __NETWORK_FUNC_EXIT__;
1038 int _net_dbus_get_scan_state(network_info_s *network_info, int *scanstate)
1040 __NETWORK_FUNC_ENTER__;
1042 net_err_e Error = NET_ERR_NONE;
1043 GVariant *message = NULL;
1044 GVariant *value = NULL;
1047 GVariant *params = NULL;
1048 const char *method = "GetScanState";
1050 message = _net_invoke_dbus_method(network_info,
1051 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
1052 CONNMAN_TECHNOLOGY_INTERFACE, method, params, &Error);
1054 if (message == NULL) {
1055 WIFI_LOG(WIFI_ERROR, "Failed to get scan state"); //LCOV_EXCL_LINE
1056 __NETWORK_FUNC_EXIT__; //LCOV_EXCL_LINE
1057 return Error; //LCOV_EXCL_LINE
1060 g_variant_get(message, "(a{sv})", &iter);
1061 while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
1062 if (g_variant_is_of_type(value, G_VARIANT_TYPE_BOOLEAN)) {
1063 if (g_strcmp0(key, network_info->interface_name) == 0)
1064 *scanstate = g_variant_get_boolean(value);
1068 g_variant_iter_free(iter);
1069 g_variant_unref(message);
1071 WIFI_LOG(WIFI_INFO, "scan state: %d", *scanstate);
1073 __NETWORK_FUNC_EXIT__;
1078 int _net_dbus_set_bgscan_mode(network_info_s *network_info,
1079 net_wifi_background_scan_mode_e mode)
1081 __NETWORK_FUNC_ENTER__;
1083 net_err_e Error = NET_ERR_NONE;
1084 GVariant *message = NULL;
1087 params = g_variant_new("(su)", network_info->interface_name, mode);
1089 message = _net_invoke_dbus_method(network_info,
1090 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
1091 NETCONFIG_WIFI_INTERFACE, "SetBgscan",
1094 if (Error != NET_ERR_NONE)
1095 WIFI_LOG(WIFI_ERROR, "_net_invoke_dbus_method failed"); //LCOV_EXCL_LINE
1097 if (message != NULL)
1098 g_variant_unref(message); //LCOV_EXCL_LINE
1100 __NETWORK_FUNC_EXIT__;
1104 int _net_dbus_set_ip_conflict_period(network_info_s *network_info, unsigned int initial_time)
1106 __NETWORK_FUNC_ENTER__;
1108 net_err_e Error = NET_ERR_NONE;
1109 GVariant *message = NULL;
1112 params = g_variant_new("(su)", network_info->interface_name, initial_time);
1114 message = _net_invoke_dbus_method(network_info,
1115 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
1116 NETCONFIG_WIFI_INTERFACE, "SetIpConflictPeriod",
1119 if (Error != NET_ERR_NONE)
1120 WIFI_LOG(WIFI_ERROR, "_net_invoke_dbus_method failed"); //LCOV_EXCL_LINE
1122 if (message != NULL)
1123 g_variant_unref(message); //LCOV_EXCL_LINE
1125 __NETWORK_FUNC_EXIT__;
1130 int _net_dbus_get_technology_state(network_info_s *network_info,
1131 network_tech_state_info_s *tech_state)
1133 __NETWORK_FUNC_ENTER__;
1135 net_err_e Error = NET_ERR_NONE;
1136 GVariant *message = NULL;
1138 if ((tech_state == NULL) || (strlen(tech_state->technology) == 0)) {
1139 WIFI_LOG(WIFI_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1140 __NETWORK_FUNC_EXIT__; //LCOV_EXCL_LINE
1141 return NET_ERR_INVALID_PARAM; //LCOV_EXCL_LINE
1144 message = _net_invoke_dbus_method(network_info,
1145 CONNMAN_SERVICE, CONNMAN_MANAGER_PATH,
1146 CONNMAN_MANAGER_INTERFACE, "GetTechnologies",
1148 if (message == NULL) {
1149 WIFI_LOG(WIFI_ERROR, "Failed to get technology info"); //LCOV_EXCL_LINE
1150 goto done; //LCOV_EXCL_LINE
1153 Error = _net_get_tech_state(network_info, message, tech_state);
1155 g_variant_unref(message);
1158 __NETWORK_FUNC_EXIT__;
1162 int _net_dbus_get_tech_status(network_info_s *network_info,
1163 net_tech_info_s *tech_status)
1165 __NETWORK_FUNC_ENTER__;
1167 net_err_e Error = NET_ERR_NONE;
1168 network_tech_state_info_s tech_state = {{0,}, 0, 0, 0, 0, 0, 0};
1170 g_strlcpy(tech_state.technology, "wifi", NET_TECH_LENGTH_MAX);
1172 Error = _net_dbus_get_technology_state(network_info, &tech_state);
1173 if (Error != NET_ERR_NONE) {
1174 WIFI_LOG(WIFI_ERROR, //LCOV_EXCL_LINE
1175 "_net_dbus_get_technology_state() failed. Error [%s]",
1176 _net_print_error(Error));
1177 goto done; //LCOV_EXCL_LINE
1180 if (tech_state.Powered == TRUE)
1181 tech_status->powered = TRUE;
1183 tech_status->powered = FALSE;
1185 if (tech_state.Connected == TRUE)
1186 tech_status->connected = TRUE;
1188 tech_status->connected = FALSE;
1191 __NETWORK_FUNC_EXIT__;
1196 static int _net_dbus_set_eap_config_fields_and_connect(network_info_s *network_info,
1197 const net_wifi_connect_service_info_t *wifi_info,
1198 const char *profilename)
1200 __NETWORK_FUNC_ENTER__;
1202 net_err_e Error = NET_ERR_NONE;
1203 GVariant *params = NULL;
1204 GVariantBuilder *builder;
1206 builder = g_variant_builder_new(G_VARIANT_TYPE("a{ss}"));
1207 g_variant_builder_add(builder, "{ss}", CONNMAN_CONFIG_FIELD_TYPE, "wifi");
1209 if (wifi_info->ssid)
1210 g_variant_builder_add(builder, "{ss}",
1211 CONNMAN_CONFIG_FIELD_NAME, wifi_info->ssid);
1213 if (wifi_info->eap_type)
1214 g_variant_builder_add(builder, "{ss}",
1215 CONNMAN_CONFIG_FIELD_EAP_METHOD, wifi_info->eap_type);
1217 if (wifi_info->eap_keymgmt_type)
1218 g_variant_builder_add(builder, "{ss}",
1219 CONNMAN_CONFIG_FIELD_EAP_KEYMGMT_TYPE, wifi_info->eap_keymgmt_type);
1221 if (wifi_info->identity)
1222 g_variant_builder_add(builder, "{ss}",
1223 CONNMAN_CONFIG_FIELD_IDENTITY, wifi_info->identity);
1225 if (wifi_info->anonymous_identity)
1226 g_variant_builder_add(builder, "{ss}",
1227 CONNMAN_CONFIG_FIELD_ANONYMOUS_IDENTITY, wifi_info->anonymous_identity);
1229 if (wifi_info->password)
1230 g_variant_builder_add(builder, "{ss}",
1231 CONNMAN_CONFIG_FIELD_PASSPHRASE, wifi_info->password);
1233 if (wifi_info->eap_auth &&
1234 g_strcmp0(wifi_info->eap_auth, "NONE") != 0)
1235 g_variant_builder_add(builder, "{ss}",
1236 CONNMAN_CONFIG_FIELD_PHASE2, wifi_info->eap_auth);
1238 if (wifi_info->ca_cert_file)
1239 g_variant_builder_add(builder, "{ss}",
1240 CONNMAN_CONFIG_FIELD_CA_CERT_FILE, wifi_info->ca_cert_file);
1242 if (wifi_info->client_cert_file)
1243 g_variant_builder_add(builder, "{ss}",
1244 CONNMAN_CONFIG_FIELD_CLIENT_CERT_FILE,
1245 wifi_info->client_cert_file);
1247 if (wifi_info->private_key_file)
1248 g_variant_builder_add(builder, "{ss}",
1249 CONNMAN_CONFIG_FIELD_PVT_KEY_FILE,
1250 wifi_info->private_key_file);
1252 if (wifi_info->private_key_password)
1253 g_variant_builder_add(builder, "{ss}",
1254 CONNMAN_CONFIG_FIELD_PVT_KEY_PASSPHRASE,
1255 wifi_info->private_key_password);
1257 params = g_variant_new("(o@a{ss})", profilename, g_variant_builder_end(builder));
1258 g_variant_builder_unref(builder);
1260 Error = _net_invoke_dbus_method_nonblock(network_info,
1261 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
1262 NETCONFIG_WIFI_INTERFACE, "CreateEapConfig", params,
1263 DBUS_REPLY_TIMEOUT, __net_open_connection_reply);
1265 __NETWORK_FUNC_EXIT__;
1270 int _net_dbus_set_agent_passphrase_and_connect(network_info_s *network_info,
1271 const char *passphrase, const char *profilename)
1273 __NETWORK_FUNC_ENTER__;
1275 net_err_e Error = NET_ERR_NONE;
1277 if (NULL == passphrase || strlen(passphrase) == 0 || NULL == profilename) {
1278 WIFI_LOG(WIFI_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1279 return NET_ERR_INVALID_PARAM; //LCOV_EXCL_LINE
1282 Error = __net_dbus_set_agent_field_and_connect(network_info,
1283 NETCONFIG_AGENT_FIELD_PASSPHRASE, passphrase, profilename);
1284 if (NET_ERR_NONE != Error) {
1285 WIFI_LOG(WIFI_ERROR, "Configuration failed(%d)", Error); //LCOV_EXCL_LINE
1286 return Error; //LCOV_EXCL_LINE
1289 __NETWORK_FUNC_EXIT__;
1294 static int _net_dbus_set_agent_fields_and_connect(network_info_s *network_info,
1295 const char *ssid, const char *passphrase, const char *profilename)
1297 __NETWORK_FUNC_ENTER__;
1299 net_err_e Error = NET_ERR_NONE;
1300 GVariant *params = NULL;
1301 GVariantBuilder *builder;
1303 /* If OPEN network, passphrase can be NULL */
1304 if (NULL == ssid || strlen(ssid) == 0 || NULL == profilename) {
1305 WIFI_LOG(WIFI_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1306 return NET_ERR_INVALID_PARAM; //LCOV_EXCL_LINE
1309 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1310 g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_SSID,
1311 g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, ssid,
1312 strlen(ssid), sizeof(guchar)));
1315 g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_PASSPHRASE,
1316 g_variant_new_string(passphrase));
1318 params = g_variant_new("(o@a{sv})", profilename, g_variant_builder_end(builder));
1319 g_variant_builder_unref(builder);
1321 Error = _net_invoke_dbus_method_nonblock(network_info,
1322 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
1323 CONNMAN_AGENT_INTERFACE, "SetField", params,
1324 DBUS_REPLY_TIMEOUT, __net_open_connection_reply);
1325 if (NET_ERR_NONE != Error) {
1326 WIFI_LOG(WIFI_ERROR, "Configuration failed(%d)", Error); //LCOV_EXCL_LINE
1327 return Error; //LCOV_EXCL_LINE
1330 __NETWORK_FUNC_EXIT__;
1334 int _net_dbus_get_wps_generated_pin(network_info_s *network_info, char **wps_pin)
1336 __NETWORK_FUNC_ENTER__;
1337 net_err_e error = NET_ERR_NONE;
1338 GVariant *params = NULL;
1339 GVariant *reply = NULL;
1340 const gchar *value = NULL;
1341 const gchar *path = NULL;
1343 params = g_variant_new("(s)", network_info->interface_name);
1345 reply = _net_invoke_dbus_method(network_info,
1346 SUPPLICANT_SERVICE, SUPPLICANT_PATH,
1347 SUPPLICANT_INTERFACE, "GetInterface",
1349 if (reply == NULL) {
1350 WIFI_LOG(WIFI_ERROR, "Failed to get Wi-Fi interface");
1353 g_variant_get(reply, "(&o)", &path);
1355 reply = _net_invoke_dbus_method(network_info,
1356 SUPPLICANT_SERVICE, path,
1357 SUPPLICANT_INTERFACE ".Interface.WPS",
1358 "GeneratePin", NULL, &error);
1359 if (reply == NULL) {
1360 WIFI_LOG(WIFI_ERROR, "Failed to get wps pin");
1363 g_variant_get(reply, "(&s)", &value);
1364 *wps_pin = g_strdup_printf("%s", value);
1365 g_variant_unref(reply);
1367 __NETWORK_FUNC_EXIT__;
1371 int _net_dbus_set_agent_wps_pbc_and_connect(network_info_s *network_info,
1372 const char *profilename)
1374 __NETWORK_FUNC_ENTER__;
1376 net_err_e Error = NET_ERR_NONE;
1378 Error = __net_dbus_set_agent_field_and_connect(network_info,
1379 NETCONFIG_AGENT_FIELD_WPS_PBC, "enable", profilename);
1380 if (NET_ERR_NONE != Error) {
1381 WIFI_LOG(WIFI_ERROR, "PBC configuration failed(%d)", Error);
1385 __NETWORK_FUNC_EXIT__;
1389 int _net_dbus_set_agent_wps_pin_and_connect(network_info_s *network_info,
1390 const char *wps_pin, const char *profilename)
1392 __NETWORK_FUNC_ENTER__;
1394 net_err_e Error = NET_ERR_NONE;
1396 if (NULL == wps_pin || strlen(wps_pin) == 0) {
1397 WIFI_LOG(WIFI_ERROR, "Invalid param ");
1398 return NET_ERR_INVALID_PARAM;
1401 Error = __net_dbus_set_agent_field_and_connect(network_info,
1402 NETCONFIG_AGENT_FIELD_WPS_PIN, wps_pin, profilename);
1403 if (NET_ERR_NONE != Error) {
1404 WIFI_LOG(WIFI_ERROR, "PIN configuration failed(%d)", Error);
1408 __NETWORK_FUNC_EXIT__;
1413 int _net_dbus_connect_service(network_info_s *network_info,
1414 const net_wifi_connect_service_info_t *wifi_connection_info)
1416 __NETWORK_FUNC_ENTER__;
1418 net_err_e Error = NET_ERR_NONE;
1419 char *grp_name = NULL;
1420 GSList *list = NULL;
1421 GSList *profile_list = NULL;
1422 net_profile_info_s *prof_info = NULL;
1424 /* Get group name with prefix 'ssid' in hex */
1425 grp_name = __net_make_group_name(wifi_connection_info->is_hidden == TRUE ?
1426 NULL : wifi_connection_info->raw_ssid,
1427 wifi_connection_info->raw_ssid_len,
1428 wifi_connection_info->mode,
1429 wifi_connection_info->security);
1430 if (NULL == grp_name) {
1431 WIFI_LOG(WIFI_ERROR, "Failed to make a group name"); //LCOV_EXCL_LINE
1432 __NETWORK_FUNC_EXIT__; //LCOV_EXCL_LINE
1433 return NET_ERR_UNKNOWN; //LCOV_EXCL_LINE
1436 Error = _net_get_profile_list(network_info, &profile_list);
1437 if (NET_ERR_NONE != Error) {
1438 WIFI_LOG(WIFI_ERROR, //LCOV_EXCL_LINE
1439 "_net_get_profile_list fail. Error [%s]",
1440 _net_print_error(Error));
1442 goto error; //LCOV_EXCL_LINE
1445 for (list = profile_list; list; list = list->next) {
1446 prof_info = (net_profile_info_s *)list->data;
1447 if (g_strstr_len(prof_info->ProfileName,
1448 NET_PROFILE_NAME_LEN_MAX + 1, grp_name) != NULL) {
1449 WIFI_LOG(WIFI_INFO, "Found profile %s", prof_info->ProfileName);
1451 if (prof_info->ProfileState == NET_STATE_TYPE_READY ||
1452 prof_info->ProfileState == NET_STATE_TYPE_ONLINE) {
1453 WIFI_LOG(WIFI_ERROR, "Already profile is connected"); //LCOV_EXCL_LINE
1454 Error = NET_ERR_ACTIVE_CONNECTION_EXISTS; //LCOV_EXCL_LINE
1456 goto error; //LCOV_EXCL_LINE
1464 WIFI_LOG(WIFI_ERROR, "No matching profile found"); //LCOV_EXCL_LINE
1465 Error = NET_ERR_NO_SERVICE; //LCOV_EXCL_LINE
1467 goto error; //LCOV_EXCL_LINE
1469 if (wifi_connection_info->is_hidden == TRUE) {
1471 char *target_name = __net_make_group_name((unsigned char*)wifi_connection_info->ssid,
1472 strlen(wifi_connection_info->ssid),
1473 wifi_connection_info->mode,
1474 wifi_connection_info->security);
1476 WIFI_LOG(WIFI_INFO, "Hidden target name %s", target_name);
1477 g_strlcpy(network_info->request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].ProfileName,
1478 target_name, NET_PROFILE_NAME_LEN_MAX + 1);
1480 g_free(target_name);
1483 g_strlcpy(network_info->request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].ProfileName,
1484 prof_info->ProfileName, NET_PROFILE_NAME_LEN_MAX + 1);
1488 if (g_strcmp0(wifi_connection_info->security, "ieee8021x") == 0) {
1489 /* Create the EAP config file */
1490 Error = _net_dbus_set_eap_config_fields_and_connect(network_info,
1491 wifi_connection_info, prof_info->ProfileName);
1492 if (NET_ERR_NONE != Error) {
1493 WIFI_LOG(WIFI_ERROR, "Fail to create eap_config");
1497 } else if (wifi_connection_info->is_hidden == TRUE) {
1498 Error = _net_dbus_set_agent_fields_and_connect(network_info,
1499 wifi_connection_info->ssid,
1500 wifi_connection_info->passphrase,
1501 prof_info->ProfileName);
1502 } else if (g_strcmp0(wifi_connection_info->security, "none") != 0 &&
1503 g_strcmp0(wifi_connection_info->security, "owe") != 0) {
1504 Error = _net_dbus_set_agent_passphrase_and_connect(network_info,
1505 wifi_connection_info->passphrase, prof_info->ProfileName);
1506 if (NET_ERR_NONE != Error) {
1507 WIFI_LOG(WIFI_ERROR, "Fail to set agent_passphrase");
1512 Error = _net_dbus_open_connection(network_info, prof_info->ProfileName);
1517 if (NET_ERR_NONE != Error) {
1518 WIFI_LOG(WIFI_ERROR, //LCOV_EXCL_LINE
1519 "Failed to request open connection, Error [%s]",
1520 _net_print_error(Error));
1522 memset(&(network_info->request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION]), //LCOV_EXCL_LINE
1523 0, sizeof(network_request_table_s));
1526 __clear_profile_list(&profile_list);
1530 __NETWORK_FUNC_EXIT__;
1535 int _net_dbus_get_preferred_ipv6_address(network_info_s *network_info,
1536 const char *profilename, char **address)
1538 __NETWORK_FUNC_ENTER__;
1540 net_err_e Error = NET_ERR_NONE;
1541 GVariant *message = NULL;
1542 GVariant *params = NULL;
1544 if (address == NULL) {
1545 WIFI_LOG(WIFI_ERROR, "Invalid Parameter");
1546 __NETWORK_FUNC_EXIT__;
1547 return NET_ERR_INVALID_PARAM;
1550 params = g_variant_new("(s)", profilename);
1551 message = _net_invoke_dbus_method(network_info,
1552 NETCONFIG_SERVICE, NETCONFIG_NETWORK_PATH,
1553 NETCONFIG_NETWORK_INTERFACE, "PreferredIpv6Address",
1555 if (message == NULL) {
1556 WIFI_LOG(WIFI_ERROR, "Failed to get preferred IPv6 address");
1557 __NETWORK_FUNC_EXIT__;
1561 g_variant_get(message, "(s)", address);
1563 WIFI_LOG(WIFI_INFO, "Preferred IPv6 Address [%s]", *address);
1565 g_variant_unref(message);
1567 __NETWORK_FUNC_EXIT__;
1571 int _net_dbus_set_profile_ipv4(network_info_s *network_info,
1572 net_profile_info_s *prof_info, char *profile_name)
1574 __NETWORK_FUNC_ENTER__;
1576 net_err_e Error = NET_ERR_NONE;
1578 const char *manual_method = "manual";
1579 const char *dhcp_method = "dhcp";
1580 const char *off_method = "off";
1582 const char *prop_ipv4_configuration = "IPv4.Configuration";
1583 const char *prop_method = "Method";
1584 const char *prop_address = "Address";
1585 const char *prop_gateway = "Gateway";
1586 const char *prop_netmask = "Netmask";
1588 char ip_buffer[NET_IPV4_STR_LEN_MAX+1] = "";
1589 char netmask_buffer[NET_IPV4_STR_LEN_MAX+1] = "";
1590 char gateway_buffer[NET_IPV4_STR_LEN_MAX+1] = "";
1592 char *ipaddress = ip_buffer;
1593 char *netmask = netmask_buffer;
1594 char *gateway = gateway_buffer;
1596 GVariant *params = NULL;
1597 GVariantBuilder *builder;
1598 net_dev_info_s *profile_net_info = NULL;
1600 GVariant *message = NULL;
1602 WIFI_LOG(WIFI_INFO, "profile_name: [%s]", profile_name);
1604 if ((prof_info == NULL) || (profile_name == NULL) || (strlen(profile_name) == 0)) {
1605 WIFI_LOG(WIFI_ERROR, "Invalid argument"); //LCOV_EXCL_LINE
1606 __NETWORK_FUNC_EXIT__; //LCOV_EXCL_LINE
1607 return NET_ERR_INVALID_PARAM; //LCOV_EXCL_LINE
1610 profile_net_info = &(prof_info->net_info);
1612 g_strlcpy(ip_buffer,
1613 inet_ntoa(profile_net_info->IpAddr.Data.Ipv4),
1614 NET_IPV4_STR_LEN_MAX + 1);
1616 g_strlcpy(netmask_buffer,
1617 inet_ntoa(profile_net_info->SubnetMask.Data.Ipv4),
1618 NET_IPV4_STR_LEN_MAX + 1);
1620 g_strlcpy(gateway_buffer,
1621 inet_ntoa(profile_net_info->GatewayAddr.Data.Ipv4),
1622 NET_IPV4_STR_LEN_MAX + 1);
1624 WIFI_LOG(WIFI_INFO, "ip: %s, netmask: %s, gateway: %s",
1625 ipaddress, netmask, gateway);
1627 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1629 if (profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_DYNAMIC ||
1630 profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_AUTO_IP) {
1632 g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(dhcp_method));
1634 } else if (profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_OFF) {
1636 g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(off_method));
1638 } else if (profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_STATIC) {
1640 g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(manual_method));
1642 if (strlen(ipaddress) >= NET_IPV4_STR_LEN_MIN)
1643 g_variant_builder_add(builder, "{sv}", prop_address, g_variant_new_string(ipaddress));
1645 if (strlen(netmask) >= NET_IPV4_STR_LEN_MIN)
1646 g_variant_builder_add(builder, "{sv}", prop_netmask, g_variant_new_string(netmask));
1648 if (strlen(gateway) >= NET_IPV4_STR_LEN_MIN)
1649 g_variant_builder_add(builder, "{sv}", prop_gateway, g_variant_new_string(gateway));
1652 WIFI_LOG(WIFI_ERROR, "Invalid argument");
1653 g_variant_builder_unref(builder);
1654 __NETWORK_FUNC_EXIT__;
1655 return NET_ERR_INVALID_PARAM;
1658 params = g_variant_new("(sv)",
1659 prop_ipv4_configuration, g_variant_builder_end(builder));
1660 g_variant_builder_unref(builder);
1662 message = _net_invoke_dbus_method(network_info,
1663 CONNMAN_SERVICE, profile_name,
1664 CONNMAN_SERVICE_INTERFACE, "SetProperty",
1666 if (message == NULL) {
1667 WIFI_LOG(WIFI_ERROR, "Failed to set IPv4 Property"); //LCOV_EXCL_LINE
1668 __NETWORK_FUNC_EXIT__; //LCOV_EXCL_LINE
1669 return Error; //LCOV_EXCL_LINE
1672 g_variant_unref(message);
1673 WIFI_LOG(WIFI_INFO, "Successfully configured IPv4.Configuration");
1675 __NETWORK_FUNC_EXIT__;
1679 int _net_dbus_set_profile_ipv6(network_info_s *network_info,
1680 net_profile_info_s* prof_info, char* profile_name)
1682 __NETWORK_FUNC_ENTER__;
1684 const char *manual_method = "manual";
1685 const char *auto_method = "auto";
1686 const char *off_method = "off";
1688 const char *prop_ipv6_configuration = "IPv6.Configuration";
1689 const char *prop_method = "Method";
1690 const char *prop_address = "Address";
1691 const char *prop_gateway = "Gateway";
1692 const char *prop_prefixlen = "PrefixLength";
1694 char ipaddr6[INET6_ADDRSTRLEN];
1695 char gwaddr6[INET6_ADDRSTRLEN];
1697 char *ip6_ptr = ipaddr6;
1698 char *gw6_ptr = gwaddr6;
1699 int prefix_length = 0;
1701 net_err_e Error = NET_ERR_NONE;
1702 GVariant *params = NULL;
1703 GVariantBuilder *builder;
1704 GVariant *message = NULL;
1705 net_dev_info_s *profile_net_info = NULL;
1707 if ((prof_info == NULL) || (profile_name == NULL) || (strlen(profile_name) == 0)) {
1708 WIFI_LOG(WIFI_ERROR, "Error!!! Invalid argument");
1709 __NETWORK_FUNC_EXIT__;
1710 return NET_ERR_INVALID_PARAM;
1713 profile_net_info = &(prof_info->net_info);
1715 inet_ntop(AF_INET6, &profile_net_info->IpAddr6.Data.Ipv6, ipaddr6,
1717 inet_ntop(AF_INET6, &profile_net_info->GatewayAddr6.Data.Ipv6, gwaddr6,
1719 prefix_length = profile_net_info->PrefixLen6;
1721 WIFI_LOG(WIFI_INFO, "ipaddress : %s, prefix_len : %d, gateway : %s",
1722 ip6_ptr, prefix_length, gw6_ptr);
1724 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1726 if (profile_net_info->IpConfigType6 == NET_IP_CONFIG_TYPE_DYNAMIC ||
1727 profile_net_info->IpConfigType6 == NET_IP_CONFIG_TYPE_AUTO_IP) {
1729 g_variant_builder_add(builder, "{sv}", prop_method,
1730 g_variant_new_string(auto_method));
1732 } else if (profile_net_info->IpConfigType6 == NET_IP_CONFIG_TYPE_OFF) {
1734 g_variant_builder_add(builder, "{sv}", prop_method,
1735 g_variant_new_string(off_method));
1737 WIFI_LOG(WIFI_INFO, "DBus Message 2/2: %s %s",
1738 prop_method, off_method);
1739 } else if (profile_net_info->IpConfigType6 == NET_IP_CONFIG_TYPE_STATIC) {
1741 g_variant_builder_add(builder, "{sv}", prop_method,
1742 g_variant_new_string(manual_method));
1744 if (strlen(ipaddr6) >= NET_IPV6_STR_LEN_MIN) {
1745 g_variant_builder_add(builder, "{sv}", prop_address,
1746 g_variant_new_string(ip6_ptr));
1748 if (profile_net_info->PrefixLen6 <= NET_IPV6_MAX_PREFIX_LEN) {
1749 g_variant_builder_add(builder, "{sv}", prop_prefixlen,
1750 g_variant_new_byte(prefix_length));
1753 if (strlen(gwaddr6) >= NET_IPV6_STR_LEN_MIN) {
1754 g_variant_builder_add(builder, "{sv}", prop_gateway,
1755 g_variant_new_string(gw6_ptr));
1757 WIFI_LOG(WIFI_INFO, "DBus Message 2/2: %s %s %s %s %s %d %s %s",
1758 prop_method, manual_method,
1759 prop_address, ipaddr6, prop_prefixlen,
1760 prefix_length, prop_gateway, gwaddr6);
1762 WIFI_LOG(WIFI_ERROR, "Invalid argument");
1763 g_variant_builder_unref(builder);
1764 __NETWORK_FUNC_EXIT__;
1765 return NET_ERR_INVALID_PARAM;
1768 params = g_variant_new("(sv)", prop_ipv6_configuration,
1769 g_variant_builder_end(builder));
1770 g_variant_builder_unref(builder);
1772 message = _net_invoke_dbus_method(network_info,
1773 CONNMAN_SERVICE, profile_name,
1774 CONNMAN_SERVICE_INTERFACE, "SetProperty",
1776 if (message == NULL) {
1777 WIFI_LOG(WIFI_ERROR, "Failed to set IPv6 Property");
1778 __NETWORK_FUNC_EXIT__;
1782 g_variant_unref(message);
1783 WIFI_LOG(WIFI_INFO, "Successfully configured IPv6.Configuration");
1785 __NETWORK_FUNC_EXIT__;
1789 int _net_dbus_set_profile_dns(network_info_s *network_info,
1790 net_profile_info_s* prof_info, char* profile_name)
1792 __NETWORK_FUNC_ENTER__;
1794 const char *prop_nameserver_configuration = "Nameservers.Configuration";
1796 const char *manual_method = "ipv4.manual";
1797 const char *dhcp_method = "ipv4.dhcp";
1798 const char *ipv6_manual_method = "ipv6.manual";
1799 const char *ipv6_dhcp_method = "ipv6.dhcp";
1801 char dns_buffer[NET_DNS_ADDR_MAX][NET_IPV4_STR_LEN_MAX+1];
1802 char *dns_address[NET_DNS_ADDR_MAX];
1803 char ipv6_dns_buffer[NET_DNS_ADDR_MAX][NET_IPV6_STR_LEN_MAX + 1];
1804 char *ipv6_dns_address[NET_DNS_ADDR_MAX];
1806 net_err_e Error = NET_ERR_NONE;
1807 GVariant *params = NULL;
1808 GVariantBuilder *builder = NULL;
1810 net_dev_info_s *profile_net_info = NULL;
1811 GVariant *message = NULL;
1813 if ((prof_info == NULL) || (profile_name == NULL) || (strlen(profile_name) == 0)) {
1814 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1815 __NETWORK_FUNC_EXIT__;
1816 return NET_ERR_INVALID_PARAM;
1819 profile_net_info = &(prof_info->net_info);
1821 if (profile_net_info->DnsCount > NET_DNS_ADDR_MAX) {
1822 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1823 __NETWORK_FUNC_EXIT__;
1824 return NET_ERR_INVALID_PARAM;
1827 for (i = 0; i < profile_net_info->DnsCount; i++) {
1828 dns_buffer[i][0] = '\0';
1829 dns_address[i] = NULL;
1831 if (profile_net_info->DnsAddr[i].Data.Ipv4.s_addr != 0)
1832 g_strlcpy(dns_buffer[i],
1833 inet_ntoa(profile_net_info->DnsAddr[i].Data.Ipv4),
1834 NET_IPV4_STR_LEN_MAX + 1);
1836 if (profile_net_info->DnsConfigType == NET_DNS_CONFIG_TYPE_STATIC)
1837 dns_address[i] = dns_buffer[i];
1840 for (i = 0; i < profile_net_info->DnsCount6; i++) {
1841 ipv6_dns_buffer[i][0] = '\0';
1842 ipv6_dns_address[i] = NULL;
1844 if (profile_net_info->DnsAddr6[i].Type == NET_ADDR_IPV6) {
1846 &profile_net_info->DnsAddr6[i].Data.Ipv6,
1847 ipv6_dns_buffer[i], INET6_ADDRSTRLEN);
1850 if (profile_net_info->DnsConfigType6 == NET_DNS_CONFIG_TYPE_STATIC)
1851 ipv6_dns_address[i] = ipv6_dns_buffer[i];
1854 if (profile_net_info->DnsConfigType == NET_DNS_CONFIG_TYPE_STATIC ||
1855 profile_net_info->DnsConfigType == NET_DNS_CONFIG_TYPE_DYNAMIC ||
1856 profile_net_info->DnsConfigType6 == NET_DNS_CONFIG_TYPE_STATIC ||
1857 profile_net_info->DnsConfigType6 == NET_DNS_CONFIG_TYPE_DYNAMIC) {
1858 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
1860 WIFI_LOG(WIFI_INFO, "IPv4 DnsConfigType: %d", profile_net_info->DnsConfigType);
1861 if (profile_net_info->DnsConfigType ==
1862 NET_DNS_CONFIG_TYPE_STATIC ||
1863 profile_net_info->DnsConfigType6 ==
1864 NET_DNS_CONFIG_TYPE_STATIC)
1865 g_variant_builder_add(builder, "s",
1868 g_variant_builder_add(builder, "s",
1871 WIFI_LOG(WIFI_INFO, "IPv6 DnsConfigType: %d", profile_net_info->DnsConfigType6);
1872 if (profile_net_info->DnsConfigType6 ==
1873 NET_DNS_CONFIG_TYPE_STATIC)
1874 g_variant_builder_add(builder, "s",
1875 ipv6_manual_method);
1876 else if (profile_net_info->DnsConfigType6 ==
1877 NET_DNS_CONFIG_TYPE_DYNAMIC)
1878 g_variant_builder_add(builder, "s",
1881 for (i = 0; i < profile_net_info->DnsCount; i++) {
1882 if (profile_net_info->DnsConfigType ==
1883 NET_DNS_CONFIG_TYPE_STATIC) {
1884 if (dns_address[i] == NULL)
1885 g_strlcpy(dns_address[i], "0.0.0.0",
1886 NET_IPV4_STR_LEN_MIN + 1);
1887 g_variant_builder_add(builder, "s",
1890 WIFI_LOG(WIFI_INFO, "IPv4 DNS Address added in g_variant: %s", dns_address[i]);
1893 for (i = 0; i < profile_net_info->DnsCount6; i++) {
1894 if (profile_net_info->DnsConfigType6 ==
1895 NET_DNS_CONFIG_TYPE_STATIC) {
1896 if (ipv6_dns_address[i] == NULL)
1897 g_strlcpy(ipv6_dns_address[i], "::",
1898 NET_IPV6_STR_LEN_MIN + 1);
1899 g_variant_builder_add(builder, "s",
1900 ipv6_dns_address[i]);
1902 WIFI_LOG(WIFI_INFO, "IPv6 DNS Address added in g_variant: %s", ipv6_dns_address[i]);
1905 params = g_variant_new("(sv)", prop_nameserver_configuration, g_variant_builder_end(builder));
1906 g_variant_builder_unref(builder);
1909 message = _net_invoke_dbus_method(network_info,
1910 CONNMAN_SERVICE, profile_name,
1911 CONNMAN_SERVICE_INTERFACE, "SetProperty",
1913 if (message == NULL) {
1914 __NETWORK_FUNC_EXIT__;
1917 WIFI_LOG(WIFI_INFO, "Successfully configured Nameservers.Configuration");
1918 g_variant_unref(message);
1920 __NETWORK_FUNC_EXIT__;
1924 int _net_dbus_set_proxy(network_info_s *network_info,
1925 net_profile_info_s* prof_info, char* profile_name)
1927 __NETWORK_FUNC_ENTER__;
1929 net_err_e Error = NET_ERR_NONE;
1931 const char *direct_method = "direct";
1932 const char *auto_method = "auto";
1933 const char *manual_method = "manual";
1935 const char *prop_proxy_configuration = "Proxy.Configuration";
1936 const char *prop_method = "Method";
1937 const char *prop_url = "URL";
1938 const char *prop_servers = "Servers";
1940 char proxy_buffer[NET_PROXY_LEN_MAX+1] = "";
1941 char *proxy_address = proxy_buffer;
1943 GVariant *params = NULL;
1944 GVariantBuilder *builder;
1945 GVariantBuilder *builder_sub;
1946 net_dev_info_s *profile_net_info = NULL;
1948 GVariant *message = NULL;
1950 if ((prof_info == NULL) || (profile_name == NULL) || (strlen(profile_name) == 0)) {
1951 WIFI_LOG(WIFI_ERROR, "Invalid argument");
1952 __NETWORK_FUNC_EXIT__;
1953 return NET_ERR_INVALID_PARAM;
1956 profile_net_info = &(prof_info->net_info);
1958 g_strlcpy(proxy_buffer,
1959 profile_net_info->ProxyAddr, NET_PROXY_LEN_MAX+1);
1961 WIFI_LOG(WIFI_INFO, "method: %d, proxy address: %s, Profile Name %s",
1962 profile_net_info->ProxyMethod, proxy_address, profile_net_info->ProfileName);
1964 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1966 switch (profile_net_info->ProxyMethod) {
1967 case NET_PROXY_TYPE_AUTO:
1968 g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(auto_method));
1970 case NET_PROXY_TYPE_MANUAL:
1971 g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(manual_method));
1974 g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(direct_method));
1978 if (profile_net_info->ProxyMethod == NET_PROXY_TYPE_AUTO &&
1979 proxy_address[0] != '\0') {
1980 g_variant_builder_add(builder, "{sv}", prop_url, g_variant_new_string(proxy_address));
1983 if (profile_net_info->ProxyMethod == NET_PROXY_TYPE_MANUAL &&
1984 proxy_address[0] != '\0') {
1985 builder_sub = g_variant_builder_new(G_VARIANT_TYPE("as"));
1986 g_variant_builder_add(builder_sub, "s", proxy_address);
1987 g_variant_builder_add(builder, "{sv}", prop_servers, g_variant_builder_end(builder_sub));
1988 g_variant_builder_unref(builder_sub);
1991 params = g_variant_new("(sv)", prop_proxy_configuration, g_variant_builder_end(builder));
1992 g_variant_builder_unref(builder);
1994 message = _net_invoke_dbus_method(network_info,
1995 CONNMAN_SERVICE, profile_name,
1996 CONNMAN_SERVICE_INTERFACE, "SetProperty",
1998 if (message == NULL) {
1999 WIFI_LOG(WIFI_ERROR, "Failed to set Proxy Configuration");
2000 __NETWORK_FUNC_EXIT__;
2003 WIFI_LOG(WIFI_INFO, "Successfully configured Proxy.Configuration");
2004 g_variant_unref(message);
2006 __NETWORK_FUNC_EXIT__;
2010 int _net_dbus_load_wifi_driver(network_info_s *network_info, gboolean wifi_picker_test)
2012 __NETWORK_FUNC_ENTER__;
2014 net_err_e Error = NET_ERR_NONE;
2017 params = g_variant_new("(sb)", network_info->interface_name, wifi_picker_test);
2019 /* use DBus signal than reply pending because of performance reason */
2020 Error = _net_invoke_dbus_method_nonblock(network_info,
2021 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2022 NETCONFIG_WIFI_INTERFACE, "LoadDriver",
2023 params, DBUS_REPLY_TIMEOUT,
2024 __net_wifi_power_reply);
2026 __NETWORK_FUNC_EXIT__;
2030 int _net_dbus_remove_wifi_driver(network_info_s *network_info)
2032 __NETWORK_FUNC_ENTER__;
2034 net_err_e Error = NET_ERR_NONE;
2035 GVariant *params = NULL;
2037 params = g_variant_new("(s)", network_info->interface_name);
2039 /* use DBus signal than reply pending because of performance reason */
2040 Error = _net_invoke_dbus_method_nonblock(network_info,
2041 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2042 NETCONFIG_WIFI_INTERFACE, "RemoveDriver",
2043 params, DBUS_REPLY_TIMEOUT,
2044 __net_wifi_power_reply);
2046 __NETWORK_FUNC_EXIT__;
2050 static void __net_specific_scan_request_reply(GObject *source_object, GAsyncResult *res,
2053 __NETWORK_FUNC_ENTER__;
2055 GDBusConnection *conn = NULL;
2056 GError *error = NULL;
2057 net_err_e Error = NET_ERR_NONE;
2058 net_event_info_s *event_data = NULL;
2060 network_info_s *network_info = (network_info_s *)user_data;
2061 network_request_table_s *request_table;
2063 event_data = g_try_malloc0(sizeof(net_event_info_s));
2064 if (event_data == NULL) {
2065 __NETWORK_FUNC_EXIT__;
2069 conn = G_DBUS_CONNECTION(source_object);
2070 reply = g_dbus_connection_call_finish(conn, res, &error);
2072 if (error != NULL) {
2073 WIFI_LOG(WIFI_ERROR, "Scan failed. Error [%s]",
2075 Error = __net_error_string_to_enum(error->message);
2076 if (error->code == G_IO_ERROR_CANCELLED) {
2077 WIFI_LOG(WIFI_INFO, "Ignore specific scan request reply, as operation is cancelled");
2078 g_error_free(error);
2079 __NETWORK_FUNC_EXIT__;
2083 g_error_free(error);
2087 g_variant_unref(reply);
2089 request_table = network_info->request_table;
2091 if (Error == NET_ERR_IN_PROGRESS) {
2092 /* should retry scan after receiving scan result */
2093 if (request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN].flag == TRUE) {
2094 WIFI_LOG(WIFI_INFO, "Specific Scan pending");
2095 network_info->scan_pending = TRUE;
2097 } else if (Error != NET_ERR_NONE) {
2098 WIFI_LOG(WIFI_ERROR, "Specific Scan failed. Error [%d]", Error);
2100 if (request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN].flag == TRUE) {
2101 memset(&request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN],
2102 0, sizeof(network_request_table_s));
2104 event_data->Event = NET_EVENT_WIFI_SPECIFIC_SCAN_RSP;
2105 event_data->Datalength = 0;
2106 event_data->Data = NULL;
2107 event_data->Error = Error;
2109 if (network_info->event_callback)
2110 network_info->event_callback(event_data, network_info->user_data);
2113 __NETWORK_FUNC_EXIT__;
2118 WIFI_LOG(WIFI_INFO, "Specific Scan Request success");
2121 __NETWORK_FUNC_EXIT__;
2124 int _net_dbus_specific_scan_request(network_info_s *network_info, const char *ssid)
2126 __NETWORK_FUNC_ENTER__;
2127 GVariant *params = NULL;
2128 GVariantBuilder *builder;
2129 net_err_e Error = NET_ERR_NONE;
2131 WIFI_LOG(WIFI_ERROR, "specific scan ssid : %s", ssid);
2133 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
2134 g_variant_builder_add(builder, "{sv}", "SSID", g_variant_new_string(ssid));
2136 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
2137 g_variant_builder_unref(builder);
2139 /* use DBus signal than reply pending because of performance reason */
2140 Error = _net_invoke_dbus_method_nonblock(network_info,
2141 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
2142 CONNMAN_TECHNOLOGY_INTERFACE, "SpecificScan", params,
2143 DBUS_REPLY_TIMEOUT, __net_specific_scan_request_reply);
2145 if (Error == NET_ERR_IN_PROGRESS)
2146 Error = NET_ERR_NONE; //LCOV_EXCL_LINE
2148 __NETWORK_FUNC_EXIT__;
2152 int _net_dbus_bssid_scan_request(network_info_s *network_info)
2154 __NETWORK_FUNC_ENTER__;
2155 net_err_e Error = NET_ERR_NONE;
2156 GVariant *params = NULL;
2158 params = g_variant_new("(s)", network_info->interface_name);
2160 Error = _net_invoke_dbus_method_nonblock(network_info,
2161 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2162 NETCONFIG_WIFI_INTERFACE, "RequestBssidScan",
2163 params, 6 * DBUS_REPLY_TIMEOUT,
2164 __net_bssid_scan_wifi_reply);
2166 __NETWORK_FUNC_EXIT__;
2170 int _net_dbus_netlink_scan_request(network_info_s *network_info,
2171 GSList *nl_scan_list, const char *vsie)
2173 __NETWORK_FUNC_ENTER__;
2174 net_err_e Error = NET_ERR_NONE;
2175 GSList *list = NULL;
2176 GVariant *params = NULL;
2177 GVariantBuilder *builder;
2178 char ssid[NET_WLAN_ESSID_LEN + 1] = {0, };
2180 WIFI_LOG(WIFI_INFO, "Number of elements in a list: %d", g_slist_length(nl_scan_list));
2182 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
2184 if (nl_scan_list != NULL) {
2185 for (list = nl_scan_list; list; list = list->next) {
2186 WIFI_LOG(WIFI_INFO, "AP name: %s", (char *)list->data);
2187 g_strlcpy(ssid, (char *)list->data, NET_WLAN_ESSID_LEN + 1);
2188 g_variant_builder_add(builder, "{sv}", "SSID", g_variant_new_string(ssid));
2192 if (vsie[0] != '\0') {
2193 WIFI_LOG(WIFI_INFO, "VSIE: %s", vsie);
2194 g_variant_builder_add(builder, "{sv}", "VSIE", g_variant_new_string(vsie));
2197 params = g_variant_new("(s@a{sv})", network_info->interface_name, g_variant_builder_end(builder));
2198 g_variant_builder_unref(builder);
2200 Error = _net_invoke_dbus_method_nonblock(network_info,
2201 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2202 NETCONFIG_WIFI_INTERFACE, "NetlinkScan",
2203 params, 6 * DBUS_REPLY_TIMEOUT,
2204 __net_netlink_scan_wifi_reply);
2206 __NETWORK_FUNC_EXIT__;
2210 int _net_dbus_get_passpoint(network_info_s *network_info, int *enabled)
2212 __NETWORK_FUNC_ENTER__;
2214 GVariant *params = NULL;
2215 GVariant *message = NULL;
2216 net_err_e Error = NET_ERR_NONE;
2218 params = g_variant_new("(s)", network_info->interface_name);
2220 message = _net_invoke_dbus_method(network_info,
2221 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2222 NETCONFIG_WIFI_INTERFACE, "GetPasspoint",
2224 if (message == NULL) {
2225 WIFI_LOG(WIFI_ERROR, "Failed to Get Passpoint");
2226 __NETWORK_FUNC_EXIT__;
2232 g_variant_get(message, "(i)", &result);
2235 WIFI_LOG(WIFI_INFO, "Get passpoint result: %d", result);
2237 g_variant_unref(message);
2239 __NETWORK_FUNC_EXIT__;
2243 int _net_dbus_set_passpoint(network_info_s *network_info, int enable)
2245 __NETWORK_FUNC_ENTER__;
2248 net_err_e Error = NET_ERR_NONE;
2250 params = g_variant_new("(si)", network_info->interface_name, enable);
2252 Error = _net_invoke_dbus_method_nonblock(network_info,
2253 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2254 NETCONFIG_WIFI_INTERFACE, "SetPasspoint",
2255 params, 6 * DBUS_REPLY_TIMEOUT,
2256 __net_set_passpoint_reply);
2258 __NETWORK_FUNC_EXIT__;
2262 int _net_dbus_add_vsie(network_info_s *network_info,
2263 unsigned int frame_id, const char *vsie_str)
2265 __NETWORK_FUNC_ENTER__;
2267 GVariant *message = NULL;
2268 GVariant *params = NULL;
2269 net_err_e Error = NET_ERR_NONE;
2271 params = g_variant_new("(sis)", network_info->interface_name, frame_id, vsie_str);
2273 message = _net_invoke_dbus_method(network_info,
2274 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2275 NETCONFIG_WIFI_INTERFACE, "AddVsie",
2278 if (message == NULL) {
2279 WIFI_LOG(WIFI_ERROR, "Failed to add vsie");
2280 __NETWORK_FUNC_EXIT__;
2284 g_variant_unref(message);
2285 WIFI_LOG(WIFI_INFO, "Successfully Added VSIE");
2287 __NETWORK_FUNC_EXIT__;
2291 int _net_dbus_get_vsie(network_info_s *network_info,
2292 unsigned int frame_id, char **vsie_str)
2294 __NETWORK_FUNC_ENTER__;
2296 GVariant *message = NULL;
2297 GVariant *params = NULL;
2298 const char *val = NULL;
2299 net_err_e Error = NET_ERR_NONE;
2301 params = g_variant_new("(si)", network_info->interface_name, frame_id);
2303 message = _net_invoke_dbus_method(network_info,
2304 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2305 NETCONFIG_WIFI_INTERFACE, "GetVsie",
2308 if (message == NULL) {
2309 WIFI_LOG(WIFI_ERROR, "Failed to get vsie");
2310 __NETWORK_FUNC_EXIT__;
2315 g_variant_get(message, "(&s)", &val);
2317 *vsie_str = g_strdup(val);
2319 WIFI_LOG(WIFI_INFO, "GetVsie result: %s", *vsie_str);
2321 g_variant_unref(message);
2323 __NETWORK_FUNC_EXIT__;
2327 int _net_dbus_remove_vsie(network_info_s *network_info,
2328 unsigned int frame_id, const char *vsie_str)
2330 __NETWORK_FUNC_ENTER__;
2332 GVariant *message = NULL;
2333 GVariant *params = NULL;
2334 net_err_e Error = NET_ERR_NONE;
2336 params = g_variant_new("(sis)", network_info->interface_name, frame_id, vsie_str);
2338 message = _net_invoke_dbus_method(network_info,
2339 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2340 NETCONFIG_WIFI_INTERFACE, "RemoveVsie",
2343 if (message == NULL) {
2344 WIFI_LOG(WIFI_ERROR, "Failed to remove vsie");
2345 __NETWORK_FUNC_EXIT__;
2349 g_variant_unref(message);
2350 WIFI_LOG(WIFI_INFO, "Successfully Added VSIE");
2352 __NETWORK_FUNC_EXIT__;
2356 int _net_dbus_flush_bss(network_info_s *network_info)
2358 __NETWORK_FUNC_ENTER__;
2360 net_err_e Error = NET_ERR_NONE;
2361 GVariant *params = NULL;
2362 GVariant *message = NULL;
2364 params = g_variant_new("(s)", network_info->interface_name);
2366 message = _net_invoke_dbus_method(network_info,
2367 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2368 NETCONFIG_WIFI_INTERFACE, "FlushBss",
2371 if (message == NULL) {
2372 WIFI_LOG(WIFI_ERROR, "Failed to flush bss");
2373 __NETWORK_FUNC_EXIT__;
2377 g_variant_unref(message);
2378 WIFI_LOG(WIFI_INFO, "Successfully flush bss");
2380 __NETWORK_FUNC_EXIT__;
2384 int _net_dbus_set_bssid(network_info_s *network_info, char *bssid)
2386 __NETWORK_FUNC_ENTER__;
2388 net_err_e Error = NET_ERR_NONE;
2389 GVariant *message = NULL;
2391 const char *method = "SetBSSID";
2392 GVariant *params = NULL;
2394 WIFI_LOG(WIFI_INFO, "SetBSSID [%s]", bssid);
2396 params = g_variant_new("(ss)", network_info->interface_name, bssid);
2398 message = _net_invoke_dbus_method(network_info,
2399 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
2400 CONNMAN_TECHNOLOGY_INTERFACE,
2401 method, params, &Error);
2403 if (message == NULL) {
2404 WIFI_LOG(WIFI_ERROR, "Failed to set bssid");
2405 __NETWORK_FUNC_EXIT__;
2409 g_variant_unref(message);
2411 __NETWORK_FUNC_EXIT__;
2415 int _net_dbus_get_5ghz_support(network_info_s *network_info, gboolean *supported)
2417 __NETWORK_FUNC_ENTER__;
2419 net_err_e Error = NET_ERR_NONE;
2420 GVariant *message = NULL;
2421 GVariant *value = NULL;
2422 GVariantIter *iter = NULL;
2424 gboolean is_5ghz_supported = FALSE;
2426 message = _net_invoke_dbus_method(network_info,
2427 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
2428 CONNMAN_TECHNOLOGY_INTERFACE, "Get5GhzSupported",
2430 if (message == NULL) {
2431 WIFI_LOG(WIFI_ERROR, "Failed to get technology properties");
2433 __NETWORK_FUNC_EXIT__;
2437 g_variant_get(message, "(a{sv})", &iter);
2439 while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
2440 if (g_strcmp0(key, "Is5GhzSupported") == 0) {
2441 is_5ghz_supported = g_variant_get_boolean(value);
2442 g_variant_unref(value);
2448 *supported = is_5ghz_supported;
2450 WIFI_LOG(WIFI_INFO, "Successfully get 5ghz supported: %d", *supported);
2452 g_variant_iter_free(iter);
2453 g_variant_unref(message);
2455 __NETWORK_FUNC_EXIT__;
2459 int _net_dbus_get_auto_connect_mode(network_info_s *network_info,
2462 __NETWORK_FUNC_ENTER__;
2464 net_err_e Error = NET_ERR_NONE;
2465 GVariant *message = NULL;
2466 GVariant *value = NULL;
2467 GVariantIter *iter = NULL;
2469 gboolean status = TRUE;
2471 message = _net_invoke_dbus_method(network_info,
2472 CONNMAN_SERVICE, CONNMAN_MANAGER_PATH,
2473 CONNMAN_MANAGER_INTERFACE, "GetProperties",
2475 if (message == NULL) {
2476 WIFI_LOG(WIFI_ERROR, "Failed to get service properties");
2478 __NETWORK_FUNC_EXIT__;
2482 g_variant_get(message, "(a{sv})", &iter);
2484 while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
2485 if (g_strcmp0(key, "AutoConnectMode") == 0) {
2486 status = g_variant_get_boolean(value);
2487 g_variant_unref(value);
2493 *connect_mode = (int)status;
2495 WIFI_LOG(WIFI_INFO, "Successfully auto connect mode: %d", *connect_mode);
2497 g_variant_iter_free(iter);
2498 g_variant_unref(message);
2500 __NETWORK_FUNC_EXIT__;
2505 int _net_dbus_set_auto_connect_mode(network_info_s *network_info, int connect_mode)
2507 __NETWORK_FUNC_ENTER__;
2509 GVariant *message = NULL;
2510 GVariant *params = NULL;
2511 net_err_e Error = NET_ERR_NONE;
2512 char key[] = "AutoConnectMode";
2513 gboolean value_enable = TRUE;
2514 gboolean value_disable = FALSE;
2516 WIFI_LOG(WIFI_INFO, "Request auto connect mode [%s]",
2517 connect_mode == 1 ? "enable" : "disable");
2519 params = g_variant_new("(sv)", key, (connect_mode == 1) ?
2520 g_variant_new_boolean(value_enable) : g_variant_new_boolean(value_disable));
2522 message = _net_invoke_dbus_method(network_info,
2523 CONNMAN_SERVICE, CONNMAN_MANAGER_PATH,
2524 CONNMAN_MANAGER_INTERFACE, "SetProperty",
2526 if (message == NULL) {
2527 WIFI_LOG(WIFI_ERROR, "Failed to Set AutoConnect");
2528 __NETWORK_FUNC_EXIT__;
2532 g_variant_unref(message);
2534 __NETWORK_FUNC_EXIT__;
2538 int _net_dbus_wifi_set_autoconnect(network_info_s *network_info,
2539 const char *profile_name, gboolean autoconnect)
2541 __NETWORK_FUNC_ENTER__;
2543 net_err_e Error = NET_ERR_NONE;
2545 GVariant *message = NULL;
2546 GVariant *params = NULL;
2548 WIFI_LOG(WIFI_INFO, "[%s] auto connect", autoconnect ? "enable" : "disable");
2550 params = g_variant_new("(sv)", "AutoConnect", g_variant_new_boolean(autoconnect));
2552 message = _net_invoke_dbus_method(network_info,
2553 CONNMAN_SERVICE, profile_name,
2554 CONNMAN_SERVICE_INTERFACE, "SetProperty",
2556 if (message == NULL) {
2557 WIFI_LOG(WIFI_ERROR, "Failed to Set AutoConnect");
2558 __NETWORK_FUNC_EXIT__;
2562 g_variant_unref(message);
2564 __NETWORK_FUNC_EXIT__;
2568 int _net_dbus_wifi_get_autoconnect(network_info_s *network_info,
2569 const char *profile_name, gboolean *autoconnect)
2571 __NETWORK_FUNC_ENTER__;
2573 net_err_e Error = NET_ERR_NONE;
2574 GVariant *message = NULL;
2575 GVariant *value = NULL;
2576 GVariantIter *iter = NULL;
2579 message = _net_invoke_dbus_method(network_info,
2580 CONNMAN_SERVICE, profile_name,
2581 CONNMAN_SERVICE_INTERFACE, "GetProperties",
2583 if (message == NULL) {
2584 WIFI_LOG(WIFI_ERROR, "Failed to get service properties");
2585 __NETWORK_FUNC_EXIT__;
2589 g_variant_get(message, "(a{sv})", &iter);
2591 while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
2592 if (g_strcmp0(key, "AutoConnect") == 0) {
2593 *autoconnect = g_variant_get_boolean(value);
2594 g_variant_unref(value);
2600 WIFI_LOG(WIFI_INFO, "Successfully get autoconnect: %d", *autoconnect);
2602 g_variant_iter_free(iter);
2603 g_variant_unref(message);
2605 __NETWORK_FUNC_EXIT__;
2609 static void __net_wps_cancel_reply(GObject *source_object,
2610 GAsyncResult *res, gpointer user_data)
2612 __NETWORK_FUNC_ENTER__;
2614 WIFI_LOG(WIFI_INFO, "__net_wps_cancel_wifi_reply() called");
2616 GDBusConnection *conn = NULL;
2617 GVariant *dbus_result = NULL;
2618 GError *error = NULL;
2620 conn = G_DBUS_CONNECTION(source_object);
2621 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
2623 if (error != NULL) {
2624 WIFI_LOG(WIFI_ERROR, "error msg - [%s]", error->message);
2625 if (error->code == G_IO_ERROR_CANCELLED) {
2626 WIFI_LOG(WIFI_INFO, "Ignore wps cancel reply, as operation is cancelled");
2627 g_error_free(error);
2628 __NETWORK_FUNC_EXIT__;
2632 g_error_free(error);
2636 g_variant_unref(dbus_result);
2638 __NETWORK_FUNC_EXIT__;
2642 int _net_dbus_cancel_wps(network_info_s *network_info)
2644 __NETWORK_FUNC_ENTER__;
2646 GVariant *params = NULL;
2647 net_err_e Error = NET_ERR_NONE;
2649 params = g_variant_new("(s)", network_info->interface_name);
2651 Error = _net_invoke_dbus_method_nonblock(network_info,
2652 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2653 NETCONFIG_WIFI_INTERFACE, "RequestWpsCancel",
2654 params, DBUS_REPLY_TIMEOUT,
2655 __net_wps_cancel_reply);
2657 __NETWORK_FUNC_EXIT__;
2662 static void __net_wps_connect_wifi_reply(GObject *source_object,
2663 GAsyncResult *res, gpointer user_data)
2665 __NETWORK_FUNC_ENTER__;
2667 GDBusConnection *conn = NULL;
2668 GError *error = NULL;
2669 GVariant *dbus_result = NULL;
2670 net_event_info_s *event_data = NULL;
2671 net_err_e Error = NET_ERR_NONE;
2672 network_info_s *network_info = (network_info_s *)user_data;
2673 network_request_table_s *request_table;
2674 network_request_table_s *wps_info;
2676 event_data = g_try_malloc0(sizeof(net_event_info_s));
2677 if (event_data == NULL) {
2678 __NETWORK_FUNC_EXIT__;
2682 conn = G_DBUS_CONNECTION(source_object);
2683 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
2685 if (error != NULL) {
2686 WIFI_LOG(WIFI_INFO, "error msg - [%s]", error->message);
2687 Error = __net_error_string_to_enum(error->message);
2688 if (error->code == G_IO_ERROR_CANCELLED) {
2689 WIFI_LOG(WIFI_INFO, "Ignore wps connect reply, as operation is cancelled");
2690 g_error_free(error);
2691 __NETWORK_FUNC_EXIT__;
2695 g_error_free(error);
2697 WIFI_LOG(WIFI_INFO, "error msg is NULL");
2700 g_variant_unref(dbus_result);
2702 if (Error == NET_ERR_NONE) {
2704 __NETWORK_FUNC_EXIT__;
2708 WIFI_LOG(WIFI_ERROR, "Connection open failed. Error [%d]", Error);
2710 request_table = network_info->request_table;
2711 wps_info = &request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS];
2713 memset(wps_info, 0, sizeof(network_request_table_s));
2715 event_data->Error = Error;
2716 event_data->Event = NET_EVENT_WIFI_WPS_RSP;
2718 WIFI_LOG(WIFI_INFO, "Sending NET_EVENT_WIFI_WPS_RSP Error = %s",
2719 _net_print_error(event_data->Error));
2721 if (network_info->event_callback)
2722 network_info->event_callback(event_data, network_info->user_data);
2725 __NETWORK_FUNC_EXIT__;
2728 int _net_dbus_open_connection_without_ssid(network_info_s *network_info)
2730 __NETWORK_FUNC_ENTER__;
2732 net_err_e Error = NET_ERR_NONE;
2733 GVariant *params = NULL;
2735 params = g_variant_new("(ss)", network_info->interface_name, "PBC");
2736 WIFI_LOG(WIFI_INFO, "Invoke wps connection without ssid");
2738 Error = _net_invoke_dbus_method_nonblock(network_info,
2739 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2740 NETCONFIG_WIFI_INTERFACE, "RequestWpsConnect",
2741 params, DBUS_REPLY_TIMEOUT,
2742 __net_wps_connect_wifi_reply);
2744 __NETWORK_FUNC_EXIT__;
2748 int _net_dbus_open_pin_connection_without_ssid(network_info_s *network_info,
2751 __NETWORK_FUNC_ENTER__;
2753 net_err_e Error = NET_ERR_NONE;
2755 GVariant *params = NULL;
2756 params = g_variant_new("(ss)", network_info->interface_name, pin);
2758 Error = _net_invoke_dbus_method_nonblock(network_info,
2759 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2760 NETCONFIG_WIFI_INTERFACE, "RequestWpsConnect",
2761 params, DBUS_REPLY_TIMEOUT,
2762 __net_wps_connect_wifi_reply);
2765 __NETWORK_FUNC_EXIT__;
2769 int _net_dbus_dpp_enter_peer_uri(network_info_s *network_info,
2770 guint32 peer_id, guint32 own_id, const char *uri)
2772 __NETWORK_FUNC_ENTER__;
2774 GVariant *params = NULL;
2775 GVariantBuilder *builder;
2776 GVariant *message = NULL;
2777 net_err_e Error = NET_ERR_NONE;
2779 /* TODO: send & handle dbus */
2780 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
2782 g_variant_builder_add(builder, "{sv}", "peer_id", g_variant_new_uint32(peer_id));
2783 g_variant_builder_add(builder, "{sv}", "own_id", g_variant_new_uint32(own_id));
2784 g_variant_builder_add(builder, "{sv}", "uri", g_variant_new_string(uri));
2786 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
2787 g_variant_builder_unref(builder);
2789 message = _net_invoke_dbus_method(network_info,
2790 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
2791 "DppEnterPeerUri", params, &Error);
2793 if (message == NULL) {
2794 WIFI_LOG(WIFI_ERROR, "Failed to DppEnterPeerUri");
2795 __NETWORK_FUNC_EXIT__;
2799 g_variant_unref(message);
2800 WIFI_LOG(WIFI_INFO, "Successfully DppEnterPeerUri");
2802 __NETWORK_FUNC_EXIT__;
2806 int _net_dbus_dpp_generate_uri(network_info_s *network_info,
2807 guint32 peer_id, guint32 own_id, gboolean is_initiator, const char *key)
2809 __NETWORK_FUNC_ENTER__;
2811 GVariant *params = NULL;
2812 GVariantBuilder *builder;
2813 GVariant *message = NULL;
2814 net_err_e Error = NET_ERR_NONE;
2816 /* TODO: send & handle dbus */
2817 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
2819 g_variant_builder_add(builder, "{sv}", "peer_id", g_variant_new_uint32(peer_id));
2820 g_variant_builder_add(builder, "{sv}", "own_id", g_variant_new_uint32(own_id));
2821 g_variant_builder_add(builder, "{sv}", "is_initiator", g_variant_new_boolean(is_initiator));
2823 g_variant_builder_add(builder, "{sv}", "key", g_variant_new_string(key));
2825 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
2826 g_variant_builder_unref(builder);
2828 message = _net_invoke_dbus_method(network_info,
2829 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
2830 "DppGenerateUri", params, &Error);
2832 if (message == NULL) {
2833 WIFI_LOG(WIFI_ERROR, "Failed to DppGenerateUri");
2834 __NETWORK_FUNC_EXIT__;
2838 g_variant_unref(message);
2839 WIFI_LOG(WIFI_INFO, "Successfully DppGenerateUri");
2841 __NETWORK_FUNC_EXIT__;
2845 int _net_dbus_dpp_start_configurator_initiator(network_info_s *network_info,
2846 const gchar *group_id, const gchar *ssid,
2847 const gchar *peer_uri, guint32 peer_id, const gchar *net_role,
2848 const gchar *akm, const gchar *configurator_key, const gchar *pass)
2850 __NETWORK_FUNC_ENTER__;
2851 GVariant *params = NULL;
2852 GVariantBuilder *builder;
2853 GVariant *message = NULL;
2854 net_err_e Error = NET_ERR_NONE;
2856 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
2858 g_variant_builder_add(builder, "{sv}", "group_id", g_variant_new_string(group_id));
2860 g_variant_builder_add(builder, "{sv}", "ssid", g_variant_new_string(ssid));
2862 g_variant_builder_add(builder, "{sv}", "peer_uri", g_variant_new_string(peer_uri));
2863 g_variant_builder_add(builder, "{sv}", "peer_id", g_variant_new_uint32(peer_id));
2865 g_variant_builder_add(builder, "{sv}", "net_role", g_variant_new_string(net_role));
2867 g_variant_builder_add(builder, "{sv}", "akm", g_variant_new_string(akm));
2868 if (configurator_key)
2869 g_variant_builder_add(builder, "{sv}", "configurator_key", g_variant_new_string(configurator_key));
2871 g_variant_builder_add(builder, "{sv}", "pass", g_variant_new_string(pass));
2872 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
2873 g_variant_builder_unref(builder);
2875 message = _net_invoke_dbus_method(network_info,
2876 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
2877 "DppStartConfiguratorInitiator", params, &Error);
2879 if (message == NULL) {
2880 WIFI_LOG(WIFI_ERROR, "Failed to DppStartConfiguratorInitiator");
2881 __NETWORK_FUNC_EXIT__;
2885 g_variant_unref(message);
2886 WIFI_LOG(WIFI_INFO, "Successfully DppStartConfiguratorInitiator");
2888 __NETWORK_FUNC_EXIT__;
2892 int _net_dbus_dpp_start_enrollee_initiator(network_info_s *network_info,
2893 const gchar *peer_uri, guint32 peer_id)
2895 __NETWORK_FUNC_ENTER__;
2896 GVariant *params = NULL;
2897 GVariantBuilder *builder;
2898 GVariant *message = NULL;
2899 net_err_e Error = NET_ERR_NONE;
2901 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
2903 g_variant_builder_add(builder, "{sv}", "peer_uri", g_variant_new_string(peer_uri));
2904 g_variant_builder_add(builder, "{sv}", "peer_id", g_variant_new_uint32(peer_id));
2905 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
2906 g_variant_builder_unref(builder);
2908 message = _net_invoke_dbus_method(network_info,
2909 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
2910 "DppStartEnrolleeInitiator", params, &Error);
2912 if (message == NULL) {
2913 WIFI_LOG(WIFI_ERROR, "Failed to DppStartEnrolleeInitiator");
2914 __NETWORK_FUNC_EXIT__;
2918 g_variant_unref(message);
2919 WIFI_LOG(WIFI_INFO, "Successfully DppStartEnrolleeInitiator");
2921 __NETWORK_FUNC_EXIT__;
2925 int _net_dbus_dpp_start_configurator_responder(network_info_s *network_info,
2926 const gchar *group_id, const gchar *ssid, const gchar *net_role, const gchar *akm,
2927 const gchar *auth_key, const gchar *configurator_key, const gchar *pass)
2929 __NETWORK_FUNC_ENTER__;
2930 GVariant *params = NULL;
2931 GVariantBuilder *builder;
2932 GVariant *message = NULL;
2933 net_err_e Error = NET_ERR_NONE;
2935 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
2937 g_variant_builder_add(builder, "{sv}", "group_id", g_variant_new_string(group_id));
2939 g_variant_builder_add(builder, "{sv}", "ssid", g_variant_new_string(ssid));
2941 g_variant_builder_add(builder, "{sv}", "net_role", g_variant_new_string(net_role));
2943 g_variant_builder_add(builder, "{sv}", "akm", g_variant_new_string(akm));
2945 g_variant_builder_add(builder, "{sv}", "auth_key", g_variant_new_string(auth_key));
2946 if (configurator_key)
2947 g_variant_builder_add(builder, "{sv}", "configurator_key", g_variant_new_string(configurator_key));
2949 g_variant_builder_add(builder, "{sv}", "pass", g_variant_new_string(pass));
2950 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
2951 g_variant_builder_unref(builder);
2953 message = _net_invoke_dbus_method(network_info,
2954 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
2955 "DppStartConfiguratorResponder", params, &Error);
2957 if (message == NULL) {
2958 WIFI_LOG(WIFI_ERROR, "Failed to DppStartConfiguratorResponder");
2959 __NETWORK_FUNC_EXIT__;
2963 g_variant_unref(message);
2964 WIFI_LOG(WIFI_INFO, "Successfully DppStartConfiguratorResponder");
2966 __NETWORK_FUNC_EXIT__;
2970 int _net_dbus_dpp_start_enrollee_responder(network_info_s *network_info,
2971 const gchar *auth_key)
2973 __NETWORK_FUNC_ENTER__;
2974 GVariant *params = NULL;
2975 GVariantBuilder *builder;
2976 GVariant *message = NULL;
2977 net_err_e Error = NET_ERR_NONE;
2979 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
2981 g_variant_builder_add(builder, "{sv}", "auth_key", g_variant_new_string(auth_key));
2982 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
2983 g_variant_builder_unref(builder);
2985 message = _net_invoke_dbus_method(network_info,
2986 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
2987 "DppStartEnrolleeResponder", params, &Error);
2989 if (message == NULL) {
2990 WIFI_LOG(WIFI_ERROR, "Failed to DppStartEnrolleeResponder");
2991 __NETWORK_FUNC_EXIT__;
2995 g_variant_unref(message);
2996 WIFI_LOG(WIFI_INFO, "Successfully DppStartEnrolleeResponder");
2998 __NETWORK_FUNC_EXIT__;
3002 int _net_dbus_dpp_stop(network_info_s *network_info,
3003 guint32 peer_id, guint32 own_id, gboolean is_initiator)
3005 __NETWORK_FUNC_ENTER__;
3006 GVariant *params = NULL;
3007 GVariantBuilder *builder;
3008 GVariant *message = NULL;
3009 net_err_e Error = NET_ERR_NONE;
3011 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
3013 g_variant_builder_add(builder, "{sv}", "peer_id", g_variant_new_uint32(peer_id));
3014 g_variant_builder_add(builder, "{sv}", "own_id", g_variant_new_uint32(own_id));
3015 g_variant_builder_add(builder, "{sv}", "is_initiator", g_variant_new_boolean(is_initiator));
3017 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
3018 g_variant_builder_unref(builder);
3020 message = _net_invoke_dbus_method(network_info,
3021 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
3022 "DppStop", params, &Error);
3024 if (message == NULL) {
3025 WIFI_LOG(WIFI_ERROR, "Failed to stop DPP");
3026 __NETWORK_FUNC_EXIT__;
3030 g_variant_unref(message);
3031 WIFI_LOG(WIFI_INFO, "Successfully stop DPP");
3033 __NETWORK_FUNC_EXIT__;
3037 int _net_dbus_tdls_disconnect(network_info_s *network_info, const char* peer_mac_addr)
3039 __NETWORK_FUNC_ENTER__;
3041 net_err_e Error = NET_ERR_NONE;
3042 GVariant *message = NULL;
3043 GVariant *params = NULL;
3044 const char *method = "TdlsDisconnect";
3047 params = g_variant_new("(ss)", network_info->interface_name, peer_mac_addr);
3049 message = _net_invoke_dbus_method(network_info,
3050 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3051 NETCONFIG_WIFI_INTERFACE, method,
3054 if (message == NULL) {
3055 WIFI_LOG(WIFI_ERROR, "Failed to TDLS Disconnect Request");
3056 __NETWORK_FUNC_EXIT__;
3060 g_variant_get(message, "(i)", &ret);
3062 WIFI_LOG(WIFI_INFO, "[%s] success", method);
3063 WIFI_LOG(WIFI_INFO, ", status [%d]", ret);
3066 * Below are the expected error codes
3067 * 0x00 - NETCONFIG_ERROR_TDLS_NO_ERROR
3068 * 0x01 - NETCONFIG_ERROR_INTERNAL
3069 * 0x04 - NETCONFIG_ERROR_TDLS_ALREADY_DONE
3071 if (ret == 0x00 || ret == 0x04)
3072 Error = NET_ERR_NONE;
3074 Error = NET_ERR_UNKNOWN;
3076 g_variant_unref(message);
3077 __NETWORK_FUNC_EXIT__;
3082 int _net_dbus_tdls_connected_peer(network_info_s *network_info,
3083 char** peer_mac_addr)
3085 __NETWORK_FUNC_ENTER__;
3087 net_err_e Error = NET_ERR_NONE;
3088 GVariant *message = NULL;
3089 const char *method = "TdlsConnectedPeer";
3091 if (NULL == peer_mac_addr) {
3092 WIFI_LOG(WIFI_ERROR, "Invalid Parameter");
3093 __NETWORK_FUNC_EXIT__;
3094 return NET_ERR_INVALID_PARAM;
3097 message = _net_invoke_dbus_method(network_info,
3098 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3099 NETCONFIG_WIFI_INTERFACE, method,
3100 g_variant_new("(s)", network_info->interface_name),
3103 if (message == NULL) {
3104 WIFI_LOG(WIFI_ERROR, "Failed to Get Peer Connected Mac address");
3105 __NETWORK_FUNC_EXIT__;
3109 g_variant_get(message, "(s)", peer_mac_addr);
3111 WIFI_LOG(WIFI_INFO, "[%s] success", method);
3112 WIFI_LOG(WIFI_INFO, "TDLS Peer Mac address [%s]", *peer_mac_addr);
3114 g_variant_unref(message);
3115 __NETWORK_FUNC_EXIT__;
3120 int _net_dbus_tdls_connect(network_info_s *network_info, const char *peer_mac_addr)
3123 __NETWORK_FUNC_ENTER__;
3125 net_err_e Error = NET_ERR_NONE;
3126 GVariant *message = NULL;
3127 GVariant *params = NULL;
3128 const char *method = "TdlsConnect";
3131 params = g_variant_new("(ss)", network_info->interface_name, peer_mac_addr);
3133 message = _net_invoke_dbus_method(network_info,
3134 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3135 NETCONFIG_WIFI_INTERFACE, method,
3138 if (message == NULL) {
3139 WIFI_LOG(WIFI_ERROR, "Failed to TDLS Connect Request");
3140 __NETWORK_FUNC_EXIT__;
3144 g_variant_get(message, "(i)", &ret);
3146 WIFI_LOG(WIFI_INFO, "[%s] success", method);
3147 WIFI_LOG(WIFI_INFO, ", status [%d]", ret);
3150 * Below are the expected error codes
3151 * 0x00 - NETCONFIG_ERROR_TDLS_NO_ERROR
3152 * 0x01 - NETCONFIG_ERROR_INTERNAL
3155 Error = NET_ERR_NONE;
3157 Error = NET_ERR_UNKNOWN;
3159 g_variant_unref(message);
3160 __NETWORK_FUNC_EXIT__;
3165 int _net_dbus_tdls_discover(network_info_s *network_info, const char *peer_mac_addr)
3168 __NETWORK_FUNC_ENTER__;
3170 net_err_e Error = NET_ERR_NONE;
3171 GVariant *message = NULL;
3172 GVariant *params = NULL;
3173 const char *method = "TdlsDiscover";
3176 params = g_variant_new("(ss)", network_info->interface_name, peer_mac_addr);
3178 message = _net_invoke_dbus_method(network_info,
3179 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3180 NETCONFIG_WIFI_INTERFACE, method,
3183 if (message == NULL) {
3184 WIFI_LOG(WIFI_ERROR, "Failed to request TDLS discover : Error [%d]", Error);
3185 __NETWORK_FUNC_EXIT__;
3189 g_variant_get(message, "(i)", &ret);
3191 WIFI_LOG(WIFI_INFO, "[%s] success", method);
3192 WIFI_LOG(WIFI_INFO, ", status [%d]", ret);
3195 * Below are the expected error codes
3196 * 0x00 - NETCONFIG_ERROR_TDLS_NO_ERROR
3197 * 0x01 - NETCONFIG_ERROR_INTERNAL
3198 * 0x04 - NETCONFIG_ERROR_TDLS_ALREADY_DONE
3201 Error = NET_ERR_NONE;
3202 else if (ret == 0x01)
3203 Error = NET_ERR_FAIL_TDLS_DISCOVER;
3204 else if (ret == 0x04) /* 0x04: TDLS Discovery in Progress at lower layer */
3205 Error = NET_ERR_IN_PROGRESS;
3207 Error = NET_ERR_UNKNOWN;
3209 __NETWORK_FUNC_EXIT__;
3214 int _net_dbus_tdls_enable_channel_switch(network_info_s *network_info,
3215 const char* peer_mac_addr, int freq)
3217 __NETWORK_FUNC_ENTER__;
3219 net_err_e Error = NET_ERR_NONE;
3220 GVariant *message = NULL;
3221 GVariant *params = NULL;
3224 params = g_variant_new("(ssi)", network_info->interface_name, peer_mac_addr, freq);
3226 message = _net_invoke_dbus_method(network_info,
3227 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3228 NETCONFIG_WIFI_INTERFACE, "TdlsChannelSwitch",
3231 if (message == NULL) {
3232 WIFI_LOG(WIFI_ERROR, "Failed to Enable TDLS Channel Switch Request");
3233 __NETWORK_FUNC_EXIT__;
3237 g_variant_get(message, "(i)", &ret);
3239 WIFI_LOG(WIFI_INFO, "Status [%d]", ret);
3242 Error = NET_ERR_NONE;
3244 Error = NET_ERR_UNKNOWN;
3246 g_variant_unref(message);
3247 __NETWORK_FUNC_EXIT__;
3252 int _net_dbus_tdls_disable_channel_switch(network_info_s *network_info,
3253 const char* peer_mac_addr)
3255 __NETWORK_FUNC_ENTER__;
3257 net_err_e Error = NET_ERR_NONE;
3258 GVariant *message = NULL;
3259 GVariant *params = NULL;
3262 params = g_variant_new("(ss)", network_info->interface_name, peer_mac_addr);
3264 message = _net_invoke_dbus_method(network_info,
3265 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3266 NETCONFIG_WIFI_INTERFACE, "TdlsCancelChannelSwitch",
3269 if (message == NULL) {
3270 WIFI_LOG(WIFI_ERROR, "Failed to Disable TDLS Channel Switch Request");
3271 __NETWORK_FUNC_EXIT__;
3275 g_variant_get(message, "(i)", &ret);
3277 WIFI_LOG(WIFI_INFO, "Status [%d]", ret);
3280 Error = NET_ERR_NONE;
3282 Error = NET_ERR_UNKNOWN;
3284 g_variant_unref(message);
3285 __NETWORK_FUNC_EXIT__;
3292 int _net_dbus_config_get_id_list(network_info_s *network_info, GSList **list)
3294 __NETWORK_FUNC_ENTER__;
3296 net_err_e Error = NET_ERR_NONE;
3297 GVariant *message = NULL;
3298 GVariantIter *iter = NULL;
3299 gchar *config_id = NULL;
3301 message = _net_invoke_dbus_method(network_info,
3302 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3303 NETCONFIG_WIFI_INTERFACE, "GetConfigIds",
3304 g_variant_new("(s)", network_info->interface_name), &Error);
3306 if (message == NULL) {
3307 WIFI_LOG(WIFI_ERROR, "Failed to GetConfigIds");
3308 __NETWORK_FUNC_EXIT__;
3312 g_variant_get(message, "(as)", &iter);
3313 while (g_variant_iter_loop(iter, "s", &config_id))
3314 *list = g_slist_append(*list, g_strdup(config_id));
3316 g_variant_iter_free(iter);
3317 g_variant_unref(message);
3319 __NETWORK_FUNC_EXIT__;
3324 int _net_dbus_config_set_field(network_info_s *network_info,
3325 const gchar *config_id, const gchar *key, const gchar *value)
3327 __NETWORK_FUNC_ENTER__;
3329 net_err_e Error = NET_ERR_NONE;
3330 GVariant *message = NULL;
3332 message = _net_invoke_dbus_method(network_info,
3333 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3334 NETCONFIG_WIFI_INTERFACE, "SetConfigField",
3335 g_variant_new("(sss)", config_id, key, value), &Error);
3337 if (message == NULL) {
3338 WIFI_LOG(WIFI_ERROR, "Failed to SetConfigField");
3339 __NETWORK_FUNC_EXIT__;
3343 g_variant_unref(message);
3345 __NETWORK_FUNC_EXIT__;
3350 int _net_dbus_config_get_passphrase(network_info_s *network_info,
3351 const gchar *config_id, gchar **passphrase)
3353 __NETWORK_FUNC_ENTER__;
3355 net_err_e Error = NET_ERR_NONE;
3356 GVariant *message = NULL;
3359 message = _net_invoke_dbus_method(network_info,
3360 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3361 NETCONFIG_WIFI_INTERFACE, "GetConfigPassphrase",
3362 g_variant_new("(s)", config_id), &Error);
3364 if (message == NULL) {
3365 WIFI_LOG(WIFI_ERROR, "Failed to GetConfigPassphrase");
3366 __NETWORK_FUNC_EXIT__;
3370 g_variant_get(message, "(s)", &val);
3372 *passphrase = g_strdup(val);
3375 g_variant_unref(message);
3377 __NETWORK_FUNC_EXIT__;
3382 int _net_dbus_config_save_configurations(network_info_s *network_info,
3383 const gchar *config_id, const gchar *name, const gchar *ssid, const gchar *passphrase,
3384 const gchar *proxy_address, net_ip_info_config_s *ip_info, guint32 frequency,
3385 gboolean is_hidden, gboolean is_created)
3387 __NETWORK_FUNC_ENTER__;
3389 net_err_e Error = NET_ERR_NONE;
3390 GVariantBuilder *b = NULL;
3391 GVariant *params = NULL;
3392 GVariant *message = NULL;
3393 const char *manual_method = "manual";
3394 const char *dhcp_method = "dhcp";
3396 char *dns_address = NULL, *temp = NULL;
3398 b = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
3399 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_NAME, g_variant_new_string(name));
3400 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_SSID, g_variant_new_string(ssid));
3401 if (passphrase != NULL)
3402 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_PASSPHRASE, g_variant_new_string(passphrase));
3403 if (proxy_address != NULL)
3404 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_PROXYADDRESS, g_variant_new_string(proxy_address));
3405 if (is_hidden == TRUE)
3406 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_HIDDEN, g_variant_new_string("TRUE"));
3407 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_FREQUENCY, g_variant_new_uint32(frequency));
3408 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_CREATED, g_variant_new_boolean(is_created));
3410 switch (ip_info->ip_type) {
3411 case NET_IP_CONFIG_TYPE_STATIC:
3412 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV4_METHOD,
3413 g_variant_new_string(manual_method));
3415 if (ip_info->ip_address)
3416 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV4_ADDRESS,
3417 g_variant_new_string(ip_info->ip_address));
3419 if (ip_info->subnet_mask)
3420 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV4_SUBNET_MASK,
3421 g_variant_new_string(ip_info->subnet_mask));
3423 if (ip_info->prefix_length > 0)
3424 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV6_PREFIX_LEN,
3425 g_variant_new_int32(ip_info->prefix_length));
3427 if (ip_info->gateway_address)
3428 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV4_GATEWAY_ADDRESS,
3429 g_variant_new_string(ip_info->gateway_address));
3431 if (ip_info->dns_type == NET_DNS_CONFIG_TYPE_STATIC)
3432 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV4_DNS_METHOD,
3433 g_variant_new_string(manual_method));
3435 for (i = 0; i < ip_info->dns_count; i++) {
3437 dns_address = g_strdup_printf("%s%s;", temp,
3438 ip_info->dns_address[i]);
3440 dns_address = g_strdup_printf("%s;", ip_info->dns_address[i]);
3446 if (ip_info->dns_count > 0)
3447 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_DNS_ADDRESS,
3448 g_variant_new_string(dns_address));
3450 g_free(dns_address);
3453 case NET_IP_CONFIG_TYPE_DYNAMIC:
3454 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV4_METHOD,
3455 g_variant_new_string(dhcp_method));
3457 if (ip_info->dns_type == NET_DNS_CONFIG_TYPE_DYNAMIC)
3458 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV4_DNS_METHOD,
3459 g_variant_new_string(dhcp_method));
3461 else if (ip_info->dns_type == NET_DNS_CONFIG_TYPE_STATIC) {
3462 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_IPV4_DNS_METHOD,
3463 g_variant_new_string(manual_method));
3465 for (i = 0; i < ip_info->dns_count; i++) {
3467 dns_address = g_strdup_printf("%s%s;", temp,
3468 ip_info->dns_address[i]);
3470 dns_address = g_strdup_printf("%s;",
3471 ip_info->dns_address[i]);
3477 if (ip_info->dns_count > 0)
3478 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_DNS_ADDRESS,
3479 g_variant_new_string(dns_address));
3481 g_free(dns_address);
3488 params = g_variant_new("(ss@a{sv})", network_info->interface_name,
3489 config_id, g_variant_builder_end(b));
3490 g_variant_builder_unref(b);
3492 message = _net_invoke_dbus_method(network_info,
3493 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3494 NETCONFIG_WIFI_INTERFACE, "SaveConfiguration",
3497 if (message == NULL) {
3498 WIFI_LOG(WIFI_ERROR, "Failed to SaveConfiguration");
3499 __NETWORK_FUNC_EXIT__;
3503 g_variant_unref(message);
3505 __NETWORK_FUNC_EXIT__;
3510 int _net_dbus_config_save_eap_configurations(network_info_s *network_info,
3511 const gchar *config_id, const gchar *name, const gchar *ssid, const gchar *passphrase,
3512 const gchar *proxy_address, net_eap_config_s *eap_config, guint32 frequency,
3513 gboolean is_hidden, gboolean is_created)
3515 __NETWORK_FUNC_ENTER__;
3517 net_err_e Error = NET_ERR_NONE;
3518 GVariantBuilder *b = NULL;
3519 GVariant *params = NULL;
3520 GVariant *message = NULL;
3522 b = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
3523 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_NAME, g_variant_new_string(name));
3524 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_SSID, g_variant_new_string(ssid));
3525 if (passphrase != NULL)
3526 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_PASSPHRASE, g_variant_new_string(passphrase));
3527 if (proxy_address != NULL)
3528 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_PROXYADDRESS, g_variant_new_string(proxy_address));
3529 if (is_hidden == TRUE)
3530 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_HIDDEN, g_variant_new_string("TRUE"));
3531 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_FREQUENCY, g_variant_new_uint32(frequency));
3532 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_CREATED, g_variant_new_boolean(is_created));
3534 if (eap_config != NULL) {
3535 gchar* auth_type = NULL;
3536 gchar* eap_type = NULL;
3537 if (eap_config->anonymous_identity != NULL)
3538 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_ANONYMOUS_IDENTITY, g_variant_new_string(eap_config->anonymous_identity));
3539 if (eap_config->ca_cert != NULL)
3540 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_CACERT, g_variant_new_string(eap_config->ca_cert));
3541 if (eap_config->client_cert != NULL)
3542 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_CLIENTCERT, g_variant_new_string(eap_config->client_cert));
3543 if (eap_config->private_key != NULL)
3544 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_PRIVATEKEY, g_variant_new_string(eap_config->private_key));
3545 if (eap_config->private_key_password != NULL)
3546 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_PRIVATEKEY_PASSWORD, g_variant_new_string(eap_config->private_key_password));
3547 if (eap_config->identity != NULL)
3548 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_IDENTITY, g_variant_new_string(eap_config->identity));
3549 if (eap_config->subject_match != NULL)
3550 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_SUBJECT_MATCH, g_variant_new_string(eap_config->subject_match));
3552 auth_type = __net_wifi_eap_auth_type_to_string(eap_config->eap_auth_type);
3553 if (auth_type != NULL)
3554 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_AUTH_TYPE, g_variant_new_string(auth_type));
3556 eap_type = __net_wifi_eap_type_to_string(eap_config->eap_type);
3557 if (eap_type != NULL)
3558 g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_TYPE, g_variant_new_string(eap_type));
3564 params = g_variant_new("(ss@a{sv})", network_info->interface_name,
3565 config_id, g_variant_builder_end(b));
3566 g_variant_builder_unref(b);
3568 message = _net_invoke_dbus_method(network_info,
3569 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3570 NETCONFIG_WIFI_INTERFACE, "SaveEapConfiguration",
3573 if (message == NULL) {
3574 WIFI_LOG(WIFI_ERROR, "Failed to SaveEapConfiguration");
3575 __NETWORK_FUNC_EXIT__;
3579 g_variant_unref(message);
3581 __NETWORK_FUNC_EXIT__;
3586 int _net_dbus_config_remove_configurations(network_info_s *network_info,
3587 const gchar *config_id)
3589 __NETWORK_FUNC_ENTER__;
3591 net_err_e Error = NET_ERR_NONE;
3592 GVariant *message = NULL;
3594 message = _net_invoke_dbus_method(network_info,
3595 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3596 NETCONFIG_WIFI_INTERFACE, "RemoveConfiguration",
3597 g_variant_new("(ss)", network_info->interface_name, config_id),
3600 if (message == NULL) {
3601 WIFI_LOG(WIFI_ERROR, "Failed to RemoveConfiguration");
3602 __NETWORK_FUNC_EXIT__;
3606 g_variant_unref(message);
3608 __NETWORK_FUNC_EXIT__;
3613 int _net_dbus_config_load_configurations(network_info_s *network_info,
3614 const gchar *config_id, gchar **name, gchar **passphrase,
3615 net_wifi_security_type_e *security_type, gchar **proxy_address,
3616 gboolean *is_hidden, net_ip_info_config_s **ip_info,
3617 guint32 *frequency, void *last_error)
3619 __NETWORK_FUNC_ENTER__;
3621 net_err_e Error = NET_ERR_NONE;
3622 GVariant *message = NULL;
3626 int *wifi_last_error = (int *)last_error;
3629 message = _net_invoke_dbus_method(network_info,
3630 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3631 NETCONFIG_WIFI_INTERFACE, "LoadConfiguration",
3632 g_variant_new("(ss)", network_info->interface_name, config_id),
3635 if (message == NULL) {
3636 WIFI_LOG(WIFI_ERROR, "Failed to LoadConfiguration");
3637 __NETWORK_FUNC_EXIT__;
3641 g_variant_get(message, "(a{sv})", &iter);
3642 while (g_variant_iter_loop(iter, "{sv}", &field, &value)) {
3643 if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) {
3644 if (g_strcmp0(field, WIFI_CONFIG_NAME) == 0) {
3645 *name = g_strdup(g_variant_get_string(value, NULL));
3646 } else if (g_strcmp0(field, WIFI_CONFIG_PASSPHRASE) == 0) {
3647 *passphrase = g_strdup(g_variant_get_string(value, NULL));
3648 } else if (g_strcmp0(field, WIFI_CONFIG_SECURITY_TYPE) == 0) {
3649 *security_type = __net_wifi_security_type_to_int(g_variant_get_string(value, NULL));
3650 } else if (g_strcmp0(field, WIFI_CONFIG_HIDDEN) == 0) {
3651 const gchar *r_hidden = g_variant_get_string(value, NULL);
3652 if (g_strcmp0(r_hidden, "TRUE") == 0)
3656 } else if (g_strcmp0(field, WIFI_CONFIG_FREQUENCY) == 0) {
3657 *frequency = g_variant_get_uint32(value);
3658 } else if (g_strcmp0(field, WIFI_CONFIG_PROXYADDRESS) == 0) {
3659 const gchar *r_proxy_address = g_variant_get_string(value, NULL);
3660 if (g_strcmp0(r_proxy_address, "NONE") == 0)
3661 *proxy_address = NULL;
3663 *proxy_address = g_strdup(r_proxy_address);
3664 } else if (g_strcmp0(field, WIFI_CONFIG_IPV4_METHOD) == 0) {
3665 const gchar *type = g_variant_get_string(value, NULL);
3666 if (g_strcmp0(type, "manual") == 0)
3667 (*ip_info)->ip_type = NET_IP_CONFIG_TYPE_STATIC;
3668 else if (g_strcmp0(type, "dhcp") == 0)
3669 (*ip_info)->ip_type = NET_IP_CONFIG_TYPE_DYNAMIC;
3670 } else if (g_strcmp0(field, WIFI_CONFIG_IPV4_ADDRESS) == 0) {
3671 const gchar *ip_address = g_variant_get_string(value, NULL);
3672 (*ip_info)->ip_address = g_strdup(ip_address);
3673 } else if (g_strcmp0(field, WIFI_CONFIG_IPV4_SUBNET_MASK) == 0) {
3674 const gchar *subnet_mask = g_variant_get_string(value, NULL);
3675 (*ip_info)->subnet_mask = g_strdup(subnet_mask);
3676 } else if (g_strcmp0(field, WIFI_CONFIG_IPV6_PREFIX_LEN) == 0) {
3677 int prefix_len = g_variant_get_int32(value);
3678 (*ip_info)->prefix_length = prefix_len;
3679 } else if (g_strcmp0(field, WIFI_CONFIG_IPV4_GATEWAY_ADDRESS) == 0) {
3680 const gchar *gateway_address = g_variant_get_string(value, NULL);
3681 (*ip_info)->gateway_address = g_strdup(gateway_address);
3682 } else if (g_strcmp0(field, WIFI_CONFIG_IPV4_DNS_METHOD) == 0) {
3683 const gchar *type = g_variant_get_string(value, NULL);
3684 if (g_strcmp0(type, "manual") == 0)
3685 (*ip_info)->dns_type = NET_DNS_CONFIG_TYPE_STATIC;
3686 else if (g_strcmp0(type, "dhcp") == 0)
3687 (*ip_info)->dns_type = NET_DNS_CONFIG_TYPE_DYNAMIC;
3688 } else if (g_strcmp0(field, WIFI_CONFIG_DNS_ADDRESS) == 0) {
3689 const gchar *dns_address = g_variant_get_string(value, NULL);
3690 (*ip_info)->dns_address[order] = g_strdup(dns_address);
3692 (*ip_info)->dns_count = order;
3693 } else if (g_strcmp0(field, WIFI_CONFIG_FAILURE) == 0) {
3694 *wifi_last_error = __net_wifi_last_error_to_enum(g_variant_get_string(value, NULL));
3699 g_variant_iter_free(iter);
3700 g_variant_unref(message);
3702 __NETWORK_FUNC_EXIT__;
3707 int _net_dbus_config_load_eap_configurations(network_info_s *network_info,
3708 const gchar *config_id, gchar **name, net_wifi_security_type_e *security_type,
3709 gchar **proxy_address, gboolean *is_hidden, net_eap_config_s **eap_config,
3710 guint32 *frequency, void *last_error)
3712 __NETWORK_FUNC_ENTER__;
3714 net_err_e Error = NET_ERR_NONE;
3715 GVariant *message = NULL;
3719 int *wifi_last_error = (int *)last_error;
3721 message = _net_invoke_dbus_method(network_info,
3722 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3723 NETCONFIG_WIFI_INTERFACE, "LoadEapConfiguration",
3724 g_variant_new("(ss)", network_info->interface_name, config_id),
3727 if (message == NULL) {
3728 WIFI_LOG(WIFI_ERROR, "Failed to LoadEapConfiguration");
3729 __NETWORK_FUNC_EXIT__;
3733 g_variant_get(message, "(a{sv})", &iter);
3734 while (g_variant_iter_loop(iter, "{sv}", &field, &value)) {
3735 if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) {
3736 if (g_strcmp0(field, WIFI_CONFIG_NAME) == 0) {
3737 *name = g_strdup(g_variant_get_string(value, NULL));
3738 } else if (g_strcmp0(field, WIFI_CONFIG_SECURITY_TYPE) == 0) {
3739 *security_type = __net_wifi_security_type_to_int(g_variant_get_string(value, NULL));
3740 } else if (g_strcmp0(field, WIFI_CONFIG_HIDDEN) == 0) {
3741 const gchar *r_hidden = g_variant_get_string(value, NULL);
3742 if (g_strcmp0(r_hidden, "TRUE") == 0)
3746 } else if (g_strcmp0(field, WIFI_CONFIG_FREQUENCY) == 0) {
3747 *frequency = g_variant_get_uint32(value);
3748 } else if (g_strcmp0(field, WIFI_CONFIG_PROXYADDRESS) == 0) {
3749 const gchar *r_proxy_address = g_variant_get_string(value, NULL);
3750 if (g_strcmp0(r_proxy_address, "NONE") == 0)
3751 *proxy_address = NULL;
3753 *proxy_address = g_strdup(r_proxy_address);
3754 } else if (g_strcmp0(field, WIFI_CONFIG_EAP_ANONYMOUS_IDENTITY) == 0) {
3755 const gchar *anonymous_identity = g_variant_get_string(value, NULL);
3756 (*eap_config)->anonymous_identity = g_strdup(anonymous_identity);
3757 } else if (g_strcmp0(field, WIFI_CONFIG_EAP_CACERT) == 0) {
3758 const gchar *ca_cert = g_variant_get_string(value, NULL);
3759 (*eap_config)->ca_cert = g_strdup(ca_cert);
3760 } else if (g_strcmp0(field, WIFI_CONFIG_EAP_CLIENTCERT) == 0) {
3761 const gchar *client_cert = g_variant_get_string(value, NULL);
3762 (*eap_config)->client_cert = g_strdup(client_cert);
3763 } else if (g_strcmp0(field, WIFI_CONFIG_EAP_PRIVATEKEY) == 0) {
3764 const gchar *private_key = g_variant_get_string(value, NULL);
3765 (*eap_config)->private_key = g_strdup(private_key);
3766 } else if (g_strcmp0(field, WIFI_CONFIG_EAP_IDENTITY) == 0) {
3767 const gchar *identity = g_variant_get_string(value, NULL);
3768 (*eap_config)->identity = g_strdup(identity);
3769 } else if (g_strcmp0(field, WIFI_CONFIG_EAP_TYPE) == 0) {
3770 const gchar *eap_type = g_variant_get_string(value, NULL);
3771 (*eap_config)->eap_type = __net_wifi_eap_type_to_int(eap_type);
3772 } else if (g_strcmp0(field, WIFI_CONFIG_EAP_AUTH_TYPE) == 0) {
3773 const gchar *auth_type = g_variant_get_string(value, NULL);
3774 (*eap_config)->eap_auth_type = __net_wifi_eap_auth_type_to_int(auth_type);
3775 } else if (g_strcmp0(field, WIFI_CONFIG_EAP_SUBJECT_MATCH) == 0) {
3776 const gchar *subject_match = g_variant_get_string(value, NULL);
3777 (*eap_config)->subject_match = g_strdup(subject_match);
3778 } else if (g_strcmp0(field, WIFI_CONFIG_FAILURE) == 0) {
3779 *wifi_last_error = __net_wifi_last_error_to_enum(g_variant_get_string(value, NULL));
3783 g_variant_iter_free(iter);
3784 g_variant_unref(message);
3786 __NETWORK_FUNC_EXIT__;
3791 int _net_dbus_device_policy_get_wifi(network_info_s *network_info, int *state)
3793 __NETWORK_FUNC_ENTER__;
3795 net_err_e Error = NET_ERR_NONE;
3796 GVariant *message = NULL;
3798 if (state == NULL) {
3799 WIFI_LOG(WIFI_ERROR, "Invalid Parameter");
3800 __NETWORK_FUNC_EXIT__;
3801 return NET_ERR_INVALID_PARAM;
3804 message = _net_invoke_dbus_method(network_info,
3805 NETCONFIG_SERVICE, NETCONFIG_NETWORK_PATH,
3806 NETCONFIG_NETWORK_INTERFACE, "DevicePolicyGetWifi",
3809 if (message == NULL) {
3810 WIFI_LOG(WIFI_ERROR, "Failed to get wifi device policy");
3814 g_variant_get(message, "(i)", state);
3816 WIFI_LOG(WIFI_INFO, "Wifi device policy state [%d]", *state);
3818 g_variant_unref(message);
3820 __NETWORK_FUNC_EXIT__;
3824 int _net_dbus_device_policy_get_wifi_profile(network_info_s *network_info,
3827 __NETWORK_FUNC_ENTER__;
3829 net_err_e Error = NET_ERR_NONE;
3830 GVariant *message = NULL;
3832 if (state == NULL) {
3833 WIFI_LOG(WIFI_ERROR, "Invalid Parameter");
3834 __NETWORK_FUNC_EXIT__;
3835 return NET_ERR_INVALID_PARAM;
3838 message = _net_invoke_dbus_method(network_info,
3839 NETCONFIG_SERVICE, NETCONFIG_NETWORK_PATH,
3840 NETCONFIG_NETWORK_INTERFACE, "DevicePolicyGetWifiProfile",
3843 if (message == NULL) {
3844 WIFI_LOG(WIFI_ERROR, "Failed to get wifi device policy");
3848 g_variant_get(message, "(i)", state);
3850 WIFI_LOG(WIFI_INFO, "Wifi profile device policy state [%d]", *state);
3852 g_variant_unref(message);
3854 __NETWORK_FUNC_EXIT__;
3858 int _net_dbus_resume_bgscan(network_info_s *network_info)
3860 __NETWORK_FUNC_ENTER__;
3862 net_err_e Error = NET_ERR_NONE;
3863 GVariant *params = NULL;
3864 GVariant *message = NULL;
3866 params = g_variant_new("(s)", network_info->interface_name);
3868 message = _net_invoke_dbus_method(network_info,
3869 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3870 NETCONFIG_WIFI_INTERFACE, "ResumeBgscan",
3873 if (Error != NET_ERR_NONE)
3874 WIFI_LOG(WIFI_ERROR, "_net_invoke_dbus_method failed");
3876 if (message != NULL)
3877 g_variant_unref(message);
3879 __NETWORK_FUNC_EXIT__;
3883 int _net_dbus_pause_bgscan(network_info_s *network_info)
3885 __NETWORK_FUNC_ENTER__;
3887 net_err_e Error = NET_ERR_NONE;
3888 GVariant *params = NULL;
3889 GVariant *message = NULL;
3891 params = g_variant_new("(s)", network_info->interface_name);
3893 message = _net_invoke_dbus_method(network_info,
3894 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3895 NETCONFIG_WIFI_INTERFACE, "PauseBgscan",
3898 if (Error != NET_ERR_NONE)
3899 WIFI_LOG(WIFI_ERROR, "_net_invoke_dbus_method failed");
3901 if (message != NULL)
3902 g_variant_unref(message);
3904 __NETWORK_FUNC_EXIT__;
3908 int _net_dbus_get_autoscan(network_info_s *network_info, gboolean *autoscan)
3910 __NETWORK_FUNC_ENTER__;
3912 GVariant *params = NULL;
3913 GVariant *message = NULL;
3914 net_err_e Error = NET_ERR_NONE;
3916 params = g_variant_new("(s)", network_info->interface_name);
3918 message = _net_invoke_dbus_method(network_info,
3919 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3920 NETCONFIG_WIFI_INTERFACE, "GetAutoscan",
3922 if (message == NULL) {
3923 WIFI_LOG(WIFI_ERROR, "Failed to Get Passpoint");
3924 __NETWORK_FUNC_EXIT__;
3930 g_variant_get(message, "(b)", &result);
3933 WIFI_LOG(WIFI_INFO, "Get Auto scan state Result: %d", result);
3935 g_variant_unref(message);
3937 __NETWORK_FUNC_EXIT__;
3941 int _net_dbus_get_autoscanmode(network_info_s *network_info,
3942 unsigned int *autoscanmode)
3944 __NETWORK_FUNC_ENTER__;
3946 GVariant *params = NULL;
3947 GVariant *message = NULL;
3948 net_err_e Error = NET_ERR_NONE;
3950 params = g_variant_new("(s)", network_info->interface_name);
3952 message = _net_invoke_dbus_method(network_info,
3953 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
3954 NETCONFIG_WIFI_INTERFACE, "GetAutoscanmode",
3956 if (message == NULL) {
3957 WIFI_LOG(WIFI_ERROR, "Failed to Get Passpoint");
3958 __NETWORK_FUNC_EXIT__;
3964 g_variant_get(message, "(u)", &result);
3965 *autoscanmode = result;
3967 WIFI_LOG(WIFI_INFO, "Get Auto scan Mode Result: %d", result);
3969 g_variant_unref(message);
3971 __NETWORK_FUNC_EXIT__;
3975 static void __net_multi_scan_request_reply(GObject *source_object, GAsyncResult *res,
3978 __NETWORK_FUNC_ENTER__;
3980 GDBusConnection *conn = NULL;
3981 GError *error = NULL;
3983 net_err_e Error = NET_ERR_NONE;
3984 net_event_info_s *event_data = NULL;
3985 network_info_s *network_info = (network_info_s *)user_data;
3986 network_request_table_s *request_table;
3988 event_data = g_try_malloc0(sizeof(net_event_info_s));
3989 if (event_data == NULL) {
3990 __NETWORK_FUNC_EXIT__;
3994 conn = G_DBUS_CONNECTION(source_object);
3995 reply = g_dbus_connection_call_finish(conn, res, &error);
3997 if (error != NULL) {
3998 WIFI_LOG(WIFI_ERROR, "Scan failed. Error [%s]",
4000 Error = __net_error_string_to_enum(error->message);
4001 if (error->code == G_IO_ERROR_CANCELLED) {
4002 WIFI_LOG(WIFI_INFO, "Ignore multi scan request reply, as operation is cancelled");
4003 g_error_free(error);
4004 __NETWORK_FUNC_EXIT__;
4008 g_error_free(error);
4012 g_variant_unref(reply);
4014 request_table = network_info->request_table;
4016 if (Error == NET_ERR_IN_PROGRESS) {
4017 /* should retry scan after receiving scan result */
4018 if (request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].flag == TRUE) {
4019 WIFI_LOG(WIFI_INFO, "Multi Scan pending");
4020 network_info->scan_pending = TRUE;
4022 } else if (Error != NET_ERR_NONE) {
4023 WIFI_LOG(WIFI_ERROR, "Multi Scan failed. Error [%d]", Error);
4024 g_slist_free_full(request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_list, g_free);
4026 if (request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].flag == TRUE) {
4027 memset(&request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN],
4028 0, sizeof(network_request_table_s));
4030 event_data->Event = NET_EVENT_WIFI_MULTI_SCAN_RSP;
4031 event_data->Datalength = 0;
4032 event_data->Data = NULL;
4033 event_data->Error = Error;
4035 if (network_info->event_callback)
4036 network_info->event_callback(event_data, network_info->user_data);
4040 __NETWORK_FUNC_EXIT__;
4045 WIFI_LOG(WIFI_INFO, "Multi Scan Request success");
4048 __NETWORK_FUNC_EXIT__;
4051 int _net_dbus_multi_scan_request(network_info_s *network_info,
4052 GSList *multi_scan_list)
4054 __NETWORK_FUNC_ENTER__;
4056 net_err_e Error = NET_ERR_NONE;
4057 GSList *list = NULL;
4058 GVariant *params = NULL;
4059 GVariantBuilder *builder;
4060 char ssid[NET_WLAN_ESSID_LEN + 1] = {0, };
4061 char freq[NET_WLAN_FREQ_LEN] = {0, };
4063 WIFI_LOG(WIFI_INFO, "multi_scan_type:%d, Number of elements in a list:%d",
4064 network_info->request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_type,
4065 g_slist_length(multi_scan_list));
4067 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
4069 if (network_info->request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_type == WIFI_MULTI_SCAN_SSID) {
4070 for (list = multi_scan_list; list; list = list->next) {
4071 WIFI_LOG(WIFI_INFO, "AP name: %s", ((wifi_manager_multi_scan_ap_s *)list->data)->str);
4072 g_strlcpy(ssid, ((wifi_manager_multi_scan_ap_s *)list->data)->str, NET_WLAN_ESSID_LEN + 1);
4073 g_variant_builder_add(builder, "{sv}", "SSID", g_variant_new_string(ssid));
4075 } else if (network_info->request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_type == WIFI_MULTI_SCAN_FREQ) {
4076 for (list = multi_scan_list; list; list = list->next) {
4077 WIFI_LOG(WIFI_INFO, "Freq: %s", ((wifi_manager_multi_scan_ap_s *)list->data)->str);
4078 g_strlcpy(freq, ((wifi_manager_multi_scan_ap_s *)list->data)->str, NET_WLAN_FREQ_LEN);
4079 g_variant_builder_add(builder, "{sv}", "Frequency", g_variant_new_string(freq));
4082 for (list = multi_scan_list; list; list = list->next) {
4083 if (((wifi_manager_multi_scan_ap_s *)list->data)->flag == true) {
4084 WIFI_LOG(WIFI_INFO, "[Mixed]AP name: %s", ((wifi_manager_multi_scan_ap_s *)list->data)->str);
4085 g_strlcpy(ssid, ((wifi_manager_multi_scan_ap_s *)list->data)->str, NET_WLAN_ESSID_LEN + 1);
4086 g_variant_builder_add(builder, "{sv}", "SSID_Mixed", g_variant_new_string(ssid));
4088 WIFI_LOG(WIFI_INFO, "[Mixed]Freq: %s", ((wifi_manager_multi_scan_ap_s *)list->data)->str);
4089 g_strlcpy(freq, ((wifi_manager_multi_scan_ap_s *)list->data)->str, NET_WLAN_FREQ_LEN);
4090 g_variant_builder_add(builder, "{sv}", "Frequency_Mixed", g_variant_new_string(freq));
4095 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
4096 g_variant_builder_unref(builder);
4098 Error = _net_invoke_dbus_method_nonblock(network_info,
4099 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
4100 CONNMAN_TECHNOLOGY_INTERFACE, "SpecificScan",
4101 params, DBUS_REPLY_TIMEOUT,
4102 __net_multi_scan_request_reply);
4104 if (Error == NET_ERR_IN_PROGRESS)
4105 Error = NET_ERR_NONE; //LCOV_EXCL_LINE
4107 __NETWORK_FUNC_EXIT__;
4111 int _net_dbus_get_max_scan_ssids(network_info_s *network_info, int *max_scan_ssids)
4113 __NETWORK_FUNC_ENTER__;
4115 net_err_e Error = NET_ERR_NONE;
4116 GVariant *message = NULL;
4117 GVariant *value = NULL;
4118 GVariantIter *iter = NULL;
4121 message = _net_invoke_dbus_method(network_info,
4122 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
4123 CONNMAN_TECHNOLOGY_INTERFACE, "GetMaxScanSsid",
4125 if (message == NULL) {
4126 WIFI_LOG(WIFI_ERROR, "Failed to get Max scan SSIDs.");
4127 *max_scan_ssids = 0;
4129 __NETWORK_FUNC_EXIT__;
4133 g_variant_get(message, "(a{sv})", &iter);
4135 while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
4136 if (g_strcmp0(key, "MaxScanSSID") == 0) {
4137 *max_scan_ssids = g_variant_get_int32(value);
4138 WIFI_LOG(WIFI_INFO, "Successfully get Max scan SSIDs: %d", *max_scan_ssids);
4139 g_variant_unref(value);
4145 g_variant_iter_free(iter);
4146 g_variant_unref(message);
4148 __NETWORK_FUNC_EXIT__;
4153 int _net_dbus_set_mac_policy(network_info_s *network_info, unsigned int policy)
4155 __NETWORK_FUNC_ENTER__;
4157 net_err_e Error = NET_ERR_NONE;
4158 GVariant *message = NULL;
4160 const char *prop_key = "MacPolicy";
4161 const char *method = "SetProperty";
4162 GVariant *params = NULL;
4164 WIFI_LOG(WIFI_INFO, "MacPolicy [%u]", policy);
4166 params = g_variant_new("(sv)", prop_key, g_variant_new_uint32(policy));
4168 message = _net_invoke_dbus_method(network_info,
4169 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
4170 CONNMAN_TECHNOLOGY_INTERFACE,
4171 method, params, &Error);
4173 if (message == NULL) {
4174 WIFI_LOG(WIFI_ERROR, "Failed to set mac policy");
4175 __NETWORK_FUNC_EXIT__;
4179 g_variant_unref(message);
4181 __NETWORK_FUNC_EXIT__;
4185 int _net_dbus_get_mac_policy(network_info_s *network_info, unsigned int *policy)
4187 __NETWORK_FUNC_ENTER__;
4189 net_err_e Error = NET_ERR_NONE;
4190 GVariant *message = NULL;
4191 GVariant *value = NULL;
4192 GVariantIter *iter = NULL;
4195 message = _net_invoke_dbus_method(network_info,
4196 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
4197 CONNMAN_TECHNOLOGY_INTERFACE, "GetProperties",
4200 if (message == NULL) {
4201 WIFI_LOG(WIFI_ERROR, "Failed to get properties");
4203 __NETWORK_FUNC_EXIT__;
4207 g_variant_get(message, "(a{sv})", &iter);
4209 while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
4210 if (g_strcmp0(key, "MacPolicy") == 0) {
4211 *policy = g_variant_get_uint32(value);
4212 WIFI_LOG(WIFI_INFO, "Successfully get mac policy: %u", *policy);
4214 g_variant_unref(value);
4220 g_variant_iter_free(iter);
4221 g_variant_unref(message);
4223 __NETWORK_FUNC_EXIT__;
4227 int _net_dbus_set_preassoc_mac_policy(network_info_s *network_info, unsigned int policy)
4229 __NETWORK_FUNC_ENTER__;
4231 net_err_e Error = NET_ERR_NONE;
4232 GVariant *message = NULL;
4234 const char *prop_key = "PreassocMacPolicy";
4235 const char *method = "SetProperty";
4236 GVariant *params = NULL;
4238 WIFI_LOG(WIFI_INFO, "PreassocMacPolicy [%u]", policy);
4240 params = g_variant_new("(sv)", prop_key, g_variant_new_uint32(policy));
4242 message = _net_invoke_dbus_method(network_info,
4243 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
4244 CONNMAN_TECHNOLOGY_INTERFACE,
4245 method, params, &Error);
4247 if (message == NULL) {
4248 WIFI_LOG(WIFI_ERROR, "Failed to set preassoc mac policy");
4249 __NETWORK_FUNC_EXIT__;
4253 g_variant_unref(message);
4255 __NETWORK_FUNC_EXIT__;
4259 int _net_dbus_get_preassoc_mac_policy(network_info_s *network_info, unsigned int *policy)
4261 __NETWORK_FUNC_ENTER__;
4263 net_err_e Error = NET_ERR_NONE;
4264 GVariant *message = NULL;
4265 GVariant *value = NULL;
4266 GVariantIter *iter = NULL;
4269 message = _net_invoke_dbus_method(network_info,
4270 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
4271 CONNMAN_TECHNOLOGY_INTERFACE, "GetProperties",
4274 if (message == NULL) {
4275 WIFI_LOG(WIFI_ERROR, "Failed to get properties");
4277 __NETWORK_FUNC_EXIT__;
4281 g_variant_get(message, "(a{sv})", &iter);
4283 while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
4284 if (g_strcmp0(key, "PreassocMacPolicy") == 0) {
4285 *policy = g_variant_get_uint32(value);
4286 WIFI_LOG(WIFI_INFO, "Successfully get preassoc mac policy: %u", *policy);
4288 g_variant_unref(value);
4294 g_variant_iter_free(iter);
4295 g_variant_unref(message);
4297 __NETWORK_FUNC_EXIT__;
4301 int _net_dbus_set_random_mac_lifetime(network_info_s *network_info, unsigned int lifetime)
4303 __NETWORK_FUNC_ENTER__;
4305 net_err_e Error = NET_ERR_NONE;
4306 GVariant *message = NULL;
4308 const char *prop_key = "RandomMacLifetime";
4309 const char *method = "SetProperty";
4310 GVariant *params = NULL;
4312 WIFI_LOG(WIFI_INFO, "RandomMacLifetime [%u]", lifetime);
4314 params = g_variant_new("(sv)", prop_key, g_variant_new_uint32(lifetime));
4316 message = _net_invoke_dbus_method(network_info,
4317 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
4318 CONNMAN_TECHNOLOGY_INTERFACE,
4319 method, params, &Error);
4321 if (message == NULL) {
4322 WIFI_LOG(WIFI_ERROR, "Failed to set random mac lifetime");
4323 __NETWORK_FUNC_EXIT__;
4327 g_variant_unref(message);
4329 __NETWORK_FUNC_EXIT__;
4333 int _net_dbus_get_random_mac_lifetime(network_info_s *network_info, unsigned int *lifetime)
4335 __NETWORK_FUNC_ENTER__;
4337 net_err_e Error = NET_ERR_NONE;
4338 GVariant *message = NULL;
4339 GVariant *value = NULL;
4340 GVariantIter *iter = NULL;
4343 message = _net_invoke_dbus_method(network_info,
4344 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
4345 CONNMAN_TECHNOLOGY_INTERFACE, "GetProperties",
4348 if (message == NULL) {
4349 WIFI_LOG(WIFI_ERROR, "Failed to get properties");
4351 __NETWORK_FUNC_EXIT__;
4355 g_variant_get(message, "(a{sv})", &iter);
4357 while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
4358 if (g_strcmp0(key, "RandomMacLifetime") == 0) {
4359 *lifetime = g_variant_get_uint32(value);
4360 WIFI_LOG(WIFI_INFO, "Successfully get random mac lifetime: %u", *lifetime);
4362 g_variant_unref(value);
4368 g_variant_iter_free(iter);
4369 g_variant_unref(message);
4371 __NETWORK_FUNC_EXIT__;
4375 int _net_dbus_set_country_code(network_info_s *network_info, const char *country)
4377 __NETWORK_FUNC_ENTER__;
4379 net_err_e Error = NET_ERR_NONE;
4380 GVariant *message = NULL;
4382 const char *prop_key = "CountryCode";
4383 const char *method = "SetProperty";
4384 GVariant *params = NULL;
4386 params = g_variant_new("(sv)", prop_key, g_variant_new_string(country));
4388 message = _net_invoke_dbus_method(network_info,
4389 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
4390 CONNMAN_TECHNOLOGY_INTERFACE,
4391 method, params, &Error);
4393 if (message == NULL) {
4394 WIFI_LOG(WIFI_ERROR, "Failed to set country code");
4395 __NETWORK_FUNC_EXIT__;
4399 g_variant_unref(message);
4401 __NETWORK_FUNC_EXIT__;
4405 int _net_dbus_get_country_code(network_info_s *network_info, char **country)
4407 __NETWORK_FUNC_ENTER__;
4409 net_err_e Error = NET_ERR_NONE;
4410 GVariant *message = NULL;
4411 GVariant *value = NULL;
4412 GVariantIter *iter = NULL;
4415 message = _net_invoke_dbus_method(network_info,
4416 CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
4417 CONNMAN_TECHNOLOGY_INTERFACE, "GetProperties",
4420 if (message == NULL) {
4421 WIFI_LOG(WIFI_ERROR, "Failed to get properties");
4423 __NETWORK_FUNC_EXIT__;
4427 g_variant_get(message, "(a{sv})", &iter);
4429 while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
4430 if (g_strcmp0(key, "CountryCode") == 0) {
4431 const gchar *str = g_variant_get_string(value, NULL);
4432 *country = g_strdup(str);
4433 WIFI_LOG(WIFI_INFO, "Successfully get country code: %s", *country);
4435 g_variant_unref(value);
4441 g_variant_iter_free(iter);
4442 g_variant_unref(message);
4444 __NETWORK_FUNC_EXIT__;
4448 int _net_dbus_get_vconf_value(network_info_s *network_info,
4449 const char *key, const char *type, int *ret, int *int_value, char **str_value)
4451 __NETWORK_FUNC_ENTER__;
4453 net_err_e ret_error = NET_ERR_NONE;
4454 GVariant *message = NULL;
4455 GVariant *params = NULL;
4457 params = g_variant_new("(ss)", key, type);
4458 message = _net_invoke_dbus_method(network_info,
4459 NETCONFIG_SERVICE, NETCONFIG_NETWORK_PATH,
4460 NETCONFIG_NETWORK_INTERFACE, "RequestVconfValue",
4461 params, &ret_error);
4463 if (message == NULL) {
4464 WIFI_LOG(WIFI_ERROR, "Failed to get vconf value, key: %s", key);
4465 __NETWORK_FUNC_EXIT__;
4469 g_variant_get(message, "(iis)", ret, int_value, str_value);
4471 WIFI_LOG(WIFI_INFO, "Vconf key: %s, type: %s, ret: %d, int_value: %d, str_value: %s",
4472 key, type, *ret, *int_value, *str_value);
4474 g_variant_unref(message);
4476 __NETWORK_FUNC_EXIT__;