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.
21 #include <arpa/inet.h>
22 #include <vconf/vconf.h>
24 #include "net_connection_private.h"
26 #define HTTP_PROXY "http_proxy"
27 #define MAX_PREFIX_LENGTH 6
29 static net_dev_info_t* __profile_get_net_info(net_profile_info_t *profile_info)
31 switch (profile_info->profile_type) {
32 case NET_DEVICE_CELLULAR:
33 return &profile_info->ProfileInfo.Pdp.net_info;
35 return &profile_info->ProfileInfo.Wlan.net_info;
36 case NET_DEVICE_ETHERNET:
37 return &profile_info->ProfileInfo.Ethernet.net_info; //LCOV_EXCL_LINE
38 case NET_DEVICE_BLUETOOTH:
39 return &profile_info->ProfileInfo.Bluetooth.net_info;
40 case NET_DEVICE_DEFAULT:
42 case NET_DEVICE_UNKNOWN:
49 static char *__profile_convert_ip_to_string(net_addr_t *ip_addr, connection_address_family_e address_family)
51 unsigned char *ipaddr = NULL;
54 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
55 ipaddr = (unsigned char *)&ip_addr->Data.Ipv4.s_addr;
56 ipstr = g_try_malloc0(INET_ADDRSTRLEN);
60 inet_ntop(AF_INET, ipaddr, ipstr, INET_ADDRSTRLEN);
63 ipaddr = (unsigned char *)&ip_addr->Data.Ipv6.s6_addr;
64 ipstr = g_try_malloc0(INET6_ADDRSTRLEN);
68 inet_ntop(AF_INET6, ipaddr, ipstr, INET6_ADDRSTRLEN);
75 static void __profile_init_cellular_profile(net_profile_info_t *profile_info, const char *keyword)
77 int default_subscriber_id = 0;
78 connection_profile_h profile = NULL;
80 profile_info->profile_type = NET_DEVICE_CELLULAR;
81 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
82 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_UNKNOWN;
83 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_UNKNOWN;
84 profile_info->ProfileInfo.Pdp.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
85 profile_info->ProfileInfo.Pdp.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
86 g_strlcpy(profile_info->ProfileInfo.Pdp.Keyword, keyword, NET_PDP_APN_LEN_MAX);
88 if (vconf_get_int(VCONF_TELEPHONY_DEFAULT_DATA_SERVICE,
89 &default_subscriber_id) != 0)
90 CONNECTION_LOG(CONNECTION_ERROR, //LCOV_EXCL_LINE
91 "Failed to get VCONF_TELEPHONY_DEFAULT_DATA_SERVICE");
93 profile = (connection_profile_h)profile_info;
94 _connection_libnet_set_cellular_subscriber_id(profile, default_subscriber_id);
97 static void __profile_init_wifi_profile(net_profile_info_t *profile_info)
99 profile_info->profile_type = NET_DEVICE_WIFI;
100 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
101 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
102 profile_info->ProfileInfo.Wlan.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
103 profile_info->ProfileInfo.Wlan.wlan_mode = NETPM_WLAN_CONNMODE_AUTO;
104 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_NONE;
105 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_NONE;
109 static const char* __profile_get_ethernet_proxy(void)
113 proxy = vconf_get_str(VCONFKEY_NETWORK_PROXY);
116 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get system proxy");
124 static int __profile_convert_netmask_to_prefix_len(const char *netmask)
129 in_addr_t mask = inet_network(netmask);
132 for (; mask; mask <<= 1)
138 static in_addr_t __profile_convert_prefix_len_to_netmask(int prefix_len)
140 return (prefix_len ? (in_addr_t) 0xFFFFFFFFu >> (32 - prefix_len) : 0);
144 connection_cellular_service_type_e _profile_convert_to_connection_cellular_service_type(net_service_type_t svc_type)
147 case NET_SERVICE_INTERNET:
148 return CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET;
149 case NET_SERVICE_MMS:
150 return CONNECTION_CELLULAR_SERVICE_TYPE_MMS;
151 case NET_SERVICE_PREPAID_INTERNET:
152 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET;
153 case NET_SERVICE_PREPAID_MMS:
154 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS;
155 case NET_SERVICE_TETHERING:
156 return CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING;
157 case NET_SERVICE_APPLICATION:
158 return CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION;
160 return CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
164 connection_profile_state_e _profile_convert_to_cp_state(net_state_type_t state)
166 connection_profile_state_e cp_state;
169 case NET_STATE_TYPE_ONLINE:
170 case NET_STATE_TYPE_READY:
171 cp_state = CONNECTION_PROFILE_STATE_CONNECTED;
173 case NET_STATE_TYPE_IDLE:
174 case NET_STATE_TYPE_FAILURE:
175 case NET_STATE_TYPE_DISCONNECT:
176 cp_state = CONNECTION_PROFILE_STATE_DISCONNECTED;
178 case NET_STATE_TYPE_ASSOCIATION:
179 cp_state = CONNECTION_PROFILE_STATE_ASSOCIATION;
181 case NET_STATE_TYPE_CONFIGURATION:
182 cp_state = CONNECTION_PROFILE_STATE_CONFIGURATION;
191 net_service_type_t _connection_profile_convert_to_libnet_cellular_service_type(connection_cellular_service_type_e svc_type)
194 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
195 return NET_SERVICE_INTERNET;
196 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
197 return NET_SERVICE_MMS;
198 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
199 return NET_SERVICE_PREPAID_INTERNET;
200 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
201 return NET_SERVICE_PREPAID_MMS;
202 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
203 return NET_SERVICE_TETHERING;
204 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
205 return NET_SERVICE_APPLICATION;
207 return NET_SERVICE_UNKNOWN;
211 net_state_type_t _connection_profile_convert_to_net_state(connection_profile_state_e state)
213 net_state_type_t libnet_state = NET_STATE_TYPE_UNKNOWN;
216 case CONNECTION_PROFILE_STATE_CONNECTED:
217 libnet_state = NET_STATE_TYPE_ONLINE;
219 case CONNECTION_PROFILE_STATE_DISCONNECTED:
220 libnet_state = NET_STATE_TYPE_IDLE;
222 case CONNECTION_PROFILE_STATE_ASSOCIATION:
223 libnet_state = NET_STATE_TYPE_ASSOCIATION;
225 case CONNECTION_PROFILE_STATE_CONFIGURATION:
226 libnet_state = NET_STATE_TYPE_CONFIGURATION;
234 /* Connection profile ********************************************************/
235 EXPORT_API int connection_profile_create(connection_profile_type_e type, const char* keyword, connection_profile_h* profile)
237 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
239 if (type == CONNECTION_PROFILE_TYPE_CELLULAR)
240 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
241 else if (type == CONNECTION_PROFILE_TYPE_WIFI)
242 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
244 if (type != CONNECTION_PROFILE_TYPE_CELLULAR &&
245 type != CONNECTION_PROFILE_TYPE_WIFI) {
246 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
247 return CONNECTION_ERROR_INVALID_PARAMETER;
250 if (profile == NULL) {
251 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
252 return CONNECTION_ERROR_INVALID_PARAMETER;
255 int rv = _connection_libnet_check_profile_privilege();
256 if (rv == CONNECTION_ERROR_PERMISSION_DENIED)
258 else if (rv != CONNECTION_ERROR_NONE) {
259 CONNECTION_LOG(CONNECTION_ERROR, "Failed to create profile"); //LCOV_EXCL_LINE
260 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
263 net_profile_info_t *profile_info = g_try_malloc0(sizeof(net_profile_info_t));
264 if (profile_info == NULL)
265 return CONNECTION_ERROR_OUT_OF_MEMORY;
268 case CONNECTION_PROFILE_TYPE_CELLULAR:
269 if (keyword == NULL) {
270 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
271 g_free(profile_info);
272 return CONNECTION_ERROR_INVALID_PARAMETER;
274 __profile_init_cellular_profile(profile_info, keyword);
276 case CONNECTION_PROFILE_TYPE_WIFI:
277 __profile_init_wifi_profile(profile_info);
283 *profile = (connection_profile_h)profile_info;
284 _connection_libnet_add_to_profile_list(*profile);
286 return CONNECTION_ERROR_NONE;
289 EXPORT_API int connection_profile_destroy(connection_profile_h profile)
291 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
293 if (!(_connection_libnet_check_profile_validity(profile))) {
294 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
295 return CONNECTION_ERROR_INVALID_PARAMETER;
298 _connection_libnet_remove_from_profile_list(profile);
300 return CONNECTION_ERROR_NONE;
303 EXPORT_API int connection_profile_clone(connection_profile_h* cloned_profile, connection_profile_h origin_profile)
305 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
307 if (!(_connection_libnet_check_profile_validity(origin_profile)) || cloned_profile == NULL) {
308 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
309 return CONNECTION_ERROR_INVALID_PARAMETER;
312 *cloned_profile = g_try_malloc0(sizeof(net_profile_info_t));
313 if (*cloned_profile == NULL)
314 return CONNECTION_ERROR_OUT_OF_MEMORY;
316 memcpy(*cloned_profile, origin_profile, sizeof(net_profile_info_t));
317 _connection_libnet_add_to_profile_list(*cloned_profile);
319 return CONNECTION_ERROR_NONE;
322 EXPORT_API int connection_profile_get_id(connection_profile_h profile, char** profile_id)
324 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
326 if (!(_connection_libnet_check_profile_validity(profile)) || profile_id == NULL) {
327 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
328 return CONNECTION_ERROR_INVALID_PARAMETER;
331 net_profile_info_t *profile_info = profile;
333 char *prof_id = strrchr(profile_info->ProfileName, '/');
335 return CONNECTION_ERROR_INVALID_PARAMETER;
338 *profile_id = g_strdup(prof_id);
340 if (*profile_id == NULL)
341 return CONNECTION_ERROR_OUT_OF_MEMORY;
343 return CONNECTION_ERROR_NONE;
346 EXPORT_API int connection_profile_get_name(connection_profile_h profile, char** profile_name)
348 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
350 if (!(_connection_libnet_check_profile_validity(profile)) || profile_name == NULL) {
351 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
352 return CONNECTION_ERROR_INVALID_PARAMETER;
355 net_profile_info_t *profile_info = profile;
357 switch (profile_info->profile_type) {
358 case NET_DEVICE_CELLULAR:
359 *profile_name = g_strdup(profile_info->ProfileInfo.Pdp.Keyword);
361 case NET_DEVICE_WIFI:
362 *profile_name = g_strdup(profile_info->ProfileInfo.Wlan.essid);
364 case NET_DEVICE_ETHERNET:
365 *profile_name = g_strdup(profile_info->ProfileInfo.Ethernet.net_info.DevName); //LCOV_EXCL_LINE
366 break; //LCOV_EXCL_LINE
367 case NET_DEVICE_BLUETOOTH: {
368 char *bt_name = strrchr(profile_info->ProfileName, '/');
370 return CONNECTION_ERROR_INVALID_PARAMETER;
373 *profile_name = g_strdup(bt_name);
376 return CONNECTION_ERROR_INVALID_PARAMETER;
379 if (*profile_name == NULL)
380 return CONNECTION_ERROR_OUT_OF_MEMORY;
382 return CONNECTION_ERROR_NONE;
385 EXPORT_API int connection_profile_get_type(connection_profile_h profile, connection_profile_type_e *type)
387 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
389 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
390 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
391 return CONNECTION_ERROR_INVALID_PARAMETER;
394 net_profile_info_t *profile_info = profile;
396 switch (profile_info->profile_type) {
397 case NET_DEVICE_CELLULAR:
398 *type = CONNECTION_PROFILE_TYPE_CELLULAR;
400 case NET_DEVICE_WIFI:
401 *type = CONNECTION_PROFILE_TYPE_WIFI;
403 case NET_DEVICE_ETHERNET:
404 *type = CONNECTION_PROFILE_TYPE_ETHERNET; //LCOV_EXCL_LINE
405 break; //LCOV_EXCL_LINE
406 case NET_DEVICE_BLUETOOTH:
407 *type = CONNECTION_PROFILE_TYPE_BT;
410 CONNECTION_LOG(CONNECTION_ERROR, "Invalid profile type");
411 return CONNECTION_ERROR_OPERATION_FAILED;
414 return CONNECTION_ERROR_NONE;
417 EXPORT_API int connection_profile_get_network_interface_name(connection_profile_h profile, char** interface_name)
419 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
421 if (!(_connection_libnet_check_profile_validity(profile)) || interface_name == NULL) {
422 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
423 return CONNECTION_ERROR_INVALID_PARAMETER;
426 net_profile_info_t *profile_info = profile;
427 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
428 if (net_info == NULL)
429 return CONNECTION_ERROR_INVALID_PARAMETER;
431 *interface_name = g_strdup(net_info->DevName);
432 if (*interface_name == NULL)
433 return CONNECTION_ERROR_OUT_OF_MEMORY;
435 return CONNECTION_ERROR_NONE;
438 EXPORT_API int connection_profile_refresh(connection_profile_h profile)
442 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
444 if (!(_connection_libnet_check_profile_validity(profile))) {
445 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
446 return CONNECTION_ERROR_INVALID_PARAMETER;
449 net_profile_info_t profile_info_local;
450 net_profile_info_t *profile_info = profile;
452 rv = net_get_profile_info(profile_info->ProfileName, &profile_info_local);
453 if (rv == NET_ERR_ACCESS_DENIED) {
454 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
455 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
456 } else if (rv != NET_ERR_NONE) {
457 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get profile information"); //LCOV_EXCL_LINE
458 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
461 memcpy(profile, &profile_info_local, sizeof(net_profile_info_t));
463 return CONNECTION_ERROR_NONE;
466 EXPORT_API int connection_profile_get_state(connection_profile_h profile, connection_profile_state_e* state)
468 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
470 if (!(_connection_libnet_check_profile_validity(profile)) || state == NULL) {
471 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
472 return CONNECTION_ERROR_INVALID_PARAMETER;
475 net_profile_info_t *profile_info = profile;
476 *state = _profile_convert_to_cp_state(profile_info->ProfileState);
478 return CONNECTION_ERROR_NONE;
481 EXPORT_API int connection_profile_get_ip_config_type(connection_profile_h profile,
482 connection_address_family_e address_family, connection_ip_config_type_e *type)
484 net_ip_config_type_t profile_type;
486 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
488 if (!(_connection_libnet_check_profile_validity(profile)) ||
489 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
490 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
492 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
493 return CONNECTION_ERROR_INVALID_PARAMETER;
496 net_profile_info_t *profile_info = profile;
497 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
498 if (net_info == NULL)
499 return CONNECTION_ERROR_OPERATION_FAILED;
501 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
502 profile_type = net_info->IpConfigType;
504 profile_type = net_info->IpConfigType6;
506 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
507 switch (profile_type) {
509 case NET_IP_CONFIG_TYPE_STATIC:
510 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
513 case NET_IP_CONFIG_TYPE_DYNAMIC:
514 *type = CONNECTION_IP_CONFIG_TYPE_DYNAMIC;
517 case NET_IP_CONFIG_TYPE_AUTO_IP:
518 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
521 case NET_IP_CONFIG_TYPE_FIXED:
522 *type = CONNECTION_IP_CONFIG_TYPE_FIXED;
525 case NET_IP_CONFIG_TYPE_OFF:
526 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
529 return CONNECTION_ERROR_OPERATION_FAILED;
534 switch (profile_type) {
535 case NET_IP_CONFIG_TYPE_STATIC:
536 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
539 case NET_IP_CONFIG_TYPE_AUTO_IP:
540 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
543 case NET_IP_CONFIG_TYPE_OFF:
544 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
548 return CONNECTION_ERROR_OPERATION_FAILED;
554 return CONNECTION_ERROR_NONE;
557 EXPORT_API int connection_profile_get_ip_address(connection_profile_h profile,
558 connection_address_family_e address_family, char** ip_address)
560 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
562 if (!(_connection_libnet_check_profile_validity(profile)) ||
563 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
564 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
565 ip_address == NULL) {
566 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
567 return CONNECTION_ERROR_INVALID_PARAMETER;
570 net_profile_info_t *profile_info = profile;
571 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
572 if (net_info == NULL)
573 return CONNECTION_ERROR_OPERATION_FAILED;
575 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
576 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr6,
579 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr,
582 if (*ip_address == NULL)
583 return CONNECTION_ERROR_OUT_OF_MEMORY;
585 return CONNECTION_ERROR_NONE;
588 EXPORT_API int connection_profile_get_subnet_mask(connection_profile_h profile,
589 connection_address_family_e address_family, char** subnet_mask)
593 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
595 if (!(_connection_libnet_check_profile_validity(profile)) ||
596 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
597 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
598 subnet_mask == NULL) {
599 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
600 return CONNECTION_ERROR_INVALID_PARAMETER;
603 net_profile_info_t *profile_info = profile;
604 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
605 if (net_info == NULL)
606 return CONNECTION_ERROR_OPERATION_FAILED;
608 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
610 prefixlen = g_try_malloc0(MAX_PREFIX_LENGTH);
611 if (prefixlen != NULL) {
612 snprintf(prefixlen, MAX_PREFIX_LENGTH, "%d", net_info->PrefixLen6);
613 *subnet_mask = prefixlen;
618 *subnet_mask = __profile_convert_ip_to_string(&net_info->SubnetMask,
621 if (*subnet_mask == NULL)
622 return CONNECTION_ERROR_OUT_OF_MEMORY;
624 return CONNECTION_ERROR_NONE;
627 EXPORT_API int connection_profile_get_gateway_address(connection_profile_h profile,
628 connection_address_family_e address_family, char** gateway_address)
630 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
632 if (!(_connection_libnet_check_profile_validity(profile)) ||
633 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
634 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
635 gateway_address == NULL) {
636 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
637 return CONNECTION_ERROR_INVALID_PARAMETER;
640 net_profile_info_t *profile_info = profile;
641 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
642 if (net_info == NULL)
643 return CONNECTION_ERROR_OPERATION_FAILED;
645 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
646 *gateway_address = __profile_convert_ip_to_string(
647 &net_info->GatewayAddr6, address_family);
649 *gateway_address = __profile_convert_ip_to_string(
650 &net_info->GatewayAddr, address_family);
652 if (*gateway_address == NULL)
653 return CONNECTION_ERROR_OUT_OF_MEMORY;
655 return CONNECTION_ERROR_NONE;
658 EXPORT_API int connection_profile_get_dns_address(connection_profile_h profile, int order,
659 connection_address_family_e address_family, char** dns_address)
661 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
663 if (!(_connection_libnet_check_profile_validity(profile)) ||
664 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
665 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
666 dns_address == NULL ||
668 order > NET_DNS_ADDR_MAX) {
669 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
670 return CONNECTION_ERROR_INVALID_PARAMETER;
673 net_profile_info_t *profile_info = profile;
674 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
675 if (net_info == NULL)
676 return CONNECTION_ERROR_OPERATION_FAILED;
678 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
679 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr[order-1],
681 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) //LCOV_EXCL_LINE
682 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr6[order-1], //LCOV_EXCL_LINE
685 CONNECTION_LOG(CONNECTION_ERROR, "Invalid address family\n"); //LCOV_EXCL_LINE
687 if (*dns_address == NULL)
688 return CONNECTION_ERROR_OUT_OF_MEMORY;
690 return CONNECTION_ERROR_NONE;
693 EXPORT_API int connection_profile_get_proxy_type(connection_profile_h profile, connection_proxy_type_e *type)
695 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
697 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
698 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
699 return CONNECTION_ERROR_INVALID_PARAMETER;
703 net_profile_info_t *profile_info = profile;
704 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
705 if (net_info == NULL)
706 return CONNECTION_ERROR_OPERATION_FAILED;
709 if (profile_info->profile_type == NET_DEVICE_ETHERNET) {
710 proxy = __profile_get_ethernet_proxy();
712 *type = CONNECTION_PROXY_TYPE_DIRECT;
714 *type = CONNECTION_PROXY_TYPE_MANUAL;
716 return CONNECTION_ERROR_NONE;
720 switch (net_info->ProxyMethod) {
722 case NET_PROXY_TYPE_DIRECT:
723 *type = CONNECTION_PROXY_TYPE_DIRECT;
725 case NET_PROXY_TYPE_AUTO:
726 *type = CONNECTION_PROXY_TYPE_AUTO;
728 case NET_PROXY_TYPE_MANUAL:
729 *type = CONNECTION_PROXY_TYPE_MANUAL;
731 case NET_PROXY_TYPE_UNKNOWN:
733 return CONNECTION_ERROR_OPERATION_FAILED;
737 return CONNECTION_ERROR_NONE;
740 EXPORT_API int connection_profile_get_proxy_address(connection_profile_h profile,
741 connection_address_family_e address_family, char** proxy_address)
743 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
745 if (!(_connection_libnet_check_profile_validity(profile)) ||
746 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
747 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
748 proxy_address == NULL) {
749 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
750 return CONNECTION_ERROR_INVALID_PARAMETER;
753 net_profile_info_t *profile_info = profile;
754 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
755 if (net_info == NULL)
756 return CONNECTION_ERROR_OPERATION_FAILED;
758 *proxy_address = g_strdup(net_info->ProxyAddr);
760 if (*proxy_address == NULL)
761 return CONNECTION_ERROR_OUT_OF_MEMORY;
763 return CONNECTION_ERROR_NONE;
766 EXPORT_API int connection_profile_set_ip_config_type(connection_profile_h profile,
767 connection_address_family_e address_family, connection_ip_config_type_e type)
769 net_ip_config_type_t *profile_type = NULL;
771 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
773 if (!(_connection_libnet_check_profile_validity(profile)) ||
774 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
775 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
776 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
777 return CONNECTION_ERROR_INVALID_PARAMETER;
780 net_profile_info_t *profile_info = profile;
781 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
782 if (net_info == NULL)
783 return CONNECTION_ERROR_OPERATION_FAILED;
785 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
786 profile_type = &net_info->IpConfigType ;
788 profile_type = &net_info->IpConfigType6 ;
790 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
793 case CONNECTION_IP_CONFIG_TYPE_STATIC:
794 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
795 net_info->IpAddr.Data.Ipv4.s_addr = 0;
796 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
797 net_info->GatewayAddr.Data.Ipv4.s_addr = 0 ;
800 case CONNECTION_IP_CONFIG_TYPE_DYNAMIC:
801 *profile_type = NET_IP_CONFIG_TYPE_DYNAMIC;
804 case CONNECTION_IP_CONFIG_TYPE_AUTO:
805 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
808 case CONNECTION_IP_CONFIG_TYPE_FIXED:
809 net_info->IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
812 case CONNECTION_IP_CONFIG_TYPE_NONE:
813 *profile_type = NET_IP_CONFIG_TYPE_OFF;
817 return CONNECTION_ERROR_INVALID_PARAMETER;
823 case CONNECTION_IP_CONFIG_TYPE_STATIC:
824 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
825 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
826 net_info->PrefixLen6 = 0 ;
827 inet_pton(AF_INET6, "::",
828 &net_info->GatewayAddr6.Data.Ipv6);
831 case CONNECTION_IP_CONFIG_TYPE_AUTO:
832 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
835 case CONNECTION_IP_CONFIG_TYPE_NONE:
836 *profile_type = NET_IP_CONFIG_TYPE_OFF;
840 return CONNECTION_ERROR_INVALID_PARAMETER;
845 return CONNECTION_ERROR_NONE;
848 EXPORT_API int connection_profile_set_ip_address(connection_profile_h profile,
849 connection_address_family_e address_family, const char* ip_address)
851 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
853 if (!(_connection_libnet_check_profile_validity(profile)) ||
854 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
855 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
856 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
857 return CONNECTION_ERROR_INVALID_PARAMETER;
860 net_profile_info_t *profile_info = profile;
861 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
862 if (net_info == NULL)
863 return CONNECTION_ERROR_OPERATION_FAILED;
865 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
867 if (ip_address == NULL)
868 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
869 else if (inet_pton(AF_INET6, ip_address,
870 &net_info->IpAddr6.Data.Ipv6) < 1)
871 return CONNECTION_ERROR_INVALID_PARAMETER;
874 if (ip_address == NULL)
875 net_info->IpAddr.Data.Ipv4.s_addr = 0;
876 else if (inet_pton(AF_INET, ip_address,
877 &net_info->IpAddr.Data.Ipv4) < 1)
878 return CONNECTION_ERROR_INVALID_PARAMETER;
881 return CONNECTION_ERROR_NONE;
884 EXPORT_API int connection_profile_set_subnet_mask(connection_profile_h profile,
885 connection_address_family_e address_family, const char* subnet_mask)
887 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
889 if (!(_connection_libnet_check_profile_validity(profile)) ||
890 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
891 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
892 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
893 return CONNECTION_ERROR_INVALID_PARAMETER;
896 net_profile_info_t *profile_info = profile;
897 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
898 if (net_info == NULL)
899 return CONNECTION_ERROR_OPERATION_FAILED;
901 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
903 if (subnet_mask == NULL)
904 net_info->PrefixLen6 = 0 ;
906 net_info->PrefixLen6 = atoi(subnet_mask) ;
909 if (subnet_mask == NULL)
910 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
911 else if (inet_pton(AF_INET, subnet_mask , &net_info->SubnetMask.Data.Ipv4) < 1)
912 return CONNECTION_ERROR_INVALID_PARAMETER;
914 net_info->PrefixLen = __profile_convert_netmask_to_prefix_len(subnet_mask);
917 return CONNECTION_ERROR_NONE;
920 EXPORT_API int connection_profile_set_gateway_address(connection_profile_h profile,
921 connection_address_family_e address_family, const char* gateway_address)
923 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
925 if (!(_connection_libnet_check_profile_validity(profile)) ||
926 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
927 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
928 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
929 return CONNECTION_ERROR_INVALID_PARAMETER;
932 net_profile_info_t *profile_info = profile;
933 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
934 if (net_info == NULL)
935 return CONNECTION_ERROR_OPERATION_FAILED;
937 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
939 if (gateway_address == NULL)
940 inet_pton(AF_INET6, "::", &net_info->GatewayAddr6.Data.Ipv6);
941 else if (inet_pton(AF_INET6, gateway_address, &net_info->GatewayAddr6.Data.Ipv6) < 1)
942 return CONNECTION_ERROR_INVALID_PARAMETER;
945 if (gateway_address == NULL)
946 net_info->GatewayAddr.Data.Ipv4.s_addr = 0;
947 else if (inet_pton(AF_INET, gateway_address, &(net_info->GatewayAddr.Data.Ipv4)) < 1)
948 return CONNECTION_ERROR_INVALID_PARAMETER;
951 return CONNECTION_ERROR_NONE;
954 EXPORT_API int connection_profile_set_dns_address(connection_profile_h profile, int order,
955 connection_address_family_e address_family, const char* dns_address)
957 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
959 if (!(_connection_libnet_check_profile_validity(profile)) ||
960 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
961 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
963 order > NET_DNS_ADDR_MAX) {
964 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
965 return CONNECTION_ERROR_INVALID_PARAMETER;
968 net_profile_info_t *profile_info = profile;
969 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
970 if (net_info == NULL)
971 return CONNECTION_ERROR_OPERATION_FAILED;
973 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
975 net_info->DnsAddr6[order-1].Type = NET_ADDR_IPV6;
976 if (dns_address == NULL)
977 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[order-1].Data.Ipv6);
978 else if (inet_pton(AF_INET6, dns_address, &net_info->DnsAddr6[order-1].Data.Ipv6) < 1)
979 return CONNECTION_ERROR_INVALID_PARAMETER;
980 if (net_info->DnsCount6 < order)
981 net_info->DnsCount6 = order;
984 net_info->DnsAddr[order-1].Type = NET_ADDR_IPV4;
985 if (dns_address == NULL)
986 net_info->DnsAddr[order-1].Data.Ipv4.s_addr = 0;
987 else if (inet_pton(AF_INET, dns_address, &(net_info->DnsAddr[order-1].Data.Ipv4)) < 1)
988 return CONNECTION_ERROR_INVALID_PARAMETER;
989 if (net_info->DnsCount < order)
990 net_info->DnsCount = order;
993 return CONNECTION_ERROR_NONE;
996 EXPORT_API int connection_profile_set_proxy_type(connection_profile_h profile, connection_proxy_type_e type)
998 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1000 if (!(_connection_libnet_check_profile_validity(profile))) {
1001 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1002 return CONNECTION_ERROR_INVALID_PARAMETER;
1005 net_profile_info_t *profile_info = profile;
1006 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1007 if (net_info == NULL)
1008 return CONNECTION_ERROR_OPERATION_FAILED;
1012 case CONNECTION_PROXY_TYPE_DIRECT:
1013 net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
1015 case CONNECTION_PROXY_TYPE_AUTO:
1016 net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
1018 case CONNECTION_PROXY_TYPE_MANUAL:
1019 net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
1022 return CONNECTION_ERROR_INVALID_PARAMETER;
1026 return CONNECTION_ERROR_NONE;
1029 EXPORT_API int connection_profile_set_proxy_address(connection_profile_h profile,
1030 connection_address_family_e address_family, const char* proxy_address)
1032 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1034 CONNECTION_LOG(CONNECTION_ERROR, "Address Family: ", address_family);
1035 if (!(_connection_libnet_check_profile_validity(profile)) ||
1036 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1037 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1038 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1039 return CONNECTION_ERROR_INVALID_PARAMETER;
1042 net_profile_info_t *profile_info = profile;
1043 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1044 if (net_info == NULL)
1045 return CONNECTION_ERROR_OPERATION_FAILED;
1047 if (proxy_address == NULL)
1048 net_info->ProxyAddr[0] = '\0';
1050 g_strlcpy(net_info->ProxyAddr, proxy_address, NET_PROXY_LEN_MAX);
1052 return CONNECTION_ERROR_NONE;
1055 EXPORT_API int connection_profile_set_state_changed_cb(connection_profile_h profile,
1056 connection_profile_state_changed_cb callback, void* user_data)
1058 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1060 if (!(_connection_libnet_check_profile_validity(profile)) || callback == NULL) {
1061 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1062 return CONNECTION_ERROR_INVALID_PARAMETER;
1065 if (_connection_libnet_add_to_profile_cb_list(profile, callback, user_data))
1066 return CONNECTION_ERROR_NONE;
1068 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1071 EXPORT_API int connection_profile_unset_state_changed_cb(connection_profile_h profile)
1073 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1075 if (!(_connection_libnet_check_profile_validity(profile))) {
1076 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1077 return CONNECTION_ERROR_INVALID_PARAMETER;
1080 if (_connection_libnet_remove_from_profile_cb_list(profile) != true)
1081 return CONNECTION_ERROR_INVALID_PARAMETER;
1083 return CONNECTION_ERROR_NONE;
1087 /* Wi-Fi profile *************************************************************/
1088 EXPORT_API int connection_profile_get_wifi_essid(connection_profile_h profile, char** essid)
1090 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1092 if (!(_connection_libnet_check_profile_validity(profile)) || essid == NULL) {
1093 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1094 return CONNECTION_ERROR_INVALID_PARAMETER;
1097 net_profile_info_t *profile_info = profile;
1099 if (profile_info->profile_type != NET_DEVICE_WIFI)
1100 return CONNECTION_ERROR_INVALID_PARAMETER;
1102 *essid = g_strdup(profile_info->ProfileInfo.Wlan.essid);
1104 return CONNECTION_ERROR_OUT_OF_MEMORY;
1106 return CONNECTION_ERROR_NONE;
1109 EXPORT_API int connection_profile_get_wifi_bssid(connection_profile_h profile, char** bssid)
1111 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1113 if (!(_connection_libnet_check_profile_validity(profile)) || bssid == NULL) {
1114 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1115 return CONNECTION_ERROR_INVALID_PARAMETER;
1118 net_profile_info_t *profile_info = profile;
1120 if (profile_info->profile_type != NET_DEVICE_WIFI)
1121 return CONNECTION_ERROR_INVALID_PARAMETER;
1123 *bssid = g_strdup(profile_info->ProfileInfo.Wlan.bssid);
1125 return CONNECTION_ERROR_OUT_OF_MEMORY;
1127 return CONNECTION_ERROR_NONE;
1130 EXPORT_API int connection_profile_get_wifi_rssi(connection_profile_h profile, int* rssi)
1132 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1134 if (!(_connection_libnet_check_profile_validity(profile)) || rssi == NULL) {
1135 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1136 return CONNECTION_ERROR_INVALID_PARAMETER;
1139 net_profile_info_t *profile_info = profile;
1141 if (profile_info->profile_type != NET_DEVICE_WIFI)
1142 return CONNECTION_ERROR_INVALID_PARAMETER;
1144 *rssi = (int)profile_info->ProfileInfo.Wlan.Strength;
1146 return CONNECTION_ERROR_NONE;
1149 EXPORT_API int connection_profile_get_wifi_frequency(connection_profile_h profile, int* frequency)
1151 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1153 if (!(_connection_libnet_check_profile_validity(profile)) || frequency == NULL) {
1154 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1155 return CONNECTION_ERROR_INVALID_PARAMETER;
1158 net_profile_info_t *profile_info = profile;
1160 if (profile_info->profile_type != NET_DEVICE_WIFI)
1161 return CONNECTION_ERROR_INVALID_PARAMETER;
1163 *frequency = (int)profile_info->ProfileInfo.Wlan.frequency;
1165 return CONNECTION_ERROR_NONE;
1168 EXPORT_API int connection_profile_get_wifi_max_speed(connection_profile_h profile, int* max_speed)
1170 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1172 if (!(_connection_libnet_check_profile_validity(profile)) || max_speed == NULL) {
1173 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1174 return CONNECTION_ERROR_INVALID_PARAMETER;
1177 net_profile_info_t *profile_info = profile;
1179 if (profile_info->profile_type != NET_DEVICE_WIFI)
1180 return CONNECTION_ERROR_INVALID_PARAMETER;
1182 *max_speed = (int)profile_info->ProfileInfo.Wlan.max_rate / 1000000;
1184 return CONNECTION_ERROR_NONE;
1187 EXPORT_API int connection_profile_get_wifi_security_type(connection_profile_h profile, connection_wifi_security_type_e *type)
1189 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1191 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1192 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1193 return CONNECTION_ERROR_INVALID_PARAMETER;
1196 net_profile_info_t *profile_info = profile;
1198 if (profile_info->profile_type != NET_DEVICE_WIFI)
1199 return CONNECTION_ERROR_INVALID_PARAMETER;
1201 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
1203 case WLAN_SEC_MODE_NONE:
1204 *type = CONNECTION_WIFI_SECURITY_TYPE_NONE;
1206 case WLAN_SEC_MODE_WEP:
1207 *type = CONNECTION_WIFI_SECURITY_TYPE_WEP;
1209 case WLAN_SEC_MODE_IEEE8021X:
1210 *type = CONNECTION_WIFI_SECURITY_TYPE_EAP;
1212 case WLAN_SEC_MODE_WPA_PSK:
1213 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA_PSK;
1215 case WLAN_SEC_MODE_WPA2_PSK:
1216 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA2_PSK;
1219 return CONNECTION_ERROR_OPERATION_FAILED;
1223 return CONNECTION_ERROR_NONE;
1226 EXPORT_API int connection_profile_get_wifi_encryption_type(connection_profile_h profile, connection_wifi_encryption_type_e *type)
1228 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1230 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1231 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1232 return CONNECTION_ERROR_INVALID_PARAMETER;
1235 net_profile_info_t *profile_info = profile;
1237 if (profile_info->profile_type != NET_DEVICE_WIFI)
1238 return CONNECTION_ERROR_INVALID_PARAMETER;
1240 switch (profile_info->ProfileInfo.Wlan.security_info.enc_mode) {
1242 case WLAN_ENC_MODE_NONE:
1243 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_NONE;
1245 case WLAN_ENC_MODE_WEP:
1246 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_WEP;
1248 case WLAN_ENC_MODE_TKIP:
1249 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP;
1251 case WLAN_ENC_MODE_AES:
1252 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_AES;
1254 case WLAN_ENC_MODE_TKIP_AES_MIXED:
1255 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP_AES_MIXED;
1258 return CONNECTION_ERROR_OPERATION_FAILED;
1262 return CONNECTION_ERROR_NONE;
1265 EXPORT_API int connection_profile_is_wifi_passphrase_required(connection_profile_h profile, bool* required)
1267 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1269 if (!(_connection_libnet_check_profile_validity(profile)) || required == NULL) {
1270 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1271 return CONNECTION_ERROR_INVALID_PARAMETER;
1274 net_profile_info_t *profile_info = profile;
1276 if (profile_info->profile_type != NET_DEVICE_WIFI)
1277 return CONNECTION_ERROR_INVALID_PARAMETER;
1279 if (profile_info->Favourite) {
1281 return CONNECTION_ERROR_NONE;
1284 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
1286 case WLAN_SEC_MODE_NONE:
1289 case WLAN_SEC_MODE_WEP:
1290 case WLAN_SEC_MODE_IEEE8021X:
1291 case WLAN_SEC_MODE_WPA_PSK:
1292 case WLAN_SEC_MODE_WPA2_PSK:
1296 return CONNECTION_ERROR_OPERATION_FAILED;
1300 return CONNECTION_ERROR_NONE;
1303 EXPORT_API int connection_profile_set_wifi_passphrase(connection_profile_h profile, const char* passphrase)
1305 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1307 if (!(_connection_libnet_check_profile_validity(profile)) || passphrase == NULL) {
1308 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1309 return CONNECTION_ERROR_INVALID_PARAMETER;
1312 net_profile_info_t *profile_info = profile;
1314 if (profile_info->profile_type != NET_DEVICE_WIFI)
1315 return CONNECTION_ERROR_INVALID_PARAMETER;
1317 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.psk.pskKey,
1318 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1320 return CONNECTION_ERROR_NONE;
1323 EXPORT_API int connection_profile_is_wifi_wps_supported(connection_profile_h profile, bool* supported)
1325 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1327 if (!(_connection_libnet_check_profile_validity(profile)) || supported == NULL) {
1328 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1329 return CONNECTION_ERROR_INVALID_PARAMETER;
1332 net_profile_info_t *profile_info = profile;
1334 if (profile_info->profile_type != NET_DEVICE_WIFI)
1335 return CONNECTION_ERROR_INVALID_PARAMETER;
1337 if (profile_info->ProfileInfo.Wlan.security_info.wps_support)
1342 return CONNECTION_ERROR_NONE;
1346 /* Cellular profile **********************************************************/
1347 EXPORT_API int connection_profile_get_cellular_service_type(connection_profile_h profile,
1348 connection_cellular_service_type_e* type)
1350 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1352 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1353 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1354 return CONNECTION_ERROR_INVALID_PARAMETER;
1357 net_profile_info_t *profile_info = profile;
1359 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1360 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1361 return CONNECTION_ERROR_INVALID_PARAMETER;
1364 *type = _profile_convert_to_connection_cellular_service_type(profile_info->ProfileInfo.Pdp.ServiceType);
1366 if (*type == CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN) {
1367 CONNECTION_LOG(CONNECTION_ERROR, "Invalid service type Passed"); //LCOV_EXCL_LINE
1368 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1371 return CONNECTION_ERROR_NONE;
1374 EXPORT_API int connection_profile_get_cellular_apn(connection_profile_h profile, char** apn)
1376 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1378 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1379 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1380 return CONNECTION_ERROR_INVALID_PARAMETER;
1383 net_profile_info_t *profile_info = profile;
1385 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1386 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1387 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1390 *apn = g_strdup(profile_info->ProfileInfo.Pdp.Apn);
1392 return CONNECTION_ERROR_OUT_OF_MEMORY;
1394 return CONNECTION_ERROR_NONE;
1397 EXPORT_API int connection_profile_get_cellular_auth_info(connection_profile_h profile,
1398 connection_cellular_auth_type_e *type, char** user_name, char** password)
1400 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1402 if (!(_connection_libnet_check_profile_validity(profile)) ||
1403 type == NULL || user_name == NULL || password == NULL) {
1404 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1405 return CONNECTION_ERROR_INVALID_PARAMETER;
1408 net_profile_info_t *profile_info = profile;
1410 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1411 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1412 return CONNECTION_ERROR_INVALID_PARAMETER;
1415 switch (profile_info->ProfileInfo.Pdp.AuthInfo.AuthType) {
1417 case NET_PDP_AUTH_NONE:
1418 *type = CONNECTION_CELLULAR_AUTH_TYPE_NONE;
1420 case NET_PDP_AUTH_PAP:
1421 *type = CONNECTION_CELLULAR_AUTH_TYPE_PAP;
1423 case NET_PDP_AUTH_CHAP:
1424 *type = CONNECTION_CELLULAR_AUTH_TYPE_CHAP;
1427 return CONNECTION_ERROR_OPERATION_FAILED;
1431 *user_name = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.UserName);
1432 if (*user_name == NULL)
1433 return CONNECTION_ERROR_OUT_OF_MEMORY;
1435 *password = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.Password);
1436 if (*password == NULL) {
1437 g_free(*user_name); //LCOV_EXCL_LINE
1438 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1441 return CONNECTION_ERROR_NONE;
1444 EXPORT_API int connection_profile_get_cellular_home_url(connection_profile_h profile, char** home_url)
1446 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1448 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1449 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1450 return CONNECTION_ERROR_INVALID_PARAMETER;
1453 net_profile_info_t *profile_info = profile;
1455 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1456 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1457 return CONNECTION_ERROR_INVALID_PARAMETER;
1460 *home_url = g_strdup(profile_info->ProfileInfo.Pdp.HomeURL);
1461 if (*home_url == NULL)
1462 return CONNECTION_ERROR_OUT_OF_MEMORY;
1464 return CONNECTION_ERROR_NONE;
1467 EXPORT_API int connection_profile_get_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
1469 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1471 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1472 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1473 return CONNECTION_ERROR_INVALID_PARAMETER;
1476 net_profile_info_t *profile_info = profile;
1478 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1479 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1480 return CONNECTION_ERROR_INVALID_PARAMETER;
1483 switch (profile_info->ProfileInfo.Pdp.PdnType) {
1485 case NET_PDN_TYPE_UNKNOWN:
1486 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
1488 case NET_PDN_TYPE_IPV4:
1489 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
1491 case NET_PDN_TYPE_IPV6:
1492 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
1494 case NET_PDN_TYPE_IPV4_IPV6:
1495 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
1498 return CONNECTION_ERROR_OPERATION_FAILED;
1502 return CONNECTION_ERROR_NONE;
1505 EXPORT_API int connection_profile_get_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
1507 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1509 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1510 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1511 return CONNECTION_ERROR_INVALID_PARAMETER;
1514 net_profile_info_t *profile_info = profile;
1516 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1517 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1518 return CONNECTION_ERROR_INVALID_PARAMETER;
1521 switch (profile_info->ProfileInfo.Pdp.RoamPdnType) {
1523 case NET_PDN_TYPE_UNKNOWN:
1524 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
1526 case NET_PDN_TYPE_IPV4:
1527 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
1529 case NET_PDN_TYPE_IPV6:
1530 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
1532 case NET_PDN_TYPE_IPV4_IPV6:
1533 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
1536 return CONNECTION_ERROR_OPERATION_FAILED;
1540 return CONNECTION_ERROR_NONE;
1543 EXPORT_API int connection_profile_is_cellular_roaming(connection_profile_h profile, bool* is_roaming)
1545 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1547 if (!(_connection_libnet_check_profile_validity(profile)) || is_roaming == NULL) {
1548 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1549 return CONNECTION_ERROR_INVALID_PARAMETER;
1552 net_profile_info_t *profile_info = profile;
1554 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1555 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1556 return CONNECTION_ERROR_INVALID_PARAMETER;
1559 if (profile_info->ProfileInfo.Pdp.Roaming)
1562 *is_roaming = false;
1564 return CONNECTION_ERROR_NONE;
1567 EXPORT_API int connection_profile_is_cellular_hidden(connection_profile_h profile, bool* is_hidden)
1569 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1571 if (!(_connection_libnet_check_profile_validity(profile)) || is_hidden == NULL) {
1572 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1573 return CONNECTION_ERROR_INVALID_PARAMETER;
1576 net_profile_info_t *profile_info = profile;
1578 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1579 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1580 return CONNECTION_ERROR_INVALID_PARAMETER;
1583 if (profile_info->ProfileInfo.Pdp.Hidden)
1588 return CONNECTION_ERROR_NONE;
1591 EXPORT_API int connection_profile_is_cellular_editable(connection_profile_h profile, bool* is_editable)
1593 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1595 if (!(_connection_libnet_check_profile_validity(profile)) || is_editable == NULL) {
1596 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1597 return CONNECTION_ERROR_INVALID_PARAMETER;
1600 net_profile_info_t *profile_info = profile;
1602 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1603 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1604 return CONNECTION_ERROR_INVALID_PARAMETER;
1607 if (profile_info->ProfileInfo.Pdp.Editable)
1608 *is_editable = true;
1610 *is_editable = false;
1612 return CONNECTION_ERROR_NONE;
1615 EXPORT_API int connection_profile_is_cellular_default(connection_profile_h profile, bool* is_default)
1617 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1619 if (!(_connection_libnet_check_profile_validity(profile)) || is_default == NULL) {
1620 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1621 return CONNECTION_ERROR_INVALID_PARAMETER;
1624 net_profile_info_t *profile_info = profile;
1626 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1627 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1628 return CONNECTION_ERROR_INVALID_PARAMETER;
1631 if (profile_info->ProfileInfo.Pdp.DefaultConn)
1634 *is_default = false;
1636 return CONNECTION_ERROR_NONE;
1639 EXPORT_API int connection_profile_set_cellular_service_type(connection_profile_h profile,
1640 connection_cellular_service_type_e service_type)
1642 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1644 if (!(_connection_libnet_check_profile_validity(profile))) {
1645 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1646 return CONNECTION_ERROR_INVALID_PARAMETER;
1649 net_profile_info_t *profile_info = profile;
1651 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1652 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1653 return CONNECTION_ERROR_INVALID_PARAMETER;
1656 switch (service_type) {
1658 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
1659 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_INTERNET;
1661 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
1662 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_MMS;
1664 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
1665 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_INTERNET;
1667 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
1668 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_MMS;
1670 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
1671 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_TETHERING;
1673 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
1674 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_APPLICATION;
1676 case CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN:
1678 return CONNECTION_ERROR_INVALID_PARAMETER;
1682 return CONNECTION_ERROR_NONE;
1685 EXPORT_API int connection_profile_set_cellular_apn(connection_profile_h profile, const char* apn)
1687 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1689 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1690 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1691 return CONNECTION_ERROR_INVALID_PARAMETER;
1694 net_profile_info_t *profile_info = profile;
1696 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1697 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1698 return CONNECTION_ERROR_INVALID_PARAMETER;
1701 g_strlcpy(profile_info->ProfileInfo.Pdp.Apn, apn, NET_PDP_APN_LEN_MAX+1);
1703 return CONNECTION_ERROR_NONE;
1706 EXPORT_API int connection_profile_set_cellular_auth_info(connection_profile_h profile,
1707 connection_cellular_auth_type_e type, const char* user_name, const char* password)
1709 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1711 if (!(_connection_libnet_check_profile_validity(profile)) ||
1712 user_name == NULL || password == NULL) {
1713 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1714 return CONNECTION_ERROR_INVALID_PARAMETER;
1717 net_profile_info_t *profile_info = profile;
1719 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1720 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1721 return CONNECTION_ERROR_INVALID_PARAMETER;
1726 case CONNECTION_CELLULAR_AUTH_TYPE_NONE:
1727 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_NONE;
1729 case CONNECTION_CELLULAR_AUTH_TYPE_PAP:
1730 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_PAP;
1732 case CONNECTION_CELLULAR_AUTH_TYPE_CHAP:
1733 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_CHAP;
1736 return CONNECTION_ERROR_INVALID_PARAMETER;
1740 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.UserName, user_name, NET_PDP_AUTH_USERNAME_LEN_MAX+1);
1741 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.Password, password, NET_PDP_AUTH_PASSWORD_LEN_MAX+1);
1743 return CONNECTION_ERROR_NONE;
1746 EXPORT_API int connection_profile_set_cellular_home_url(connection_profile_h profile, const char* home_url)
1748 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1750 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1751 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1752 return CONNECTION_ERROR_INVALID_PARAMETER;
1755 net_profile_info_t *profile_info = profile;
1757 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1758 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1759 return CONNECTION_ERROR_INVALID_PARAMETER;
1762 g_strlcpy(profile_info->ProfileInfo.Pdp.HomeURL, home_url, NET_HOME_URL_LEN_MAX);
1764 return CONNECTION_ERROR_NONE;
1767 EXPORT_API int connection_profile_set_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
1769 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1771 if (!(_connection_libnet_check_profile_validity(profile))) {
1772 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1773 return CONNECTION_ERROR_INVALID_PARAMETER;
1776 net_profile_info_t *profile_info = profile;
1778 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1779 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1780 return CONNECTION_ERROR_INVALID_PARAMETER;
1785 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
1786 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4;
1788 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
1789 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV6;
1791 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
1792 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4_IPV6;
1795 return CONNECTION_ERROR_INVALID_PARAMETER;
1799 return CONNECTION_ERROR_NONE;
1802 EXPORT_API int connection_profile_set_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
1804 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1806 if (!(_connection_libnet_check_profile_validity(profile))) {
1807 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1808 return CONNECTION_ERROR_INVALID_PARAMETER;
1811 net_profile_info_t *profile_info = profile;
1813 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1814 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1815 return CONNECTION_ERROR_INVALID_PARAMETER;
1820 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
1821 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4;
1823 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
1824 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV6;
1826 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
1827 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4_IPV6;
1830 return CONNECTION_ERROR_INVALID_PARAMETER;
1834 return CONNECTION_ERROR_NONE;
1837 EXPORT_API int connection_profile_get_ipv6_state(connection_profile_h profile, connection_profile_state_e *state)
1839 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
1840 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1842 if (!(_connection_libnet_check_profile_validity(profile)) ||
1844 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1845 return CONNECTION_ERROR_INVALID_PARAMETER;
1848 net_profile_info_t *profile_info = profile;
1849 *state = _profile_convert_to_cp_state(profile_info->ProfileState6);
1851 return CONNECTION_ERROR_OPERATION_FAILED;
1853 return CONNECTION_ERROR_NONE;
1856 EXPORT_API int connection_profile_set_dns_config_type(connection_profile_h profile,
1857 connection_address_family_e address_family, connection_dns_config_type_e type)
1859 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
1860 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1862 if (!(_connection_libnet_check_profile_validity(profile))) {
1863 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1864 return CONNECTION_ERROR_INVALID_PARAMETER;
1867 if ((address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1868 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1869 (type != CONNECTION_DNS_CONFIG_TYPE_STATIC &&
1870 type != CONNECTION_DNS_CONFIG_TYPE_DYNAMIC)) {
1871 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1872 return CONNECTION_ERROR_INVALID_PARAMETER;
1875 net_dns_config_type_t *profileType = NULL;
1876 net_dns_config_type_t *profileType6 = NULL;
1877 net_profile_info_t *profile_info = profile;
1879 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1880 if (net_info == NULL)
1881 return CONNECTION_ERROR_OPERATION_FAILED;
1883 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
1884 profileType = &net_info->DnsConfigType;
1885 net_info->DnsAddr[0].Data.Ipv4.s_addr = 0;
1886 net_info->DnsAddr[1].Data.Ipv4.s_addr = 0;
1887 *profileType = type;
1889 profileType6 = &net_info->DnsConfigType6;
1890 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[0].Data.Ipv6);
1891 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[1].Data.Ipv6);
1892 *profileType6 = type;
1895 return CONNECTION_ERROR_NONE;
1898 EXPORT_API int connection_profile_get_dns_config_type(connection_profile_h profile,
1899 connection_address_family_e address_family, connection_dns_config_type_e *type)
1901 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
1902 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1904 if (!(_connection_libnet_check_profile_validity(profile)) ||
1905 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1906 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1908 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1909 return CONNECTION_ERROR_INVALID_PARAMETER;
1912 net_dns_config_type_t profileType;
1913 net_profile_info_t *profile_info = profile;
1914 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1915 if (net_info == NULL)
1916 return CONNECTION_ERROR_OPERATION_FAILED;
1918 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
1919 profileType = net_info->DnsConfigType;
1921 profileType = net_info->DnsConfigType6;
1923 switch (profileType) {
1924 case NET_DNS_CONFIG_TYPE_STATIC:
1925 *type = CONNECTION_DNS_CONFIG_TYPE_STATIC;
1927 case NET_DNS_CONFIG_TYPE_DYNAMIC:
1928 *type = CONNECTION_DNS_CONFIG_TYPE_DYNAMIC;
1931 *type = CONNECTION_DNS_CONFIG_TYPE_NONE;
1935 return CONNECTION_ERROR_NONE;
1938 EXPORT_API int connection_profile_set_prefix_length(connection_profile_h profile,
1939 connection_address_family_e address_family, int prefix_len)
1941 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
1942 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1944 if (!(_connection_libnet_check_profile_validity(profile)) ||
1945 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1946 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1947 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1948 return CONNECTION_ERROR_INVALID_PARAMETER;
1951 net_profile_info_t *profile_info = profile;
1952 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1953 if (net_info == NULL)
1954 return CONNECTION_ERROR_OPERATION_FAILED;
1956 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
1957 net_info->PrefixLen = prefix_len;
1958 net_info->SubnetMask.Data.Ipv4.s_addr = __profile_convert_prefix_len_to_netmask(prefix_len);
1960 net_info->PrefixLen6 = prefix_len;
1962 return CONNECTION_ERROR_NONE;
1965 EXPORT_API int connection_profile_get_prefix_length(connection_profile_h profile,
1966 connection_address_family_e address_family, int *prefix_len)
1968 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
1969 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1971 if (!(_connection_libnet_check_profile_validity(profile)) ||
1972 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1973 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1974 prefix_len == NULL) {
1975 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1976 return CONNECTION_ERROR_INVALID_PARAMETER;
1979 net_profile_info_t *profile_info = profile;
1980 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1981 if (net_info == NULL)
1982 return CONNECTION_ERROR_OPERATION_FAILED;
1984 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
1985 *prefix_len = net_info->PrefixLen;
1986 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
1987 *prefix_len = net_info->PrefixLen6;
1989 return CONNECTION_ERROR_NONE;