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");
125 connection_cellular_service_type_e _profile_convert_to_connection_cellular_service_type(net_service_type_t svc_type)
128 case NET_SERVICE_INTERNET:
129 return CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET;
130 case NET_SERVICE_MMS:
131 return CONNECTION_CELLULAR_SERVICE_TYPE_MMS;
132 case NET_SERVICE_PREPAID_INTERNET:
133 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET;
134 case NET_SERVICE_PREPAID_MMS:
135 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS;
136 case NET_SERVICE_TETHERING:
137 return CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING;
138 case NET_SERVICE_APPLICATION:
139 return CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION;
141 return CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
145 connection_profile_state_e _profile_convert_to_cp_state(net_state_type_t state)
147 connection_profile_state_e cp_state;
150 case NET_STATE_TYPE_ONLINE:
151 case NET_STATE_TYPE_READY:
152 cp_state = CONNECTION_PROFILE_STATE_CONNECTED;
154 case NET_STATE_TYPE_IDLE:
155 case NET_STATE_TYPE_FAILURE:
156 case NET_STATE_TYPE_DISCONNECT:
157 cp_state = CONNECTION_PROFILE_STATE_DISCONNECTED;
159 case NET_STATE_TYPE_ASSOCIATION:
160 cp_state = CONNECTION_PROFILE_STATE_ASSOCIATION;
162 case NET_STATE_TYPE_CONFIGURATION:
163 cp_state = CONNECTION_PROFILE_STATE_CONFIGURATION;
172 net_service_type_t _connection_profile_convert_to_libnet_cellular_service_type(connection_cellular_service_type_e svc_type)
175 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
176 return NET_SERVICE_INTERNET;
177 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
178 return NET_SERVICE_MMS;
179 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
180 return NET_SERVICE_PREPAID_INTERNET;
181 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
182 return NET_SERVICE_PREPAID_MMS;
183 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
184 return NET_SERVICE_TETHERING;
185 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
186 return NET_SERVICE_APPLICATION;
188 return NET_SERVICE_UNKNOWN;
192 net_state_type_t _connection_profile_convert_to_net_state(connection_profile_state_e state)
194 net_state_type_t libnet_state = NET_STATE_TYPE_UNKNOWN;
197 case CONNECTION_PROFILE_STATE_CONNECTED:
198 libnet_state = NET_STATE_TYPE_ONLINE;
200 case CONNECTION_PROFILE_STATE_DISCONNECTED:
201 libnet_state = NET_STATE_TYPE_IDLE;
203 case CONNECTION_PROFILE_STATE_ASSOCIATION:
204 libnet_state = NET_STATE_TYPE_ASSOCIATION;
206 case CONNECTION_PROFILE_STATE_CONFIGURATION:
207 libnet_state = NET_STATE_TYPE_CONFIGURATION;
215 /* Connection profile ********************************************************/
216 EXPORT_API int connection_profile_create(connection_profile_type_e type, const char* keyword, connection_profile_h* profile)
218 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
220 if (type == CONNECTION_PROFILE_TYPE_CELLULAR)
221 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
222 else if (type == CONNECTION_PROFILE_TYPE_WIFI)
223 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
225 if (type != CONNECTION_PROFILE_TYPE_CELLULAR &&
226 type != CONNECTION_PROFILE_TYPE_WIFI) {
227 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
228 return CONNECTION_ERROR_INVALID_PARAMETER;
231 if (profile == NULL) {
232 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
233 return CONNECTION_ERROR_INVALID_PARAMETER;
236 int rv = _connection_libnet_check_profile_privilege();
237 if (rv == CONNECTION_ERROR_PERMISSION_DENIED)
239 else if (rv != CONNECTION_ERROR_NONE) {
240 CONNECTION_LOG(CONNECTION_ERROR, "Failed to create profile"); //LCOV_EXCL_LINE
241 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
244 net_profile_info_t *profile_info = g_try_malloc0(sizeof(net_profile_info_t));
245 if (profile_info == NULL)
246 return CONNECTION_ERROR_OUT_OF_MEMORY;
249 case CONNECTION_PROFILE_TYPE_CELLULAR:
250 if (keyword == NULL) {
251 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
252 g_free(profile_info);
253 return CONNECTION_ERROR_INVALID_PARAMETER;
255 __profile_init_cellular_profile(profile_info, keyword);
257 case CONNECTION_PROFILE_TYPE_WIFI:
258 __profile_init_wifi_profile(profile_info);
264 *profile = (connection_profile_h)profile_info;
265 _connection_libnet_add_to_profile_list(*profile);
267 return CONNECTION_ERROR_NONE;
270 EXPORT_API int connection_profile_destroy(connection_profile_h profile)
272 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
274 if (!(_connection_libnet_check_profile_validity(profile))) {
275 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
276 return CONNECTION_ERROR_INVALID_PARAMETER;
279 _connection_libnet_remove_from_profile_list(profile);
281 return CONNECTION_ERROR_NONE;
284 EXPORT_API int connection_profile_clone(connection_profile_h* cloned_profile, connection_profile_h origin_profile)
286 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
288 if (!(_connection_libnet_check_profile_validity(origin_profile)) || cloned_profile == NULL) {
289 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
290 return CONNECTION_ERROR_INVALID_PARAMETER;
293 *cloned_profile = g_try_malloc0(sizeof(net_profile_info_t));
294 if (*cloned_profile == NULL)
295 return CONNECTION_ERROR_OUT_OF_MEMORY;
297 memcpy(*cloned_profile, origin_profile, sizeof(net_profile_info_t));
298 _connection_libnet_add_to_profile_list(*cloned_profile);
300 return CONNECTION_ERROR_NONE;
303 EXPORT_API int connection_profile_get_id(connection_profile_h profile, char** profile_id)
305 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
307 if (!(_connection_libnet_check_profile_validity(profile)) || profile_id == NULL) {
308 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
309 return CONNECTION_ERROR_INVALID_PARAMETER;
312 net_profile_info_t *profile_info = profile;
314 char *prof_id = strrchr(profile_info->ProfileName, '/');
316 return CONNECTION_ERROR_INVALID_PARAMETER;
319 *profile_id = g_strdup(prof_id);
321 if (*profile_id == NULL)
322 return CONNECTION_ERROR_OUT_OF_MEMORY;
324 return CONNECTION_ERROR_NONE;
327 EXPORT_API int connection_profile_get_name(connection_profile_h profile, char** profile_name)
329 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
331 if (!(_connection_libnet_check_profile_validity(profile)) || profile_name == NULL) {
332 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
333 return CONNECTION_ERROR_INVALID_PARAMETER;
336 net_profile_info_t *profile_info = profile;
338 switch (profile_info->profile_type) {
339 case NET_DEVICE_CELLULAR:
340 *profile_name = g_strdup(profile_info->ProfileInfo.Pdp.Keyword);
342 case NET_DEVICE_WIFI:
343 *profile_name = g_strdup(profile_info->ProfileInfo.Wlan.essid);
345 case NET_DEVICE_ETHERNET:
346 *profile_name = g_strdup(profile_info->ProfileInfo.Ethernet.net_info.DevName); //LCOV_EXCL_LINE
347 break; //LCOV_EXCL_LINE
348 case NET_DEVICE_BLUETOOTH: {
349 char *bt_name = strrchr(profile_info->ProfileName, '/');
351 return CONNECTION_ERROR_INVALID_PARAMETER;
354 *profile_name = g_strdup(bt_name);
357 return CONNECTION_ERROR_INVALID_PARAMETER;
360 if (*profile_name == NULL)
361 return CONNECTION_ERROR_OUT_OF_MEMORY;
363 return CONNECTION_ERROR_NONE;
366 EXPORT_API int connection_profile_get_type(connection_profile_h profile, connection_profile_type_e *type)
368 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
370 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
371 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
372 return CONNECTION_ERROR_INVALID_PARAMETER;
375 net_profile_info_t *profile_info = profile;
377 switch (profile_info->profile_type) {
378 case NET_DEVICE_CELLULAR:
379 *type = CONNECTION_PROFILE_TYPE_CELLULAR;
381 case NET_DEVICE_WIFI:
382 *type = CONNECTION_PROFILE_TYPE_WIFI;
384 case NET_DEVICE_ETHERNET:
385 *type = CONNECTION_PROFILE_TYPE_ETHERNET; //LCOV_EXCL_LINE
386 break; //LCOV_EXCL_LINE
387 case NET_DEVICE_BLUETOOTH:
388 *type = CONNECTION_PROFILE_TYPE_BT;
391 CONNECTION_LOG(CONNECTION_ERROR, "Invalid profile type");
392 return CONNECTION_ERROR_OPERATION_FAILED;
395 return CONNECTION_ERROR_NONE;
398 EXPORT_API int connection_profile_get_network_interface_name(connection_profile_h profile, char** interface_name)
400 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
402 if (!(_connection_libnet_check_profile_validity(profile)) || interface_name == NULL) {
403 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
404 return CONNECTION_ERROR_INVALID_PARAMETER;
407 net_profile_info_t *profile_info = profile;
408 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
409 if (net_info == NULL)
410 return CONNECTION_ERROR_INVALID_PARAMETER;
412 *interface_name = g_strdup(net_info->DevName);
413 if (*interface_name == NULL)
414 return CONNECTION_ERROR_OUT_OF_MEMORY;
416 return CONNECTION_ERROR_NONE;
419 EXPORT_API int connection_profile_refresh(connection_profile_h profile)
423 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
425 if (!(_connection_libnet_check_profile_validity(profile))) {
426 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
427 return CONNECTION_ERROR_INVALID_PARAMETER;
430 net_profile_info_t profile_info_local;
431 net_profile_info_t *profile_info = profile;
433 rv = net_get_profile_info(profile_info->ProfileName, &profile_info_local);
434 if (rv == NET_ERR_ACCESS_DENIED) {
435 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
436 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
437 } else if (rv != NET_ERR_NONE) {
438 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get profile information"); //LCOV_EXCL_LINE
439 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
442 memcpy(profile, &profile_info_local, sizeof(net_profile_info_t));
444 return CONNECTION_ERROR_NONE;
447 EXPORT_API int connection_profile_get_state(connection_profile_h profile, connection_profile_state_e* state)
449 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
451 if (!(_connection_libnet_check_profile_validity(profile)) || state == NULL) {
452 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
453 return CONNECTION_ERROR_INVALID_PARAMETER;
456 net_profile_info_t *profile_info = profile;
457 *state = _profile_convert_to_cp_state(profile_info->ProfileState);
459 return CONNECTION_ERROR_NONE;
462 EXPORT_API int connection_profile_get_ip_config_type(connection_profile_h profile,
463 connection_address_family_e address_family, connection_ip_config_type_e *type)
465 net_ip_config_type_t profile_type;
467 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
469 if (!(_connection_libnet_check_profile_validity(profile)) ||
470 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
471 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
473 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
474 return CONNECTION_ERROR_INVALID_PARAMETER;
477 net_profile_info_t *profile_info = profile;
478 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
479 if (net_info == NULL)
480 return CONNECTION_ERROR_OPERATION_FAILED;
482 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
483 profile_type = net_info->IpConfigType;
485 profile_type = net_info->IpConfigType6;
487 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
488 switch (profile_type) {
490 case NET_IP_CONFIG_TYPE_STATIC:
491 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
494 case NET_IP_CONFIG_TYPE_DYNAMIC:
495 *type = CONNECTION_IP_CONFIG_TYPE_DYNAMIC;
498 case NET_IP_CONFIG_TYPE_AUTO_IP:
499 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
502 case NET_IP_CONFIG_TYPE_FIXED:
503 *type = CONNECTION_IP_CONFIG_TYPE_FIXED;
506 case NET_IP_CONFIG_TYPE_OFF:
507 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
510 return CONNECTION_ERROR_OPERATION_FAILED;
515 switch (profile_type) {
516 case NET_IP_CONFIG_TYPE_STATIC:
517 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
520 case NET_IP_CONFIG_TYPE_AUTO_IP:
521 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
524 case NET_IP_CONFIG_TYPE_OFF:
525 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
529 return CONNECTION_ERROR_OPERATION_FAILED;
535 return CONNECTION_ERROR_NONE;
538 EXPORT_API int connection_profile_get_ip_address(connection_profile_h profile,
539 connection_address_family_e address_family, char** ip_address)
541 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
543 if (!(_connection_libnet_check_profile_validity(profile)) ||
544 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
545 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
546 ip_address == NULL) {
547 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
548 return CONNECTION_ERROR_INVALID_PARAMETER;
551 net_profile_info_t *profile_info = profile;
552 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
553 if (net_info == NULL)
554 return CONNECTION_ERROR_OPERATION_FAILED;
556 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
557 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr6,
560 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr,
563 if (*ip_address == NULL)
564 return CONNECTION_ERROR_OUT_OF_MEMORY;
566 return CONNECTION_ERROR_NONE;
569 EXPORT_API int connection_profile_get_subnet_mask(connection_profile_h profile,
570 connection_address_family_e address_family, char** subnet_mask)
574 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
576 if (!(_connection_libnet_check_profile_validity(profile)) ||
577 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
578 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
579 subnet_mask == NULL) {
580 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
581 return CONNECTION_ERROR_INVALID_PARAMETER;
584 net_profile_info_t *profile_info = profile;
585 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
586 if (net_info == NULL)
587 return CONNECTION_ERROR_OPERATION_FAILED;
589 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
591 prefixlen = g_try_malloc0(MAX_PREFIX_LENGTH);
592 if (prefixlen != NULL) {
593 snprintf(prefixlen, MAX_PREFIX_LENGTH, "%d", net_info->PrefixLen6);
594 *subnet_mask = prefixlen;
599 *subnet_mask = __profile_convert_ip_to_string(&net_info->SubnetMask,
602 if (*subnet_mask == NULL)
603 return CONNECTION_ERROR_OUT_OF_MEMORY;
605 return CONNECTION_ERROR_NONE;
608 EXPORT_API int connection_profile_get_gateway_address(connection_profile_h profile,
609 connection_address_family_e address_family, char** gateway_address)
611 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
613 if (!(_connection_libnet_check_profile_validity(profile)) ||
614 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
615 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
616 gateway_address == NULL) {
617 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
618 return CONNECTION_ERROR_INVALID_PARAMETER;
621 net_profile_info_t *profile_info = profile;
622 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
623 if (net_info == NULL)
624 return CONNECTION_ERROR_OPERATION_FAILED;
626 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
627 *gateway_address = __profile_convert_ip_to_string(
628 &net_info->GatewayAddr6, address_family);
630 *gateway_address = __profile_convert_ip_to_string(
631 &net_info->GatewayAddr, address_family);
633 if (*gateway_address == NULL)
634 return CONNECTION_ERROR_OUT_OF_MEMORY;
636 return CONNECTION_ERROR_NONE;
639 EXPORT_API int connection_profile_get_dns_address(connection_profile_h profile, int order,
640 connection_address_family_e address_family, char** dns_address)
642 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
644 if (!(_connection_libnet_check_profile_validity(profile)) ||
645 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
646 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
647 dns_address == NULL ||
649 order > NET_DNS_ADDR_MAX) {
650 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
651 return CONNECTION_ERROR_INVALID_PARAMETER;
654 net_profile_info_t *profile_info = profile;
655 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
656 if (net_info == NULL)
657 return CONNECTION_ERROR_OPERATION_FAILED;
659 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
660 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr[order-1],
662 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) //LCOV_EXCL_LINE
663 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr6[order-1], //LCOV_EXCL_LINE
666 CONNECTION_LOG(CONNECTION_ERROR, "Invalid address family\n"); //LCOV_EXCL_LINE
668 if (*dns_address == NULL)
669 return CONNECTION_ERROR_OUT_OF_MEMORY;
671 return CONNECTION_ERROR_NONE;
674 EXPORT_API int connection_profile_get_proxy_type(connection_profile_h profile, connection_proxy_type_e *type)
676 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
678 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
679 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
680 return CONNECTION_ERROR_INVALID_PARAMETER;
684 net_profile_info_t *profile_info = profile;
685 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
686 if (net_info == NULL)
687 return CONNECTION_ERROR_OPERATION_FAILED;
690 if (profile_info->profile_type == NET_DEVICE_ETHERNET) {
691 proxy = __profile_get_ethernet_proxy();
693 *type = CONNECTION_PROXY_TYPE_DIRECT;
695 *type = CONNECTION_PROXY_TYPE_MANUAL;
697 return CONNECTION_ERROR_NONE;
701 switch (net_info->ProxyMethod) {
703 case NET_PROXY_TYPE_DIRECT:
704 *type = CONNECTION_PROXY_TYPE_DIRECT;
706 case NET_PROXY_TYPE_AUTO:
707 *type = CONNECTION_PROXY_TYPE_AUTO;
709 case NET_PROXY_TYPE_MANUAL:
710 *type = CONNECTION_PROXY_TYPE_MANUAL;
712 case NET_PROXY_TYPE_UNKNOWN:
714 return CONNECTION_ERROR_OPERATION_FAILED;
718 return CONNECTION_ERROR_NONE;
721 EXPORT_API int connection_profile_get_proxy_address(connection_profile_h profile,
722 connection_address_family_e address_family, char** proxy_address)
724 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
726 if (!(_connection_libnet_check_profile_validity(profile)) ||
727 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
728 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
729 proxy_address == NULL) {
730 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
731 return CONNECTION_ERROR_INVALID_PARAMETER;
734 net_profile_info_t *profile_info = profile;
735 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
736 if (net_info == NULL)
737 return CONNECTION_ERROR_OPERATION_FAILED;
739 *proxy_address = g_strdup(net_info->ProxyAddr);
741 if (*proxy_address == NULL)
742 return CONNECTION_ERROR_OUT_OF_MEMORY;
744 return CONNECTION_ERROR_NONE;
747 EXPORT_API int connection_profile_set_ip_config_type(connection_profile_h profile,
748 connection_address_family_e address_family, connection_ip_config_type_e type)
750 net_ip_config_type_t *profile_type = NULL;
752 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
754 if (!(_connection_libnet_check_profile_validity(profile)) ||
755 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
756 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
757 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
758 return CONNECTION_ERROR_INVALID_PARAMETER;
761 net_profile_info_t *profile_info = profile;
762 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
763 if (net_info == NULL)
764 return CONNECTION_ERROR_OPERATION_FAILED;
766 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
767 profile_type = &net_info->IpConfigType ;
769 profile_type = &net_info->IpConfigType6 ;
771 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
774 case CONNECTION_IP_CONFIG_TYPE_STATIC:
775 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
776 net_info->IpAddr.Data.Ipv4.s_addr = 0;
777 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
778 net_info->GatewayAddr.Data.Ipv4.s_addr = 0 ;
781 case CONNECTION_IP_CONFIG_TYPE_DYNAMIC:
782 *profile_type = NET_IP_CONFIG_TYPE_DYNAMIC;
785 case CONNECTION_IP_CONFIG_TYPE_AUTO:
786 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
789 case CONNECTION_IP_CONFIG_TYPE_FIXED:
790 net_info->IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
793 case CONNECTION_IP_CONFIG_TYPE_NONE:
794 *profile_type = NET_IP_CONFIG_TYPE_OFF;
798 return CONNECTION_ERROR_INVALID_PARAMETER;
804 case CONNECTION_IP_CONFIG_TYPE_STATIC:
805 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
806 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
807 net_info->PrefixLen6 = 0 ;
808 inet_pton(AF_INET6, "::",
809 &net_info->GatewayAddr6.Data.Ipv6);
812 case CONNECTION_IP_CONFIG_TYPE_AUTO:
813 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
816 case CONNECTION_IP_CONFIG_TYPE_NONE:
817 *profile_type = NET_IP_CONFIG_TYPE_OFF;
821 return CONNECTION_ERROR_INVALID_PARAMETER;
826 return CONNECTION_ERROR_NONE;
829 EXPORT_API int connection_profile_set_ip_address(connection_profile_h profile,
830 connection_address_family_e address_family, const char* ip_address)
832 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
834 if (!(_connection_libnet_check_profile_validity(profile)) ||
835 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
836 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
837 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
838 return CONNECTION_ERROR_INVALID_PARAMETER;
841 net_profile_info_t *profile_info = profile;
842 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
843 if (net_info == NULL)
844 return CONNECTION_ERROR_OPERATION_FAILED;
846 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
848 if (ip_address == NULL)
849 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
850 else if (inet_pton(AF_INET6, ip_address,
851 &net_info->IpAddr6.Data.Ipv6) < 1)
852 return CONNECTION_ERROR_INVALID_PARAMETER;
855 if (ip_address == NULL)
856 net_info->IpAddr.Data.Ipv4.s_addr = 0;
857 else if (inet_pton(AF_INET, ip_address,
858 &net_info->IpAddr.Data.Ipv4) < 1)
859 return CONNECTION_ERROR_INVALID_PARAMETER;
862 return CONNECTION_ERROR_NONE;
865 EXPORT_API int connection_profile_set_subnet_mask(connection_profile_h profile,
866 connection_address_family_e address_family, const char* subnet_mask)
868 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
870 if (!(_connection_libnet_check_profile_validity(profile)) ||
871 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
872 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
873 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
874 return CONNECTION_ERROR_INVALID_PARAMETER;
877 net_profile_info_t *profile_info = profile;
878 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
879 if (net_info == NULL)
880 return CONNECTION_ERROR_OPERATION_FAILED;
882 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
884 if (subnet_mask == NULL)
885 net_info->PrefixLen6 = 0 ;
887 net_info->PrefixLen6 = atoi(subnet_mask) ;
890 if (subnet_mask == NULL)
891 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
892 else if (inet_pton(AF_INET, subnet_mask , &net_info->SubnetMask.Data.Ipv4) < 1)
893 return CONNECTION_ERROR_INVALID_PARAMETER;
896 return CONNECTION_ERROR_NONE;
899 EXPORT_API int connection_profile_set_gateway_address(connection_profile_h profile,
900 connection_address_family_e address_family, const char* gateway_address)
902 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
904 if (!(_connection_libnet_check_profile_validity(profile)) ||
905 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
906 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
907 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
908 return CONNECTION_ERROR_INVALID_PARAMETER;
911 net_profile_info_t *profile_info = profile;
912 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
913 if (net_info == NULL)
914 return CONNECTION_ERROR_OPERATION_FAILED;
916 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
918 if (gateway_address == NULL)
919 inet_pton(AF_INET6, "::", &net_info->GatewayAddr6.Data.Ipv6);
920 else if (inet_pton(AF_INET6, gateway_address, &net_info->GatewayAddr6.Data.Ipv6) < 1)
921 return CONNECTION_ERROR_INVALID_PARAMETER;
924 if (gateway_address == NULL)
925 net_info->GatewayAddr.Data.Ipv4.s_addr = 0;
926 else if (inet_pton(AF_INET, gateway_address, &(net_info->GatewayAddr.Data.Ipv4)) < 1)
927 return CONNECTION_ERROR_INVALID_PARAMETER;
930 return CONNECTION_ERROR_NONE;
933 EXPORT_API int connection_profile_set_dns_address(connection_profile_h profile, int order,
934 connection_address_family_e address_family, const char* dns_address)
936 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
938 if (!(_connection_libnet_check_profile_validity(profile)) ||
939 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
940 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
942 order > NET_DNS_ADDR_MAX) {
943 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
944 return CONNECTION_ERROR_INVALID_PARAMETER;
947 net_profile_info_t *profile_info = profile;
948 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
949 if (net_info == NULL)
950 return CONNECTION_ERROR_OPERATION_FAILED;
952 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
954 net_info->DnsAddr6[order-1].Type = NET_ADDR_IPV6;
955 if (dns_address == NULL)
956 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[order-1].Data.Ipv6);
957 else if (inet_pton(AF_INET6, dns_address, &net_info->DnsAddr6[order-1].Data.Ipv6) < 1)
958 return CONNECTION_ERROR_INVALID_PARAMETER;
959 if (net_info->DnsCount6 < order)
960 net_info->DnsCount6 = order;
963 net_info->DnsAddr[order-1].Type = NET_ADDR_IPV4;
964 if (dns_address == NULL)
965 net_info->DnsAddr[order-1].Data.Ipv4.s_addr = 0;
966 else if (inet_pton(AF_INET, dns_address, &(net_info->DnsAddr[order-1].Data.Ipv4)) < 1)
967 return CONNECTION_ERROR_INVALID_PARAMETER;
968 if (net_info->DnsCount < order)
969 net_info->DnsCount = order;
972 return CONNECTION_ERROR_NONE;
975 EXPORT_API int connection_profile_set_proxy_type(connection_profile_h profile, connection_proxy_type_e type)
977 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
979 if (!(_connection_libnet_check_profile_validity(profile))) {
980 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
981 return CONNECTION_ERROR_INVALID_PARAMETER;
984 net_profile_info_t *profile_info = profile;
985 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
986 if (net_info == NULL)
987 return CONNECTION_ERROR_OPERATION_FAILED;
991 case CONNECTION_PROXY_TYPE_DIRECT:
992 net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
994 case CONNECTION_PROXY_TYPE_AUTO:
995 net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
997 case CONNECTION_PROXY_TYPE_MANUAL:
998 net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
1001 return CONNECTION_ERROR_INVALID_PARAMETER;
1005 return CONNECTION_ERROR_NONE;
1008 EXPORT_API int connection_profile_set_proxy_address(connection_profile_h profile,
1009 connection_address_family_e address_family, const char* proxy_address)
1011 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1013 CONNECTION_LOG(CONNECTION_ERROR, "Address Family: ", address_family);
1014 if (!(_connection_libnet_check_profile_validity(profile)) ||
1015 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1016 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1017 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1018 return CONNECTION_ERROR_INVALID_PARAMETER;
1021 net_profile_info_t *profile_info = profile;
1022 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1023 if (net_info == NULL)
1024 return CONNECTION_ERROR_OPERATION_FAILED;
1026 if (proxy_address == NULL)
1027 net_info->ProxyAddr[0] = '\0';
1029 g_strlcpy(net_info->ProxyAddr, proxy_address, NET_PROXY_LEN_MAX);
1031 return CONNECTION_ERROR_NONE;
1034 EXPORT_API int connection_profile_set_state_changed_cb(connection_profile_h profile,
1035 connection_profile_state_changed_cb callback, void* user_data)
1037 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1039 if (!(_connection_libnet_check_profile_validity(profile)) || callback == NULL) {
1040 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1041 return CONNECTION_ERROR_INVALID_PARAMETER;
1044 if (_connection_libnet_add_to_profile_cb_list(profile, callback, user_data))
1045 return CONNECTION_ERROR_NONE;
1047 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1050 EXPORT_API int connection_profile_unset_state_changed_cb(connection_profile_h profile)
1052 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1054 if (!(_connection_libnet_check_profile_validity(profile))) {
1055 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1056 return CONNECTION_ERROR_INVALID_PARAMETER;
1059 if (_connection_libnet_remove_from_profile_cb_list(profile) != true)
1060 return CONNECTION_ERROR_INVALID_PARAMETER;
1062 return CONNECTION_ERROR_NONE;
1066 /* Wi-Fi profile *************************************************************/
1067 EXPORT_API int connection_profile_get_wifi_essid(connection_profile_h profile, char** essid)
1069 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1071 if (!(_connection_libnet_check_profile_validity(profile)) || essid == NULL) {
1072 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1073 return CONNECTION_ERROR_INVALID_PARAMETER;
1076 net_profile_info_t *profile_info = profile;
1078 if (profile_info->profile_type != NET_DEVICE_WIFI)
1079 return CONNECTION_ERROR_INVALID_PARAMETER;
1081 *essid = g_strdup(profile_info->ProfileInfo.Wlan.essid);
1083 return CONNECTION_ERROR_OUT_OF_MEMORY;
1085 return CONNECTION_ERROR_NONE;
1088 EXPORT_API int connection_profile_get_wifi_bssid(connection_profile_h profile, char** bssid)
1090 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1092 if (!(_connection_libnet_check_profile_validity(profile)) || bssid == 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 *bssid = g_strdup(profile_info->ProfileInfo.Wlan.bssid);
1104 return CONNECTION_ERROR_OUT_OF_MEMORY;
1106 return CONNECTION_ERROR_NONE;
1109 EXPORT_API int connection_profile_get_wifi_rssi(connection_profile_h profile, int* rssi)
1111 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1113 if (!(_connection_libnet_check_profile_validity(profile)) || rssi == 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 *rssi = (int)profile_info->ProfileInfo.Wlan.Strength;
1125 return CONNECTION_ERROR_NONE;
1128 EXPORT_API int connection_profile_get_wifi_frequency(connection_profile_h profile, int* frequency)
1130 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1132 if (!(_connection_libnet_check_profile_validity(profile)) || frequency == NULL) {
1133 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1134 return CONNECTION_ERROR_INVALID_PARAMETER;
1137 net_profile_info_t *profile_info = profile;
1139 if (profile_info->profile_type != NET_DEVICE_WIFI)
1140 return CONNECTION_ERROR_INVALID_PARAMETER;
1142 *frequency = (int)profile_info->ProfileInfo.Wlan.frequency;
1144 return CONNECTION_ERROR_NONE;
1147 EXPORT_API int connection_profile_get_wifi_max_speed(connection_profile_h profile, int* max_speed)
1149 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1151 if (!(_connection_libnet_check_profile_validity(profile)) || max_speed == NULL) {
1152 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1153 return CONNECTION_ERROR_INVALID_PARAMETER;
1156 net_profile_info_t *profile_info = profile;
1158 if (profile_info->profile_type != NET_DEVICE_WIFI)
1159 return CONNECTION_ERROR_INVALID_PARAMETER;
1161 *max_speed = (int)profile_info->ProfileInfo.Wlan.max_rate / 1000000;
1163 return CONNECTION_ERROR_NONE;
1166 EXPORT_API int connection_profile_get_wifi_security_type(connection_profile_h profile, connection_wifi_security_type_e *type)
1168 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1170 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1171 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1172 return CONNECTION_ERROR_INVALID_PARAMETER;
1175 net_profile_info_t *profile_info = profile;
1177 if (profile_info->profile_type != NET_DEVICE_WIFI)
1178 return CONNECTION_ERROR_INVALID_PARAMETER;
1180 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
1182 case WLAN_SEC_MODE_NONE:
1183 *type = CONNECTION_WIFI_SECURITY_TYPE_NONE;
1185 case WLAN_SEC_MODE_WEP:
1186 *type = CONNECTION_WIFI_SECURITY_TYPE_WEP;
1188 case WLAN_SEC_MODE_IEEE8021X:
1189 *type = CONNECTION_WIFI_SECURITY_TYPE_EAP;
1191 case WLAN_SEC_MODE_WPA_PSK:
1192 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA_PSK;
1194 case WLAN_SEC_MODE_WPA2_PSK:
1195 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA2_PSK;
1198 return CONNECTION_ERROR_OPERATION_FAILED;
1202 return CONNECTION_ERROR_NONE;
1205 EXPORT_API int connection_profile_get_wifi_encryption_type(connection_profile_h profile, connection_wifi_encryption_type_e *type)
1207 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1209 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1210 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1211 return CONNECTION_ERROR_INVALID_PARAMETER;
1214 net_profile_info_t *profile_info = profile;
1216 if (profile_info->profile_type != NET_DEVICE_WIFI)
1217 return CONNECTION_ERROR_INVALID_PARAMETER;
1219 switch (profile_info->ProfileInfo.Wlan.security_info.enc_mode) {
1221 case WLAN_ENC_MODE_NONE:
1222 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_NONE;
1224 case WLAN_ENC_MODE_WEP:
1225 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_WEP;
1227 case WLAN_ENC_MODE_TKIP:
1228 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP;
1230 case WLAN_ENC_MODE_AES:
1231 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_AES;
1233 case WLAN_ENC_MODE_TKIP_AES_MIXED:
1234 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP_AES_MIXED;
1237 return CONNECTION_ERROR_OPERATION_FAILED;
1241 return CONNECTION_ERROR_NONE;
1244 EXPORT_API int connection_profile_is_wifi_passphrase_required(connection_profile_h profile, bool* required)
1246 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1248 if (!(_connection_libnet_check_profile_validity(profile)) || required == NULL) {
1249 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1250 return CONNECTION_ERROR_INVALID_PARAMETER;
1253 net_profile_info_t *profile_info = profile;
1255 if (profile_info->profile_type != NET_DEVICE_WIFI)
1256 return CONNECTION_ERROR_INVALID_PARAMETER;
1258 if (profile_info->Favourite) {
1260 return CONNECTION_ERROR_NONE;
1263 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
1265 case WLAN_SEC_MODE_NONE:
1268 case WLAN_SEC_MODE_WEP:
1269 case WLAN_SEC_MODE_IEEE8021X:
1270 case WLAN_SEC_MODE_WPA_PSK:
1271 case WLAN_SEC_MODE_WPA2_PSK:
1275 return CONNECTION_ERROR_OPERATION_FAILED;
1279 return CONNECTION_ERROR_NONE;
1282 EXPORT_API int connection_profile_set_wifi_passphrase(connection_profile_h profile, const char* passphrase)
1284 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1286 if (!(_connection_libnet_check_profile_validity(profile)) || passphrase == NULL) {
1287 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1288 return CONNECTION_ERROR_INVALID_PARAMETER;
1291 net_profile_info_t *profile_info = profile;
1293 if (profile_info->profile_type != NET_DEVICE_WIFI)
1294 return CONNECTION_ERROR_INVALID_PARAMETER;
1296 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.psk.pskKey,
1297 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1299 return CONNECTION_ERROR_NONE;
1302 EXPORT_API int connection_profile_is_wifi_wps_supported(connection_profile_h profile, bool* supported)
1304 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1306 if (!(_connection_libnet_check_profile_validity(profile)) || supported == 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 if (profile_info->ProfileInfo.Wlan.security_info.wps_support)
1321 return CONNECTION_ERROR_NONE;
1325 /* Cellular profile **********************************************************/
1326 EXPORT_API int connection_profile_get_cellular_service_type(connection_profile_h profile,
1327 connection_cellular_service_type_e* type)
1329 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1331 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1332 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1333 return CONNECTION_ERROR_INVALID_PARAMETER;
1336 net_profile_info_t *profile_info = profile;
1338 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1339 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1340 return CONNECTION_ERROR_INVALID_PARAMETER;
1343 *type = _profile_convert_to_connection_cellular_service_type(profile_info->ProfileInfo.Pdp.ServiceType);
1345 if (*type == CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN) {
1346 CONNECTION_LOG(CONNECTION_ERROR, "Invalid service type Passed"); //LCOV_EXCL_LINE
1347 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1350 return CONNECTION_ERROR_NONE;
1353 EXPORT_API int connection_profile_get_cellular_apn(connection_profile_h profile, char** apn)
1355 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1357 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1358 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1359 return CONNECTION_ERROR_INVALID_PARAMETER;
1362 net_profile_info_t *profile_info = profile;
1364 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1365 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1366 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1369 *apn = g_strdup(profile_info->ProfileInfo.Pdp.Apn);
1371 return CONNECTION_ERROR_OUT_OF_MEMORY;
1373 return CONNECTION_ERROR_NONE;
1376 EXPORT_API int connection_profile_get_cellular_auth_info(connection_profile_h profile,
1377 connection_cellular_auth_type_e *type, char** user_name, char** password)
1379 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1381 if (!(_connection_libnet_check_profile_validity(profile)) ||
1382 type == NULL || user_name == NULL || password == NULL) {
1383 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1384 return CONNECTION_ERROR_INVALID_PARAMETER;
1387 net_profile_info_t *profile_info = profile;
1389 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1390 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1391 return CONNECTION_ERROR_INVALID_PARAMETER;
1394 switch (profile_info->ProfileInfo.Pdp.AuthInfo.AuthType) {
1396 case NET_PDP_AUTH_NONE:
1397 *type = CONNECTION_CELLULAR_AUTH_TYPE_NONE;
1399 case NET_PDP_AUTH_PAP:
1400 *type = CONNECTION_CELLULAR_AUTH_TYPE_PAP;
1402 case NET_PDP_AUTH_CHAP:
1403 *type = CONNECTION_CELLULAR_AUTH_TYPE_CHAP;
1406 return CONNECTION_ERROR_OPERATION_FAILED;
1410 *user_name = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.UserName);
1411 if (*user_name == NULL)
1412 return CONNECTION_ERROR_OUT_OF_MEMORY;
1414 *password = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.Password);
1415 if (*password == NULL) {
1416 g_free(*user_name); //LCOV_EXCL_LINE
1417 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1420 return CONNECTION_ERROR_NONE;
1423 EXPORT_API int connection_profile_get_cellular_home_url(connection_profile_h profile, char** home_url)
1425 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1427 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1428 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1429 return CONNECTION_ERROR_INVALID_PARAMETER;
1432 net_profile_info_t *profile_info = profile;
1434 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1435 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1436 return CONNECTION_ERROR_INVALID_PARAMETER;
1439 *home_url = g_strdup(profile_info->ProfileInfo.Pdp.HomeURL);
1440 if (*home_url == NULL)
1441 return CONNECTION_ERROR_OUT_OF_MEMORY;
1443 return CONNECTION_ERROR_NONE;
1446 EXPORT_API int connection_profile_get_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
1448 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1450 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1451 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1452 return CONNECTION_ERROR_INVALID_PARAMETER;
1455 net_profile_info_t *profile_info = profile;
1457 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1458 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1459 return CONNECTION_ERROR_INVALID_PARAMETER;
1462 switch (profile_info->ProfileInfo.Pdp.PdnType) {
1464 case NET_PDN_TYPE_UNKNOWN:
1465 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
1467 case NET_PDN_TYPE_IPV4:
1468 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
1470 case NET_PDN_TYPE_IPV6:
1471 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
1473 case NET_PDN_TYPE_IPV4_IPV6:
1474 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
1477 return CONNECTION_ERROR_OPERATION_FAILED;
1481 return CONNECTION_ERROR_NONE;
1484 EXPORT_API int connection_profile_get_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
1486 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1488 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1489 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1490 return CONNECTION_ERROR_INVALID_PARAMETER;
1493 net_profile_info_t *profile_info = profile;
1495 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1496 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1497 return CONNECTION_ERROR_INVALID_PARAMETER;
1500 switch (profile_info->ProfileInfo.Pdp.RoamPdnType) {
1502 case NET_PDN_TYPE_UNKNOWN:
1503 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
1505 case NET_PDN_TYPE_IPV4:
1506 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
1508 case NET_PDN_TYPE_IPV6:
1509 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
1511 case NET_PDN_TYPE_IPV4_IPV6:
1512 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
1515 return CONNECTION_ERROR_OPERATION_FAILED;
1519 return CONNECTION_ERROR_NONE;
1522 EXPORT_API int connection_profile_is_cellular_roaming(connection_profile_h profile, bool* is_roaming)
1524 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1526 if (!(_connection_libnet_check_profile_validity(profile)) || is_roaming == NULL) {
1527 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1528 return CONNECTION_ERROR_INVALID_PARAMETER;
1531 net_profile_info_t *profile_info = profile;
1533 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1534 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1535 return CONNECTION_ERROR_INVALID_PARAMETER;
1538 if (profile_info->ProfileInfo.Pdp.Roaming)
1541 *is_roaming = false;
1543 return CONNECTION_ERROR_NONE;
1546 EXPORT_API int connection_profile_is_cellular_hidden(connection_profile_h profile, bool* is_hidden)
1548 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1550 if (!(_connection_libnet_check_profile_validity(profile)) || is_hidden == NULL) {
1551 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1552 return CONNECTION_ERROR_INVALID_PARAMETER;
1555 net_profile_info_t *profile_info = profile;
1557 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1558 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1559 return CONNECTION_ERROR_INVALID_PARAMETER;
1562 if (profile_info->ProfileInfo.Pdp.Hidden)
1567 return CONNECTION_ERROR_NONE;
1570 EXPORT_API int connection_profile_is_cellular_editable(connection_profile_h profile, bool* is_editable)
1572 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1574 if (!(_connection_libnet_check_profile_validity(profile)) || is_editable == NULL) {
1575 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1576 return CONNECTION_ERROR_INVALID_PARAMETER;
1579 net_profile_info_t *profile_info = profile;
1581 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1582 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1583 return CONNECTION_ERROR_INVALID_PARAMETER;
1586 if (profile_info->ProfileInfo.Pdp.Editable)
1587 *is_editable = true;
1589 *is_editable = false;
1591 return CONNECTION_ERROR_NONE;
1594 EXPORT_API int connection_profile_is_cellular_default(connection_profile_h profile, bool* is_default)
1596 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1598 if (!(_connection_libnet_check_profile_validity(profile)) || is_default == NULL) {
1599 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1600 return CONNECTION_ERROR_INVALID_PARAMETER;
1603 net_profile_info_t *profile_info = profile;
1605 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1606 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1607 return CONNECTION_ERROR_INVALID_PARAMETER;
1610 if (profile_info->ProfileInfo.Pdp.DefaultConn)
1613 *is_default = false;
1615 return CONNECTION_ERROR_NONE;
1618 EXPORT_API int connection_profile_set_cellular_service_type(connection_profile_h profile,
1619 connection_cellular_service_type_e service_type)
1621 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1623 if (!(_connection_libnet_check_profile_validity(profile))) {
1624 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1625 return CONNECTION_ERROR_INVALID_PARAMETER;
1628 net_profile_info_t *profile_info = profile;
1630 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1631 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1632 return CONNECTION_ERROR_INVALID_PARAMETER;
1635 switch (service_type) {
1637 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
1638 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_INTERNET;
1640 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
1641 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_MMS;
1643 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
1644 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_INTERNET;
1646 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
1647 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_MMS;
1649 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
1650 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_TETHERING;
1652 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
1653 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_APPLICATION;
1655 case CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN:
1657 return CONNECTION_ERROR_INVALID_PARAMETER;
1661 return CONNECTION_ERROR_NONE;
1664 EXPORT_API int connection_profile_set_cellular_apn(connection_profile_h profile, const char* apn)
1666 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1668 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1669 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1670 return CONNECTION_ERROR_INVALID_PARAMETER;
1673 net_profile_info_t *profile_info = profile;
1675 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1676 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1677 return CONNECTION_ERROR_INVALID_PARAMETER;
1680 g_strlcpy(profile_info->ProfileInfo.Pdp.Apn, apn, NET_PDP_APN_LEN_MAX+1);
1682 return CONNECTION_ERROR_NONE;
1685 EXPORT_API int connection_profile_set_cellular_auth_info(connection_profile_h profile,
1686 connection_cellular_auth_type_e type, const char* user_name, const char* password)
1688 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1690 if (!(_connection_libnet_check_profile_validity(profile)) ||
1691 user_name == NULL || password == NULL) {
1692 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1693 return CONNECTION_ERROR_INVALID_PARAMETER;
1696 net_profile_info_t *profile_info = profile;
1698 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1699 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1700 return CONNECTION_ERROR_INVALID_PARAMETER;
1705 case CONNECTION_CELLULAR_AUTH_TYPE_NONE:
1706 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_NONE;
1708 case CONNECTION_CELLULAR_AUTH_TYPE_PAP:
1709 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_PAP;
1711 case CONNECTION_CELLULAR_AUTH_TYPE_CHAP:
1712 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_CHAP;
1715 return CONNECTION_ERROR_INVALID_PARAMETER;
1719 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.UserName, user_name, NET_PDP_AUTH_USERNAME_LEN_MAX+1);
1720 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.Password, password, NET_PDP_AUTH_PASSWORD_LEN_MAX+1);
1722 return CONNECTION_ERROR_NONE;
1725 EXPORT_API int connection_profile_set_cellular_home_url(connection_profile_h profile, const char* home_url)
1727 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1729 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1730 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1731 return CONNECTION_ERROR_INVALID_PARAMETER;
1734 net_profile_info_t *profile_info = profile;
1736 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1737 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1738 return CONNECTION_ERROR_INVALID_PARAMETER;
1741 g_strlcpy(profile_info->ProfileInfo.Pdp.HomeURL, home_url, NET_HOME_URL_LEN_MAX);
1743 return CONNECTION_ERROR_NONE;
1746 EXPORT_API int connection_profile_set_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
1748 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1750 if (!(_connection_libnet_check_profile_validity(profile))) {
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;
1764 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
1765 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4;
1767 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
1768 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV6;
1770 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
1771 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4_IPV6;
1774 return CONNECTION_ERROR_INVALID_PARAMETER;
1778 return CONNECTION_ERROR_NONE;
1781 EXPORT_API int connection_profile_set_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
1783 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1785 if (!(_connection_libnet_check_profile_validity(profile))) {
1786 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1787 return CONNECTION_ERROR_INVALID_PARAMETER;
1790 net_profile_info_t *profile_info = profile;
1792 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1793 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1794 return CONNECTION_ERROR_INVALID_PARAMETER;
1799 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
1800 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4;
1802 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
1803 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV6;
1805 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
1806 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4_IPV6;
1809 return CONNECTION_ERROR_INVALID_PARAMETER;
1813 return CONNECTION_ERROR_NONE;