2 * Network Client Library
4 * Copyright 2012 Samsung Electronics Co., Ltd
6 * Licensed under the Flora License, Version 1.1 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.tizenopensource.org/license
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
20 #include <arpa/inet.h>
21 #include <netinet/in.h>
23 #include "network-internal.h"
24 #include "network-dbus-request.h"
26 /*****************************************************************************
28 *****************************************************************************/
29 #define DBUS_REPLY_TIMEOUT (120 * 1000)
31 /*****************************************************************************
33 *****************************************************************************/
34 extern __thread network_info_t NetworkInfo;
35 extern __thread network_request_table_t request_table[NETWORK_REQUEST_TYPE_MAX];
37 static int __net_error_string_to_enum(const char *error)
39 NETWORK_LOG(NETWORK_LOW, "Passed error value [%s]", error);
41 if (NULL != strstr(error, "NoReply"))
42 return NET_ERR_TIME_OUT;
43 else if (NULL != strstr(error, "Failed"))
44 return NET_ERR_UNKNOWN;
45 else if (NULL != strstr(error, "UnknownMethod"))
46 return NET_ERR_UNKNOWN_METHOD;
47 else if (NULL != strstr(error, "InvalidArguments"))
48 return NET_ERR_INVALID_PARAM;
49 else if (NULL != strstr(error, "AccessDenied"))
50 return NET_ERR_ACCESS_DENIED;
51 else if (NULL != strstr(error, "PermissionDenied"))
52 return NET_ERR_ACCESS_DENIED;
53 else if (NULL != strstr(error, "PassphraseRequired"))
54 return NET_ERR_INVALID_OPERATION;
55 else if (NULL != strstr(error, "NotRegistered"))
56 return NET_ERR_INVALID_OPERATION;
57 else if (NULL != strstr(error, "NotUnique"))
58 return NET_ERR_INVALID_OPERATION;
59 else if (NULL != strstr(error, "NotSupported"))
60 return NET_ERR_NOT_SUPPORTED;
61 else if (NULL != strstr(error, "NotImplemented"))
62 return NET_ERR_NOT_SUPPORTED;
63 else if (NULL != strstr(error, "NotFound"))
64 return NET_ERR_NOT_SUPPORTED;
65 else if (NULL != strstr(error, "NoCarrier"))
66 return NET_ERR_NOT_SUPPORTED;
67 else if (NULL != strstr(error, "InProgress"))
68 return NET_ERR_IN_PROGRESS;
69 else if (NULL != strstr(error, "AlreadyExists"))
70 return NET_ERR_INVALID_OPERATION;
71 else if (NULL != strstr(error, "AlreadyEnabled"))
72 return NET_ERR_INVALID_OPERATION;
73 else if (NULL != strstr(error, "AlreadyDisabled"))
74 return NET_ERR_INVALID_OPERATION;
75 else if (NULL != strstr(error, "AlreadyConnected"))
76 return NET_ERR_ACTIVE_CONNECTION_EXISTS;
77 else if (NULL != strstr(error, "NotConnected"))
78 return NET_ERR_NO_ACTIVE_CONNECTIONS;
79 else if (NULL != strstr(error, "OperationAborted"))
80 return NET_ERR_OPERATION_ABORTED;
81 else if (NULL != strstr(error, "OperationTimeout"))
82 return NET_ERR_TIME_OUT;
83 else if (NULL != strstr(error, "InvalidService"))
84 return NET_ERR_NO_SERVICE;
85 else if (NULL != strstr(error, "InvalidProperty"))
86 return NET_ERR_INVALID_OPERATION;
87 return NET_ERR_UNKNOWN;
90 static int __net_netconfig_error_string_to_enum(const char* error)
92 NETWORK_LOG(NETWORK_ERROR, "Passed error value [%s]", error);
95 return NET_ERR_UNKNOWN;
97 if (NULL != strstr(error, ".WifiDriverFailed"))
98 return NET_ERR_WIFI_DRIVER_FAILURE;
99 else if (NULL != strstr(error, ".PermissionDenied"))
100 return NET_ERR_SECURITY_RESTRICTED;
101 else if (NULL != strstr(error, ".InProgress"))
102 return NET_ERR_WIFI_DRIVER_LOAD_INPROGRESS;
103 else if (NULL != strstr(error, ".AccessDenied"))
104 return NET_ERR_ACCESS_DENIED;
105 return NET_ERR_UNKNOWN;
108 static void __net_open_connection_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
110 __NETWORK_FUNC_ENTER__;
112 net_event_info_t event_data = { 0, };
113 net_profile_info_t prof_info;
114 network_request_table_t *open_info =
115 &request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION];
116 network_request_table_t *wps_info =
117 &request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS];
118 GDBusConnection *conn = NULL;
119 GError *error = NULL;
120 net_err_t Error = NET_ERR_NONE;
122 NETWORK_LOG(NETWORK_LOW, "__net_open_connection_reply() called");
124 conn = G_DBUS_CONNECTION(source_object);
125 g_dbus_connection_call_finish(conn, res, &error);
128 Error = __net_error_string_to_enum(error->message);
132 if (Error == NET_ERR_NONE)
135 NETWORK_LOG(NETWORK_ERROR, "Connection open failed[%d]", Error);
137 if (open_info->flag == TRUE) {
138 net_device_t device_type =
139 _net_get_tech_type_from_path(open_info->ProfileName);
141 if (Error == NET_ERR_IN_PROGRESS && device_type == NET_DEVICE_CELLULAR)
144 g_strlcpy(event_data.ProfileName, open_info->ProfileName,
145 NET_PROFILE_NAME_LEN_MAX + 1);
146 memset(open_info, 0, sizeof(network_request_table_t));
148 event_data.Error = Error;
150 if (Error == NET_ERR_ACTIVE_CONNECTION_EXISTS) {
151 Error = net_get_profile_info(event_data.ProfileName, &prof_info);
153 if (device_type == NET_DEVICE_CELLULAR)
154 event_data.Error = NET_ERR_NONE;
156 if (Error != NET_ERR_NONE) {
157 NETWORK_LOG(NETWORK_ERROR, "Fail to get profile info[%s]",
158 _net_print_error(Error));
160 event_data.Datalength = 0;
161 event_data.Data = NULL;
163 event_data.Datalength = sizeof(net_profile_info_t);
164 event_data.Data = &prof_info;
168 event_data.Event = NET_EVENT_OPEN_RSP;
169 NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_OPEN_RSP Error[%s]",
170 _net_print_error(event_data.Error));
171 } else if (wps_info->flag == TRUE) {
172 g_strlcpy(event_data.ProfileName, wps_info->ProfileName,
173 NET_PROFILE_NAME_LEN_MAX + 1);
174 memset(wps_info, 0, sizeof(network_request_table_t));
176 event_data.Error = Error;
178 if (Error == NET_ERR_ACTIVE_CONNECTION_EXISTS) {
179 Error = net_get_profile_info(event_data.ProfileName, &prof_info);
180 if (Error != NET_ERR_NONE) {
181 NETWORK_LOG(NETWORK_ERROR, "Fail to get profile info[%s]",
182 _net_print_error(Error));
184 event_data.Datalength = 0;
185 event_data.Data = NULL;
187 event_data.Datalength = sizeof(net_profile_info_t);
188 event_data.Data = &prof_info;
192 event_data.Event = NET_EVENT_WIFI_WPS_RSP;
194 NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_WIFI_WPS_RSP Error[%s]",
195 _net_print_error(event_data.Error));
197 _net_dbus_pending_call_unref();
199 __NETWORK_FUNC_EXIT__;
204 _net_dbus_pending_call_unref();
206 _net_client_callback(&event_data);
208 __NETWORK_FUNC_EXIT__;
211 static void __net_close_connection_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
213 __NETWORK_FUNC_ENTER__;
215 NETWORK_LOG(NETWORK_LOW, "__net_close_connection_reply() called");
217 net_event_info_t event_data = { 0, };
218 network_request_table_t *close_info =
219 &request_table[NETWORK_REQUEST_TYPE_CLOSE_CONNECTION];
221 GDBusConnection *conn = NULL;
222 GError *error = NULL;
223 net_err_t Error = NET_ERR_NONE;
225 conn = G_DBUS_CONNECTION(source_object);
226 g_dbus_connection_call_finish(conn, res, &error);
228 Error = __net_error_string_to_enum(error->message);
232 if (Error == NET_ERR_NONE)
235 NETWORK_LOG(NETWORK_ERROR, "Connection close failed[%d]", Error);
237 if (close_info->flag == TRUE) {
238 net_device_t device_type =
239 _net_get_tech_type_from_path(close_info->ProfileName);
241 if (Error == NET_ERR_ACTIVE_CONNECTION_EXISTS &&
242 device_type == NET_DEVICE_CELLULAR)
243 Error = NET_ERR_NONE;
245 g_strlcpy(event_data.ProfileName, close_info->ProfileName,
246 NET_PROFILE_NAME_LEN_MAX + 1);
247 memset(close_info, 0, sizeof(network_request_table_t));
249 event_data.Error = Error;
250 event_data.Datalength = 0;
251 event_data.Data = NULL;
252 event_data.Event = NET_EVENT_CLOSE_RSP;
254 NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_CLOSE_RSP Error[%s]",
255 _net_print_error(event_data.Error));
257 _net_dbus_pending_call_unref();
259 __NETWORK_FUNC_EXIT__;
264 _net_dbus_pending_call_unref();
266 _net_client_callback(&event_data);
268 __NETWORK_FUNC_EXIT__;
271 static void __net_wifi_power_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
273 __NETWORK_FUNC_ENTER__;
275 GDBusConnection *conn = NULL;
276 GError *error = NULL;
277 net_err_t Error = NET_ERR_NONE;
278 net_event_info_t event_data = { 0, };
280 NETWORK_LOG(NETWORK_LOW, "__net_wifi_power_reply() called");
282 conn = G_DBUS_CONNECTION(source_object);
283 g_dbus_connection_call_finish(conn, res, &error);
285 Error = __net_netconfig_error_string_to_enum(error->message);
289 if (Error != NET_ERR_NONE) {
290 NETWORK_LOG(NETWORK_ERROR,
291 "Wi-Fi power operation failed. Error [%d]", Error);
293 if (Error != NET_ERR_WIFI_DRIVER_LOAD_INPROGRESS) {
294 if (request_table[NETWORK_REQUEST_TYPE_WIFI_POWER].flag == TRUE) {
295 memset(&request_table[NETWORK_REQUEST_TYPE_WIFI_POWER],
296 0, sizeof(network_request_table_t));
298 event_data.Event = NET_EVENT_WIFI_POWER_RSP;
300 NETWORK_LOG(NETWORK_LOW,
301 "Sending NET_EVENT_WIFI_POWER_RSP Wi-Fi: %d Error = %d",
302 NetworkInfo.wifi_state, Error);
304 event_data.Datalength = sizeof(net_wifi_state_t);
305 event_data.Data = &(NetworkInfo.wifi_state);
306 event_data.Error = Error;
310 _net_dbus_pending_call_unref();
312 __NETWORK_FUNC_EXIT__;
316 _net_dbus_pending_call_unref();
318 _net_client_callback(&event_data);
320 __NETWORK_FUNC_EXIT__;
323 static void __net_reset_cellular_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
325 __NETWORK_FUNC_ENTER__;
328 net_event_info_t event_data = { 0, };
329 GDBusConnection *conn = NULL;
330 GVariant *dbus_result;
331 GError *error = NULL;
332 net_err_t Error = NET_ERR_NONE;
334 NETWORK_LOG(NETWORK_LOW, "__net_reset_cellular_reply() called");
336 conn = G_DBUS_CONNECTION(source_object);
337 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
339 Error = __net_error_string_to_enum(error->message);
342 NETWORK_LOG(NETWORK_ERROR, "Error code: [%d]", Error);
345 if (request_table[NETWORK_REQUEST_TYPE_RESET_DEFAULT].flag == TRUE) {
346 memset(&request_table[NETWORK_REQUEST_TYPE_RESET_DEFAULT],
347 0, sizeof(network_request_table_t));
348 event_data.Event = NET_EVENT_CELLULAR_RESET_DEFAULT_RSP;
350 if (Error == NET_ERR_NONE) {
351 g_variant_get(dbus_result, "(b)", &rv);
353 NETWORK_LOG(NETWORK_LOW, "Reply: %s", rv ? "TRUE" : "FALSE");
356 event_data.Error = NET_ERR_NONE;
358 event_data.Error = NET_ERR_UNKNOWN;
360 event_data.Error = Error;
362 NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_CELLULAR_RESET_DEFAULT_RSP Error = %s",
363 _net_print_error(event_data.Error));
365 _net_dbus_pending_call_unref();
367 __NETWORK_FUNC_EXIT__;
371 _net_dbus_pending_call_unref();
373 _net_client_callback(&event_data);
375 __NETWORK_FUNC_EXIT__;
378 static void __net_specific_scan_wifi_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
380 __NETWORK_FUNC_ENTER__;
382 GDBusConnection *conn = NULL;
383 GError *error = NULL;
384 net_err_t Error = NET_ERR_NONE;
385 net_event_info_t event_data = { 0, };
387 conn = G_DBUS_CONNECTION(source_object);
388 g_dbus_connection_call_finish(conn, res, &error);
390 Error = __net_netconfig_error_string_to_enum(error->message);
394 if (Error != NET_ERR_NONE)
395 NETWORK_LOG(NETWORK_ERROR, "Find specific AP failed[%d]", Error);
397 NETWORK_LOG(NETWORK_LOW, "Specific AP found");
399 if (request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN].flag == TRUE) {
400 if (NET_ERR_NONE != Error) {
401 /* An error occurred.
402 * So lets reset specific scan request entry in the request table */
403 memset(&request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN],
404 0, sizeof(network_request_table_t));
407 event_data.Event = NET_EVENT_SPECIFIC_SCAN_RSP;
409 NETWORK_LOG(NETWORK_LOW,
410 "Sending NET_EVENT_SPECIFIC_SCAN_RSP Wi-Fi: %d Error[%d]",
411 NetworkInfo.wifi_state, Error);
413 event_data.Datalength = sizeof(net_wifi_state_t);
414 event_data.Data = &(NetworkInfo.wifi_state);
415 event_data.Error = Error;
417 _net_dbus_pending_call_unref();
418 _net_client_callback(&event_data);
420 _net_dbus_pending_call_unref();
421 __NETWORK_FUNC_EXIT__;
425 __NETWORK_FUNC_EXIT__;
428 static void __net_wps_scan_wifi_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
430 __NETWORK_FUNC_ENTER__;
432 GDBusConnection *conn = NULL;
433 GError *error = NULL;
434 net_err_t Error = NET_ERR_NONE;
435 net_event_info_t event_data = { 0, };
437 conn = G_DBUS_CONNECTION(source_object);
438 g_dbus_connection_call_finish(conn, res, &error);
440 Error = __net_netconfig_error_string_to_enum(error->message);
444 if (Error != NET_ERR_NONE) {
445 NETWORK_LOG(NETWORK_ERROR, "WPS scan failed[%d]", Error);
447 if (request_table[NETWORK_REQUEST_TYPE_WPS_SCAN].flag == TRUE) {
448 memset(&request_table[NETWORK_REQUEST_TYPE_WPS_SCAN],
449 0, sizeof(network_request_table_t));
451 event_data.Event = NET_EVENT_WPS_SCAN_IND;
452 event_data.Datalength = 0;
453 event_data.Data = NULL;
454 event_data.Error = Error;
456 _net_dbus_pending_call_unref();
458 _net_client_callback(&event_data);
460 __NETWORK_FUNC_EXIT__;
464 NETWORK_LOG(NETWORK_LOW, "WPS scan succeed");
466 _net_dbus_pending_call_unref();
468 __NETWORK_FUNC_EXIT__;
471 static void __net_set_passpoint_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
473 __NETWORK_FUNC_ENTER__;
475 GDBusConnection *conn = NULL;
476 GError *error = NULL;
477 net_err_t Error = NET_ERR_NONE;
479 conn = G_DBUS_CONNECTION(source_object);
480 g_dbus_connection_call_finish(conn, res, &error);
482 Error = __net_netconfig_error_string_to_enum(error->message);
486 if (Error != NET_ERR_NONE)
487 NETWORK_LOG(NETWORK_ERROR, "set passpoint failed[%d]", Error);
489 NETWORK_LOG(NETWORK_LOW, "set passpoint succeeded");
491 _net_dbus_pending_call_unref();
493 __NETWORK_FUNC_EXIT__;
496 static void __net_set_default_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
498 __NETWORK_FUNC_ENTER__;
501 net_event_info_t event_data = { 0, };
502 GDBusConnection *conn = NULL;
503 GVariant *dbus_result;
504 GError *error = NULL;
505 net_err_t Error = NET_ERR_NONE;
507 NETWORK_LOG(NETWORK_LOW, "__net_set_default_reply() called");
509 conn = G_DBUS_CONNECTION(source_object);
510 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
512 Error = __net_error_string_to_enum(error->message);
515 NETWORK_LOG(NETWORK_ERROR, "Error code[%d]", Error);
518 if (request_table[NETWORK_REQUEST_TYPE_SET_DEFAULT].flag == TRUE) {
519 memset(&request_table[NETWORK_REQUEST_TYPE_SET_DEFAULT],
520 0, sizeof(network_request_table_t));
521 event_data.Event = NET_EVENT_CELLULAR_SET_DEFAULT_RSP;
523 if (Error == NET_ERR_NONE) {
524 g_variant_get(dbus_result, "(b)", &rv);
526 NETWORK_LOG(NETWORK_LOW, "Reply: %s", rv ? "TRUE" : "FALSE");
529 event_data.Error = NET_ERR_NONE;
531 event_data.Error = NET_ERR_UNKNOWN;
533 event_data.Error = Error;
535 NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_CELLULAR_SET_DEFAULT_RSP Error[%s]",
536 _net_print_error(event_data.Error));
538 _net_dbus_pending_call_unref();
540 __NETWORK_FUNC_EXIT__;
544 _net_dbus_pending_call_unref();
546 _net_client_callback(&event_data);
548 __NETWORK_FUNC_EXIT__;
551 static char *__net_make_group_name(const char *ssid,
552 const char *net_mode, const char *sec)
555 const char *hidden_str = "hidden";
557 char ssid_hex[NET_WLAN_ESSID_LEN * 2 + 1] = { 0, };
563 if (net_mode == NULL || sec == NULL)
567 ssid_len = strlen(ssid);
568 actual_len = ssid_len * 2;
570 ssid_len = strlen(hidden_str);
571 actual_len = ssid_len;
574 if (g_strcmp0(net_mode, "managed") != 0)
577 if (!g_strcmp0(sec, "wpa") || !g_strcmp0(sec, "rsn"))
582 buf_len = actual_len + strlen(net_mode) + strlen(g_sec) + 4;
584 buf = g_try_malloc0(buf_len);
589 for (i = 0; i < ssid_len; i++)
590 g_snprintf(ssid_hex + i * 2, 3, "%02x", ssid[i]);
592 g_snprintf(ssid_hex, strlen(hidden_str) + 1, "%s", hidden_str);
595 g_snprintf(buf, buf_len, "_%s_%s_%s", ssid_hex, net_mode, g_sec);
597 NETWORK_LOG(NETWORK_LOW, "Group name: %s", buf);
602 static int __net_dbus_set_agent_field_and_connect(
603 const char *key, const char *value, const char *profilename)
605 __NETWORK_FUNC_ENTER__;
607 net_err_t Error = NET_ERR_NONE;
608 GVariant *params = NULL;
609 GVariantBuilder *builder;
611 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
612 g_variant_builder_add(builder, "{sv}", key, g_variant_new_string(value));
614 params = g_variant_new("(o@a{sv})",
615 profilename, g_variant_builder_end(builder));
616 g_variant_builder_unref(builder);
618 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE,
620 CONNMAN_AGENT_INTERFACE, "SetField", params,
621 DBUS_REPLY_TIMEOUT, __net_open_connection_reply);
623 __NETWORK_FUNC_EXIT__;
627 /*****************************************************************************
628 * Global Functions Definition
629 *****************************************************************************/
630 GVariant *_net_invoke_dbus_method(const char *dest, const char *path,
631 const char *interface_name, const char *method,
632 GVariant *params, int *dbus_error)
634 __NETWORK_FUNC_ENTER__;
636 GError *error = NULL;
637 GVariant *reply = NULL;
638 *dbus_error = NET_ERR_NONE;
639 GDBusConnection *connection;
641 connection = _net_dbus_get_gdbus_conn();
642 if (connection == NULL) {
643 NETWORK_LOG(NETWORK_ERROR, "GDBusconnection is NULL");
644 *dbus_error = NET_ERR_APP_NOT_REGISTERED;
648 reply = g_dbus_connection_call_sync(connection,
655 G_DBUS_CALL_FLAGS_NONE,
657 _net_dbus_get_gdbus_cancellable(),
661 SECURE_NETWORK_LOG(NETWORK_ERROR,
662 "g_dbus_connection_call_sync() failed"
663 "error [%d: %s]", error->code, error->message);
664 *dbus_error = __net_error_string_to_enum(error->message);
667 NETWORK_LOG(NETWORK_ERROR,
668 "g_dbus_connection_call_sync() failed");
669 *dbus_error = NET_ERR_UNKNOWN;
672 __NETWORK_FUNC_EXIT__;
676 __NETWORK_FUNC_EXIT__;
680 int _net_invoke_dbus_method_nonblock(const char *dest, const char *path,
681 const char *interface_name, const char *method,
682 GVariant *params, int timeout,
683 GAsyncReadyCallback notify_func)
685 __NETWORK_FUNC_ENTER__;
687 GDBusConnection *connection;
689 connection = _net_dbus_get_gdbus_conn();
690 if (connection == NULL) {
691 NETWORK_LOG(NETWORK_ERROR, "GDBusconnection is NULL");
692 return NET_ERR_APP_NOT_REGISTERED;
695 g_dbus_connection_call(connection,
702 G_DBUS_CALL_FLAGS_NONE,
704 _net_dbus_get_gdbus_cancellable(),
705 (GAsyncReadyCallback) notify_func,
708 if (notify_func != NULL)
709 _net_dbus_pending_call_ref();
711 __NETWORK_FUNC_EXIT__;
715 int _net_dbus_open_connection(const char* profile_name)
717 __NETWORK_FUNC_ENTER__;
719 net_err_t Error = NET_ERR_NONE;
721 /* use DBus signal than reply pending because of performance reason */
722 Error = _net_invoke_dbus_method_nonblock(CONNMAN_SERVICE, profile_name,
723 CONNMAN_SERVICE_INTERFACE, "Connect", NULL,
724 DBUS_REPLY_TIMEOUT, __net_open_connection_reply);
726 __NETWORK_FUNC_EXIT__;
730 int _net_dbus_close_connection(const char* profile_name)
732 __NETWORK_FUNC_ENTER__;
734 net_err_t Error = NET_ERR_NONE;
736 /* use DBus signal than reply pending because of performance reason */
737 Error = _net_invoke_dbus_method_nonblock(CONNMAN_SERVICE, profile_name,
738 CONNMAN_SERVICE_INTERFACE, "Disconnect", NULL,
739 DBUS_REPLY_TIMEOUT, __net_close_connection_reply);
741 __NETWORK_FUNC_EXIT__;
745 int _net_dbus_scan_request(void)
747 __NETWORK_FUNC_ENTER__;
749 net_err_t Error = NET_ERR_NONE;
751 /* use DBus signal than reply pending because of performance reason */
752 Error = _net_invoke_dbus_method_nonblock(CONNMAN_SERVICE,
753 CONNMAN_WIFI_TECHNOLOGY_PREFIX,
754 CONNMAN_TECHNOLOGY_INTERFACE, "Scan", NULL,
755 DBUS_REPLY_TIMEOUT, NULL);
757 if (Error == NET_ERR_IN_PROGRESS)
758 Error = NET_ERR_NONE;
760 __NETWORK_FUNC_EXIT__;
764 int _net_dbus_set_default(const char* profile_name)
766 __NETWORK_FUNC_ENTER__;
768 net_err_t Error = NET_ERR_NONE;
770 Error = _net_invoke_dbus_method_nonblock(TELEPHONY_SERVICE,
771 profile_name, TELEPHONY_PROFILE_INTERFACE,
772 "SetDefaultConnection", NULL, DBUS_REPLY_TIMEOUT,
773 __net_set_default_reply);
775 __NETWORK_FUNC_EXIT__;
779 int _net_dbus_set_bgscan_mode(net_wifi_background_scan_mode_t mode)
781 __NETWORK_FUNC_ENTER__;
783 net_err_t Error = NET_ERR_NONE;
784 GVariant *message = NULL;
787 char path[CONNMAN_MAX_BUFLEN] = NETCONFIG_WIFI_PATH;
789 params = g_variant_new("(u)", mode);
791 message = _net_invoke_dbus_method(NETCONFIG_SERVICE, path,
792 NETCONFIG_WIFI_INTERFACE, "SetBgscan", params, &Error);
794 if (Error != NET_ERR_NONE)
795 NETWORK_LOG(NETWORK_ERROR, "_net_invoke_dbus_method failed");
798 g_variant_unref(message);
800 __NETWORK_FUNC_EXIT__;
804 int _net_dbus_get_technology_state(network_tech_state_info_t* tech_state)
806 __NETWORK_FUNC_ENTER__;
808 net_err_t Error = NET_ERR_NONE;
809 GVariant *message = NULL;
811 if ((tech_state == NULL) || (strlen(tech_state->technology) == 0)) {
812 NETWORK_LOG(NETWORK_ERROR, "Invalid parameter");
813 __NETWORK_FUNC_EXIT__;
814 return NET_ERR_INVALID_PARAM;
817 message = _net_invoke_dbus_method(CONNMAN_SERVICE,
818 CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE,
819 "GetTechnologies", NULL, &Error);
820 if (message == NULL) {
821 NETWORK_LOG(NETWORK_ERROR, "Failed to get technology info");
825 Error = _net_get_tech_state(message, tech_state);
827 g_variant_unref(message);
830 __NETWORK_FUNC_EXIT__;
834 int _net_dbus_get_network_status(net_device_t device_type, net_cm_network_status_t* network_status)
836 __NETWORK_FUNC_ENTER__;
838 net_err_t Error = NET_ERR_NONE;
839 network_tech_state_info_t tech_state = {{0,},};
841 if (device_type == NET_DEVICE_WIFI)
842 g_strlcpy(tech_state.technology, "wifi", NET_TECH_LENGTH_MAX);
843 else if (device_type == NET_DEVICE_CELLULAR)
844 g_strlcpy(tech_state.technology, "cellular", NET_TECH_LENGTH_MAX);
845 else if (device_type == NET_DEVICE_ETHERNET)
846 g_strlcpy(tech_state.technology, "ethernet", NET_TECH_LENGTH_MAX);
847 else if (device_type == NET_DEVICE_BLUETOOTH)
848 g_strlcpy(tech_state.technology, "bluetooth", NET_TECH_LENGTH_MAX);
850 Error = NET_ERR_INVALID_PARAM;
854 Error = _net_dbus_get_technology_state(&tech_state);
855 if (Error != NET_ERR_NONE) {
856 NETWORK_LOG(NETWORK_ERROR,
857 "_net_dbus_get_technology_state() failed. Error [%s]",
858 _net_print_error(Error));
862 if (tech_state.Connected == TRUE)
863 *network_status = NET_STATUS_AVAILABLE;
865 *network_status = NET_STATUS_UNAVAILABLE;
868 __NETWORK_FUNC_EXIT__;
872 int _net_dbus_get_tech_status(net_device_t device_type, net_tech_info_t* tech_status)
874 __NETWORK_FUNC_ENTER__;
876 net_err_t Error = NET_ERR_NONE;
877 network_tech_state_info_t tech_state = {{0,},};
879 if (device_type == NET_DEVICE_WIFI)
880 g_strlcpy(tech_state.technology, "wifi", NET_TECH_LENGTH_MAX);
881 else if (device_type == NET_DEVICE_CELLULAR)
882 g_strlcpy(tech_state.technology, "cellular", NET_TECH_LENGTH_MAX);
883 else if (device_type == NET_DEVICE_ETHERNET)
884 g_strlcpy(tech_state.technology, "ethernet", NET_TECH_LENGTH_MAX);
885 else if (device_type == NET_DEVICE_BLUETOOTH)
886 g_strlcpy(tech_state.technology, "bluetooth", NET_TECH_LENGTH_MAX);
888 Error = NET_ERR_INVALID_PARAM;
892 Error = _net_dbus_get_technology_state(&tech_state);
893 if (Error != NET_ERR_NONE) {
894 NETWORK_LOG(NETWORK_ERROR,
895 "_net_dbus_get_technology_state() failed. Error [%s]",
896 _net_print_error(Error));
900 if (tech_state.Powered == TRUE)
901 tech_status->powered = TRUE;
903 tech_status->powered = FALSE;
905 if (tech_state.Connected == TRUE)
906 tech_status->connected = TRUE;
908 tech_status->connected = FALSE;
911 __NETWORK_FUNC_EXIT__;
915 int _net_dbus_get_wifi_state(char **wifi_state)
917 __NETWORK_FUNC_ENTER__;
919 net_err_t Error = NET_ERR_NONE;
920 GVariant *message = NULL;
921 const char *method = "GetWifiState";
923 if (NULL == wifi_state) {
924 NETWORK_LOG(NETWORK_ERROR, "Invalid Parameter\n");
925 __NETWORK_FUNC_EXIT__;
926 return NET_ERR_INVALID_PARAM;
929 message = _net_invoke_dbus_method(
930 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
931 NETCONFIG_WIFI_INTERFACE, method, NULL, &Error);
933 if (message == NULL) {
934 NETWORK_LOG(NETWORK_ERROR, "Failed to get wifi state\n");
935 __NETWORK_FUNC_EXIT__;
939 g_variant_get(message, "(s)", wifi_state);
940 g_variant_unref(message);
942 __NETWORK_FUNC_EXIT__;
947 int _net_dbus_get_statistics(net_device_t device_type, net_statistics_type_e statistics_type, unsigned long long *size)
949 net_err_t Error = NET_ERR_NONE;
950 GVariant *message = NULL;
953 if (device_type == NET_DEVICE_WIFI) {
954 switch (statistics_type) {
955 case NET_STATISTICS_TYPE_LAST_RECEIVED_DATA:
956 method = "GetWifiLastRxBytes";
958 case NET_STATISTICS_TYPE_LAST_SENT_DATA:
959 method = "GetWifiLastTxBytes";
961 case NET_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
962 method = "GetWifiTotalRxBytes";
964 case NET_STATISTICS_TYPE_TOTAL_SENT_DATA:
965 method = "GetWifiTotalTxBytes";
968 NETWORK_LOG(NETWORK_ERROR, "Invalid profile name");
969 return NET_ERR_INVALID_PARAM;
972 NETWORK_LOG(NETWORK_ERROR, "Invalid profile name");
973 return NET_ERR_INVALID_PARAM;
976 message = _net_invoke_dbus_method(
977 NETCONFIG_SERVICE, NETCONFIG_STATISTICS_PATH,
978 NETCONFIG_STATISTICS_INTERFACE, method, NULL, &Error);
979 if (message == NULL) {
980 NETWORK_LOG(NETWORK_ERROR, "Failed to get service properties");
984 g_variant_get(message, "(t)", size);
986 NETWORK_LOG(NETWORK_LOW, "success [%s] statistics size: [%llu]", method, *size);
987 g_variant_unref(message);
992 int _net_dbus_set_statistics(net_device_t device_type, net_statistics_type_e statistics_type)
994 net_err_t Error = NET_ERR_NONE;
995 GVariant *message = NULL;
998 if (device_type == NET_DEVICE_CELLULAR) {
999 switch (statistics_type) {
1000 case NET_STATISTICS_TYPE_LAST_RECEIVED_DATA:
1001 method = "ResetCellularLastRxBytes";
1003 case NET_STATISTICS_TYPE_LAST_SENT_DATA:
1004 method = "ResetCellularLastTxBytes";
1006 case NET_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
1007 method = "ResetCellularTotalRxBytes";
1009 case NET_STATISTICS_TYPE_TOTAL_SENT_DATA:
1010 method = "ResetCellularTotalTxBytes";
1013 NETWORK_LOG(NETWORK_ERROR, "Invalid profile name");
1014 return NET_ERR_INVALID_PARAM;
1016 } else if (device_type == NET_DEVICE_WIFI) {
1017 switch (statistics_type) {
1018 case NET_STATISTICS_TYPE_LAST_RECEIVED_DATA:
1019 method = "ResetWifiLastRxBytes";
1021 case NET_STATISTICS_TYPE_LAST_SENT_DATA:
1022 method = "ResetWifiLastTxBytes";
1024 case NET_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
1025 method = "ResetWifiTotalRxBytes";
1027 case NET_STATISTICS_TYPE_TOTAL_SENT_DATA:
1028 method = "ResetWifiTotalTxBytes";
1031 NETWORK_LOG(NETWORK_ERROR, "Invalid profile name");
1032 return NET_ERR_INVALID_PARAM;
1035 NETWORK_LOG(NETWORK_ERROR, "Invalid profile name");
1036 return NET_ERR_INVALID_PARAM;
1039 message = _net_invoke_dbus_method(
1040 NETCONFIG_SERVICE, NETCONFIG_STATISTICS_PATH,
1041 NETCONFIG_STATISTICS_INTERFACE, method, NULL, &Error);
1042 if (message == NULL) {
1043 NETWORK_LOG(NETWORK_ERROR, "Failed to get service properties");
1047 NETWORK_LOG(NETWORK_LOW, "reset [%s] statistics success", method);
1048 g_variant_unref(message);
1053 int _net_dbus_get_state(char* state)
1055 __NETWORK_FUNC_ENTER__;
1057 net_err_t Error = NET_ERR_NONE;
1058 GVariant *message = NULL;
1059 GVariant *value = NULL;
1060 GVariantIter *iter = NULL;
1062 const gchar *net_state = NULL;
1064 message = _net_invoke_dbus_method(
1065 CONNMAN_SERVICE, CONNMAN_MANAGER_PATH,
1066 CONNMAN_MANAGER_INTERFACE, "GetProperties", NULL, &Error);
1067 if (message == NULL) {
1068 NETWORK_LOG(NETWORK_ERROR, "Failed to get service properties");
1070 __NETWORK_FUNC_EXIT__;
1074 g_variant_get(message, "(a{sv})", &iter);
1076 while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
1077 if (g_strcmp0(key, "State") == 0) {
1078 net_state = g_variant_get_string(value, NULL);
1079 g_strlcpy(state, net_state, CONNMAN_STATE_STRLEN);
1080 g_variant_unref(value);
1086 NETWORK_LOG(NETWORK_LOW, "State: %s", state);
1088 g_variant_iter_free(iter);
1089 g_variant_unref(message);
1091 __NETWORK_FUNC_EXIT__;
1095 int _net_dbus_get_ethernet_cable_state(int *state)
1097 __NETWORK_FUNC_ENTER__;
1099 net_err_t Error = NET_ERR_NONE;
1100 GVariant *message = NULL;
1102 if (state == NULL) {
1103 NETWORK_LOG(NETWORK_ERROR, "Invalid Parameter\n");
1104 __NETWORK_FUNC_EXIT__;
1105 return NET_ERR_INVALID_PARAM;
1108 message = _net_invoke_dbus_method(NETCONFIG_SERVICE, NETCONFIG_NETWORK_PATH,
1109 NETCONFIG_NETWORK_INTERFACE, "EthernetCableState", NULL, &Error);
1111 if (message == NULL) {
1112 NETWORK_LOG(NETWORK_ERROR, "Failed to get Ethernet Module State\n");
1116 g_variant_get(message, "(i)", state);
1118 NETWORK_LOG(NETWORK_LOW, "Ethernet Cable State [%d]\n", *state);
1120 g_variant_unref(message);
1122 __NETWORK_FUNC_EXIT__;
1126 int _net_dbus_set_eap_config_fields_and_connect(
1127 const net_wifi_connect_service_info_t *wifi_info,
1128 const char *profilename)
1130 __NETWORK_FUNC_ENTER__;
1132 net_err_t Error = NET_ERR_NONE;
1133 GVariant *params = NULL;
1134 GVariantBuilder *builder;
1136 builder = g_variant_builder_new(G_VARIANT_TYPE("a{ss}"));
1137 g_variant_builder_add(builder, "{ss}", CONNMAN_CONFIG_FIELD_TYPE, "wifi");
1139 if (wifi_info->ssid)
1140 g_variant_builder_add(builder, "{ss}",
1141 CONNMAN_CONFIG_FIELD_NAME, wifi_info->ssid);
1143 if (wifi_info->eap_type)
1144 g_variant_builder_add(builder, "{ss}",
1145 CONNMAN_CONFIG_FIELD_EAP_METHOD, wifi_info->eap_type);
1147 if (wifi_info->eap_keymgmt_type)
1148 g_variant_builder_add(builder, "{ss}",
1149 CONNMAN_CONFIG_FIELD_EAP_KEYMGMT_TYPE, wifi_info->eap_keymgmt_type);
1151 if (wifi_info->identity)
1152 g_variant_builder_add(builder, "{ss}",
1153 CONNMAN_CONFIG_FIELD_IDENTITY, wifi_info->identity);
1155 if (wifi_info->password)
1156 g_variant_builder_add(builder, "{ss}",
1157 CONNMAN_CONFIG_FIELD_PASSPHRASE, wifi_info->password);
1159 if (wifi_info->eap_auth &&
1160 g_strcmp0(wifi_info->eap_auth, "NONE") != 0)
1161 g_variant_builder_add(builder, "{ss}",
1162 CONNMAN_CONFIG_FIELD_PHASE2, wifi_info->eap_auth);
1164 if (wifi_info->ca_cert_file)
1165 g_variant_builder_add(builder, "{ss}",
1166 CONNMAN_CONFIG_FIELD_CA_CERT_FILE, wifi_info->ca_cert_file);
1168 if (wifi_info->client_cert_file)
1169 g_variant_builder_add(builder, "{ss}",
1170 CONNMAN_CONFIG_FIELD_CLIENT_CERT_FILE,
1171 wifi_info->client_cert_file);
1173 if (wifi_info->private_key_file)
1174 g_variant_builder_add(builder, "{ss}",
1175 CONNMAN_CONFIG_FIELD_PVT_KEY_FILE,
1176 wifi_info->private_key_file);
1178 if (wifi_info->private_key_password)
1179 g_variant_builder_add(builder, "{ss}",
1180 CONNMAN_CONFIG_FIELD_PVT_KEY_PASSPHRASE,
1181 wifi_info->private_key_password);
1183 params = g_variant_new("(o@a{ss})",
1184 profilename, g_variant_builder_end(builder));
1185 g_variant_builder_unref(builder);
1187 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE,
1188 NETCONFIG_WIFI_PATH,
1189 NETCONFIG_WIFI_INTERFACE, "CreateEapConfig", params,
1190 DBUS_REPLY_TIMEOUT, __net_open_connection_reply);
1192 __NETWORK_FUNC_EXIT__;
1196 int _net_dbus_set_agent_passphrase_and_connect(
1197 const char *passphrase, const char *profilename)
1199 __NETWORK_FUNC_ENTER__;
1201 net_err_t Error = NET_ERR_NONE;
1203 if (NULL == passphrase || strlen(passphrase) <= 0 || NULL == profilename) {
1204 NETWORK_LOG(NETWORK_ERROR, "Invalid parameter");
1205 return NET_ERR_INVALID_PARAM;
1208 Error = __net_dbus_set_agent_field_and_connect(
1209 NETCONFIG_AGENT_FIELD_PASSPHRASE,
1212 if (NET_ERR_NONE != Error) {
1213 NETWORK_LOG(NETWORK_ERROR, "Configuration failed(%d)", Error);
1217 __NETWORK_FUNC_EXIT__;
1221 int _net_dbus_set_agent_fields_and_connect(const char *ssid,
1222 const char *passphrase, const char *profilename)
1224 __NETWORK_FUNC_ENTER__;
1226 net_err_t Error = NET_ERR_NONE;
1228 /* If OPEN network, passphrase can be NULL */
1229 if (NULL == ssid || strlen(ssid) <= 0 || NULL == profilename) {
1230 NETWORK_LOG(NETWORK_ERROR, "Invalid parameter");
1231 return NET_ERR_INVALID_PARAM;
1234 GVariant *params = NULL;
1235 GVariantBuilder *builder;
1237 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1238 g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_SSID,
1239 g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, ssid,
1240 strlen(ssid), sizeof(guchar)));
1243 g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_PASSPHRASE,
1244 g_variant_new_string(passphrase));
1246 params = g_variant_new("(o@a{sv})",
1247 profilename, g_variant_builder_end(builder));
1248 g_variant_builder_unref(builder);
1250 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE,
1251 NETCONFIG_WIFI_PATH,
1252 CONNMAN_AGENT_INTERFACE, "SetField", params,
1253 DBUS_REPLY_TIMEOUT, __net_open_connection_reply);
1254 if (NET_ERR_NONE != Error) {
1255 NETWORK_LOG(NETWORK_ERROR, "Configuration failed(%d)", Error);
1259 __NETWORK_FUNC_EXIT__;
1263 int _net_dbus_get_wps_pin(char **wps_pin)
1265 __NETWORK_FUNC_ENTER__;
1266 net_err_t error = NET_ERR_NONE;
1267 GVariant *params = NULL;
1268 GVariant *reply = NULL;
1269 gchar *value = NULL;
1272 params = g_variant_new("(s)", "wlan0");
1273 reply = _net_invoke_dbus_method(SUPPLICANT_SERVICE, SUPPLICANT_PATH,
1274 SUPPLICANT_INTERFACE, "GetInterface", params, &error);
1275 if (reply == NULL) {
1276 NETWORK_LOG(NETWORK_ERROR, "Failed to get Wi-Fi interface");
1279 g_variant_get(reply, "(o)", &path);
1281 reply = _net_invoke_dbus_method(SUPPLICANT_SERVICE, path,
1282 SUPPLICANT_INTERFACE ".Interface.WPS", "GetPin", NULL, &error);
1283 if (reply == NULL) {
1284 NETWORK_LOG(NETWORK_ERROR, "Failed to get wps pin");
1287 g_variant_get(reply, "(s)", &value);
1288 *wps_pin = g_strdup_printf("%s", value);
1289 g_variant_unref(reply);
1291 __NETWORK_FUNC_EXIT__;
1295 int _net_dbus_set_agent_wps_pbc_and_connect(const char *profilename)
1297 __NETWORK_FUNC_ENTER__;
1299 net_err_t Error = NET_ERR_NONE;
1301 Error = __net_dbus_set_agent_field_and_connect(
1302 NETCONFIG_AGENT_FIELD_WPS_PBC,
1305 if (NET_ERR_NONE != Error) {
1306 NETWORK_LOG(NETWORK_ERROR, "PBC configuration failed(%d)", Error);
1310 __NETWORK_FUNC_EXIT__;
1314 int _net_dbus_set_agent_wps_pin_and_connect(
1315 const char *wps_pin, const char *profilename)
1317 __NETWORK_FUNC_ENTER__;
1319 net_err_t Error = NET_ERR_NONE;
1321 if (NULL == wps_pin || strlen(wps_pin) <= 0) {
1322 NETWORK_LOG(NETWORK_ERROR, "Invalid param ");
1323 return NET_ERR_INVALID_PARAM;
1326 Error = __net_dbus_set_agent_field_and_connect(
1327 NETCONFIG_AGENT_FIELD_WPS_PIN,
1330 if (NET_ERR_NONE != Error) {
1331 NETWORK_LOG(NETWORK_ERROR, "PIN configuration failed(%d)", Error);
1335 __NETWORK_FUNC_EXIT__;
1339 int _net_dbus_connect_service(const net_wifi_connect_service_info_t *wifi_connection_info)
1341 __NETWORK_FUNC_ENTER__;
1343 net_err_t Error = NET_ERR_NONE;
1344 char *grp_name = NULL;
1345 int profile_count = 0;
1346 net_profile_info_t* profile_info = NULL;
1349 /* Get group name with prefix 'ssid' in hex */
1350 grp_name = __net_make_group_name(wifi_connection_info->is_hidden == TRUE ?
1351 NULL : wifi_connection_info->ssid,
1352 wifi_connection_info->mode,
1353 wifi_connection_info->security);
1354 if (NULL == grp_name) {
1355 NETWORK_LOG(NETWORK_ERROR, "Failed to make a group name");
1357 __NETWORK_FUNC_EXIT__;
1358 return NET_ERR_UNKNOWN;
1361 Error = _net_get_profile_list(NET_DEVICE_WIFI, &profile_info, &profile_count);
1362 if (NET_ERR_NONE != Error) {
1363 NETWORK_LOG(NETWORK_ERROR,
1364 "_net_get_profile_list fail. Error [%s]",
1365 _net_print_error(Error));
1370 for (i = 0; i < profile_count; i++) {
1371 if (g_strstr_len(profile_info[i].ProfileName,
1372 NET_PROFILE_NAME_LEN_MAX+1, grp_name) != NULL) {
1373 NETWORK_LOG(NETWORK_ERROR, "Found profile %s",
1374 profile_info[i].ProfileName);
1376 if (profile_info[i].ProfileState == NET_STATE_TYPE_READY ||
1377 profile_info[i].ProfileState == NET_STATE_TYPE_ONLINE) {
1378 NETWORK_LOG(NETWORK_ERROR, "Already profile is connected");
1379 Error = NET_ERR_ACTIVE_CONNECTION_EXISTS;
1388 if (i >= profile_count) {
1389 NETWORK_LOG(NETWORK_ERROR, "No matching profile found");
1390 Error = NET_ERR_NO_SERVICE;
1395 if (wifi_connection_info->is_hidden == TRUE) {
1397 char *target_name = __net_make_group_name(wifi_connection_info->ssid,
1398 wifi_connection_info->mode,
1399 wifi_connection_info->security);
1401 for (target = 0; target < profile_count; target++) {
1402 if (g_strstr_len(profile_info[target].ProfileName,
1403 NET_PROFILE_NAME_LEN_MAX+1, target_name) != NULL) {
1404 g_strlcpy(request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].ProfileName,
1405 profile_info[target].ProfileName, NET_PROFILE_NAME_LEN_MAX+1);
1411 g_free(target_name);
1413 g_strlcpy(request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].ProfileName,
1414 profile_info[i].ProfileName, NET_PROFILE_NAME_LEN_MAX+1);
1417 if (g_strcmp0(wifi_connection_info->security, "ieee8021x") == 0) {
1418 /* Create the EAP config file */
1419 Error = _net_dbus_set_eap_config_fields_and_connect(
1420 wifi_connection_info, profile_info[i].ProfileName);
1421 if (NET_ERR_NONE != Error) {
1422 NETWORK_LOG(NETWORK_ERROR, "Fail to create eap_config");
1426 } else if (wifi_connection_info->is_hidden == TRUE) {
1427 Error = _net_dbus_set_agent_fields_and_connect(
1428 wifi_connection_info->ssid,
1429 wifi_connection_info->passphrase,
1430 profile_info[i].ProfileName);
1431 } else if (g_strcmp0(wifi_connection_info->security, "none") != 0) {
1432 Error = _net_dbus_set_agent_passphrase_and_connect(
1433 wifi_connection_info->passphrase, profile_info[i].ProfileName);
1434 if (NET_ERR_NONE != Error) {
1435 NETWORK_LOG(NETWORK_ERROR, "Fail to set agent_passphrase");
1440 Error = _net_dbus_open_connection(profile_info[i].ProfileName);
1443 if (NET_ERR_NONE != Error) {
1444 NETWORK_LOG(NETWORK_ERROR,
1445 "Failed to request open connection, Error [%s]",
1446 _net_print_error(Error));
1448 memset(&request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION],
1449 0, sizeof(network_request_table_t));
1452 NET_MEMFREE(profile_info);
1455 __NETWORK_FUNC_EXIT__;
1459 int _net_dbus_set_profile_ipv4(net_profile_info_t* prof_info, char* profile_name)
1461 __NETWORK_FUNC_ENTER__;
1463 net_err_t Error = NET_ERR_NONE;
1465 const char *manual_method = "manual";
1466 const char *dhcp_method = "dhcp";
1467 const char *off_method = "off";
1469 const char *prop_ipv4_configuration = "IPv4.Configuration";
1470 const char *prop_method = "Method";
1471 const char *prop_address = "Address";
1472 const char *prop_gateway = "Gateway";
1473 const char *prop_netmask = "Netmask";
1475 char ip_buffer[NETPM_IPV4_STR_LEN_MAX+1] = "";
1476 char netmask_buffer[NETPM_IPV4_STR_LEN_MAX+1] = "";
1477 char gateway_buffer[NETPM_IPV4_STR_LEN_MAX+1] = "";
1479 char *ipaddress = ip_buffer;
1480 char *netmask = netmask_buffer;
1481 char *gateway = gateway_buffer;
1483 GVariant *params = NULL;
1484 GVariantBuilder *builder;
1485 net_dev_info_t *profile_net_info = NULL;
1487 GVariant *message = NULL;
1489 NETWORK_LOG(NETWORK_HIGH, "profile_name: [%s]", profile_name);
1491 if ((prof_info == NULL) || (profile_name == NULL) || (strlen(profile_name) == 0)) {
1492 NETWORK_LOG(NETWORK_ERROR, "Invalid argument");
1493 __NETWORK_FUNC_EXIT__;
1494 return NET_ERR_INVALID_PARAM;
1497 if (prof_info->profile_type == NET_DEVICE_WIFI)
1498 profile_net_info = &(prof_info->ProfileInfo.Wlan.net_info);
1499 else if (prof_info->profile_type == NET_DEVICE_ETHERNET)
1500 profile_net_info = &(prof_info->ProfileInfo.Ethernet.net_info);
1502 NETWORK_LOG(NETWORK_ERROR, "Invalid Profile Type\n");
1503 __NETWORK_FUNC_EXIT__;
1504 return NET_ERR_INVALID_PARAM;
1507 g_strlcpy(ip_buffer,
1508 inet_ntoa(profile_net_info->IpAddr.Data.Ipv4),
1509 NETPM_IPV4_STR_LEN_MAX + 1);
1511 g_strlcpy(netmask_buffer,
1512 inet_ntoa(profile_net_info->SubnetMask.Data.Ipv4),
1513 NETPM_IPV4_STR_LEN_MAX + 1);
1515 g_strlcpy(gateway_buffer,
1516 inet_ntoa(profile_net_info->GatewayAddr.Data.Ipv4),
1517 NETPM_IPV4_STR_LEN_MAX + 1);
1519 SECURE_NETWORK_LOG(NETWORK_LOW, "ip: %s, netmask: %s, gateway: %s",
1520 ipaddress, netmask, gateway);
1522 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1524 if (profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_DYNAMIC ||
1525 profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_AUTO_IP) {
1527 g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(dhcp_method));
1529 } else if (profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_OFF) {
1531 g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(off_method));
1533 } else if (profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_STATIC) {
1535 g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(manual_method));
1537 if (strlen(ipaddress) >= NETPM_IPV4_STR_LEN_MIN)
1538 g_variant_builder_add(builder, "{sv}", prop_address, g_variant_new_string(ipaddress));
1540 if (strlen(netmask) >= NETPM_IPV4_STR_LEN_MIN)
1541 g_variant_builder_add(builder, "{sv}", prop_netmask, g_variant_new_string(netmask));
1543 if (strlen(gateway) >= NETPM_IPV4_STR_LEN_MIN)
1544 g_variant_builder_add(builder, "{sv}", prop_gateway, g_variant_new_string(gateway));
1547 NETWORK_LOG(NETWORK_ERROR, "Invalid argument");
1548 __NETWORK_FUNC_EXIT__;
1549 return NET_ERR_INVALID_PARAM;
1552 params = g_variant_new("(sv)",
1553 prop_ipv4_configuration, g_variant_builder_end(builder));
1554 g_variant_builder_unref(builder);
1556 message = _net_invoke_dbus_method(CONNMAN_SERVICE, profile_name,
1557 CONNMAN_SERVICE_INTERFACE, "SetProperty", params,
1559 if (message == NULL) {
1560 NETWORK_LOG(NETWORK_ERROR, "Failed to set IPv4 Property");
1561 __NETWORK_FUNC_EXIT__;
1565 g_variant_unref(message);
1566 NETWORK_LOG(NETWORK_HIGH, "Successfully configured IPv4.Configuration\n");
1568 __NETWORK_FUNC_EXIT__;
1572 int _net_dbus_set_profile_ipv6(net_profile_info_t* prof_info, char* profile_name)
1574 __NETWORK_FUNC_ENTER__;
1576 const char *manual_method = "manual";
1577 const char *auto_method = "auto";
1578 const char *off_method = "off";
1580 const char *prop_ipv6_configuration = "IPv6.Configuration";
1581 const char *prop_method = "Method";
1582 const char *prop_address = "Address";
1583 const char *prop_gateway = "Gateway";
1584 const char *prop_prefixlen = "PrefixLength";
1586 char ipaddr6[INET6_ADDRSTRLEN];
1587 char gwaddr6[INET6_ADDRSTRLEN];
1588 char prefixlen[INET6_ADDRSTRLEN];
1590 char *ip6_ptr = ipaddr6;
1591 char *gw6_ptr = gwaddr6;
1592 char *prlen_ptr = prefixlen;
1594 net_err_t Error = NET_ERR_NONE;
1595 GVariant *params = NULL;
1596 GVariantBuilder *builder;
1597 GVariant *message = NULL;
1598 net_dev_info_t *profile_net_info = NULL;
1600 if ((prof_info == NULL) || (profile_name == NULL) || (strlen(profile_name) == 0)) {
1601 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid argument\n");
1602 __NETWORK_FUNC_EXIT__;
1603 return NET_ERR_INVALID_PARAM;
1606 if (prof_info->profile_type == NET_DEVICE_WIFI)
1607 profile_net_info = &(prof_info->ProfileInfo.Wlan.net_info);
1608 else if (prof_info->profile_type == NET_DEVICE_ETHERNET)
1609 profile_net_info = &(prof_info->ProfileInfo.Ethernet.net_info);
1611 NETWORK_LOG(NETWORK_ERROR, "Invalid Profile Type\n");
1612 __NETWORK_FUNC_EXIT__;
1613 return NET_ERR_INVALID_PARAM;
1616 inet_ntop(AF_INET6, &profile_net_info->IpAddr6.Data.Ipv6, ipaddr6,
1618 inet_ntop(AF_INET6, &profile_net_info->GatewayAddr6.Data.Ipv6, gwaddr6,
1620 g_snprintf(prefixlen, INET6_ADDRSTRLEN, "%d",
1621 profile_net_info->PrefixLen6);
1623 NETWORK_LOG(NETWORK_HIGH, "ipaddress : %s, prefix_len : %s, gateway :"
1624 " %s\n", ip6_ptr, prlen_ptr, gw6_ptr);
1626 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1628 if (profile_net_info->IpConfigType6 == NET_IP_CONFIG_TYPE_DYNAMIC ||
1629 profile_net_info->IpConfigType6 == NET_IP_CONFIG_TYPE_AUTO_IP) {
1631 g_variant_builder_add(builder, "{sv}", prop_method,
1632 g_variant_new_string(auto_method));
1634 } else if (profile_net_info->IpConfigType6 == NET_IP_CONFIG_TYPE_OFF) {
1636 g_variant_builder_add(builder, "{sv}", prop_method,
1637 g_variant_new_string(off_method));
1639 NETWORK_LOG(NETWORK_HIGH, "DBus Message 2/2: %s %s\n",
1640 prop_method, off_method);
1641 } else if (profile_net_info->IpConfigType6 == NET_IP_CONFIG_TYPE_STATIC) {
1643 g_variant_builder_add(builder, "{sv}", prop_method,
1644 g_variant_new_string(manual_method));
1646 if (strlen(ipaddr6) >= NETPM_IPV6_STR_LEN_MIN) {
1647 g_variant_builder_add(builder, "{sv}", prop_address,
1648 g_variant_new_string(ip6_ptr));
1651 if (profile_net_info->PrefixLen6 <= NETPM_IPV6_MAX_PREFIX_LEN) {
1652 g_variant_builder_add(builder, "{sv}", prop_prefixlen,
1653 g_variant_new_string(prlen_ptr));
1656 if (strlen(gwaddr6) >= NETPM_IPV6_STR_LEN_MIN) {
1657 g_variant_builder_add(builder, "{sv}", prop_gateway,
1658 g_variant_new_string(gw6_ptr));
1660 NETWORK_LOG(NETWORK_HIGH, "DBus Message 2/2: %s %s %s %s %s %s"
1661 " %s %s\n", prop_method, manual_method,
1662 prop_address, ipaddr6, prop_prefixlen,
1663 prefixlen, prop_gateway, gwaddr6);
1665 NETWORK_LOG(NETWORK_ERROR, "Invalid argument\n");
1666 __NETWORK_FUNC_EXIT__;
1667 return NET_ERR_INVALID_PARAM;
1670 params = g_variant_new("(sv)", prop_ipv6_configuration,
1671 g_variant_builder_end(builder));
1672 g_variant_builder_unref(builder);
1674 message = _net_invoke_dbus_method(CONNMAN_SERVICE, profile_name,
1675 CONNMAN_SERVICE_INTERFACE, "SetProperty", params,
1677 if (message == NULL) {
1678 NETWORK_LOG(NETWORK_ERROR, "Failed to set IPv6 Property");
1679 __NETWORK_FUNC_EXIT__;
1683 g_variant_unref(message);
1684 NETWORK_LOG(NETWORK_HIGH, "Successfully configured IPv6.Configuration\n");
1686 __NETWORK_FUNC_EXIT__;
1690 int _net_dbus_set_profile_dns(net_profile_info_t* prof_info, char* profile_name)
1692 __NETWORK_FUNC_ENTER__;
1694 const char *prop_nameserver_configuration = "Nameservers.Configuration";
1695 char dns_buffer[NET_DNS_ADDR_MAX][NETPM_IPV4_STR_LEN_MAX+1];
1696 char *dns_address[NET_DNS_ADDR_MAX];
1697 net_err_t Error = NET_ERR_NONE;
1698 GVariant *params = NULL;
1699 GVariantBuilder *builder;
1701 net_dev_info_t *profile_net_info = NULL;
1702 GVariant *message = NULL;
1704 if ((prof_info == NULL) || (profile_name == NULL) || (strlen(profile_name) == 0)) {
1705 NETWORK_LOG(NETWORK_ERROR, "Invalid parameter");
1706 __NETWORK_FUNC_EXIT__;
1707 return NET_ERR_INVALID_PARAM;
1710 if (prof_info->profile_type == NET_DEVICE_WIFI)
1711 profile_net_info = &(prof_info->ProfileInfo.Wlan.net_info);
1712 else if (prof_info->profile_type == NET_DEVICE_ETHERNET)
1713 profile_net_info = &(prof_info->ProfileInfo.Ethernet.net_info);
1715 NETWORK_LOG(NETWORK_ERROR, "Invalid Profile Type\n");
1716 __NETWORK_FUNC_EXIT__;
1717 return NET_ERR_INVALID_PARAM;
1719 if (profile_net_info->DnsCount > NET_DNS_ADDR_MAX) {
1720 NETWORK_LOG(NETWORK_ERROR, "Invalid parameter\n");
1721 __NETWORK_FUNC_EXIT__;
1722 return NET_ERR_INVALID_PARAM;
1725 for (i = 0; i < profile_net_info->DnsCount; i++) {
1726 dns_buffer[i][0] = '\0';
1727 dns_address[i] = NULL;
1729 if (profile_net_info->DnsAddr[i].Data.Ipv4.s_addr != 0)
1730 g_strlcpy(dns_buffer[i],
1731 inet_ntoa(profile_net_info->DnsAddr[i].Data.Ipv4),
1732 NETPM_IPV4_STR_LEN_MAX + 1);
1734 dns_address[i] = dns_buffer[i];
1737 if (profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_STATIC) {
1739 builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
1740 for (i = 0; i < profile_net_info->DnsCount; i++)
1741 g_variant_builder_add(builder, "s", dns_address[i]);
1743 params = g_variant_new("(sv)", prop_nameserver_configuration, g_variant_builder_end(builder));
1744 g_variant_builder_unref(builder);
1746 message = _net_invoke_dbus_method(CONNMAN_SERVICE, profile_name,
1747 CONNMAN_SERVICE_INTERFACE, "SetProperty", params,
1749 if (message == NULL) {
1750 NETWORK_LOG(NETWORK_ERROR, "Failed to set "
1751 "Nameservers.Configuration");
1752 __NETWORK_FUNC_EXIT__;
1755 NETWORK_LOG(NETWORK_HIGH, "Successfully configured Nameservers.Configuration\n");
1756 g_variant_unref(message);
1759 __NETWORK_FUNC_EXIT__;
1763 int _net_dbus_set_proxy(net_profile_info_t* prof_info, char* profile_name)
1765 __NETWORK_FUNC_ENTER__;
1767 net_err_t Error = NET_ERR_NONE;
1769 const char *direct_method = "direct";
1770 const char *auto_method = "auto";
1771 const char *manual_method = "manual";
1773 const char *prop_proxy_configuration = "Proxy.Configuration";
1774 const char *prop_method = "Method";
1775 const char *prop_url = "URL";
1776 const char *prop_servers = "Servers";
1778 char proxy_buffer[NET_PROXY_LEN_MAX+1] = "";
1779 char *proxy_address = proxy_buffer;
1781 GVariant *params = NULL;
1782 GVariantBuilder *builder;
1783 GVariantBuilder *builder_sub;
1784 net_dev_info_t *profile_net_info = NULL;
1786 GVariant *message = NULL;
1788 if ((prof_info == NULL) || (profile_name == NULL) || (strlen(profile_name) == 0)) {
1789 NETWORK_LOG(NETWORK_ERROR, "Invalid argument");
1790 __NETWORK_FUNC_EXIT__;
1791 return NET_ERR_INVALID_PARAM;
1794 if (prof_info->profile_type == NET_DEVICE_WIFI)
1795 profile_net_info = &(prof_info->ProfileInfo.Wlan.net_info);
1796 else if (prof_info->profile_type == NET_DEVICE_ETHERNET)
1797 profile_net_info = &(prof_info->ProfileInfo.Ethernet.net_info);
1799 NETWORK_LOG(NETWORK_ERROR, "Invalid Profile Type\n");
1800 __NETWORK_FUNC_EXIT__;
1801 return NET_ERR_INVALID_PARAM;
1804 g_strlcpy(proxy_buffer,
1805 profile_net_info->ProxyAddr, NET_PROXY_LEN_MAX+1);
1807 SECURE_NETWORK_LOG(NETWORK_LOW, "method: %d, proxy address: %s, Profile Name %s",
1808 profile_net_info->ProxyMethod, proxy_address, profile_net_info->ProfileName);
1810 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1812 switch (profile_net_info->ProxyMethod) {
1813 case NET_PROXY_TYPE_AUTO:
1814 g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(auto_method));
1816 case NET_PROXY_TYPE_MANUAL:
1817 g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(manual_method));
1820 g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(direct_method));
1824 if (profile_net_info->ProxyMethod == NET_PROXY_TYPE_AUTO &&
1825 proxy_address[0] != '\0') {
1826 g_variant_builder_add(builder, "{sv}", prop_url, g_variant_new_string(proxy_address));
1829 if (profile_net_info->ProxyMethod == NET_PROXY_TYPE_MANUAL &&
1830 proxy_address[0] != '\0') {
1831 builder_sub = g_variant_builder_new(G_VARIANT_TYPE("as"));
1832 g_variant_builder_add(builder_sub, "s", proxy_address);
1833 g_variant_builder_add(builder, "{sv}", prop_servers, g_variant_builder_end(builder_sub));
1834 g_variant_builder_unref(builder_sub);
1837 params = g_variant_new("(sv)", prop_proxy_configuration, g_variant_builder_end(builder));
1838 g_variant_builder_unref(builder);
1840 message = _net_invoke_dbus_method(CONNMAN_SERVICE, profile_name,
1841 CONNMAN_SERVICE_INTERFACE, "SetProperty", params,
1843 if (message == NULL) {
1844 NETWORK_LOG(NETWORK_ERROR, "Failed to set Proxy Configuration");
1845 __NETWORK_FUNC_EXIT__;
1848 NETWORK_LOG(NETWORK_HIGH, "Successfully configured Proxy.Configuration\n");
1849 g_variant_unref(message);
1851 __NETWORK_FUNC_EXIT__;
1856 int _net_dbus_add_pdp_profile(net_profile_info_t *prof_info)
1858 __NETWORK_FUNC_ENTER__;
1860 net_err_t Error = NET_ERR_NONE;
1861 const char *service_type = "svc_ctg_id";
1862 const char *home_url = "home_url";
1863 const char *proxy_addr = "proxy_addr";
1864 const char *auth_pwd = "auth_pwd";
1865 const char *auth_type = "auth_type";
1866 const char *auth_id = "auth_id";
1867 const char *apn = "apn";
1868 const char *keyword = "profile_name";
1869 const char *pdp_protocol = "pdp_protocol";
1870 const char *roam_pdp_protocol = "roam_pdp_protocol";
1872 char buff_pdn_type[10] = "";
1873 char buff_roam_pdn_type[10] = "";
1874 char buff_svc_type[10] = "";
1875 char buff_auth_type[10] = "";
1876 char *temp_ptr = NULL;
1878 GVariant *params = NULL;
1879 GVariantBuilder *builder;
1880 GVariant *message = NULL;
1882 if (prof_info == NULL) {
1883 NETWORK_LOG(NETWORK_ERROR, "Invalid argument");
1884 __NETWORK_FUNC_EXIT__;
1885 return NET_ERR_INVALID_PARAM;
1888 #if defined TIZEN_DUALSIM_ENABLE
1889 if (prof_info->ProfileInfo.Pdp.PSModemPath[0] != '/' ||
1890 (g_str_has_suffix(prof_info->ProfileInfo.Pdp.PSModemPath, "0") != TRUE &&
1891 g_str_has_suffix(prof_info->ProfileInfo.Pdp.PSModemPath, "1") != TRUE)) {
1892 NETWORK_LOG(NETWORK_ERROR, "Invalid modem path: %s",
1893 prof_info->ProfileInfo.Pdp.PSModemPath);
1895 __NETWORK_FUNC_EXIT__;
1896 return NET_ERR_INVALID_PARAM;
1900 builder = g_variant_builder_new(G_VARIANT_TYPE("a{ss}"));
1902 g_snprintf(buff_svc_type, 10, "%d", prof_info->ProfileInfo.Pdp.ServiceType);
1903 temp_ptr = buff_svc_type;
1905 g_variant_builder_add(builder, "{ss}", service_type, temp_ptr);
1907 if (strlen(prof_info->ProfileInfo.Pdp.HomeURL) > 0) {
1908 temp_ptr = prof_info->ProfileInfo.Pdp.HomeURL;
1910 g_variant_builder_add(builder, "{ss}", home_url, temp_ptr);
1913 if (strlen(prof_info->ProfileInfo.Pdp.net_info.ProxyAddr) > 0) {
1914 temp_ptr = prof_info->ProfileInfo.Pdp.net_info.ProxyAddr;
1916 g_variant_builder_add(builder, "{ss}", proxy_addr, temp_ptr);
1919 if (strlen(prof_info->ProfileInfo.Pdp.AuthInfo.Password) > 0) {
1920 temp_ptr = prof_info->ProfileInfo.Pdp.AuthInfo.Password;
1922 g_variant_builder_add(builder, "{ss}", auth_pwd, temp_ptr);
1925 if (strlen(prof_info->ProfileInfo.Pdp.AuthInfo.UserName) > 0) {
1926 temp_ptr = prof_info->ProfileInfo.Pdp.AuthInfo.UserName;
1928 g_variant_builder_add(builder, "{ss}", auth_id, temp_ptr);
1931 if (prof_info->ProfileInfo.Pdp.AuthInfo.AuthType >= NET_PDP_AUTH_NONE &&
1932 prof_info->ProfileInfo.Pdp.AuthInfo.AuthType <= NET_PDP_AUTH_CHAP) {
1933 g_snprintf(buff_auth_type, 10, "%d",
1934 prof_info->ProfileInfo.Pdp.AuthInfo.AuthType);
1936 temp_ptr = buff_auth_type;
1938 g_variant_builder_add(builder, "{ss}", auth_type, temp_ptr);
1941 if (strlen(prof_info->ProfileInfo.Pdp.Apn) > 0) {
1942 temp_ptr = prof_info->ProfileInfo.Pdp.Apn;
1944 g_variant_builder_add(builder, "{ss}", apn, temp_ptr);
1947 if (prof_info->ProfileInfo.Pdp.PdnType == NET_PDN_TYPE_IPV4 ||
1948 prof_info->ProfileInfo.Pdp.PdnType == NET_PDN_TYPE_IPV6 ||
1949 prof_info->ProfileInfo.Pdp.PdnType == NET_PDN_TYPE_IPV4_IPV6) {
1950 g_snprintf(buff_pdn_type, 10, "%d",
1951 prof_info->ProfileInfo.Pdp.PdnType);
1952 temp_ptr = buff_pdn_type;
1954 g_variant_builder_add(builder, "{ss}", pdp_protocol, temp_ptr);
1957 if (prof_info->ProfileInfo.Pdp.RoamPdnType == NET_PDN_TYPE_IPV4 ||
1958 prof_info->ProfileInfo.Pdp.RoamPdnType == NET_PDN_TYPE_IPV6 ||
1959 prof_info->ProfileInfo.Pdp.RoamPdnType == NET_PDN_TYPE_IPV4_IPV6) {
1960 g_snprintf(buff_roam_pdn_type, 10, "%d",
1961 prof_info->ProfileInfo.Pdp.RoamPdnType);
1962 temp_ptr = buff_roam_pdn_type;
1964 g_variant_builder_add(builder, "{ss}", roam_pdp_protocol, temp_ptr);
1967 if (strlen(prof_info->ProfileInfo.Pdp.Keyword) > 0) {
1968 temp_ptr = prof_info->ProfileInfo.Pdp.Keyword;
1970 g_variant_builder_add(builder, "{ss}", keyword, temp_ptr);
1973 params = g_variant_new("(@a{ss})", g_variant_builder_end(builder));
1974 g_variant_builder_unref(builder);
1976 message = _net_invoke_dbus_method(TELEPHONY_SERVICE,
1977 prof_info->ProfileInfo.Pdp.PSModemPath,
1978 TELEPHONY_MODEM_INTERFACE, "AddProfile", params,
1981 if (message == NULL) {
1982 NETWORK_LOG(NETWORK_ERROR, "Failed to Add Profile");
1983 __NETWORK_FUNC_EXIT__;
1990 g_variant_get(message, "(b)", &add_result);
1992 Error = NET_ERR_NONE;
1994 Error = NET_ERR_UNKNOWN;
1996 g_variant_unref(message);
1998 __NETWORK_FUNC_EXIT__;
2002 int _net_dbus_reset_pdp_profile(int type, const char * modem_path)
2004 __NETWORK_FUNC_ENTER__;
2006 net_err_t Error = NET_ERR_NONE;
2008 GVariant *params = NULL;
2010 params = g_variant_new("(i)", type);
2013 Error = _net_invoke_dbus_method_nonblock(TELEPHONY_SERVICE,
2015 TELEPHONY_MODEM_INTERFACE,
2019 __net_reset_cellular_reply);
2021 Error = _net_invoke_dbus_method_nonblock(TELEPHONY_SERVICE,
2022 TELEPHONY_MASTER_PATH,
2023 TELEPHONY_MODEM_INTERFACE,
2027 __net_reset_cellular_reply);
2030 __NETWORK_FUNC_EXIT__;
2035 int _net_dbus_modify_pdp_profile(net_profile_info_t *prof_info, const char *profile_name)
2037 __NETWORK_FUNC_ENTER__;
2039 net_err_t Error = NET_ERR_NONE;
2041 const char *service_type = "svc_ctg_id";
2042 const char *home_url = "home_url";
2043 const char *proxy_addr = "proxy_addr";
2044 const char *auth_pwd = "auth_pwd";
2045 const char *auth_type = "auth_type";
2046 const char *auth_id = "auth_id";
2047 const char *apn = "apn";
2048 const char *keyword = "keyword";
2049 const char *default_conn = "default_internet_conn";
2050 const char *hidden = "hidden";
2051 const char *editable = "editable";
2052 const char *pdp_protocol = "pdp_protocol";
2053 const char *roam_pdp_protocol = "roam_pdp_protocol";
2055 char buff_pdn_type[10] = "";
2056 char buff_roam_pdn_type[10] = "";
2057 char buff_svc_type[10] = "";
2058 char buff_auth_type[10] = "";
2059 char *temp_ptr = NULL;
2061 GVariant *params = NULL;
2062 GVariantBuilder *builder;
2063 GVariant *message = NULL;
2065 if ((prof_info == NULL) || (profile_name == NULL)) {
2066 NETWORK_LOG(NETWORK_ERROR, "Invalid argument");
2067 __NETWORK_FUNC_EXIT__;
2068 return NET_ERR_INVALID_PARAM;
2071 builder = g_variant_builder_new(G_VARIANT_TYPE("a{ss}"));
2074 g_snprintf(buff_svc_type, 10, "%d", prof_info->ProfileInfo.Pdp.ServiceType);
2075 temp_ptr = buff_svc_type;
2077 g_variant_builder_add(builder, "{ss}", service_type, temp_ptr);
2079 if (strlen(prof_info->ProfileInfo.Pdp.HomeURL) > 0) {
2080 temp_ptr = prof_info->ProfileInfo.Pdp.HomeURL;
2082 g_variant_builder_add(builder, "{ss}", home_url, temp_ptr);
2085 if (strlen(prof_info->ProfileInfo.Pdp.net_info.ProxyAddr) > 0) {
2086 temp_ptr = prof_info->ProfileInfo.Pdp.net_info.ProxyAddr;
2088 g_variant_builder_add(builder, "{ss}", proxy_addr, temp_ptr);
2090 g_variant_builder_add(builder, "{ss}", proxy_addr, "");
2092 if (strlen(prof_info->ProfileInfo.Pdp.AuthInfo.Password) > 0) {
2093 temp_ptr = prof_info->ProfileInfo.Pdp.AuthInfo.Password;
2095 g_variant_builder_add(builder, "{ss}", auth_pwd, temp_ptr);
2098 if (strlen(prof_info->ProfileInfo.Pdp.AuthInfo.UserName) > 0) {
2099 temp_ptr = prof_info->ProfileInfo.Pdp.AuthInfo.UserName;
2101 g_variant_builder_add(builder, "{ss}", auth_id, temp_ptr);
2104 if (prof_info->ProfileInfo.Pdp.AuthInfo.AuthType >= NET_PDP_AUTH_NONE &&
2105 prof_info->ProfileInfo.Pdp.AuthInfo.AuthType <= NET_PDP_AUTH_CHAP) {
2106 g_snprintf(buff_auth_type, 10, "%d",
2107 prof_info->ProfileInfo.Pdp.AuthInfo.AuthType);
2108 temp_ptr = buff_auth_type;
2110 g_variant_builder_add(builder, "{ss}", auth_type, temp_ptr);
2113 if (strlen(prof_info->ProfileInfo.Pdp.Apn) > 0) {
2114 temp_ptr = prof_info->ProfileInfo.Pdp.Apn;
2116 g_variant_builder_add(builder, "{ss}", apn, temp_ptr);
2119 if (prof_info->ProfileInfo.Pdp.PdnType == NET_PDN_TYPE_IPV4 ||
2120 prof_info->ProfileInfo.Pdp.PdnType == NET_PDN_TYPE_IPV6 ||
2121 prof_info->ProfileInfo.Pdp.PdnType == NET_PDN_TYPE_IPV4_IPV6) {
2122 g_snprintf(buff_pdn_type, 10, "%d",
2123 prof_info->ProfileInfo.Pdp.PdnType);
2124 temp_ptr = buff_pdn_type;
2126 g_variant_builder_add(builder, "{ss}", pdp_protocol, temp_ptr);
2129 if (prof_info->ProfileInfo.Pdp.RoamPdnType == NET_PDN_TYPE_IPV4 ||
2130 prof_info->ProfileInfo.Pdp.RoamPdnType == NET_PDN_TYPE_IPV6 ||
2131 prof_info->ProfileInfo.Pdp.RoamPdnType == NET_PDN_TYPE_IPV4_IPV6) {
2132 g_snprintf(buff_roam_pdn_type, 10, "%d",
2133 prof_info->ProfileInfo.Pdp.RoamPdnType);
2134 temp_ptr = buff_roam_pdn_type;
2136 g_variant_builder_add(builder, "{ss}", roam_pdp_protocol, temp_ptr);
2139 if (strlen(prof_info->ProfileInfo.Pdp.Keyword) > 0) {
2140 temp_ptr = prof_info->ProfileInfo.Pdp.Keyword;
2142 g_variant_builder_add(builder, "{ss}", keyword, temp_ptr);
2145 if (prof_info->ProfileInfo.Pdp.Hidden)
2150 g_variant_builder_add(builder, "{ss}", hidden, temp_ptr);
2152 if (prof_info->ProfileInfo.Pdp.Editable)
2157 g_variant_builder_add(builder, "{ss}", editable, temp_ptr);
2159 if (prof_info->ProfileInfo.Pdp.DefaultConn)
2164 g_variant_builder_add(builder, "{ss}", default_conn, temp_ptr);
2166 params = g_variant_new("(@a{ss})", g_variant_builder_end(builder));
2167 g_variant_builder_unref(builder);
2169 message = _net_invoke_dbus_method(TELEPHONY_SERVICE, profile_name,
2170 TELEPHONY_PROFILE_INTERFACE, "ModifyProfile", params,
2172 if (message == NULL) {
2173 NETWORK_LOG(NETWORK_ERROR, "Failed to Modify Profile");
2174 __NETWORK_FUNC_EXIT__;
2180 g_variant_get(message, "(b)", &add_result);
2181 NETWORK_LOG(NETWORK_HIGH, "Profile modify result: %d", add_result);
2184 Error = NET_ERR_NONE;
2186 Error = NET_ERR_UNKNOWN;
2188 g_variant_unref(message);
2190 __NETWORK_FUNC_EXIT__;
2194 int _net_dbus_load_wifi_driver(gboolean wifi_picker_test)
2196 __NETWORK_FUNC_ENTER__;
2198 net_err_t Error = NET_ERR_NONE;
2201 params = g_variant_new("(b)", wifi_picker_test);
2203 /* use DBus signal than reply pending because of performance reason */
2204 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE,
2205 NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
2206 "LoadDriver", params, DBUS_REPLY_TIMEOUT,
2207 __net_wifi_power_reply);
2209 __NETWORK_FUNC_EXIT__;
2213 int _net_dbus_remove_wifi_driver(void)
2215 __NETWORK_FUNC_ENTER__;
2217 net_err_t Error = NET_ERR_NONE;
2219 /* use DBus signal than reply pending because of performance reason */
2220 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE,
2221 NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
2222 "RemoveDriver", NULL, DBUS_REPLY_TIMEOUT,
2223 __net_wifi_power_reply);
2225 __NETWORK_FUNC_EXIT__;
2229 int _net_dbus_specific_scan_request(const char *ssid)
2231 __NETWORK_FUNC_ENTER__;
2233 GVariant *params = NULL;
2234 net_err_t Error = NET_ERR_NONE;
2236 params = g_variant_new("(s)", ssid);
2238 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE,
2239 NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
2240 "RequestSpecificScan", params, 6 * DBUS_REPLY_TIMEOUT,
2241 __net_specific_scan_wifi_reply);
2243 __NETWORK_FUNC_EXIT__;
2247 int _net_dbus_wps_scan_request(void)
2249 __NETWORK_FUNC_ENTER__;
2250 net_err_t Error = NET_ERR_NONE;
2252 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE,
2253 NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
2254 "RequestWpsScan", NULL, 6 * DBUS_REPLY_TIMEOUT,
2255 __net_wps_scan_wifi_reply);
2257 __NETWORK_FUNC_EXIT__;
2261 int _net_dbus_get_passpoint(int *enabled)
2263 __NETWORK_FUNC_ENTER__;
2265 GVariant *message = NULL;
2266 net_err_t Error = NET_ERR_NONE;
2268 message = _net_invoke_dbus_method(NETCONFIG_SERVICE,
2269 NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
2270 "GetPasspoint", NULL, &Error);
2271 if (message == NULL) {
2272 NETWORK_LOG(NETWORK_ERROR, "Failed to Get Passpoint");
2273 __NETWORK_FUNC_EXIT__;
2279 g_variant_get(message, "(i)", &result);
2282 NETWORK_LOG(NETWORK_HIGH, "Get passpoint result: %d", result);
2284 g_variant_unref(message);
2286 __NETWORK_FUNC_EXIT__;
2290 int _net_dbus_set_passpoint(int enable)
2292 __NETWORK_FUNC_ENTER__;
2295 net_err_t Error = NET_ERR_NONE;
2297 params = g_variant_new("(i)", enable);
2299 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE,
2300 NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
2301 "SetPasspoint", params, 6 * DBUS_REPLY_TIMEOUT,
2302 __net_set_passpoint_reply);
2304 __NETWORK_FUNC_EXIT__;
2308 #if defined TIZEN_TV
2309 static void __net_wps_cancel_reply(GObject *source_object,
2310 GAsyncResult *res, gpointer user_data)
2312 __NETWORK_FUNC_ENTER__;
2314 NETWORK_LOG(NETWORK_LOW, "__net_wps_cancel_wifi_reply() called\n");
2316 GDBusConnection *conn = NULL;
2317 GVariant *dbus_result = NULL;
2318 GError *error = NULL;
2320 conn = G_DBUS_CONNECTION(source_object);
2321 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
2323 if (error != NULL) {
2324 NETWORK_LOG(NETWORK_ERROR, "error msg - [%s]\n", error->message);
2325 g_error_free(error);
2329 g_variant_unref(dbus_result);
2331 _net_dbus_pending_call_unref();
2333 __NETWORK_FUNC_EXIT__;
2337 int _net_dbus_cancel_wps(void)
2339 __NETWORK_FUNC_ENTER__;
2341 net_err_t Error = NET_ERR_NONE;
2343 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE,
2344 NETCONFIG_WIFI_PATH, NETCONFIG_TV_PROFILE_INTERFACE,
2345 "RequestWpsCancel", NULL, DBUS_REPLY_TIMEOUT,
2346 __net_wps_cancel_reply);
2348 __NETWORK_FUNC_EXIT__;
2353 static int __net_dbus_set_agent_field(const char *key, const char *value)
2355 __NETWORK_FUNC_ENTER__;
2357 GVariant *params = NULL;
2358 GVariantBuilder *builder;
2359 net_err_t Error = NET_ERR_NONE;
2360 GVariant *message = NULL;
2362 char path[CONNMAN_MAX_BUFLEN] = NETCONFIG_WIFI_PATH;
2364 builder = g_variant_builder_new(G_VARIANT_TYPE("a{ss}"));
2365 g_variant_builder_add(builder, "{ss}", key, value);
2367 params = g_variant_new("(@a{ss})", g_variant_builder_end(builder));
2368 g_variant_builder_unref(builder);
2370 message = _net_invoke_dbus_method(NETCONFIG_SERVICE, path,
2371 CONNMAN_AGENT_INTERFACE, "SetField", params, &Error);
2373 if (Error != NET_ERR_NONE)
2374 NETWORK_LOG(NETWORK_ERROR, "_net_invoke_dbus_method failed");
2376 if (message != NULL)
2377 g_variant_unref(message);
2379 NETWORK_LOG(NETWORK_ERROR, "Failed to set agent field");
2381 __NETWORK_FUNC_EXIT__;
2382 return NET_ERR_NONE;
2385 static void __net_wps_connect_wifi_reply(GObject *source_object,
2386 GAsyncResult *res, gpointer user_data)
2388 __NETWORK_FUNC_ENTER__;
2390 int callback_flag = FALSE;
2391 GDBusConnection *conn = NULL;
2392 GError *error = NULL;
2393 GVariant *dbus_result = NULL;
2394 net_event_info_t event_data;
2395 net_err_t Error = NET_ERR_NONE;
2396 network_request_table_t *wps_info =
2397 &request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS];
2398 memset(&event_data, 0, sizeof(event_data));
2400 conn = G_DBUS_CONNECTION(source_object);
2401 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
2403 if (error != NULL) {
2404 NETWORK_LOG(NETWORK_HIGH, "error msg - [%s]\n", error->message);
2405 Error = __net_error_string_to_enum(error->message);
2406 g_error_free(error);
2408 NETWORK_LOG(NETWORK_LOW, "error msg is NULL\n");
2411 g_variant_unref(dbus_result);
2413 if (Error == NET_ERR_NONE)
2416 NETWORK_LOG(NETWORK_ERROR, "Connection open failed. Error [%d]\n", Error);
2418 memset(wps_info, 0, sizeof(network_request_table_t));
2420 event_data.Error = Error;
2421 event_data.Event = NET_EVENT_WIFI_WPS_RSP;
2423 NETWORK_LOG(NETWORK_HIGH, "Sending NET_EVENT_WIFI_WPS_RSP Error = %s\n",
2424 _net_print_error(event_data.Error));
2426 callback_flag = TRUE;
2429 _net_dbus_pending_call_unref();
2432 _net_client_callback(&event_data);
2434 __NETWORK_FUNC_EXIT__;
2437 int _net_dbus_open_connection_without_ssid()
2439 __NETWORK_FUNC_ENTER__;
2441 net_err_t Error = NET_ERR_NONE;
2442 GVariant *params = NULL;
2444 params = g_variant_new("(s)", "PBC");
2445 NETWORK_LOG(NETWORK_ERROR, "Invoke wps connection without ssid");
2447 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE,
2448 NETCONFIG_WIFI_PATH, NETCONFIG_TV_PROFILE_INTERFACE,
2449 "RequestWpsConnect", params, DBUS_REPLY_TIMEOUT,
2450 __net_wps_connect_wifi_reply);
2452 __NETWORK_FUNC_EXIT__;
2457 int _net_dbus_open_pin_connection_without_ssid(const char *pin)
2459 __NETWORK_FUNC_ENTER__;
2461 net_err_t Error = NET_ERR_NONE;
2463 GVariant *params = NULL;
2464 params = g_variant_new("(s)", pin);
2466 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE,
2467 NETCONFIG_WIFI_PATH, NETCONFIG_TV_PROFILE_INTERFACE,
2468 "RequestWpsConnect", params, DBUS_REPLY_TIMEOUT,
2469 __net_wps_connect_wifi_reply);
2472 __NETWORK_FUNC_EXIT__;
2476 int _net_dbus_set_agent_wps_pbc(void)
2478 __NETWORK_FUNC_ENTER__;
2482 ret_val = __net_dbus_set_agent_field(NETCONFIG_AGENT_FIELD_WPS_PBC, "enable");
2483 if (NET_ERR_NONE != ret_val) {
2484 NETWORK_LOG(NETWORK_ERROR, "__net_dbus_set_agent_field failed. Error = %d \n", ret_val);
2488 NETWORK_LOG(NETWORK_HIGH, "Successfully sent wps pbc\n");
2490 __NETWORK_FUNC_EXIT__;
2491 return NET_ERR_NONE;
2494 int _net_dbus_set_agent_wps_pin(const char *wps_pin)
2496 __NETWORK_FUNC_ENTER__;
2500 if (NULL == wps_pin || strlen(wps_pin) <= 0) {
2501 NETWORK_LOG(NETWORK_ERROR, "Invalid param \n");
2502 return NET_ERR_INVALID_PARAM;
2505 ret_val = __net_dbus_set_agent_field(NETCONFIG_AGENT_FIELD_WPS_PIN, wps_pin);
2506 if (NET_ERR_NONE != ret_val) {
2507 NETWORK_LOG(NETWORK_ERROR, "__net_dbus_set_agent_field failed. Error = %d \n", ret_val);
2511 NETWORK_LOG(NETWORK_HIGH, "Successfully sent wps pin\n");
2513 __NETWORK_FUNC_EXIT__;
2514 return NET_ERR_NONE;
2518 int _net_dbus_tdls_disconnect(const char* peer_mac_addr)
2521 __NETWORK_FUNC_ENTER__;
2523 net_err_t Error = NET_ERR_NONE;
2524 GVariant *message = NULL;
2525 GVariant *params = NULL;
2526 const char *method = "TdlsDisconnect";
2529 params = g_variant_new("(s)", peer_mac_addr);
2531 message = _net_invoke_dbus_method(
2532 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2533 NETCONFIG_WIFI_INTERFACE, method, params, &Error);
2535 if (message == NULL) {
2536 NETWORK_LOG(NETWORK_ERROR, "Failed to TDLS Disconnect Request\n");
2537 __NETWORK_FUNC_EXIT__;
2541 g_variant_get(message, "(i)", &ret);
2543 NETWORK_LOG(NETWORK_HIGH, "Status [%d]\n", ret);
2546 Error = NET_ERR_NONE;
2548 Error = NET_ERR_UNKNOWN;
2550 g_variant_unref(message);
2551 __NETWORK_FUNC_EXIT__;
2556 int _net_dbus_tdls_connected_peer(char** peer_mac_addr)
2559 __NETWORK_FUNC_ENTER__;
2561 net_err_t Error = NET_ERR_NONE;
2562 GVariant *message = NULL;
2563 const char *method = "TdlsConnectedPeer";
2566 if (NULL == peer_mac_addr) {
2567 NETWORK_LOG(NETWORK_ERROR, "Invalid Parameter\n");
2568 __NETWORK_FUNC_EXIT__;
2569 return NET_ERR_INVALID_PARAM;
2572 message = _net_invoke_dbus_method(
2573 NETCONFIG_SERVICE, NETCONFIG_WIFI_PATH,
2574 NETCONFIG_WIFI_INTERFACE, method, NULL, &Error);
2576 if (message == NULL) {
2577 NETWORK_LOG(NETWORK_ERROR, "Failed to Get Peer Connected Mac address\n");
2578 __NETWORK_FUNC_EXIT__;
2582 g_variant_get(message, "(s)", peer_mac_addr);
2584 NETWORK_LOG(NETWORK_HIGH, "TDLS Peer Mac address [%s]\n", *peer_mac_addr);
2586 g_variant_unref(message);
2587 __NETWORK_FUNC_EXIT__;
2592 int _net_dbus_device_policy_get_wifi(int *state)
2594 __NETWORK_FUNC_ENTER__;
2596 net_err_t Error = NET_ERR_NONE;
2597 GVariant *message = NULL;
2599 if (state == NULL) {
2600 NETWORK_LOG(NETWORK_ERROR, "Invalid Parameter\n");
2601 __NETWORK_FUNC_EXIT__;
2602 return NET_ERR_INVALID_PARAM;
2605 message = _net_invoke_dbus_method(NETCONFIG_SERVICE, NETCONFIG_NETWORK_PATH,
2606 NETCONFIG_NETWORK_INTERFACE, "DevicePolicyGetWifi", NULL, &Error);
2608 if (message == NULL) {
2609 NETWORK_LOG(NETWORK_ERROR, "Failed to get wifi device policy\n");
2613 g_variant_get(message, "(i)", state);
2615 NETWORK_LOG(NETWORK_LOW, "Wifi device policy state [%d]\n", *state);
2617 g_variant_unref(message);
2619 __NETWORK_FUNC_EXIT__;
2623 int _net_dbus_device_policy_get_wifi_profile(int *state)
2625 __NETWORK_FUNC_ENTER__;
2627 net_err_t Error = NET_ERR_NONE;
2628 GVariant *message = NULL;
2630 if (state == NULL) {
2631 NETWORK_LOG(NETWORK_ERROR, "Invalid Parameter\n");
2632 __NETWORK_FUNC_EXIT__;
2633 return NET_ERR_INVALID_PARAM;
2636 message = _net_invoke_dbus_method(NETCONFIG_SERVICE, NETCONFIG_NETWORK_PATH,
2637 NETCONFIG_NETWORK_INTERFACE, "DevicePolicyGetWifiProfile", NULL, &Error);
2639 if (message == NULL) {
2640 NETWORK_LOG(NETWORK_ERROR, "Failed to get wifi device policy\n");
2644 g_variant_get(message, "(i)", state);
2646 NETWORK_LOG(NETWORK_LOW, "Wifi profile device policy state [%d]\n", *state);
2648 g_variant_unref(message);
2650 __NETWORK_FUNC_EXIT__;