2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
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.
21 #endif /* __cplusplus */
24 /*****************************************************************************
26 *****************************************************************************/
32 #include <dbus/dbus-glib.h>
33 #include <dbus/dbus.h>
34 #include <sys/types.h>
38 /*****************************************************************************
40 *****************************************************************************/
42 #include "network-internal.h"
43 #include "network-dbus-request.h"
45 /*****************************************************************************
47 *****************************************************************************/
49 #define DBUS_REPLY_TIMEOUT (120 * 1000)
51 /*****************************************************************************
52 * Local Functions Declaration
53 *****************************************************************************/
55 static int __net_error_string_to_enum(const char* error);
56 static int __net_netconfig_error_string_to_enum(const char* error);
57 static int _net_get_error_from_message(DBusMessage *message);
58 static int _net_get_error_from_netconfig_message(DBusMessage *message);
59 static void __net_open_connection_reply(DBusPendingCall *call, void *user_data);
60 static void __net_close_connection_reply(DBusPendingCall *call, void *user_data);
61 static void __net_wifi_power_reply(DBusPendingCall *call, void *user_data);
63 /*****************************************************************************
65 *****************************************************************************/
68 /*****************************************************************************
70 *****************************************************************************/
72 struct dbus_pending_call_data {
73 DBusPendingCall *pcall;
77 static struct dbus_pending_call_data network_dbus_pending_call_data = {
82 /*****************************************************************************
84 *****************************************************************************/
86 extern network_info_t NetworkInfo;
87 extern network_request_table_t request_table[NETWORK_REQUEST_TYPE_MAX];
90 /*****************************************************************************
92 *****************************************************************************/
94 /*****************************************************************************
95 * Local Functions Definition
96 *****************************************************************************/
98 static int __net_error_string_to_enum(const char* error)
100 NETWORK_LOG(NETWORK_HIGH, "Passed error value [%s]\n", error);
102 if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".NoReply"))
103 return NET_ERR_TIME_OUT;
104 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".Failed"))
105 return NET_ERR_UNKNOWN;
106 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".UnknownMethod"))
107 return NET_ERR_UNKNOWN_METHOD;
108 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".InvalidArguments"))
109 return NET_ERR_INVALID_PARAM;
110 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".PermissionDenied"))
111 return NET_ERR_ACCESS_DENIED;
112 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".PassphraseRequired"))
113 return NET_ERR_INVALID_OPERATION;
114 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".NotRegistered"))
115 return NET_ERR_INVALID_OPERATION;
116 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".NotUnique"))
117 return NET_ERR_INVALID_OPERATION;
118 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".NotSupported"))
119 return NET_ERR_NOT_SUPPORTED;
120 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".NotImplemented"))
121 return NET_ERR_NOT_SUPPORTED;
122 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".NotFound"))
123 return NET_ERR_NOT_SUPPORTED;
124 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".NoCarrier"))
125 return NET_ERR_NOT_SUPPORTED;
126 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".InProgress"))
127 return NET_ERR_IN_PROGRESS;
128 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".AlreadyExists"))
129 return NET_ERR_INVALID_OPERATION;
130 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".AlreadyEnabled"))
131 return NET_ERR_INVALID_OPERATION;
132 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".AlreadyDisabled"))
133 return NET_ERR_INVALID_OPERATION;
134 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".AlreadyConnected"))
135 return NET_ERR_ACTIVE_CONNECTION_EXISTS;
136 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".NotConnected"))
137 return NET_ERR_NO_ACTIVE_CONNECTIONS;
138 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".OperationAborted"))
139 return NET_ERR_OPERATION_ABORTED;
140 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".OperationTimeout"))
141 return NET_ERR_TIME_OUT;
142 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".InvalidService"))
143 return NET_ERR_NO_SERVICE;
144 else if (NULL != strstr(error, CONNMAN_ERROR_INTERFACE ".InvalidProperty"))
145 return NET_ERR_INVALID_OPERATION;
146 return NET_ERR_UNKNOWN;
149 static int __net_netconfig_error_string_to_enum(const char* error)
151 NETWORK_LOG(NETWORK_HIGH, "Passed error value [%s]\n", error);
154 return NET_ERR_UNKNOWN;
156 if (NULL != strstr(error, ".WifiDriverFailed"))
157 return NET_ERR_WIFI_DRIVER_FAILURE;
158 else if (NULL != strstr(error, ".SecurityRestricted"))
159 return NET_ERR_SECURITY_RESTRICTED;
160 return NET_ERR_UNKNOWN;
163 static int _net_get_error_from_message(DBusMessage *message)
165 __NETWORK_FUNC_ENTER__;
169 MessageType = dbus_message_get_type(message);
171 if (MessageType == DBUS_MESSAGE_TYPE_ERROR) {
172 const char* ptr = dbus_message_get_error_name(message);
173 NETWORK_LOG(NETWORK_ERROR, "Error!!! Error message received [%s]\n", ptr);
174 __NETWORK_FUNC_EXIT__;
175 return __net_error_string_to_enum(ptr);
178 __NETWORK_FUNC_EXIT__;
182 static int _net_get_error_from_netconfig_message(DBusMessage *message)
184 __NETWORK_FUNC_ENTER__;
188 MessageType = dbus_message_get_type(message);
190 if (MessageType == DBUS_MESSAGE_TYPE_ERROR) {
191 const char* ptr = dbus_message_get_error_name(message);
192 const char* err_msg = _net_get_string(message);
193 NETWORK_LOG(NETWORK_ERROR,
194 "Error!!! Error message received [%s] [%s]\n", ptr, err_msg);
195 __NETWORK_FUNC_EXIT__;
196 return __net_netconfig_error_string_to_enum(err_msg);
199 __NETWORK_FUNC_EXIT__;
203 static void __net_open_connection_reply(DBusPendingCall *call, void *user_data)
205 __NETWORK_FUNC_ENTER__;
207 NETWORK_LOG(NETWORK_LOW, "__net_open_connection_reply() called\n");
209 net_event_info_t event_data = {0,};
210 net_profile_info_t prof_info;
211 network_request_table_t *open_info = &request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION];
212 network_request_table_t *wps_info = &request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS];
214 DBusMessage *reply = dbus_pending_call_steal_reply(call);
215 net_err_t Error = _net_get_error_from_message(reply);
217 if (Error == NET_ERR_NONE)
220 NETWORK_LOG(NETWORK_ERROR,
221 "Error!!! Connection open failed. Error code : [%d]\n", Error);
223 if (open_info->flag == TRUE) {
224 net_device_t device_type = _net_get_tech_type_from_path(open_info->ProfileName);
226 if (Error == NET_ERR_IN_PROGRESS &&
227 device_type == NET_DEVICE_CELLULAR)
230 snprintf(event_data.ProfileName,
231 NET_PROFILE_NAME_LEN_MAX + 1, "%s",
232 open_info->ProfileName);
234 memset(open_info, 0, sizeof(network_request_table_t));
236 event_data.Error = Error;
238 if (Error == NET_ERR_ACTIVE_CONNECTION_EXISTS) {
239 Error = net_get_profile_info(event_data.ProfileName, &prof_info);
241 if (device_type == NET_DEVICE_CELLULAR)
242 event_data.Error = NET_ERR_NONE;
244 if (Error != NET_ERR_NONE) {
245 NETWORK_LOG(NETWORK_ERROR,
246 "Error!!! net_get_profile_info() failed [%s]\n",
247 _net_print_error(Error));
248 event_data.Datalength = 0;
249 event_data.Data = NULL;
251 event_data.Datalength = sizeof(net_profile_info_t);
252 event_data.Data = &prof_info;
256 event_data.Event = NET_EVENT_OPEN_RSP;
257 NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_OPEN_RSP Error = %s\n",
258 _net_print_error(event_data.Error));
259 _net_client_callback(&event_data);
260 } else if (wps_info->flag == TRUE) {
262 snprintf(event_data.ProfileName,
263 NET_PROFILE_NAME_LEN_MAX + 1, "%s",
264 wps_info->ProfileName);
266 memset(wps_info, 0, sizeof(network_request_table_t));
268 event_data.Error = Error;
270 if (Error == NET_ERR_ACTIVE_CONNECTION_EXISTS) {
271 Error = net_get_profile_info(event_data.ProfileName, &prof_info);
272 if (Error != NET_ERR_NONE) {
273 NETWORK_LOG(NETWORK_ERROR,
274 "Error!!! net_get_profile_info() failed [%s]\n",
275 _net_print_error(Error));
276 event_data.Datalength = 0;
277 event_data.Data = NULL;
279 event_data.Datalength = sizeof(net_profile_info_t);
280 event_data.Data = &prof_info;
284 event_data.Event = NET_EVENT_WIFI_WPS_RSP;
286 NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_WIFI_WPS_RSP Error = %s\n",
287 _net_print_error(event_data.Error));
288 _net_client_callback(&event_data);
292 dbus_message_unref(reply);
293 dbus_pending_call_unref(call);
295 network_dbus_pending_call_data.is_used = FALSE;
296 network_dbus_pending_call_data.pcall = NULL;
298 __NETWORK_FUNC_EXIT__;
301 static void __net_close_connection_reply(DBusPendingCall *call, void *user_data)
303 __NETWORK_FUNC_ENTER__;
305 NETWORK_LOG(NETWORK_LOW, "__net_close_connection_reply() called\n");
307 net_event_info_t event_data = {0,};
308 network_request_table_t *close_info = &request_table[NETWORK_REQUEST_TYPE_CLOSE_CONNECTION];
310 DBusMessage *reply = dbus_pending_call_steal_reply(call);
311 net_err_t Error = _net_get_error_from_message(reply);
313 if (Error == NET_ERR_NONE)
316 NETWORK_LOG(NETWORK_ERROR,
317 "Error!!! Connection close failed. Error code : [%d]\n", Error);
319 if (close_info->flag == TRUE) {
320 net_device_t device_type = _net_get_tech_type_from_path(close_info->ProfileName);
322 if (Error == NET_ERR_ACTIVE_CONNECTION_EXISTS &&
323 device_type == NET_DEVICE_CELLULAR)
324 Error = NET_ERR_NONE;
326 snprintf(event_data.ProfileName,
327 NET_PROFILE_NAME_LEN_MAX + 1, "%s",
328 close_info->ProfileName);
330 memset(close_info, 0, sizeof(network_request_table_t));
332 event_data.Error = Error;
333 event_data.Datalength = 0;
334 event_data.Data = NULL;
335 event_data.Event = NET_EVENT_CLOSE_RSP;
336 NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_CLOSE_RSP Error = %s\n",
337 _net_print_error(event_data.Error));
338 _net_client_callback(&event_data);
342 dbus_message_unref(reply);
343 dbus_pending_call_unref(call);
345 network_dbus_pending_call_data.is_used = FALSE;
346 network_dbus_pending_call_data.pcall = NULL;
348 __NETWORK_FUNC_EXIT__;
351 static void __net_wifi_power_reply(DBusPendingCall *call, void *user_data)
353 __NETWORK_FUNC_ENTER__;
355 DBusMessage *reply = dbus_pending_call_steal_reply(call);
356 net_err_t Error = _net_get_error_from_netconfig_message(reply);
358 if (Error == NET_ERR_NONE)
361 net_event_info_t event_data = {0,};
362 net_wifi_state_t wifi_state = WIFI_UNKNOWN;
364 NETWORK_LOG(NETWORK_ERROR,
365 "Error!!! Wifi Power on/off failed. Error code : [%d]\n", Error);
367 if (request_table[NETWORK_REQUEST_TYPE_WIFI_POWER].flag == TRUE) {
368 memset(&request_table[NETWORK_REQUEST_TYPE_WIFI_POWER],
369 0, sizeof(network_request_table_t));
371 event_data.Event = NET_EVENT_WIFI_POWER_RSP;
372 event_data.Error = Error;
373 event_data.Datalength = sizeof(net_wifi_state_t);
374 event_data.Data = &wifi_state;
375 NETWORK_LOG(NETWORK_LOW,
376 "Sending NET_EVENT_WIFI_POWER_RSP Error = %d\n", event_data.Error);
377 _net_client_callback(&event_data);
381 dbus_message_unref(reply);
382 dbus_pending_call_unref(call);
384 network_dbus_pending_call_data.is_used = FALSE;
385 network_dbus_pending_call_data.pcall = NULL;
387 __NETWORK_FUNC_EXIT__;
390 static int __net_append_argument(DBusMessageIter *iter, int ArgType, const char *Value)
392 __NETWORK_FUNC_ENTER__;
395 unsigned char ByteValue = 0;
396 dbus_bool_t booleanvalue = 0;
398 dbus_uint16_t Uint16 = 0;
399 dbus_int16_t Int16 = 0;
400 dbus_uint32_t Uint32 = 0;
401 dbus_int32_t Int32 = 0;
405 ByteValue = strtoul(Value, NULL, 0);
406 dbus_message_iter_append_basic(iter, DBUS_TYPE_BYTE, &ByteValue);
409 case DBUS_TYPE_DOUBLE:
410 Double = strtod(Value, NULL);
411 dbus_message_iter_append_basic(iter, DBUS_TYPE_DOUBLE, &Double);
414 case DBUS_TYPE_INT16:
415 Int16 = strtol(Value, NULL, 0);
416 dbus_message_iter_append_basic(iter, DBUS_TYPE_INT16, &Int16);
419 case DBUS_TYPE_UINT16:
420 Uint16 = strtoul(Value, NULL, 0);
421 dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16, &Uint16);
424 case DBUS_TYPE_INT32:
425 Int32 = strtol(Value, NULL, 0);
426 dbus_message_iter_append_basic(iter, DBUS_TYPE_INT32, &Int32);
429 case DBUS_TYPE_UINT32:
430 Uint32 = strtoul(Value, NULL, 0);
431 dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &Uint32);
434 case DBUS_TYPE_STRING:
435 dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &Value);
438 case DBUS_TYPE_OBJECT_PATH:
439 dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &Value);
442 case DBUS_TYPE_BOOLEAN:
443 if( strcmp (Value, "true") == 0 ) {
445 dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &booleanvalue);
446 } else if( strcmp (Value, "false") == 0 ) {
447 booleanvalue = FALSE;
448 dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &booleanvalue);
450 NETWORK_LOG(NETWORK_ERROR, "Error!!! Expected \"true\" or \"false\" instead of \"%s\"\n", Value);
451 __NETWORK_FUNC_EXIT__;
452 return NET_ERR_UNKNOWN;
457 NETWORK_LOG( NETWORK_ERROR, "Error!!! Unsupported data ArgType %c\n", (char) ArgType);
458 __NETWORK_FUNC_EXIT__;
459 return NET_ERR_UNKNOWN;
462 __NETWORK_FUNC_EXIT__;
466 static int __net_append_array(DBusMessageIter *iter, int ArgType, const char *Value)
468 __NETWORK_FUNC_ENTER__;
470 const char *Val = NULL;
471 char *saveptr = NULL;
472 char *DupValue = strdup(Value);
474 Val = strtok_r(DupValue, ",", &saveptr);
476 if( __net_append_argument(iter, ArgType, Val) != NET_ERR_NONE ) {
477 NET_MEMFREE(DupValue);
478 __NETWORK_FUNC_EXIT__;
479 return NET_ERR_UNKNOWN;
481 Val = strtok_r(NULL, ",", &saveptr);
483 NET_MEMFREE(DupValue);
485 __NETWORK_FUNC_EXIT__;
489 static int __net_append_dict(DBusMessageIter *iter, int KeyType, int ValueType, const char *Value)
491 __NETWORK_FUNC_ENTER__;
493 const char *Val = NULL;
494 char *saveptr = NULL;
495 char *DupValue = strdup(Value);
497 Val = strtok_r(DupValue, ",", &saveptr);
499 DBusMessageIter SubIter;
501 dbus_message_iter_open_container(iter,
502 DBUS_TYPE_DICT_ENTRY,
506 if( __net_append_argument (&SubIter, KeyType, Val) != NET_ERR_NONE ) {
507 NETWORK_LOG(NETWORK_ERROR, "Error!!! __net_append_argument() failed\n");
508 NET_MEMFREE(DupValue);
509 __NETWORK_FUNC_EXIT__;
510 return NET_ERR_UNKNOWN;
513 Val = strtok_r(NULL, ",", &saveptr);
515 NETWORK_LOG(NETWORK_ERROR, "Error!!! Crashed dictionary data\n");
516 NET_MEMFREE(DupValue);
517 __NETWORK_FUNC_EXIT__;
518 return NET_ERR_UNKNOWN;
521 if( __net_append_argument (&SubIter, ValueType, Val) != NET_ERR_NONE ) {
522 NETWORK_LOG(NETWORK_ERROR, "Error!!! __net_append_argument() failed\n");
523 NET_MEMFREE(DupValue);
524 __NETWORK_FUNC_EXIT__;
525 return NET_ERR_UNKNOWN;
528 dbus_message_iter_close_container (iter, &SubIter);
529 Val = strtok_r(NULL, ",", &saveptr);
531 NET_MEMFREE(DupValue);
532 __NETWORK_FUNC_EXIT__;
536 static int __net_datatype_from_stringname(const char *Args)
538 __NETWORK_FUNC_ENTER__;
542 if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_STRING) )
543 ArgType = DBUS_TYPE_STRING;
544 else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_INT16) )
545 ArgType = DBUS_TYPE_INT16;
546 else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_UINT16) )
547 ArgType = DBUS_TYPE_UINT16;
548 else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_INT32) )
549 ArgType = DBUS_TYPE_INT32;
550 else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_UINT32) )
551 ArgType = DBUS_TYPE_UINT32;
552 else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_INT64) )
553 ArgType = DBUS_TYPE_INT64;
554 else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_UINT64) )
555 ArgType = DBUS_TYPE_UINT64;
556 else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_DOUBLE) )
557 ArgType = DBUS_TYPE_DOUBLE;
558 else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_BYTE) )
559 ArgType = DBUS_TYPE_BYTE;
560 else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_BOOLEAN) )
561 ArgType = DBUS_TYPE_BOOLEAN;
562 else if( !strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_OBJECT_PATH) )
563 ArgType = DBUS_TYPE_OBJECT_PATH;
565 NETWORK_LOG( NETWORK_ERROR, "Error!!! Unknown Argument Type \"%s\"\n", Args);
566 __NETWORK_FUNC_EXIT__;
567 return NET_ERR_UNKNOWN;
570 __NETWORK_FUNC_EXIT__;
575 /*****************************************************************************
576 * Global Functions Definition
577 *****************************************************************************/
579 DBusMessage *_net_invoke_dbus_method(const char* dest, DBusConnection *connection,
580 const char* path, char* interface_name, char* method, int *dbus_error)
582 __NETWORK_FUNC_ENTER__;
585 DBusMessage *reply = NULL;
586 DBusMessage *message = NULL;
588 *dbus_error = NET_ERR_NONE;
590 message = dbus_message_new_method_call(dest, path, interface_name, method);
591 if (message == NULL) {
592 NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_message_new_method_call() failed\n");
593 __NETWORK_FUNC_EXIT__;
597 dbus_error_init(&error);
599 reply = dbus_connection_send_with_reply_and_block(connection,
600 message, DBUS_REPLY_TIMEOUT, &error);
602 if (dbus_error_is_set(&error) == TRUE) {
603 NETWORK_LOG(NETWORK_ERROR,
604 "Error!!! dbus_connection_send_with_reply_and_block() failed. dbus error [%s: %s]\n",
605 error.name, error.message);
606 *dbus_error = __net_error_string_to_enum(error.name);
607 dbus_error_free(&error);
609 NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_connection_send_with_reply_and_block() failed\n");
610 *dbus_error = NET_ERR_UNKNOWN;
613 dbus_message_unref(message);
614 __NETWORK_FUNC_EXIT__;
618 dbus_message_unref(message);
620 __NETWORK_FUNC_EXIT__;
624 int _net_invoke_dbus_method_nonblock(const char* dest, DBusConnection *connection,
625 const char* path, char* interface_name, char* method,
626 DBusPendingCallNotifyFunction notify_func)
628 __NETWORK_FUNC_ENTER__;
630 DBusMessage *message = NULL;
631 DBusPendingCall *call;
634 message = dbus_message_new_method_call(dest, path, interface_name, method);
635 if (message == NULL) {
636 NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_message_new_method_call() Failed\n");
637 __NETWORK_FUNC_EXIT__;
638 return NET_ERR_UNKNOWN;
641 result = dbus_connection_send_with_reply(connection,
642 message, &call, DBUS_REPLY_TIMEOUT);
644 if (result == FALSE || call == NULL) {
645 NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_connection_send_with_reply() Failed\n");
646 dbus_message_unref(message);
647 return NET_ERR_UNKNOWN;
650 dbus_pending_call_set_notify(call, notify_func, NULL, NULL);
651 network_dbus_pending_call_data.pcall = call;
652 network_dbus_pending_call_data.is_used = TRUE;
654 dbus_message_unref(message);
656 __NETWORK_FUNC_EXIT__;
661 int _net_send_dbus_request(const char* destination, char *param_array[], DBusMessage** result)
663 __NETWORK_FUNC_ENTER__;
665 DBusConnection *connection = NULL;
667 DBusMessage *message = NULL;
668 net_err_t Error = NET_ERR_NONE;
669 char *RequestMethod = NULL;
671 const char *path = NULL;
672 const char *name = NULL;
674 // const char *destination = CONNMAN_SERVICE;
675 DBusMessageIter iter;
677 for (param_count = 0; param_array[param_count] != NULL; param_count++) {
678 NETWORK_LOG(NETWORK_HIGH, "[%s]\n", param_array[param_count]);
680 NETWORK_LOG(NETWORK_HIGH, "Total Arguments [%d]\n", param_count);
682 path = param_array[i++]; /** 0th is path */
683 name = param_array[i++]; /** 1st is request name */
685 if ((strlen(path) == 0) || (strlen(name) == 0) ) {
686 NETWORK_LOG(NETWORK_ASSERT, "Error!!! Invalid parameters passed path [%s], requested name [%s]\n",
688 __NETWORK_FUNC_EXIT__;
689 return NET_ERR_INVALID_PARAM;
692 dbus_error_init(&error);
694 connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
695 if (connection == NULL) {
696 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Failed to get system dbus, error [%s]\n",
698 dbus_error_free(&error);
699 __NETWORK_FUNC_EXIT__;
700 return NET_ERR_UNKNOWN;
703 RequestMethod = strrchr(name, '.');
704 if (RequestMethod == NULL) {
705 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid method in \"%s\"\n", name);
706 dbus_connection_unref(connection);
707 __NETWORK_FUNC_EXIT__;
708 return NET_ERR_UNKNOWN;
711 *RequestMethod = '\0';
712 message = dbus_message_new_method_call(NULL, path, name, RequestMethod + 1);
714 if (message == NULL) {
715 NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_message_new_method_call() failed\n");
716 __NETWORK_FUNC_EXIT__;
717 Error = NET_ERR_UNKNOWN;
721 if (destination && !dbus_message_set_destination(message, destination)) {
722 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! dbus_message_set_destination() failed\n");
723 __NETWORK_FUNC_EXIT__;
724 Error = NET_ERR_UNKNOWN;
728 dbus_message_iter_init_append(message, &iter);
730 /** Two arguments name and path already extracted, so i == 2 */
731 while (i < param_count) {
735 int SecondaryType = 0;
736 int ContainerType = 0;
737 DBusMessageIter *TargetIter = NULL;
738 DBusMessageIter ContainerIter;
740 ArgType = DBUS_TYPE_INVALID;
741 Args = param_array[i++];
742 Ch = strchr (Args, ':');
745 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid data format[\"%s\"]\n", Args);
746 Error = NET_ERR_UNKNOWN;
752 if (strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_VARIANT) == 0) {
753 ContainerType = DBUS_TYPE_VARIANT;
754 } else if (strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_ARRAY) == 0) {
755 ContainerType = DBUS_TYPE_ARRAY;
756 } else if (strcmp(Args, CONNMAN_CLIENT_DBUS_TYPE_DICT_ENTRY) == 0) {
757 ContainerType = DBUS_TYPE_DICT_ENTRY;
759 ContainerType = DBUS_TYPE_INVALID;
762 if (ContainerType != DBUS_TYPE_INVALID) {
764 Ch = strchr(Args, ':');
766 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid data format[\"%s\"]\n", Args);
767 Error = NET_ERR_UNKNOWN;
774 ArgType = DBUS_TYPE_STRING;
776 ArgType = __net_datatype_from_stringname(Args);
777 if (ArgType == NET_ERR_UNKNOWN) {
778 NETWORK_LOG(NETWORK_ERROR, "Error!!! Unknown data type\n");
779 Error = NET_ERR_UNKNOWN;
784 if (ContainerType == DBUS_TYPE_DICT_ENTRY) {
785 char Signature[5] = "";
787 Ch = strchr (Ch, ':');
790 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid data format[\"%s\"]\n", Args);
791 Error = NET_ERR_UNKNOWN;
796 SecondaryType = __net_datatype_from_stringname(Args);
798 if (SecondaryType == NET_ERR_UNKNOWN) {
799 NETWORK_LOG(NETWORK_ERROR, "Error!!! Unknown datatype\n");
800 Error = NET_ERR_UNKNOWN;
804 Signature[0] = DBUS_DICT_ENTRY_BEGIN_CHAR;
805 Signature[1] = ArgType;
806 Signature[2] = SecondaryType;
807 Signature[3] = DBUS_DICT_ENTRY_END_CHAR;
810 dbus_message_iter_open_container(&iter,
814 TargetIter = &ContainerIter;
815 } else if (ContainerType != DBUS_TYPE_INVALID) {
816 char Signature[2] = "";
817 Signature[0] = ArgType;
820 dbus_message_iter_open_container(&iter,
824 TargetIter = &ContainerIter;
829 if (ContainerType == DBUS_TYPE_ARRAY) {
830 if (__net_append_array(TargetIter, ArgType, Ch) != NET_ERR_NONE) {
831 NETWORK_LOG(NETWORK_ERROR, "Error!!! __net_append_array() failed\n");
832 Error = NET_ERR_UNKNOWN;
835 } else if (ContainerType == DBUS_TYPE_DICT_ENTRY) {
836 if (__net_append_dict(TargetIter, ArgType, SecondaryType, Ch) != NET_ERR_NONE) {
837 NETWORK_LOG(NETWORK_ERROR, "Error!!! __net_append_dict() failed\n");
838 Error = NET_ERR_UNKNOWN;
842 if (__net_append_argument(TargetIter, ArgType, Ch) != NET_ERR_NONE) {
843 NETWORK_LOG(NETWORK_ERROR, "Error!!! __net_append_argument() failed\n");
844 Error = NET_ERR_UNKNOWN;
849 if (ContainerType != DBUS_TYPE_INVALID) {
850 dbus_message_iter_close_container(&iter, &ContainerIter);
854 DBusMessage *reply = NULL;
856 dbus_error_init (&error);
858 reply = dbus_connection_send_with_reply_and_block(connection,
863 if (dbus_error_is_set(&error) == TRUE) {
864 NETWORK_LOG(NETWORK_ERROR,
865 "Error!!! dbus_connection_send_with_reply_and_block() failed, Error[%s: %s]\n",
868 Error = __net_error_string_to_enum(error.name);
869 dbus_error_free(&error);
871 Error = NET_ERR_UNKNOWN;
875 if (result != NULL) {
878 dbus_message_unref(reply);
883 dbus_message_unref(message);
884 dbus_connection_unref(connection);
886 if (Error == NET_ERR_NONE)
887 NETWORK_LOG(NETWORK_HIGH, "Successfully requested\n");
889 __NETWORK_FUNC_EXIT__;
894 int _net_dbus_open_connection(const char* profile_name)
896 __NETWORK_FUNC_ENTER__;
898 net_err_t Error = NET_ERR_NONE;
899 DBusConnection* conn = NULL;
901 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
904 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
905 __NETWORK_FUNC_EXIT__;
906 return NET_ERR_UNKNOWN;
909 NETWORK_LOG(NETWORK_HIGH, "Requesting [%s %s]\n",
910 profile_name, CONNMAN_SERVICE_INTERFACE ".Connect");
912 Error = _net_invoke_dbus_method_nonblock(CONNMAN_SERVICE, conn, profile_name,
913 CONNMAN_SERVICE_INTERFACE, "Connect", __net_open_connection_reply);
915 dbus_connection_unref(conn);
917 __NETWORK_FUNC_EXIT__;
922 int _net_dbus_close_connection(const char* profile_name)
924 __NETWORK_FUNC_ENTER__;
926 net_err_t Error = NET_ERR_NONE;
927 DBusConnection* conn = NULL;
929 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
932 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
933 __NETWORK_FUNC_EXIT__;
934 return NET_ERR_UNKNOWN;
937 NETWORK_LOG(NETWORK_HIGH, "Requesting [%s %s]\n",
938 profile_name, CONNMAN_SERVICE_INTERFACE ".Disconnect");
940 Error = _net_invoke_dbus_method_nonblock(CONNMAN_SERVICE, conn, profile_name,
941 CONNMAN_SERVICE_INTERFACE, "Disconnect", __net_close_connection_reply);
943 dbus_connection_unref(conn);
945 __NETWORK_FUNC_EXIT__;
950 int _net_dbus_scan_request(void)
952 __NETWORK_FUNC_ENTER__;
954 net_err_t Error = NET_ERR_NONE;
956 /** dbus-send --system --print-reply --dest=net.connman / net.connman.Manager.RequestScan string:wifi */
957 char request[] = CONNMAN_MANAGER_INTERFACE ".RequestScan";
958 char param1[] = "string:wifi";
959 char path[CONNMAN_MAX_BUFLEN] = "/";
960 char* param_array[] = {NULL, NULL, NULL, NULL};
961 param_array[0] = path;
962 param_array[1] = request;
963 param_array[2] = param1;
965 NETWORK_LOG(NETWORK_HIGH, "path [%s]\n", path);
966 NETWORK_LOG(NETWORK_HIGH, "Requesting [%s %s %s]\n", param_array[0], param_array[1], param_array[2]);
968 if( (Error = _net_send_dbus_request(CONNMAN_SERVICE, param_array, NULL)) != NET_ERR_NONE ) {
969 NETWORK_LOG(NETWORK_ERROR, "Error!!! _net_send_dbus_request failed\n");
970 __NETWORK_FUNC_EXIT__;
974 __NETWORK_FUNC_EXIT__;
978 int _net_dbus_provision_service(gchar * config_str, int len)
980 __NETWORK_FUNC_ENTER__;
982 net_err_t Error = NET_ERR_NONE;
984 /** dbus-send --system --print-reply --dest=net.connman / net.connman.Manager.ProvisionService string:xxx..*/
985 char request[] = CONNMAN_MANAGER_INTERFACE ".ProvisionService";
987 int param1_len = len + strlen("string:");
988 char path[CONNMAN_MAX_BUFLEN] = "/";
989 char* param_array[] = {NULL, NULL, NULL, NULL};
991 param1 = (char*)calloc(param1_len, sizeof(char));
993 return NET_ERR_UNKNOWN;
995 snprintf(param1, param1_len, "string:%s", config_str);
997 param_array[0] = path;
998 param_array[1] = request;
999 param_array[2] = param1;
1001 if( (Error = _net_send_dbus_request(CONNMAN_SERVICE, param_array, NULL)) != NET_ERR_NONE ) {
1002 NETWORK_LOG(NETWORK_ERROR, "Error!!! _net_send_dbus_request failed\n");
1003 NET_MEMFREE(param1);
1004 __NETWORK_FUNC_EXIT__;
1008 NET_MEMFREE(param1);
1009 __NETWORK_FUNC_EXIT__;
1010 return NET_ERR_NONE;
1014 int _net_dbus_set_bgscan_mode(net_wifi_background_scan_mode_t mode)
1016 __NETWORK_FUNC_ENTER__;
1018 /** TODO device interface missing */
1020 net_err_t Error = NET_ERR_NONE;
1021 /** dbus-send --system --print-reply --dest=net.connman / net.connman.Manager.SetProperty string:ScanMode variant:uint16:0/1/2 */
1022 char request[] = NETCONFIG_WIFI_INTERFACE ".SetBgscan";
1023 char param1[64] = "";
1024 char path[CONNMAN_MAX_BUFLEN] = NETCONFIG_WIFI_PATH;
1025 char* param_array[] = {NULL, NULL, NULL, NULL};
1027 NETWORK_LOG(NETWORK_HIGH, "path [%s]\n", path);
1029 snprintf(param1, 64, "uint32:%d", mode);
1031 param_array[0] = path;
1032 param_array[1] = request;
1033 param_array[2] = param1;
1035 NETWORK_LOG(NETWORK_HIGH, "Requesting [%s %s %s]\n",
1041 Error = _net_send_dbus_request(NETCONFIG_SERVICE, param_array, NULL);
1042 if (Error != NET_ERR_NONE) {
1043 NETWORK_LOG(NETWORK_ERROR, "Error!!! Request failed\n");
1044 __NETWORK_FUNC_EXIT__;
1048 __NETWORK_FUNC_EXIT__;
1049 return NET_ERR_NONE;
1052 int _net_dbus_get_technology_state(network_get_tech_state_info_t* tech_state)
1054 __NETWORK_FUNC_ENTER__;
1056 net_err_t Error = NET_ERR_NONE;
1057 DBusConnection* conn = NULL;
1058 DBusMessage *message = NULL;
1060 if ((tech_state == NULL) || (strlen(tech_state->technology) == 0)) {
1061 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Invalid parameter\n");
1062 __NETWORK_FUNC_EXIT__;
1063 return NET_ERR_INVALID_PARAM;
1066 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
1068 NETWORK_LOG(NETWORK_EXCEPTION,
1069 "Error!!! Can't get on system bus\n");
1070 __NETWORK_FUNC_EXIT__;
1071 return NET_ERR_UNKNOWN;
1074 if (strcmp(tech_state->technology, "wifi") == 0) {
1075 int hotspot_state = 0;
1076 vconf_get_int(VCONFKEY_MOBILE_HOTSPOT_MODE, &hotspot_state);
1078 if (hotspot_state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI)
1082 message = _net_invoke_dbus_method(CONNMAN_SERVICE, conn, CONNMAN_MANAGER_PATH,
1083 CONNMAN_MANAGER_INTERFACE, "GetProperties", &Error);
1085 if (message == NULL) {
1086 NETWORK_LOG(NETWORK_ERROR,
1087 "Error!!! Failed to get technology info\n");
1091 Error = _net_get_tech_state(message, tech_state);
1093 NETWORK_LOG(NETWORK_HIGH,
1095 "AvailableTechnology [%d]\n"
1096 "EnabledTechnology [%d]\n"
1097 "ConnectedTechnology [%d]\n"
1098 "DefaultTechnology [%d]\n",
1099 tech_state->technology,
1100 tech_state->AvailableTechnology,
1101 tech_state->EnabledTechnology,
1102 tech_state->ConnectedTechnology,
1103 tech_state->DefaultTechnology);
1105 dbus_message_unref(message);
1108 dbus_connection_unref(conn);
1109 __NETWORK_FUNC_EXIT__;
1114 int _net_dbus_get_network_status(net_device_t device_type, net_cm_network_status_t* network_status)
1116 __NETWORK_FUNC_ENTER__;
1118 net_err_t Error = NET_ERR_NONE;
1119 network_get_tech_state_info_t tech_state = {{0,},};
1121 if (device_type == NET_DEVICE_WIFI)
1122 snprintf(tech_state.technology, NET_TECH_LENGTH_MAX, "%s", "wifi");
1123 else if (device_type == NET_DEVICE_CELLULAR)
1124 snprintf(tech_state.technology, NET_TECH_LENGTH_MAX, "%s", "cellular");
1126 Error = NET_ERR_INVALID_PARAM;
1130 Error = _net_dbus_get_technology_state(&tech_state);
1131 if (Error != NET_ERR_NONE) {
1132 NETWORK_LOG(NETWORK_ERROR,
1133 "Error!!! _net_dbus_get_technology_state() failed. Error [%s]\n",
1134 _net_print_error(Error));
1138 if (tech_state.ConnectedTechnology == TRUE)
1139 *network_status = NET_STATUS_AVAILABLE;
1141 *network_status = NET_STATUS_UNAVAILABLE;
1144 __NETWORK_FUNC_EXIT__;
1149 int _net_dbus_get_state(char* state)
1151 __NETWORK_FUNC_ENTER__;
1153 net_err_t Error = NET_ERR_NONE;
1154 DBusConnection* conn = NULL;
1155 DBusMessage *message = NULL;
1156 char *net_state = NULL;
1158 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
1160 NETWORK_LOG(NETWORK_EXCEPTION,
1161 "Error!!! Can't get on system bus\n");
1162 __NETWORK_FUNC_EXIT__;
1163 return NET_ERR_UNKNOWN;
1166 message = _net_invoke_dbus_method(
1167 CONNMAN_SERVICE, conn, CONNMAN_MANAGER_PATH,
1168 CONNMAN_MANAGER_INTERFACE, "GetState", &Error);
1169 if (message == NULL) {
1170 NETWORK_LOG(NETWORK_ERROR,
1171 "Error!!! Failed to get service properties\n");
1172 dbus_connection_unref(conn);
1173 __NETWORK_FUNC_EXIT__;
1177 net_state = _net_get_string(message);
1178 snprintf(state, strlen(net_state)+1, "%s", net_state);
1180 NETWORK_LOG( NETWORK_HIGH, "State : [%s]\n", state);
1182 dbus_message_unref(message);
1183 dbus_connection_unref(conn);
1185 __NETWORK_FUNC_EXIT__;
1190 int _net_dbus_connect_service(const net_wifi_connect_service_info_t* wifi_connection_info)
1192 __NETWORK_FUNC_ENTER__;
1194 net_err_t Error = NET_ERR_NONE;
1197 const char *prop_type = "Type";
1198 const char *prop_mode = "Mode";
1199 const char *prop_ssid = "SSID";
1200 const char *prop_security = "Security";
1201 const char *prop_passphrase = "Passphrase";
1203 DBusMessage* msg = NULL;
1204 DBusMessage* reply = NULL;
1205 DBusMessageIter dict, entry, array,value;
1206 DBusConnection* conn = NULL;
1208 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
1210 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
1211 __NETWORK_FUNC_EXIT__;
1212 return NET_ERR_UNKNOWN;
1215 msg = dbus_message_new_method_call(CONNMAN_SERVICE, CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE, "ConnectService");
1217 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! dbus_message_new_method_call() failed\n");
1218 __NETWORK_FUNC_EXIT__;
1219 return NET_ERR_UNKNOWN;
1222 dbus_message_iter_init_append(msg, &array);
1223 dbus_message_iter_open_container(&array, DBUS_TYPE_ARRAY, "{sv}", &dict);
1225 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
1226 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_type);
1227 dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
1228 dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->type);
1229 dbus_message_iter_close_container(&entry, &value);
1230 dbus_message_iter_close_container(&dict, &entry);
1232 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
1233 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_mode);
1234 dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
1235 dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->mode);
1236 dbus_message_iter_close_container(&entry, &value);
1237 dbus_message_iter_close_container(&dict, &entry);
1239 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
1240 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_ssid);
1241 dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
1242 dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->ssid);
1243 dbus_message_iter_close_container(&entry, &value);
1244 dbus_message_iter_close_container(&dict, &entry);
1246 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
1247 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_security);
1248 dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
1249 dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->security);
1250 dbus_message_iter_close_container(&entry, &value);
1251 dbus_message_iter_close_container(&dict, &entry);
1253 if( strcmp(wifi_connection_info->security, "ieee8021x") == 0 ) {
1254 /** TODO Handle EAP */
1256 /** none, wep, psk, rsn */
1257 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, 0, &entry);
1258 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_passphrase);
1259 dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value);
1260 dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &wifi_connection_info->passphrase);
1261 dbus_message_iter_close_container(&entry, &value);
1262 dbus_message_iter_close_container(&dict, &entry);
1265 dbus_message_iter_close_container(&array, &dict);
1267 dbus_error_init(&error);
1268 reply = dbus_connection_send_with_reply_and_block(conn,
1270 6 * DBUS_REPLY_TIMEOUT, /** Special case - here profile is created and returned so this need more time */
1274 if( dbus_error_is_set(&error) == TRUE ) {
1275 NETWORK_LOG(NETWORK_ERROR,
1276 "Error!!! dbus_connection_send_with_reply_and_block() failed, Error[%s: %s]\n",
1279 Error = __net_error_string_to_enum(error.name);
1280 dbus_error_free(&error);
1281 dbus_message_unref(msg);
1282 __NETWORK_FUNC_EXIT__;
1285 dbus_message_unref(msg);
1286 __NETWORK_FUNC_EXIT__;
1287 return NET_ERR_UNKNOWN;
1289 char *ProfileName = NULL;
1290 ProfileName = _net_get_object(reply);
1291 NETWORK_LOG(NETWORK_HIGH, "ObjectPath/ProfileName [%s]\n", ProfileName);
1294 dbus_message_unref(reply);
1295 dbus_message_unref(msg);
1297 NETWORK_LOG(NETWORK_HIGH, "Successfully configured\n");
1299 dbus_connection_unref(conn);
1300 __NETWORK_FUNC_EXIT__;
1305 int _net_dbus_set_profile_ipv4(net_profile_info_t* prof_info, char* profile_name)
1307 __NETWORK_FUNC_ENTER__;
1309 net_err_t Error = NET_ERR_NONE;
1311 const char *manual_method = "manual";
1312 const char *dhcp_method = "dhcp";
1313 const char *off_method = "off";
1315 const char *prop_ipv4_configuration = "IPv4.Configuration";
1316 const char *prop_method = "Method";
1317 const char *prop_address = "Address";
1318 const char *prop_gateway = "Gateway";
1319 const char *prop_netmask = "Netmask";
1321 char ip_buffer[NETPM_IPV4_STR_LEN_MAX+1] = "";
1322 char netmask_buffer[NETPM_IPV4_STR_LEN_MAX+1] = "";
1323 char gateway_buffer[NETPM_IPV4_STR_LEN_MAX+1] = "";
1325 char *ipaddress = ip_buffer;
1326 char *netmask = netmask_buffer;
1327 char *gateway = gateway_buffer;
1329 DBusMessage *msg = NULL;
1330 DBusMessage *reply = NULL;
1331 DBusMessageIter itr, variant, dict, entry;
1332 DBusConnection* conn = NULL;
1334 if ((prof_info == NULL) || (profile_name == NULL) || (strlen(profile_name) == 0)) {
1335 NETWORK_LOG(NETWORK_ASSERT, "Error!!! Invalid argument\n");
1336 __NETWORK_FUNC_EXIT__;
1337 return NET_ERR_INVALID_PARAM;
1340 snprintf(ip_buffer, NETPM_IPV4_STR_LEN_MAX + 1, "%s",
1341 inet_ntoa(prof_info->ProfileInfo.Wlan.net_info.IpAddr.Data.Ipv4));
1342 snprintf(netmask_buffer, NETPM_IPV4_STR_LEN_MAX + 1, "%s",
1343 inet_ntoa(prof_info->ProfileInfo.Wlan.net_info.SubnetMask.Data.Ipv4));
1344 snprintf(gateway_buffer, NETPM_IPV4_STR_LEN_MAX + 1, "%s",
1345 inet_ntoa(prof_info->ProfileInfo.Wlan.net_info.GatewayAddr.Data.Ipv4));
1347 NETWORK_LOG(NETWORK_ASSERT, "ipaddress : %s, netmask : %s, gateway : %s\n",
1348 ipaddress, netmask, gateway);
1350 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
1352 NETWORK_LOG(NETWORK_ERROR, "Error!!! Can't get on system bus\n");
1353 __NETWORK_FUNC_EXIT__;
1354 return NET_ERR_UNKNOWN;
1357 /** Send ipaddress, netmask, gateway configuration */
1358 msg = dbus_message_new_method_call(CONNMAN_SERVICE,
1359 profile_name, CONNMAN_SERVICE_INTERFACE, "SetProperty");
1361 NETWORK_LOG( NETWORK_ERROR, "Error!!! dbus_message_new_method_call() failed\n");
1362 dbus_connection_unref(conn);
1363 __NETWORK_FUNC_EXIT__;
1364 return NET_ERR_UNKNOWN;
1366 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 1/2 : %s %s %s %s\n", CONNMAN_SERVICE,
1367 profile_name, CONNMAN_SERVICE_INTERFACE, "SetProperty");
1369 dbus_message_iter_init_append(msg, &itr);
1370 dbus_message_iter_append_basic(&itr, DBUS_TYPE_STRING, &prop_ipv4_configuration);
1372 dbus_message_iter_open_container
1373 (&itr, DBUS_TYPE_VARIANT,
1374 (DBUS_TYPE_ARRAY_AS_STRING
1375 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
1376 DBUS_TYPE_STRING_AS_STRING
1377 DBUS_TYPE_STRING_AS_STRING
1378 DBUS_DICT_ENTRY_END_CHAR_AS_STRING),
1380 dbus_message_iter_open_container
1381 (&variant, DBUS_TYPE_ARRAY,
1382 (DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
1383 DBUS_TYPE_STRING_AS_STRING
1384 DBUS_TYPE_STRING_AS_STRING
1385 DBUS_DICT_ENTRY_END_CHAR_AS_STRING),
1388 if (prof_info->ProfileInfo.Wlan.net_info.IpConfigType == NET_IP_CONFIG_TYPE_DYNAMIC ||
1389 prof_info->ProfileInfo.Wlan.net_info.IpConfigType == NET_IP_CONFIG_TYPE_AUTO_IP) {
1390 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1391 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_method);
1392 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &dhcp_method);
1393 dbus_message_iter_close_container(&dict, &entry);
1394 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s %s\n", prop_method, dhcp_method);
1395 } else if (prof_info->ProfileInfo.Wlan.net_info.IpConfigType == NET_IP_CONFIG_TYPE_OFF) {
1396 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1397 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_method);
1398 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &off_method);
1399 dbus_message_iter_close_container(&dict, &entry);
1400 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s %s\n", prop_method, off_method);
1401 } else if (prof_info->ProfileInfo.Wlan.net_info.IpConfigType == NET_IP_CONFIG_TYPE_STATIC) {
1402 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1403 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_method);
1404 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &manual_method);
1405 dbus_message_iter_close_container(&dict, &entry);
1407 if (strlen(ipaddress) >= NETPM_IPV4_STR_LEN_MIN) {
1408 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1409 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_address);
1410 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &ipaddress);
1411 dbus_message_iter_close_container(&dict, &entry);
1414 if (strlen(netmask) >= NETPM_IPV4_STR_LEN_MIN) {
1415 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1416 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_netmask);
1417 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &netmask);
1418 dbus_message_iter_close_container(&dict, &entry);
1421 if (strlen(gateway) >= NETPM_IPV4_STR_LEN_MIN) {
1422 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1423 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_gateway);
1424 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &gateway);
1425 dbus_message_iter_close_container(&dict, &entry);
1427 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s %s %s %s %s %s %s %s\n",
1428 prop_method, manual_method, prop_address, ipaddress,
1429 prop_netmask, netmask, prop_gateway, gateway);
1431 NETWORK_LOG(NETWORK_ASSERT, "Error!!! Invalid argument\n");
1432 __NETWORK_FUNC_EXIT__;
1433 return NET_ERR_INVALID_PARAM;
1436 dbus_message_iter_close_container(&variant, &dict);
1437 dbus_message_iter_close_container(&itr, &variant);
1439 dbus_error_init(&error);
1441 reply = dbus_connection_send_with_reply_and_block(conn,
1442 msg, DBUS_REPLY_TIMEOUT,
1445 if (reply == NULL) {
1446 if (dbus_error_is_set (&error) == TRUE) {
1447 NETWORK_LOG(NETWORK_ERROR,
1448 "Error!!! dbus_connection_send_with_reply_and_block() failed, Error[%s: %s]\n",
1451 Error = __net_error_string_to_enum(error.name);
1452 dbus_error_free(&error);
1453 dbus_message_unref(msg);
1454 __NETWORK_FUNC_EXIT__;
1458 dbus_message_unref(msg);
1459 __NETWORK_FUNC_EXIT__;
1460 return NET_ERR_UNKNOWN;
1463 dbus_message_unref(reply);
1464 dbus_message_unref(msg);
1466 NETWORK_LOG(NETWORK_HIGH, "Successfully configured IPv4.Configuration\n");
1468 dbus_connection_unref(conn);
1470 __NETWORK_FUNC_EXIT__;
1471 return NET_ERR_NONE;
1474 int _net_dbus_set_profile_dns(net_profile_info_t* prof_info, char* profile_name)
1476 __NETWORK_FUNC_ENTER__;
1478 net_err_t Error = NET_ERR_NONE;
1481 const char *prop_nameserver_configuration = "Nameservers.Configuration";
1482 char dns_buffer[NET_DNS_ADDR_MAX][NETPM_IPV4_STR_LEN_MAX+1];
1483 char *dns_address[NET_DNS_ADDR_MAX];
1485 DBusMessage *msg = NULL;
1486 DBusMessage *reply = NULL;
1487 DBusMessageIter itr;
1488 DBusConnection* conn = NULL;
1491 if ((prof_info == NULL) || (profile_name == NULL) || (strlen(profile_name) == 0) ||
1492 (prof_info->ProfileInfo.Wlan.net_info.DnsCount > NET_DNS_ADDR_MAX)) {
1493 NETWORK_LOG(NETWORK_ASSERT, "Error!!! Invalid parameter\n");
1494 __NETWORK_FUNC_EXIT__;
1495 return NET_ERR_INVALID_PARAM;
1498 for (i = 0;i < prof_info->ProfileInfo.Wlan.net_info.DnsCount;i++) {
1499 dns_buffer[i][0] = '\0';
1500 dns_address[i] = NULL;
1502 snprintf(dns_buffer[i], NETPM_IPV4_STR_LEN_MAX + 1, "%s",
1503 inet_ntoa(prof_info->ProfileInfo.Wlan.net_info.DnsAddr[i].Data.Ipv4));
1504 if (strlen(dns_buffer[i]) >= NETPM_IPV4_STR_LEN_MIN)
1505 dns_address[i] = dns_buffer[i];
1508 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
1510 NETWORK_LOG(NETWORK_ERROR, "Error!!! Can't get on system bus\n");
1511 __NETWORK_FUNC_EXIT__;
1512 return NET_ERR_UNKNOWN;
1515 if (prof_info->ProfileInfo.Wlan.net_info.IpConfigType == NET_IP_CONFIG_TYPE_STATIC) {
1516 msg = dbus_message_new_method_call(CONNMAN_SERVICE,
1517 profile_name, CONNMAN_SERVICE_INTERFACE, "SetProperty");
1520 NETWORK_LOG(NETWORK_ERROR,
1521 "Error!!! dbus_message_new_method_call() failed\n");
1522 __NETWORK_FUNC_EXIT__;
1523 return NET_ERR_UNKNOWN;
1526 dbus_message_iter_init_append(msg, &itr);
1527 dbus_message_iter_append_basic(&itr, DBUS_TYPE_STRING, &prop_nameserver_configuration);
1529 DBusMessageIter value, array;
1530 dbus_message_iter_open_container(&itr, DBUS_TYPE_VARIANT,
1531 DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING, &value);
1533 dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY,
1534 DBUS_TYPE_STRING_AS_STRING, &array);
1536 for (i = 0;i < prof_info->ProfileInfo.Wlan.net_info.DnsCount;i++) {
1537 dbus_message_iter_append_basic(&array, DBUS_TYPE_STRING, &(dns_address[i]));
1540 dbus_message_iter_close_container(&value, &array);
1541 dbus_message_iter_close_container(&itr, &value);
1543 dbus_error_init(&error);
1545 reply = dbus_connection_send_with_reply_and_block(conn,
1546 msg, DBUS_REPLY_TIMEOUT,
1549 if (reply == NULL) {
1550 if (dbus_error_is_set (&error) == TRUE) {
1551 NETWORK_LOG(NETWORK_ERROR,
1552 "Error!!! dbus_connection_send_with_reply_and_block() failed, Error[%s: %s]\n",
1555 Error = __net_error_string_to_enum(error.name);
1556 dbus_error_free(&error);
1557 dbus_message_unref(msg);
1558 __NETWORK_FUNC_EXIT__;
1561 dbus_message_unref(msg);
1562 __NETWORK_FUNC_EXIT__;
1563 return NET_ERR_UNKNOWN;
1565 dbus_message_unref(reply);
1566 dbus_message_unref(msg);
1567 NETWORK_LOG(NETWORK_HIGH, "Successfully configured Nameservers.Configuration\n");
1570 __NETWORK_FUNC_EXIT__;
1571 return NET_ERR_NONE;
1574 int _net_dbus_set_proxy(net_profile_info_t* prof_info, char* profile_name)
1576 __NETWORK_FUNC_ENTER__;
1578 net_err_t Error = NET_ERR_NONE;
1581 const char *direct_method = "direct"; /* not method[] as gcc screws it with dbus */
1582 const char *auto_method = "auto"; /* not method[] as gcc screws it with dbus */
1583 const char *manual_method = "manual"; /* not method[] as gcc screws it with dbus */
1585 const char *prop_proxy_configuration = "Proxy.Configuration";
1586 const char *prop_method = "Method";
1587 const char *prop_url = "URL";
1588 const char *prop_servers = "Servers";
1590 char proxy_buffer[NET_PROXY_LEN_MAX+1] = "";
1591 char *proxy_address = proxy_buffer;
1593 DBusMessage *msg = NULL;
1594 DBusMessage *reply = NULL;
1595 DBusMessageIter itr, variant, dict, entry, sub_variant, str_array;
1596 DBusConnection* conn = NULL;
1598 snprintf(proxy_buffer, NET_PROXY_LEN_MAX + 1, "%s", prof_info->ProfileInfo.Wlan.net_info.ProxyAddr);
1600 NETWORK_LOG(NETWORK_ASSERT, "Method : %d, proxy address : %s\n",
1601 prof_info->ProfileInfo.Wlan.net_info.ProxyMethod, proxy_address);
1603 if ((prof_info == NULL) || (profile_name == NULL) || (strlen(profile_name) == 0)) {
1604 NETWORK_LOG(NETWORK_ASSERT, "Error!!! Invalid argument\n");
1605 __NETWORK_FUNC_EXIT__;
1606 return NET_ERR_INVALID_PARAM;
1609 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
1611 NETWORK_LOG(NETWORK_ERROR, "Error!!! Can't get on system bus\n");
1612 __NETWORK_FUNC_EXIT__;
1613 return NET_ERR_UNKNOWN;
1616 /** Send proxy method, url, servers configuration */
1617 msg = dbus_message_new_method_call(CONNMAN_SERVICE, profile_name,
1618 CONNMAN_SERVICE_INTERFACE, "SetProperty");
1620 NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_message_new_method_call() failed\n");
1621 __NETWORK_FUNC_EXIT__;
1622 return NET_ERR_UNKNOWN;
1625 dbus_message_iter_init_append(msg, &itr);
1626 dbus_message_iter_append_basic(&itr, DBUS_TYPE_STRING, &prop_proxy_configuration);
1628 dbus_message_iter_open_container
1629 (&itr, DBUS_TYPE_VARIANT,
1630 (DBUS_TYPE_ARRAY_AS_STRING
1631 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
1632 DBUS_TYPE_STRING_AS_STRING
1633 DBUS_TYPE_VARIANT_AS_STRING
1634 DBUS_DICT_ENTRY_END_CHAR_AS_STRING),
1636 dbus_message_iter_open_container
1637 (&variant, DBUS_TYPE_ARRAY,
1638 (DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
1639 DBUS_TYPE_STRING_AS_STRING
1640 DBUS_TYPE_VARIANT_AS_STRING
1641 DBUS_DICT_ENTRY_END_CHAR_AS_STRING),
1644 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1645 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_method);
1647 dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT,
1648 DBUS_TYPE_STRING_AS_STRING, &sub_variant);
1650 switch (prof_info->ProfileInfo.Wlan.net_info.ProxyMethod) {
1651 case NET_PROXY_TYPE_AUTO:
1652 dbus_message_iter_append_basic(&sub_variant, DBUS_TYPE_STRING, &auto_method);
1654 case NET_PROXY_TYPE_MANUAL:
1655 dbus_message_iter_append_basic(&sub_variant, DBUS_TYPE_STRING, &manual_method);
1658 dbus_message_iter_append_basic(&sub_variant, DBUS_TYPE_STRING, &direct_method);
1662 dbus_message_iter_close_container(&entry, &sub_variant);
1663 dbus_message_iter_close_container(&dict, &entry);
1665 if (prof_info->ProfileInfo.Wlan.net_info.ProxyMethod == NET_PROXY_TYPE_AUTO) {
1666 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1667 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_url);
1669 dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT,
1670 DBUS_TYPE_STRING_AS_STRING, &sub_variant);
1671 dbus_message_iter_append_basic(&sub_variant, DBUS_TYPE_STRING, &proxy_address);
1673 dbus_message_iter_close_container(&entry, &sub_variant);
1674 dbus_message_iter_close_container(&dict, &entry);
1677 if (prof_info->ProfileInfo.Wlan.net_info.ProxyMethod == NET_PROXY_TYPE_MANUAL) {
1678 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1679 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &prop_servers);
1681 dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT,
1682 DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING, &sub_variant);
1684 dbus_message_iter_open_container(&sub_variant, DBUS_TYPE_ARRAY,
1685 DBUS_TYPE_STRING_AS_STRING, &str_array);
1686 dbus_message_iter_append_basic(&str_array, DBUS_TYPE_STRING, &proxy_address);
1688 dbus_message_iter_close_container(&sub_variant, &str_array);
1689 dbus_message_iter_close_container(&entry, &sub_variant);
1690 dbus_message_iter_close_container(&dict, &entry);
1693 dbus_message_iter_close_container(&variant, &dict);
1694 dbus_message_iter_close_container(&itr, &variant);
1696 dbus_error_init(&error);
1698 reply = dbus_connection_send_with_reply_and_block(conn,
1699 msg, DBUS_REPLY_TIMEOUT,
1702 if (reply == NULL) {
1703 if (dbus_error_is_set(&error) == TRUE) {
1704 NETWORK_LOG( NETWORK_ERROR,
1705 "Error!!! dbus_connection_send_with_reply_and_block() failed, Error[%s: %s]\n",
1708 Error = __net_error_string_to_enum(error.name);
1709 dbus_error_free(&error);
1710 dbus_message_unref(msg);
1711 __NETWORK_FUNC_EXIT__;
1715 dbus_message_unref(msg);
1716 __NETWORK_FUNC_EXIT__;
1717 return NET_ERR_UNKNOWN;
1720 dbus_message_unref(reply);
1721 dbus_message_unref(msg);
1723 NETWORK_LOG( NETWORK_HIGH, "Successfully configured Proxy.Configuration\n");
1725 dbus_connection_unref(conn);
1727 __NETWORK_FUNC_EXIT__;
1728 return NET_ERR_NONE;
1732 int _net_dbus_add_pdp_profile(net_profile_info_t *prof_info)
1734 __NETWORK_FUNC_ENTER__;
1736 net_err_t Error = NET_ERR_NONE;
1738 const char *service_type = "svc_ctg_id";
1739 const char *home_url = "home_url";
1740 const char *proxy_addr = "proxy_addr";
1741 const char *auth_pwd = "auth_pwd";
1742 const char *auth_type = "auth_type";
1743 const char *auth_id = "auth_id";
1744 const char *apn = "apn";
1746 char buff_svc_type[10] = "";
1747 char buff_auth_type[10] = "";
1748 char *temp_ptr = NULL;
1750 DBusMessage *msg = NULL;
1751 DBusMessage *reply = NULL;
1752 DBusMessageIter iter, dict, entry;
1753 DBusConnection* conn = NULL;
1755 if (prof_info == NULL) {
1756 NETWORK_LOG(NETWORK_ASSERT, "Error!!! Invalid argument\n");
1757 __NETWORK_FUNC_EXIT__;
1758 return NET_ERR_INVALID_PARAM;
1761 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
1763 NETWORK_LOG(NETWORK_ERROR, "Error!!! Can't get on system bus\n");
1764 __NETWORK_FUNC_EXIT__;
1765 return NET_ERR_UNKNOWN;
1768 /** Create message */
1769 msg = dbus_message_new_method_call(TELEPHONY_SERVCE,
1770 TELEPHONY_MASTER_PATH, TELEPHONY_MASTER_INTERFACE, "AddProfile");
1772 NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_message_new_method_call() failed\n");
1773 dbus_connection_unref(conn);
1774 __NETWORK_FUNC_EXIT__;
1775 return NET_ERR_UNKNOWN;
1778 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 1/2 : %s %s %s %s\n", TELEPHONY_SERVCE,
1779 TELEPHONY_MASTER_PATH, TELEPHONY_MASTER_INTERFACE, ".AddProfile");
1781 dbus_message_iter_init_append(msg, &iter);
1783 dbus_message_iter_open_container
1784 (&iter, DBUS_TYPE_ARRAY,
1785 (DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
1786 DBUS_TYPE_STRING_AS_STRING
1787 DBUS_TYPE_STRING_AS_STRING
1788 DBUS_DICT_ENTRY_END_CHAR_AS_STRING),
1791 if (prof_info->ProfileInfo.Pdp.ServiceType > NET_SERVICE_UNKNOWN &&
1792 prof_info->ProfileInfo.Pdp.ServiceType <= NET_SERVICE_PREPAID_MMS) {
1793 snprintf(buff_svc_type, 10, "%d", prof_info->ProfileInfo.Pdp.ServiceType);
1794 temp_ptr = buff_svc_type;
1796 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1797 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &service_type);
1798 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
1799 dbus_message_iter_close_container(&dict, &entry);
1801 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
1802 service_type, temp_ptr);
1805 if (strlen(prof_info->ProfileInfo.Pdp.HomeURL) > 0) {
1806 temp_ptr = prof_info->ProfileInfo.Pdp.HomeURL;
1808 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1809 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &home_url);
1810 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
1811 dbus_message_iter_close_container(&dict, &entry);
1813 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
1814 home_url, temp_ptr);
1817 if (strlen(prof_info->ProfileInfo.Pdp.net_info.ProxyAddr) > 0) {
1818 temp_ptr = prof_info->ProfileInfo.Pdp.net_info.ProxyAddr;
1820 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1821 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &proxy_addr);
1822 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
1823 dbus_message_iter_close_container(&dict, &entry);
1825 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
1826 proxy_addr, temp_ptr);
1829 if (strlen(prof_info->ProfileInfo.Pdp.AuthInfo.Password) > 0) {
1830 temp_ptr = prof_info->ProfileInfo.Pdp.AuthInfo.Password;
1832 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1833 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &auth_pwd);
1834 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
1835 dbus_message_iter_close_container(&dict, &entry);
1837 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
1838 auth_pwd, temp_ptr);
1841 if (strlen(prof_info->ProfileInfo.Pdp.AuthInfo.UserName) > 0) {
1842 temp_ptr = prof_info->ProfileInfo.Pdp.AuthInfo.UserName;
1844 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1845 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &auth_id);
1846 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
1847 dbus_message_iter_close_container(&dict, &entry);
1849 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
1853 if (prof_info->ProfileInfo.Pdp.AuthInfo.AuthType >= NET_PDP_AUTH_NONE &&
1854 prof_info->ProfileInfo.Pdp.AuthInfo.AuthType <= NET_PDP_AUTH_CHAP) {
1855 snprintf(buff_auth_type, 10, "%d", prof_info->ProfileInfo.Pdp.AuthInfo.AuthType);
1856 temp_ptr = buff_auth_type;
1858 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1859 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &auth_type);
1860 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
1861 dbus_message_iter_close_container(&dict, &entry);
1863 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
1864 auth_type, temp_ptr);
1867 if (strlen(prof_info->ProfileInfo.Pdp.Apn) > 0) {
1868 temp_ptr = prof_info->ProfileInfo.Pdp.Apn;
1870 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1871 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &apn);
1872 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
1873 dbus_message_iter_close_container(&dict, &entry);
1875 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
1879 dbus_message_iter_close_container(&iter, &dict);
1880 dbus_error_init(&error);
1883 reply = dbus_connection_send_with_reply_and_block(conn,
1884 msg, DBUS_REPLY_TIMEOUT,
1888 if (reply == NULL) {
1889 if (dbus_error_is_set (&error) == TRUE) {
1890 NETWORK_LOG(NETWORK_ERROR,
1891 "Error!!! dbus_connection_send_with_reply_and_block() failed, Error[%s: %s]\n",
1894 Error = __net_error_string_to_enum(error.name);
1895 dbus_error_free(&error);
1896 dbus_message_unref(msg);
1897 __NETWORK_FUNC_EXIT__;
1901 dbus_message_unref(msg);
1902 dbus_connection_unref(conn);
1903 __NETWORK_FUNC_EXIT__;
1904 return NET_ERR_UNKNOWN;
1906 NETWORK_LOG(NETWORK_HIGH, "Successfully requested : Add PDP profile\n");
1909 DBusMessageIter iter2;
1912 dbus_message_iter_init(reply, &iter2);
1913 if (dbus_message_iter_get_arg_type(&iter2) == DBUS_TYPE_BOOLEAN) {
1914 dbus_message_iter_get_basic(&iter2, &add_result);
1915 NETWORK_LOG(NETWORK_HIGH, "Profile add result : %d\n", add_result);
1919 Error = NET_ERR_NONE;
1921 Error = NET_ERR_UNKNOWN;
1923 dbus_message_unref(reply);
1924 dbus_message_unref(msg);
1925 dbus_connection_unref(conn);
1927 __NETWORK_FUNC_EXIT__;
1932 int _net_dbus_modify_pdp_profile(net_profile_info_t *prof_info, const char *profile_name)
1934 __NETWORK_FUNC_ENTER__;
1936 net_err_t Error = NET_ERR_NONE;
1939 const char *service_type = "svc_ctg_id";
1940 const char *home_url = "home_url";
1941 const char *proxy_addr = "proxy_addr";
1942 const char *auth_pwd = "auth_pwd";
1943 const char *auth_type = "auth_type";
1944 const char *auth_id = "auth_id";
1945 const char *apn = "apn";
1947 char buff_svc_type[10] = "";
1948 char buff_auth_type[10] = "";
1949 char *temp_ptr = NULL;
1951 DBusMessage *msg = NULL;
1952 DBusMessage *reply = NULL;
1953 DBusMessageIter iter, dict, entry;
1954 DBusConnection* conn = NULL;
1956 if ((prof_info == NULL) || (profile_name == NULL)) {
1957 NETWORK_LOG(NETWORK_ASSERT, "Error!!! Invalid argument\n");
1958 __NETWORK_FUNC_EXIT__;
1959 return NET_ERR_INVALID_PARAM;
1962 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
1964 NETWORK_LOG(NETWORK_ERROR, "Error!!! Can't get on system bus\n");
1965 __NETWORK_FUNC_EXIT__;
1966 return NET_ERR_UNKNOWN;
1969 /** Create message */
1970 msg = dbus_message_new_method_call(TELEPHONY_SERVCE,
1971 profile_name, TELEPHONY_PROFILE_INTERFACE, "ModifyProfile");
1973 NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_message_new_method_call() failed\n");
1974 dbus_connection_unref(conn);
1975 __NETWORK_FUNC_EXIT__;
1976 return NET_ERR_UNKNOWN;
1979 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 1/2 : %s %s %s %s\n", TELEPHONY_SERVCE,
1980 profile_name, TELEPHONY_PROFILE_INTERFACE, ".ModifyProfile");
1982 dbus_message_iter_init_append(msg, &iter);
1984 dbus_message_iter_open_container
1985 (&iter, DBUS_TYPE_ARRAY,
1986 (DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
1987 DBUS_TYPE_STRING_AS_STRING
1988 DBUS_TYPE_STRING_AS_STRING
1989 DBUS_DICT_ENTRY_END_CHAR_AS_STRING),
1992 if (prof_info->ProfileInfo.Pdp.ServiceType > NET_SERVICE_UNKNOWN &&
1993 prof_info->ProfileInfo.Pdp.ServiceType <= NET_SERVICE_PREPAID_MMS) {
1994 snprintf(buff_svc_type, 10, "%d", prof_info->ProfileInfo.Pdp.ServiceType);
1995 temp_ptr = buff_svc_type;
1997 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
1998 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &service_type);
1999 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
2000 dbus_message_iter_close_container(&dict, &entry);
2002 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
2003 service_type, temp_ptr);
2006 if (strlen(prof_info->ProfileInfo.Pdp.HomeURL) > 0) {
2007 temp_ptr = prof_info->ProfileInfo.Pdp.HomeURL;
2009 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
2010 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &home_url);
2011 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
2012 dbus_message_iter_close_container(&dict, &entry);
2014 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
2015 home_url, temp_ptr);
2018 if (strlen(prof_info->ProfileInfo.Pdp.net_info.ProxyAddr) > 0) {
2019 temp_ptr = prof_info->ProfileInfo.Pdp.net_info.ProxyAddr;
2021 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
2022 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &proxy_addr);
2023 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
2024 dbus_message_iter_close_container(&dict, &entry);
2026 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
2027 proxy_addr, temp_ptr);
2030 if (strlen(prof_info->ProfileInfo.Pdp.AuthInfo.Password) > 0) {
2031 temp_ptr = prof_info->ProfileInfo.Pdp.AuthInfo.Password;
2033 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
2034 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &auth_pwd);
2035 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
2036 dbus_message_iter_close_container(&dict, &entry);
2038 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
2039 auth_pwd, temp_ptr);
2042 if (strlen(prof_info->ProfileInfo.Pdp.AuthInfo.UserName) > 0) {
2043 temp_ptr = prof_info->ProfileInfo.Pdp.AuthInfo.UserName;
2045 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
2046 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &auth_id);
2047 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
2048 dbus_message_iter_close_container(&dict, &entry);
2050 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
2054 if (prof_info->ProfileInfo.Pdp.AuthInfo.AuthType >= NET_PDP_AUTH_NONE &&
2055 prof_info->ProfileInfo.Pdp.AuthInfo.AuthType <= NET_PDP_AUTH_CHAP) {
2056 snprintf(buff_auth_type, 10, "%d", prof_info->ProfileInfo.Pdp.AuthInfo.AuthType);
2057 temp_ptr = buff_auth_type;
2059 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
2060 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &auth_type);
2061 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
2062 dbus_message_iter_close_container(&dict, &entry);
2064 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
2065 auth_type, temp_ptr);
2068 if (strlen(prof_info->ProfileInfo.Pdp.Apn) > 0) {
2069 temp_ptr = prof_info->ProfileInfo.Pdp.Apn;
2071 dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry);
2072 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &apn);
2073 dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &temp_ptr);
2074 dbus_message_iter_close_container(&dict, &entry);
2076 NETWORK_LOG(NETWORK_ASSERT, "DBus Message 2/2 : %s : %s\n",
2080 dbus_message_iter_close_container(&iter, &dict);
2081 dbus_error_init(&error);
2084 reply = dbus_connection_send_with_reply_and_block(conn,
2085 msg, DBUS_REPLY_TIMEOUT,
2089 if (reply == NULL) {
2090 if (dbus_error_is_set (&error) == TRUE) {
2091 NETWORK_LOG(NETWORK_ERROR,
2092 "Error!!! dbus_connection_send_with_reply_and_block() failed, Error[%s: %s]\n",
2095 Error = __net_error_string_to_enum(error.name);
2096 dbus_error_free(&error);
2097 dbus_message_unref(msg);
2098 __NETWORK_FUNC_EXIT__;
2102 dbus_message_unref(msg);
2103 dbus_connection_unref(conn);
2104 __NETWORK_FUNC_EXIT__;
2105 return NET_ERR_UNKNOWN;
2107 NETWORK_LOG(NETWORK_HIGH, "Successfully requested : Modify PDP profile\n");
2110 DBusMessageIter iter2;
2113 dbus_message_iter_init(reply, &iter2);
2114 if (dbus_message_iter_get_arg_type(&iter2) == DBUS_TYPE_BOOLEAN) {
2115 dbus_message_iter_get_basic(&iter2, &add_result);
2116 NETWORK_LOG(NETWORK_HIGH, "Profile modify result : %d\n", add_result);
2120 Error = NET_ERR_NONE;
2122 Error = NET_ERR_UNKNOWN;
2124 dbus_message_unref(reply);
2125 dbus_message_unref(msg);
2126 dbus_connection_unref(conn);
2128 __NETWORK_FUNC_EXIT__;
2133 int _net_dbus_load_wifi_driver(void)
2135 __NETWORK_FUNC_ENTER__;
2137 net_err_t Error = NET_ERR_NONE;
2138 DBusConnection* conn = NULL;
2140 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
2143 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
2144 __NETWORK_FUNC_EXIT__;
2145 return NET_ERR_UNKNOWN;
2148 NETWORK_LOG(NETWORK_HIGH, "Requesting [%s %s]\n",
2149 NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE ".LoadDriver");
2151 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE, conn, NETCONFIG_WIFI_PATH,
2152 NETCONFIG_WIFI_INTERFACE, "LoadDriver", __net_wifi_power_reply);
2154 dbus_connection_unref(conn);
2156 __NETWORK_FUNC_EXIT__;
2160 int _net_dbus_remove_wifi_driver(void)
2162 __NETWORK_FUNC_ENTER__;
2164 net_err_t Error = NET_ERR_NONE;
2165 DBusConnection* conn = NULL;
2167 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
2170 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get on system bus\n");
2171 __NETWORK_FUNC_EXIT__;
2172 return NET_ERR_UNKNOWN;
2175 NETWORK_LOG(NETWORK_HIGH, "Requesting [%s %s]\n",
2176 NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE ".RemoveDriver");
2178 Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE, conn, NETCONFIG_WIFI_PATH,
2179 NETCONFIG_WIFI_INTERFACE, "RemoveDriver", __net_wifi_power_reply);
2181 dbus_connection_unref(conn);
2183 __NETWORK_FUNC_EXIT__;
2187 dbus_bool_t _net_dbus_is_pending_call_used(void)
2189 return network_dbus_pending_call_data.is_used;
2192 void _net_dbus_set_pending_call_used(dbus_bool_t used)
2194 network_dbus_pending_call_data.is_used = used;
2197 DBusPendingCall *_net_dbus_get_pending_call(void)
2199 return network_dbus_pending_call_data.pcall;
2202 void _net_dbus_set_pending_call(DBusPendingCall *call)
2204 network_dbus_pending_call_data.pcall = call;
2209 #endif /* __cplusplus */