2 * Copyright (c) 2011-2013 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include <arpa/inet.h>
22 #include <vconf/vconf.h>
23 #include "net_connection_private.h"
25 #define HTTP_PROXY "http_proxy"
27 static net_dev_info_t* __profile_get_net_info(net_profile_info_t *profile_info)
29 switch (profile_info->profile_type) {
30 case NET_DEVICE_CELLULAR:
31 return &profile_info->ProfileInfo.Pdp.net_info;
33 return &profile_info->ProfileInfo.Wlan.net_info;
34 case NET_DEVICE_ETHERNET:
35 return &profile_info->ProfileInfo.Ethernet.net_info;
36 case NET_DEVICE_BLUETOOTH:
37 return &profile_info->ProfileInfo.Bluetooth.net_info;
38 case NET_DEVICE_DEFAULT:
40 case NET_DEVICE_UNKNOWN:
47 static char* __profile_convert_ip_to_string(net_addr_t *ip_addr)
49 unsigned char *ipaddr = (unsigned char *)&ip_addr->Data.Ipv4.s_addr;
51 char *ipstr = g_try_malloc0(16);
55 snprintf(ipstr, 16, "%d.%d.%d.%d", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
60 static void __profile_init_cellular_profile(net_profile_info_t *profile_info, const char *keyword)
62 profile_info->profile_type = NET_DEVICE_CELLULAR;
63 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
64 profile_info->ProfileInfo.Pdp.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
65 profile_info->ProfileInfo.Pdp.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
66 g_strlcpy(profile_info->ProfileInfo.Pdp.Keyword, keyword, NET_PDP_APN_LEN_MAX);
69 static void __profile_init_wifi_profile(net_profile_info_t *profile_info)
71 profile_info->profile_type = NET_DEVICE_WIFI;
72 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
73 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
74 profile_info->ProfileInfo.Wlan.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
75 profile_info->ProfileInfo.Wlan.wlan_mode = NETPM_WLAN_CONNMODE_AUTO;
76 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_NONE;
77 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_NONE;
80 static const char* __profile_get_ethernet_proxy(void)
84 proxy = getenv(HTTP_PROXY);
87 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get system proxy");
91 CONNECTION_LOG(CONNECTION_INFO, "Get system proxy: %s", proxy);
95 connection_cellular_service_type_e _profile_convert_to_connection_cellular_service_type(net_service_type_t svc_type)
98 case NET_SERVICE_INTERNET:
99 return CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET;
100 case NET_SERVICE_MMS:
101 return CONNECTION_CELLULAR_SERVICE_TYPE_MMS;
102 case NET_SERVICE_PREPAID_INTERNET:
103 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET;
104 case NET_SERVICE_PREPAID_MMS:
105 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS;
106 case NET_SERVICE_TETHERING:
107 return CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING;
108 case NET_SERVICE_APPLICATION:
109 return CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION;
111 return CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
115 connection_profile_state_e _profile_convert_to_cp_state(net_state_type_t state)
117 connection_profile_state_e cp_state;
120 case NET_STATE_TYPE_ONLINE:
121 case NET_STATE_TYPE_READY:
122 cp_state = CONNECTION_PROFILE_STATE_CONNECTED;
124 case NET_STATE_TYPE_IDLE:
125 case NET_STATE_TYPE_FAILURE:
126 case NET_STATE_TYPE_DISCONNECT:
127 cp_state = CONNECTION_PROFILE_STATE_DISCONNECTED;
129 case NET_STATE_TYPE_ASSOCIATION:
130 cp_state = CONNECTION_PROFILE_STATE_ASSOCIATION;
132 case NET_STATE_TYPE_CONFIGURATION:
133 cp_state = CONNECTION_PROFILE_STATE_CONFIGURATION;
142 net_service_type_t _connection_profile_convert_to_libnet_cellular_service_type(connection_cellular_service_type_e svc_type)
145 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
146 return NET_SERVICE_INTERNET;
147 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
148 return NET_SERVICE_MMS;
149 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
150 return NET_SERVICE_PREPAID_INTERNET;
151 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
152 return NET_SERVICE_PREPAID_MMS;
153 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
154 return NET_SERVICE_TETHERING;
155 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
156 return NET_SERVICE_APPLICATION;
158 return NET_SERVICE_UNKNOWN;
162 net_state_type_t _connection_profile_convert_to_net_state(connection_profile_state_e state)
164 net_state_type_t libnet_state = NET_STATE_TYPE_UNKNOWN;
167 case CONNECTION_PROFILE_STATE_CONNECTED:
168 libnet_state = NET_STATE_TYPE_ONLINE;
170 case CONNECTION_PROFILE_STATE_DISCONNECTED:
171 libnet_state = NET_STATE_TYPE_IDLE;
173 case CONNECTION_PROFILE_STATE_ASSOCIATION:
174 libnet_state = NET_STATE_TYPE_ASSOCIATION;
176 case CONNECTION_PROFILE_STATE_CONFIGURATION:
177 libnet_state = NET_STATE_TYPE_CONFIGURATION;
185 /* Connection profile ********************************************************/
186 EXPORT_API int connection_profile_create(connection_profile_type_e type, const char* keyword, connection_profile_h* profile)
188 if ((type != CONNECTION_PROFILE_TYPE_CELLULAR &&
189 type != CONNECTION_PROFILE_TYPE_WIFI) || profile == NULL) {
190 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
191 return CONNECTION_ERROR_INVALID_PARAMETER;
194 net_profile_info_t *profile_info = g_try_malloc0(sizeof(net_profile_info_t));
195 if (profile_info == NULL)
196 return CONNECTION_ERROR_OUT_OF_MEMORY;
199 case CONNECTION_PROFILE_TYPE_CELLULAR:
200 if (keyword == NULL) {
201 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
202 g_free(profile_info);
203 return CONNECTION_ERROR_INVALID_PARAMETER;
205 __profile_init_cellular_profile(profile_info, keyword);
207 case CONNECTION_PROFILE_TYPE_WIFI:
208 __profile_init_wifi_profile(profile_info);
214 *profile = (connection_profile_h)profile_info;
215 _connection_libnet_add_to_profile_list(*profile);
217 return CONNECTION_ERROR_NONE;
220 EXPORT_API int connection_profile_destroy(connection_profile_h profile)
222 if (!(_connection_libnet_check_profile_validity(profile))) {
223 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
224 return CONNECTION_ERROR_INVALID_PARAMETER;
227 _connection_libnet_remove_from_profile_list(profile);
229 return CONNECTION_ERROR_NONE;
232 EXPORT_API int connection_profile_clone(connection_profile_h* cloned_profile, connection_profile_h origin_profile)
234 if (!(_connection_libnet_check_profile_validity(origin_profile)) || cloned_profile == NULL) {
235 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
236 return CONNECTION_ERROR_INVALID_PARAMETER;
239 *cloned_profile = g_try_malloc0(sizeof(net_profile_info_t));
240 if (*cloned_profile == NULL)
241 return CONNECTION_ERROR_OUT_OF_MEMORY;
243 memcpy(*cloned_profile, origin_profile, sizeof(net_profile_info_t));
244 _connection_libnet_add_to_profile_list(*cloned_profile);
246 return CONNECTION_ERROR_NONE;
249 EXPORT_API int connection_profile_get_id(connection_profile_h profile, char** profile_id)
251 if (!(_connection_libnet_check_profile_validity(profile)) || profile_id == NULL) {
252 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
253 return CONNECTION_ERROR_INVALID_PARAMETER;
256 net_profile_info_t *profile_info = profile;
258 char *prof_id = strrchr(profile_info->ProfileName, '/');
260 return CONNECTION_ERROR_INVALID_PARAMETER;
263 *profile_id = g_strdup(prof_id);
265 if (*profile_id == NULL)
266 return CONNECTION_ERROR_OUT_OF_MEMORY;
268 return CONNECTION_ERROR_NONE;
271 EXPORT_API int connection_profile_get_name(connection_profile_h profile, char** profile_name)
273 if (!(_connection_libnet_check_profile_validity(profile)) || profile_name == NULL) {
274 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
275 return CONNECTION_ERROR_INVALID_PARAMETER;
278 net_profile_info_t *profile_info = profile;
280 switch (profile_info->profile_type) {
281 case NET_DEVICE_CELLULAR:
282 *profile_name = g_strdup(profile_info->ProfileInfo.Pdp.Keyword);
284 case NET_DEVICE_WIFI:
285 *profile_name = g_strdup(profile_info->ProfileInfo.Wlan.essid);
287 case NET_DEVICE_ETHERNET:
288 *profile_name = g_strdup(profile_info->ProfileInfo.Ethernet.net_info.DevName);
290 case NET_DEVICE_BLUETOOTH: {
291 char *bt_name = strrchr(profile_info->ProfileName, '/');
293 return CONNECTION_ERROR_INVALID_PARAMETER;
296 *profile_name = g_strdup(bt_name);
299 return CONNECTION_ERROR_INVALID_PARAMETER;
302 if (*profile_name == NULL)
303 return CONNECTION_ERROR_OUT_OF_MEMORY;
305 return CONNECTION_ERROR_NONE;
308 EXPORT_API int connection_profile_get_type(connection_profile_h profile, connection_profile_type_e* type)
310 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
311 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
312 return CONNECTION_ERROR_INVALID_PARAMETER;
315 net_profile_info_t *profile_info = profile;
317 switch (profile_info->profile_type) {
318 case NET_DEVICE_CELLULAR:
319 *type = CONNECTION_PROFILE_TYPE_CELLULAR;
321 case NET_DEVICE_WIFI:
322 *type = CONNECTION_PROFILE_TYPE_WIFI;
324 case NET_DEVICE_ETHERNET:
325 *type = CONNECTION_PROFILE_TYPE_ETHERNET;
327 case NET_DEVICE_BLUETOOTH:
328 *type = CONNECTION_PROFILE_TYPE_BT;
331 CONNECTION_LOG(CONNECTION_ERROR, "Invalid profile type\n");
332 return CONNECTION_ERROR_OPERATION_FAILED;
335 return CONNECTION_ERROR_NONE;
338 EXPORT_API int connection_profile_get_network_interface_name(connection_profile_h profile, char** interface_name)
340 if (!(_connection_libnet_check_profile_validity(profile)) || interface_name == NULL) {
341 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
342 return CONNECTION_ERROR_INVALID_PARAMETER;
345 net_profile_info_t *profile_info = profile;
346 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
347 if (net_info == NULL)
348 return CONNECTION_ERROR_INVALID_PARAMETER;
350 *interface_name = g_strdup(net_info->DevName);
351 if (*interface_name == NULL)
352 return CONNECTION_ERROR_OUT_OF_MEMORY;
354 return CONNECTION_ERROR_NONE;
357 EXPORT_API int connection_profile_refresh(connection_profile_h profile)
359 if (!(_connection_libnet_check_profile_validity(profile))) {
360 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
361 return CONNECTION_ERROR_INVALID_PARAMETER;
364 net_profile_info_t profile_info_local;
365 net_profile_info_t *profile_info = profile;
367 if (net_get_profile_info(profile_info->ProfileName, &profile_info_local) != NET_ERR_NONE) {
368 CONNECTION_LOG(CONNECTION_ERROR, "Error!!! net_get_profile_info() failed\n");
369 return CONNECTION_ERROR_OPERATION_FAILED;
372 memcpy(profile, &profile_info_local, sizeof(net_profile_info_t));
374 return CONNECTION_ERROR_NONE;
377 EXPORT_API int connection_profile_get_state(connection_profile_h profile, connection_profile_state_e* state)
379 if (!(_connection_libnet_check_profile_validity(profile)) || state == NULL) {
380 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
381 return CONNECTION_ERROR_INVALID_PARAMETER;
384 net_profile_info_t *profile_info = profile;
385 *state = _profile_convert_to_cp_state(profile_info->ProfileState);
387 return CONNECTION_ERROR_OPERATION_FAILED;
389 return CONNECTION_ERROR_NONE;
392 EXPORT_API int connection_profile_get_ip_config_type(connection_profile_h profile,
393 connection_address_family_e address_family, connection_ip_config_type_e* type)
395 if (!(_connection_libnet_check_profile_validity(profile)) ||
396 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
397 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
399 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
400 return CONNECTION_ERROR_INVALID_PARAMETER;
403 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
404 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
406 net_profile_info_t *profile_info = profile;
407 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
408 if (net_info == NULL)
409 return CONNECTION_ERROR_OPERATION_FAILED;
411 switch (net_info->IpConfigType) {
412 case NET_IP_CONFIG_TYPE_STATIC:
413 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
415 case NET_IP_CONFIG_TYPE_DYNAMIC:
416 *type = CONNECTION_IP_CONFIG_TYPE_DYNAMIC;
418 case NET_IP_CONFIG_TYPE_AUTO_IP:
419 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
421 case NET_IP_CONFIG_TYPE_FIXED:
422 *type = CONNECTION_IP_CONFIG_TYPE_FIXED;
424 case NET_IP_CONFIG_TYPE_OFF:
425 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
428 return CONNECTION_ERROR_OPERATION_FAILED;
431 return CONNECTION_ERROR_NONE;
434 EXPORT_API int connection_profile_get_ip_address(connection_profile_h profile,
435 connection_address_family_e address_family, char** ip_address)
437 if (!(_connection_libnet_check_profile_validity(profile)) ||
438 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
439 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
440 ip_address == NULL) {
441 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
442 return CONNECTION_ERROR_INVALID_PARAMETER;
445 net_profile_info_t *profile_info = profile;
446 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
447 if (net_info == NULL)
448 return CONNECTION_ERROR_OPERATION_FAILED;
450 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
451 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
453 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr);
454 if (*ip_address == NULL)
455 return CONNECTION_ERROR_OUT_OF_MEMORY;
457 return CONNECTION_ERROR_NONE;
460 EXPORT_API int connection_profile_get_subnet_mask(connection_profile_h profile,
461 connection_address_family_e address_family, char** subnet_mask)
463 if (!(_connection_libnet_check_profile_validity(profile)) ||
464 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
465 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
466 subnet_mask == NULL) {
467 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
468 return CONNECTION_ERROR_INVALID_PARAMETER;
471 net_profile_info_t *profile_info = profile;
472 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
473 if (net_info == NULL)
474 return CONNECTION_ERROR_OPERATION_FAILED;
476 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
477 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
479 *subnet_mask = __profile_convert_ip_to_string(&net_info->SubnetMask);
480 if (*subnet_mask == NULL)
481 return CONNECTION_ERROR_OUT_OF_MEMORY;
483 return CONNECTION_ERROR_NONE;
486 EXPORT_API int connection_profile_get_gateway_address(connection_profile_h profile,
487 connection_address_family_e address_family, char** gateway_address)
489 if (!(_connection_libnet_check_profile_validity(profile)) ||
490 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
491 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
492 gateway_address == NULL) {
493 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
494 return CONNECTION_ERROR_INVALID_PARAMETER;
497 net_profile_info_t *profile_info = profile;
498 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
499 if (net_info == NULL)
500 return CONNECTION_ERROR_OPERATION_FAILED;
502 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
503 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
505 *gateway_address = __profile_convert_ip_to_string(&net_info->GatewayAddr);
506 if (*gateway_address == NULL)
507 return CONNECTION_ERROR_OUT_OF_MEMORY;
509 return CONNECTION_ERROR_NONE;
512 EXPORT_API int connection_profile_get_dns_address(connection_profile_h profile, int order,
513 connection_address_family_e address_family, char** dns_address)
515 if (!(_connection_libnet_check_profile_validity(profile)) ||
516 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
517 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
518 dns_address == NULL ||
520 order > NET_DNS_ADDR_MAX) {
521 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
522 return CONNECTION_ERROR_INVALID_PARAMETER;
525 net_profile_info_t *profile_info = profile;
526 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
527 if (net_info == NULL)
528 return CONNECTION_ERROR_OPERATION_FAILED;
530 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
531 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
533 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr[order-1]);
534 if (*dns_address == NULL)
535 return CONNECTION_ERROR_OUT_OF_MEMORY;
537 return CONNECTION_ERROR_NONE;
540 EXPORT_API int connection_profile_get_proxy_type(connection_profile_h profile, connection_proxy_type_e* type)
542 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
543 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
544 return CONNECTION_ERROR_INVALID_PARAMETER;
548 net_profile_info_t *profile_info = profile;
549 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
550 if (net_info == NULL)
551 return CONNECTION_ERROR_OPERATION_FAILED;
553 if (profile_info->profile_type == NET_DEVICE_ETHERNET) {
554 proxy = __profile_get_ethernet_proxy();
556 *type = CONNECTION_PROXY_TYPE_DIRECT;
558 *type = CONNECTION_PROXY_TYPE_MANUAL;
560 return CONNECTION_ERROR_NONE;
563 switch (net_info->ProxyMethod) {
564 case NET_PROXY_TYPE_DIRECT:
565 *type = CONNECTION_PROXY_TYPE_DIRECT;
567 case NET_PROXY_TYPE_AUTO:
568 *type = CONNECTION_PROXY_TYPE_AUTO;
570 case NET_PROXY_TYPE_MANUAL:
571 *type = CONNECTION_PROXY_TYPE_MANUAL;
573 case NET_PROXY_TYPE_UNKNOWN:
575 return CONNECTION_ERROR_OPERATION_FAILED;
578 return CONNECTION_ERROR_NONE;
581 EXPORT_API int connection_profile_get_proxy_address(connection_profile_h profile,
582 connection_address_family_e address_family, char** proxy_address)
584 if (!(_connection_libnet_check_profile_validity(profile)) ||
585 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
586 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
587 proxy_address == NULL) {
588 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
589 return CONNECTION_ERROR_INVALID_PARAMETER;
593 net_profile_info_t *profile_info = profile;
594 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
595 if (net_info == NULL)
596 return CONNECTION_ERROR_OPERATION_FAILED;
598 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
599 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
601 if (profile_info->profile_type == NET_DEVICE_ETHERNET) {
602 proxy = __profile_get_ethernet_proxy();
604 return CONNECTION_ERROR_OPERATION_FAILED;
606 *proxy_address = g_strdup(proxy);
608 *proxy_address = g_strdup(net_info->ProxyAddr);
610 if (*proxy_address == NULL)
611 return CONNECTION_ERROR_OUT_OF_MEMORY;
613 return CONNECTION_ERROR_NONE;
616 EXPORT_API int connection_profile_set_ip_config_type(connection_profile_h profile,
617 connection_address_family_e address_family, connection_ip_config_type_e type)
619 if (!(_connection_libnet_check_profile_validity(profile)) ||
620 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
621 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
622 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
623 return CONNECTION_ERROR_INVALID_PARAMETER;
626 net_profile_info_t *profile_info = profile;
627 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
628 if (net_info == NULL)
629 return CONNECTION_ERROR_OPERATION_FAILED;
631 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
632 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
635 case CONNECTION_IP_CONFIG_TYPE_STATIC:
636 net_info->IpConfigType = NET_IP_CONFIG_TYPE_STATIC;
637 net_info->IpAddr.Data.Ipv4.s_addr = 0;
638 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
639 net_info->GatewayAddr.Data.Ipv4.s_addr = 0;
641 case CONNECTION_IP_CONFIG_TYPE_DYNAMIC:
642 net_info->IpConfigType = NET_IP_CONFIG_TYPE_DYNAMIC;
644 case CONNECTION_IP_CONFIG_TYPE_AUTO:
645 net_info->IpConfigType = NET_IP_CONFIG_TYPE_AUTO_IP;
647 case CONNECTION_IP_CONFIG_TYPE_FIXED:
648 net_info->IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
650 case CONNECTION_IP_CONFIG_TYPE_NONE:
651 net_info->IpConfigType = NET_IP_CONFIG_TYPE_OFF;
654 return CONNECTION_ERROR_INVALID_PARAMETER;
657 return CONNECTION_ERROR_NONE;
660 EXPORT_API int connection_profile_set_ip_address(connection_profile_h profile,
661 connection_address_family_e address_family, const char* ip_address)
663 if (!(_connection_libnet_check_profile_validity(profile)) ||
664 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
665 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
666 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
667 return CONNECTION_ERROR_INVALID_PARAMETER;
670 net_profile_info_t *profile_info = profile;
671 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
672 if (net_info == NULL)
673 return CONNECTION_ERROR_OPERATION_FAILED;
675 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
676 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
678 if (ip_address == NULL)
679 net_info->IpAddr.Data.Ipv4.s_addr = 0;
680 else if (inet_aton(ip_address, &(net_info->IpAddr.Data.Ipv4)) == 0)
681 return CONNECTION_ERROR_INVALID_PARAMETER;
683 return CONNECTION_ERROR_NONE;
686 EXPORT_API int connection_profile_set_subnet_mask(connection_profile_h profile,
687 connection_address_family_e address_family, const char* subnet_mask)
689 if (!(_connection_libnet_check_profile_validity(profile)) ||
690 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
691 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
692 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
693 return CONNECTION_ERROR_INVALID_PARAMETER;
696 net_profile_info_t *profile_info = profile;
697 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
698 if (net_info == NULL)
699 return CONNECTION_ERROR_OPERATION_FAILED;
701 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
702 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
704 if (subnet_mask == NULL)
705 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
706 else if (inet_aton(subnet_mask, &(net_info->SubnetMask.Data.Ipv4)) == 0)
707 return CONNECTION_ERROR_INVALID_PARAMETER;
709 return CONNECTION_ERROR_NONE;
712 EXPORT_API int connection_profile_set_gateway_address(connection_profile_h profile,
713 connection_address_family_e address_family, const char* gateway_address)
715 if (!(_connection_libnet_check_profile_validity(profile)) ||
716 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
717 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
718 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
719 return CONNECTION_ERROR_INVALID_PARAMETER;
722 net_profile_info_t *profile_info = profile;
723 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
724 if (net_info == NULL)
725 return CONNECTION_ERROR_OPERATION_FAILED;
727 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
728 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
730 if (gateway_address == NULL)
731 net_info->GatewayAddr.Data.Ipv4.s_addr = 0;
732 else if (inet_aton(gateway_address, &(net_info->GatewayAddr.Data.Ipv4)) == 0)
733 return CONNECTION_ERROR_INVALID_PARAMETER;
735 return CONNECTION_ERROR_NONE;
738 EXPORT_API int connection_profile_set_dns_address(connection_profile_h profile, int order,
739 connection_address_family_e address_family, const char* dns_address)
741 if (!(_connection_libnet_check_profile_validity(profile)) ||
742 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
743 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
745 order > NET_DNS_ADDR_MAX) {
746 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
747 return CONNECTION_ERROR_INVALID_PARAMETER;
750 net_profile_info_t *profile_info = profile;
751 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
752 if (net_info == NULL)
753 return CONNECTION_ERROR_OPERATION_FAILED;
755 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
756 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
758 if (dns_address == NULL)
759 net_info->DnsAddr[order-1].Data.Ipv4.s_addr = 0;
760 else if (inet_aton(dns_address, &(net_info->DnsAddr[order-1].Data.Ipv4)) == 0)
761 return CONNECTION_ERROR_INVALID_PARAMETER;
763 return CONNECTION_ERROR_NONE;
766 EXPORT_API int connection_profile_set_proxy_type(connection_profile_h profile, connection_proxy_type_e type)
768 if (!(_connection_libnet_check_profile_validity(profile))) {
769 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
770 return CONNECTION_ERROR_INVALID_PARAMETER;
773 net_profile_info_t *profile_info = profile;
774 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
775 if (net_info == NULL)
776 return CONNECTION_ERROR_OPERATION_FAILED;
779 case CONNECTION_PROXY_TYPE_DIRECT:
780 net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
782 case CONNECTION_PROXY_TYPE_AUTO:
783 net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
785 case CONNECTION_PROXY_TYPE_MANUAL:
786 net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
789 return CONNECTION_ERROR_INVALID_PARAMETER;
792 return CONNECTION_ERROR_NONE;
795 EXPORT_API int connection_profile_set_proxy_address(connection_profile_h profile,
796 connection_address_family_e address_family, const char* proxy_address)
798 if (!(_connection_libnet_check_profile_validity(profile)) ||
799 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
800 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
801 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
802 return CONNECTION_ERROR_INVALID_PARAMETER;
805 net_profile_info_t *profile_info = profile;
806 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
807 if (net_info == NULL)
808 return CONNECTION_ERROR_OPERATION_FAILED;
810 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
811 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
813 if (proxy_address == NULL)
814 net_info->ProxyAddr[0] = '\0';
816 g_strlcpy(net_info->ProxyAddr, proxy_address, NET_PROXY_LEN_MAX);
818 return CONNECTION_ERROR_NONE;
821 EXPORT_API int connection_profile_set_state_changed_cb(connection_profile_h profile,
822 connection_profile_state_changed_cb callback, void* user_data)
824 if (!(_connection_libnet_check_profile_validity(profile)) || callback == NULL) {
825 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
826 return CONNECTION_ERROR_INVALID_PARAMETER;
829 if (_connection_libnet_add_to_profile_cb_list(profile, callback, user_data))
830 return CONNECTION_ERROR_NONE;
832 return CONNECTION_ERROR_OPERATION_FAILED;
835 EXPORT_API int connection_profile_unset_state_changed_cb(connection_profile_h profile)
837 if (!(_connection_libnet_check_profile_cb_validity(profile))) {
838 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
839 return CONNECTION_ERROR_INVALID_PARAMETER;
842 _connection_libnet_remove_from_profile_cb_list(profile);
844 return CONNECTION_ERROR_NONE;
848 /* Wi-Fi profile *************************************************************/
849 EXPORT_API int connection_profile_get_wifi_essid(connection_profile_h profile, char** essid)
851 if (!(_connection_libnet_check_profile_validity(profile)) || essid == NULL) {
852 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
853 return CONNECTION_ERROR_INVALID_PARAMETER;
856 net_profile_info_t *profile_info = profile;
858 if (profile_info->profile_type != NET_DEVICE_WIFI)
859 return CONNECTION_ERROR_INVALID_PARAMETER;
861 *essid = g_strdup(profile_info->ProfileInfo.Wlan.essid);
863 return CONNECTION_ERROR_OUT_OF_MEMORY;
865 return CONNECTION_ERROR_NONE;
868 EXPORT_API int connection_profile_get_wifi_bssid(connection_profile_h profile, char** bssid)
870 if (!(_connection_libnet_check_profile_validity(profile)) || bssid == NULL) {
871 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
872 return CONNECTION_ERROR_INVALID_PARAMETER;
875 net_profile_info_t *profile_info = profile;
877 if (profile_info->profile_type != NET_DEVICE_WIFI)
878 return CONNECTION_ERROR_INVALID_PARAMETER;
880 *bssid = g_strdup(profile_info->ProfileInfo.Wlan.bssid);
882 return CONNECTION_ERROR_OUT_OF_MEMORY;
884 return CONNECTION_ERROR_NONE;
887 EXPORT_API int connection_profile_get_wifi_rssi(connection_profile_h profile, int* rssi)
889 if (!(_connection_libnet_check_profile_validity(profile)) || rssi == NULL) {
890 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
891 return CONNECTION_ERROR_INVALID_PARAMETER;
894 net_profile_info_t *profile_info = profile;
896 if (profile_info->profile_type != NET_DEVICE_WIFI)
897 return CONNECTION_ERROR_INVALID_PARAMETER;
899 *rssi = (int)profile_info->ProfileInfo.Wlan.Strength;
901 return CONNECTION_ERROR_NONE;
904 EXPORT_API int connection_profile_get_wifi_frequency(connection_profile_h profile, int* frequency)
906 if (!(_connection_libnet_check_profile_validity(profile)) || frequency == NULL) {
907 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
908 return CONNECTION_ERROR_INVALID_PARAMETER;
911 net_profile_info_t *profile_info = profile;
913 if (profile_info->profile_type != NET_DEVICE_WIFI)
914 return CONNECTION_ERROR_INVALID_PARAMETER;
916 *frequency = (int)profile_info->ProfileInfo.Wlan.frequency;
918 return CONNECTION_ERROR_NONE;
921 EXPORT_API int connection_profile_get_wifi_max_speed(connection_profile_h profile, int* max_speed)
923 if (!(_connection_libnet_check_profile_validity(profile)) || max_speed == NULL) {
924 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
925 return CONNECTION_ERROR_INVALID_PARAMETER;
928 net_profile_info_t *profile_info = profile;
930 if (profile_info->profile_type != NET_DEVICE_WIFI)
931 return CONNECTION_ERROR_INVALID_PARAMETER;
933 *max_speed = (int)profile_info->ProfileInfo.Wlan.max_rate;
935 return CONNECTION_ERROR_NONE;
938 EXPORT_API int connection_profile_get_wifi_security_type(connection_profile_h profile, connection_wifi_security_type_e* type)
940 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
941 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
942 return CONNECTION_ERROR_INVALID_PARAMETER;
945 net_profile_info_t *profile_info = profile;
947 if (profile_info->profile_type != NET_DEVICE_WIFI)
948 return CONNECTION_ERROR_INVALID_PARAMETER;
950 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
951 case WLAN_SEC_MODE_NONE:
952 *type = CONNECTION_WIFI_SECURITY_TYPE_NONE;
954 case WLAN_SEC_MODE_WEP:
955 *type = CONNECTION_WIFI_SECURITY_TYPE_WEP;
957 case WLAN_SEC_MODE_IEEE8021X:
958 *type = CONNECTION_WIFI_SECURITY_TYPE_EAP;
960 case WLAN_SEC_MODE_WPA_PSK:
961 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA_PSK;
963 case WLAN_SEC_MODE_WPA2_PSK:
964 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA2_PSK;
967 return CONNECTION_ERROR_OPERATION_FAILED;
970 return CONNECTION_ERROR_NONE;
973 EXPORT_API int connection_profile_get_wifi_encryption_type(connection_profile_h profile, connection_wifi_encryption_type_e* type)
975 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
976 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
977 return CONNECTION_ERROR_INVALID_PARAMETER;
980 net_profile_info_t *profile_info = profile;
982 if (profile_info->profile_type != NET_DEVICE_WIFI)
983 return CONNECTION_ERROR_INVALID_PARAMETER;
985 switch (profile_info->ProfileInfo.Wlan.security_info.enc_mode) {
986 case WLAN_ENC_MODE_NONE:
987 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_NONE;
989 case WLAN_ENC_MODE_WEP:
990 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_WEP;
992 case WLAN_ENC_MODE_TKIP:
993 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP;
995 case WLAN_ENC_MODE_AES:
996 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_AES;
998 case WLAN_ENC_MODE_TKIP_AES_MIXED:
999 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP_AES_MIXED;
1002 return CONNECTION_ERROR_OPERATION_FAILED;
1005 return CONNECTION_ERROR_NONE;
1008 EXPORT_API int connection_profile_is_wifi_passphrase_required(connection_profile_h profile, bool* required)
1010 if (!(_connection_libnet_check_profile_validity(profile)) || required == NULL) {
1011 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1012 return CONNECTION_ERROR_INVALID_PARAMETER;
1015 net_profile_info_t *profile_info = profile;
1017 if (profile_info->profile_type != NET_DEVICE_WIFI)
1018 return CONNECTION_ERROR_INVALID_PARAMETER;
1020 if (profile_info->Favourite) {
1022 return CONNECTION_ERROR_NONE;
1025 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
1026 case WLAN_SEC_MODE_NONE:
1029 case WLAN_SEC_MODE_WEP:
1030 case WLAN_SEC_MODE_IEEE8021X:
1031 case WLAN_SEC_MODE_WPA_PSK:
1032 case WLAN_SEC_MODE_WPA2_PSK:
1036 return CONNECTION_ERROR_OPERATION_FAILED;
1039 return CONNECTION_ERROR_NONE;
1042 EXPORT_API int connection_profile_set_wifi_passphrase(connection_profile_h profile, const char* passphrase)
1044 if (!(_connection_libnet_check_profile_validity(profile)) || passphrase == NULL) {
1045 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1046 return CONNECTION_ERROR_INVALID_PARAMETER;
1049 net_profile_info_t *profile_info = profile;
1051 if (profile_info->profile_type != NET_DEVICE_WIFI)
1052 return CONNECTION_ERROR_INVALID_PARAMETER;
1054 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.psk.pskKey,
1055 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1057 return CONNECTION_ERROR_NONE;
1060 EXPORT_API int connection_profile_is_wifi_wps_supported(connection_profile_h profile, bool* supported)
1062 if (!(_connection_libnet_check_profile_validity(profile)) || supported == NULL) {
1063 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1064 return CONNECTION_ERROR_INVALID_PARAMETER;
1067 net_profile_info_t *profile_info = profile;
1069 if (profile_info->profile_type != NET_DEVICE_WIFI)
1070 return CONNECTION_ERROR_INVALID_PARAMETER;
1072 if (profile_info->ProfileInfo.Wlan.security_info.wps_support)
1077 return CONNECTION_ERROR_NONE;
1081 /* Cellular profile **********************************************************/
1082 EXPORT_API int connection_profile_get_cellular_network_type(connection_profile_h profile, connection_cellular_network_type_e* type)
1084 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1085 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1086 return CONNECTION_ERROR_INVALID_PARAMETER;
1090 net_profile_info_t *profile_info = profile;
1092 if (profile_info->profile_type != NET_DEVICE_CELLULAR)
1093 return CONNECTION_ERROR_INVALID_PARAMETER;
1095 if (vconf_get_int(VCONFKEY_TELEPHONY_SVC_ACT, &network_type)) {
1096 CONNECTION_LOG(CONNECTION_ERROR, "vconf_get_int Failed\n");
1097 return CONNECTION_ERROR_OPERATION_FAILED;
1100 CONNECTION_LOG(CONNECTION_INFO, "Cellular network type = %d\n", network_type);
1102 switch (network_type) {
1103 case VCONFKEY_TELEPHONY_SVC_ACT_NONE:
1104 *type = CONNECTION_CELLULAR_NETWORK_TYPE_UNKNOWN;
1106 case VCONFKEY_TELEPHONY_SVC_ACT_GPRS:
1107 *type = CONNECTION_CELLULAR_NETWORK_TYPE_GPRS;
1109 case VCONFKEY_TELEPHONY_SVC_ACT_EGPRS:
1110 *type = CONNECTION_CELLULAR_NETWORK_TYPE_EDGE;
1112 case VCONFKEY_TELEPHONY_SVC_ACT_UMTS:
1113 *type = CONNECTION_CELLULAR_NETWORK_TYPE_UMTS;
1116 return CONNECTION_ERROR_OPERATION_FAILED;
1119 return CONNECTION_ERROR_NONE;
1122 EXPORT_API int connection_profile_get_cellular_service_type(connection_profile_h profile,
1123 connection_cellular_service_type_e* type)
1125 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1126 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1127 return CONNECTION_ERROR_INVALID_PARAMETER;
1130 net_profile_info_t *profile_info = profile;
1132 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1133 CONNECTION_LOG(CONNECTION_ERROR, "Invalid profile type Passed\n");
1134 return CONNECTION_ERROR_INVALID_PARAMETER;
1137 *type = _profile_convert_to_connection_cellular_service_type(profile_info->ProfileInfo.Pdp.ServiceType);
1139 if (*type == CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN) {
1140 CONNECTION_LOG(CONNECTION_ERROR, "Invalid service type Passed\n");
1141 return CONNECTION_ERROR_OPERATION_FAILED;
1144 return CONNECTION_ERROR_NONE;
1147 EXPORT_API int connection_profile_get_cellular_apn(connection_profile_h profile, char** apn)
1149 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1150 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1151 return CONNECTION_ERROR_INVALID_PARAMETER;
1154 net_profile_info_t *profile_info = profile;
1156 if (profile_info->profile_type != NET_DEVICE_CELLULAR)
1157 return CONNECTION_ERROR_INVALID_PARAMETER;
1159 *apn = g_strdup(profile_info->ProfileInfo.Pdp.Apn);
1161 return CONNECTION_ERROR_OUT_OF_MEMORY;
1163 return CONNECTION_ERROR_NONE;
1166 EXPORT_API int connection_profile_get_cellular_auth_info(connection_profile_h profile,
1167 connection_cellular_auth_type_e* type, char** user_name, char** password)
1169 if (!(_connection_libnet_check_profile_validity(profile)) ||
1170 type == NULL || user_name == NULL || password == NULL) {
1171 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1172 return CONNECTION_ERROR_INVALID_PARAMETER;
1175 net_profile_info_t *profile_info = profile;
1177 if (profile_info->profile_type != NET_DEVICE_CELLULAR)
1178 return CONNECTION_ERROR_INVALID_PARAMETER;
1180 switch (profile_info->ProfileInfo.Pdp.AuthInfo.AuthType) {
1181 case NET_PDP_AUTH_NONE:
1182 *type = CONNECTION_CELLULAR_AUTH_TYPE_NONE;
1184 case NET_PDP_AUTH_PAP:
1185 *type = CONNECTION_CELLULAR_AUTH_TYPE_PAP;
1187 case NET_PDP_AUTH_CHAP:
1188 *type = CONNECTION_CELLULAR_AUTH_TYPE_CHAP;
1191 return CONNECTION_ERROR_OPERATION_FAILED;
1194 *user_name = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.UserName);
1195 if (*user_name == NULL)
1196 return CONNECTION_ERROR_OUT_OF_MEMORY;
1198 *password = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.Password);
1199 if (*password == NULL) {
1201 return CONNECTION_ERROR_OUT_OF_MEMORY;
1204 return CONNECTION_ERROR_NONE;
1207 EXPORT_API int connection_profile_get_cellular_home_url(connection_profile_h profile, char** home_url)
1209 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1210 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1211 return CONNECTION_ERROR_INVALID_PARAMETER;
1214 net_profile_info_t *profile_info = profile;
1216 if (profile_info->profile_type != NET_DEVICE_CELLULAR)
1217 return CONNECTION_ERROR_INVALID_PARAMETER;
1219 *home_url = g_strdup(profile_info->ProfileInfo.Pdp.HomeURL);
1220 if (*home_url == NULL)
1221 return CONNECTION_ERROR_OUT_OF_MEMORY;
1223 return CONNECTION_ERROR_NONE;
1226 EXPORT_API int connection_profile_is_cellular_roaming(connection_profile_h profile, bool* is_roaming)
1228 if (!(_connection_libnet_check_profile_validity(profile)) || is_roaming == NULL) {
1229 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1230 return CONNECTION_ERROR_INVALID_PARAMETER;
1233 net_profile_info_t *profile_info = profile;
1235 if (profile_info->profile_type != NET_DEVICE_CELLULAR)
1236 return CONNECTION_ERROR_INVALID_PARAMETER;
1238 if (profile_info->ProfileInfo.Pdp.Roaming)
1241 *is_roaming = false;
1243 return CONNECTION_ERROR_NONE;
1246 EXPORT_API int connection_profile_set_cellular_service_type(connection_profile_h profile,
1247 connection_cellular_service_type_e service_type)
1249 if (!(_connection_libnet_check_profile_validity(profile))) {
1250 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1251 return CONNECTION_ERROR_INVALID_PARAMETER;
1254 net_profile_info_t *profile_info = profile;
1256 if (profile_info->profile_type != NET_DEVICE_CELLULAR)
1257 return CONNECTION_ERROR_INVALID_PARAMETER;
1259 switch (service_type) {
1260 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
1261 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_INTERNET;
1263 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
1264 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_MMS;
1266 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
1267 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_INTERNET;
1269 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
1270 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_MMS;
1272 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
1273 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_TETHERING;
1275 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
1276 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_APPLICATION;
1278 case CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN:
1280 return CONNECTION_ERROR_INVALID_PARAMETER;
1283 return CONNECTION_ERROR_NONE;
1286 EXPORT_API int connection_profile_set_cellular_apn(connection_profile_h profile, const char* apn)
1288 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1289 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1290 return CONNECTION_ERROR_INVALID_PARAMETER;
1293 net_profile_info_t *profile_info = profile;
1295 if (profile_info->profile_type != NET_DEVICE_CELLULAR)
1296 return CONNECTION_ERROR_INVALID_PARAMETER;
1298 g_strlcpy(profile_info->ProfileInfo.Pdp.Apn, apn, NET_PDP_APN_LEN_MAX+1);
1300 return CONNECTION_ERROR_NONE;
1303 EXPORT_API int connection_profile_set_cellular_auth_info(connection_profile_h profile,
1304 connection_cellular_auth_type_e type, const char* user_name, const char* password)
1306 if (!(_connection_libnet_check_profile_validity(profile)) ||
1307 user_name == NULL || password == NULL) {
1308 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1309 return CONNECTION_ERROR_INVALID_PARAMETER;
1312 net_profile_info_t *profile_info = profile;
1314 if (profile_info->profile_type != NET_DEVICE_CELLULAR)
1315 return CONNECTION_ERROR_INVALID_PARAMETER;
1318 case CONNECTION_CELLULAR_AUTH_TYPE_NONE:
1319 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_NONE;
1321 case CONNECTION_CELLULAR_AUTH_TYPE_PAP:
1322 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_PAP;
1324 case CONNECTION_CELLULAR_AUTH_TYPE_CHAP:
1325 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_CHAP;
1328 return CONNECTION_ERROR_INVALID_PARAMETER;
1331 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.UserName, user_name, NET_PDP_AUTH_USERNAME_LEN_MAX+1);
1332 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.Password, password, NET_PDP_AUTH_PASSWORD_LEN_MAX+1);
1334 return CONNECTION_ERROR_NONE;
1337 EXPORT_API int connection_profile_set_cellular_home_url(connection_profile_h profile, const char* home_url)
1339 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1340 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed\n");
1341 return CONNECTION_ERROR_INVALID_PARAMETER;
1344 net_profile_info_t *profile_info = profile;
1346 if (profile_info->profile_type != NET_DEVICE_CELLULAR)
1347 return CONNECTION_ERROR_INVALID_PARAMETER;
1349 g_strlcpy(profile_info->ProfileInfo.Pdp.HomeURL, home_url, NET_HOME_URL_LEN_MAX);
1351 return CONNECTION_ERROR_NONE;