2 * Network Client Library
4 * Copyright 2012 Samsung Electronics Co., Ltd
6 * Licensed under the Flora License, Version 1.0 (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.
24 #endif /* __cplusplus */
27 /*****************************************************************************
29 *****************************************************************************/
38 /*****************************************************************************
40 *****************************************************************************/
42 #include "network-internal.h"
43 #include "network-dbus-request.h"
45 /*****************************************************************************
47 *****************************************************************************/
49 /*****************************************************************************
50 * Local Functions Declaration
51 *****************************************************************************/
52 static int __net_extract_wifi_info(DBusMessageIter *array, net_profile_info_t* ProfInfo);
53 static int __net_get_profile_info(const char* ProfileName, net_profile_info_t* ProfInfo);
54 static int __net_extract_service_info(const char* ProfileName,
55 DBusMessage *message, net_profile_info_t* ProfInfo);
56 static int __net_pm_init_profile_info(net_device_t profile_type, net_profile_info_t* ProfInfo);
57 static int __net_telephony_init_profile_info(net_telephony_profile_info_t* ProfInfo);
58 static int __net_telephony_get_profile_info(net_profile_name_t* ProfileName,
59 net_telephony_profile_info_t* ProfileInfo);
60 static int __net_telephony_get_profile_list(net_profile_name_t** ProfileName, int* ProfileCount);
61 static int __net_extract_wifi_services(DBusMessage* message,
62 DBusMessageIter* dict, network_services_list_t* service_info);
63 static int __net_extract_mobile_services(DBusMessage* message, DBusMessageIter* dict,
64 network_services_list_t* service_info, net_service_type_t network_type);
65 static int __net_extract_ethernet_services(DBusMessage* message,
66 DBusMessageIter* dict, network_services_list_t* service_info);
67 static int __net_extract_services(DBusMessage *message, net_device_t device_type,
68 net_profile_info_t** profile_info, int* profile_count);
69 static int __net_extract_ip(DBusMessageIter *iter, net_addr_t *ipAddr);
70 static int __net_extract_common_info(const char *key, DBusMessageIter *variant, net_profile_info_t* ProfInfo);
71 static int __net_extract_mobile_info(DBusMessageIter *array, net_profile_info_t* ProfInfo);
72 static int __net_extract_ethernet_info(DBusMessageIter *array, net_profile_info_t* ProfInfo);
73 static int __net_telephony_search_pdp_profile(char* ProfileName, net_profile_name_t* PdpProfName);
74 static int __net_telephony_modify_profile(const char* ProfileName,
75 net_profile_info_t* ProfInfo, net_profile_info_t* exProfInfo);
76 static int __net_modify_wlan_profile_info(const char* ProfileName,
77 net_profile_info_t* ProfInfo, net_profile_info_t* exProfInfo);
78 static int __net_telephony_delete_profile(net_profile_name_t* PdpProfName);
79 static int __net_wifi_delete_profile(net_profile_name_t* WifiProfName);
80 static int __net_telephony_add_profile(net_profile_info_t *ProfInfo, net_service_type_t network_type);
81 static int __net_extract_defult_profile(DBusMessageIter* iter, net_profile_name_t *profile_name);
82 static int __net_set_profile_property(char* path, char* key, char* value);
84 /*****************************************************************************
86 *****************************************************************************/
88 /*****************************************************************************
90 *****************************************************************************/
92 extern network_info_t NetworkInfo;
94 /*****************************************************************************
96 *****************************************************************************/
98 /*****************************************************************************
99 * Local Functions Definition
100 *****************************************************************************/
102 static int __net_pm_init_profile_info(net_device_t profile_type, net_profile_info_t* ProfInfo)
104 __NETWORK_FUNC_ENTER__;
107 net_dev_info_t* net_info = NULL;
109 if (ProfInfo == NULL ||
110 (profile_type != NET_DEVICE_WIFI &&
111 profile_type != NET_DEVICE_CELLULAR &&
112 profile_type != NET_DEVICE_ETHERNET)) {
113 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid Parameter\n");
114 return NET_ERR_INVALID_PARAM;
117 memset(ProfInfo->ProfileName, '\0', NET_PROFILE_NAME_LEN_MAX+1);
118 ProfInfo->Favourite = FALSE;
120 if (profile_type == NET_DEVICE_WIFI) {
121 ProfInfo->profile_type = NET_DEVICE_WIFI;
122 memset(ProfInfo->ProfileInfo.Wlan.essid, '\0', NET_WLAN_ESSID_LEN+1);
123 memset(ProfInfo->ProfileInfo.Wlan.bssid, '\0', NET_MAX_MAC_ADDR_LEN+1);
124 ProfInfo->ProfileInfo.Wlan.Strength = 0;
125 ProfInfo->ProfileInfo.Wlan.frequency = 0;
126 ProfInfo->ProfileInfo.Wlan.max_rate = 0;
127 ProfInfo->ProfileInfo.Wlan.wlan_mode = 0;
128 ProfInfo->ProfileInfo.Wlan.PassphraseRequired = FALSE;
130 ProfInfo->ProfileInfo.Wlan.security_info.sec_mode = 0;
131 ProfInfo->ProfileInfo.Wlan.security_info.enc_mode = 0;
133 if (NETPM_WLAN_MAX_WEP_KEY_LEN >= NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN)
134 memset(ProfInfo->ProfileInfo.Wlan.security_info.authentication.wep.wepKey,
135 '\0', NETPM_WLAN_MAX_WEP_KEY_LEN+1);
137 memset(ProfInfo->ProfileInfo.Wlan.security_info.authentication.psk.pskKey,
138 '\0', NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN+1);
140 ProfInfo->ProfileInfo.Wlan.security_info.wps_support = FALSE;
142 net_info = &(ProfInfo->ProfileInfo.Wlan.net_info);
143 } else if(profile_type == NET_DEVICE_CELLULAR) {
144 ProfInfo->profile_type = NET_DEVICE_CELLULAR;
145 ProfInfo->ProfileInfo.Pdp.ProtocolType = NET_PDP_TYPE_NONE;
146 ProfInfo->ProfileInfo.Pdp.ServiceType = NET_SERVICE_UNKNOWN;
147 ProfInfo->ProfileInfo.Pdp.Apn[0] = '\0';
148 ProfInfo->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_NONE;
149 ProfInfo->ProfileInfo.Pdp.AuthInfo.UserName[0] = '\0';
150 ProfInfo->ProfileInfo.Pdp.AuthInfo.Password[0] = '\0';
151 ProfInfo->ProfileInfo.Pdp.HomeURL[0] = '\0';
152 ProfInfo->ProfileInfo.Pdp.Mcc[0] = '\0';
153 ProfInfo->ProfileInfo.Pdp.Mnc[0] = '\0';
154 ProfInfo->ProfileInfo.Pdp.IsStatic = FALSE;
155 ProfInfo->ProfileInfo.Pdp.Roaming = FALSE;
156 ProfInfo->ProfileInfo.Pdp.SetupRequired = FALSE;
158 net_info = &(ProfInfo->ProfileInfo.Pdp.net_info);
159 } else if(profile_type == NET_DEVICE_ETHERNET) {
160 net_info = &(ProfInfo->ProfileInfo.Ethernet.net_info);
163 memset(net_info->ProfileName, '\0', NET_PROFILE_NAME_LEN_MAX+1);
164 memset(net_info->DevName, '\0', NET_MAX_DEVICE_NAME_LEN+1);
165 net_info->DnsCount = 0;
167 for (i = 0;i < NET_DNS_ADDR_MAX;i++) {
168 net_info->DnsAddr[i].Type = NET_ADDR_IPV4;
169 net_info->DnsAddr[i].Data.Ipv4.s_addr = 0;
172 net_info->IpConfigType = 0;
173 net_info->IpAddr.Type = NET_ADDR_IPV4;
174 net_info->IpAddr.Data.Ipv4.s_addr = 0;
175 net_info->BNetmask = FALSE;
176 net_info->SubnetMask.Type = NET_ADDR_IPV4;
177 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
178 net_info->BDefGateway = FALSE;
179 net_info->GatewayAddr.Type = NET_ADDR_IPV4;
180 net_info->GatewayAddr.Data.Ipv4.s_addr = 0;
181 net_info->ProxyMethod = NET_PROXY_TYPE_UNKNOWN;
182 memset(net_info->ProxyAddr, '\0', NET_PROXY_LEN_MAX+1);
183 memset(net_info->MacAddr, '\0', NET_MAX_MAC_ADDR_LEN+1);
185 __NETWORK_FUNC_EXIT__;
190 static int __net_telephony_init_profile_info(net_telephony_profile_info_t* ProfInfo)
192 __NETWORK_FUNC_ENTER__;
194 if (ProfInfo == NULL) {
195 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid Parameter\n");
196 __NETWORK_FUNC_EXIT__;
197 return NET_ERR_INVALID_PARAM;
200 memset(ProfInfo->ProfileName, '\0', NET_PROFILE_NAME_LEN_MAX+1);
201 ProfInfo->ServiceType = NET_SERVICE_UNKNOWN;
202 memset(ProfInfo->Apn, '\0', NET_PDP_APN_LEN_MAX+1);
204 ProfInfo->AuthInfo.AuthType = NET_PDP_AUTH_NONE;
205 memset(ProfInfo->AuthInfo.UserName, '\0', NET_PDP_AUTH_USERNAME_LEN_MAX+1);
206 memset(ProfInfo->AuthInfo.Password, '\0', NET_PDP_AUTH_PASSWORD_LEN_MAX+1);
208 memset(ProfInfo->ProxyAddr, '\0', NET_PROXY_LEN_MAX+1);
209 memset(ProfInfo->HomeURL, '\0', NET_HOME_URL_LEN_MAX+1);
211 __NETWORK_FUNC_EXIT__;
216 static int __net_telephony_get_profile_info(net_profile_name_t* ProfileName, net_telephony_profile_info_t* ProfileInfo)
218 __NETWORK_FUNC_ENTER__;
220 net_err_t Error = NET_ERR_NONE;
221 DBusMessage* result = NULL;
222 DBusMessageIter iter, array;
224 if (ProfileName == NULL || ProfileInfo == NULL) {
225 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid parameter!\n");
226 __NETWORK_FUNC_EXIT__;
227 return NET_ERR_INVALID_PARAM;
230 result = _net_invoke_dbus_method(TELEPHONY_SERVCE, ProfileName->ProfileName,
231 TELEPHONY_PROFILE_INTERFACE, "GetProfile", NULL, &Error);
233 if (result == NULL) {
234 NETWORK_LOG(NETWORK_ERROR, "Error!!! _net_invoke_dbus_method failed\n");
235 __NETWORK_FUNC_EXIT__;
239 /* Parsing profile info */
240 dbus_message_iter_init(result, &iter);
241 dbus_message_iter_recurse(&iter, &array);
243 Error = __net_telephony_init_profile_info(ProfileInfo);
245 if (Error != NET_ERR_NONE) {
246 dbus_message_unref(result);
247 __NETWORK_FUNC_EXIT__;
252 while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_DICT_ENTRY) {
253 DBusMessageIter entry;
254 const char *key = NULL;
255 const char *value = NULL;
257 dbus_message_iter_recurse(&array, &entry);
258 dbus_message_iter_get_basic(&entry, &key);
260 dbus_message_iter_next(&entry);
262 if (strcmp(key, "path") == 0) {
263 dbus_message_iter_get_basic(&entry, &value);
266 g_strlcpy(ProfileInfo->ProfileName, value, NET_PROFILE_NAME_LEN_MAX);
268 } else if (strcmp(key, "svc_ctg_id") == 0) {
269 net_service_type_t ServiceType = NET_SERVICE_UNKNOWN;
270 dbus_message_iter_get_basic(&entry, &value);
273 ServiceType = atoi(value);
275 if (ServiceType > NET_SERVICE_UNKNOWN)
276 ProfileInfo->ServiceType = ServiceType;
278 } else if (strcmp(key, "apn") == 0) {
279 dbus_message_iter_get_basic(&entry, &value);
282 g_strlcpy(ProfileInfo->Apn, value, NET_PDP_APN_LEN_MAX);
284 } else if (strcmp(key, "auth_type") == 0) {
285 net_auth_type_t authType = NET_PDP_AUTH_NONE;
286 dbus_message_iter_get_basic(&entry, &value);
289 authType = atoi(value);
291 if (authType == NET_PDP_AUTH_PAP)
292 ProfileInfo->AuthInfo.AuthType = NET_PDP_AUTH_PAP;
293 else if (authType == NET_PDP_AUTH_CHAP)
294 ProfileInfo->AuthInfo.AuthType = NET_PDP_AUTH_CHAP;
296 } else if (strcmp(key, "auth_id") == 0) {
297 dbus_message_iter_get_basic(&entry, &value);
300 g_strlcpy(ProfileInfo->AuthInfo.UserName, value, NET_PDP_AUTH_USERNAME_LEN_MAX);
302 } else if (strcmp(key, "auth_pwd") == 0) {
303 dbus_message_iter_get_basic(&entry, &value);
306 g_strlcpy(ProfileInfo->AuthInfo.Password, value, NET_PDP_AUTH_PASSWORD_LEN_MAX);
308 } else if (strcmp(key, "proxy_addr") == 0) {
309 dbus_message_iter_get_basic(&entry, &value);
312 g_strlcpy(ProfileInfo->ProxyAddr, value, NET_PROXY_LEN_MAX);
314 } else if (strcmp(key, "home_url") == 0) {
315 dbus_message_iter_get_basic(&entry, &value);
318 g_strlcpy(ProfileInfo->HomeURL, value, NET_HOME_URL_LEN_MAX);
320 dbus_message_iter_next(&array);
323 dbus_message_unref(result);
325 __NETWORK_FUNC_EXIT__;
329 static int __net_telephony_get_profile_list(net_profile_name_t** ProfileName, int* ProfileCount)
331 __NETWORK_FUNC_ENTER__;
333 net_err_t Error = NET_ERR_NONE;
334 DBusMessage* result = NULL;
335 net_profile_name_t* profileList = NULL;
336 DBusMessageIter iter, array;
339 result = _net_invoke_dbus_method(TELEPHONY_SERVCE, TELEPHONY_MASTER_PATH,
340 TELEPHONY_MASTER_INTERFACE, "GetProfileList", NULL, &Error);
342 if (result == NULL) {
343 NETWORK_LOG(NETWORK_ERROR, "Error!!! _net_invoke_dbus_method failed\n");
344 __NETWORK_FUNC_EXIT__;
348 dbus_message_iter_init(result, &iter);
349 if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY) {
350 NETWORK_LOG(NETWORK_HIGH, "There is no profiles\n");
352 dbus_message_unref(result);
353 __NETWORK_FUNC_EXIT__;
357 dbus_message_iter_recurse(&iter, &array);
359 /* Get count of profile name from reply message */
360 while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_STRING) {
362 dbus_message_iter_next(&array);
366 profileList = (net_profile_name_t*)malloc(sizeof(net_profile_name_t) * count);
369 dbus_message_unref(result);
370 __NETWORK_FUNC_EXIT__;
374 if (profileList == NULL) {
375 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Failed to allocate memory\n");
377 dbus_message_unref(result);
378 __NETWORK_FUNC_EXIT__;
379 return NET_ERR_UNKNOWN;
384 /* Parsing to get profile name from reply message */
385 dbus_message_iter_init(result, &iter);
386 dbus_message_iter_recurse(&iter, &array);
387 while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_STRING) {
388 const char *key = NULL;
390 dbus_message_iter_get_basic(&array, &key);
393 g_strlcpy(profileList[count].ProfileName, key, NET_PROFILE_NAME_LEN_MAX);
396 dbus_message_iter_next(&array);
399 *ProfileName = profileList;
400 *ProfileCount = count;
402 dbus_message_unref(result);
404 __NETWORK_FUNC_EXIT__;
408 static int __net_telephony_search_pdp_profile(char* ProfileName, net_profile_name_t* PdpProfName)
410 __NETWORK_FUNC_ENTER__;
412 net_err_t Error = NET_ERR_NONE;
413 net_profile_name_t* ProfileList = NULL;
414 char* connmanProfName = NULL;
415 char* telephonyProfName = NULL;
416 char* foundPtr = NULL;
417 int ProfileCount = 0;
420 /* Get pdp profile list from telephony service */
421 Error = __net_telephony_get_profile_list(&ProfileList, &ProfileCount);
422 if (Error != NET_ERR_NONE) {
423 NETWORK_LOG(NETWORK_ERROR, "Error!!! failed to get profile list from telephony service\n");
424 NET_MEMFREE(ProfileList);
425 __NETWORK_FUNC_EXIT__;
429 if (ProfileList == NULL || ProfileCount <= 0) {
430 NETWORK_LOG(NETWORK_ERROR, "Error!!! There is no PDP profiles\n");
431 NET_MEMFREE(ProfileList);
432 __NETWORK_FUNC_EXIT__;
433 return NET_ERR_NO_SERVICE;
436 /* Find matching profile */
437 connmanProfName = strrchr(ProfileName, '/') + 1;
438 for (i = 0;i < ProfileCount;i++) {
439 telephonyProfName = strrchr(ProfileList[i].ProfileName, '/') + 1;
440 foundPtr = strstr(connmanProfName, telephonyProfName);
442 if (foundPtr != NULL && strcmp(foundPtr, telephonyProfName) == 0) {
443 g_strlcpy(PdpProfName->ProfileName,
444 ProfileList[i].ProfileName, NET_PROFILE_NAME_LEN_MAX);
445 NETWORK_LOG(NETWORK_HIGH,
446 "PDP profile name found in cellular profile: %s\n",
447 PdpProfName->ProfileName);
452 if (i >= ProfileCount) {
453 NETWORK_LOG(NETWORK_ERROR, "Error!!! There is no matching PDP profiles\n");
454 NET_MEMFREE(ProfileList);
455 __NETWORK_FUNC_EXIT__;
456 return NET_ERR_NO_SERVICE;
459 NET_MEMFREE(ProfileList);
460 __NETWORK_FUNC_EXIT__;
465 static int __net_extract_wifi_services(DBusMessage* message,
466 DBusMessageIter* dict, network_services_list_t* service_info)
471 __NETWORK_FUNC_ENTER__;
473 if (message == NULL || dict == NULL || service_info == NULL) {
474 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid parameter \n");
475 __NETWORK_FUNC_EXIT__;
476 return NET_ERR_INVALID_PARAM;
479 while (dbus_message_iter_get_arg_type(dict) == DBUS_TYPE_DICT_ENTRY) {
480 DBusMessageIter keyValue, array, value;
481 const char *key = NULL;
482 const char *objPath = NULL;
484 dbus_message_iter_recurse(dict, &keyValue);
485 dbus_message_iter_get_basic(&keyValue, &key);
487 if (strcmp(key, "Services") == 0) {
488 dbus_message_iter_next(&keyValue);
489 dbus_message_iter_recurse(&keyValue, &array);
491 if (dbus_message_iter_get_arg_type(&array) != DBUS_TYPE_ARRAY) {
492 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get service list\n");
493 __NETWORK_FUNC_EXIT__;
494 return NET_ERR_NO_SERVICE;
497 dbus_message_iter_recurse(&array, &value);
499 if (dbus_message_iter_get_arg_type(&value) != DBUS_TYPE_OBJECT_PATH) {
500 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get service list\n");
501 __NETWORK_FUNC_EXIT__;
502 return NET_ERR_NO_SERVICE;
505 while (dbus_message_iter_get_arg_type(&value) == DBUS_TYPE_OBJECT_PATH) {
506 dbus_message_iter_get_basic(&value, &objPath);
508 if (g_str_has_prefix(objPath, CONNMAN_WIFI_SERVICE_PROFILE_PREFIX) == TRUE) {
509 service_info->ProfileName[count] = (char*)malloc(NET_PROFILE_NAME_LEN_MAX+1);
511 if (service_info->ProfileName[count] == NULL) {
512 NETWORK_LOG(NETWORK_EXCEPTION,
513 "Error!!! Failed to allocate memory\n");
515 for (i = 0; i < count; i++)
516 NET_MEMFREE(service_info->ProfileName[i]);
518 __NETWORK_FUNC_EXIT__;
519 return NET_ERR_UNKNOWN;
522 g_strlcpy(service_info->ProfileName[count], objPath, NET_PROFILE_NAME_LEN_MAX);
527 dbus_message_iter_next(&value);
530 service_info->num_of_services = count;
534 dbus_message_iter_next(dict);
537 __NETWORK_FUNC_EXIT__;
542 static int __net_extract_mobile_services(DBusMessage* message, DBusMessageIter* dict,
543 network_services_list_t* service_info, net_service_type_t network_type)
547 const char net_suffix[] = "_1";
548 const char mms_suffix[] = "_2";
549 const char wap_suffix[] = "_3";
552 __NETWORK_FUNC_ENTER__;
554 if (message == NULL || dict == NULL || service_info == NULL) {
555 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid parameter \n");
556 __NETWORK_FUNC_EXIT__;
557 return NET_ERR_INVALID_PARAM;
560 while (dbus_message_iter_get_arg_type(dict) == DBUS_TYPE_DICT_ENTRY) {
561 DBusMessageIter keyValue, array, value;
562 const char *key = NULL;
563 const char *objPath = NULL;
566 dbus_message_iter_recurse(dict, &keyValue);
567 dbus_message_iter_get_basic(&keyValue, &key);
569 if (strcmp(key, "Services") == 0) {
570 dbus_message_iter_next(&keyValue);
571 dbus_message_iter_recurse(&keyValue, &array);
573 if (dbus_message_iter_get_arg_type(&array) != DBUS_TYPE_ARRAY) {
574 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get service list\n");
575 __NETWORK_FUNC_EXIT__;
576 return NET_ERR_NO_SERVICE;
579 dbus_message_iter_recurse(&array, &value);
581 if (dbus_message_iter_get_arg_type(&value) != DBUS_TYPE_OBJECT_PATH) {
582 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get service list\n");
583 __NETWORK_FUNC_EXIT__;
584 return NET_ERR_NO_SERVICE;
587 while (dbus_message_iter_get_arg_type(&value) == DBUS_TYPE_OBJECT_PATH) {
588 dbus_message_iter_get_basic(&value, &objPath);
590 if (g_str_has_prefix(objPath, CONNMAN_CELLULAR_SERVICE_PROFILE_PREFIX) == TRUE) {
593 suffix = strrchr(objPath, '_');
595 if (network_type == NET_SERVICE_UNKNOWN)
597 else if (network_type == NET_SERVICE_MMS && strcmp(suffix, mms_suffix) == 0)
599 else if (network_type == NET_SERVICE_WAP && strcmp(suffix, wap_suffix) == 0)
601 else if (network_type == NET_SERVICE_INTERNET && strcmp(suffix, net_suffix) == 0)
605 service_info->ProfileName[count] = (char*)malloc(NET_PROFILE_NAME_LEN_MAX+1);
606 if (service_info->ProfileName[count] == NULL) {
607 NETWORK_LOG(NETWORK_EXCEPTION,
608 "Error!!! Failed to allocate memory\n");
610 for (i = 0; i < count; i++)
611 NET_MEMFREE(service_info->ProfileName[i]);
613 __NETWORK_FUNC_EXIT__;
614 return NET_ERR_UNKNOWN;
617 g_strlcpy(service_info->ProfileName[count], objPath, NET_PROFILE_NAME_LEN_MAX+1);
619 NETWORK_LOG(NETWORK_HIGH, "index [%d] ProfileName [%s]\n",
620 count, service_info->ProfileName[count]);
626 dbus_message_iter_next(&value);
628 service_info->num_of_services = count;
631 dbus_message_iter_next(dict);
634 __NETWORK_FUNC_EXIT__;
639 static int __net_extract_ethernet_services(DBusMessage* message,
640 DBusMessageIter* dict, network_services_list_t* service_info)
645 __NETWORK_FUNC_ENTER__;
647 if (message == NULL || dict == NULL || service_info == NULL) {
648 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid parameter \n");
649 __NETWORK_FUNC_EXIT__;
650 return NET_ERR_INVALID_PARAM;
653 while (dbus_message_iter_get_arg_type(dict) == DBUS_TYPE_DICT_ENTRY) {
654 DBusMessageIter keyValue, array, value;
655 const char *key = NULL;
656 const char *objPath = NULL;
658 dbus_message_iter_recurse(dict, &keyValue);
659 dbus_message_iter_get_basic(&keyValue, &key);
661 if (strcmp(key, "Services") == 0) {
662 dbus_message_iter_next(&keyValue);
663 dbus_message_iter_recurse(&keyValue, &array);
665 if (dbus_message_iter_get_arg_type(&array) != DBUS_TYPE_ARRAY) {
666 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get service list\n");
667 __NETWORK_FUNC_EXIT__;
668 return NET_ERR_NO_SERVICE;
671 dbus_message_iter_recurse(&array, &value);
673 if (dbus_message_iter_get_arg_type(&value) != DBUS_TYPE_OBJECT_PATH) {
674 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get service list\n");
675 __NETWORK_FUNC_EXIT__;
676 return NET_ERR_NO_SERVICE;
679 while (dbus_message_iter_get_arg_type(&value) == DBUS_TYPE_OBJECT_PATH) {
680 dbus_message_iter_get_basic(&value, &objPath);
682 if (g_str_has_prefix(objPath, CONNMAN_ETHERNET_SERVICE_PROFILE_PREFIX) == TRUE) {
683 service_info->ProfileName[count] = (char*)malloc(NET_PROFILE_NAME_LEN_MAX+1);
685 if (service_info->ProfileName[count] == NULL) {
686 NETWORK_LOG(NETWORK_EXCEPTION,
687 "Error!!! Failed to allocate memory\n");
689 for(i = 0; i < count; i++)
690 NET_MEMFREE(service_info->ProfileName[i]);
692 __NETWORK_FUNC_EXIT__;
693 return NET_ERR_UNKNOWN;
696 g_strlcpy(service_info->ProfileName[count], objPath, NET_PROFILE_NAME_LEN_MAX);
701 dbus_message_iter_next(&value);
704 service_info->num_of_services = count;
708 dbus_message_iter_next(dict);
711 __NETWORK_FUNC_EXIT__;
716 static int __net_extract_services(DBusMessage *message, net_device_t device_type,
717 net_profile_info_t** profile_info, int* profile_count)
719 __NETWORK_FUNC_ENTER__;
721 net_err_t Error = NET_ERR_NONE;
722 DBusMessageIter iter, dict;
723 network_services_list_t service_info = {0,};
724 net_profile_info_t ProfileInfo = {0, };
725 net_profile_info_t* ProfilePtr = NULL;
730 dbus_message_iter_init(message, &iter);
731 dbus_message_iter_recurse(&iter, &dict);
735 switch (device_type) {
736 case NET_DEVICE_WIFI :
737 Error = __net_extract_wifi_services(message, &dict, &service_info);
739 case NET_DEVICE_CELLULAR :
740 Error = __net_extract_mobile_services(message, &dict, &service_info, NET_SERVICE_UNKNOWN);
742 case NET_DEVICE_ETHERNET :
743 Error = __net_extract_ethernet_services(message, &dict, &service_info);
746 __NETWORK_FUNC_EXIT__;
747 return NET_ERR_NOT_SUPPORTED;
751 if (Error != NET_ERR_NONE) {
752 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't extract services from received message\n");
754 __NETWORK_FUNC_EXIT__;
758 NETWORK_LOG(NETWORK_HIGH, "Num. of Profiles from Manager : [%d]\n", service_info.num_of_services);
761 for (i = 0; i < service_info.num_of_services; i++) {
762 memset(&ProfileInfo, 0, sizeof(net_profile_info_t));
764 Error = __net_get_profile_info(service_info.ProfileName[i], &ProfileInfo);
765 if (Error != NET_ERR_NONE) {
766 NETWORK_LOG(NETWORK_ERROR, "Error!!! failed to get service(profile) information. Error [%s]\n",
767 _net_print_error(Error));
768 NETWORK_LOG(NETWORK_HIGH, "Continuing with next profile\n");
774 ProfilePtr = (net_profile_info_t*)realloc(ProfilePtr, (j + 1) * sizeof(net_profile_info_t));
775 if (ProfilePtr == NULL) {
776 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Failed to allocate memory\n");
778 for (i = 0;i < service_info.num_of_services;i++)
779 NET_MEMFREE(service_info.ProfileName[i]);
781 __NETWORK_FUNC_EXIT__;
782 return NET_ERR_UNKNOWN;
785 memcpy(ProfilePtr + j, &ProfileInfo, sizeof(net_profile_info_t));
789 for(i = 0;i < service_info.num_of_services;i++)
790 NET_MEMFREE(service_info.ProfileName[i]);
792 NETWORK_LOG(NETWORK_HIGH, "Total Num. of Profiles [%d]\n", profiles);
794 *profile_count = profiles;
795 *profile_info = ProfilePtr;
797 __NETWORK_FUNC_EXIT__;
803 static int __net_extract_ip(DBusMessageIter *iter, net_addr_t *ipAddr)
805 __NETWORK_FUNC_ENTER__;
807 unsigned char *ipValue = NULL;
808 const char *value = NULL;
809 char *saveptr = NULL;
810 char ipString[NETPM_IPV4_STR_LEN_MAX+1];
813 dbus_message_iter_get_basic(iter, &value);
815 ipValue = (unsigned char *)&(ipAddr->Data.Ipv4.s_addr);
818 g_strlcpy(ipString, value, NETPM_IPV4_STR_LEN_MAX+1);
820 ipToken[0] = strtok_r(ipString, ".", &saveptr);
822 if(ipToken[0] != NULL) {
823 ipToken[1] = strtok_r(NULL, ".", &saveptr);
825 if(ipToken[1] != NULL) {
826 ipToken[2] = strtok_r(NULL, ".", &saveptr);
828 if(ipToken[2] != NULL) {
829 ipToken[3] = strtok_r(NULL, ".", &saveptr);
831 if(ipToken[3] != NULL) {
832 ipValue[0] = (unsigned char)atoi(ipToken[0]);
833 ipValue[1] = (unsigned char)atoi(ipToken[1]);
834 ipValue[2] = (unsigned char)atoi(ipToken[2]);
835 ipValue[3] = (unsigned char)atoi(ipToken[3]);
842 __NETWORK_FUNC_EXIT__;
847 static int __net_extract_common_info(const char *key, DBusMessageIter *variant, net_profile_info_t* ProfInfo)
849 __NETWORK_FUNC_ENTER__;
851 net_err_t Error = NET_ERR_NONE;
852 DBusMessageIter subIter1, subIter2, subIter3, subIter4;
853 const char *subKey = NULL;
854 const char *value = NULL;
855 net_dev_info_t* net_info = NULL;
857 if (ProfInfo->profile_type == NET_DEVICE_CELLULAR) {
858 net_info = &(ProfInfo->ProfileInfo.Pdp.net_info);
859 } else if (ProfInfo->profile_type == NET_DEVICE_WIFI) {
860 net_info = &(ProfInfo->ProfileInfo.Wlan.net_info);
861 } else if (ProfInfo->profile_type == NET_DEVICE_ETHERNET) {
862 net_info = &(ProfInfo->ProfileInfo.Ethernet.net_info);
864 NETWORK_LOG(NETWORK_ERROR,
865 "Error!!! Invalid Profile type. [%d]\n", ProfInfo->profile_type);
866 return NET_ERR_INVALID_PARAM;
869 if (strcmp(key, "State") == 0) {
870 dbus_message_iter_get_basic(variant, &value);
872 if (strcmp(value, "idle") == 0)
873 ProfInfo->ProfileState = NET_STATE_TYPE_IDLE;
874 else if (strcmp(value, "failure") == 0)
875 ProfInfo->ProfileState = NET_STATE_TYPE_FAILURE;
876 else if (strcmp(value, "association") == 0)
877 ProfInfo->ProfileState = NET_STATE_TYPE_ASSOCIATION;
878 else if (strcmp(value, "configuration") == 0)
879 ProfInfo->ProfileState = NET_STATE_TYPE_CONFIGURATION;
880 else if (strcmp(value, "ready") == 0)
881 ProfInfo->ProfileState = NET_STATE_TYPE_READY;
882 else if (strcmp(value, "disconnect") == 0)
883 ProfInfo->ProfileState = NET_STATE_TYPE_DISCONNECT;
884 else if (strcmp(value, "online") == 0)
885 ProfInfo->ProfileState = NET_STATE_TYPE_ONLINE;
887 ProfInfo->ProfileState = NET_STATE_TYPE_UNKNOWN;
888 } else if (strcmp(key, "Favorite") == 0) {
891 dbus_message_iter_get_basic(variant, &val);
894 ProfInfo->Favourite = TRUE;
896 ProfInfo->Favourite = FALSE;
897 } else if (strcmp(key, "Ethernet") == 0) {
898 dbus_message_iter_recurse(variant, &subIter1);
900 while (dbus_message_iter_get_arg_type(&subIter1) == DBUS_TYPE_DICT_ENTRY) {
901 dbus_message_iter_recurse(&subIter1, &subIter2);
902 dbus_message_iter_get_basic(&subIter2, &subKey);
904 if (strcmp(subKey, "Interface") == 0) {
905 dbus_message_iter_next(&subIter2);
906 dbus_message_iter_recurse(&subIter2, &subIter3);
907 dbus_message_iter_get_basic(&subIter3, &value);
910 g_strlcpy(net_info->DevName, value, NET_MAX_DEVICE_NAME_LEN);
912 } else if (strcmp(subKey, "Address") == 0) {
913 dbus_message_iter_next(&subIter2);
914 dbus_message_iter_recurse(&subIter2, &subIter3);
915 dbus_message_iter_get_basic(&subIter3, &value);
918 g_strlcpy(net_info->MacAddr, value, NET_MAX_MAC_ADDR_LEN);
921 dbus_message_iter_next(&subIter1);
923 } else if (strcmp(key, "IPv4") == 0) {
924 dbus_message_iter_recurse(variant, &subIter1);
926 while (dbus_message_iter_get_arg_type(&subIter1) == DBUS_TYPE_DICT_ENTRY) {
927 dbus_message_iter_recurse(&subIter1, &subIter2);
928 dbus_message_iter_get_basic(&subIter2, &subKey);
930 if (strcmp(subKey, "Method") == 0) {
931 dbus_message_iter_next(&subIter2);
932 dbus_message_iter_recurse(&subIter2, &subIter3);
933 dbus_message_iter_get_basic(&subIter3, &value);
935 if (strcmp(value, "dhcp") == 0)
936 net_info->IpConfigType = NET_IP_CONFIG_TYPE_DYNAMIC;
937 else if (strcmp(value, "manual") == 0)
938 net_info->IpConfigType = NET_IP_CONFIG_TYPE_STATIC;
939 else if (strcmp(value, "fixed") == 0)
940 net_info->IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
941 else if (strcmp(value, "off") == 0)
942 net_info->IpConfigType = NET_IP_CONFIG_TYPE_OFF;
944 } else if (strcmp(subKey, "Address") == 0) {
945 dbus_message_iter_next(&subIter2);
946 dbus_message_iter_recurse(&subIter2, &subIter3);
947 __net_extract_ip(&subIter3, &net_info->IpAddr);
948 } else if (strcmp(subKey, "Netmask") == 0) {
949 dbus_message_iter_next(&subIter2);
950 dbus_message_iter_recurse(&subIter2, &subIter3);
951 __net_extract_ip(&subIter3, &net_info->SubnetMask);
952 net_info->BNetmask = TRUE;
953 } else if (strcmp(subKey, "Gateway") == 0) {
954 dbus_message_iter_next(&subIter2);
955 dbus_message_iter_recurse(&subIter2, &subIter3);
956 __net_extract_ip(&subIter3, &net_info->GatewayAddr);
957 net_info->BDefGateway = TRUE;
960 dbus_message_iter_next(&subIter1);
962 } else if (strcmp(key, "IPv4.Configuration") == 0) {
964 if (net_info->IpConfigType != NET_IP_CONFIG_TYPE_DYNAMIC &&
965 net_info->IpConfigType != NET_IP_CONFIG_TYPE_STATIC &&
966 net_info->IpConfigType != NET_IP_CONFIG_TYPE_OFF) {
968 dbus_message_iter_recurse(variant, &subIter1);
970 while (dbus_message_iter_get_arg_type(&subIter1) == DBUS_TYPE_DICT_ENTRY) {
971 dbus_message_iter_recurse(&subIter1, &subIter2);
972 dbus_message_iter_get_basic(&subIter2, &subKey);
974 if (strcmp(subKey, "Method") == 0) {
975 dbus_message_iter_next(&subIter2);
976 dbus_message_iter_recurse(&subIter2, &subIter3);
977 dbus_message_iter_get_basic(&subIter3, &value);
979 if(strcmp(value, "dhcp") == 0)
980 net_info->IpConfigType = NET_IP_CONFIG_TYPE_DYNAMIC;
981 else if(strcmp(value, "manual") == 0)
982 net_info->IpConfigType = NET_IP_CONFIG_TYPE_STATIC;
983 else if(strcmp(value, "off") == 0)
984 net_info->IpConfigType = NET_IP_CONFIG_TYPE_OFF;
986 } else if (strcmp(subKey, "Address") == 0 &&
987 net_info->IpAddr.Data.Ipv4.s_addr == 0) {
988 dbus_message_iter_next(&subIter2);
989 dbus_message_iter_recurse(&subIter2, &subIter3);
990 __net_extract_ip(&subIter3, &net_info->IpAddr);
991 } else if (strcmp(subKey, "Netmask") == 0 &&
992 net_info->SubnetMask.Data.Ipv4.s_addr == 0) {
993 dbus_message_iter_next(&subIter2);
994 dbus_message_iter_recurse(&subIter2, &subIter3);
995 __net_extract_ip(&subIter3, &net_info->SubnetMask);
996 net_info->BNetmask = TRUE;
997 } else if (strcmp(subKey, "Gateway") == 0 &&
998 net_info->GatewayAddr.Data.Ipv4.s_addr == 0) {
999 dbus_message_iter_next(&subIter2);
1000 dbus_message_iter_recurse(&subIter2, &subIter3);
1001 __net_extract_ip(&subIter3, &net_info->GatewayAddr);
1002 net_info->BDefGateway = TRUE;
1005 dbus_message_iter_next(&subIter1);
1008 } else if(strcmp(key, "Nameservers") == 0) {
1010 dbus_message_iter_recurse(variant, &subIter1);
1012 while (dbus_message_iter_get_arg_type(&subIter1) == DBUS_TYPE_STRING) {
1013 __net_extract_ip(&subIter1, &net_info->DnsAddr[dnsCount]);
1015 if (dnsCount >= NET_DNS_ADDR_MAX)
1018 dbus_message_iter_next(&subIter1);
1021 net_info->DnsCount = dnsCount;
1022 } else if (strcmp(key, "Nameservers.Configuration") == 0 && net_info->DnsCount == 0) {
1024 dbus_message_iter_recurse(variant, &subIter1);
1026 while (dbus_message_iter_get_arg_type(&subIter1) == DBUS_TYPE_STRING) {
1027 __net_extract_ip(&subIter1, &net_info->DnsAddr[dnsCount]);
1029 if(dnsCount >= NET_DNS_ADDR_MAX)
1032 dbus_message_iter_next(&subIter1);
1035 net_info->DnsCount = dnsCount;
1036 } else if (strcmp(key, "Domains") == 0) {
1037 } else if (strcmp(key, "Domains.Configuration") == 0) {
1038 } else if (strcmp(key, "Proxy") == 0) {
1039 dbus_message_iter_recurse(variant, &subIter1);
1041 while (dbus_message_iter_get_arg_type(&subIter1) == DBUS_TYPE_DICT_ENTRY) {
1042 dbus_message_iter_recurse(&subIter1, &subIter2);
1043 dbus_message_iter_get_basic(&subIter2, &subKey);
1045 if (strcmp(subKey, "Method") == 0) {
1046 dbus_message_iter_next(&subIter2);
1047 dbus_message_iter_recurse(&subIter2, &subIter3);
1048 dbus_message_iter_get_basic(&subIter3, &value);
1050 if (strcmp(value, "direct") == 0)
1051 net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
1052 else if (strcmp(value, "auto") == 0)
1053 net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
1054 else if (strcmp(value, "manual") == 0)
1055 net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
1057 net_info->ProxyMethod = NET_PROXY_TYPE_UNKNOWN;
1058 } else if (strcmp(subKey, "URL") == 0) {
1059 dbus_message_iter_next(&subIter2);
1060 dbus_message_iter_recurse(&subIter2, &subIter3);
1061 dbus_message_iter_get_basic(&subIter3, &value);
1064 g_strlcpy(net_info->ProxyAddr, value, NET_PROXY_LEN_MAX);
1066 } else if (strcmp(subKey, "Servers") == 0) {
1067 dbus_message_iter_next(&subIter2);
1068 dbus_message_iter_recurse(&subIter2, &subIter3);
1070 if (dbus_message_iter_get_arg_type(&subIter3) == DBUS_TYPE_ARRAY) {
1071 dbus_message_iter_recurse(&subIter3, &subIter4);
1073 if (dbus_message_iter_get_arg_type(&subIter4) == DBUS_TYPE_STRING) {
1074 dbus_message_iter_get_basic(&subIter4, &value);
1077 g_strlcpy(net_info->ProxyAddr, value, NET_PROXY_LEN_MAX);
1082 dbus_message_iter_next(&subIter1);
1084 } else if (strcmp(key, "Proxy.Configuration") == 0 &&
1085 (net_info->ProxyMethod == NET_PROXY_TYPE_UNKNOWN ||
1086 strlen(net_info->ProxyAddr) == 0)) {
1088 dbus_message_iter_recurse(variant, &subIter1);
1090 while (dbus_message_iter_get_arg_type(&subIter1) == DBUS_TYPE_DICT_ENTRY) {
1091 dbus_message_iter_recurse(&subIter1, &subIter2);
1092 dbus_message_iter_get_basic(&subIter2, &subKey);
1094 if (strcmp(subKey, "Method") == 0 &&
1095 net_info->ProxyMethod == NET_PROXY_TYPE_UNKNOWN) {
1096 dbus_message_iter_next(&subIter2);
1097 dbus_message_iter_recurse(&subIter2, &subIter3);
1098 dbus_message_iter_get_basic(&subIter3, &value);
1100 if (strcmp(value, "direct") == 0)
1101 net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
1102 else if (strcmp(value, "auto") == 0)
1103 net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
1104 else if (strcmp(value, "manual") == 0)
1105 net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
1107 net_info->ProxyMethod = NET_PROXY_TYPE_UNKNOWN;
1108 } else if (strcmp(subKey, "URL") == 0 && strlen(net_info->ProxyAddr) == 0) {
1109 dbus_message_iter_next(&subIter2);
1110 dbus_message_iter_recurse(&subIter2, &subIter3);
1111 dbus_message_iter_get_basic(&subIter3, &value);
1114 g_strlcpy(net_info->ProxyAddr, value, NET_PROXY_LEN_MAX+1);
1116 } else if (strcmp(subKey, "Servers") == 0 && strlen(net_info->ProxyAddr) == 0) {
1117 dbus_message_iter_next(&subIter2);
1118 dbus_message_iter_recurse(&subIter2, &subIter3);
1120 if (dbus_message_iter_get_arg_type(&subIter3) == DBUS_TYPE_ARRAY) {
1121 dbus_message_iter_recurse(&subIter3, &subIter4);
1123 if (dbus_message_iter_get_arg_type(&subIter4) == DBUS_TYPE_STRING) {
1124 dbus_message_iter_get_basic(&subIter4, &value);
1127 g_strlcpy(net_info->ProxyAddr, value, NET_PROXY_LEN_MAX+1);
1132 dbus_message_iter_next(&subIter1);
1134 } else if(strcmp(key, "Provider") == 0) {
1137 __NETWORK_FUNC_EXIT__;
1142 static wlan_eap_type_t __convert_eap_type_from_string(const char *eap_type)
1144 if (eap_type == NULL)
1145 return WLAN_SEC_EAP_TYPE_PEAP;
1146 else if (g_str_equal(eap_type, "peap") == TRUE)
1147 return WLAN_SEC_EAP_TYPE_PEAP;
1148 else if (g_str_equal(eap_type, "tls") == TRUE)
1149 return WLAN_SEC_EAP_TYPE_TLS;
1150 else if (g_str_equal(eap_type, "ttls") == TRUE)
1151 return WLAN_SEC_EAP_TYPE_TTLS;
1152 else if (g_str_equal(eap_type, "sim") == TRUE)
1153 return WLAN_SEC_EAP_TYPE_SIM;
1154 else if (g_str_equal(eap_type, "aka") == TRUE)
1155 return WLAN_SEC_EAP_TYPE_AKA;
1157 return WLAN_SEC_EAP_TYPE_PEAP;
1160 static wlan_eap_auth_type_t __convert_eap_auth_from_string(const char *eap_auth)
1162 if (eap_auth == NULL)
1163 return WLAN_SEC_EAP_AUTH_NONE;
1164 else if (g_str_equal(eap_auth, "NONE") == TRUE)
1165 return WLAN_SEC_EAP_AUTH_NONE;
1166 else if (g_str_equal(eap_auth, "PAP") == TRUE)
1167 return WLAN_SEC_EAP_AUTH_PAP;
1168 else if (g_str_equal(eap_auth, "MSCHAP") == TRUE)
1169 return WLAN_SEC_EAP_AUTH_MSCHAP;
1170 else if (g_str_equal(eap_auth, "MSCHAPV2") == TRUE)
1171 return WLAN_SEC_EAP_AUTH_MSCHAPV2;
1172 else if (g_str_equal(eap_auth, "GTC") == TRUE)
1173 return WLAN_SEC_EAP_AUTH_GTC;
1174 else if (g_str_equal(eap_auth, "MD5") == TRUE)
1175 return WLAN_SEC_EAP_AUTH_MD5;
1177 return WLAN_SEC_EAP_AUTH_NONE;
1180 static int __net_extract_wifi_info(DBusMessageIter *array, net_profile_info_t* ProfInfo)
1182 __NETWORK_FUNC_ENTER__;
1184 net_err_t Error = NET_ERR_NONE;
1185 net_wifi_profile_info_t *Wlan = &(ProfInfo->ProfileInfo.Wlan);
1187 while (dbus_message_iter_get_arg_type(array) == DBUS_TYPE_DICT_ENTRY) {
1188 DBusMessageIter entry, variant, sub_array;
1189 const char *key = NULL;
1190 const char *value = NULL;
1192 dbus_message_iter_recurse(array, &entry);
1193 dbus_message_iter_get_basic(&entry, &key);
1195 dbus_message_iter_next(&entry);
1196 dbus_message_iter_recurse(&entry, &variant);
1198 if (strcmp(key, "Mode") == 0) {
1199 dbus_message_iter_get_basic(&variant, &value);
1201 if (strcmp(value, "managed") == 0)
1202 Wlan->wlan_mode = NETPM_WLAN_CONNMODE_INFRA;
1203 else if (strcmp(value, "adhoc") == 0)
1204 Wlan->wlan_mode = NETPM_WLAN_CONNMODE_ADHOC;
1206 Wlan->wlan_mode = NETPM_WLAN_CONNMODE_AUTO;
1207 } else if (strcmp(key, "Security") == 0) {
1208 dbus_message_iter_recurse(&variant, &sub_array);
1210 while (dbus_message_iter_get_arg_type(&sub_array) == DBUS_TYPE_STRING) {
1211 dbus_message_iter_get_basic(&sub_array, &value);
1212 if (strcmp(value, "none") == 0 &&
1213 Wlan->security_info.sec_mode < WLAN_SEC_MODE_NONE)
1214 Wlan->security_info.sec_mode = WLAN_SEC_MODE_NONE;
1215 else if (strcmp(value, "wep") == 0 &&
1216 Wlan->security_info.sec_mode < WLAN_SEC_MODE_WEP)
1217 Wlan->security_info.sec_mode = WLAN_SEC_MODE_WEP;
1218 else if (strcmp(value, "psk") == 0 &&
1219 Wlan->security_info.sec_mode < WLAN_SEC_MODE_WPA_PSK)
1220 Wlan->security_info.sec_mode = WLAN_SEC_MODE_WPA_PSK;
1221 else if (strcmp(value, "ieee8021x") == 0 &&
1222 Wlan->security_info.sec_mode < WLAN_SEC_MODE_IEEE8021X)
1223 Wlan->security_info.sec_mode = WLAN_SEC_MODE_IEEE8021X;
1224 else if (strcmp(value, "wpa") == 0 &&
1225 Wlan->security_info.sec_mode < WLAN_SEC_MODE_WPA_PSK)
1226 Wlan->security_info.sec_mode = WLAN_SEC_MODE_WPA_PSK;
1227 else if (strcmp(value, "rsn") == 0 &&
1228 Wlan->security_info.sec_mode < WLAN_SEC_MODE_WPA_PSK)
1229 Wlan->security_info.sec_mode = WLAN_SEC_MODE_WPA2_PSK;
1230 else if (strcmp(value, "wps") == 0)
1231 Wlan->security_info.wps_support = TRUE;
1232 else if (Wlan->security_info.sec_mode < WLAN_SEC_MODE_NONE)
1233 Wlan->security_info.sec_mode = WLAN_SEC_MODE_NONE;
1235 dbus_message_iter_next(&sub_array);
1237 } else if (strcmp(key, "EncryptionMode") == 0) {
1238 dbus_message_iter_get_basic(&variant, &value);
1240 if (strcmp(value, "none") == 0)
1241 Wlan->security_info.enc_mode = WLAN_ENC_MODE_NONE;
1242 else if (strcmp(value, "wep") == 0)
1243 Wlan->security_info.enc_mode = WLAN_ENC_MODE_WEP;
1244 else if (strcmp(value, "tkip") == 0)
1245 Wlan->security_info.enc_mode = WLAN_ENC_MODE_TKIP;
1246 else if (strcmp(value, "aes") == 0)
1247 Wlan->security_info.enc_mode = WLAN_ENC_MODE_AES;
1248 else if (strcmp(value, "mixed") == 0)
1249 Wlan->security_info.enc_mode = WLAN_ENC_MODE_TKIP_AES_MIXED;
1251 dbus_message_iter_next(&sub_array);
1253 } else if (strcmp(key, "Strength") == 0) {
1254 dbus_message_iter_get_basic(&variant, &(Wlan->Strength));
1255 } else if (strcmp(key, "Name") == 0) {
1256 dbus_message_iter_get_basic(&variant, &value);
1259 g_strlcpy(Wlan->essid, value, NET_WLAN_ESSID_LEN);
1261 } else if (strcmp(key, "Passphrase") == 0) {
1262 wlan_security_info_t *security_info = &(Wlan->security_info);
1263 dbus_message_iter_get_basic(&variant, &value);
1265 if (security_info->sec_mode == WLAN_SEC_MODE_WEP && value != NULL)
1266 g_strlcpy(security_info->authentication.wep.wepKey,
1267 value, NETPM_WLAN_MAX_WEP_KEY_LEN+1);
1268 else if ((security_info->sec_mode == WLAN_SEC_MODE_WPA_PSK ||
1269 security_info->sec_mode == WLAN_SEC_MODE_WPA2_PSK) &&
1271 g_strlcpy(security_info->authentication.psk.pskKey,
1272 value, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN+1);
1274 } else if (strcmp(key, "PassphraseRequired") == 0) {
1277 dbus_message_iter_get_basic(&variant, &val);
1280 Wlan->PassphraseRequired = TRUE;
1282 Wlan->PassphraseRequired = FALSE;
1283 } else if (strcmp(key, "BSSID") == 0) {
1284 dbus_message_iter_get_basic(&variant, &value);
1287 g_strlcpy(Wlan->bssid, value, NET_MAX_MAC_ADDR_LEN);
1289 } else if (strcmp(key, "MaxRate") == 0) {
1290 unsigned int maxrate;
1291 dbus_message_iter_get_basic(&variant, &maxrate);
1293 Wlan->max_rate = maxrate;
1295 } else if (strcmp(key, "Frequency") == 0) {
1296 unsigned short frequency;
1297 dbus_message_iter_get_basic(&variant, &frequency);
1299 Wlan->frequency = (unsigned int)frequency;
1301 } else if (g_str_equal(key, "EAP") == TRUE) {
1302 dbus_message_iter_get_basic(&variant, &value);
1305 Wlan->security_info.authentication.eap.eap_type =
1306 __convert_eap_type_from_string(value);
1308 } else if (g_str_equal(key, "Phase2") == TRUE) {
1309 dbus_message_iter_get_basic(&variant, &value);
1312 Wlan->security_info.authentication.eap.eap_auth =
1313 __convert_eap_auth_from_string(value);
1315 } else if (g_str_equal(key, "Identity") == TRUE) {
1316 dbus_message_iter_get_basic(&variant, &value);
1319 g_strlcpy(Wlan->security_info.authentication.eap.username,
1320 value, NETPM_WLAN_USERNAME_LEN+1);
1322 } else if (g_str_equal(key, "Password") == TRUE) {
1323 dbus_message_iter_get_basic(&variant, &value);
1326 g_strlcpy(Wlan->security_info.authentication.eap.password,
1327 value, NETPM_WLAN_PASSWORD_LEN+1);
1329 } else if (g_str_equal(key, "CACertFile") == TRUE) {
1330 dbus_message_iter_get_basic(&variant, &value);
1333 g_strlcpy(Wlan->security_info.authentication.eap.ca_cert_filename,
1334 value, NETPM_WLAN_CA_CERT_FILENAME_LEN+1);
1336 } else if (g_str_equal(key, "ClientCertFile") == TRUE) {
1337 dbus_message_iter_get_basic(&variant, &value);
1340 g_strlcpy(Wlan->security_info.authentication.eap.client_cert_filename,
1341 value, NETPM_WLAN_CLIENT_CERT_FILENAME_LEN+1);
1343 } else if (g_str_equal(key, "PrivateKeyFile") == TRUE) {
1344 dbus_message_iter_get_basic(&variant, &value);
1347 g_strlcpy(Wlan->security_info.authentication.eap.private_key_filename,
1348 value, NETPM_WLAN_PRIVATE_KEY_FILENAME_LEN+1);
1350 } else if (g_str_equal(key, "PrivateKeyPassphrase") == TRUE) {
1351 dbus_message_iter_get_basic(&variant, &value);
1354 g_strlcpy(Wlan->security_info.authentication.eap.private_key_passwd,
1355 value, NETPM_WLAN_PRIVATE_KEY_PASSWD_LEN+1);
1358 __net_extract_common_info(key, &variant, ProfInfo);
1361 dbus_message_iter_next(array);
1364 __NETWORK_FUNC_EXIT__;
1369 static int __net_extract_mobile_info(DBusMessageIter *array, net_profile_info_t* ProfInfo)
1371 net_err_t Error = NET_ERR_NONE;
1373 __NETWORK_FUNC_ENTER__;
1375 while (dbus_message_iter_get_arg_type(array) == DBUS_TYPE_DICT_ENTRY) {
1376 DBusMessageIter entry, variant;
1377 const char *key = NULL;
1378 const char *value = NULL;
1380 dbus_message_iter_recurse(array, &entry);
1381 dbus_message_iter_get_basic(&entry, &key);
1383 dbus_message_iter_next(&entry);
1384 dbus_message_iter_recurse(&entry, &variant);
1386 if (strcmp(key, "Mode") == 0) {
1387 dbus_message_iter_get_basic(&variant, &value);
1389 if (strcmp(value, "gprs") == 0)
1390 ProfInfo->ProfileInfo.Pdp.ProtocolType = NET_PDP_TYPE_GPRS;
1391 else if (strcmp(value, "edge") == 0)
1392 ProfInfo->ProfileInfo.Pdp.ProtocolType = NET_PDP_TYPE_EDGE;
1393 else if (strcmp(value, "umts") == 0)
1394 ProfInfo->ProfileInfo.Pdp.ProtocolType = NET_PDP_TYPE_UMTS;
1396 ProfInfo->ProfileInfo.Pdp.ProtocolType = NET_PDP_TYPE_NONE;
1397 } else if (strcmp(key, "Roaming") == 0) {
1400 dbus_message_iter_get_basic(&variant, &val);
1403 ProfInfo->ProfileInfo.Pdp.Roaming = TRUE;
1405 ProfInfo->ProfileInfo.Pdp.Roaming = FALSE;
1406 } else if (strcmp(key, "SetupRequired") == 0) {
1409 dbus_message_iter_get_basic(&variant, &val);
1412 ProfInfo->ProfileInfo.Pdp.SetupRequired = TRUE;
1414 ProfInfo->ProfileInfo.Pdp.SetupRequired = FALSE;
1416 __net_extract_common_info(key, &variant, ProfInfo);
1418 dbus_message_iter_next(array);
1421 /* Get Specific info from telephony service */
1422 net_telephony_profile_info_t telephony_profinfo;
1423 net_profile_name_t PdpProfName;
1425 PdpProfName.ProfileName[0] = '\0';
1427 __net_telephony_init_profile_info(&telephony_profinfo);
1429 /* Find matching profile in telephony service */
1430 Error = __net_telephony_search_pdp_profile(ProfInfo->ProfileName, &PdpProfName);
1432 if (Error == NET_ERR_NONE && strlen(PdpProfName.ProfileName) > 0) {
1433 /* Get profile info from telephony service */
1434 Error = __net_telephony_get_profile_info(&PdpProfName, &telephony_profinfo);
1436 if (Error == NET_ERR_NONE) {
1437 ProfInfo->ProfileInfo.Pdp.ServiceType = telephony_profinfo.ServiceType;
1439 if (strlen(telephony_profinfo.Apn) > 0)
1440 g_strlcpy(ProfInfo->ProfileInfo.Pdp.Apn,
1441 telephony_profinfo.Apn, NET_PDP_APN_LEN_MAX);
1443 if (strlen(telephony_profinfo.ProxyAddr) > 0)
1444 g_strlcpy(ProfInfo->ProfileInfo.Pdp.net_info.ProxyAddr,
1445 telephony_profinfo.ProxyAddr, NET_PROXY_LEN_MAX);
1447 if (strlen(telephony_profinfo.HomeURL) > 0)
1448 g_strlcpy(ProfInfo->ProfileInfo.Pdp.HomeURL,
1449 telephony_profinfo.HomeURL, NET_HOME_URL_LEN_MAX);
1451 ProfInfo->ProfileInfo.Pdp.AuthInfo.AuthType = telephony_profinfo.AuthInfo.AuthType;
1453 if (strlen(telephony_profinfo.AuthInfo.UserName) > 0)
1454 g_strlcpy(ProfInfo->ProfileInfo.Pdp.AuthInfo.UserName,
1455 telephony_profinfo.AuthInfo.UserName,
1456 NET_PDP_AUTH_USERNAME_LEN_MAX);
1458 if (strlen(telephony_profinfo.AuthInfo.Password) > 0)
1459 g_strlcpy(ProfInfo->ProfileInfo.Pdp.AuthInfo.Password,
1460 telephony_profinfo.AuthInfo.Password,
1461 NET_PDP_AUTH_PASSWORD_LEN_MAX);
1465 __NETWORK_FUNC_EXIT__;
1470 static int __net_extract_ethernet_info(DBusMessageIter *array, net_profile_info_t* ProfInfo)
1472 net_err_t Error = NET_ERR_NONE;
1474 __NETWORK_FUNC_ENTER__;
1476 while (dbus_message_iter_get_arg_type(array) == DBUS_TYPE_DICT_ENTRY) {
1477 DBusMessageIter entry, variant;
1478 const char *key = NULL;
1480 dbus_message_iter_recurse(array, &entry);
1481 dbus_message_iter_get_basic(&entry, &key);
1483 dbus_message_iter_next(&entry);
1484 dbus_message_iter_recurse(&entry, &variant);
1486 __net_extract_common_info(key, &variant, ProfInfo);
1488 dbus_message_iter_next(array);
1491 __NETWORK_FUNC_EXIT__;
1496 static int __net_extract_service_info(const char* ProfileName, DBusMessage *message, net_profile_info_t* ProfInfo)
1498 __NETWORK_FUNC_ENTER__;
1500 net_err_t Error = NET_ERR_NONE;
1501 DBusMessageIter iter, array;
1502 net_device_t profileType = NET_DEVICE_UNKNOWN;
1504 dbus_message_iter_init(message, &iter);
1505 dbus_message_iter_recurse(&iter, &array);
1507 while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_DICT_ENTRY) {
1508 DBusMessageIter entry, dict;
1509 const char *key = NULL;
1510 const char *temp = NULL;
1512 dbus_message_iter_recurse(&array, &entry);
1513 dbus_message_iter_get_basic(&entry, &key);
1515 if (strcmp(key, "Type") == 0) {
1516 dbus_message_iter_next(&entry);
1517 dbus_message_iter_recurse(&entry, &dict);
1518 dbus_message_iter_get_basic(&dict, &temp);
1519 if (strcmp(temp, "wifi") == 0)
1520 profileType = NET_DEVICE_WIFI;
1521 else if (strcmp(temp, "cellular") == 0)
1522 profileType = NET_DEVICE_CELLULAR;
1523 else if (strcmp(temp, "ethernet") == 0)
1524 profileType = NET_DEVICE_ETHERNET;
1529 dbus_message_iter_next(&array);
1532 dbus_message_iter_init(message, &iter);
1533 dbus_message_iter_recurse(&iter, &array);
1535 if (profileType == NET_DEVICE_WIFI) {
1536 if ((Error = __net_pm_init_profile_info(NET_DEVICE_WIFI, ProfInfo)) != NET_ERR_NONE) {
1537 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't init profile\n");
1538 __NETWORK_FUNC_EXIT__;
1542 ProfInfo->profile_type = NET_DEVICE_WIFI;
1543 g_strlcpy(ProfInfo->ProfileName, ProfileName, NET_PROFILE_NAME_LEN_MAX);
1544 g_strlcpy(ProfInfo->ProfileInfo.Wlan.net_info.ProfileName,
1545 ProfileName, NET_PROFILE_NAME_LEN_MAX);
1547 Error = __net_extract_wifi_info(&array, ProfInfo);
1549 } else if (profileType == NET_DEVICE_CELLULAR) {
1550 if ((Error = __net_pm_init_profile_info(NET_DEVICE_CELLULAR, ProfInfo)) != NET_ERR_NONE) {
1551 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't init profile\n");
1552 __NETWORK_FUNC_EXIT__;
1556 ProfInfo->profile_type = NET_DEVICE_CELLULAR;
1557 g_strlcpy(ProfInfo->ProfileName, ProfileName, NET_PROFILE_NAME_LEN_MAX);
1558 g_strlcpy(ProfInfo->ProfileInfo.Pdp.net_info.ProfileName,
1559 ProfileName, NET_PROFILE_NAME_LEN_MAX);
1561 Error = __net_extract_mobile_info(&array, ProfInfo);
1562 } else if (profileType == NET_DEVICE_ETHERNET) {
1563 if ((Error = __net_pm_init_profile_info(NET_DEVICE_ETHERNET, ProfInfo)) != NET_ERR_NONE) {
1564 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't init profile\n");
1565 __NETWORK_FUNC_EXIT__;
1569 ProfInfo->profile_type = NET_DEVICE_ETHERNET;
1570 g_strlcpy(ProfInfo->ProfileName, ProfileName, NET_PROFILE_NAME_LEN_MAX);
1571 g_strlcpy(ProfInfo->ProfileInfo.Ethernet.net_info.ProfileName,
1572 ProfileName, NET_PROFILE_NAME_LEN_MAX);
1574 Error = __net_extract_ethernet_info(&array, ProfInfo);
1576 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Not supported profile type\n");
1577 __NETWORK_FUNC_EXIT__;
1578 return NET_ERR_NOT_SUPPORTED;
1581 if (Error != NET_ERR_NONE) {
1582 NETWORK_LOG(NETWORK_EXCEPTION,
1583 "Error!!! Can't extract service information from received message\n");
1584 __NETWORK_FUNC_EXIT__;
1588 __NETWORK_FUNC_EXIT__;
1593 static int __net_get_profile_info(const char* ProfileName, net_profile_info_t* ProfInfo)
1595 __NETWORK_FUNC_ENTER__;
1597 net_err_t Error = NET_ERR_NONE;
1598 DBusMessage *message = NULL;
1600 message = _net_invoke_dbus_method(CONNMAN_SERVICE, ProfileName,
1601 CONNMAN_SERVICE_INTERFACE, "GetProperties", NULL, &Error);
1603 if (message == NULL) {
1604 NETWORK_LOG(NETWORK_ERROR, "Error!!! Failed to get service(profile) information\n");
1608 Error = __net_extract_service_info(ProfileName, message, ProfInfo);
1609 dbus_message_unref(message);
1611 __NETWORK_FUNC_EXIT__;
1616 static int __net_set_profile_property(char* path, char* key, char* value)
1618 __NETWORK_FUNC_ENTER__;
1620 net_err_t Error = NET_ERR_NONE;
1621 DBusMessage *message = NULL;
1623 char* param_array[] = {NULL, NULL, NULL};
1625 param_array[0] = key;
1626 param_array[1] = value;
1628 message = _net_invoke_dbus_method(CONNMAN_SERVICE, path,
1629 CONNMAN_SERVICE_INTERFACE, "SetProperty", param_array, &Error);
1631 if (message == NULL) {
1632 NETWORK_LOG(NETWORK_ERROR, "Error!!! _net_invoke_dbus_method failed\n");
1633 __NETWORK_FUNC_EXIT__;
1637 dbus_message_unref(message);
1638 __NETWORK_FUNC_EXIT__;
1640 return NET_ERR_NONE;
1643 static int __net_modify_wlan_profile_info(const char* ProfileName,
1644 net_profile_info_t* ProfInfo, net_profile_info_t* exProfInfo)
1646 __NETWORK_FUNC_ENTER__;
1648 net_err_t Error = NET_ERR_NONE;
1650 char profilePath[NET_PROFILE_NAME_LEN_MAX+1] = "";
1651 char propertyInfo[128] = "";
1652 char keyString[64] = "";
1654 wlan_security_info_t *security_info = &(ProfInfo->ProfileInfo.Wlan.security_info);
1655 wlan_security_info_t *ex_security_info = &(exProfInfo->ProfileInfo.Wlan.security_info);
1657 net_dev_info_t *net_info = &(ProfInfo->ProfileInfo.Wlan.net_info);
1658 net_dev_info_t *ex_net_info = &(exProfInfo->ProfileInfo.Wlan.net_info);
1660 snprintf(profilePath, NET_PROFILE_NAME_LEN_MAX+1, "%s", ProfileName);
1662 /* Compare and Set 'Passphrase' */
1663 if (ex_security_info->sec_mode == WLAN_SEC_MODE_WEP) {
1664 if (strcmp(security_info->authentication.wep.wepKey
1665 , ex_security_info->authentication.wep.wepKey) != 0) {
1667 snprintf(keyString, 64, "string:Passphrase");
1668 snprintf(propertyInfo, 128, "variant:string:%s",
1669 security_info->authentication.wep.wepKey);
1670 Error = __net_set_profile_property(profilePath, keyString, propertyInfo);
1671 if (Error != NET_ERR_NONE) {
1672 NETWORK_LOG(NETWORK_ERROR,
1673 "Error!!! __net_set_profile_property() failed\n");
1674 __NETWORK_FUNC_EXIT__;
1678 } else if (ex_security_info->sec_mode == WLAN_SEC_MODE_WPA_PSK ||
1679 ex_security_info->sec_mode == WLAN_SEC_MODE_WPA2_PSK) {
1681 if (strcmp(security_info->authentication.psk.pskKey,
1682 ex_security_info->authentication.psk.pskKey) != 0) {
1684 snprintf(keyString, 64, "string:Passphrase");
1685 snprintf(propertyInfo, 128, "variant:string:%s",
1686 security_info->authentication.psk.pskKey);
1687 Error = __net_set_profile_property(profilePath, keyString, propertyInfo);
1689 if (Error != NET_ERR_NONE) {
1690 __NETWORK_FUNC_EXIT__;
1696 /* Compare and Set 'Proxy' */
1697 if ((ex_net_info->ProxyMethod != net_info->ProxyMethod) ||
1698 (strcmp(ex_net_info->ProxyAddr, net_info->ProxyAddr) != 0)) {
1700 Error = _net_dbus_set_proxy(ProfInfo, profilePath);
1702 if (Error != NET_ERR_NONE) {
1703 __NETWORK_FUNC_EXIT__;
1708 /* Compare and Set 'IPv4 addresses' */
1709 if ((ex_net_info->IpConfigType != net_info->IpConfigType) ||
1710 (net_info->IpConfigType == NET_IP_CONFIG_TYPE_STATIC &&
1711 (net_info->IpAddr.Data.Ipv4.s_addr != ex_net_info->IpAddr.Data.Ipv4.s_addr ||
1712 net_info->SubnetMask.Data.Ipv4.s_addr != ex_net_info->SubnetMask.Data.Ipv4.s_addr ||
1713 net_info->GatewayAddr.Data.Ipv4.s_addr != ex_net_info->GatewayAddr.Data.Ipv4.s_addr))) {
1715 Error = _net_dbus_set_profile_ipv4(ProfInfo, profilePath);
1717 if (Error != NET_ERR_NONE) {
1718 NETWORK_LOG(NETWORK_ERROR, "Error!!! Can't set IPv4\n");
1719 __NETWORK_FUNC_EXIT__;
1724 /* Compare and Set 'DNS addresses' */
1725 if (net_info->IpConfigType == NET_IP_CONFIG_TYPE_STATIC) {
1726 for (i = 0;i < net_info->DnsCount;i++) {
1727 if(i >= NET_DNS_ADDR_MAX) {
1728 net_info->DnsCount = NET_DNS_ADDR_MAX;
1732 if (net_info->DnsAddr[i].Data.Ipv4.s_addr !=
1733 ex_net_info->DnsAddr[i].Data.Ipv4.s_addr) break;
1736 if (i < net_info->DnsCount) {
1737 Error = _net_dbus_set_profile_dns(ProfInfo, profilePath);
1739 if (Error != NET_ERR_NONE) {
1740 NETWORK_LOG(NETWORK_ERROR, "Error!!! Can't set dns\n");
1741 __NETWORK_FUNC_EXIT__;
1747 __NETWORK_FUNC_EXIT__;
1748 return NET_ERR_NONE;
1751 static int __net_wifi_delete_profile(net_profile_name_t* WifiProfName)
1753 __NETWORK_FUNC_ENTER__;
1755 net_err_t Error = NET_ERR_NONE;
1756 DBusMessage *message = NULL;
1758 message = _net_invoke_dbus_method(CONNMAN_SERVICE, WifiProfName->ProfileName,
1759 CONNMAN_SERVICE_INTERFACE, "Remove", NULL, &Error);
1761 if (message == NULL) {
1762 NETWORK_LOG(NETWORK_ERROR, "Error!!! Failed to Remove service(profile)\n");
1766 dbus_message_unref(message);
1768 __NETWORK_FUNC_EXIT__;
1773 static int __net_telephony_add_profile(net_profile_info_t *ProfInfo, net_service_type_t network_type)
1775 __NETWORK_FUNC_ENTER__;
1777 net_err_t Error = NET_ERR_NONE;
1779 ProfInfo->ProfileInfo.Pdp.ServiceType = network_type;
1781 Error = _net_dbus_add_pdp_profile(ProfInfo);
1782 if (Error != NET_ERR_NONE) {
1783 NETWORK_LOG(NETWORK_HIGH, "_net_dbus_add_pdp_profile() failed\n");
1784 __NETWORK_FUNC_EXIT__;
1788 __NETWORK_FUNC_EXIT__;
1789 return NET_ERR_NONE;
1792 static int __net_telephony_modify_profile(const char *ProfileName,
1793 net_profile_info_t *ProfInfo, net_profile_info_t* exProfInfo)
1795 __NETWORK_FUNC_ENTER__;
1797 net_err_t Error = NET_ERR_NONE;
1798 net_profile_name_t telephony_profile;
1799 char connman_profile[NET_PROFILE_NAME_LEN_MAX+1] = "";
1801 g_strlcpy(connman_profile, ProfileName, NET_PROFILE_NAME_LEN_MAX+1);
1802 ProfInfo->ProfileInfo.Pdp.ServiceType = exProfInfo->ProfileInfo.Pdp.ServiceType;
1804 Error = __net_telephony_search_pdp_profile((char*)connman_profile, &telephony_profile);
1805 if (Error != NET_ERR_NONE) {
1806 NETWORK_LOG(NETWORK_HIGH, "__net_telephony_search_pdp_profile() failed\n");
1807 __NETWORK_FUNC_EXIT__;
1811 Error = _net_dbus_modify_pdp_profile(ProfInfo, (char*)telephony_profile.ProfileName);
1812 if (Error != NET_ERR_NONE) {
1813 NETWORK_LOG(NETWORK_HIGH, "_net_dbus_modify_pdp_profile() failed\n");
1814 __NETWORK_FUNC_EXIT__;
1818 __NETWORK_FUNC_EXIT__;
1823 static int __net_telephony_delete_profile(net_profile_name_t* PdpProfName)
1825 __NETWORK_FUNC_ENTER__;
1827 net_err_t Error = NET_ERR_NONE;
1828 DBusMessage *message = NULL;
1830 message = _net_invoke_dbus_method(TELEPHONY_SERVCE, PdpProfName->ProfileName,
1831 TELEPHONY_PROFILE_INTERFACE, "RemoveProfile", NULL, &Error);
1833 if (message == NULL) {
1834 NETWORK_LOG(NETWORK_ERROR, "Error!!! Failed to Remove service(profile)\n");
1839 DBusMessageIter iter;
1840 int remove_result = 0;
1842 dbus_message_iter_init(message, &iter);
1843 if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_BOOLEAN) {
1844 dbus_message_iter_get_basic(&iter, &remove_result);
1845 NETWORK_LOG(NETWORK_HIGH, "Profile remove result : %d\n", remove_result);
1849 Error = NET_ERR_NONE;
1851 Error = NET_ERR_UNKNOWN;
1853 dbus_message_unref(message);
1856 __NETWORK_FUNC_EXIT__;
1860 static int __net_extract_defult_device(DBusMessageIter* dict, net_device_t *device_type)
1862 __NETWORK_FUNC_ENTER__;
1864 net_err_t Error = NET_ERR_NONE;
1866 if (dict == NULL || device_type == NULL) {
1867 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid prarameter \n");
1868 __NETWORK_FUNC_EXIT__;
1869 return NET_ERR_INVALID_PARAM;
1872 *device_type = NET_DEVICE_UNKNOWN;
1874 while (dbus_message_iter_get_arg_type(dict) == DBUS_TYPE_DICT_ENTRY) {
1875 DBusMessageIter keyValue, value;
1876 const char *key = NULL;
1877 const char *objPath = NULL;
1879 dbus_message_iter_recurse(dict, &keyValue);
1880 dbus_message_iter_get_basic(&keyValue, &key);
1882 if (strcmp(key, "DefaultTechnology") == 0) {
1883 dbus_message_iter_next(&keyValue);
1884 dbus_message_iter_recurse(&keyValue, &value);
1886 if (dbus_message_iter_get_arg_type(&value) != DBUS_TYPE_STRING)
1889 dbus_message_iter_get_basic(&value, &objPath);
1890 if (objPath == NULL || strlen(objPath) == 0)
1893 if (strcmp(objPath, "wifi") == 0)
1894 *device_type = NET_DEVICE_WIFI;
1895 else if (strcmp(objPath, "cellular") == 0)
1896 *device_type = NET_DEVICE_CELLULAR;
1897 else if (strcmp(objPath, "ethernet") == 0)
1898 *device_type = NET_DEVICE_ETHERNET;
1902 dbus_message_iter_next(dict);
1905 if (*device_type == NET_DEVICE_UNKNOWN)
1906 Error = NET_ERR_NO_SERVICE;
1908 __NETWORK_FUNC_EXIT__;
1912 static int __net_extract_defult_profile(DBusMessageIter* iter, net_profile_name_t *profile_name)
1914 __NETWORK_FUNC_ENTER__;
1916 net_err_t Error = NET_ERR_NONE;
1917 net_device_t device_type = NET_DEVICE_UNKNOWN;
1918 DBusMessageIter dict;
1919 const char net_suffix[] = "_1";
1920 char *suffix = NULL;
1921 const char *objPath = NULL;
1923 if (iter == NULL || profile_name == NULL) {
1924 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid parameter \n");
1925 __NETWORK_FUNC_EXIT__;
1926 return NET_ERR_INVALID_PARAM;
1929 memset(profile_name, 0, sizeof(net_profile_name_t));
1931 dbus_message_iter_recurse(iter, &dict);
1932 Error = __net_extract_defult_device(&dict, &device_type);
1934 if (Error != NET_ERR_NONE) {
1935 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! There is no Default Technology\n");
1936 __NETWORK_FUNC_EXIT__;
1940 dbus_message_iter_recurse(iter, &dict);
1941 while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) {
1942 DBusMessageIter keyValue, array, value;
1943 const char *key = NULL;
1945 dbus_message_iter_recurse(&dict, &keyValue);
1946 dbus_message_iter_get_basic(&keyValue, &key);
1948 if (strcmp(key, "Services") == 0) {
1949 dbus_message_iter_next(&keyValue);
1950 dbus_message_iter_recurse(&keyValue, &array);
1952 if (dbus_message_iter_get_arg_type(&array) != DBUS_TYPE_ARRAY) {
1953 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't get service list\n");
1954 __NETWORK_FUNC_EXIT__;
1955 return NET_ERR_NO_SERVICE;
1958 dbus_message_iter_recurse(&array, &value);
1960 while (dbus_message_iter_get_arg_type(&value) == DBUS_TYPE_OBJECT_PATH) {
1961 dbus_message_iter_get_basic(&value, &objPath);
1963 if (device_type == NET_DEVICE_CELLULAR &&
1964 g_str_has_prefix(objPath, CONNMAN_CELLULAR_SERVICE_PROFILE_PREFIX) == TRUE) {
1965 suffix = strrchr(objPath, '_');
1967 if (strcmp(suffix, net_suffix) == 0)
1969 } else if (device_type == NET_DEVICE_WIFI &&
1970 g_str_has_prefix(objPath, CONNMAN_WIFI_SERVICE_PROFILE_PREFIX) == TRUE)
1972 else if (device_type == NET_DEVICE_ETHERNET &&
1973 g_str_has_prefix(objPath, CONNMAN_ETHERNET_SERVICE_PROFILE_PREFIX) == TRUE)
1978 dbus_message_iter_next(&value);
1980 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't find default service\n");
1981 __NETWORK_FUNC_EXIT__;
1982 return NET_ERR_NO_SERVICE;
1984 dbus_message_iter_next(&dict);
1987 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Can't find default service\n");
1988 Error = NET_ERR_NO_SERVICE;
1991 if (Error == NET_ERR_NONE && objPath != NULL) {
1992 g_strlcpy(profile_name->ProfileName, objPath, NET_PROFILE_NAME_LEN_MAX);
1993 NETWORK_LOG(NETWORK_HIGH, "Default profile found : %s\n", profile_name->ProfileName);
1996 __NETWORK_FUNC_EXIT__;
2001 int _net_check_profile_name(const char* ProfileName)
2003 __NETWORK_FUNC_ENTER__;
2005 const char *profileHeader = CONNMAN_PATH"/service/";
2009 if (ProfileName == NULL || strlen(ProfileName) <= strlen(profileHeader)) {
2010 NETWORK_LOG(NETWORK_ERROR, "Error!!! Profile name is invalid\n");
2011 __NETWORK_FUNC_EXIT__;
2012 return NET_ERR_INVALID_PARAM;
2015 stringLen = strlen(ProfileName);
2017 if (strncmp(profileHeader, ProfileName, strlen(profileHeader)) == 0) {
2018 for (i = 0;i < stringLen;i++) {
2019 if (isgraph(ProfileName[i]) == 0) {
2020 NETWORK_LOG(NETWORK_ERROR, "Error!!! Profile name is invalid\n");
2021 __NETWORK_FUNC_EXIT__;
2022 return NET_ERR_INVALID_PARAM;
2026 NETWORK_LOG(NETWORK_ERROR, "Error!!! Profile name is invalid\n");
2027 __NETWORK_FUNC_EXIT__;
2028 return NET_ERR_INVALID_PARAM;
2031 __NETWORK_FUNC_EXIT__;
2032 return NET_ERR_NONE;
2035 int _net_get_profile_list(net_device_t device_type, net_profile_info_t** profile_info, int* profile_count)
2037 __NETWORK_FUNC_ENTER__;
2039 net_err_t Error = NET_ERR_NONE;
2040 DBusMessage *message = NULL;
2042 message = _net_invoke_dbus_method(CONNMAN_SERVICE, CONNMAN_MANAGER_PATH,
2043 CONNMAN_MANAGER_INTERFACE, "GetProperties", NULL, &Error);
2044 if (message == NULL) {
2045 NETWORK_LOG(NETWORK_ERROR, "Error!!! Failed to get service(profile) list\n");
2046 __NETWORK_FUNC_EXIT__;
2050 switch (device_type) {
2051 case NET_DEVICE_CELLULAR:
2052 case NET_DEVICE_WIFI:
2053 case NET_DEVICE_ETHERNET:
2054 Error = __net_extract_services(message, device_type, profile_info, profile_count);
2057 Error = NET_ERR_UNKNOWN;
2061 NETWORK_LOG(NETWORK_HIGH, "Error = %d\n", Error);
2062 dbus_message_unref(message);
2064 __NETWORK_FUNC_EXIT__;
2068 int _net_get_service_profile(net_service_type_t service_type, net_profile_name_t *profile_name)
2070 __NETWORK_FUNC_ENTER__;
2072 net_err_t Error = NET_ERR_NONE;
2073 DBusMessage *message = NULL;
2074 DBusMessageIter iter, dict;
2075 network_services_list_t service_info = {0,};
2078 message = _net_invoke_dbus_method(CONNMAN_SERVICE, CONNMAN_MANAGER_PATH,
2079 CONNMAN_MANAGER_INTERFACE, "GetProperties", NULL, &Error);
2080 if (message == NULL) {
2081 NETWORK_LOG(NETWORK_ERROR, "Error!!! Failed to get service(profile) list\n");
2082 __NETWORK_FUNC_EXIT__;
2086 dbus_message_iter_init(message, &iter);
2087 dbus_message_iter_recurse(&iter, &dict);
2089 Error = __net_extract_mobile_services(message, &dict, &service_info, service_type);
2091 if (Error != NET_ERR_NONE)
2094 if (service_info.num_of_services > 0) {
2095 memcpy(profile_name->ProfileName, service_info.ProfileName[0], NET_PROFILE_NAME_LEN_MAX);
2096 (profile_name->ProfileName)[NET_PROFILE_NAME_LEN_MAX] = '\0';
2098 Error = NET_ERR_NO_SERVICE;
2100 for (i = 0;i < service_info.num_of_services;i++)
2101 NET_MEMFREE(service_info.ProfileName[i]);
2104 dbus_message_unref(message);
2106 __NETWORK_FUNC_EXIT__;
2110 int _net_get_default_profile_info(net_profile_info_t *profile_info)
2112 __NETWORK_FUNC_ENTER__;
2114 net_err_t Error = NET_ERR_NONE;
2115 DBusMessage *message = NULL;
2116 DBusMessageIter iter;
2117 net_profile_name_t profile_name;
2118 const char *prof_name = NULL;
2120 message = _net_invoke_dbus_method(CONNMAN_SERVICE, CONNMAN_MANAGER_PATH,
2121 CONNMAN_MANAGER_INTERFACE, "GetProperties", NULL, &Error);
2122 if (message == NULL) {
2123 NETWORK_LOG(NETWORK_ERROR, "Error!!! Failed to get service(profile) list\n");
2124 __NETWORK_FUNC_EXIT__;
2128 dbus_message_iter_init(message, &iter);
2129 Error = __net_extract_defult_profile(&iter, &profile_name);
2131 if (Error != NET_ERR_NONE)
2134 prof_name = (const char*)profile_name.ProfileName;
2135 Error = __net_get_profile_info(prof_name, profile_info);
2138 dbus_message_unref(message);
2140 __NETWORK_FUNC_EXIT__;
2144 /*****************************************************************************
2145 * ConnMan Wi-Fi Client Interface Sync API Definition
2146 *****************************************************************************/
2149 EXPORT_API int net_add_profile(net_service_type_t network_type, net_profile_info_t *prof_info)
2151 net_err_t Error = NET_ERR_NONE;
2153 __NETWORK_FUNC_ENTER__;
2155 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
2156 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
2157 __NETWORK_FUNC_EXIT__;
2158 return NET_ERR_APP_NOT_REGISTERED;
2161 if (prof_info == NULL ||
2162 (network_type != NET_SERVICE_INTERNET &&
2163 network_type != NET_SERVICE_MMS &&
2164 network_type != NET_SERVICE_WAP)) {
2165 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid Parameter\n");
2166 __NETWORK_FUNC_EXIT__;
2167 return NET_ERR_INVALID_PARAM;
2170 Error = __net_telephony_add_profile(prof_info, network_type);
2172 if (Error != NET_ERR_NONE) {
2173 NETWORK_LOG(NETWORK_ERROR, "Error!!! failed to add service(profile). Error [%s]\n",
2174 _net_print_error(Error));
2175 __NETWORK_FUNC_EXIT__;
2179 __NETWORK_FUNC_EXIT__;
2184 EXPORT_API int net_delete_profile(const char* profile_name)
2186 __NETWORK_FUNC_ENTER__;
2188 net_err_t Error = NET_ERR_NONE;
2189 net_profile_name_t pdp_prof_name;
2190 net_profile_name_t wifi_prof_name;
2191 net_profile_info_t prof_info;
2193 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
2194 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
2195 __NETWORK_FUNC_EXIT__;
2196 return NET_ERR_APP_NOT_REGISTERED;
2199 if (_net_check_profile_name(profile_name) != NET_ERR_NONE) {
2200 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid Parameter\n");
2201 __NETWORK_FUNC_EXIT__;
2202 return NET_ERR_INVALID_PARAM;
2205 Error = __net_get_profile_info(profile_name, &prof_info);
2206 if (Error != NET_ERR_NONE) {
2207 NETWORK_LOG(NETWORK_ERROR,
2208 "Error!!! failed to get service(profile) information. Error [%s]\n",
2209 _net_print_error(Error));
2210 __NETWORK_FUNC_EXIT__;
2214 g_strlcpy(wifi_prof_name.ProfileName, profile_name, NET_PROFILE_NAME_LEN_MAX + 1);
2216 if (prof_info.profile_type == NET_DEVICE_WIFI) {
2217 Error = __net_wifi_delete_profile(&wifi_prof_name);
2218 if (Error != NET_ERR_NONE) {
2219 NETWORK_LOG(NETWORK_ERROR,
2220 "Error!!! failed to delete service(profile). Error [%s]\n",
2221 _net_print_error(Error));
2222 __NETWORK_FUNC_EXIT__;
2225 } else if (prof_info.profile_type == NET_DEVICE_CELLULAR) {
2226 Error = __net_telephony_search_pdp_profile(wifi_prof_name.ProfileName, &pdp_prof_name);
2227 if (Error != NET_ERR_NONE) {
2228 NETWORK_LOG(NETWORK_ERROR,
2229 "Error!!! failed to get service(profile) information. Error [%s]\n",
2230 _net_print_error(Error));
2231 __NETWORK_FUNC_EXIT__;
2235 Error = __net_telephony_delete_profile(&pdp_prof_name);
2236 if (Error != NET_ERR_NONE) {
2237 NETWORK_LOG(NETWORK_ERROR,
2238 "Error!!! failed to delete service(profile). Error [%s]\n",
2239 _net_print_error(Error));
2240 __NETWORK_FUNC_EXIT__;
2244 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid Parameter\n");
2245 __NETWORK_FUNC_EXIT__;
2246 return NET_ERR_INVALID_PARAM;
2249 __NETWORK_FUNC_EXIT__;
2250 return NET_ERR_NONE;
2254 EXPORT_API int net_get_profile_info(const char *profile_name, net_profile_info_t *prof_info)
2256 __NETWORK_FUNC_ENTER__;
2258 net_err_t Error = NET_ERR_NONE;
2260 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
2261 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
2262 __NETWORK_FUNC_EXIT__;
2263 return NET_ERR_APP_NOT_REGISTERED;
2266 if (_net_check_profile_name(profile_name) != NET_ERR_NONE || prof_info == NULL) {
2267 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid Parameter\n");
2268 __NETWORK_FUNC_EXIT__;
2269 return NET_ERR_INVALID_PARAM;
2272 Error = __net_get_profile_info(profile_name, prof_info);
2273 if (Error != NET_ERR_NONE)
2274 NETWORK_LOG(NETWORK_ERROR,
2275 "Error!!! failed to get service(profile) information. Error [%s]\n",
2276 _net_print_error(Error));
2278 __NETWORK_FUNC_EXIT__;
2283 EXPORT_API int net_modify_profile(const char* profile_name, net_profile_info_t* prof_info)
2285 __NETWORK_FUNC_ENTER__;
2287 net_err_t Error = NET_ERR_NONE;
2288 net_profile_info_t exProfInfo;
2290 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
2291 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
2292 __NETWORK_FUNC_EXIT__;
2293 return NET_ERR_APP_NOT_REGISTERED;
2296 Error = net_get_profile_info(profile_name, &exProfInfo);
2297 if (Error != NET_ERR_NONE) {
2298 NETWORK_LOG(NETWORK_ERROR,
2299 "Error!!! failed to get service(profile) information. Error [%s]\n",
2300 _net_print_error(Error));
2301 __NETWORK_FUNC_EXIT__;
2305 if (prof_info == NULL ||
2306 (exProfInfo.profile_type != NET_DEVICE_WIFI &&
2307 exProfInfo.profile_type != NET_DEVICE_CELLULAR)) {
2308 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid Parameter\n");
2309 __NETWORK_FUNC_EXIT__;
2310 return NET_ERR_INVALID_PARAM;
2313 if (exProfInfo.profile_type == NET_DEVICE_WIFI)
2314 Error = __net_modify_wlan_profile_info(profile_name, prof_info, &exProfInfo);
2315 else if (exProfInfo.profile_type == NET_DEVICE_CELLULAR)
2316 Error = __net_telephony_modify_profile(profile_name, prof_info, &exProfInfo);
2318 if (Error != NET_ERR_NONE) {
2319 NETWORK_LOG(NETWORK_ERROR,
2320 "Error!!! failed to modify service(profile) information. Error [%s]\n",
2321 _net_print_error(Error));
2322 __NETWORK_FUNC_EXIT__;
2326 __NETWORK_FUNC_EXIT__;
2328 return NET_ERR_NONE;
2332 EXPORT_API int net_get_profile_list(net_device_t device_type, net_profile_info_t **profile_list, int *count)
2334 __NETWORK_FUNC_ENTER__;
2336 net_err_t Error = NET_ERR_NONE;
2337 int profile_count = 0;
2338 net_profile_info_t* profile_info = NULL;
2340 if (count == NULL) {
2341 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid Parameter\n");
2342 __NETWORK_FUNC_EXIT__;
2343 return NET_ERR_INVALID_PARAM;
2346 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
2347 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
2348 __NETWORK_FUNC_EXIT__;
2349 return NET_ERR_APP_NOT_REGISTERED;
2352 if (device_type != NET_DEVICE_CELLULAR &&
2353 device_type != NET_DEVICE_WIFI &&
2354 device_type != NET_DEVICE_ETHERNET) {
2355 NETWORK_LOG(NETWORK_ERROR, "Error!!! Not Supported\n");
2356 __NETWORK_FUNC_EXIT__;
2357 return NET_ERR_NOT_SUPPORTED;
2360 Error = _net_get_profile_list(device_type, &profile_info, &profile_count);
2362 if (Error != NET_ERR_NONE) {
2363 NETWORK_LOG(NETWORK_ERROR,
2364 "Error!!! failed to get service(profile) list. Error [%s]\n",
2365 _net_print_error(Error));
2367 NET_MEMFREE(profile_info);
2369 __NETWORK_FUNC_EXIT__;
2372 *count = profile_count;
2373 *profile_list = profile_info;
2376 __NETWORK_FUNC_EXIT__;
2377 return NET_ERR_NONE;
2381 /*****************************************************************************
2382 * ConnMan Wi-Fi Client Interface Async Function Definition
2383 *****************************************************************************/
2387 #endif /* __cplusplus */