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"
25 #include "connection_extension.h"
27 #define HTTP_PROXY "http_proxy"
28 #define MAX_PREFIX_LENGTH 6
30 static net_dev_info_t* __profile_get_net_info(net_profile_info_t *profile_info)
32 switch (profile_info->profile_type) {
33 case NET_DEVICE_CELLULAR:
34 return &profile_info->ProfileInfo.Pdp.net_info;
36 return &profile_info->ProfileInfo.Wlan.net_info;
37 case NET_DEVICE_ETHERNET:
38 return &profile_info->ProfileInfo.Ethernet.net_info; //LCOV_EXCL_LINE
39 case NET_DEVICE_BLUETOOTH:
40 return &profile_info->ProfileInfo.Bluetooth.net_info;
42 return &profile_info->ProfileInfo.Mesh.net_info;
43 case NET_DEVICE_DEFAULT:
45 case NET_DEVICE_UNKNOWN:
52 static char *__profile_convert_ip_to_string(net_addr_t *ip_addr, connection_address_family_e address_family)
54 unsigned char *ipaddr = NULL;
57 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
58 ipaddr = (unsigned char *)&ip_addr->Data.Ipv4.s_addr;
59 ipstr = g_try_malloc0(INET_ADDRSTRLEN);
63 inet_ntop(AF_INET, ipaddr, ipstr, INET_ADDRSTRLEN);
66 ipaddr = (unsigned char *)&ip_addr->Data.Ipv6.s6_addr;
67 ipstr = g_try_malloc0(INET6_ADDRSTRLEN);
71 inet_ntop(AF_INET6, ipaddr, ipstr, INET6_ADDRSTRLEN);
78 static void __profile_init_cellular_profile(net_profile_info_t *profile_info, const char *keyword)
80 int default_subscriber_id = 0;
81 connection_profile_h profile = NULL;
83 profile_info->profile_type = NET_DEVICE_CELLULAR;
84 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
85 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_UNKNOWN;
86 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_UNKNOWN;
87 profile_info->ProfileInfo.Pdp.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
88 profile_info->ProfileInfo.Pdp.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
89 g_strlcpy(profile_info->ProfileInfo.Pdp.Keyword, keyword, NET_PDP_APN_LEN_MAX);
91 if (vconf_get_int(VCONF_TELEPHONY_DEFAULT_DATA_SERVICE,
92 &default_subscriber_id) != 0)
93 CONNECTION_LOG(CONNECTION_ERROR, //LCOV_EXCL_LINE
94 "Failed to get VCONF_TELEPHONY_DEFAULT_DATA_SERVICE");
96 profile = (connection_profile_h)profile_info;
97 _connection_libnet_set_cellular_subscriber_id(profile, default_subscriber_id);
100 static void __profile_init_wifi_profile(net_profile_info_t *profile_info)
102 profile_info->profile_type = NET_DEVICE_WIFI;
103 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
104 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
105 profile_info->ProfileInfo.Wlan.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
106 profile_info->ProfileInfo.Wlan.wlan_mode = NETPM_WLAN_CONNMODE_AUTO;
107 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_NONE;
108 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_NONE;
112 static char* __profile_get_ethernet_proxy(void)
116 proxy = vconf_get_str(VCONFKEY_NETWORK_PROXY);
119 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get system proxy");
127 static unsigned char __profile_convert_netmask_to_prefix_len(const char *netmask)
132 in_addr_t mask = inet_network(netmask);
133 in_addr_t host = ~mask;
134 unsigned char prefix_len = 0;
136 /* a valid netmask must be 2^n - 1 */
137 if ((host & (host + 1)) != 0)
140 for (; mask; mask <<= 1)
146 static in_addr_t __profile_convert_prefix_len_to_netmask(int prefix_len)
148 return (prefix_len ? (in_addr_t) 0xFFFFFFFFu >> (32 - prefix_len) : 0);
152 connection_cellular_service_type_e _profile_convert_to_connection_cellular_service_type(net_service_type_t svc_type)
155 case NET_SERVICE_INTERNET:
156 return CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET;
157 case NET_SERVICE_MMS:
158 return CONNECTION_CELLULAR_SERVICE_TYPE_MMS;
159 case NET_SERVICE_PREPAID_INTERNET:
160 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET;
161 case NET_SERVICE_PREPAID_MMS:
162 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS;
163 case NET_SERVICE_TETHERING:
164 return CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING;
165 case NET_SERVICE_APPLICATION:
166 return CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION;
168 return CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
172 connection_profile_state_e _profile_convert_to_cp_state(net_state_type_t state)
174 connection_profile_state_e cp_state;
177 case NET_STATE_TYPE_ONLINE:
178 case NET_STATE_TYPE_READY:
179 cp_state = CONNECTION_PROFILE_STATE_CONNECTED;
181 case NET_STATE_TYPE_IDLE:
182 case NET_STATE_TYPE_FAILURE:
183 case NET_STATE_TYPE_DISCONNECT:
184 cp_state = CONNECTION_PROFILE_STATE_DISCONNECTED;
186 case NET_STATE_TYPE_ASSOCIATION:
187 cp_state = CONNECTION_PROFILE_STATE_ASSOCIATION;
189 case NET_STATE_TYPE_CONFIGURATION:
190 cp_state = CONNECTION_PROFILE_STATE_CONFIGURATION;
199 net_service_type_t _connection_profile_convert_to_libnet_cellular_service_type(connection_cellular_service_type_e svc_type)
202 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
203 return NET_SERVICE_INTERNET;
204 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
205 return NET_SERVICE_MMS;
206 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
207 return NET_SERVICE_PREPAID_INTERNET;
208 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
209 return NET_SERVICE_PREPAID_MMS;
210 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
211 return NET_SERVICE_TETHERING;
212 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
213 return NET_SERVICE_APPLICATION;
215 return NET_SERVICE_UNKNOWN;
219 net_state_type_t _connection_profile_convert_to_net_state(connection_profile_state_e state)
221 net_state_type_t libnet_state = NET_STATE_TYPE_UNKNOWN;
224 case CONNECTION_PROFILE_STATE_CONNECTED:
225 libnet_state = NET_STATE_TYPE_ONLINE;
227 case CONNECTION_PROFILE_STATE_DISCONNECTED:
228 libnet_state = NET_STATE_TYPE_IDLE;
230 case CONNECTION_PROFILE_STATE_ASSOCIATION:
231 libnet_state = NET_STATE_TYPE_ASSOCIATION;
233 case CONNECTION_PROFILE_STATE_CONFIGURATION:
234 libnet_state = NET_STATE_TYPE_CONFIGURATION;
242 /* Connection profile ********************************************************/
243 EXPORT_API int connection_profile_create(connection_profile_type_e type, const char* keyword, connection_profile_h* profile)
247 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
249 if (type == CONNECTION_PROFILE_TYPE_CELLULAR)
250 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
251 else if (type == CONNECTION_PROFILE_TYPE_WIFI)
252 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
254 if (type != CONNECTION_PROFILE_TYPE_CELLULAR &&
255 type != CONNECTION_PROFILE_TYPE_WIFI) {
256 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
258 return CONNECTION_ERROR_INVALID_PARAMETER;
261 if (profile == NULL) {
262 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
264 return CONNECTION_ERROR_INVALID_PARAMETER;
267 int rv = _connection_libnet_check_profile_privilege();
268 if (rv == CONNECTION_ERROR_PERMISSION_DENIED) {
271 } else if (rv != CONNECTION_ERROR_NONE) {
272 CONNECTION_LOG(CONNECTION_ERROR, "Failed to create profile"); //LCOV_EXCL_LINE
274 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
277 net_profile_info_t *profile_info = g_try_malloc0(sizeof(net_profile_info_t));
278 if (profile_info == NULL) {
280 return CONNECTION_ERROR_OUT_OF_MEMORY;
283 if (type == CONNECTION_PROFILE_TYPE_CELLULAR) {
284 if (keyword == NULL) {
285 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
286 g_free(profile_info);
288 return CONNECTION_ERROR_INVALID_PARAMETER;
290 __profile_init_cellular_profile(profile_info, keyword);
291 } else if (type == CONNECTION_PROFILE_TYPE_WIFI) {
292 __profile_init_wifi_profile(profile_info);
295 *profile = (connection_profile_h)profile_info;
296 _connection_libnet_add_to_profile_list(*profile);
299 return CONNECTION_ERROR_NONE;
302 EXPORT_API int connection_profile_destroy(connection_profile_h profile)
306 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
308 if (!(_connection_libnet_check_profile_validity(profile))) {
309 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
311 return CONNECTION_ERROR_INVALID_PARAMETER;
314 _connection_libnet_remove_from_profile_list(profile);
317 return CONNECTION_ERROR_NONE;
320 EXPORT_API int connection_profile_clone(connection_profile_h* cloned_profile, connection_profile_h origin_profile)
324 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
326 if (!(_connection_libnet_check_profile_validity(origin_profile)) || cloned_profile == NULL) {
327 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
329 return CONNECTION_ERROR_INVALID_PARAMETER;
332 *cloned_profile = g_try_malloc0(sizeof(net_profile_info_t));
333 if (*cloned_profile == NULL) {
335 return CONNECTION_ERROR_OUT_OF_MEMORY;
338 memcpy(*cloned_profile, origin_profile, sizeof(net_profile_info_t));
339 _connection_libnet_add_to_profile_list(*cloned_profile);
342 return CONNECTION_ERROR_NONE;
345 EXPORT_API int connection_profile_get_id(connection_profile_h profile, char** profile_id)
349 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
351 if (!(_connection_libnet_check_profile_validity(profile)) || profile_id == NULL) {
352 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
354 return CONNECTION_ERROR_INVALID_PARAMETER;
357 net_profile_info_t *profile_info = profile;
359 char *prof_id = strrchr(profile_info->ProfileName, '/');
360 if (prof_id == NULL) {
362 return CONNECTION_ERROR_INVALID_PARAMETER;
366 *profile_id = g_strdup(prof_id);
368 if (*profile_id == NULL) {
370 return CONNECTION_ERROR_OUT_OF_MEMORY;
374 return CONNECTION_ERROR_NONE;
377 EXPORT_API int connection_profile_get_name(connection_profile_h profile, char** profile_name)
381 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
383 if (!(_connection_libnet_check_profile_validity(profile)) || profile_name == NULL) {
384 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
386 return CONNECTION_ERROR_INVALID_PARAMETER;
389 net_profile_info_t *profile_info = profile;
391 switch (profile_info->profile_type) {
392 case NET_DEVICE_CELLULAR:
393 *profile_name = g_strdup(profile_info->ProfileInfo.Pdp.Keyword);
395 case NET_DEVICE_WIFI:
396 *profile_name = g_strdup(profile_info->ProfileInfo.Wlan.essid);
398 case NET_DEVICE_ETHERNET:
399 *profile_name = g_strdup(profile_info->ProfileInfo.Ethernet.net_info.DevName); //LCOV_EXCL_LINE
400 break; //LCOV_EXCL_LINE
401 case NET_DEVICE_BLUETOOTH: {
402 char *bt_name = strrchr(profile_info->ProfileName, '/');
403 if (bt_name == NULL) {
405 return CONNECTION_ERROR_INVALID_PARAMETER;
409 *profile_name = g_strdup(bt_name);
411 case NET_DEVICE_MESH:
412 *profile_name = g_strdup(profile_info->ProfileInfo.Mesh.essid);
416 return CONNECTION_ERROR_INVALID_PARAMETER;
419 if (*profile_name == NULL) {
421 return CONNECTION_ERROR_OUT_OF_MEMORY;
425 return CONNECTION_ERROR_NONE;
428 EXPORT_API int connection_profile_get_type(connection_profile_h profile, connection_profile_type_e *type)
432 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
434 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
435 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
437 return CONNECTION_ERROR_INVALID_PARAMETER;
440 net_profile_info_t *profile_info = profile;
442 switch (profile_info->profile_type) {
443 case NET_DEVICE_CELLULAR:
444 *type = CONNECTION_PROFILE_TYPE_CELLULAR;
446 case NET_DEVICE_WIFI:
447 *type = CONNECTION_PROFILE_TYPE_WIFI;
449 case NET_DEVICE_ETHERNET:
450 *type = CONNECTION_PROFILE_TYPE_ETHERNET; //LCOV_EXCL_LINE
451 break; //LCOV_EXCL_LINE
452 case NET_DEVICE_BLUETOOTH:
453 *type = CONNECTION_PROFILE_TYPE_BT;
455 case NET_DEVICE_MESH:
456 *type = CONNECTION_PROFILE_TYPE_MESH;
459 CONNECTION_LOG(CONNECTION_ERROR, "Invalid profile type");
461 return CONNECTION_ERROR_OPERATION_FAILED;
465 return CONNECTION_ERROR_NONE;
468 EXPORT_API int connection_profile_get_network_interface_name(connection_profile_h profile, char** interface_name)
472 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
474 if (!(_connection_libnet_check_profile_validity(profile)) || interface_name == NULL) {
475 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
477 return CONNECTION_ERROR_INVALID_PARAMETER;
480 net_profile_info_t *profile_info = profile;
481 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
482 if (net_info == NULL) {
484 return CONNECTION_ERROR_INVALID_PARAMETER;
487 *interface_name = g_strdup(net_info->DevName);
488 if (*interface_name == NULL) {
490 return CONNECTION_ERROR_OUT_OF_MEMORY;
494 return CONNECTION_ERROR_NONE;
497 EXPORT_API int connection_profile_refresh(connection_profile_h profile)
503 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
505 if (!(_connection_libnet_check_profile_validity(profile))) {
506 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
508 return CONNECTION_ERROR_INVALID_PARAMETER;
511 net_profile_info_t profile_info_local;
512 net_profile_info_t *profile_info = profile;
514 rv = net_get_profile_info(NULL, profile_info->ProfileName, &profile_info_local);
515 if (rv == NET_ERR_ACCESS_DENIED) {
516 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
518 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
519 } else if (rv != NET_ERR_NONE) {
520 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get profile information"); //LCOV_EXCL_LINE
522 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
525 memcpy(profile, &profile_info_local, sizeof(net_profile_info_t));
528 return CONNECTION_ERROR_NONE;
531 EXPORT_API int connection_profile_get_state(connection_profile_h profile, connection_profile_state_e* state)
535 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
537 if (!(_connection_libnet_check_profile_validity(profile)) || state == NULL) {
538 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
540 return CONNECTION_ERROR_INVALID_PARAMETER;
543 net_profile_info_t *profile_info = profile;
544 *state = _profile_convert_to_cp_state(profile_info->ProfileState);
547 return CONNECTION_ERROR_NONE;
550 EXPORT_API int connection_profile_get_ip_config_type(connection_profile_h profile,
551 connection_address_family_e address_family, connection_ip_config_type_e *type)
553 net_ip_config_type_t profile_type;
557 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
559 if (!(_connection_libnet_check_profile_validity(profile)) ||
560 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
561 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
563 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
565 return CONNECTION_ERROR_INVALID_PARAMETER;
568 net_profile_info_t *profile_info = profile;
569 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
570 if (net_info == NULL) {
572 return CONNECTION_ERROR_OPERATION_FAILED;
575 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
576 profile_type = net_info->IpConfigType;
578 profile_type = net_info->IpConfigType6;
580 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
581 switch (profile_type) {
583 case NET_IP_CONFIG_TYPE_STATIC:
584 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
587 case NET_IP_CONFIG_TYPE_DYNAMIC:
588 *type = CONNECTION_IP_CONFIG_TYPE_DYNAMIC;
591 case NET_IP_CONFIG_TYPE_AUTO_IP:
592 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
595 case NET_IP_CONFIG_TYPE_FIXED:
596 *type = CONNECTION_IP_CONFIG_TYPE_FIXED;
599 case NET_IP_CONFIG_TYPE_OFF:
600 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
604 return CONNECTION_ERROR_OPERATION_FAILED;
609 switch (profile_type) {
610 case NET_IP_CONFIG_TYPE_STATIC:
611 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
614 case NET_IP_CONFIG_TYPE_AUTO_IP:
615 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
618 case NET_IP_CONFIG_TYPE_OFF:
619 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
624 return CONNECTION_ERROR_OPERATION_FAILED;
631 return CONNECTION_ERROR_NONE;
634 EXPORT_API int connection_profile_get_ip_address(connection_profile_h profile,
635 connection_address_family_e address_family, char** ip_address)
639 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
641 if (!(_connection_libnet_check_profile_validity(profile)) ||
642 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
643 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
644 ip_address == NULL) {
645 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
647 return CONNECTION_ERROR_INVALID_PARAMETER;
650 net_profile_info_t *profile_info = profile;
651 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
652 if (net_info == NULL) {
654 return CONNECTION_ERROR_OPERATION_FAILED;
657 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
658 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr,
661 if (net_get_preferred_ipv6_address(net_info->ProfileName, ip_address) != NET_ERR_NONE) {
662 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get preferred ipv6 address");
663 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr6,
668 if (*ip_address == NULL) {
670 return CONNECTION_ERROR_OUT_OF_MEMORY;
674 return CONNECTION_ERROR_NONE;
677 EXPORT_API int connection_profile_get_subnet_mask(connection_profile_h profile,
678 connection_address_family_e address_family, char** subnet_mask)
682 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
684 if (!(_connection_libnet_check_profile_validity(profile)) ||
685 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
686 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
687 subnet_mask == NULL) {
688 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
690 return CONNECTION_ERROR_INVALID_PARAMETER;
693 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
694 CONNECTION_LOG(CONNECTION_ERROR,
695 "Please uses connection_profile_get_prefix_length()");
697 return CONNECTION_ERROR_NOT_SUPPORTED;
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) {
704 return CONNECTION_ERROR_OPERATION_FAILED;
707 *subnet_mask = __profile_convert_ip_to_string(&net_info->SubnetMask,
710 if (*subnet_mask == NULL) {
712 return CONNECTION_ERROR_OUT_OF_MEMORY;
716 return CONNECTION_ERROR_NONE;
719 EXPORT_API int connection_profile_get_gateway_address(connection_profile_h profile,
720 connection_address_family_e address_family, char** gateway_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 gateway_address == NULL) {
730 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
732 return CONNECTION_ERROR_INVALID_PARAMETER;
735 net_profile_info_t *profile_info = profile;
736 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
737 if (net_info == NULL) {
739 return CONNECTION_ERROR_OPERATION_FAILED;
742 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
743 *gateway_address = __profile_convert_ip_to_string(
744 &net_info->GatewayAddr6, address_family);
746 *gateway_address = __profile_convert_ip_to_string(
747 &net_info->GatewayAddr, address_family);
749 if (*gateway_address == NULL) {
751 return CONNECTION_ERROR_OUT_OF_MEMORY;
755 return CONNECTION_ERROR_NONE;
758 EXPORT_API int connection_profile_get_dhcp_server_address(
759 connection_profile_h profile,
760 connection_address_family_e address_family, char** dhcp_server)
764 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
766 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
767 CONNECTION_LOG(CONNECTION_ERROR, "Not supported");
769 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
772 if (!(_connection_libnet_check_profile_validity(profile)) ||
773 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4) ||
774 dhcp_server == NULL) {
775 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
777 return CONNECTION_ERROR_INVALID_PARAMETER;
780 net_profile_info_t *profile_info = profile;
781 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
782 if (net_info == NULL) {
784 return CONNECTION_ERROR_OPERATION_FAILED;
787 CONNECTION_LOG(CONNECTION_INFO, "IP Config %d, DHCP Server Address %s",
788 net_info->IpConfigType, (net_info->BServerAddr ? "TRUE" : "FALSE"));
790 *dhcp_server = __profile_convert_ip_to_string(&net_info->ServerAddr,
793 if (*dhcp_server == NULL) {
795 return CONNECTION_ERROR_OUT_OF_MEMORY;
799 return CONNECTION_ERROR_NONE;
802 EXPORT_API int connection_profile_get_dhcp_lease_duration(
803 connection_profile_h profile,
804 connection_address_family_e address_family, int* dhcp_lease_duration)
808 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
810 if (!(_connection_libnet_check_profile_validity(profile)) ||
811 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
812 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
813 dhcp_lease_duration == NULL) {
814 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
816 return CONNECTION_ERROR_INVALID_PARAMETER;
819 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
820 CONNECTION_LOG(CONNECTION_ERROR, "Not supported");
822 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
825 net_profile_info_t *profile_info = profile;
826 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
827 if (net_info == NULL) {
829 return CONNECTION_ERROR_OPERATION_FAILED;
832 CONNECTION_LOG(CONNECTION_INFO, "Lease duration : %d",
833 net_info->DHCPLeaseDuration);
835 *dhcp_lease_duration = net_info->DHCPLeaseDuration;
838 return CONNECTION_ERROR_NONE;
841 EXPORT_API int connection_profile_get_dns_address(connection_profile_h profile, int order,
842 connection_address_family_e address_family, char** dns_address)
846 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
848 if (!(_connection_libnet_check_profile_validity(profile)) ||
849 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
850 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
851 dns_address == NULL ||
853 order > NET_DNS_ADDR_MAX) {
854 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) {
863 return CONNECTION_ERROR_OPERATION_FAILED;
866 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
867 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr[order-1],
869 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) //LCOV_EXCL_LINE
870 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr6[order-1], //LCOV_EXCL_LINE
873 if (*dns_address == NULL) {
875 return CONNECTION_ERROR_OUT_OF_MEMORY;
879 return CONNECTION_ERROR_NONE;
882 EXPORT_API int connection_profile_get_proxy_type(connection_profile_h profile, connection_proxy_type_e *type)
886 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
888 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
889 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
891 return CONNECTION_ERROR_INVALID_PARAMETER;
894 net_profile_info_t *profile_info = profile;
895 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
896 if (net_info == NULL) {
898 return CONNECTION_ERROR_OPERATION_FAILED;
902 if (profile_info->profile_type == NET_DEVICE_ETHERNET) {
903 char *proxy = __profile_get_ethernet_proxy();
905 *type = CONNECTION_PROXY_TYPE_DIRECT;
907 *type = CONNECTION_PROXY_TYPE_MANUAL;
912 return CONNECTION_ERROR_NONE;
916 switch (net_info->ProxyMethod) {
918 case NET_PROXY_TYPE_DIRECT:
919 *type = CONNECTION_PROXY_TYPE_DIRECT;
921 case NET_PROXY_TYPE_AUTO:
922 *type = CONNECTION_PROXY_TYPE_AUTO;
924 case NET_PROXY_TYPE_MANUAL:
925 *type = CONNECTION_PROXY_TYPE_MANUAL;
927 case NET_PROXY_TYPE_UNKNOWN:
930 return CONNECTION_ERROR_OPERATION_FAILED;
935 return CONNECTION_ERROR_NONE;
938 EXPORT_API int connection_profile_get_proxy_address(connection_profile_h profile,
939 connection_address_family_e address_family, char** proxy_address)
943 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
945 if (!(_connection_libnet_check_profile_validity(profile)) ||
946 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
947 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
948 proxy_address == NULL) {
949 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
951 return CONNECTION_ERROR_INVALID_PARAMETER;
954 net_profile_info_t *profile_info = profile;
955 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
956 if (net_info == NULL) {
958 return CONNECTION_ERROR_OPERATION_FAILED;
961 *proxy_address = g_strdup(net_info->ProxyAddr);
963 if (*proxy_address == NULL) {
965 return CONNECTION_ERROR_OUT_OF_MEMORY;
969 return CONNECTION_ERROR_NONE;
972 EXPORT_API int connection_profile_set_ip_config_type(connection_profile_h profile,
973 connection_address_family_e address_family, connection_ip_config_type_e type)
975 net_ip_config_type_t *profile_type = NULL;
979 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
981 if (!(_connection_libnet_check_profile_validity(profile)) ||
982 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
983 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
984 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
986 return CONNECTION_ERROR_INVALID_PARAMETER;
989 net_profile_info_t *profile_info = profile;
990 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
991 if (net_info == NULL) {
993 return CONNECTION_ERROR_OPERATION_FAILED;
996 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
997 profile_type = &net_info->IpConfigType ;
999 profile_type = &net_info->IpConfigType6 ;
1001 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
1004 case CONNECTION_IP_CONFIG_TYPE_STATIC:
1005 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
1006 net_info->IpAddr.Data.Ipv4.s_addr = 0;
1007 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
1008 net_info->GatewayAddr.Data.Ipv4.s_addr = 0 ;
1011 case CONNECTION_IP_CONFIG_TYPE_DYNAMIC:
1012 *profile_type = NET_IP_CONFIG_TYPE_DYNAMIC;
1015 case CONNECTION_IP_CONFIG_TYPE_AUTO:
1016 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
1019 case CONNECTION_IP_CONFIG_TYPE_FIXED:
1020 net_info->IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
1023 case CONNECTION_IP_CONFIG_TYPE_NONE:
1024 *profile_type = NET_IP_CONFIG_TYPE_OFF;
1029 return CONNECTION_ERROR_INVALID_PARAMETER;
1035 case CONNECTION_IP_CONFIG_TYPE_STATIC:
1036 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
1037 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
1038 net_info->PrefixLen6 = 0 ;
1039 inet_pton(AF_INET6, "::",
1040 &net_info->GatewayAddr6.Data.Ipv6);
1043 case CONNECTION_IP_CONFIG_TYPE_AUTO:
1044 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
1047 case CONNECTION_IP_CONFIG_TYPE_NONE:
1048 *profile_type = NET_IP_CONFIG_TYPE_OFF;
1053 return CONNECTION_ERROR_INVALID_PARAMETER;
1059 return CONNECTION_ERROR_NONE;
1062 EXPORT_API int connection_profile_set_ip_address(connection_profile_h profile,
1063 connection_address_family_e address_family, const char* ip_address)
1067 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1069 if (!(_connection_libnet_check_profile_validity(profile)) ||
1070 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1071 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1072 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1074 return CONNECTION_ERROR_INVALID_PARAMETER;
1077 net_profile_info_t *profile_info = profile;
1078 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1079 if (net_info == NULL) {
1081 return CONNECTION_ERROR_OPERATION_FAILED;
1084 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1086 if (ip_address == NULL)
1087 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
1088 else if (inet_pton(AF_INET6, ip_address, &net_info->IpAddr6.Data.Ipv6) < 1) {
1090 return CONNECTION_ERROR_INVALID_PARAMETER;
1094 if (ip_address == NULL)
1095 net_info->IpAddr.Data.Ipv4.s_addr = 0;
1096 else if (inet_pton(AF_INET, ip_address, &net_info->IpAddr.Data.Ipv4) < 1) {
1098 return CONNECTION_ERROR_INVALID_PARAMETER;
1103 return CONNECTION_ERROR_NONE;
1106 EXPORT_API int connection_profile_set_subnet_mask(connection_profile_h profile,
1107 connection_address_family_e address_family, const char* subnet_mask)
1111 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1113 if (!(_connection_libnet_check_profile_validity(profile)) ||
1114 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1115 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1116 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1118 return CONNECTION_ERROR_INVALID_PARAMETER;
1121 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1122 CONNECTION_LOG(CONNECTION_ERROR,
1123 "Please uses connection_profile_set_prefix_length()");
1125 return CONNECTION_ERROR_NOT_SUPPORTED;
1128 net_profile_info_t *profile_info = profile;
1129 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1130 if (net_info == NULL) {
1132 return CONNECTION_ERROR_OPERATION_FAILED;
1135 if (subnet_mask == NULL)
1136 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
1137 else if (inet_pton(AF_INET, subnet_mask , &net_info->SubnetMask.Data.Ipv4) < 1) {
1139 return CONNECTION_ERROR_INVALID_PARAMETER;
1142 net_info->PrefixLen = __profile_convert_netmask_to_prefix_len(subnet_mask);
1143 if (net_info->PrefixLen <= 0 || net_info->PrefixLen > 31) {
1144 CONNECTION_LOG(CONNECTION_ERROR, "Invalid Prefix length: %d", net_info->PrefixLen);
1146 return CONNECTION_ERROR_INVALID_PARAMETER;
1150 return CONNECTION_ERROR_NONE;
1153 EXPORT_API int connection_profile_set_gateway_address(connection_profile_h profile,
1154 connection_address_family_e address_family, const char* gateway_address)
1158 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1160 if (!(_connection_libnet_check_profile_validity(profile)) ||
1161 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1162 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1163 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1165 return CONNECTION_ERROR_INVALID_PARAMETER;
1168 net_profile_info_t *profile_info = profile;
1169 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1170 if (net_info == NULL) {
1172 return CONNECTION_ERROR_OPERATION_FAILED;
1175 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1177 if (gateway_address == NULL)
1178 inet_pton(AF_INET6, "::", &net_info->GatewayAddr6.Data.Ipv6);
1179 else if (inet_pton(AF_INET6, gateway_address, &net_info->GatewayAddr6.Data.Ipv6) < 1) {
1181 return CONNECTION_ERROR_INVALID_PARAMETER;
1185 if (gateway_address == NULL)
1186 net_info->GatewayAddr.Data.Ipv4.s_addr = 0;
1187 else if (inet_pton(AF_INET, gateway_address, &(net_info->GatewayAddr.Data.Ipv4)) < 1) {
1189 return CONNECTION_ERROR_INVALID_PARAMETER;
1194 return CONNECTION_ERROR_NONE;
1197 EXPORT_API int connection_profile_set_dns_address(connection_profile_h profile, int order,
1198 connection_address_family_e address_family, const char* dns_address)
1202 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1204 if (!(_connection_libnet_check_profile_validity(profile)) ||
1205 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1206 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1208 order > NET_DNS_ADDR_MAX) {
1209 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1211 return CONNECTION_ERROR_INVALID_PARAMETER;
1214 net_profile_info_t *profile_info = profile;
1215 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1216 if (net_info == NULL) {
1218 return CONNECTION_ERROR_OPERATION_FAILED;
1221 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1223 net_info->DnsAddr6[order-1].Type = NET_ADDR_IPV6;
1224 if (dns_address == NULL)
1225 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[order-1].Data.Ipv6);
1226 else if (inet_pton(AF_INET6, dns_address, &net_info->DnsAddr6[order-1].Data.Ipv6) < 1) {
1228 return CONNECTION_ERROR_INVALID_PARAMETER;
1230 if (net_info->DnsCount6 < order)
1231 net_info->DnsCount6 = order;
1234 net_info->DnsAddr[order-1].Type = NET_ADDR_IPV4;
1235 if (dns_address == NULL)
1236 net_info->DnsAddr[order-1].Data.Ipv4.s_addr = 0;
1237 else if (inet_pton(AF_INET, dns_address, &(net_info->DnsAddr[order-1].Data.Ipv4)) < 1) {
1239 return CONNECTION_ERROR_INVALID_PARAMETER;
1241 if (net_info->DnsCount < order)
1242 net_info->DnsCount = order;
1246 return CONNECTION_ERROR_NONE;
1249 EXPORT_API int connection_profile_set_proxy_type(connection_profile_h profile, connection_proxy_type_e type)
1253 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1255 if (!(_connection_libnet_check_profile_validity(profile))) {
1256 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1258 return CONNECTION_ERROR_INVALID_PARAMETER;
1261 net_profile_info_t *profile_info = profile;
1262 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1263 if (net_info == NULL) {
1265 return CONNECTION_ERROR_OPERATION_FAILED;
1270 case CONNECTION_PROXY_TYPE_DIRECT:
1271 net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
1273 case CONNECTION_PROXY_TYPE_AUTO:
1274 net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
1276 case CONNECTION_PROXY_TYPE_MANUAL:
1277 net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
1281 return CONNECTION_ERROR_INVALID_PARAMETER;
1286 return CONNECTION_ERROR_NONE;
1289 EXPORT_API int connection_profile_set_proxy_address(connection_profile_h profile,
1290 connection_address_family_e address_family, const char* proxy_address)
1292 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1294 CONNECTION_LOG(CONNECTION_ERROR, "Address Family: %d", address_family);
1295 if (!(_connection_libnet_check_profile_validity(profile)) ||
1296 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1297 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1298 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1300 return CONNECTION_ERROR_INVALID_PARAMETER;
1303 net_profile_info_t *profile_info = profile;
1304 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1305 if (net_info == NULL) {
1307 return CONNECTION_ERROR_OPERATION_FAILED;
1310 if (proxy_address == NULL)
1311 net_info->ProxyAddr[0] = '\0';
1313 g_strlcpy(net_info->ProxyAddr, proxy_address, NET_PROXY_LEN_MAX);
1316 return CONNECTION_ERROR_NONE;
1319 EXPORT_API int connection_profile_set_state_changed_cb(connection_profile_h profile,
1320 connection_profile_state_changed_cb callback, void* user_data)
1324 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1326 if (!(_connection_libnet_check_profile_validity(profile)) || callback == NULL) {
1327 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1329 return CONNECTION_ERROR_INVALID_PARAMETER;
1332 if (_connection_libnet_add_to_profile_cb_list(profile, callback, user_data)) {
1334 return CONNECTION_ERROR_NONE;
1338 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1341 EXPORT_API int connection_profile_unset_state_changed_cb(connection_profile_h profile)
1345 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1347 if (!(_connection_libnet_check_profile_validity(profile))) {
1348 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1350 return CONNECTION_ERROR_INVALID_PARAMETER;
1353 if (_connection_libnet_remove_from_profile_cb_list(profile) != true) {
1355 return CONNECTION_ERROR_INVALID_PARAMETER;
1359 return CONNECTION_ERROR_NONE;
1363 /* Wi-Fi profile *************************************************************/
1364 EXPORT_API int connection_profile_get_wifi_essid(connection_profile_h profile, char** essid)
1368 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1370 if (!(_connection_libnet_check_profile_validity(profile)) || essid == NULL) {
1371 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1373 return CONNECTION_ERROR_INVALID_PARAMETER;
1376 net_profile_info_t *profile_info = profile;
1378 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1379 profile_info->profile_type != NET_DEVICE_MESH) {
1381 return CONNECTION_ERROR_INVALID_PARAMETER;
1384 if (profile_info->profile_type == NET_DEVICE_WIFI)
1385 *essid = g_strdup(profile_info->ProfileInfo.Wlan.essid);
1387 *essid = g_strdup(profile_info->ProfileInfo.Mesh.essid);
1389 if (*essid == NULL) {
1391 return CONNECTION_ERROR_OUT_OF_MEMORY;
1395 return CONNECTION_ERROR_NONE;
1398 EXPORT_API int connection_profile_get_wifi_bssid(connection_profile_h profile, char** bssid)
1402 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1404 if (!(_connection_libnet_check_profile_validity(profile)) || bssid == NULL) {
1405 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1407 return CONNECTION_ERROR_INVALID_PARAMETER;
1410 net_profile_info_t *profile_info = profile;
1412 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1413 profile_info->profile_type != NET_DEVICE_MESH) {
1415 return CONNECTION_ERROR_INVALID_PARAMETER;
1418 if (profile_info->profile_type == NET_DEVICE_WIFI)
1419 *bssid = g_strdup(profile_info->ProfileInfo.Wlan.bssid);
1421 *bssid = g_strdup(profile_info->ProfileInfo.Mesh.bssid);
1423 if (*bssid == NULL) {
1425 return CONNECTION_ERROR_OUT_OF_MEMORY;
1429 return CONNECTION_ERROR_NONE;
1432 EXPORT_API int connection_profile_get_wifi_rssi(connection_profile_h profile, int* rssi)
1436 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1438 if (!(_connection_libnet_check_profile_validity(profile)) || rssi == NULL) {
1439 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1441 return CONNECTION_ERROR_INVALID_PARAMETER;
1444 net_profile_info_t *profile_info = profile;
1446 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1447 profile_info->profile_type != NET_DEVICE_MESH) {
1449 return CONNECTION_ERROR_INVALID_PARAMETER;
1452 if (profile_info->profile_type == NET_DEVICE_WIFI)
1453 *rssi = (int)profile_info->ProfileInfo.Wlan.Strength;
1455 *rssi = (int)profile_info->ProfileInfo.Mesh.Strength;
1458 return CONNECTION_ERROR_NONE;
1461 EXPORT_API int connection_profile_get_wifi_frequency(connection_profile_h profile, int* frequency)
1465 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1467 if (!(_connection_libnet_check_profile_validity(profile)) || frequency == NULL) {
1468 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1470 return CONNECTION_ERROR_INVALID_PARAMETER;
1473 net_profile_info_t *profile_info = profile;
1475 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1476 profile_info->profile_type != NET_DEVICE_MESH) {
1478 return CONNECTION_ERROR_INVALID_PARAMETER;
1481 if (profile_info->profile_type == NET_DEVICE_WIFI)
1482 *frequency = (int)profile_info->ProfileInfo.Wlan.frequency;
1484 *frequency = (int)profile_info->ProfileInfo.Mesh.frequency;
1487 return CONNECTION_ERROR_NONE;
1490 EXPORT_API int connection_profile_get_wifi_max_speed(connection_profile_h profile, int* max_speed)
1494 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1496 if (!(_connection_libnet_check_profile_validity(profile)) || max_speed == NULL) {
1497 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1499 return CONNECTION_ERROR_INVALID_PARAMETER;
1502 net_profile_info_t *profile_info = profile;
1504 if (profile_info->profile_type != NET_DEVICE_WIFI) {
1506 return CONNECTION_ERROR_INVALID_PARAMETER;
1509 *max_speed = profile_info->ProfileInfo.Wlan.max_rate;
1512 return CONNECTION_ERROR_NONE;
1515 EXPORT_API int connection_profile_get_wifi_security_type(connection_profile_h profile, connection_wifi_security_type_e *type)
1519 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1521 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1522 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1524 return CONNECTION_ERROR_INVALID_PARAMETER;
1527 net_profile_info_t *profile_info = profile;
1529 wlan_security_mode_type_t sec_mode;
1530 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1531 profile_info->profile_type != NET_DEVICE_MESH) {
1533 return CONNECTION_ERROR_INVALID_PARAMETER;
1536 if (profile_info->profile_type == NET_DEVICE_WIFI)
1537 sec_mode = profile_info->ProfileInfo.Wlan.security_info.sec_mode;
1539 sec_mode = profile_info->ProfileInfo.Mesh.security_info.sec_mode;
1543 case WLAN_SEC_MODE_NONE:
1544 *type = CONNECTION_WIFI_SECURITY_TYPE_NONE;
1546 case WLAN_SEC_MODE_WEP:
1547 *type = CONNECTION_WIFI_SECURITY_TYPE_WEP;
1549 case WLAN_SEC_MODE_IEEE8021X:
1550 *type = CONNECTION_WIFI_SECURITY_TYPE_EAP;
1552 case WLAN_SEC_MODE_WPA_PSK:
1553 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA_PSK;
1555 case WLAN_SEC_MODE_WPA2_PSK:
1556 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA2_PSK;
1558 case WLAN_SEC_MODE_SAE:
1559 *type = CONNECTION_WIFI_SECURITY_TYPE_SAE;
1563 return CONNECTION_ERROR_OPERATION_FAILED;
1568 return CONNECTION_ERROR_NONE;
1571 EXPORT_API int connection_profile_get_wifi_encryption_type(connection_profile_h profile, connection_wifi_encryption_type_e *type)
1575 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1577 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1578 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1580 return CONNECTION_ERROR_INVALID_PARAMETER;
1583 net_profile_info_t *profile_info = profile;
1585 if (profile_info->profile_type != NET_DEVICE_WIFI) {
1587 return CONNECTION_ERROR_INVALID_PARAMETER;
1590 switch (profile_info->ProfileInfo.Wlan.security_info.enc_mode) {
1592 case WLAN_ENC_MODE_NONE:
1593 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_NONE;
1595 case WLAN_ENC_MODE_WEP:
1596 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_WEP;
1598 case WLAN_ENC_MODE_TKIP:
1599 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP;
1601 case WLAN_ENC_MODE_AES:
1602 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_AES;
1604 case WLAN_ENC_MODE_TKIP_AES_MIXED:
1605 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP_AES_MIXED;
1609 return CONNECTION_ERROR_OPERATION_FAILED;
1614 return CONNECTION_ERROR_NONE;
1617 EXPORT_API int connection_profile_is_wifi_passphrase_required(connection_profile_h profile, bool* required)
1621 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1623 if (!(_connection_libnet_check_profile_validity(profile)) || required == NULL) {
1624 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1626 return CONNECTION_ERROR_INVALID_PARAMETER;
1629 net_profile_info_t *profile_info = profile;
1631 wlan_security_mode_type_t sec_mode;
1632 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1633 profile_info->profile_type != NET_DEVICE_MESH) {
1635 return CONNECTION_ERROR_INVALID_PARAMETER;
1638 if (profile_info->Favourite) {
1641 return CONNECTION_ERROR_NONE;
1644 if (profile_info->profile_type == NET_DEVICE_WIFI)
1645 sec_mode = profile_info->ProfileInfo.Wlan.security_info.sec_mode;
1647 sec_mode = profile_info->ProfileInfo.Mesh.security_info.sec_mode;
1651 case WLAN_SEC_MODE_NONE:
1654 case WLAN_SEC_MODE_WEP:
1655 case WLAN_SEC_MODE_IEEE8021X:
1656 case WLAN_SEC_MODE_WPA_PSK:
1657 case WLAN_SEC_MODE_WPA2_PSK:
1658 case WLAN_SEC_MODE_SAE:
1663 return CONNECTION_ERROR_OPERATION_FAILED;
1668 return CONNECTION_ERROR_NONE;
1671 EXPORT_API int connection_profile_set_wifi_passphrase(connection_profile_h profile, const char* passphrase)
1675 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1677 if (!(_connection_libnet_check_profile_validity(profile)) || passphrase == NULL) {
1678 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1680 return CONNECTION_ERROR_INVALID_PARAMETER;
1683 net_profile_info_t *profile_info = profile;
1685 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1686 profile_info->profile_type != NET_DEVICE_MESH) {
1688 return CONNECTION_ERROR_INVALID_PARAMETER;
1691 if (profile_info->profile_type == NET_DEVICE_WIFI)
1692 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.psk.pskKey,
1693 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1695 g_strlcpy(profile_info->ProfileInfo.Mesh.security_info.authentication.sae.saeKey,
1696 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1699 return CONNECTION_ERROR_NONE;
1702 EXPORT_API int connection_profile_is_wifi_wps_supported(connection_profile_h profile, bool* supported)
1706 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1708 if (!(_connection_libnet_check_profile_validity(profile)) || supported == NULL) {
1709 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1711 return CONNECTION_ERROR_INVALID_PARAMETER;
1714 net_profile_info_t *profile_info = profile;
1716 if (profile_info->profile_type != NET_DEVICE_WIFI) {
1718 return CONNECTION_ERROR_INVALID_PARAMETER;
1721 if (profile_info->ProfileInfo.Wlan.security_info.wps_support)
1727 return CONNECTION_ERROR_NONE;
1731 /* Cellular profile **********************************************************/
1732 EXPORT_API int connection_profile_get_cellular_service_type(connection_profile_h profile,
1733 connection_cellular_service_type_e* type)
1737 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1739 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1740 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1742 return CONNECTION_ERROR_INVALID_PARAMETER;
1745 net_profile_info_t *profile_info = profile;
1747 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1748 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1750 return CONNECTION_ERROR_INVALID_PARAMETER;
1753 *type = _profile_convert_to_connection_cellular_service_type(profile_info->ProfileInfo.Pdp.ServiceType);
1755 if (*type == CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN) {
1756 CONNECTION_LOG(CONNECTION_ERROR, "Invalid service type Passed"); //LCOV_EXCL_LINE
1758 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1762 return CONNECTION_ERROR_NONE;
1765 EXPORT_API int connection_profile_get_cellular_apn(connection_profile_h profile, char** apn)
1769 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1771 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1772 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1774 return CONNECTION_ERROR_INVALID_PARAMETER;
1777 net_profile_info_t *profile_info = profile;
1779 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1780 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1782 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1785 *apn = g_strdup(profile_info->ProfileInfo.Pdp.Apn);
1788 return CONNECTION_ERROR_OUT_OF_MEMORY;
1792 return CONNECTION_ERROR_NONE;
1795 EXPORT_API int connection_profile_get_cellular_auth_info(connection_profile_h profile,
1796 connection_cellular_auth_type_e *type, char** user_name, char** password)
1800 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1802 if (!(_connection_libnet_check_profile_validity(profile)) ||
1803 type == NULL || user_name == NULL || password == NULL) {
1804 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1806 return CONNECTION_ERROR_INVALID_PARAMETER;
1809 net_profile_info_t *profile_info = profile;
1811 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1812 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1814 return CONNECTION_ERROR_INVALID_PARAMETER;
1817 switch (profile_info->ProfileInfo.Pdp.AuthInfo.AuthType) {
1819 case NET_PDP_AUTH_NONE:
1820 *type = CONNECTION_CELLULAR_AUTH_TYPE_NONE;
1822 case NET_PDP_AUTH_PAP:
1823 *type = CONNECTION_CELLULAR_AUTH_TYPE_PAP;
1825 case NET_PDP_AUTH_CHAP:
1826 *type = CONNECTION_CELLULAR_AUTH_TYPE_CHAP;
1830 return CONNECTION_ERROR_OPERATION_FAILED;
1834 *user_name = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.UserName);
1835 if (*user_name == NULL) {
1837 return CONNECTION_ERROR_OUT_OF_MEMORY;
1840 *password = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.Password);
1841 if (*password == NULL) {
1842 g_free(*user_name); //LCOV_EXCL_LINE
1844 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1848 return CONNECTION_ERROR_NONE;
1851 EXPORT_API int connection_profile_get_cellular_home_url(connection_profile_h profile, char** home_url)
1855 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1857 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1858 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1860 return CONNECTION_ERROR_INVALID_PARAMETER;
1863 net_profile_info_t *profile_info = profile;
1865 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1866 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1868 return CONNECTION_ERROR_INVALID_PARAMETER;
1871 *home_url = g_strdup(profile_info->ProfileInfo.Pdp.HomeURL);
1872 if (*home_url == NULL) {
1874 return CONNECTION_ERROR_OUT_OF_MEMORY;
1878 return CONNECTION_ERROR_NONE;
1881 EXPORT_API int connection_profile_get_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
1885 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1887 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1888 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1890 return CONNECTION_ERROR_INVALID_PARAMETER;
1893 net_profile_info_t *profile_info = profile;
1895 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1896 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1898 return CONNECTION_ERROR_INVALID_PARAMETER;
1901 switch (profile_info->ProfileInfo.Pdp.PdnType) {
1903 case NET_PDN_TYPE_UNKNOWN:
1904 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
1906 case NET_PDN_TYPE_IPV4:
1907 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
1909 case NET_PDN_TYPE_IPV6:
1910 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
1912 case NET_PDN_TYPE_IPV4_IPV6:
1913 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
1917 return CONNECTION_ERROR_OPERATION_FAILED;
1922 return CONNECTION_ERROR_NONE;
1925 EXPORT_API int connection_profile_get_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
1929 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1931 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1932 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1934 return CONNECTION_ERROR_INVALID_PARAMETER;
1937 net_profile_info_t *profile_info = profile;
1939 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1940 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1942 return CONNECTION_ERROR_INVALID_PARAMETER;
1945 switch (profile_info->ProfileInfo.Pdp.RoamPdnType) {
1947 case NET_PDN_TYPE_UNKNOWN:
1948 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
1950 case NET_PDN_TYPE_IPV4:
1951 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
1953 case NET_PDN_TYPE_IPV6:
1954 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
1956 case NET_PDN_TYPE_IPV4_IPV6:
1957 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
1961 return CONNECTION_ERROR_OPERATION_FAILED;
1966 return CONNECTION_ERROR_NONE;
1969 EXPORT_API int connection_profile_is_cellular_roaming(connection_profile_h profile, bool* is_roaming)
1973 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1975 if (!(_connection_libnet_check_profile_validity(profile)) || is_roaming == NULL) {
1976 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1978 return CONNECTION_ERROR_INVALID_PARAMETER;
1981 net_profile_info_t *profile_info = profile;
1983 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1984 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1986 return CONNECTION_ERROR_INVALID_PARAMETER;
1989 if (profile_info->ProfileInfo.Pdp.Roaming)
1992 *is_roaming = false;
1995 return CONNECTION_ERROR_NONE;
1998 EXPORT_API int connection_profile_is_cellular_hidden(connection_profile_h profile, bool* is_hidden)
2002 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2004 if (!(_connection_libnet_check_profile_validity(profile)) || is_hidden == NULL) {
2005 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2007 return CONNECTION_ERROR_INVALID_PARAMETER;
2010 net_profile_info_t *profile_info = profile;
2012 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2013 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2015 return CONNECTION_ERROR_INVALID_PARAMETER;
2018 if (profile_info->ProfileInfo.Pdp.Hidden)
2024 return CONNECTION_ERROR_NONE;
2027 EXPORT_API int connection_profile_is_cellular_editable(connection_profile_h profile, bool* is_editable)
2031 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2033 if (!(_connection_libnet_check_profile_validity(profile)) || is_editable == NULL) {
2034 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2036 return CONNECTION_ERROR_INVALID_PARAMETER;
2039 net_profile_info_t *profile_info = profile;
2041 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2042 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2044 return CONNECTION_ERROR_INVALID_PARAMETER;
2047 if (profile_info->ProfileInfo.Pdp.Editable)
2048 *is_editable = true;
2050 *is_editable = false;
2053 return CONNECTION_ERROR_NONE;
2056 EXPORT_API int connection_profile_is_cellular_default(connection_profile_h profile, bool* is_default)
2060 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2062 if (!(_connection_libnet_check_profile_validity(profile)) || is_default == NULL) {
2063 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2065 return CONNECTION_ERROR_INVALID_PARAMETER;
2068 net_profile_info_t *profile_info = profile;
2070 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2071 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2073 return CONNECTION_ERROR_INVALID_PARAMETER;
2076 if (profile_info->ProfileInfo.Pdp.DefaultConn)
2079 *is_default = false;
2082 return CONNECTION_ERROR_NONE;
2085 EXPORT_API int connection_profile_set_cellular_service_type(connection_profile_h profile,
2086 connection_cellular_service_type_e service_type)
2090 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2092 if (!(_connection_libnet_check_profile_validity(profile))) {
2093 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2095 return CONNECTION_ERROR_INVALID_PARAMETER;
2098 net_profile_info_t *profile_info = profile;
2100 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2101 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2103 return CONNECTION_ERROR_INVALID_PARAMETER;
2106 switch (service_type) {
2108 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
2109 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_INTERNET;
2111 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
2112 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_MMS;
2114 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
2115 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_INTERNET;
2117 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
2118 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_MMS;
2120 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
2121 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_TETHERING;
2123 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
2124 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_APPLICATION;
2126 case CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN:
2129 return CONNECTION_ERROR_INVALID_PARAMETER;
2134 return CONNECTION_ERROR_NONE;
2137 EXPORT_API int connection_profile_set_cellular_apn(connection_profile_h profile, const char* apn)
2141 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2143 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
2144 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2146 return CONNECTION_ERROR_INVALID_PARAMETER;
2149 net_profile_info_t *profile_info = profile;
2151 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2152 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2154 return CONNECTION_ERROR_INVALID_PARAMETER;
2157 g_strlcpy(profile_info->ProfileInfo.Pdp.Apn, apn, NET_PDP_APN_LEN_MAX+1);
2160 return CONNECTION_ERROR_NONE;
2163 EXPORT_API int connection_profile_set_cellular_auth_info(connection_profile_h profile,
2164 connection_cellular_auth_type_e type, const char* user_name, const char* password)
2168 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2170 if (!(_connection_libnet_check_profile_validity(profile)) ||
2171 user_name == NULL || password == NULL) {
2172 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2174 return CONNECTION_ERROR_INVALID_PARAMETER;
2177 net_profile_info_t *profile_info = profile;
2179 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2180 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2182 return CONNECTION_ERROR_INVALID_PARAMETER;
2187 case CONNECTION_CELLULAR_AUTH_TYPE_NONE:
2188 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_NONE;
2190 case CONNECTION_CELLULAR_AUTH_TYPE_PAP:
2191 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_PAP;
2193 case CONNECTION_CELLULAR_AUTH_TYPE_CHAP:
2194 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_CHAP;
2198 return CONNECTION_ERROR_INVALID_PARAMETER;
2202 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.UserName, user_name, NET_PDP_AUTH_USERNAME_LEN_MAX+1);
2203 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.Password, password, NET_PDP_AUTH_PASSWORD_LEN_MAX+1);
2206 return CONNECTION_ERROR_NONE;
2209 EXPORT_API int connection_profile_set_cellular_home_url(connection_profile_h profile, const char* home_url)
2213 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2215 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
2216 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2218 return CONNECTION_ERROR_INVALID_PARAMETER;
2221 net_profile_info_t *profile_info = profile;
2223 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2224 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2226 return CONNECTION_ERROR_INVALID_PARAMETER;
2229 g_strlcpy(profile_info->ProfileInfo.Pdp.HomeURL, home_url, NET_HOME_URL_LEN_MAX);
2232 return CONNECTION_ERROR_NONE;
2235 EXPORT_API int connection_profile_set_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
2239 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2241 if (!(_connection_libnet_check_profile_validity(profile))) {
2242 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2244 return CONNECTION_ERROR_INVALID_PARAMETER;
2247 net_profile_info_t *profile_info = profile;
2249 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2250 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2252 return CONNECTION_ERROR_INVALID_PARAMETER;
2257 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
2258 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4;
2260 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
2261 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV6;
2263 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
2264 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4_IPV6;
2265 CONNECTION_LOG(CONNECTION_WARN, "DEPRECATION WARNINIG: CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6 " \
2266 "from next release. Use CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6 instead");
2268 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6:
2269 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4_IPV6;
2273 return CONNECTION_ERROR_INVALID_PARAMETER;
2278 return CONNECTION_ERROR_NONE;
2281 EXPORT_API int connection_profile_set_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
2285 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2287 if (!(_connection_libnet_check_profile_validity(profile))) {
2288 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2290 return CONNECTION_ERROR_INVALID_PARAMETER;
2293 net_profile_info_t *profile_info = profile;
2295 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2296 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2298 return CONNECTION_ERROR_INVALID_PARAMETER;
2303 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
2304 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4;
2306 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
2307 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV6;
2309 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
2310 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4_IPV6;
2311 CONNECTION_LOG(CONNECTION_WARN, "DEPRECATION WARNINIG: CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6 " \
2312 "from next release. Use CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6 instead");
2314 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6:
2315 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4_IPV6;
2319 return CONNECTION_ERROR_INVALID_PARAMETER;
2324 return CONNECTION_ERROR_NONE;
2327 EXPORT_API int connection_profile_get_ipv6_state(connection_profile_h profile, connection_profile_state_e *state)
2331 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2332 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2334 if (!(_connection_libnet_check_profile_validity(profile)) ||
2336 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2338 return CONNECTION_ERROR_INVALID_PARAMETER;
2341 net_profile_info_t *profile_info = profile;
2342 *state = _profile_convert_to_cp_state(profile_info->ProfileState6);
2345 return CONNECTION_ERROR_OPERATION_FAILED;
2349 return CONNECTION_ERROR_NONE;
2352 EXPORT_API int connection_profile_set_dns_config_type(connection_profile_h profile,
2353 connection_address_family_e address_family, connection_dns_config_type_e type)
2357 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2358 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2360 if (!(_connection_libnet_check_profile_validity(profile))) {
2361 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2363 return CONNECTION_ERROR_INVALID_PARAMETER;
2366 if ((address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2367 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
2368 (type != CONNECTION_DNS_CONFIG_TYPE_STATIC &&
2369 type != CONNECTION_DNS_CONFIG_TYPE_DYNAMIC)) {
2370 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2372 return CONNECTION_ERROR_INVALID_PARAMETER;
2375 net_dns_config_type_t *profileType = NULL;
2376 net_dns_config_type_t *profileType6 = NULL;
2377 net_profile_info_t *profile_info = profile;
2379 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2380 if (net_info == NULL) {
2382 return CONNECTION_ERROR_OPERATION_FAILED;
2385 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
2386 profileType = &net_info->DnsConfigType;
2387 net_info->DnsAddr[0].Data.Ipv4.s_addr = 0;
2388 net_info->DnsAddr[1].Data.Ipv4.s_addr = 0;
2389 *profileType = type;
2391 profileType6 = &net_info->DnsConfigType6;
2392 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[0].Data.Ipv6);
2393 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[1].Data.Ipv6);
2394 *profileType6 = type;
2398 return CONNECTION_ERROR_NONE;
2401 EXPORT_API int connection_profile_get_dns_config_type(connection_profile_h profile,
2402 connection_address_family_e address_family, connection_dns_config_type_e *type)
2406 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2407 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2409 if (!(_connection_libnet_check_profile_validity(profile)) ||
2410 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2411 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
2413 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2415 return CONNECTION_ERROR_INVALID_PARAMETER;
2418 net_dns_config_type_t profileType;
2419 net_profile_info_t *profile_info = profile;
2420 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2421 if (net_info == NULL) {
2423 return CONNECTION_ERROR_OPERATION_FAILED;
2426 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
2427 profileType = net_info->DnsConfigType;
2429 profileType = net_info->DnsConfigType6;
2431 switch (profileType) {
2432 case NET_DNS_CONFIG_TYPE_STATIC:
2433 *type = CONNECTION_DNS_CONFIG_TYPE_STATIC;
2435 case NET_DNS_CONFIG_TYPE_DYNAMIC:
2436 *type = CONNECTION_DNS_CONFIG_TYPE_DYNAMIC;
2439 *type = CONNECTION_DNS_CONFIG_TYPE_NONE;
2444 return CONNECTION_ERROR_NONE;
2447 EXPORT_API int connection_profile_set_prefix_length(connection_profile_h profile,
2448 connection_address_family_e address_family, int prefix_len)
2452 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2453 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2455 if (!(_connection_libnet_check_profile_validity(profile)) ||
2456 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2457 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
2458 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2460 return CONNECTION_ERROR_INVALID_PARAMETER;
2463 net_profile_info_t *profile_info = profile;
2464 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2465 if (net_info == NULL) {
2467 return CONNECTION_ERROR_OPERATION_FAILED;
2470 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
2471 net_info->PrefixLen = prefix_len;
2472 net_info->SubnetMask.Data.Ipv4.s_addr = __profile_convert_prefix_len_to_netmask(prefix_len);
2474 net_info->PrefixLen6 = prefix_len;
2477 return CONNECTION_ERROR_NONE;
2480 EXPORT_API int connection_profile_get_prefix_length(connection_profile_h profile,
2481 connection_address_family_e address_family, int *prefix_len)
2485 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2486 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2488 if (!(_connection_libnet_check_profile_validity(profile)) ||
2489 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2490 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
2491 prefix_len == NULL) {
2492 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2494 return CONNECTION_ERROR_INVALID_PARAMETER;
2497 net_profile_info_t *profile_info = profile;
2498 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2499 if (net_info == NULL) {
2501 return CONNECTION_ERROR_OPERATION_FAILED;
2504 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
2505 *prefix_len = net_info->PrefixLen;
2506 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
2507 *prefix_len = net_info->PrefixLen6;
2510 return CONNECTION_ERROR_NONE;