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 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 if (*dns_address == NULL)
686 return CONNECTION_ERROR_OUT_OF_MEMORY;
688 return CONNECTION_ERROR_NONE;
691 EXPORT_API int connection_profile_get_proxy_type(connection_profile_h profile, connection_proxy_type_e *type)
693 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
695 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
696 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
697 return CONNECTION_ERROR_INVALID_PARAMETER;
700 net_profile_info_t *profile_info = profile;
701 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
702 if (net_info == NULL)
703 return CONNECTION_ERROR_OPERATION_FAILED;
706 if (profile_info->profile_type == NET_DEVICE_ETHERNET) {
707 char *proxy = __profile_get_ethernet_proxy();
709 *type = CONNECTION_PROXY_TYPE_DIRECT;
711 *type = CONNECTION_PROXY_TYPE_MANUAL;
715 return CONNECTION_ERROR_NONE;
719 switch (net_info->ProxyMethod) {
721 case NET_PROXY_TYPE_DIRECT:
722 *type = CONNECTION_PROXY_TYPE_DIRECT;
724 case NET_PROXY_TYPE_AUTO:
725 *type = CONNECTION_PROXY_TYPE_AUTO;
727 case NET_PROXY_TYPE_MANUAL:
728 *type = CONNECTION_PROXY_TYPE_MANUAL;
730 case NET_PROXY_TYPE_UNKNOWN:
732 return CONNECTION_ERROR_OPERATION_FAILED;
736 return CONNECTION_ERROR_NONE;
739 EXPORT_API int connection_profile_get_proxy_address(connection_profile_h profile,
740 connection_address_family_e address_family, char** proxy_address)
742 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
744 if (!(_connection_libnet_check_profile_validity(profile)) ||
745 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
746 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
747 proxy_address == NULL) {
748 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
749 return CONNECTION_ERROR_INVALID_PARAMETER;
752 net_profile_info_t *profile_info = profile;
753 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
754 if (net_info == NULL)
755 return CONNECTION_ERROR_OPERATION_FAILED;
757 *proxy_address = g_strdup(net_info->ProxyAddr);
759 if (*proxy_address == NULL)
760 return CONNECTION_ERROR_OUT_OF_MEMORY;
762 return CONNECTION_ERROR_NONE;
765 EXPORT_API int connection_profile_set_ip_config_type(connection_profile_h profile,
766 connection_address_family_e address_family, connection_ip_config_type_e type)
768 net_ip_config_type_t *profile_type = NULL;
770 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
772 if (!(_connection_libnet_check_profile_validity(profile)) ||
773 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
774 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
775 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
776 return CONNECTION_ERROR_INVALID_PARAMETER;
779 net_profile_info_t *profile_info = profile;
780 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
781 if (net_info == NULL)
782 return CONNECTION_ERROR_OPERATION_FAILED;
784 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
785 profile_type = &net_info->IpConfigType ;
787 profile_type = &net_info->IpConfigType6 ;
789 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
792 case CONNECTION_IP_CONFIG_TYPE_STATIC:
793 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
794 net_info->IpAddr.Data.Ipv4.s_addr = 0;
795 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
796 net_info->GatewayAddr.Data.Ipv4.s_addr = 0 ;
799 case CONNECTION_IP_CONFIG_TYPE_DYNAMIC:
800 *profile_type = NET_IP_CONFIG_TYPE_DYNAMIC;
803 case CONNECTION_IP_CONFIG_TYPE_AUTO:
804 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
807 case CONNECTION_IP_CONFIG_TYPE_FIXED:
808 net_info->IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
811 case CONNECTION_IP_CONFIG_TYPE_NONE:
812 *profile_type = NET_IP_CONFIG_TYPE_OFF;
816 return CONNECTION_ERROR_INVALID_PARAMETER;
822 case CONNECTION_IP_CONFIG_TYPE_STATIC:
823 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
824 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
825 net_info->PrefixLen6 = 0 ;
826 inet_pton(AF_INET6, "::",
827 &net_info->GatewayAddr6.Data.Ipv6);
830 case CONNECTION_IP_CONFIG_TYPE_AUTO:
831 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
834 case CONNECTION_IP_CONFIG_TYPE_NONE:
835 *profile_type = NET_IP_CONFIG_TYPE_OFF;
839 return CONNECTION_ERROR_INVALID_PARAMETER;
844 return CONNECTION_ERROR_NONE;
847 EXPORT_API int connection_profile_set_ip_address(connection_profile_h profile,
848 connection_address_family_e address_family, const char* ip_address)
850 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
852 if (!(_connection_libnet_check_profile_validity(profile)) ||
853 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
854 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
855 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
856 return CONNECTION_ERROR_INVALID_PARAMETER;
859 net_profile_info_t *profile_info = profile;
860 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
861 if (net_info == NULL)
862 return CONNECTION_ERROR_OPERATION_FAILED;
864 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
866 if (ip_address == NULL)
867 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
868 else if (inet_pton(AF_INET6, ip_address,
869 &net_info->IpAddr6.Data.Ipv6) < 1)
870 return CONNECTION_ERROR_INVALID_PARAMETER;
873 if (ip_address == NULL)
874 net_info->IpAddr.Data.Ipv4.s_addr = 0;
875 else if (inet_pton(AF_INET, ip_address,
876 &net_info->IpAddr.Data.Ipv4) < 1)
877 return CONNECTION_ERROR_INVALID_PARAMETER;
880 return CONNECTION_ERROR_NONE;
883 EXPORT_API int connection_profile_set_subnet_mask(connection_profile_h profile,
884 connection_address_family_e address_family, const char* subnet_mask)
886 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
888 if (!(_connection_libnet_check_profile_validity(profile)) ||
889 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
890 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
891 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
892 return CONNECTION_ERROR_INVALID_PARAMETER;
895 net_profile_info_t *profile_info = profile;
896 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
897 if (net_info == NULL)
898 return CONNECTION_ERROR_OPERATION_FAILED;
900 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
902 if (subnet_mask == NULL)
903 net_info->PrefixLen6 = 0 ;
905 net_info->PrefixLen6 = atoi(subnet_mask) ;
908 if (subnet_mask == NULL)
909 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
910 else if (inet_pton(AF_INET, subnet_mask , &net_info->SubnetMask.Data.Ipv4) < 1)
911 return CONNECTION_ERROR_INVALID_PARAMETER;
913 net_info->PrefixLen = __profile_convert_netmask_to_prefix_len(subnet_mask);
916 return CONNECTION_ERROR_NONE;
919 EXPORT_API int connection_profile_set_gateway_address(connection_profile_h profile,
920 connection_address_family_e address_family, const char* gateway_address)
922 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
924 if (!(_connection_libnet_check_profile_validity(profile)) ||
925 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
926 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
927 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
928 return CONNECTION_ERROR_INVALID_PARAMETER;
931 net_profile_info_t *profile_info = profile;
932 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
933 if (net_info == NULL)
934 return CONNECTION_ERROR_OPERATION_FAILED;
936 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
938 if (gateway_address == NULL)
939 inet_pton(AF_INET6, "::", &net_info->GatewayAddr6.Data.Ipv6);
940 else if (inet_pton(AF_INET6, gateway_address, &net_info->GatewayAddr6.Data.Ipv6) < 1)
941 return CONNECTION_ERROR_INVALID_PARAMETER;
944 if (gateway_address == NULL)
945 net_info->GatewayAddr.Data.Ipv4.s_addr = 0;
946 else if (inet_pton(AF_INET, gateway_address, &(net_info->GatewayAddr.Data.Ipv4)) < 1)
947 return CONNECTION_ERROR_INVALID_PARAMETER;
950 return CONNECTION_ERROR_NONE;
953 EXPORT_API int connection_profile_set_dns_address(connection_profile_h profile, int order,
954 connection_address_family_e address_family, const char* dns_address)
956 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
958 if (!(_connection_libnet_check_profile_validity(profile)) ||
959 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
960 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
962 order > NET_DNS_ADDR_MAX) {
963 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
964 return CONNECTION_ERROR_INVALID_PARAMETER;
967 net_profile_info_t *profile_info = profile;
968 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
969 if (net_info == NULL)
970 return CONNECTION_ERROR_OPERATION_FAILED;
972 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
974 net_info->DnsAddr6[order-1].Type = NET_ADDR_IPV6;
975 if (dns_address == NULL)
976 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[order-1].Data.Ipv6);
977 else if (inet_pton(AF_INET6, dns_address, &net_info->DnsAddr6[order-1].Data.Ipv6) < 1)
978 return CONNECTION_ERROR_INVALID_PARAMETER;
979 if (net_info->DnsCount6 < order)
980 net_info->DnsCount6 = order;
983 net_info->DnsAddr[order-1].Type = NET_ADDR_IPV4;
984 if (dns_address == NULL)
985 net_info->DnsAddr[order-1].Data.Ipv4.s_addr = 0;
986 else if (inet_pton(AF_INET, dns_address, &(net_info->DnsAddr[order-1].Data.Ipv4)) < 1)
987 return CONNECTION_ERROR_INVALID_PARAMETER;
988 if (net_info->DnsCount < order)
989 net_info->DnsCount = order;
992 return CONNECTION_ERROR_NONE;
995 EXPORT_API int connection_profile_set_proxy_type(connection_profile_h profile, connection_proxy_type_e type)
997 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
999 if (!(_connection_libnet_check_profile_validity(profile))) {
1000 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1001 return CONNECTION_ERROR_INVALID_PARAMETER;
1004 net_profile_info_t *profile_info = profile;
1005 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1006 if (net_info == NULL)
1007 return CONNECTION_ERROR_OPERATION_FAILED;
1011 case CONNECTION_PROXY_TYPE_DIRECT:
1012 net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
1014 case CONNECTION_PROXY_TYPE_AUTO:
1015 net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
1017 case CONNECTION_PROXY_TYPE_MANUAL:
1018 net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
1021 return CONNECTION_ERROR_INVALID_PARAMETER;
1025 return CONNECTION_ERROR_NONE;
1028 EXPORT_API int connection_profile_set_proxy_address(connection_profile_h profile,
1029 connection_address_family_e address_family, const char* proxy_address)
1031 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1033 CONNECTION_LOG(CONNECTION_ERROR, "Address Family: ", address_family);
1034 if (!(_connection_libnet_check_profile_validity(profile)) ||
1035 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1036 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1037 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1038 return CONNECTION_ERROR_INVALID_PARAMETER;
1041 net_profile_info_t *profile_info = profile;
1042 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1043 if (net_info == NULL)
1044 return CONNECTION_ERROR_OPERATION_FAILED;
1046 if (proxy_address == NULL)
1047 net_info->ProxyAddr[0] = '\0';
1049 g_strlcpy(net_info->ProxyAddr, proxy_address, NET_PROXY_LEN_MAX);
1051 return CONNECTION_ERROR_NONE;
1054 EXPORT_API int connection_profile_set_state_changed_cb(connection_profile_h profile,
1055 connection_profile_state_changed_cb callback, void* user_data)
1057 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1059 if (!(_connection_libnet_check_profile_validity(profile)) || callback == NULL) {
1060 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1061 return CONNECTION_ERROR_INVALID_PARAMETER;
1064 if (_connection_libnet_add_to_profile_cb_list(profile, callback, user_data))
1065 return CONNECTION_ERROR_NONE;
1067 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1070 EXPORT_API int connection_profile_unset_state_changed_cb(connection_profile_h profile)
1072 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1074 if (!(_connection_libnet_check_profile_validity(profile))) {
1075 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1076 return CONNECTION_ERROR_INVALID_PARAMETER;
1079 if (_connection_libnet_remove_from_profile_cb_list(profile) != true)
1080 return CONNECTION_ERROR_INVALID_PARAMETER;
1082 return CONNECTION_ERROR_NONE;
1086 /* Wi-Fi profile *************************************************************/
1087 EXPORT_API int connection_profile_get_wifi_essid(connection_profile_h profile, char** essid)
1089 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1091 if (!(_connection_libnet_check_profile_validity(profile)) || essid == NULL) {
1092 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1093 return CONNECTION_ERROR_INVALID_PARAMETER;
1096 net_profile_info_t *profile_info = profile;
1098 if (profile_info->profile_type != NET_DEVICE_WIFI)
1099 return CONNECTION_ERROR_INVALID_PARAMETER;
1101 *essid = g_strdup(profile_info->ProfileInfo.Wlan.essid);
1103 return CONNECTION_ERROR_OUT_OF_MEMORY;
1105 return CONNECTION_ERROR_NONE;
1108 EXPORT_API int connection_profile_get_wifi_bssid(connection_profile_h profile, char** bssid)
1110 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1112 if (!(_connection_libnet_check_profile_validity(profile)) || bssid == NULL) {
1113 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1114 return CONNECTION_ERROR_INVALID_PARAMETER;
1117 net_profile_info_t *profile_info = profile;
1119 if (profile_info->profile_type != NET_DEVICE_WIFI)
1120 return CONNECTION_ERROR_INVALID_PARAMETER;
1122 *bssid = g_strdup(profile_info->ProfileInfo.Wlan.bssid);
1124 return CONNECTION_ERROR_OUT_OF_MEMORY;
1126 return CONNECTION_ERROR_NONE;
1129 EXPORT_API int connection_profile_get_wifi_rssi(connection_profile_h profile, int* rssi)
1131 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1133 if (!(_connection_libnet_check_profile_validity(profile)) || rssi == NULL) {
1134 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1135 return CONNECTION_ERROR_INVALID_PARAMETER;
1138 net_profile_info_t *profile_info = profile;
1140 if (profile_info->profile_type != NET_DEVICE_WIFI)
1141 return CONNECTION_ERROR_INVALID_PARAMETER;
1143 *rssi = (int)profile_info->ProfileInfo.Wlan.Strength;
1145 return CONNECTION_ERROR_NONE;
1148 EXPORT_API int connection_profile_get_wifi_frequency(connection_profile_h profile, int* frequency)
1150 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1152 if (!(_connection_libnet_check_profile_validity(profile)) || frequency == NULL) {
1153 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1154 return CONNECTION_ERROR_INVALID_PARAMETER;
1157 net_profile_info_t *profile_info = profile;
1159 if (profile_info->profile_type != NET_DEVICE_WIFI)
1160 return CONNECTION_ERROR_INVALID_PARAMETER;
1162 *frequency = (int)profile_info->ProfileInfo.Wlan.frequency;
1164 return CONNECTION_ERROR_NONE;
1167 EXPORT_API int connection_profile_get_wifi_max_speed(connection_profile_h profile, int* max_speed)
1169 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1171 if (!(_connection_libnet_check_profile_validity(profile)) || max_speed == NULL) {
1172 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1173 return CONNECTION_ERROR_INVALID_PARAMETER;
1176 net_profile_info_t *profile_info = profile;
1178 if (profile_info->profile_type != NET_DEVICE_WIFI)
1179 return CONNECTION_ERROR_INVALID_PARAMETER;
1181 *max_speed = (int)profile_info->ProfileInfo.Wlan.max_rate / 1000000;
1183 return CONNECTION_ERROR_NONE;
1186 EXPORT_API int connection_profile_get_wifi_security_type(connection_profile_h profile, connection_wifi_security_type_e *type)
1188 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1190 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1191 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1192 return CONNECTION_ERROR_INVALID_PARAMETER;
1195 net_profile_info_t *profile_info = profile;
1197 if (profile_info->profile_type != NET_DEVICE_WIFI)
1198 return CONNECTION_ERROR_INVALID_PARAMETER;
1200 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
1202 case WLAN_SEC_MODE_NONE:
1203 *type = CONNECTION_WIFI_SECURITY_TYPE_NONE;
1205 case WLAN_SEC_MODE_WEP:
1206 *type = CONNECTION_WIFI_SECURITY_TYPE_WEP;
1208 case WLAN_SEC_MODE_IEEE8021X:
1209 *type = CONNECTION_WIFI_SECURITY_TYPE_EAP;
1211 case WLAN_SEC_MODE_WPA_PSK:
1212 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA_PSK;
1214 case WLAN_SEC_MODE_WPA2_PSK:
1215 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA2_PSK;
1218 return CONNECTION_ERROR_OPERATION_FAILED;
1222 return CONNECTION_ERROR_NONE;
1225 EXPORT_API int connection_profile_get_wifi_encryption_type(connection_profile_h profile, connection_wifi_encryption_type_e *type)
1227 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1229 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1230 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1231 return CONNECTION_ERROR_INVALID_PARAMETER;
1234 net_profile_info_t *profile_info = profile;
1236 if (profile_info->profile_type != NET_DEVICE_WIFI)
1237 return CONNECTION_ERROR_INVALID_PARAMETER;
1239 switch (profile_info->ProfileInfo.Wlan.security_info.enc_mode) {
1241 case WLAN_ENC_MODE_NONE:
1242 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_NONE;
1244 case WLAN_ENC_MODE_WEP:
1245 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_WEP;
1247 case WLAN_ENC_MODE_TKIP:
1248 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP;
1250 case WLAN_ENC_MODE_AES:
1251 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_AES;
1253 case WLAN_ENC_MODE_TKIP_AES_MIXED:
1254 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP_AES_MIXED;
1257 return CONNECTION_ERROR_OPERATION_FAILED;
1261 return CONNECTION_ERROR_NONE;
1264 EXPORT_API int connection_profile_is_wifi_passphrase_required(connection_profile_h profile, bool* required)
1266 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1268 if (!(_connection_libnet_check_profile_validity(profile)) || required == NULL) {
1269 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1270 return CONNECTION_ERROR_INVALID_PARAMETER;
1273 net_profile_info_t *profile_info = profile;
1275 if (profile_info->profile_type != NET_DEVICE_WIFI)
1276 return CONNECTION_ERROR_INVALID_PARAMETER;
1278 if (profile_info->Favourite) {
1280 return CONNECTION_ERROR_NONE;
1283 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
1285 case WLAN_SEC_MODE_NONE:
1288 case WLAN_SEC_MODE_WEP:
1289 case WLAN_SEC_MODE_IEEE8021X:
1290 case WLAN_SEC_MODE_WPA_PSK:
1291 case WLAN_SEC_MODE_WPA2_PSK:
1295 return CONNECTION_ERROR_OPERATION_FAILED;
1299 return CONNECTION_ERROR_NONE;
1302 EXPORT_API int connection_profile_set_wifi_passphrase(connection_profile_h profile, const char* passphrase)
1304 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1306 if (!(_connection_libnet_check_profile_validity(profile)) || passphrase == NULL) {
1307 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1308 return CONNECTION_ERROR_INVALID_PARAMETER;
1311 net_profile_info_t *profile_info = profile;
1313 if (profile_info->profile_type != NET_DEVICE_WIFI)
1314 return CONNECTION_ERROR_INVALID_PARAMETER;
1316 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.psk.pskKey,
1317 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1319 return CONNECTION_ERROR_NONE;
1322 EXPORT_API int connection_profile_is_wifi_wps_supported(connection_profile_h profile, bool* supported)
1324 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1326 if (!(_connection_libnet_check_profile_validity(profile)) || supported == NULL) {
1327 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1328 return CONNECTION_ERROR_INVALID_PARAMETER;
1331 net_profile_info_t *profile_info = profile;
1333 if (profile_info->profile_type != NET_DEVICE_WIFI)
1334 return CONNECTION_ERROR_INVALID_PARAMETER;
1336 if (profile_info->ProfileInfo.Wlan.security_info.wps_support)
1341 return CONNECTION_ERROR_NONE;
1345 /* Cellular profile **********************************************************/
1346 EXPORT_API int connection_profile_get_cellular_service_type(connection_profile_h profile,
1347 connection_cellular_service_type_e* type)
1349 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1351 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1352 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1353 return CONNECTION_ERROR_INVALID_PARAMETER;
1356 net_profile_info_t *profile_info = profile;
1358 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1359 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1360 return CONNECTION_ERROR_INVALID_PARAMETER;
1363 *type = _profile_convert_to_connection_cellular_service_type(profile_info->ProfileInfo.Pdp.ServiceType);
1365 if (*type == CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN) {
1366 CONNECTION_LOG(CONNECTION_ERROR, "Invalid service type Passed"); //LCOV_EXCL_LINE
1367 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1370 return CONNECTION_ERROR_NONE;
1373 EXPORT_API int connection_profile_get_cellular_apn(connection_profile_h profile, char** apn)
1375 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1377 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1378 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1379 return CONNECTION_ERROR_INVALID_PARAMETER;
1382 net_profile_info_t *profile_info = profile;
1384 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1385 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1386 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1389 *apn = g_strdup(profile_info->ProfileInfo.Pdp.Apn);
1391 return CONNECTION_ERROR_OUT_OF_MEMORY;
1393 return CONNECTION_ERROR_NONE;
1396 EXPORT_API int connection_profile_get_cellular_auth_info(connection_profile_h profile,
1397 connection_cellular_auth_type_e *type, char** user_name, char** password)
1399 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1401 if (!(_connection_libnet_check_profile_validity(profile)) ||
1402 type == NULL || user_name == NULL || password == NULL) {
1403 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1404 return CONNECTION_ERROR_INVALID_PARAMETER;
1407 net_profile_info_t *profile_info = profile;
1409 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1410 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1411 return CONNECTION_ERROR_INVALID_PARAMETER;
1414 switch (profile_info->ProfileInfo.Pdp.AuthInfo.AuthType) {
1416 case NET_PDP_AUTH_NONE:
1417 *type = CONNECTION_CELLULAR_AUTH_TYPE_NONE;
1419 case NET_PDP_AUTH_PAP:
1420 *type = CONNECTION_CELLULAR_AUTH_TYPE_PAP;
1422 case NET_PDP_AUTH_CHAP:
1423 *type = CONNECTION_CELLULAR_AUTH_TYPE_CHAP;
1426 return CONNECTION_ERROR_OPERATION_FAILED;
1430 *user_name = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.UserName);
1431 if (*user_name == NULL)
1432 return CONNECTION_ERROR_OUT_OF_MEMORY;
1434 *password = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.Password);
1435 if (*password == NULL) {
1436 g_free(*user_name); //LCOV_EXCL_LINE
1437 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1440 return CONNECTION_ERROR_NONE;
1443 EXPORT_API int connection_profile_get_cellular_home_url(connection_profile_h profile, char** home_url)
1445 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1447 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1448 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1449 return CONNECTION_ERROR_INVALID_PARAMETER;
1452 net_profile_info_t *profile_info = profile;
1454 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1455 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1456 return CONNECTION_ERROR_INVALID_PARAMETER;
1459 *home_url = g_strdup(profile_info->ProfileInfo.Pdp.HomeURL);
1460 if (*home_url == NULL)
1461 return CONNECTION_ERROR_OUT_OF_MEMORY;
1463 return CONNECTION_ERROR_NONE;
1466 EXPORT_API int connection_profile_get_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
1468 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1470 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1471 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1472 return CONNECTION_ERROR_INVALID_PARAMETER;
1475 net_profile_info_t *profile_info = profile;
1477 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1478 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1479 return CONNECTION_ERROR_INVALID_PARAMETER;
1482 switch (profile_info->ProfileInfo.Pdp.PdnType) {
1484 case NET_PDN_TYPE_UNKNOWN:
1485 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
1487 case NET_PDN_TYPE_IPV4:
1488 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
1490 case NET_PDN_TYPE_IPV6:
1491 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
1493 case NET_PDN_TYPE_IPV4_IPV6:
1494 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
1497 return CONNECTION_ERROR_OPERATION_FAILED;
1501 return CONNECTION_ERROR_NONE;
1504 EXPORT_API int connection_profile_get_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
1506 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1508 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1509 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1510 return CONNECTION_ERROR_INVALID_PARAMETER;
1513 net_profile_info_t *profile_info = profile;
1515 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1516 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1517 return CONNECTION_ERROR_INVALID_PARAMETER;
1520 switch (profile_info->ProfileInfo.Pdp.RoamPdnType) {
1522 case NET_PDN_TYPE_UNKNOWN:
1523 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
1525 case NET_PDN_TYPE_IPV4:
1526 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
1528 case NET_PDN_TYPE_IPV6:
1529 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
1531 case NET_PDN_TYPE_IPV4_IPV6:
1532 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
1535 return CONNECTION_ERROR_OPERATION_FAILED;
1539 return CONNECTION_ERROR_NONE;
1542 EXPORT_API int connection_profile_is_cellular_roaming(connection_profile_h profile, bool* is_roaming)
1544 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1546 if (!(_connection_libnet_check_profile_validity(profile)) || is_roaming == NULL) {
1547 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1548 return CONNECTION_ERROR_INVALID_PARAMETER;
1551 net_profile_info_t *profile_info = profile;
1553 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1554 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1555 return CONNECTION_ERROR_INVALID_PARAMETER;
1558 if (profile_info->ProfileInfo.Pdp.Roaming)
1561 *is_roaming = false;
1563 return CONNECTION_ERROR_NONE;
1566 EXPORT_API int connection_profile_is_cellular_hidden(connection_profile_h profile, bool* is_hidden)
1568 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1570 if (!(_connection_libnet_check_profile_validity(profile)) || is_hidden == NULL) {
1571 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1572 return CONNECTION_ERROR_INVALID_PARAMETER;
1575 net_profile_info_t *profile_info = profile;
1577 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1578 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1579 return CONNECTION_ERROR_INVALID_PARAMETER;
1582 if (profile_info->ProfileInfo.Pdp.Hidden)
1587 return CONNECTION_ERROR_NONE;
1590 EXPORT_API int connection_profile_is_cellular_editable(connection_profile_h profile, bool* is_editable)
1592 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1594 if (!(_connection_libnet_check_profile_validity(profile)) || is_editable == NULL) {
1595 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1596 return CONNECTION_ERROR_INVALID_PARAMETER;
1599 net_profile_info_t *profile_info = profile;
1601 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1602 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1603 return CONNECTION_ERROR_INVALID_PARAMETER;
1606 if (profile_info->ProfileInfo.Pdp.Editable)
1607 *is_editable = true;
1609 *is_editable = false;
1611 return CONNECTION_ERROR_NONE;
1614 EXPORT_API int connection_profile_is_cellular_default(connection_profile_h profile, bool* is_default)
1616 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1618 if (!(_connection_libnet_check_profile_validity(profile)) || is_default == NULL) {
1619 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1620 return CONNECTION_ERROR_INVALID_PARAMETER;
1623 net_profile_info_t *profile_info = profile;
1625 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1626 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1627 return CONNECTION_ERROR_INVALID_PARAMETER;
1630 if (profile_info->ProfileInfo.Pdp.DefaultConn)
1633 *is_default = false;
1635 return CONNECTION_ERROR_NONE;
1638 EXPORT_API int connection_profile_set_cellular_service_type(connection_profile_h profile,
1639 connection_cellular_service_type_e service_type)
1641 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1643 if (!(_connection_libnet_check_profile_validity(profile))) {
1644 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1645 return CONNECTION_ERROR_INVALID_PARAMETER;
1648 net_profile_info_t *profile_info = profile;
1650 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1651 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1652 return CONNECTION_ERROR_INVALID_PARAMETER;
1655 switch (service_type) {
1657 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
1658 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_INTERNET;
1660 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
1661 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_MMS;
1663 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
1664 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_INTERNET;
1666 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
1667 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_MMS;
1669 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
1670 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_TETHERING;
1672 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
1673 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_APPLICATION;
1675 case CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN:
1677 return CONNECTION_ERROR_INVALID_PARAMETER;
1681 return CONNECTION_ERROR_NONE;
1684 EXPORT_API int connection_profile_set_cellular_apn(connection_profile_h profile, const char* apn)
1686 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1688 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1689 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1690 return CONNECTION_ERROR_INVALID_PARAMETER;
1693 net_profile_info_t *profile_info = profile;
1695 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1696 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1697 return CONNECTION_ERROR_INVALID_PARAMETER;
1700 g_strlcpy(profile_info->ProfileInfo.Pdp.Apn, apn, NET_PDP_APN_LEN_MAX+1);
1702 return CONNECTION_ERROR_NONE;
1705 EXPORT_API int connection_profile_set_cellular_auth_info(connection_profile_h profile,
1706 connection_cellular_auth_type_e type, const char* user_name, const char* password)
1708 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1710 if (!(_connection_libnet_check_profile_validity(profile)) ||
1711 user_name == NULL || password == NULL) {
1712 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1713 return CONNECTION_ERROR_INVALID_PARAMETER;
1716 net_profile_info_t *profile_info = profile;
1718 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1719 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1720 return CONNECTION_ERROR_INVALID_PARAMETER;
1725 case CONNECTION_CELLULAR_AUTH_TYPE_NONE:
1726 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_NONE;
1728 case CONNECTION_CELLULAR_AUTH_TYPE_PAP:
1729 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_PAP;
1731 case CONNECTION_CELLULAR_AUTH_TYPE_CHAP:
1732 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_CHAP;
1735 return CONNECTION_ERROR_INVALID_PARAMETER;
1739 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.UserName, user_name, NET_PDP_AUTH_USERNAME_LEN_MAX+1);
1740 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.Password, password, NET_PDP_AUTH_PASSWORD_LEN_MAX+1);
1742 return CONNECTION_ERROR_NONE;
1745 EXPORT_API int connection_profile_set_cellular_home_url(connection_profile_h profile, const char* home_url)
1747 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1749 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1750 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1751 return CONNECTION_ERROR_INVALID_PARAMETER;
1754 net_profile_info_t *profile_info = profile;
1756 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1757 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1758 return CONNECTION_ERROR_INVALID_PARAMETER;
1761 g_strlcpy(profile_info->ProfileInfo.Pdp.HomeURL, home_url, NET_HOME_URL_LEN_MAX);
1763 return CONNECTION_ERROR_NONE;
1766 EXPORT_API int connection_profile_set_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
1768 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1770 if (!(_connection_libnet_check_profile_validity(profile))) {
1771 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1772 return CONNECTION_ERROR_INVALID_PARAMETER;
1775 net_profile_info_t *profile_info = profile;
1777 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1778 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1779 return CONNECTION_ERROR_INVALID_PARAMETER;
1784 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
1785 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4;
1787 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
1788 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV6;
1790 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
1791 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4_IPV6;
1794 return CONNECTION_ERROR_INVALID_PARAMETER;
1798 return CONNECTION_ERROR_NONE;
1801 EXPORT_API int connection_profile_set_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
1803 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1805 if (!(_connection_libnet_check_profile_validity(profile))) {
1806 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1807 return CONNECTION_ERROR_INVALID_PARAMETER;
1810 net_profile_info_t *profile_info = profile;
1812 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1813 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1814 return CONNECTION_ERROR_INVALID_PARAMETER;
1819 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
1820 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4;
1822 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
1823 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV6;
1825 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
1826 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4_IPV6;
1829 return CONNECTION_ERROR_INVALID_PARAMETER;
1833 return CONNECTION_ERROR_NONE;
1836 EXPORT_API int connection_profile_get_ipv6_state(connection_profile_h profile, connection_profile_state_e *state)
1838 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
1839 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1841 if (!(_connection_libnet_check_profile_validity(profile)) ||
1843 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1844 return CONNECTION_ERROR_INVALID_PARAMETER;
1847 net_profile_info_t *profile_info = profile;
1848 *state = _profile_convert_to_cp_state(profile_info->ProfileState6);
1850 return CONNECTION_ERROR_OPERATION_FAILED;
1852 return CONNECTION_ERROR_NONE;
1855 EXPORT_API int connection_profile_set_dns_config_type(connection_profile_h profile,
1856 connection_address_family_e address_family, connection_dns_config_type_e type)
1858 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
1859 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1861 if (!(_connection_libnet_check_profile_validity(profile))) {
1862 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1863 return CONNECTION_ERROR_INVALID_PARAMETER;
1866 if ((address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1867 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1868 (type != CONNECTION_DNS_CONFIG_TYPE_STATIC &&
1869 type != CONNECTION_DNS_CONFIG_TYPE_DYNAMIC)) {
1870 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1871 return CONNECTION_ERROR_INVALID_PARAMETER;
1874 net_dns_config_type_t *profileType = NULL;
1875 net_dns_config_type_t *profileType6 = NULL;
1876 net_profile_info_t *profile_info = profile;
1878 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1879 if (net_info == NULL)
1880 return CONNECTION_ERROR_OPERATION_FAILED;
1882 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
1883 profileType = &net_info->DnsConfigType;
1884 net_info->DnsAddr[0].Data.Ipv4.s_addr = 0;
1885 net_info->DnsAddr[1].Data.Ipv4.s_addr = 0;
1886 *profileType = type;
1888 profileType6 = &net_info->DnsConfigType6;
1889 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[0].Data.Ipv6);
1890 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[1].Data.Ipv6);
1891 *profileType6 = type;
1894 return CONNECTION_ERROR_NONE;
1897 EXPORT_API int connection_profile_get_dns_config_type(connection_profile_h profile,
1898 connection_address_family_e address_family, connection_dns_config_type_e *type)
1900 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
1901 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1903 if (!(_connection_libnet_check_profile_validity(profile)) ||
1904 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1905 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1907 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1908 return CONNECTION_ERROR_INVALID_PARAMETER;
1911 net_dns_config_type_t profileType;
1912 net_profile_info_t *profile_info = profile;
1913 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1914 if (net_info == NULL)
1915 return CONNECTION_ERROR_OPERATION_FAILED;
1917 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
1918 profileType = net_info->DnsConfigType;
1920 profileType = net_info->DnsConfigType6;
1922 switch (profileType) {
1923 case NET_DNS_CONFIG_TYPE_STATIC:
1924 *type = CONNECTION_DNS_CONFIG_TYPE_STATIC;
1926 case NET_DNS_CONFIG_TYPE_DYNAMIC:
1927 *type = CONNECTION_DNS_CONFIG_TYPE_DYNAMIC;
1930 *type = CONNECTION_DNS_CONFIG_TYPE_NONE;
1934 return CONNECTION_ERROR_NONE;
1937 EXPORT_API int connection_profile_set_prefix_length(connection_profile_h profile,
1938 connection_address_family_e address_family, int prefix_len)
1940 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
1941 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1943 if (!(_connection_libnet_check_profile_validity(profile)) ||
1944 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1945 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1946 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1947 return CONNECTION_ERROR_INVALID_PARAMETER;
1950 net_profile_info_t *profile_info = profile;
1951 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1952 if (net_info == NULL)
1953 return CONNECTION_ERROR_OPERATION_FAILED;
1955 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
1956 net_info->PrefixLen = prefix_len;
1957 net_info->SubnetMask.Data.Ipv4.s_addr = __profile_convert_prefix_len_to_netmask(prefix_len);
1959 net_info->PrefixLen6 = prefix_len;
1961 return CONNECTION_ERROR_NONE;
1964 EXPORT_API int connection_profile_get_prefix_length(connection_profile_h profile,
1965 connection_address_family_e address_family, int *prefix_len)
1967 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
1968 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1970 if (!(_connection_libnet_check_profile_validity(profile)) ||
1971 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1972 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1973 prefix_len == NULL) {
1974 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1975 return CONNECTION_ERROR_INVALID_PARAMETER;
1978 net_profile_info_t *profile_info = profile;
1979 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1980 if (net_info == NULL)
1981 return CONNECTION_ERROR_OPERATION_FAILED;
1983 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
1984 *prefix_len = net_info->PrefixLen;
1985 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
1986 *prefix_len = net_info->PrefixLen6;
1988 return CONNECTION_ERROR_NONE;