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 bool __profile_ethernet_validate_eap_auth_type(net_dev_info_t *net_info)
54 connection_ethernet_eap_type_e eap_type = net_info->eap.eap_type;
56 if (net_info->use_eapol == false)
59 if (eap_type != CONNECTION_ETHERNET_EAP_TYPE_PEAP &&
60 eap_type != CONNECTION_ETHERNET_EAP_TYPE_TTLS &&
61 eap_type != CONNECTION_ETHERNET_EAP_TYPE_FAST)
67 static bool __profile_ethernet_validate_eap_identity(net_dev_info_t *net_info)
69 connection_ethernet_eap_type_e eap_type = net_info->eap.eap_type;
71 if (net_info->use_eapol == false)
74 if (eap_type != CONNECTION_ETHERNET_EAP_TYPE_MD5 &&
75 eap_type != CONNECTION_ETHERNET_EAP_TYPE_PEAP &&
76 eap_type != CONNECTION_ETHERNET_EAP_TYPE_TLS &&
77 eap_type != CONNECTION_ETHERNET_EAP_TYPE_TTLS &&
78 eap_type != CONNECTION_ETHERNET_EAP_TYPE_FAST)
84 static bool __profile_ethernet_validate_eap_anonymous_identity(net_dev_info_t *net_info)
86 connection_ethernet_eap_type_e eap_type = net_info->eap.eap_type;
88 if (net_info->use_eapol == false)
91 if (eap_type != CONNECTION_ETHERNET_EAP_TYPE_PEAP &&
92 eap_type != CONNECTION_ETHERNET_EAP_TYPE_TTLS &&
93 eap_type != CONNECTION_ETHERNET_EAP_TYPE_FAST)
99 static bool __profile_ethernet_validate_eap_pac_file(net_dev_info_t *net_info)
101 connection_ethernet_eap_type_e eap_type = net_info->eap.eap_type;
103 if (net_info->use_eapol == false)
106 if (eap_type != CONNECTION_ETHERNET_EAP_TYPE_FAST)
112 static bool __profile_ethernet_validate_eap_peap_version(net_dev_info_t *net_info)
114 connection_ethernet_eap_type_e eap_type = net_info->eap.eap_type;
116 if (net_info->use_eapol == false)
119 if (eap_type != CONNECTION_ETHERNET_EAP_TYPE_PEAP)
125 static bool __profile_ethernet_validate_eap_private_key_file(net_dev_info_t *net_info)
127 connection_ethernet_eap_type_e eap_type = net_info->eap.eap_type;
129 if (net_info->use_eapol == false)
132 if (eap_type != CONNECTION_ETHERNET_EAP_TYPE_TLS)
138 static bool __profile_ethernet_validate_eap_client_cert_file(net_dev_info_t *net_info)
140 connection_ethernet_eap_type_e eap_type = net_info->eap.eap_type;
142 if (net_info->use_eapol == false)
145 if (eap_type != CONNECTION_ETHERNET_EAP_TYPE_TLS)
151 static bool __profile_ethernet_validate_eap_ca_cert_file(net_dev_info_t *net_info)
153 connection_ethernet_eap_type_e eap_type = net_info->eap.eap_type;
155 if (net_info->use_eapol == false)
158 if (eap_type != CONNECTION_ETHERNET_EAP_TYPE_PEAP &&
159 eap_type != CONNECTION_ETHERNET_EAP_TYPE_TLS &&
160 eap_type != CONNECTION_ETHERNET_EAP_TYPE_TTLS)
166 static bool __profile_ethernet_validate_eap_passphrase(net_dev_info_t *net_info)
168 connection_ethernet_eap_type_e eap_type = net_info->eap.eap_type;
170 if (net_info->use_eapol == false)
173 if (eap_type != CONNECTION_ETHERNET_EAP_TYPE_MD5 &&
174 eap_type != CONNECTION_ETHERNET_EAP_TYPE_PEAP &&
175 eap_type != CONNECTION_ETHERNET_EAP_TYPE_TTLS &&
176 eap_type != CONNECTION_ETHERNET_EAP_TYPE_FAST)
182 static char *__profile_convert_ip_to_string(net_addr_t *ip_addr, connection_address_family_e address_family)
184 unsigned char *ipaddr = NULL;
187 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
188 ipaddr = (unsigned char *)&ip_addr->Data.Ipv4.s_addr;
189 ipstr = g_try_malloc0(INET_ADDRSTRLEN);
193 inet_ntop(AF_INET, ipaddr, ipstr, INET_ADDRSTRLEN);
196 ipaddr = (unsigned char *)&ip_addr->Data.Ipv6.s6_addr;
197 ipstr = g_try_malloc0(INET6_ADDRSTRLEN);
201 inet_ntop(AF_INET6, ipaddr, ipstr, INET6_ADDRSTRLEN);
208 static void __profile_init_cellular_profile(net_profile_info_t *profile_info, const char *keyword)
210 int default_subscriber_id = 0;
211 connection_profile_h profile = NULL;
213 profile_info->profile_type = NET_DEVICE_CELLULAR;
214 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
215 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_UNKNOWN;
216 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_UNKNOWN;
217 profile_info->ProfileInfo.Pdp.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
218 profile_info->ProfileInfo.Pdp.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
219 g_strlcpy(profile_info->ProfileInfo.Pdp.Keyword, keyword, NET_PDP_APN_LEN_MAX);
221 if (vconf_get_int(VCONF_TELEPHONY_DEFAULT_DATA_SERVICE,
222 &default_subscriber_id) != 0)
223 CONNECTION_LOG(CONNECTION_ERROR, //LCOV_EXCL_LINE
224 "Failed to get VCONF_TELEPHONY_DEFAULT_DATA_SERVICE");
226 profile = (connection_profile_h)profile_info;
227 _connection_libnet_set_cellular_subscriber_id(profile, default_subscriber_id);
230 static void __profile_init_wifi_profile(net_profile_info_t *profile_info)
232 profile_info->profile_type = NET_DEVICE_WIFI;
233 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
234 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
235 profile_info->ProfileInfo.Wlan.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
236 profile_info->ProfileInfo.Wlan.wlan_mode = NETPM_WLAN_CONNMODE_AUTO;
237 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_NONE;
238 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_NONE;
242 static char* __profile_get_ethernet_proxy(void)
246 proxy = vconf_get_str(VCONFKEY_NETWORK_PROXY);
249 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get system proxy");
257 static unsigned char __profile_convert_netmask_to_prefix_len(const char *netmask)
262 in_addr_t mask = inet_network(netmask);
263 in_addr_t host = ~mask;
264 unsigned char prefix_len = 0;
266 /* a valid netmask must be 2^n - 1 */
267 if ((host & (host + 1)) != 0)
270 for (; mask; mask <<= 1)
276 static in_addr_t __profile_convert_prefix_len_to_netmask(int prefix_len)
278 return (prefix_len ? (in_addr_t) 0xFFFFFFFFu >> (32 - prefix_len) : 0);
282 connection_cellular_service_type_e _profile_convert_to_connection_cellular_service_type(net_service_type_t svc_type)
285 case NET_SERVICE_INTERNET:
286 return CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET;
287 case NET_SERVICE_MMS:
288 return CONNECTION_CELLULAR_SERVICE_TYPE_MMS;
289 case NET_SERVICE_PREPAID_INTERNET:
290 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET;
291 case NET_SERVICE_PREPAID_MMS:
292 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS;
293 case NET_SERVICE_TETHERING:
294 return CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING;
295 case NET_SERVICE_APPLICATION:
296 return CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION;
298 return CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
302 connection_profile_state_e _profile_convert_to_cp_state(net_state_type_t state)
304 connection_profile_state_e cp_state;
307 case NET_STATE_TYPE_ONLINE:
308 case NET_STATE_TYPE_READY:
309 cp_state = CONNECTION_PROFILE_STATE_CONNECTED;
311 case NET_STATE_TYPE_IDLE:
312 case NET_STATE_TYPE_FAILURE:
313 case NET_STATE_TYPE_DISCONNECT:
314 cp_state = CONNECTION_PROFILE_STATE_DISCONNECTED;
316 case NET_STATE_TYPE_ASSOCIATION:
317 cp_state = CONNECTION_PROFILE_STATE_ASSOCIATION;
319 case NET_STATE_TYPE_CONFIGURATION:
320 cp_state = CONNECTION_PROFILE_STATE_CONFIGURATION;
329 net_service_type_t _connection_profile_convert_to_libnet_cellular_service_type(connection_cellular_service_type_e svc_type)
332 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
333 return NET_SERVICE_INTERNET;
334 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
335 return NET_SERVICE_MMS;
336 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
337 return NET_SERVICE_PREPAID_INTERNET;
338 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
339 return NET_SERVICE_PREPAID_MMS;
340 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
341 return NET_SERVICE_TETHERING;
342 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
343 return NET_SERVICE_APPLICATION;
345 return NET_SERVICE_UNKNOWN;
349 net_state_type_t _connection_profile_convert_to_net_state(connection_profile_state_e state)
351 net_state_type_t libnet_state = NET_STATE_TYPE_UNKNOWN;
354 case CONNECTION_PROFILE_STATE_CONNECTED:
355 libnet_state = NET_STATE_TYPE_ONLINE;
357 case CONNECTION_PROFILE_STATE_DISCONNECTED:
358 libnet_state = NET_STATE_TYPE_IDLE;
360 case CONNECTION_PROFILE_STATE_ASSOCIATION:
361 libnet_state = NET_STATE_TYPE_ASSOCIATION;
363 case CONNECTION_PROFILE_STATE_CONFIGURATION:
364 libnet_state = NET_STATE_TYPE_CONFIGURATION;
372 /* Connection profile ********************************************************/
373 EXPORT_API int connection_profile_create(connection_profile_type_e type, const char* keyword, connection_profile_h* profile)
377 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
379 if (type == CONNECTION_PROFILE_TYPE_CELLULAR)
380 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
381 else if (type == CONNECTION_PROFILE_TYPE_WIFI)
382 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
384 if (type != CONNECTION_PROFILE_TYPE_CELLULAR &&
385 type != CONNECTION_PROFILE_TYPE_WIFI) {
386 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
388 return CONNECTION_ERROR_INVALID_PARAMETER;
391 if (profile == NULL) {
392 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
394 return CONNECTION_ERROR_INVALID_PARAMETER;
397 int rv = _connection_libnet_check_profile_privilege();
398 if (rv == CONNECTION_ERROR_PERMISSION_DENIED) {
399 CONN_UNLOCK; //LCOV_EXCL_LINE
400 return rv; //LCOV_EXCL_LINE
401 } else if (rv != CONNECTION_ERROR_NONE) {
402 CONNECTION_LOG(CONNECTION_ERROR, "Failed to create profile"); //LCOV_EXCL_LINE
403 CONN_UNLOCK; //LCOV_EXCL_LINE
404 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
407 net_profile_info_t *profile_info = g_try_malloc0(sizeof(net_profile_info_t));
408 if (profile_info == NULL) {
409 CONN_UNLOCK; //LCOV_EXCL_LINE
410 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
413 if (type == CONNECTION_PROFILE_TYPE_CELLULAR) {
414 if (keyword == NULL) {
415 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
416 g_free(profile_info);
418 return CONNECTION_ERROR_INVALID_PARAMETER;
420 __profile_init_cellular_profile(profile_info, keyword);
421 } else if (type == CONNECTION_PROFILE_TYPE_WIFI) {
422 __profile_init_wifi_profile(profile_info);
425 *profile = (connection_profile_h)profile_info;
426 _connection_libnet_add_to_profile_list(*profile);
429 return CONNECTION_ERROR_NONE;
432 EXPORT_API int connection_profile_destroy(connection_profile_h profile)
436 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
438 if (!(_connection_libnet_check_profile_validity(profile))) {
439 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
441 return CONNECTION_ERROR_INVALID_PARAMETER;
444 _connection_libnet_remove_from_profile_list(profile);
447 return CONNECTION_ERROR_NONE;
450 EXPORT_API int connection_profile_clone(connection_profile_h* cloned_profile, connection_profile_h origin_profile)
454 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
456 if (!(_connection_libnet_check_profile_validity(origin_profile)) || cloned_profile == NULL) {
457 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
459 return CONNECTION_ERROR_INVALID_PARAMETER;
462 *cloned_profile = g_try_malloc0(sizeof(net_profile_info_t));
463 if (*cloned_profile == NULL) {
464 CONN_UNLOCK; //LCOV_EXCL_LINE
465 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
468 memcpy(*cloned_profile, origin_profile, sizeof(net_profile_info_t));
469 _connection_libnet_add_to_profile_list(*cloned_profile);
472 return CONNECTION_ERROR_NONE;
475 EXPORT_API int connection_profile_get_id(connection_profile_h profile, char** profile_id)
479 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
481 if (!(_connection_libnet_check_profile_validity(profile)) || profile_id == NULL) {
482 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
484 return CONNECTION_ERROR_INVALID_PARAMETER;
487 net_profile_info_t *profile_info = profile;
489 char *prof_id = strrchr(profile_info->ProfileName, '/');
490 if (prof_id == NULL) {
491 CONN_UNLOCK; //LCOV_EXCL_LINE
492 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
496 *profile_id = g_strdup(prof_id);
498 if (*profile_id == NULL) {
499 CONN_UNLOCK; //LCOV_EXCL_LINE
500 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
504 return CONNECTION_ERROR_NONE;
507 EXPORT_API int connection_profile_get_name(connection_profile_h profile, char** profile_name)
511 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
513 if (!(_connection_libnet_check_profile_validity(profile)) || profile_name == NULL) {
514 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
516 return CONNECTION_ERROR_INVALID_PARAMETER;
519 net_profile_info_t *profile_info = profile;
521 switch (profile_info->profile_type) {
522 case NET_DEVICE_CELLULAR:
523 *profile_name = g_strdup(profile_info->ProfileInfo.Pdp.Keyword);
525 case NET_DEVICE_WIFI:
526 *profile_name = g_strdup(profile_info->ProfileInfo.Wlan.essid);
528 case NET_DEVICE_ETHERNET:
529 *profile_name = g_strdup(profile_info->ProfileInfo.Ethernet.net_info.DevName); //LCOV_EXCL_LINE
530 break; //LCOV_EXCL_LINE
531 case NET_DEVICE_BLUETOOTH: {
532 char *bt_name = strrchr(profile_info->ProfileName, '/');
533 if (bt_name == NULL) {
534 CONN_UNLOCK; //LCOV_EXCL_LINE
535 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
539 *profile_name = g_strdup(bt_name);
541 case NET_DEVICE_MESH:
542 *profile_name = g_strdup(profile_info->ProfileInfo.Mesh.essid);
545 CONN_UNLOCK; //LCOV_EXCL_LINE
546 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
549 if (*profile_name == NULL) {
550 CONN_UNLOCK; //LCOV_EXCL_LINE
551 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
555 return CONNECTION_ERROR_NONE;
558 EXPORT_API int connection_profile_get_type(connection_profile_h profile, connection_profile_type_e *type)
562 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
564 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
565 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
567 return CONNECTION_ERROR_INVALID_PARAMETER;
570 net_profile_info_t *profile_info = profile;
572 switch (profile_info->profile_type) {
573 case NET_DEVICE_CELLULAR:
574 *type = CONNECTION_PROFILE_TYPE_CELLULAR;
576 case NET_DEVICE_WIFI:
577 *type = CONNECTION_PROFILE_TYPE_WIFI;
579 case NET_DEVICE_ETHERNET:
580 *type = CONNECTION_PROFILE_TYPE_ETHERNET; //LCOV_EXCL_LINE
581 break; //LCOV_EXCL_LINE
582 case NET_DEVICE_BLUETOOTH:
583 *type = CONNECTION_PROFILE_TYPE_BT;
585 case NET_DEVICE_MESH:
586 *type = CONNECTION_PROFILE_TYPE_MESH;
589 CONNECTION_LOG(CONNECTION_ERROR, "Invalid profile type"); //LCOV_EXCL_LINE
590 CONN_UNLOCK; //LCOV_EXCL_LINE
591 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
595 return CONNECTION_ERROR_NONE;
598 EXPORT_API int connection_profile_get_network_interface_name(connection_profile_h profile, char** interface_name)
602 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
604 if (!(_connection_libnet_check_profile_validity(profile)) || interface_name == NULL) {
605 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
607 return CONNECTION_ERROR_INVALID_PARAMETER;
610 net_profile_info_t *profile_info = profile;
611 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
612 if (net_info == NULL) {
613 CONN_UNLOCK; //LCOV_EXCL_LINE
614 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
617 *interface_name = g_strdup(net_info->DevName);
618 if (*interface_name == NULL) {
619 CONN_UNLOCK; //LCOV_EXCL_LINE
620 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
624 return CONNECTION_ERROR_NONE;
627 EXPORT_API int connection_profile_refresh(connection_profile_h profile)
633 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
635 if (!(_connection_libnet_check_profile_validity(profile))) {
636 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
638 return CONNECTION_ERROR_INVALID_PARAMETER;
641 net_profile_info_t profile_info_local;
642 net_profile_info_t *profile_info = profile;
644 rv = net_get_profile_info(NULL, profile_info->ProfileName, &profile_info_local);
645 if (rv == NET_ERR_ACCESS_DENIED) {
646 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
647 CONN_UNLOCK; //LCOV_EXCL_LINE
648 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
649 } else if (rv != NET_ERR_NONE) {
650 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get profile information"); //LCOV_EXCL_LINE
651 CONN_UNLOCK; //LCOV_EXCL_LINE
652 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
655 memcpy(profile, &profile_info_local, sizeof(net_profile_info_t));
658 return CONNECTION_ERROR_NONE;
661 EXPORT_API int connection_profile_get_state(connection_profile_h profile, connection_profile_state_e* state)
665 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
667 if (!(_connection_libnet_check_profile_validity(profile)) || state == NULL) {
668 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
670 return CONNECTION_ERROR_INVALID_PARAMETER;
673 net_profile_info_t *profile_info = profile;
674 *state = _profile_convert_to_cp_state(profile_info->ProfileState);
677 return CONNECTION_ERROR_NONE;
680 EXPORT_API int connection_profile_get_internet_state(connection_profile_h profile,
681 connection_internet_state_e *state)
685 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
687 if (!(_connection_libnet_check_profile_validity(profile)) || state == NULL) {
688 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
690 return CONNECTION_ERROR_INVALID_PARAMETER;
693 net_profile_info_t *profile_info = profile;
694 if (profile_info->ProfileState == NET_STATE_TYPE_ONLINE)
695 *state = CONNECTION_INTERNET_STATE_ONLINE;
697 *state = CONNECTION_INTERNET_STATE_OFFLINE;
700 return CONNECTION_ERROR_NONE;
703 EXPORT_API int connection_profile_get_ip_config_type(connection_profile_h profile,
704 connection_address_family_e address_family, connection_ip_config_type_e *type)
706 net_ip_config_type_t profile_type;
710 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
712 if (!(_connection_libnet_check_profile_validity(profile)) ||
713 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
714 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
716 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
718 return CONNECTION_ERROR_INVALID_PARAMETER;
721 net_profile_info_t *profile_info = profile;
722 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
723 if (net_info == NULL) {
724 CONN_UNLOCK; //LCOV_EXCL_LINE
725 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
728 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
729 profile_type = net_info->IpConfigType;
731 profile_type = net_info->IpConfigType6;
733 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
734 switch (profile_type) {
736 case NET_IP_CONFIG_TYPE_STATIC:
737 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
740 case NET_IP_CONFIG_TYPE_DYNAMIC:
741 *type = CONNECTION_IP_CONFIG_TYPE_DYNAMIC;
744 case NET_IP_CONFIG_TYPE_AUTO_IP:
745 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
748 case NET_IP_CONFIG_TYPE_FIXED:
749 *type = CONNECTION_IP_CONFIG_TYPE_FIXED;
752 case NET_IP_CONFIG_TYPE_OFF:
753 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
757 return CONNECTION_ERROR_OPERATION_FAILED;
762 switch (profile_type) {
763 case NET_IP_CONFIG_TYPE_STATIC:
764 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
767 case NET_IP_CONFIG_TYPE_AUTO_IP:
768 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
771 case NET_IP_CONFIG_TYPE_OFF:
772 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
777 return CONNECTION_ERROR_OPERATION_FAILED;
784 return CONNECTION_ERROR_NONE;
787 EXPORT_API int connection_profile_get_ip_address(connection_profile_h profile,
788 connection_address_family_e address_family, char** ip_address)
792 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
794 if (!(_connection_libnet_check_profile_validity(profile)) ||
795 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
796 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
797 ip_address == NULL) {
798 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
800 return CONNECTION_ERROR_INVALID_PARAMETER;
803 net_profile_info_t *profile_info = profile;
804 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
805 if (net_info == NULL) {
806 CONN_UNLOCK; //LCOV_EXCL_LINE
807 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
810 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
811 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr,
814 if (net_get_preferred_ipv6_address(net_info->ProfileName, ip_address) != NET_ERR_NONE) {
815 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get preferred ipv6 address"); //LCOV_EXCL_LINE
816 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr6, //LCOV_EXCL_LINE
821 if (*ip_address == NULL) {
822 CONN_UNLOCK; //LCOV_EXCL_LINE
823 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
827 return CONNECTION_ERROR_NONE;
830 EXPORT_API int connection_profile_get_subnet_mask(connection_profile_h profile,
831 connection_address_family_e address_family, char** subnet_mask)
835 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
837 if (!(_connection_libnet_check_profile_validity(profile)) ||
838 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
839 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
840 subnet_mask == NULL) {
841 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
843 return CONNECTION_ERROR_INVALID_PARAMETER;
846 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
847 CONNECTION_LOG(CONNECTION_ERROR, //LCOV_EXCL_LINE
848 "Please uses connection_profile_get_prefix_length()");
849 CONN_UNLOCK; //LCOV_EXCL_LINE
850 return CONNECTION_ERROR_NOT_SUPPORTED; //LCOV_EXCL_LINE
853 net_profile_info_t *profile_info = profile;
854 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
855 if (net_info == NULL) {
856 CONN_UNLOCK; //LCOV_EXCL_LINE
857 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
860 *subnet_mask = __profile_convert_ip_to_string(&net_info->SubnetMask,
863 if (*subnet_mask == NULL) {
864 CONN_UNLOCK; //LCOV_EXCL_LINE
865 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
869 return CONNECTION_ERROR_NONE;
872 EXPORT_API int connection_profile_get_gateway_address(connection_profile_h profile,
873 connection_address_family_e address_family, char** gateway_address)
877 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
879 if (!(_connection_libnet_check_profile_validity(profile)) ||
880 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
881 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
882 gateway_address == NULL) {
883 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
885 return CONNECTION_ERROR_INVALID_PARAMETER;
888 net_profile_info_t *profile_info = profile;
889 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
890 if (net_info == NULL) {
891 CONN_UNLOCK; //LCOV_EXCL_LINE
892 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
895 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
896 *gateway_address = __profile_convert_ip_to_string(
897 &net_info->GatewayAddr6, address_family);
899 *gateway_address = __profile_convert_ip_to_string(
900 &net_info->GatewayAddr, address_family);
902 if (*gateway_address == NULL) {
903 CONN_UNLOCK; //LCOV_EXCL_LINE
904 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
908 return CONNECTION_ERROR_NONE;
911 EXPORT_API int connection_profile_get_dhcp_server_address(
912 connection_profile_h profile,
913 connection_address_family_e address_family, char** dhcp_server)
917 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
919 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
920 CONNECTION_LOG(CONNECTION_ERROR, "Not supported");
922 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
925 if (!(_connection_libnet_check_profile_validity(profile)) ||
926 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4) ||
927 dhcp_server == NULL) {
928 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
930 return CONNECTION_ERROR_INVALID_PARAMETER;
933 net_profile_info_t *profile_info = profile;
934 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
935 if (net_info == NULL) {
936 CONN_UNLOCK; //LCOV_EXCL_LINE
937 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
940 CONNECTION_LOG(CONNECTION_INFO, "IP Config %d, DHCP Server Address %s",
941 net_info->IpConfigType, (net_info->BServerAddr ? "TRUE" : "FALSE"));
943 *dhcp_server = __profile_convert_ip_to_string(&net_info->ServerAddr,
946 if (*dhcp_server == NULL) {
947 CONN_UNLOCK; //LCOV_EXCL_LINE
948 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
952 return CONNECTION_ERROR_NONE;
955 EXPORT_API int connection_profile_get_dhcp_lease_duration(
956 connection_profile_h profile,
957 connection_address_family_e address_family, int* dhcp_lease_duration)
961 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
963 if (!(_connection_libnet_check_profile_validity(profile)) ||
964 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
965 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
966 dhcp_lease_duration == NULL) {
967 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
969 return CONNECTION_ERROR_INVALID_PARAMETER;
972 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
973 CONNECTION_LOG(CONNECTION_ERROR, "Not supported");
975 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
978 net_profile_info_t *profile_info = profile;
979 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
980 if (net_info == NULL) {
981 CONN_UNLOCK; //LCOV_EXCL_LINE
982 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
985 CONNECTION_LOG(CONNECTION_INFO, "Lease duration : %d",
986 net_info->DHCPLeaseDuration);
988 *dhcp_lease_duration = net_info->DHCPLeaseDuration;
991 return CONNECTION_ERROR_NONE;
994 EXPORT_API int connection_profile_get_dns_address(connection_profile_h profile, int order,
995 connection_address_family_e address_family, char** dns_address)
999 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1001 if (!(_connection_libnet_check_profile_validity(profile)) ||
1002 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1003 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1004 dns_address == NULL ||
1006 order > NET_DNS_ADDR_MAX) {
1007 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1009 return CONNECTION_ERROR_INVALID_PARAMETER;
1012 net_profile_info_t *profile_info = profile;
1013 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1014 if (net_info == NULL) {
1015 CONN_UNLOCK; //LCOV_EXCL_LINE
1016 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1019 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
1020 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr[order-1],
1022 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) //LCOV_EXCL_LINE
1023 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr6[order-1], //LCOV_EXCL_LINE
1026 if (*dns_address == NULL) {
1027 CONN_UNLOCK; //LCOV_EXCL_LINE
1028 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1032 return CONNECTION_ERROR_NONE;
1035 EXPORT_API int connection_profile_get_proxy_type(connection_profile_h profile, connection_proxy_type_e *type)
1039 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1041 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1042 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1044 return CONNECTION_ERROR_INVALID_PARAMETER;
1047 net_profile_info_t *profile_info = profile;
1048 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1049 if (net_info == NULL) {
1050 CONN_UNLOCK; //LCOV_EXCL_LINE
1051 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1055 if (profile_info->profile_type == NET_DEVICE_ETHERNET) {
1056 char *proxy = __profile_get_ethernet_proxy();
1057 if (proxy == NULL) {
1058 *type = CONNECTION_PROXY_TYPE_DIRECT;
1060 *type = CONNECTION_PROXY_TYPE_MANUAL;
1065 return CONNECTION_ERROR_NONE;
1069 switch (net_info->ProxyMethod) {
1071 case NET_PROXY_TYPE_DIRECT:
1072 *type = CONNECTION_PROXY_TYPE_DIRECT;
1074 case NET_PROXY_TYPE_AUTO:
1075 *type = CONNECTION_PROXY_TYPE_AUTO;
1077 case NET_PROXY_TYPE_MANUAL:
1078 *type = CONNECTION_PROXY_TYPE_MANUAL;
1080 case NET_PROXY_TYPE_UNKNOWN:
1083 return CONNECTION_ERROR_OPERATION_FAILED;
1088 return CONNECTION_ERROR_NONE;
1091 EXPORT_API int connection_profile_get_proxy_address(connection_profile_h profile,
1092 connection_address_family_e address_family, char** proxy_address)
1096 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1098 if (!(_connection_libnet_check_profile_validity(profile)) ||
1099 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1100 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1101 proxy_address == NULL) {
1102 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1104 return CONNECTION_ERROR_INVALID_PARAMETER;
1107 net_profile_info_t *profile_info = profile;
1108 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1109 if (net_info == NULL) {
1110 CONN_UNLOCK; //LCOV_EXCL_LINE
1111 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1114 *proxy_address = g_strdup(net_info->ProxyAddr);
1116 if (*proxy_address == NULL) {
1117 CONN_UNLOCK; //LCOV_EXCL_LINE
1118 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1122 return CONNECTION_ERROR_NONE;
1125 EXPORT_API int connection_profile_set_ip_config_type(connection_profile_h profile,
1126 connection_address_family_e address_family, connection_ip_config_type_e type)
1128 net_ip_config_type_t *profile_type = NULL;
1132 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1134 if (!(_connection_libnet_check_profile_validity(profile)) ||
1135 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1136 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1137 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1139 return CONNECTION_ERROR_INVALID_PARAMETER;
1142 net_profile_info_t *profile_info = profile;
1143 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1144 if (net_info == NULL) {
1145 CONN_UNLOCK; //LCOV_EXCL_LINE
1146 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1149 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
1150 profile_type = &net_info->IpConfigType ;
1152 profile_type = &net_info->IpConfigType6 ;
1154 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
1157 case CONNECTION_IP_CONFIG_TYPE_STATIC:
1158 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
1159 net_info->IpAddr.Data.Ipv4.s_addr = 0;
1160 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
1161 net_info->GatewayAddr.Data.Ipv4.s_addr = 0 ;
1164 case CONNECTION_IP_CONFIG_TYPE_DYNAMIC:
1165 *profile_type = NET_IP_CONFIG_TYPE_DYNAMIC;
1168 case CONNECTION_IP_CONFIG_TYPE_AUTO:
1169 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
1172 case CONNECTION_IP_CONFIG_TYPE_FIXED:
1173 net_info->IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
1176 case CONNECTION_IP_CONFIG_TYPE_NONE:
1177 *profile_type = NET_IP_CONFIG_TYPE_OFF;
1182 return CONNECTION_ERROR_INVALID_PARAMETER;
1188 case CONNECTION_IP_CONFIG_TYPE_STATIC:
1189 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
1190 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
1191 net_info->PrefixLen6 = 0 ;
1192 inet_pton(AF_INET6, "::",
1193 &net_info->GatewayAddr6.Data.Ipv6);
1196 case CONNECTION_IP_CONFIG_TYPE_AUTO:
1197 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
1200 case CONNECTION_IP_CONFIG_TYPE_NONE:
1201 *profile_type = NET_IP_CONFIG_TYPE_OFF;
1206 return CONNECTION_ERROR_INVALID_PARAMETER;
1212 return CONNECTION_ERROR_NONE;
1215 EXPORT_API int connection_profile_set_ip_address(connection_profile_h profile,
1216 connection_address_family_e address_family, const char* ip_address)
1220 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1222 if (!(_connection_libnet_check_profile_validity(profile)) ||
1223 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1224 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1225 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1227 return CONNECTION_ERROR_INVALID_PARAMETER;
1230 net_profile_info_t *profile_info = profile;
1231 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1232 if (net_info == NULL) {
1233 CONN_UNLOCK; //LCOV_EXCL_LINE
1234 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1237 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1239 if (ip_address == NULL)
1240 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
1241 else if (inet_pton(AF_INET6, ip_address, &net_info->IpAddr6.Data.Ipv6) < 1) {
1243 return CONNECTION_ERROR_INVALID_PARAMETER;
1247 if (ip_address == NULL)
1248 net_info->IpAddr.Data.Ipv4.s_addr = 0;
1249 else if (inet_pton(AF_INET, ip_address, &net_info->IpAddr.Data.Ipv4) < 1) {
1250 CONN_UNLOCK; //LCOV_EXCL_LINE
1251 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1256 return CONNECTION_ERROR_NONE;
1259 EXPORT_API int connection_profile_set_subnet_mask(connection_profile_h profile,
1260 connection_address_family_e address_family, const char* subnet_mask)
1264 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1266 if (!(_connection_libnet_check_profile_validity(profile)) ||
1267 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1268 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1269 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1271 return CONNECTION_ERROR_INVALID_PARAMETER;
1274 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1275 CONNECTION_LOG(CONNECTION_ERROR, //LCOV_EXCL_LINE
1276 "Please uses connection_profile_set_prefix_length()");
1277 CONN_UNLOCK; //LCOV_EXCL_LINE
1278 return CONNECTION_ERROR_NOT_SUPPORTED; //LCOV_EXCL_LINE
1281 net_profile_info_t *profile_info = profile;
1282 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1283 if (net_info == NULL) {
1284 CONN_UNLOCK; //LCOV_EXCL_LINE
1285 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1288 if (subnet_mask == NULL)
1289 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
1290 else if (inet_pton(AF_INET, subnet_mask , &net_info->SubnetMask.Data.Ipv4) < 1) {
1291 CONN_UNLOCK; //LCOV_EXCL_LINE
1292 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1295 net_info->PrefixLen = __profile_convert_netmask_to_prefix_len(subnet_mask);
1296 if (net_info->PrefixLen <= 0 || net_info->PrefixLen > 31) {
1297 CONNECTION_LOG(CONNECTION_ERROR, "Invalid Prefix length: %d", net_info->PrefixLen); //LCOV_EXCL_LINE
1298 CONN_UNLOCK; //LCOV_EXCL_LINE
1299 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1303 return CONNECTION_ERROR_NONE;
1306 EXPORT_API int connection_profile_set_gateway_address(connection_profile_h profile,
1307 connection_address_family_e address_family, const char* gateway_address)
1311 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1313 if (!(_connection_libnet_check_profile_validity(profile)) ||
1314 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1315 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1316 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1318 return CONNECTION_ERROR_INVALID_PARAMETER;
1321 net_profile_info_t *profile_info = profile;
1322 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1323 if (net_info == NULL) {
1324 CONN_UNLOCK; //LCOV_EXCL_LINE
1325 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1328 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1330 if (gateway_address == NULL)
1331 inet_pton(AF_INET6, "::", &net_info->GatewayAddr6.Data.Ipv6);
1332 else if (inet_pton(AF_INET6, gateway_address, &net_info->GatewayAddr6.Data.Ipv6) < 1) {
1334 return CONNECTION_ERROR_INVALID_PARAMETER;
1338 if (gateway_address == NULL)
1339 net_info->GatewayAddr.Data.Ipv4.s_addr = 0;
1340 else if (inet_pton(AF_INET, gateway_address, &(net_info->GatewayAddr.Data.Ipv4)) < 1) {
1341 CONN_UNLOCK; //LCOV_EXCL_LINE
1342 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1347 return CONNECTION_ERROR_NONE;
1350 EXPORT_API int connection_profile_set_dns_address(connection_profile_h profile, int order,
1351 connection_address_family_e address_family, const char* dns_address)
1355 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1357 if (!(_connection_libnet_check_profile_validity(profile)) ||
1358 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1359 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1361 order > NET_DNS_ADDR_MAX) {
1362 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1364 return CONNECTION_ERROR_INVALID_PARAMETER;
1367 net_profile_info_t *profile_info = profile;
1368 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1369 if (net_info == NULL) {
1370 CONN_UNLOCK; //LCOV_EXCL_LINE
1371 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1374 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1376 net_info->DnsAddr6[order-1].Type = NET_ADDR_IPV6;
1377 if (dns_address == NULL)
1378 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[order-1].Data.Ipv6);
1379 else if (inet_pton(AF_INET6, dns_address, &net_info->DnsAddr6[order-1].Data.Ipv6) < 1) {
1381 return CONNECTION_ERROR_INVALID_PARAMETER;
1383 if (net_info->DnsCount6 < order)
1384 net_info->DnsCount6 = order;
1387 net_info->DnsAddr[order-1].Type = NET_ADDR_IPV4;
1388 if (dns_address == NULL)
1389 net_info->DnsAddr[order-1].Data.Ipv4.s_addr = 0;
1390 else if (inet_pton(AF_INET, dns_address, &(net_info->DnsAddr[order-1].Data.Ipv4)) < 1) {
1391 CONN_UNLOCK; //LCOV_EXCL_LINE
1392 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1394 if (net_info->DnsCount < order)
1395 net_info->DnsCount = order;
1399 return CONNECTION_ERROR_NONE;
1402 EXPORT_API int connection_profile_set_proxy_type(connection_profile_h profile, connection_proxy_type_e type)
1406 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1408 if (!(_connection_libnet_check_profile_validity(profile))) {
1409 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1411 return CONNECTION_ERROR_INVALID_PARAMETER;
1414 net_profile_info_t *profile_info = profile;
1415 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1416 if (net_info == NULL) {
1417 CONN_UNLOCK; //LCOV_EXCL_LINE
1418 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1423 case CONNECTION_PROXY_TYPE_DIRECT:
1424 net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
1426 case CONNECTION_PROXY_TYPE_AUTO:
1427 net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
1429 case CONNECTION_PROXY_TYPE_MANUAL:
1430 net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
1434 return CONNECTION_ERROR_INVALID_PARAMETER;
1439 return CONNECTION_ERROR_NONE;
1442 EXPORT_API int connection_profile_set_proxy_address(connection_profile_h profile,
1443 connection_address_family_e address_family, const char* proxy_address)
1445 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1447 CONNECTION_LOG(CONNECTION_ERROR, "Address Family: %d", address_family);
1448 if (!(_connection_libnet_check_profile_validity(profile)) ||
1449 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1450 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1451 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1453 return CONNECTION_ERROR_INVALID_PARAMETER;
1456 net_profile_info_t *profile_info = profile;
1457 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1458 if (net_info == NULL) {
1459 CONN_UNLOCK; //LCOV_EXCL_LINE
1460 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1463 if (proxy_address == NULL)
1464 net_info->ProxyAddr[0] = '\0';
1466 g_strlcpy(net_info->ProxyAddr, proxy_address, NET_PROXY_LEN_MAX);
1469 return CONNECTION_ERROR_NONE;
1472 EXPORT_API int connection_profile_set_state_changed_cb(connection_profile_h profile,
1473 connection_profile_state_changed_cb callback, void* user_data)
1477 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1479 if (!(_connection_libnet_check_profile_validity(profile)) || callback == NULL) {
1480 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1482 return CONNECTION_ERROR_INVALID_PARAMETER;
1485 if (_connection_libnet_add_to_profile_cb_list(profile, callback, user_data)) {
1487 return CONNECTION_ERROR_NONE;
1490 CONN_UNLOCK; //LCOV_EXCL_LINE
1491 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1494 EXPORT_API int connection_profile_unset_state_changed_cb(connection_profile_h profile)
1498 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1500 if (!(_connection_libnet_check_profile_validity(profile))) {
1501 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1503 return CONNECTION_ERROR_INVALID_PARAMETER;
1506 if (_connection_libnet_remove_from_profile_cb_list(profile) != true) {
1507 CONN_UNLOCK; //LCOV_EXCL_LINE
1508 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1512 return CONNECTION_ERROR_NONE;
1516 /* Wi-Fi profile *************************************************************/
1517 EXPORT_API int connection_profile_get_wifi_essid(connection_profile_h profile, char** essid)
1521 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1523 if (!(_connection_libnet_check_profile_validity(profile)) || essid == NULL) {
1524 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1526 return CONNECTION_ERROR_INVALID_PARAMETER;
1529 net_profile_info_t *profile_info = profile;
1531 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1532 profile_info->profile_type != NET_DEVICE_MESH) {
1534 return CONNECTION_ERROR_INVALID_PARAMETER;
1537 if (profile_info->profile_type == NET_DEVICE_WIFI)
1538 *essid = g_strdup(profile_info->ProfileInfo.Wlan.essid);
1540 *essid = g_strdup(profile_info->ProfileInfo.Mesh.essid);
1542 if (*essid == NULL) {
1543 CONN_UNLOCK; //LCOV_EXCL_LINE
1544 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1548 return CONNECTION_ERROR_NONE;
1551 EXPORT_API int connection_profile_get_wifi_bssid(connection_profile_h profile, char** bssid)
1555 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1557 if (!(_connection_libnet_check_profile_validity(profile)) || bssid == NULL) {
1558 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1560 return CONNECTION_ERROR_INVALID_PARAMETER;
1563 net_profile_info_t *profile_info = profile;
1565 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1566 profile_info->profile_type != NET_DEVICE_MESH) {
1568 return CONNECTION_ERROR_INVALID_PARAMETER;
1571 if (profile_info->profile_type == NET_DEVICE_WIFI)
1572 *bssid = g_strdup(profile_info->ProfileInfo.Wlan.bssid);
1574 *bssid = g_strdup(profile_info->ProfileInfo.Mesh.bssid);
1576 if (*bssid == NULL) {
1577 CONN_UNLOCK; //LCOV_EXCL_LINE
1578 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1582 return CONNECTION_ERROR_NONE;
1585 EXPORT_API int connection_profile_get_wifi_rssi(connection_profile_h profile, int* rssi)
1589 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1591 if (!(_connection_libnet_check_profile_validity(profile)) || rssi == NULL) {
1592 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1594 return CONNECTION_ERROR_INVALID_PARAMETER;
1597 net_profile_info_t *profile_info = profile;
1599 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1600 profile_info->profile_type != NET_DEVICE_MESH) {
1602 return CONNECTION_ERROR_INVALID_PARAMETER;
1605 if (profile_info->profile_type == NET_DEVICE_WIFI)
1606 *rssi = (int)profile_info->ProfileInfo.Wlan.Strength;
1608 *rssi = (int)profile_info->ProfileInfo.Mesh.Strength;
1611 return CONNECTION_ERROR_NONE;
1614 EXPORT_API int connection_profile_get_wifi_frequency(connection_profile_h profile, int* frequency)
1618 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1620 if (!(_connection_libnet_check_profile_validity(profile)) || frequency == NULL) {
1621 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1623 return CONNECTION_ERROR_INVALID_PARAMETER;
1626 net_profile_info_t *profile_info = profile;
1628 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1629 profile_info->profile_type != NET_DEVICE_MESH) {
1631 return CONNECTION_ERROR_INVALID_PARAMETER;
1634 if (profile_info->profile_type == NET_DEVICE_WIFI)
1635 *frequency = (int)profile_info->ProfileInfo.Wlan.frequency;
1637 *frequency = (int)profile_info->ProfileInfo.Mesh.frequency;
1640 return CONNECTION_ERROR_NONE;
1643 EXPORT_API int connection_profile_get_wifi_max_speed(connection_profile_h profile, int* max_speed)
1647 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1649 if (!(_connection_libnet_check_profile_validity(profile)) || max_speed == NULL) {
1650 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1652 return CONNECTION_ERROR_INVALID_PARAMETER;
1655 net_profile_info_t *profile_info = profile;
1657 if (profile_info->profile_type != NET_DEVICE_WIFI) {
1659 return CONNECTION_ERROR_INVALID_PARAMETER;
1662 *max_speed = profile_info->ProfileInfo.Wlan.max_rate;
1665 return CONNECTION_ERROR_NONE;
1668 EXPORT_API int connection_profile_get_wifi_security_type(connection_profile_h profile, connection_wifi_security_type_e *type)
1672 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1674 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1675 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1677 return CONNECTION_ERROR_INVALID_PARAMETER;
1680 net_profile_info_t *profile_info = profile;
1682 wlan_security_mode_type_t sec_mode;
1683 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1684 profile_info->profile_type != NET_DEVICE_MESH) {
1686 return CONNECTION_ERROR_INVALID_PARAMETER;
1689 if (profile_info->profile_type == NET_DEVICE_WIFI)
1690 sec_mode = profile_info->ProfileInfo.Wlan.security_info.sec_mode;
1692 sec_mode = profile_info->ProfileInfo.Mesh.security_info.sec_mode;
1696 case WLAN_SEC_MODE_NONE:
1697 *type = CONNECTION_WIFI_SECURITY_TYPE_NONE;
1699 case WLAN_SEC_MODE_WEP:
1700 *type = CONNECTION_WIFI_SECURITY_TYPE_WEP;
1702 case WLAN_SEC_MODE_IEEE8021X:
1703 *type = CONNECTION_WIFI_SECURITY_TYPE_EAP;
1705 case WLAN_SEC_MODE_WPA_PSK:
1706 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA_PSK;
1708 case WLAN_SEC_MODE_WPA2_PSK:
1709 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA2_PSK;
1711 case WLAN_SEC_MODE_SAE:
1712 *type = CONNECTION_WIFI_SECURITY_TYPE_SAE;
1716 return CONNECTION_ERROR_OPERATION_FAILED;
1721 return CONNECTION_ERROR_NONE;
1724 EXPORT_API int connection_profile_get_wifi_encryption_type(connection_profile_h profile, connection_wifi_encryption_type_e *type)
1728 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1730 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1731 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1733 return CONNECTION_ERROR_INVALID_PARAMETER;
1736 net_profile_info_t *profile_info = profile;
1738 if (profile_info->profile_type != NET_DEVICE_WIFI) {
1740 return CONNECTION_ERROR_INVALID_PARAMETER;
1743 switch (profile_info->ProfileInfo.Wlan.security_info.enc_mode) {
1745 case WLAN_ENC_MODE_NONE:
1746 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_NONE;
1748 case WLAN_ENC_MODE_WEP:
1749 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_WEP;
1751 case WLAN_ENC_MODE_TKIP:
1752 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP;
1754 case WLAN_ENC_MODE_AES:
1755 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_AES;
1757 case WLAN_ENC_MODE_TKIP_AES_MIXED:
1758 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP_AES_MIXED;
1762 return CONNECTION_ERROR_OPERATION_FAILED;
1767 return CONNECTION_ERROR_NONE;
1770 EXPORT_API int connection_profile_is_wifi_passphrase_required(connection_profile_h profile, bool* required)
1774 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1776 if (!(_connection_libnet_check_profile_validity(profile)) || required == NULL) {
1777 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1779 return CONNECTION_ERROR_INVALID_PARAMETER;
1782 net_profile_info_t *profile_info = profile;
1784 wlan_security_mode_type_t sec_mode;
1785 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1786 profile_info->profile_type != NET_DEVICE_MESH) {
1788 return CONNECTION_ERROR_INVALID_PARAMETER;
1791 if (profile_info->Favourite) {
1792 *required = false; //LCOV_EXCL_LINE
1793 CONN_UNLOCK; //LCOV_EXCL_LINE
1794 return CONNECTION_ERROR_NONE; //LCOV_EXCL_LINE
1797 if (profile_info->profile_type == NET_DEVICE_WIFI)
1798 sec_mode = profile_info->ProfileInfo.Wlan.security_info.sec_mode;
1800 sec_mode = profile_info->ProfileInfo.Mesh.security_info.sec_mode;
1804 case WLAN_SEC_MODE_NONE:
1807 case WLAN_SEC_MODE_WEP:
1808 case WLAN_SEC_MODE_IEEE8021X:
1809 case WLAN_SEC_MODE_WPA_PSK:
1810 case WLAN_SEC_MODE_WPA2_PSK:
1811 case WLAN_SEC_MODE_SAE:
1816 return CONNECTION_ERROR_OPERATION_FAILED;
1821 return CONNECTION_ERROR_NONE;
1824 EXPORT_API int connection_profile_set_wifi_passphrase(connection_profile_h profile, const char* passphrase)
1828 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1830 if (!(_connection_libnet_check_profile_validity(profile)) || passphrase == NULL) {
1831 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1833 return CONNECTION_ERROR_INVALID_PARAMETER;
1836 net_profile_info_t *profile_info = profile;
1838 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1839 profile_info->profile_type != NET_DEVICE_MESH) {
1841 return CONNECTION_ERROR_INVALID_PARAMETER;
1844 if (profile_info->profile_type == NET_DEVICE_WIFI)
1845 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.psk.pskKey,
1846 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1848 g_strlcpy(profile_info->ProfileInfo.Mesh.security_info.authentication.sae.saeKey,
1849 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1852 return CONNECTION_ERROR_NONE;
1855 EXPORT_API int connection_profile_is_wifi_wps_supported(connection_profile_h profile, bool* supported)
1859 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1861 if (!(_connection_libnet_check_profile_validity(profile)) || supported == NULL) {
1862 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1864 return CONNECTION_ERROR_INVALID_PARAMETER;
1867 net_profile_info_t *profile_info = profile;
1869 if (profile_info->profile_type != NET_DEVICE_WIFI) {
1871 return CONNECTION_ERROR_INVALID_PARAMETER;
1874 if (profile_info->ProfileInfo.Wlan.security_info.wps_support)
1880 return CONNECTION_ERROR_NONE;
1884 /* Cellular profile **********************************************************/
1885 EXPORT_API int connection_profile_get_cellular_service_type(connection_profile_h profile,
1886 connection_cellular_service_type_e* type)
1890 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1892 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1893 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1895 return CONNECTION_ERROR_INVALID_PARAMETER;
1898 net_profile_info_t *profile_info = profile;
1900 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1901 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1903 return CONNECTION_ERROR_INVALID_PARAMETER;
1906 *type = _profile_convert_to_connection_cellular_service_type(profile_info->ProfileInfo.Pdp.ServiceType);
1908 if (*type == CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN) {
1909 CONNECTION_LOG(CONNECTION_ERROR, "Invalid service type Passed"); //LCOV_EXCL_LINE
1910 CONN_UNLOCK; //LCOV_EXCL_LINE
1911 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1915 return CONNECTION_ERROR_NONE;
1918 EXPORT_API int connection_profile_get_cellular_apn(connection_profile_h profile, char** apn)
1922 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1924 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1925 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1927 return CONNECTION_ERROR_INVALID_PARAMETER;
1930 net_profile_info_t *profile_info = profile;
1932 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1933 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1934 CONN_UNLOCK; //LCOV_EXCL_LINE
1935 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1938 *apn = g_strdup(profile_info->ProfileInfo.Pdp.Apn);
1940 CONN_UNLOCK; //LCOV_EXCL_LINE
1941 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1945 return CONNECTION_ERROR_NONE;
1948 EXPORT_API int connection_profile_get_cellular_auth_info(connection_profile_h profile,
1949 connection_cellular_auth_type_e *type, char** user_name, char** password)
1953 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1955 if (!(_connection_libnet_check_profile_validity(profile)) ||
1956 type == NULL || user_name == NULL || password == NULL) {
1957 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1959 return CONNECTION_ERROR_INVALID_PARAMETER;
1962 net_profile_info_t *profile_info = profile;
1964 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1965 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1967 return CONNECTION_ERROR_INVALID_PARAMETER;
1970 switch (profile_info->ProfileInfo.Pdp.AuthInfo.AuthType) {
1972 case NET_PDP_AUTH_NONE:
1973 *type = CONNECTION_CELLULAR_AUTH_TYPE_NONE;
1975 case NET_PDP_AUTH_PAP:
1976 *type = CONNECTION_CELLULAR_AUTH_TYPE_PAP;
1978 case NET_PDP_AUTH_CHAP:
1979 *type = CONNECTION_CELLULAR_AUTH_TYPE_CHAP;
1983 return CONNECTION_ERROR_OPERATION_FAILED;
1987 *user_name = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.UserName);
1988 if (*user_name == NULL) {
1989 CONN_UNLOCK; //LCOV_EXCL_LINE
1990 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1993 *password = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.Password);
1994 if (*password == NULL) {
1995 g_free(*user_name); //LCOV_EXCL_LINE
1996 CONN_UNLOCK; //LCOV_EXCL_LINE
1997 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2001 return CONNECTION_ERROR_NONE;
2004 EXPORT_API int connection_profile_get_cellular_home_url(connection_profile_h profile, char** home_url)
2008 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2010 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
2011 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2013 return CONNECTION_ERROR_INVALID_PARAMETER;
2016 net_profile_info_t *profile_info = profile;
2018 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2019 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2021 return CONNECTION_ERROR_INVALID_PARAMETER;
2024 *home_url = g_strdup(profile_info->ProfileInfo.Pdp.HomeURL);
2025 if (*home_url == NULL) {
2026 CONN_UNLOCK; //LCOV_EXCL_LINE
2027 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2031 return CONNECTION_ERROR_NONE;
2034 EXPORT_API int connection_profile_get_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
2038 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2040 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
2041 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2043 return CONNECTION_ERROR_INVALID_PARAMETER;
2046 net_profile_info_t *profile_info = profile;
2048 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2049 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2051 return CONNECTION_ERROR_INVALID_PARAMETER;
2054 switch (profile_info->ProfileInfo.Pdp.PdnType) {
2056 case NET_PDN_TYPE_UNKNOWN:
2057 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
2059 case NET_PDN_TYPE_IPV4:
2060 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
2062 case NET_PDN_TYPE_IPV6:
2063 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
2065 case NET_PDN_TYPE_IPV4_IPV6:
2066 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
2070 return CONNECTION_ERROR_OPERATION_FAILED;
2075 return CONNECTION_ERROR_NONE;
2078 EXPORT_API int connection_profile_get_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
2082 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2084 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
2085 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2087 return CONNECTION_ERROR_INVALID_PARAMETER;
2090 net_profile_info_t *profile_info = profile;
2092 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2093 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2095 return CONNECTION_ERROR_INVALID_PARAMETER;
2098 switch (profile_info->ProfileInfo.Pdp.RoamPdnType) {
2100 case NET_PDN_TYPE_UNKNOWN:
2101 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
2103 case NET_PDN_TYPE_IPV4:
2104 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
2106 case NET_PDN_TYPE_IPV6:
2107 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
2109 case NET_PDN_TYPE_IPV4_IPV6:
2110 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
2114 return CONNECTION_ERROR_OPERATION_FAILED;
2119 return CONNECTION_ERROR_NONE;
2122 EXPORT_API int connection_profile_is_cellular_roaming(connection_profile_h profile, bool* is_roaming)
2126 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2128 if (!(_connection_libnet_check_profile_validity(profile)) || is_roaming == NULL) {
2129 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2131 return CONNECTION_ERROR_INVALID_PARAMETER;
2134 net_profile_info_t *profile_info = profile;
2136 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2137 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2139 return CONNECTION_ERROR_INVALID_PARAMETER;
2142 if (profile_info->ProfileInfo.Pdp.Roaming)
2145 *is_roaming = false;
2148 return CONNECTION_ERROR_NONE;
2151 EXPORT_API int connection_profile_is_cellular_hidden(connection_profile_h profile, bool* is_hidden)
2155 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2157 if (!(_connection_libnet_check_profile_validity(profile)) || is_hidden == NULL) {
2158 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2160 return CONNECTION_ERROR_INVALID_PARAMETER;
2163 net_profile_info_t *profile_info = profile;
2165 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2166 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2168 return CONNECTION_ERROR_INVALID_PARAMETER;
2171 if (profile_info->ProfileInfo.Pdp.Hidden)
2177 return CONNECTION_ERROR_NONE;
2180 EXPORT_API int connection_profile_is_cellular_editable(connection_profile_h profile, bool* is_editable)
2184 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2186 if (!(_connection_libnet_check_profile_validity(profile)) || is_editable == NULL) {
2187 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2189 return CONNECTION_ERROR_INVALID_PARAMETER;
2192 net_profile_info_t *profile_info = profile;
2194 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2195 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2197 return CONNECTION_ERROR_INVALID_PARAMETER;
2200 if (profile_info->ProfileInfo.Pdp.Editable)
2201 *is_editable = true;
2203 *is_editable = false;
2206 return CONNECTION_ERROR_NONE;
2209 EXPORT_API int connection_profile_is_cellular_default(connection_profile_h profile, bool* is_default)
2213 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2215 if (!(_connection_libnet_check_profile_validity(profile)) || is_default == 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 if (profile_info->ProfileInfo.Pdp.DefaultConn)
2232 *is_default = false;
2235 return CONNECTION_ERROR_NONE;
2238 EXPORT_API int connection_profile_set_cellular_service_type(connection_profile_h profile,
2239 connection_cellular_service_type_e service_type)
2243 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2245 if (!(_connection_libnet_check_profile_validity(profile))) {
2246 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2248 return CONNECTION_ERROR_INVALID_PARAMETER;
2251 net_profile_info_t *profile_info = profile;
2253 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2254 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2256 return CONNECTION_ERROR_INVALID_PARAMETER;
2259 switch (service_type) {
2261 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
2262 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_INTERNET;
2264 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
2265 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_MMS;
2267 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
2268 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_INTERNET;
2270 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
2271 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_MMS;
2273 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
2274 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_TETHERING;
2276 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
2277 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_APPLICATION;
2279 case CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN:
2282 return CONNECTION_ERROR_INVALID_PARAMETER;
2287 return CONNECTION_ERROR_NONE;
2290 EXPORT_API int connection_profile_set_cellular_apn(connection_profile_h profile, const char* apn)
2294 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2296 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
2297 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2299 return CONNECTION_ERROR_INVALID_PARAMETER;
2302 net_profile_info_t *profile_info = profile;
2304 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2305 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2307 return CONNECTION_ERROR_INVALID_PARAMETER;
2310 g_strlcpy(profile_info->ProfileInfo.Pdp.Apn, apn, NET_PDP_APN_LEN_MAX+1);
2313 return CONNECTION_ERROR_NONE;
2316 EXPORT_API int connection_profile_set_cellular_auth_info(connection_profile_h profile,
2317 connection_cellular_auth_type_e type, const char* user_name, const char* password)
2321 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2323 if (!(_connection_libnet_check_profile_validity(profile)) ||
2324 user_name == NULL || password == NULL) {
2325 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2327 return CONNECTION_ERROR_INVALID_PARAMETER;
2330 net_profile_info_t *profile_info = profile;
2332 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2333 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2335 return CONNECTION_ERROR_INVALID_PARAMETER;
2340 case CONNECTION_CELLULAR_AUTH_TYPE_NONE:
2341 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_NONE;
2343 case CONNECTION_CELLULAR_AUTH_TYPE_PAP:
2344 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_PAP;
2346 case CONNECTION_CELLULAR_AUTH_TYPE_CHAP:
2347 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_CHAP;
2351 return CONNECTION_ERROR_INVALID_PARAMETER;
2355 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.UserName, user_name, NET_PDP_AUTH_USERNAME_LEN_MAX+1);
2356 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.Password, password, NET_PDP_AUTH_PASSWORD_LEN_MAX+1);
2359 return CONNECTION_ERROR_NONE;
2362 EXPORT_API int connection_profile_set_cellular_home_url(connection_profile_h profile, const char* home_url)
2366 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2368 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
2369 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2371 return CONNECTION_ERROR_INVALID_PARAMETER;
2374 net_profile_info_t *profile_info = profile;
2376 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2377 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2379 return CONNECTION_ERROR_INVALID_PARAMETER;
2382 g_strlcpy(profile_info->ProfileInfo.Pdp.HomeURL, home_url, NET_HOME_URL_LEN_MAX);
2385 return CONNECTION_ERROR_NONE;
2388 EXPORT_API int connection_profile_set_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
2392 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2394 if (!(_connection_libnet_check_profile_validity(profile))) {
2395 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2397 return CONNECTION_ERROR_INVALID_PARAMETER;
2400 net_profile_info_t *profile_info = profile;
2402 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2403 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2405 return CONNECTION_ERROR_INVALID_PARAMETER;
2410 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
2411 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4;
2413 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
2414 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV6;
2416 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
2417 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4_IPV6;
2418 CONNECTION_LOG(CONNECTION_WARN, "DEPRECATION WARNINIG: CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6 " \
2419 "from next release. Use CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6 instead");
2421 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6:
2422 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4_IPV6;
2426 return CONNECTION_ERROR_INVALID_PARAMETER;
2431 return CONNECTION_ERROR_NONE;
2434 EXPORT_API int connection_profile_set_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
2438 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2440 if (!(_connection_libnet_check_profile_validity(profile))) {
2441 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2443 return CONNECTION_ERROR_INVALID_PARAMETER;
2446 net_profile_info_t *profile_info = profile;
2448 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2449 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2451 return CONNECTION_ERROR_INVALID_PARAMETER;
2456 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
2457 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4;
2459 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
2460 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV6;
2462 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
2463 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4_IPV6;
2464 CONNECTION_LOG(CONNECTION_WARN, "DEPRECATION WARNINIG: CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6 " \
2465 "from next release. Use CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6 instead");
2467 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6:
2468 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4_IPV6;
2472 return CONNECTION_ERROR_INVALID_PARAMETER;
2477 return CONNECTION_ERROR_NONE;
2480 EXPORT_API int connection_profile_get_ipv6_state(connection_profile_h profile, connection_profile_state_e *state)
2484 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2485 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2487 if (!(_connection_libnet_check_profile_validity(profile)) ||
2489 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2491 return CONNECTION_ERROR_INVALID_PARAMETER;
2494 net_profile_info_t *profile_info = profile;
2495 *state = _profile_convert_to_cp_state(profile_info->ProfileState6);
2498 return CONNECTION_ERROR_NONE;
2501 EXPORT_API int connection_profile_set_dns_config_type(connection_profile_h profile,
2502 connection_address_family_e address_family, connection_dns_config_type_e type)
2506 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2507 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2509 if (!(_connection_libnet_check_profile_validity(profile))) {
2510 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2512 return CONNECTION_ERROR_INVALID_PARAMETER;
2515 if ((address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2516 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
2517 (type != CONNECTION_DNS_CONFIG_TYPE_STATIC &&
2518 type != CONNECTION_DNS_CONFIG_TYPE_DYNAMIC)) {
2519 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
2520 CONN_UNLOCK; //LCOV_EXCL_LINE
2521 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
2524 net_dns_config_type_t *profileType = NULL;
2525 net_dns_config_type_t *profileType6 = NULL;
2526 net_profile_info_t *profile_info = profile;
2528 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2529 if (net_info == NULL) {
2530 CONN_UNLOCK; //LCOV_EXCL_LINE
2531 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
2534 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
2535 profileType = &net_info->DnsConfigType;
2536 net_info->DnsAddr[0].Data.Ipv4.s_addr = 0;
2537 net_info->DnsAddr[1].Data.Ipv4.s_addr = 0;
2538 *profileType = type;
2540 profileType6 = &net_info->DnsConfigType6;
2541 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[0].Data.Ipv6);
2542 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[1].Data.Ipv6);
2543 *profileType6 = type;
2547 return CONNECTION_ERROR_NONE;
2550 EXPORT_API int connection_profile_get_dns_config_type(connection_profile_h profile,
2551 connection_address_family_e address_family, connection_dns_config_type_e *type)
2555 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2556 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2558 if (!(_connection_libnet_check_profile_validity(profile)) ||
2559 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2560 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
2562 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2564 return CONNECTION_ERROR_INVALID_PARAMETER;
2567 net_dns_config_type_t profileType;
2568 net_profile_info_t *profile_info = profile;
2569 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2570 if (net_info == NULL) {
2571 CONN_UNLOCK; //LCOV_EXCL_LINE
2572 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
2575 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
2576 profileType = net_info->DnsConfigType;
2578 profileType = net_info->DnsConfigType6;
2580 switch (profileType) {
2581 case NET_DNS_CONFIG_TYPE_STATIC:
2582 *type = CONNECTION_DNS_CONFIG_TYPE_STATIC;
2584 case NET_DNS_CONFIG_TYPE_DYNAMIC:
2585 *type = CONNECTION_DNS_CONFIG_TYPE_DYNAMIC;
2588 *type = CONNECTION_DNS_CONFIG_TYPE_NONE;
2593 return CONNECTION_ERROR_NONE;
2596 EXPORT_API int connection_profile_set_prefix_length(connection_profile_h profile,
2597 connection_address_family_e address_family, int prefix_len)
2601 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2602 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2604 if (!(_connection_libnet_check_profile_validity(profile)) ||
2605 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2606 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
2607 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2609 return CONNECTION_ERROR_INVALID_PARAMETER;
2612 net_profile_info_t *profile_info = profile;
2613 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2614 if (net_info == NULL) {
2615 CONN_UNLOCK; //LCOV_EXCL_LINE
2616 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
2619 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
2620 net_info->PrefixLen = prefix_len;
2621 net_info->SubnetMask.Data.Ipv4.s_addr = __profile_convert_prefix_len_to_netmask(prefix_len);
2623 net_info->PrefixLen6 = prefix_len;
2626 return CONNECTION_ERROR_NONE;
2629 EXPORT_API int connection_profile_get_prefix_length(connection_profile_h profile,
2630 connection_address_family_e address_family, int *prefix_len)
2634 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2635 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2637 if (!(_connection_libnet_check_profile_validity(profile)) ||
2638 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2639 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
2640 prefix_len == NULL) {
2641 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2643 return CONNECTION_ERROR_INVALID_PARAMETER;
2646 net_profile_info_t *profile_info = profile;
2647 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2648 if (net_info == NULL) {
2649 CONN_UNLOCK; //LCOV_EXCL_LINE
2650 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
2653 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
2654 *prefix_len = net_info->PrefixLen;
2655 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
2656 *prefix_len = net_info->PrefixLen6;
2659 return CONNECTION_ERROR_NONE;
2662 EXPORT_API int connection_profile_is_ethernet_eap_enabled(connection_profile_h profile, bool *enabled)
2666 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2667 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2669 if (!(_connection_libnet_check_profile_validity(profile)) ||
2671 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2673 return CONNECTION_ERROR_INVALID_PARAMETER;
2676 int ret = _connection_libnet_ethernet_eap_enabled(enabled);
2677 if (ret != CONNECTION_ERROR_NONE) {
2678 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get EAP over Ethernet enabled status."); //LCOV_EXCL_LINE
2679 CONN_UNLOCK; //LCOV_EXCL_LINE
2680 return ret; //LCOV_EXCL_LINE
2683 CONNECTION_LOG(CONNECTION_INFO, "EAP over Ethernet enabled status: [%s]", enabled ? "true" : "false");
2686 return CONNECTION_ERROR_NONE;
2689 EXPORT_API int connection_profile_enable_ethernet_eap(connection_profile_h profile, bool enable)
2693 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2694 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2696 if (!_connection_libnet_check_profile_validity(profile)) {
2697 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2699 return CONNECTION_ERROR_INVALID_PARAMETER;
2702 net_profile_info_t *profile_info = profile;
2703 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2706 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2707 CONN_UNLOCK; //LCOV_EXCL_LINE
2708 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2711 int ret = _connection_libnet_enable_ethernet_eap(enable, net_info->ProfileName);
2712 if (ret != CONNECTION_ERROR_NONE) {
2713 CONNECTION_LOG(CONNECTION_ERROR, "Failed to enable EAP over ethernet"); //LCOV_EXCL_LINE
2714 CONN_UNLOCK; //LCOV_EXCL_LINE
2715 return ret; //LCOV_EXCL_LINE
2718 net_info->use_eapol = enable;
2721 return CONNECTION_ERROR_NONE;
2724 EXPORT_API int connection_profile_set_ethernet_eap_type(connection_profile_h profile,
2725 connection_ethernet_eap_type_e type)
2729 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2730 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2732 if (!_connection_libnet_check_profile_validity(profile)) {
2733 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2735 return CONNECTION_ERROR_INVALID_PARAMETER;
2738 net_profile_info_t *profile_info = profile;
2739 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2741 if (!net_info || net_info->use_eapol == false) {
2742 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2743 CONN_UNLOCK; //LCOV_EXCL_LINE
2744 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2746 net_info->eap.eap_type = type;
2749 return CONNECTION_ERROR_NONE;
2752 EXPORT_API int connection_profile_get_ethernet_eap_type(connection_profile_h profile,
2753 connection_ethernet_eap_type_e *type)
2757 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2758 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2760 if (!_connection_libnet_check_profile_validity(profile) || type == NULL) {
2761 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2763 return CONNECTION_ERROR_INVALID_PARAMETER;
2766 net_profile_info_t *profile_info = profile;
2767 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2769 if (!net_info || net_info->use_eapol == false) {
2770 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2771 CONN_UNLOCK; //LCOV_EXCL_LINE
2772 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2775 *type = net_info->eap.eap_type;
2778 return CONNECTION_ERROR_NONE;
2781 EXPORT_API int connection_profile_set_ethernet_eap_passphrase(connection_profile_h profile,
2782 const char *user_name, const char *password)
2786 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2787 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2789 if (!_connection_libnet_check_profile_validity(profile) ||
2790 user_name == NULL || password == NULL) {
2791 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2793 return CONNECTION_ERROR_INVALID_PARAMETER;
2796 net_profile_info_t *profile_info = profile;
2797 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2799 if (!net_info || false == __profile_ethernet_validate_eap_passphrase(net_info)) {
2800 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
2802 return CONNECTION_ERROR_INVALID_OPERATION;
2805 g_strlcpy(net_info->eap.username, user_name, NET_USERNAME_LEN+1);
2806 g_strlcpy(net_info->eap.password, password, NET_PASSWORD_LEN+1);
2809 return CONNECTION_ERROR_NONE;
2812 EXPORT_API int connection_profile_get_ethernet_eap_passphrase(connection_profile_h profile,
2813 char **user_name, bool *is_password_set)
2817 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2818 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2820 if (!_connection_libnet_check_profile_validity(profile) ||
2821 user_name == NULL || is_password_set == NULL) {
2822 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2824 return CONNECTION_ERROR_INVALID_PARAMETER;
2827 net_profile_info_t *profile_info = profile;
2828 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2830 if (!net_info || false == __profile_ethernet_validate_eap_passphrase(net_info)) {
2831 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
2833 return CONNECTION_ERROR_INVALID_OPERATION;
2836 *user_name = strdup(net_info->eap.username);
2837 if (*user_name == NULL) {
2838 CONN_UNLOCK; //LCOV_EXCL_LINE
2839 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2842 if (strlen(net_info->eap.password) > 0)
2843 *is_password_set = true;
2845 *is_password_set = false;
2848 return CONNECTION_ERROR_NONE;
2851 EXPORT_API int connection_profile_set_ethernet_eap_identity(connection_profile_h profile,
2852 const char *identity)
2856 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2857 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2859 if (!_connection_libnet_check_profile_validity(profile) ||
2860 identity == NULL ) {
2861 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2863 return CONNECTION_ERROR_INVALID_PARAMETER;
2866 net_profile_info_t *profile_info = profile;
2867 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2869 if (!net_info || false == __profile_ethernet_validate_eap_identity(net_info)) {
2870 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2871 CONN_UNLOCK; //LCOV_EXCL_LINE
2872 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2875 g_strlcpy(net_info->eap.username, identity, NET_USERNAME_LEN+1);
2878 return CONNECTION_ERROR_NONE;
2881 EXPORT_API int connection_profile_get_ethernet_eap_identity(connection_profile_h profile,
2886 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2887 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2889 if (!_connection_libnet_check_profile_validity(profile) ||
2890 identity == NULL ) {
2891 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2893 return CONNECTION_ERROR_INVALID_PARAMETER;
2896 net_profile_info_t *profile_info = profile;
2897 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2899 if (!net_info || false == __profile_ethernet_validate_eap_identity(net_info)) {
2900 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2901 CONN_UNLOCK; //LCOV_EXCL_LINE
2902 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2905 *identity = strdup(net_info->eap.username);
2906 if (*identity == NULL) {
2907 CONN_UNLOCK; //LCOV_EXCL_LINE
2908 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2912 return CONNECTION_ERROR_NONE;
2915 EXPORT_API int connection_profile_set_ethernet_eap_ca_cert_file(connection_profile_h profile,
2920 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2921 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2923 if (!_connection_libnet_check_profile_validity(profile) ||
2925 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2927 return CONNECTION_ERROR_INVALID_PARAMETER;
2930 net_profile_info_t *profile_info = profile;
2931 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2933 if (!net_info || false == __profile_ethernet_validate_eap_ca_cert_file(net_info)) {
2934 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
2936 return CONNECTION_ERROR_INVALID_OPERATION;
2939 g_strlcpy(net_info->eap.ca_cert_filename, file, NET_CA_CERT_FILENAME_LEN+1);
2942 return CONNECTION_ERROR_NONE;
2945 EXPORT_API int connection_profile_get_ethernet_eap_ca_cert_file(connection_profile_h profile,
2950 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2951 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2953 if (!_connection_libnet_check_profile_validity(profile) ||
2955 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2957 return CONNECTION_ERROR_INVALID_PARAMETER;
2960 net_profile_info_t *profile_info = profile;
2961 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2963 if (!net_info || false == __profile_ethernet_validate_eap_ca_cert_file(net_info)) {
2964 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
2966 return CONNECTION_ERROR_INVALID_OPERATION;
2969 *file = strdup(net_info->eap.ca_cert_filename);
2970 if (*file == NULL) {
2971 CONN_UNLOCK; //LCOV_EXCL_LINE
2972 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2976 return CONNECTION_ERROR_NONE;
2979 EXPORT_API int connection_profile_set_ethernet_eap_client_cert_file(connection_profile_h profile,
2984 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2985 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2987 if (!_connection_libnet_check_profile_validity(profile) ||
2989 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2991 return CONNECTION_ERROR_INVALID_PARAMETER;
2994 net_profile_info_t *profile_info = profile;
2995 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2997 if (!net_info || false == __profile_ethernet_validate_eap_client_cert_file(net_info)) {
2998 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3000 return CONNECTION_ERROR_INVALID_OPERATION;
3003 g_strlcpy(net_info->eap.client_cert_filename, file, NET_CLIENT_CERT_FILENAME_LEN+1);
3006 return CONNECTION_ERROR_NONE;
3009 EXPORT_API int connection_profile_get_ethernet_eap_client_cert_file(connection_profile_h profile,
3014 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3015 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3017 if (!_connection_libnet_check_profile_validity(profile) ||
3019 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3021 return CONNECTION_ERROR_INVALID_PARAMETER;
3024 net_profile_info_t *profile_info = profile;
3025 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3027 if (!net_info || false == __profile_ethernet_validate_eap_client_cert_file(net_info)) {
3028 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3030 return CONNECTION_ERROR_INVALID_OPERATION;
3033 *file = strdup(net_info->eap.client_cert_filename);
3034 if (*file == NULL) {
3035 CONN_UNLOCK; //LCOV_EXCL_LINE
3036 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3040 return CONNECTION_ERROR_NONE;
3043 EXPORT_API int connection_profile_get_ethernet_eap_private_key_file(connection_profile_h profile,
3048 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3049 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3051 if (!_connection_libnet_check_profile_validity(profile) ||
3053 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3055 return CONNECTION_ERROR_INVALID_PARAMETER;
3058 net_profile_info_t *profile_info = profile;
3059 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3061 if (!net_info || false == __profile_ethernet_validate_eap_private_key_file(net_info)) {
3062 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3064 return CONNECTION_ERROR_INVALID_OPERATION;
3067 *file = strdup(net_info->eap.private_key_filename);
3068 if (*file == NULL) {
3069 CONN_UNLOCK; //LCOV_EXCL_LINE
3070 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3074 return CONNECTION_ERROR_NONE;
3077 EXPORT_API int connection_profile_set_ethernet_eap_private_key_info(connection_profile_h profile,
3078 const char *file, const char *password)
3082 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3083 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3085 if (!_connection_libnet_check_profile_validity(profile) ||
3086 file == NULL || password == NULL) {
3087 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3089 return CONNECTION_ERROR_INVALID_PARAMETER;
3092 net_profile_info_t *profile_info = profile;
3093 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3095 if (!net_info || false == __profile_ethernet_validate_eap_private_key_file(net_info)) {
3096 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3098 return CONNECTION_ERROR_INVALID_OPERATION;
3101 g_strlcpy(net_info->eap.private_key_filename, file, NET_PRIVATE_KEY_FILENAME_LEN+1);
3102 g_strlcpy(net_info->eap.private_key_passwd, password, NET_PRIVATE_KEY_PASSWD_LEN+1);
3105 return CONNECTION_ERROR_NONE;
3108 EXPORT_API int connection_profile_set_ethernet_eap_anonymous_identity(connection_profile_h profile,
3109 const char *anonymous_identity)
3113 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3114 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3116 if (!_connection_libnet_check_profile_validity(profile) ||
3117 anonymous_identity == NULL ) {
3118 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3120 return CONNECTION_ERROR_INVALID_PARAMETER;
3123 net_profile_info_t *profile_info = profile;
3124 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3126 if (!net_info || false == __profile_ethernet_validate_eap_anonymous_identity(net_info)) {
3127 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3129 return CONNECTION_ERROR_INVALID_OPERATION;
3132 g_strlcpy(net_info->eap.anonymous_identity, anonymous_identity, NET_USERNAME_LEN+1);
3135 return CONNECTION_ERROR_NONE;
3138 EXPORT_API int connection_profile_get_ethernet_eap_anonymous_identity(connection_profile_h profile,
3139 char **anonymous_identity)
3143 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3144 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3146 if (!_connection_libnet_check_profile_validity(profile) ||
3147 anonymous_identity == NULL ) {
3148 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3150 return CONNECTION_ERROR_INVALID_PARAMETER;
3153 net_profile_info_t *profile_info = profile;
3154 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3156 if (!net_info || false == __profile_ethernet_validate_eap_anonymous_identity(net_info)) {
3157 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3159 return CONNECTION_ERROR_INVALID_OPERATION;
3162 *anonymous_identity= strdup(net_info->eap.anonymous_identity);
3163 if (*anonymous_identity== NULL) {
3164 CONN_UNLOCK; //LCOV_EXCL_LINE
3165 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3169 return CONNECTION_ERROR_NONE;
3172 EXPORT_API int connection_profile_set_ethernet_eap_pac_file(connection_profile_h profile,
3177 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3178 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3180 if (!_connection_libnet_check_profile_validity(profile) ||
3182 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3184 return CONNECTION_ERROR_INVALID_PARAMETER;
3187 net_profile_info_t *profile_info = profile;
3188 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3190 if (!net_info || false == __profile_ethernet_validate_eap_pac_file(net_info)) {
3191 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3193 return CONNECTION_ERROR_INVALID_OPERATION;
3196 g_strlcpy(net_info->eap.pac_filename, file, NET_PAC_FILENAME_LEN+1);
3199 return CONNECTION_ERROR_NONE;
3202 EXPORT_API int connection_profile_get_ethernet_eap_pac_file(connection_profile_h profile,
3207 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3208 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3210 if (!_connection_libnet_check_profile_validity(profile) ||
3212 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3214 return CONNECTION_ERROR_INVALID_PARAMETER;
3217 net_profile_info_t *profile_info = profile;
3218 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3220 if (!net_info || false == __profile_ethernet_validate_eap_pac_file(net_info)) {
3221 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3223 return CONNECTION_ERROR_INVALID_OPERATION;
3226 *file = strdup(net_info->eap.pac_filename);
3227 if (*file == NULL) {
3228 CONN_UNLOCK; //LCOV_EXCL_LINE
3229 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3233 return CONNECTION_ERROR_NONE;
3236 EXPORT_API int connection_profile_set_ethernet_eap_auth_type(connection_profile_h profile,
3237 connection_ethernet_eap_auth_type_e type)
3241 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3242 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3244 if (!_connection_libnet_check_profile_validity(profile)) {
3245 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3247 return CONNECTION_ERROR_INVALID_PARAMETER;
3250 net_profile_info_t *profile_info = profile;
3251 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3253 if (!net_info || false == __profile_ethernet_validate_eap_auth_type(net_info)) {
3254 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3256 return CONNECTION_ERROR_INVALID_OPERATION;
3259 net_info->eap.eap_auth = type;
3262 return CONNECTION_ERROR_NONE;
3265 EXPORT_API int connection_profile_get_ethernet_eap_auth_type(connection_profile_h profile,
3266 connection_ethernet_eap_auth_type_e *type)
3270 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3271 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3273 if (!_connection_libnet_check_profile_validity(profile) || type == NULL) {
3274 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3276 return CONNECTION_ERROR_INVALID_PARAMETER;
3279 net_profile_info_t *profile_info = profile;
3280 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3282 if (!net_info || false == __profile_ethernet_validate_eap_auth_type(net_info)) {
3283 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3285 return CONNECTION_ERROR_INVALID_OPERATION;
3288 *type = net_info->eap.eap_auth;
3291 return CONNECTION_ERROR_NONE;
3294 EXPORT_API int connection_profile_set_ethernet_eap_peap_version(connection_profile_h profile,
3295 connection_ethernet_eap_peap_version_e version)
3299 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3300 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3302 if (!_connection_libnet_check_profile_validity(profile)) {
3303 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3305 return CONNECTION_ERROR_INVALID_PARAMETER;
3308 net_profile_info_t *profile_info = profile;
3309 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3311 if (!net_info || false == __profile_ethernet_validate_eap_peap_version(net_info)) {
3312 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3314 return CONNECTION_ERROR_INVALID_OPERATION;
3316 net_info->eap.peap_version= version;
3319 return CONNECTION_ERROR_NONE;
3322 EXPORT_API int connection_profile_get_ethernet_eap_peap_version(connection_profile_h profile,
3323 connection_ethernet_eap_peap_version_e *version)
3327 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3328 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3330 if (!_connection_libnet_check_profile_validity(profile) || version == NULL) {
3331 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3333 return CONNECTION_ERROR_INVALID_PARAMETER;
3336 net_profile_info_t *profile_info = profile;
3337 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3339 if (!net_info || false == __profile_ethernet_validate_eap_peap_version(net_info)) {
3340 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3342 return CONNECTION_ERROR_INVALID_OPERATION;
3345 *version = net_info->eap.peap_version;
3348 return CONNECTION_ERROR_NONE;