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 int __profile_init_wifi_profile(net_profile_info_t *profile_info)
233 GSList *interface_list = NULL;
235 if (net_get_wifi_interface_list(NULL, &interface_list) != NET_ERR_NONE) {
236 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get interface list");
237 return CONNECTION_ERROR_OPERATION_FAILED;
240 for (list = interface_list; list; list = list->next) {
241 const char *interface_name = list->data;
242 g_strlcpy(profile_info->ProfileName, interface_name, NET_PROFILE_NAME_LEN_MAX);
243 g_strlcpy(profile_info->ProfileInfo.Wlan.net_info.ProfileName,
244 interface_name, NET_PROFILE_NAME_LEN_MAX);
249 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get interface name");
250 g_slist_free_full(interface_list, g_free);
251 return CONNECTION_ERROR_INVALID_OPERATION;
254 profile_info->profile_type = NET_DEVICE_WIFI;
255 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
256 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
257 profile_info->ProfileInfo.Wlan.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
258 profile_info->ProfileInfo.Wlan.wlan_mode = NETPM_WLAN_CONNMODE_AUTO;
259 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_NONE;
260 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_NONE;
262 g_slist_free_full(interface_list, g_free);
263 return CONNECTION_ERROR_NONE;
267 static char *__profile_get_ethernet_proxy(void)
271 proxy = vconf_get_str(VCONFKEY_NETWORK_PROXY);
274 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get system proxy");
282 static unsigned char __profile_convert_netmask_to_prefix_len(const char *netmask)
287 in_addr_t mask = inet_network(netmask);
288 in_addr_t host = ~mask;
289 unsigned char prefix_len = 0;
291 /* a valid netmask must be 2^n - 1 */
292 if ((host & (host + 1)) != 0)
295 for (; mask; mask <<= 1)
301 static in_addr_t __profile_convert_prefix_len_to_netmask(int prefix_len)
303 return (prefix_len ? (in_addr_t) 0xFFFFFFFFu >> (32 - prefix_len) : 0);
307 connection_cellular_service_type_e _profile_convert_to_connection_cellular_service_type(net_service_type_t svc_type)
310 case NET_SERVICE_INTERNET:
311 return CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET;
312 case NET_SERVICE_MMS:
313 return CONNECTION_CELLULAR_SERVICE_TYPE_MMS;
314 case NET_SERVICE_PREPAID_INTERNET:
315 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET;
316 case NET_SERVICE_PREPAID_MMS:
317 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS;
318 case NET_SERVICE_TETHERING:
319 return CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING;
320 case NET_SERVICE_APPLICATION:
321 return CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION;
323 return CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
327 connection_profile_state_e _profile_convert_to_cp_state(net_state_type_t state)
329 connection_profile_state_e cp_state;
332 case NET_STATE_TYPE_ONLINE:
333 case NET_STATE_TYPE_READY:
334 cp_state = CONNECTION_PROFILE_STATE_CONNECTED;
336 case NET_STATE_TYPE_IDLE:
337 case NET_STATE_TYPE_FAILURE:
338 case NET_STATE_TYPE_DISCONNECT:
339 cp_state = CONNECTION_PROFILE_STATE_DISCONNECTED;
341 case NET_STATE_TYPE_ASSOCIATION:
342 cp_state = CONNECTION_PROFILE_STATE_ASSOCIATION;
344 case NET_STATE_TYPE_CONFIGURATION:
345 cp_state = CONNECTION_PROFILE_STATE_CONFIGURATION;
354 net_service_type_t _connection_profile_convert_to_libnet_cellular_service_type(connection_cellular_service_type_e svc_type)
357 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
358 return NET_SERVICE_INTERNET;
359 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
360 return NET_SERVICE_MMS;
361 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
362 return NET_SERVICE_PREPAID_INTERNET;
363 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
364 return NET_SERVICE_PREPAID_MMS;
365 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
366 return NET_SERVICE_TETHERING;
367 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
368 return NET_SERVICE_APPLICATION;
370 return NET_SERVICE_UNKNOWN;
374 net_state_type_t _connection_profile_convert_to_net_state(connection_profile_state_e state)
376 net_state_type_t libnet_state = NET_STATE_TYPE_UNKNOWN;
379 case CONNECTION_PROFILE_STATE_CONNECTED:
380 libnet_state = NET_STATE_TYPE_ONLINE;
382 case CONNECTION_PROFILE_STATE_DISCONNECTED:
383 libnet_state = NET_STATE_TYPE_IDLE;
385 case CONNECTION_PROFILE_STATE_ASSOCIATION:
386 libnet_state = NET_STATE_TYPE_ASSOCIATION;
388 case CONNECTION_PROFILE_STATE_CONFIGURATION:
389 libnet_state = NET_STATE_TYPE_CONFIGURATION;
397 /* Connection profile ********************************************************/
398 EXPORT_API int connection_profile_create(connection_profile_type_e type, const char* keyword, connection_profile_h* profile)
402 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
404 if (type == CONNECTION_PROFILE_TYPE_CELLULAR)
405 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
406 else if (type == CONNECTION_PROFILE_TYPE_WIFI)
407 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
409 if (type != CONNECTION_PROFILE_TYPE_CELLULAR &&
410 type != CONNECTION_PROFILE_TYPE_WIFI) {
411 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
413 return CONNECTION_ERROR_INVALID_PARAMETER;
416 if (profile == NULL) {
417 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
419 return CONNECTION_ERROR_INVALID_PARAMETER;
422 int rv = _connection_libnet_check_profile_privilege();
423 if (rv == CONNECTION_ERROR_PERMISSION_DENIED) {
424 CONN_UNLOCK; //LCOV_EXCL_LINE
425 return rv; //LCOV_EXCL_LINE
426 } else if (rv != CONNECTION_ERROR_NONE) {
427 CONNECTION_LOG(CONNECTION_ERROR, "Failed to create profile"); //LCOV_EXCL_LINE
428 CONN_UNLOCK; //LCOV_EXCL_LINE
429 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
432 net_profile_info_t *profile_info = g_try_malloc0(sizeof(net_profile_info_t));
433 if (profile_info == NULL) {
434 CONN_UNLOCK; //LCOV_EXCL_LINE
435 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
438 if (type == CONNECTION_PROFILE_TYPE_CELLULAR) {
439 if (keyword == NULL) {
440 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
441 g_free(profile_info);
443 return CONNECTION_ERROR_INVALID_PARAMETER;
445 __profile_init_cellular_profile(profile_info, keyword);
446 } else if (type == CONNECTION_PROFILE_TYPE_WIFI) {
447 rv = __profile_init_wifi_profile(profile_info);
448 if (rv != CONNECTION_ERROR_NONE) {
449 g_free(profile_info);
455 *profile = (connection_profile_h)profile_info;
456 _connection_libnet_add_to_profile_list(*profile);
459 return CONNECTION_ERROR_NONE;
462 EXPORT_API int connection_profile_destroy(connection_profile_h profile)
466 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
468 if (!(_connection_libnet_check_profile_validity(profile))) {
469 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
471 return CONNECTION_ERROR_INVALID_PARAMETER;
474 _connection_libnet_remove_from_profile_list(profile);
477 return CONNECTION_ERROR_NONE;
480 EXPORT_API int connection_profile_clone(connection_profile_h* cloned_profile, connection_profile_h origin_profile)
484 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
486 if (!(_connection_libnet_check_profile_validity(origin_profile)) || cloned_profile == NULL) {
487 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
489 return CONNECTION_ERROR_INVALID_PARAMETER;
492 *cloned_profile = g_try_malloc0(sizeof(net_profile_info_t));
493 if (*cloned_profile == NULL) {
494 CONN_UNLOCK; //LCOV_EXCL_LINE
495 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
498 memcpy(*cloned_profile, origin_profile, sizeof(net_profile_info_t));
499 _connection_libnet_add_to_profile_list(*cloned_profile);
502 return CONNECTION_ERROR_NONE;
505 EXPORT_API int connection_profile_get_id(connection_profile_h profile, char** profile_id)
509 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
511 if (!(_connection_libnet_check_profile_validity(profile)) || profile_id == NULL) {
512 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
514 return CONNECTION_ERROR_INVALID_PARAMETER;
517 net_profile_info_t *profile_info = profile;
519 char *prof_id = strrchr(profile_info->ProfileName, '/');
520 if (prof_id == NULL) {
521 CONN_UNLOCK; //LCOV_EXCL_LINE
522 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
526 *profile_id = g_strdup(prof_id);
528 if (*profile_id == NULL) {
529 CONN_UNLOCK; //LCOV_EXCL_LINE
530 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
534 return CONNECTION_ERROR_NONE;
537 EXPORT_API int connection_profile_get_name(connection_profile_h profile, char** profile_name)
541 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
543 if (!(_connection_libnet_check_profile_validity(profile)) || profile_name == NULL) {
544 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
546 return CONNECTION_ERROR_INVALID_PARAMETER;
549 net_profile_info_t *profile_info = profile;
551 switch (profile_info->profile_type) {
552 case NET_DEVICE_CELLULAR:
553 *profile_name = g_strdup(profile_info->ProfileInfo.Pdp.Keyword);
555 case NET_DEVICE_WIFI:
556 *profile_name = g_strdup(profile_info->ProfileInfo.Wlan.essid);
558 case NET_DEVICE_ETHERNET:
559 *profile_name = g_strdup(profile_info->ProfileInfo.Ethernet.net_info.DevName); //LCOV_EXCL_LINE
560 break; //LCOV_EXCL_LINE
561 case NET_DEVICE_BLUETOOTH: {
562 char *bt_name = strrchr(profile_info->ProfileName, '/');
563 if (bt_name == NULL) {
564 CONN_UNLOCK; //LCOV_EXCL_LINE
565 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
569 *profile_name = g_strdup(bt_name);
571 case NET_DEVICE_MESH:
572 *profile_name = g_strdup(profile_info->ProfileInfo.Mesh.essid);
575 CONN_UNLOCK; //LCOV_EXCL_LINE
576 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
579 if (*profile_name == NULL) {
580 CONN_UNLOCK; //LCOV_EXCL_LINE
581 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
585 return CONNECTION_ERROR_NONE;
588 EXPORT_API int connection_profile_get_type(connection_profile_h profile, connection_profile_type_e *type)
592 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
594 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
595 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
597 return CONNECTION_ERROR_INVALID_PARAMETER;
600 net_profile_info_t *profile_info = profile;
602 switch (profile_info->profile_type) {
603 case NET_DEVICE_CELLULAR:
604 *type = CONNECTION_PROFILE_TYPE_CELLULAR;
606 case NET_DEVICE_WIFI:
607 *type = CONNECTION_PROFILE_TYPE_WIFI;
609 case NET_DEVICE_ETHERNET:
610 *type = CONNECTION_PROFILE_TYPE_ETHERNET; //LCOV_EXCL_LINE
611 break; //LCOV_EXCL_LINE
612 case NET_DEVICE_BLUETOOTH:
613 *type = CONNECTION_PROFILE_TYPE_BT;
615 case NET_DEVICE_MESH:
616 *type = CONNECTION_PROFILE_TYPE_MESH;
619 CONNECTION_LOG(CONNECTION_ERROR, "Invalid profile type"); //LCOV_EXCL_LINE
620 CONN_UNLOCK; //LCOV_EXCL_LINE
621 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
625 return CONNECTION_ERROR_NONE;
628 EXPORT_API int connection_profile_get_network_interface_name(connection_profile_h profile, char** interface_name)
632 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
634 if (!(_connection_libnet_check_profile_validity(profile)) || interface_name == NULL) {
635 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
637 return CONNECTION_ERROR_INVALID_PARAMETER;
640 net_profile_info_t *profile_info = profile;
641 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
642 if (net_info == NULL) {
643 CONN_UNLOCK; //LCOV_EXCL_LINE
644 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
647 *interface_name = g_strdup(net_info->DevName);
648 if (*interface_name == NULL) {
649 CONN_UNLOCK; //LCOV_EXCL_LINE
650 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
654 return CONNECTION_ERROR_NONE;
657 EXPORT_API int connection_profile_refresh(connection_profile_h profile)
663 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
665 if (!(_connection_libnet_check_profile_validity(profile))) {
666 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
668 return CONNECTION_ERROR_INVALID_PARAMETER;
671 net_profile_info_t profile_info_local;
672 net_profile_info_t *profile_info = profile;
674 rv = net_get_profile_info(NULL, profile_info->ProfileName, &profile_info_local);
675 if (rv == NET_ERR_ACCESS_DENIED) {
676 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
677 CONN_UNLOCK; //LCOV_EXCL_LINE
678 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
679 } else if (rv != NET_ERR_NONE) {
680 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get profile information"); //LCOV_EXCL_LINE
681 CONN_UNLOCK; //LCOV_EXCL_LINE
682 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
685 memcpy(profile, &profile_info_local, sizeof(net_profile_info_t));
688 return CONNECTION_ERROR_NONE;
691 EXPORT_API int connection_profile_get_state(connection_profile_h profile, connection_profile_state_e* state)
695 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
697 if (!(_connection_libnet_check_profile_validity(profile)) || state == NULL) {
698 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
700 return CONNECTION_ERROR_INVALID_PARAMETER;
703 net_profile_info_t *profile_info = profile;
704 *state = _profile_convert_to_cp_state(profile_info->ProfileState);
707 return CONNECTION_ERROR_NONE;
710 EXPORT_API int connection_profile_get_internet_state(connection_profile_h profile,
711 connection_internet_state_e *state)
715 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
717 if (!(_connection_libnet_check_profile_validity(profile)) || state == NULL) {
718 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
720 return CONNECTION_ERROR_INVALID_PARAMETER;
723 net_profile_info_t *profile_info = profile;
724 if (profile_info->ProfileState == NET_STATE_TYPE_ONLINE)
725 *state = CONNECTION_INTERNET_STATE_ONLINE;
727 *state = CONNECTION_INTERNET_STATE_OFFLINE;
730 return CONNECTION_ERROR_NONE;
733 EXPORT_API int connection_profile_get_ip_config_type(connection_profile_h profile,
734 connection_address_family_e address_family, connection_ip_config_type_e *type)
736 net_ip_config_type_t profile_type;
740 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
742 if (!(_connection_libnet_check_profile_validity(profile)) ||
743 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
744 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
746 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
748 return CONNECTION_ERROR_INVALID_PARAMETER;
751 net_profile_info_t *profile_info = profile;
752 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
753 if (net_info == NULL) {
754 CONN_UNLOCK; //LCOV_EXCL_LINE
755 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
758 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
759 profile_type = net_info->IpConfigType;
761 profile_type = net_info->IpConfigType6;
763 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
764 switch (profile_type) {
766 case NET_IP_CONFIG_TYPE_STATIC:
767 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
770 case NET_IP_CONFIG_TYPE_DYNAMIC:
771 *type = CONNECTION_IP_CONFIG_TYPE_DYNAMIC;
774 case NET_IP_CONFIG_TYPE_AUTO_IP:
775 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
778 case NET_IP_CONFIG_TYPE_FIXED:
779 *type = CONNECTION_IP_CONFIG_TYPE_FIXED;
782 case NET_IP_CONFIG_TYPE_OFF:
783 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
787 return CONNECTION_ERROR_OPERATION_FAILED;
792 switch (profile_type) {
793 case NET_IP_CONFIG_TYPE_STATIC:
794 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
797 case NET_IP_CONFIG_TYPE_AUTO_IP:
798 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
801 case NET_IP_CONFIG_TYPE_OFF:
802 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
807 return CONNECTION_ERROR_OPERATION_FAILED;
814 return CONNECTION_ERROR_NONE;
817 EXPORT_API int connection_profile_get_ip_address(connection_profile_h profile,
818 connection_address_family_e address_family, char** ip_address)
822 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
824 if (!(_connection_libnet_check_profile_validity(profile)) ||
825 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
826 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
827 ip_address == NULL) {
828 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
830 return CONNECTION_ERROR_INVALID_PARAMETER;
833 net_profile_info_t *profile_info = profile;
834 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
835 if (net_info == NULL) {
836 CONN_UNLOCK; //LCOV_EXCL_LINE
837 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
840 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
841 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr,
844 if (net_get_preferred_ipv6_address(net_info->ProfileName, ip_address) != NET_ERR_NONE) {
845 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get preferred ipv6 address"); //LCOV_EXCL_LINE
846 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr6, //LCOV_EXCL_LINE
851 if (*ip_address == NULL) {
852 CONN_UNLOCK; //LCOV_EXCL_LINE
853 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
857 return CONNECTION_ERROR_NONE;
860 EXPORT_API int connection_profile_get_subnet_mask(connection_profile_h profile,
861 connection_address_family_e address_family, char** subnet_mask)
865 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
867 if (!(_connection_libnet_check_profile_validity(profile)) ||
868 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
869 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
870 subnet_mask == NULL) {
871 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
873 return CONNECTION_ERROR_INVALID_PARAMETER;
876 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
877 CONNECTION_LOG(CONNECTION_ERROR, //LCOV_EXCL_LINE
878 "Please uses connection_profile_get_prefix_length()");
879 CONN_UNLOCK; //LCOV_EXCL_LINE
880 return CONNECTION_ERROR_NOT_SUPPORTED; //LCOV_EXCL_LINE
883 net_profile_info_t *profile_info = profile;
884 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
885 if (net_info == NULL) {
886 CONN_UNLOCK; //LCOV_EXCL_LINE
887 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
890 *subnet_mask = __profile_convert_ip_to_string(&net_info->SubnetMask,
893 if (*subnet_mask == NULL) {
894 CONN_UNLOCK; //LCOV_EXCL_LINE
895 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
899 return CONNECTION_ERROR_NONE;
902 EXPORT_API int connection_profile_get_gateway_address(connection_profile_h profile,
903 connection_address_family_e address_family, char** gateway_address)
907 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
909 if (!(_connection_libnet_check_profile_validity(profile)) ||
910 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
911 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
912 gateway_address == NULL) {
913 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
915 return CONNECTION_ERROR_INVALID_PARAMETER;
918 net_profile_info_t *profile_info = profile;
919 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
920 if (net_info == NULL) {
921 CONN_UNLOCK; //LCOV_EXCL_LINE
922 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
925 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
926 *gateway_address = __profile_convert_ip_to_string(
927 &net_info->GatewayAddr6, address_family);
929 *gateway_address = __profile_convert_ip_to_string(
930 &net_info->GatewayAddr, address_family);
932 if (*gateway_address == NULL) {
933 CONN_UNLOCK; //LCOV_EXCL_LINE
934 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
938 return CONNECTION_ERROR_NONE;
941 EXPORT_API int connection_profile_get_dhcp_server_address(
942 connection_profile_h profile,
943 connection_address_family_e address_family, char** dhcp_server)
947 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
949 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
950 CONNECTION_LOG(CONNECTION_ERROR, "Not supported");
952 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
955 if (!(_connection_libnet_check_profile_validity(profile)) ||
956 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4) ||
957 dhcp_server == NULL) {
958 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
960 return CONNECTION_ERROR_INVALID_PARAMETER;
963 net_profile_info_t *profile_info = profile;
964 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
965 if (net_info == NULL) {
966 CONN_UNLOCK; //LCOV_EXCL_LINE
967 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
970 CONNECTION_LOG(CONNECTION_INFO, "IP Config %d, DHCP Server Address %s",
971 net_info->IpConfigType, (net_info->BServerAddr ? "TRUE" : "FALSE"));
973 *dhcp_server = __profile_convert_ip_to_string(&net_info->ServerAddr,
976 if (*dhcp_server == NULL) {
977 CONN_UNLOCK; //LCOV_EXCL_LINE
978 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
982 return CONNECTION_ERROR_NONE;
985 EXPORT_API int connection_profile_get_dhcp_lease_duration(
986 connection_profile_h profile,
987 connection_address_family_e address_family, int* dhcp_lease_duration)
991 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
993 if (!(_connection_libnet_check_profile_validity(profile)) ||
994 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
995 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
996 dhcp_lease_duration == NULL) {
997 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
999 return CONNECTION_ERROR_INVALID_PARAMETER;
1002 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1003 CONNECTION_LOG(CONNECTION_ERROR, "Not supported");
1005 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
1008 net_profile_info_t *profile_info = profile;
1009 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1010 if (net_info == NULL) {
1011 CONN_UNLOCK; //LCOV_EXCL_LINE
1012 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1015 CONNECTION_LOG(CONNECTION_INFO, "Lease duration : %d",
1016 net_info->DHCPLeaseDuration);
1018 *dhcp_lease_duration = net_info->DHCPLeaseDuration;
1021 return CONNECTION_ERROR_NONE;
1024 EXPORT_API int connection_profile_get_dns_address(connection_profile_h profile, int order,
1025 connection_address_family_e address_family, char** dns_address)
1029 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1031 if (!(_connection_libnet_check_profile_validity(profile)) ||
1032 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1033 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1034 dns_address == NULL ||
1036 order > NET_DNS_ADDR_MAX) {
1037 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1039 return CONNECTION_ERROR_INVALID_PARAMETER;
1042 net_profile_info_t *profile_info = profile;
1043 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1044 if (net_info == NULL) {
1045 CONN_UNLOCK; //LCOV_EXCL_LINE
1046 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1049 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
1050 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr[order-1],
1052 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) //LCOV_EXCL_LINE
1053 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr6[order-1], //LCOV_EXCL_LINE
1056 if (*dns_address == NULL) {
1057 CONN_UNLOCK; //LCOV_EXCL_LINE
1058 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1062 return CONNECTION_ERROR_NONE;
1065 EXPORT_API int connection_profile_get_proxy_type(connection_profile_h profile, connection_proxy_type_e *type)
1069 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1071 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1072 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1074 return CONNECTION_ERROR_INVALID_PARAMETER;
1077 net_profile_info_t *profile_info = profile;
1078 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1079 if (net_info == NULL) {
1080 CONN_UNLOCK; //LCOV_EXCL_LINE
1081 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1085 if (profile_info->profile_type == NET_DEVICE_ETHERNET) {
1086 char *proxy = __profile_get_ethernet_proxy();
1087 if (proxy == NULL) {
1088 *type = CONNECTION_PROXY_TYPE_DIRECT;
1090 *type = CONNECTION_PROXY_TYPE_MANUAL;
1095 return CONNECTION_ERROR_NONE;
1099 switch (net_info->ProxyMethod) {
1101 case NET_PROXY_TYPE_DIRECT:
1102 *type = CONNECTION_PROXY_TYPE_DIRECT;
1104 case NET_PROXY_TYPE_AUTO:
1105 *type = CONNECTION_PROXY_TYPE_AUTO;
1107 case NET_PROXY_TYPE_MANUAL:
1108 *type = CONNECTION_PROXY_TYPE_MANUAL;
1110 case NET_PROXY_TYPE_UNKNOWN:
1113 return CONNECTION_ERROR_OPERATION_FAILED;
1118 return CONNECTION_ERROR_NONE;
1121 EXPORT_API int connection_profile_get_proxy_address(connection_profile_h profile,
1122 connection_address_family_e address_family, char** proxy_address)
1126 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1128 if (!(_connection_libnet_check_profile_validity(profile)) ||
1129 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1130 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1131 proxy_address == NULL) {
1132 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1134 return CONNECTION_ERROR_INVALID_PARAMETER;
1137 net_profile_info_t *profile_info = profile;
1138 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1139 if (net_info == NULL) {
1140 CONN_UNLOCK; //LCOV_EXCL_LINE
1141 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1144 *proxy_address = g_strdup(net_info->ProxyAddr);
1146 if (*proxy_address == NULL) {
1147 CONN_UNLOCK; //LCOV_EXCL_LINE
1148 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1152 return CONNECTION_ERROR_NONE;
1155 EXPORT_API int connection_profile_set_ip_config_type(connection_profile_h profile,
1156 connection_address_family_e address_family, connection_ip_config_type_e type)
1158 net_ip_config_type_t *profile_type = NULL;
1162 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1164 if (!(_connection_libnet_check_profile_validity(profile)) ||
1165 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1166 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1167 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1169 return CONNECTION_ERROR_INVALID_PARAMETER;
1172 net_profile_info_t *profile_info = profile;
1173 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1174 if (net_info == NULL) {
1175 CONN_UNLOCK; //LCOV_EXCL_LINE
1176 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1179 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
1180 profile_type = &net_info->IpConfigType ;
1182 profile_type = &net_info->IpConfigType6 ;
1184 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
1187 case CONNECTION_IP_CONFIG_TYPE_STATIC:
1188 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
1189 net_info->IpAddr.Data.Ipv4.s_addr = 0;
1190 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
1191 net_info->GatewayAddr.Data.Ipv4.s_addr = 0 ;
1194 case CONNECTION_IP_CONFIG_TYPE_DYNAMIC:
1195 *profile_type = NET_IP_CONFIG_TYPE_DYNAMIC;
1198 case CONNECTION_IP_CONFIG_TYPE_AUTO:
1199 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
1202 case CONNECTION_IP_CONFIG_TYPE_FIXED:
1203 net_info->IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
1206 case CONNECTION_IP_CONFIG_TYPE_NONE:
1207 *profile_type = NET_IP_CONFIG_TYPE_OFF;
1212 return CONNECTION_ERROR_INVALID_PARAMETER;
1218 case CONNECTION_IP_CONFIG_TYPE_STATIC:
1219 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
1220 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
1221 net_info->PrefixLen6 = 0 ;
1222 inet_pton(AF_INET6, "::",
1223 &net_info->GatewayAddr6.Data.Ipv6);
1226 case CONNECTION_IP_CONFIG_TYPE_AUTO:
1227 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
1230 case CONNECTION_IP_CONFIG_TYPE_NONE:
1231 *profile_type = NET_IP_CONFIG_TYPE_OFF;
1236 return CONNECTION_ERROR_INVALID_PARAMETER;
1242 return CONNECTION_ERROR_NONE;
1245 EXPORT_API int connection_profile_set_ip_address(connection_profile_h profile,
1246 connection_address_family_e address_family, const char* ip_address)
1250 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1252 if (!(_connection_libnet_check_profile_validity(profile)) ||
1253 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1254 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1255 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1257 return CONNECTION_ERROR_INVALID_PARAMETER;
1260 net_profile_info_t *profile_info = profile;
1261 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1262 if (net_info == NULL) {
1263 CONN_UNLOCK; //LCOV_EXCL_LINE
1264 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1267 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1269 if (ip_address == NULL)
1270 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
1271 else if (inet_pton(AF_INET6, ip_address, &net_info->IpAddr6.Data.Ipv6) < 1) {
1273 return CONNECTION_ERROR_INVALID_PARAMETER;
1277 if (ip_address == NULL)
1278 net_info->IpAddr.Data.Ipv4.s_addr = 0;
1279 else if (inet_pton(AF_INET, ip_address, &net_info->IpAddr.Data.Ipv4) < 1) {
1280 CONN_UNLOCK; //LCOV_EXCL_LINE
1281 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1286 return CONNECTION_ERROR_NONE;
1289 EXPORT_API int connection_profile_set_subnet_mask(connection_profile_h profile,
1290 connection_address_family_e address_family, const char* subnet_mask)
1294 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1296 if (!(_connection_libnet_check_profile_validity(profile)) ||
1297 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1298 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1299 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1301 return CONNECTION_ERROR_INVALID_PARAMETER;
1304 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1305 CONNECTION_LOG(CONNECTION_ERROR, //LCOV_EXCL_LINE
1306 "Please uses connection_profile_set_prefix_length()");
1307 CONN_UNLOCK; //LCOV_EXCL_LINE
1308 return CONNECTION_ERROR_NOT_SUPPORTED; //LCOV_EXCL_LINE
1311 net_profile_info_t *profile_info = profile;
1312 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1313 if (net_info == NULL) {
1314 CONN_UNLOCK; //LCOV_EXCL_LINE
1315 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1318 if (subnet_mask == NULL)
1319 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
1320 else if (inet_pton(AF_INET, subnet_mask , &net_info->SubnetMask.Data.Ipv4) < 1) {
1321 CONN_UNLOCK; //LCOV_EXCL_LINE
1322 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1325 net_info->PrefixLen = __profile_convert_netmask_to_prefix_len(subnet_mask);
1326 if (net_info->PrefixLen <= 0 || net_info->PrefixLen > 31) {
1327 CONNECTION_LOG(CONNECTION_ERROR, "Invalid Prefix length: %d", net_info->PrefixLen); //LCOV_EXCL_LINE
1328 CONN_UNLOCK; //LCOV_EXCL_LINE
1329 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1333 return CONNECTION_ERROR_NONE;
1336 EXPORT_API int connection_profile_set_gateway_address(connection_profile_h profile,
1337 connection_address_family_e address_family, const char* gateway_address)
1341 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1343 if (!(_connection_libnet_check_profile_validity(profile)) ||
1344 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1345 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1346 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1348 return CONNECTION_ERROR_INVALID_PARAMETER;
1351 net_profile_info_t *profile_info = profile;
1352 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1353 if (net_info == NULL) {
1354 CONN_UNLOCK; //LCOV_EXCL_LINE
1355 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1358 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1360 if (gateway_address == NULL)
1361 inet_pton(AF_INET6, "::", &net_info->GatewayAddr6.Data.Ipv6);
1362 else if (inet_pton(AF_INET6, gateway_address, &net_info->GatewayAddr6.Data.Ipv6) < 1) {
1364 return CONNECTION_ERROR_INVALID_PARAMETER;
1368 if (gateway_address == NULL)
1369 net_info->GatewayAddr.Data.Ipv4.s_addr = 0;
1370 else if (inet_pton(AF_INET, gateway_address, &(net_info->GatewayAddr.Data.Ipv4)) < 1) {
1371 CONN_UNLOCK; //LCOV_EXCL_LINE
1372 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1377 return CONNECTION_ERROR_NONE;
1380 EXPORT_API int connection_profile_set_dns_address(connection_profile_h profile, int order,
1381 connection_address_family_e address_family, const char* dns_address)
1385 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1387 if (!(_connection_libnet_check_profile_validity(profile)) ||
1388 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1389 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1391 order > NET_DNS_ADDR_MAX) {
1392 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1394 return CONNECTION_ERROR_INVALID_PARAMETER;
1397 net_profile_info_t *profile_info = profile;
1398 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1399 if (net_info == NULL) {
1400 CONN_UNLOCK; //LCOV_EXCL_LINE
1401 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1404 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1406 net_info->DnsAddr6[order-1].Type = NET_ADDR_IPV6;
1407 if (dns_address == NULL)
1408 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[order-1].Data.Ipv6);
1409 else if (inet_pton(AF_INET6, dns_address, &net_info->DnsAddr6[order-1].Data.Ipv6) < 1) {
1411 return CONNECTION_ERROR_INVALID_PARAMETER;
1413 if (net_info->DnsCount6 < order)
1414 net_info->DnsCount6 = order;
1417 net_info->DnsAddr[order-1].Type = NET_ADDR_IPV4;
1418 if (dns_address == NULL)
1419 net_info->DnsAddr[order-1].Data.Ipv4.s_addr = 0;
1420 else if (inet_pton(AF_INET, dns_address, &(net_info->DnsAddr[order-1].Data.Ipv4)) < 1) {
1421 CONN_UNLOCK; //LCOV_EXCL_LINE
1422 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1424 if (net_info->DnsCount < order)
1425 net_info->DnsCount = order;
1429 return CONNECTION_ERROR_NONE;
1432 EXPORT_API int connection_profile_set_proxy_type(connection_profile_h profile, connection_proxy_type_e type)
1436 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1438 if (!(_connection_libnet_check_profile_validity(profile))) {
1439 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1441 return CONNECTION_ERROR_INVALID_PARAMETER;
1444 net_profile_info_t *profile_info = profile;
1445 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1446 if (net_info == NULL) {
1447 CONN_UNLOCK; //LCOV_EXCL_LINE
1448 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1453 case CONNECTION_PROXY_TYPE_DIRECT:
1454 net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
1456 case CONNECTION_PROXY_TYPE_AUTO:
1457 net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
1459 case CONNECTION_PROXY_TYPE_MANUAL:
1460 net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
1464 return CONNECTION_ERROR_INVALID_PARAMETER;
1469 return CONNECTION_ERROR_NONE;
1472 EXPORT_API int connection_profile_set_proxy_address(connection_profile_h profile,
1473 connection_address_family_e address_family, const char* proxy_address)
1475 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1477 CONNECTION_LOG(CONNECTION_ERROR, "Address Family: %d", address_family);
1478 if (!(_connection_libnet_check_profile_validity(profile)) ||
1479 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1480 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1481 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1483 return CONNECTION_ERROR_INVALID_PARAMETER;
1486 net_profile_info_t *profile_info = profile;
1487 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1488 if (net_info == NULL) {
1489 CONN_UNLOCK; //LCOV_EXCL_LINE
1490 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1493 if (proxy_address == NULL)
1494 net_info->ProxyAddr[0] = '\0';
1496 g_strlcpy(net_info->ProxyAddr, proxy_address, NET_PROXY_LEN_MAX);
1499 return CONNECTION_ERROR_NONE;
1502 EXPORT_API int connection_profile_set_state_changed_cb(connection_profile_h profile,
1503 connection_profile_state_changed_cb callback, void* user_data)
1507 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1509 if (!(_connection_libnet_check_profile_validity(profile)) || callback == NULL) {
1510 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1512 return CONNECTION_ERROR_INVALID_PARAMETER;
1515 if (_connection_libnet_add_to_profile_cb_list(profile, callback, user_data)) {
1517 return CONNECTION_ERROR_NONE;
1520 CONN_UNLOCK; //LCOV_EXCL_LINE
1521 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1524 EXPORT_API int connection_profile_unset_state_changed_cb(connection_profile_h profile)
1528 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1530 if (!(_connection_libnet_check_profile_validity(profile))) {
1531 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1533 return CONNECTION_ERROR_INVALID_PARAMETER;
1536 if (_connection_libnet_remove_from_profile_cb_list(profile) != true) {
1537 CONN_UNLOCK; //LCOV_EXCL_LINE
1538 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1542 return CONNECTION_ERROR_NONE;
1546 /* Wi-Fi profile *************************************************************/
1547 EXPORT_API int connection_profile_get_wifi_essid(connection_profile_h profile, char** essid)
1551 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1553 if (!(_connection_libnet_check_profile_validity(profile)) || essid == NULL) {
1554 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1556 return CONNECTION_ERROR_INVALID_PARAMETER;
1559 net_profile_info_t *profile_info = profile;
1561 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1562 profile_info->profile_type != NET_DEVICE_MESH) {
1564 return CONNECTION_ERROR_INVALID_PARAMETER;
1567 if (profile_info->profile_type == NET_DEVICE_WIFI)
1568 *essid = g_strdup(profile_info->ProfileInfo.Wlan.essid);
1570 *essid = g_strdup(profile_info->ProfileInfo.Mesh.essid);
1572 if (*essid == NULL) {
1573 CONN_UNLOCK; //LCOV_EXCL_LINE
1574 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1578 return CONNECTION_ERROR_NONE;
1581 EXPORT_API int connection_profile_get_wifi_bssid(connection_profile_h profile, char** bssid)
1585 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1587 if (!(_connection_libnet_check_profile_validity(profile)) || bssid == NULL) {
1588 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1590 return CONNECTION_ERROR_INVALID_PARAMETER;
1593 net_profile_info_t *profile_info = profile;
1595 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1596 profile_info->profile_type != NET_DEVICE_MESH) {
1598 return CONNECTION_ERROR_INVALID_PARAMETER;
1601 if (profile_info->profile_type == NET_DEVICE_WIFI)
1602 *bssid = g_strdup(profile_info->ProfileInfo.Wlan.bssid);
1604 *bssid = g_strdup(profile_info->ProfileInfo.Mesh.bssid);
1606 if (*bssid == NULL) {
1607 CONN_UNLOCK; //LCOV_EXCL_LINE
1608 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1612 return CONNECTION_ERROR_NONE;
1615 EXPORT_API int connection_profile_get_wifi_rssi(connection_profile_h profile, int* rssi)
1619 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1621 if (!(_connection_libnet_check_profile_validity(profile)) || rssi == NULL) {
1622 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1624 return CONNECTION_ERROR_INVALID_PARAMETER;
1627 net_profile_info_t *profile_info = profile;
1629 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1630 profile_info->profile_type != NET_DEVICE_MESH) {
1632 return CONNECTION_ERROR_INVALID_PARAMETER;
1635 if (profile_info->profile_type == NET_DEVICE_WIFI)
1636 *rssi = (int)profile_info->ProfileInfo.Wlan.Strength;
1638 *rssi = (int)profile_info->ProfileInfo.Mesh.Strength;
1641 return CONNECTION_ERROR_NONE;
1644 EXPORT_API int connection_profile_get_wifi_frequency(connection_profile_h profile, int* frequency)
1648 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1650 if (!(_connection_libnet_check_profile_validity(profile)) || frequency == NULL) {
1651 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1653 return CONNECTION_ERROR_INVALID_PARAMETER;
1656 net_profile_info_t *profile_info = profile;
1658 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1659 profile_info->profile_type != NET_DEVICE_MESH) {
1661 return CONNECTION_ERROR_INVALID_PARAMETER;
1664 if (profile_info->profile_type == NET_DEVICE_WIFI)
1665 *frequency = (int)profile_info->ProfileInfo.Wlan.frequency;
1667 *frequency = (int)profile_info->ProfileInfo.Mesh.frequency;
1670 return CONNECTION_ERROR_NONE;
1673 EXPORT_API int connection_profile_get_wifi_max_speed(connection_profile_h profile, int* max_speed)
1677 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1679 if (!(_connection_libnet_check_profile_validity(profile)) || max_speed == NULL) {
1680 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1682 return CONNECTION_ERROR_INVALID_PARAMETER;
1685 net_profile_info_t *profile_info = profile;
1687 if (profile_info->profile_type != NET_DEVICE_WIFI) {
1689 return CONNECTION_ERROR_INVALID_PARAMETER;
1692 *max_speed = profile_info->ProfileInfo.Wlan.max_rate;
1695 return CONNECTION_ERROR_NONE;
1698 EXPORT_API int connection_profile_get_wifi_security_type(connection_profile_h profile, connection_wifi_security_type_e *type)
1702 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1704 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1705 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1707 return CONNECTION_ERROR_INVALID_PARAMETER;
1710 net_profile_info_t *profile_info = profile;
1712 wlan_security_mode_type_t sec_mode;
1713 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1714 profile_info->profile_type != NET_DEVICE_MESH) {
1716 return CONNECTION_ERROR_INVALID_PARAMETER;
1719 if (profile_info->profile_type == NET_DEVICE_WIFI)
1720 sec_mode = profile_info->ProfileInfo.Wlan.security_info.sec_mode;
1722 sec_mode = profile_info->ProfileInfo.Mesh.security_info.sec_mode;
1726 case WLAN_SEC_MODE_NONE:
1727 *type = CONNECTION_WIFI_SECURITY_TYPE_NONE;
1729 case WLAN_SEC_MODE_WEP:
1730 *type = CONNECTION_WIFI_SECURITY_TYPE_WEP;
1732 case WLAN_SEC_MODE_IEEE8021X:
1733 *type = CONNECTION_WIFI_SECURITY_TYPE_EAP;
1735 case WLAN_SEC_MODE_WPA_PSK:
1736 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA_PSK;
1738 case WLAN_SEC_MODE_WPA2_PSK:
1739 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA2_PSK;
1741 case WLAN_SEC_MODE_SAE:
1742 *type = CONNECTION_WIFI_SECURITY_TYPE_SAE;
1746 return CONNECTION_ERROR_OPERATION_FAILED;
1751 return CONNECTION_ERROR_NONE;
1754 EXPORT_API int connection_profile_get_wifi_encryption_type(connection_profile_h profile, connection_wifi_encryption_type_e *type)
1758 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1760 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1761 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1763 return CONNECTION_ERROR_INVALID_PARAMETER;
1766 net_profile_info_t *profile_info = profile;
1768 if (profile_info->profile_type != NET_DEVICE_WIFI) {
1770 return CONNECTION_ERROR_INVALID_PARAMETER;
1773 switch (profile_info->ProfileInfo.Wlan.security_info.enc_mode) {
1775 case WLAN_ENC_MODE_NONE:
1776 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_NONE;
1778 case WLAN_ENC_MODE_WEP:
1779 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_WEP;
1781 case WLAN_ENC_MODE_TKIP:
1782 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP;
1784 case WLAN_ENC_MODE_AES:
1785 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_AES;
1787 case WLAN_ENC_MODE_TKIP_AES_MIXED:
1788 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP_AES_MIXED;
1792 return CONNECTION_ERROR_OPERATION_FAILED;
1797 return CONNECTION_ERROR_NONE;
1800 EXPORT_API int connection_profile_is_wifi_passphrase_required(connection_profile_h profile, bool* required)
1804 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1806 if (!(_connection_libnet_check_profile_validity(profile)) || required == NULL) {
1807 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1809 return CONNECTION_ERROR_INVALID_PARAMETER;
1812 net_profile_info_t *profile_info = profile;
1814 wlan_security_mode_type_t sec_mode;
1815 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1816 profile_info->profile_type != NET_DEVICE_MESH) {
1818 return CONNECTION_ERROR_INVALID_PARAMETER;
1821 if (profile_info->Favourite) {
1822 *required = false; //LCOV_EXCL_LINE
1823 CONN_UNLOCK; //LCOV_EXCL_LINE
1824 return CONNECTION_ERROR_NONE; //LCOV_EXCL_LINE
1827 if (profile_info->profile_type == NET_DEVICE_WIFI)
1828 sec_mode = profile_info->ProfileInfo.Wlan.security_info.sec_mode;
1830 sec_mode = profile_info->ProfileInfo.Mesh.security_info.sec_mode;
1834 case WLAN_SEC_MODE_NONE:
1837 case WLAN_SEC_MODE_WEP:
1838 case WLAN_SEC_MODE_IEEE8021X:
1839 case WLAN_SEC_MODE_WPA_PSK:
1840 case WLAN_SEC_MODE_WPA2_PSK:
1841 case WLAN_SEC_MODE_SAE:
1846 return CONNECTION_ERROR_OPERATION_FAILED;
1851 return CONNECTION_ERROR_NONE;
1854 EXPORT_API int connection_profile_set_wifi_passphrase(connection_profile_h profile, const char* passphrase)
1858 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1860 if (!(_connection_libnet_check_profile_validity(profile)) || passphrase == NULL) {
1861 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1863 return CONNECTION_ERROR_INVALID_PARAMETER;
1866 net_profile_info_t *profile_info = profile;
1868 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1869 profile_info->profile_type != NET_DEVICE_MESH) {
1871 return CONNECTION_ERROR_INVALID_PARAMETER;
1874 if (profile_info->profile_type == NET_DEVICE_WIFI)
1875 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.psk.pskKey,
1876 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1878 g_strlcpy(profile_info->ProfileInfo.Mesh.security_info.authentication.sae.saeKey,
1879 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1882 return CONNECTION_ERROR_NONE;
1885 EXPORT_API int connection_profile_is_wifi_wps_supported(connection_profile_h profile, bool* supported)
1889 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1891 if (!(_connection_libnet_check_profile_validity(profile)) || supported == NULL) {
1892 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1894 return CONNECTION_ERROR_INVALID_PARAMETER;
1897 net_profile_info_t *profile_info = profile;
1899 if (profile_info->profile_type != NET_DEVICE_WIFI) {
1901 return CONNECTION_ERROR_INVALID_PARAMETER;
1904 if (profile_info->ProfileInfo.Wlan.security_info.wps_support)
1910 return CONNECTION_ERROR_NONE;
1914 /* Cellular profile **********************************************************/
1915 EXPORT_API int connection_profile_get_cellular_service_type(connection_profile_h profile,
1916 connection_cellular_service_type_e* type)
1920 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1922 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1923 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1925 return CONNECTION_ERROR_INVALID_PARAMETER;
1928 net_profile_info_t *profile_info = profile;
1930 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1931 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1933 return CONNECTION_ERROR_INVALID_PARAMETER;
1936 *type = _profile_convert_to_connection_cellular_service_type(profile_info->ProfileInfo.Pdp.ServiceType);
1938 if (*type == CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN) {
1939 CONNECTION_LOG(CONNECTION_ERROR, "Invalid service type Passed"); //LCOV_EXCL_LINE
1940 CONN_UNLOCK; //LCOV_EXCL_LINE
1941 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1945 return CONNECTION_ERROR_NONE;
1948 EXPORT_API int connection_profile_get_cellular_apn(connection_profile_h profile, char** apn)
1952 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1954 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1955 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1957 return CONNECTION_ERROR_INVALID_PARAMETER;
1960 net_profile_info_t *profile_info = profile;
1962 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1963 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1964 CONN_UNLOCK; //LCOV_EXCL_LINE
1965 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1968 *apn = g_strdup(profile_info->ProfileInfo.Pdp.Apn);
1970 CONN_UNLOCK; //LCOV_EXCL_LINE
1971 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1975 return CONNECTION_ERROR_NONE;
1978 EXPORT_API int connection_profile_get_cellular_auth_info(connection_profile_h profile,
1979 connection_cellular_auth_type_e *type, char** user_name, char** password)
1983 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1985 if (!(_connection_libnet_check_profile_validity(profile)) ||
1986 type == NULL || user_name == NULL || password == NULL) {
1987 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1989 return CONNECTION_ERROR_INVALID_PARAMETER;
1992 net_profile_info_t *profile_info = profile;
1994 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1995 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1997 return CONNECTION_ERROR_INVALID_PARAMETER;
2000 switch (profile_info->ProfileInfo.Pdp.AuthInfo.AuthType) {
2002 case NET_PDP_AUTH_NONE:
2003 *type = CONNECTION_CELLULAR_AUTH_TYPE_NONE;
2005 case NET_PDP_AUTH_PAP:
2006 *type = CONNECTION_CELLULAR_AUTH_TYPE_PAP;
2008 case NET_PDP_AUTH_CHAP:
2009 *type = CONNECTION_CELLULAR_AUTH_TYPE_CHAP;
2013 return CONNECTION_ERROR_OPERATION_FAILED;
2017 *user_name = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.UserName);
2018 if (*user_name == NULL) {
2019 CONN_UNLOCK; //LCOV_EXCL_LINE
2020 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2023 *password = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.Password);
2024 if (*password == NULL) {
2025 g_free(*user_name); //LCOV_EXCL_LINE
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_home_url(connection_profile_h profile, char** home_url)
2038 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2040 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == 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 *home_url = g_strdup(profile_info->ProfileInfo.Pdp.HomeURL);
2055 if (*home_url == NULL) {
2056 CONN_UNLOCK; //LCOV_EXCL_LINE
2057 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2061 return CONNECTION_ERROR_NONE;
2064 EXPORT_API int connection_profile_get_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
2068 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2070 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
2071 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2073 return CONNECTION_ERROR_INVALID_PARAMETER;
2076 net_profile_info_t *profile_info = profile;
2078 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2079 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2081 return CONNECTION_ERROR_INVALID_PARAMETER;
2084 switch (profile_info->ProfileInfo.Pdp.PdnType) {
2086 case NET_PDN_TYPE_UNKNOWN:
2087 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
2089 case NET_PDN_TYPE_IPV4:
2090 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
2092 case NET_PDN_TYPE_IPV6:
2093 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
2095 case NET_PDN_TYPE_IPV4_IPV6:
2096 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
2100 return CONNECTION_ERROR_OPERATION_FAILED;
2105 return CONNECTION_ERROR_NONE;
2108 EXPORT_API int connection_profile_get_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
2112 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2114 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
2115 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2117 return CONNECTION_ERROR_INVALID_PARAMETER;
2120 net_profile_info_t *profile_info = profile;
2122 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2123 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2125 return CONNECTION_ERROR_INVALID_PARAMETER;
2128 switch (profile_info->ProfileInfo.Pdp.RoamPdnType) {
2130 case NET_PDN_TYPE_UNKNOWN:
2131 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
2133 case NET_PDN_TYPE_IPV4:
2134 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
2136 case NET_PDN_TYPE_IPV6:
2137 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
2139 case NET_PDN_TYPE_IPV4_IPV6:
2140 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
2144 return CONNECTION_ERROR_OPERATION_FAILED;
2149 return CONNECTION_ERROR_NONE;
2152 EXPORT_API int connection_profile_is_cellular_roaming(connection_profile_h profile, bool* is_roaming)
2156 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2158 if (!(_connection_libnet_check_profile_validity(profile)) || is_roaming == NULL) {
2159 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2161 return CONNECTION_ERROR_INVALID_PARAMETER;
2164 net_profile_info_t *profile_info = profile;
2166 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2167 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2169 return CONNECTION_ERROR_INVALID_PARAMETER;
2172 if (profile_info->ProfileInfo.Pdp.Roaming)
2175 *is_roaming = false;
2178 return CONNECTION_ERROR_NONE;
2181 EXPORT_API int connection_profile_is_cellular_hidden(connection_profile_h profile, bool* is_hidden)
2185 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2187 if (!(_connection_libnet_check_profile_validity(profile)) || is_hidden == NULL) {
2188 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2190 return CONNECTION_ERROR_INVALID_PARAMETER;
2193 net_profile_info_t *profile_info = profile;
2195 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2196 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2198 return CONNECTION_ERROR_INVALID_PARAMETER;
2201 if (profile_info->ProfileInfo.Pdp.Hidden)
2207 return CONNECTION_ERROR_NONE;
2210 EXPORT_API int connection_profile_is_cellular_editable(connection_profile_h profile, bool* is_editable)
2214 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2216 if (!(_connection_libnet_check_profile_validity(profile)) || is_editable == NULL) {
2217 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2219 return CONNECTION_ERROR_INVALID_PARAMETER;
2222 net_profile_info_t *profile_info = profile;
2224 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2225 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2227 return CONNECTION_ERROR_INVALID_PARAMETER;
2230 if (profile_info->ProfileInfo.Pdp.Editable)
2231 *is_editable = true;
2233 *is_editable = false;
2236 return CONNECTION_ERROR_NONE;
2239 EXPORT_API int connection_profile_is_cellular_default(connection_profile_h profile, bool* is_default)
2243 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2245 if (!(_connection_libnet_check_profile_validity(profile)) || is_default == NULL) {
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 if (profile_info->ProfileInfo.Pdp.DefaultConn)
2262 *is_default = false;
2265 return CONNECTION_ERROR_NONE;
2268 EXPORT_API int connection_profile_set_cellular_service_type(connection_profile_h profile,
2269 connection_cellular_service_type_e service_type)
2273 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2275 if (!(_connection_libnet_check_profile_validity(profile))) {
2276 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2278 return CONNECTION_ERROR_INVALID_PARAMETER;
2281 net_profile_info_t *profile_info = profile;
2283 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2284 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2286 return CONNECTION_ERROR_INVALID_PARAMETER;
2289 switch (service_type) {
2291 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
2292 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_INTERNET;
2294 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
2295 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_MMS;
2297 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
2298 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_INTERNET;
2300 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
2301 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_MMS;
2303 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
2304 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_TETHERING;
2306 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
2307 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_APPLICATION;
2309 case CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN:
2312 return CONNECTION_ERROR_INVALID_PARAMETER;
2317 return CONNECTION_ERROR_NONE;
2320 EXPORT_API int connection_profile_set_cellular_apn(connection_profile_h profile, const char* apn)
2324 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2326 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
2327 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2329 return CONNECTION_ERROR_INVALID_PARAMETER;
2332 net_profile_info_t *profile_info = profile;
2334 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2335 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2337 return CONNECTION_ERROR_INVALID_PARAMETER;
2340 g_strlcpy(profile_info->ProfileInfo.Pdp.Apn, apn, NET_PDP_APN_LEN_MAX+1);
2343 return CONNECTION_ERROR_NONE;
2346 EXPORT_API int connection_profile_set_cellular_auth_info(connection_profile_h profile,
2347 connection_cellular_auth_type_e type, const char* user_name, const char* password)
2351 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2353 if (!(_connection_libnet_check_profile_validity(profile)) ||
2354 user_name == NULL || password == NULL) {
2355 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2357 return CONNECTION_ERROR_INVALID_PARAMETER;
2360 net_profile_info_t *profile_info = profile;
2362 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2363 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2365 return CONNECTION_ERROR_INVALID_PARAMETER;
2370 case CONNECTION_CELLULAR_AUTH_TYPE_NONE:
2371 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_NONE;
2373 case CONNECTION_CELLULAR_AUTH_TYPE_PAP:
2374 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_PAP;
2376 case CONNECTION_CELLULAR_AUTH_TYPE_CHAP:
2377 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_CHAP;
2381 return CONNECTION_ERROR_INVALID_PARAMETER;
2385 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.UserName, user_name, NET_PDP_AUTH_USERNAME_LEN_MAX+1);
2386 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.Password, password, NET_PDP_AUTH_PASSWORD_LEN_MAX+1);
2389 return CONNECTION_ERROR_NONE;
2392 EXPORT_API int connection_profile_set_cellular_home_url(connection_profile_h profile, const char* home_url)
2396 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2398 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
2399 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2401 return CONNECTION_ERROR_INVALID_PARAMETER;
2404 net_profile_info_t *profile_info = profile;
2406 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2407 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2409 return CONNECTION_ERROR_INVALID_PARAMETER;
2412 g_strlcpy(profile_info->ProfileInfo.Pdp.HomeURL, home_url, NET_HOME_URL_LEN_MAX);
2415 return CONNECTION_ERROR_NONE;
2418 EXPORT_API int connection_profile_set_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
2422 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2424 if (!(_connection_libnet_check_profile_validity(profile))) {
2425 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2427 return CONNECTION_ERROR_INVALID_PARAMETER;
2430 net_profile_info_t *profile_info = profile;
2432 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2433 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2435 return CONNECTION_ERROR_INVALID_PARAMETER;
2440 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
2441 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4;
2443 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
2444 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV6;
2446 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
2447 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4_IPV6;
2448 CONNECTION_LOG(CONNECTION_WARN, "DEPRECATION WARNINIG: CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6 " \
2449 "from next release. Use CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6 instead");
2451 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6:
2452 profile_info->ProfileInfo.Pdp.PdnType = NET_PDN_TYPE_IPV4_IPV6;
2456 return CONNECTION_ERROR_INVALID_PARAMETER;
2461 return CONNECTION_ERROR_NONE;
2464 EXPORT_API int connection_profile_set_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
2468 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2470 if (!(_connection_libnet_check_profile_validity(profile))) {
2471 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2473 return CONNECTION_ERROR_INVALID_PARAMETER;
2476 net_profile_info_t *profile_info = profile;
2478 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2479 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2481 return CONNECTION_ERROR_INVALID_PARAMETER;
2486 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
2487 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4;
2489 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
2490 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV6;
2492 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
2493 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4_IPV6;
2494 CONNECTION_LOG(CONNECTION_WARN, "DEPRECATION WARNINIG: CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6 " \
2495 "from next release. Use CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6 instead");
2497 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6:
2498 profile_info->ProfileInfo.Pdp.RoamPdnType = NET_PDN_TYPE_IPV4_IPV6;
2502 return CONNECTION_ERROR_INVALID_PARAMETER;
2507 return CONNECTION_ERROR_NONE;
2510 EXPORT_API int connection_profile_get_ipv6_state(connection_profile_h profile, connection_profile_state_e *state)
2514 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2515 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2517 if (!(_connection_libnet_check_profile_validity(profile)) ||
2519 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2521 return CONNECTION_ERROR_INVALID_PARAMETER;
2524 net_profile_info_t *profile_info = profile;
2525 *state = _profile_convert_to_cp_state(profile_info->ProfileState6);
2528 return CONNECTION_ERROR_NONE;
2531 EXPORT_API int connection_profile_set_dns_config_type(connection_profile_h profile,
2532 connection_address_family_e address_family, connection_dns_config_type_e type)
2536 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2537 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2539 if (!(_connection_libnet_check_profile_validity(profile))) {
2540 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2542 return CONNECTION_ERROR_INVALID_PARAMETER;
2545 if ((address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2546 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
2547 (type != CONNECTION_DNS_CONFIG_TYPE_STATIC &&
2548 type != CONNECTION_DNS_CONFIG_TYPE_DYNAMIC)) {
2549 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
2550 CONN_UNLOCK; //LCOV_EXCL_LINE
2551 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
2554 net_dns_config_type_t *profileType = NULL;
2555 net_dns_config_type_t *profileType6 = NULL;
2556 net_profile_info_t *profile_info = profile;
2558 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2559 if (net_info == NULL) {
2560 CONN_UNLOCK; //LCOV_EXCL_LINE
2561 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
2564 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
2565 profileType = &net_info->DnsConfigType;
2566 net_info->DnsAddr[0].Data.Ipv4.s_addr = 0;
2567 net_info->DnsAddr[1].Data.Ipv4.s_addr = 0;
2568 *profileType = type;
2570 profileType6 = &net_info->DnsConfigType6;
2571 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[0].Data.Ipv6);
2572 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[1].Data.Ipv6);
2573 *profileType6 = type;
2577 return CONNECTION_ERROR_NONE;
2580 EXPORT_API int connection_profile_get_dns_config_type(connection_profile_h profile,
2581 connection_address_family_e address_family, connection_dns_config_type_e *type)
2585 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2586 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2588 if (!(_connection_libnet_check_profile_validity(profile)) ||
2589 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2590 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
2592 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2594 return CONNECTION_ERROR_INVALID_PARAMETER;
2597 net_dns_config_type_t profileType;
2598 net_profile_info_t *profile_info = profile;
2599 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2600 if (net_info == NULL) {
2601 CONN_UNLOCK; //LCOV_EXCL_LINE
2602 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
2605 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
2606 profileType = net_info->DnsConfigType;
2608 profileType = net_info->DnsConfigType6;
2610 switch (profileType) {
2611 case NET_DNS_CONFIG_TYPE_STATIC:
2612 *type = CONNECTION_DNS_CONFIG_TYPE_STATIC;
2614 case NET_DNS_CONFIG_TYPE_DYNAMIC:
2615 *type = CONNECTION_DNS_CONFIG_TYPE_DYNAMIC;
2618 *type = CONNECTION_DNS_CONFIG_TYPE_NONE;
2623 return CONNECTION_ERROR_NONE;
2626 EXPORT_API int connection_profile_set_prefix_length(connection_profile_h profile,
2627 connection_address_family_e address_family, int prefix_len)
2631 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2632 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2634 if (!(_connection_libnet_check_profile_validity(profile)) ||
2635 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2636 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
2637 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2639 return CONNECTION_ERROR_INVALID_PARAMETER;
2642 net_profile_info_t *profile_info = profile;
2643 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2644 if (net_info == NULL) {
2645 CONN_UNLOCK; //LCOV_EXCL_LINE
2646 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
2649 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
2650 net_info->PrefixLen = prefix_len;
2651 net_info->SubnetMask.Data.Ipv4.s_addr = __profile_convert_prefix_len_to_netmask(prefix_len);
2653 net_info->PrefixLen6 = prefix_len;
2656 return CONNECTION_ERROR_NONE;
2659 EXPORT_API int connection_profile_get_prefix_length(connection_profile_h profile,
2660 connection_address_family_e address_family, int *prefix_len)
2664 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2665 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2667 if (!(_connection_libnet_check_profile_validity(profile)) ||
2668 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2669 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
2670 prefix_len == NULL) {
2671 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2673 return CONNECTION_ERROR_INVALID_PARAMETER;
2676 net_profile_info_t *profile_info = profile;
2677 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2678 if (net_info == NULL) {
2679 CONN_UNLOCK; //LCOV_EXCL_LINE
2680 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
2683 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
2684 *prefix_len = net_info->PrefixLen;
2685 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
2686 *prefix_len = net_info->PrefixLen6;
2689 return CONNECTION_ERROR_NONE;
2692 EXPORT_API int connection_profile_is_ethernet_eap_enabled(connection_profile_h profile, bool *enabled)
2696 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2697 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2699 if (!(_connection_libnet_check_profile_validity(profile)) ||
2701 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2703 return CONNECTION_ERROR_INVALID_PARAMETER;
2706 int ret = _connection_libnet_ethernet_eap_enabled(enabled);
2707 if (ret != CONNECTION_ERROR_NONE) {
2708 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get EAP over Ethernet enabled status."); //LCOV_EXCL_LINE
2709 CONN_UNLOCK; //LCOV_EXCL_LINE
2710 return ret; //LCOV_EXCL_LINE
2713 CONNECTION_LOG(CONNECTION_INFO, "EAP over Ethernet enabled status: [%s]", enabled ? "true" : "false");
2716 return CONNECTION_ERROR_NONE;
2719 EXPORT_API int connection_profile_enable_ethernet_eap(connection_profile_h profile, bool enable)
2723 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2724 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2726 if (!_connection_libnet_check_profile_validity(profile)) {
2727 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2729 return CONNECTION_ERROR_INVALID_PARAMETER;
2732 net_profile_info_t *profile_info = profile;
2733 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2736 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2737 CONN_UNLOCK; //LCOV_EXCL_LINE
2738 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2741 int ret = _connection_libnet_enable_ethernet_eap(enable, net_info->ProfileName);
2742 if (ret != CONNECTION_ERROR_NONE) {
2743 CONNECTION_LOG(CONNECTION_ERROR, "Failed to enable EAP over ethernet"); //LCOV_EXCL_LINE
2744 CONN_UNLOCK; //LCOV_EXCL_LINE
2745 return ret; //LCOV_EXCL_LINE
2748 net_info->use_eapol = enable;
2751 return CONNECTION_ERROR_NONE;
2754 EXPORT_API int connection_profile_set_ethernet_eap_type(connection_profile_h profile,
2755 connection_ethernet_eap_type_e type)
2759 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2760 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2762 if (!_connection_libnet_check_profile_validity(profile)) {
2763 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2765 return CONNECTION_ERROR_INVALID_PARAMETER;
2768 net_profile_info_t *profile_info = profile;
2769 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2771 if (!net_info || net_info->use_eapol == false) {
2772 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2773 CONN_UNLOCK; //LCOV_EXCL_LINE
2774 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2776 net_info->eap.eap_type = type;
2779 return CONNECTION_ERROR_NONE;
2782 EXPORT_API int connection_profile_get_ethernet_eap_type(connection_profile_h profile,
2783 connection_ethernet_eap_type_e *type)
2787 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2788 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2790 if (!_connection_libnet_check_profile_validity(profile) || type == 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 || net_info->use_eapol == false) {
2800 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2801 CONN_UNLOCK; //LCOV_EXCL_LINE
2802 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2805 *type = net_info->eap.eap_type;
2808 return CONNECTION_ERROR_NONE;
2811 EXPORT_API int connection_profile_set_ethernet_eap_passphrase(connection_profile_h profile,
2812 const char *user_name, const char *password)
2816 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2817 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2819 if (!_connection_libnet_check_profile_validity(profile) ||
2820 user_name == NULL || password == NULL) {
2821 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2823 return CONNECTION_ERROR_INVALID_PARAMETER;
2826 net_profile_info_t *profile_info = profile;
2827 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2829 if (!net_info || false == __profile_ethernet_validate_eap_passphrase(net_info)) {
2830 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
2832 return CONNECTION_ERROR_INVALID_OPERATION;
2835 g_strlcpy(net_info->eap.username, user_name, NET_USERNAME_LEN+1);
2836 g_strlcpy(net_info->eap.password, password, NET_PASSWORD_LEN+1);
2839 return CONNECTION_ERROR_NONE;
2842 EXPORT_API int connection_profile_get_ethernet_eap_passphrase(connection_profile_h profile,
2843 char **user_name, bool *is_password_set)
2847 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2848 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2850 if (!_connection_libnet_check_profile_validity(profile) ||
2851 user_name == NULL || is_password_set == NULL) {
2852 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2854 return CONNECTION_ERROR_INVALID_PARAMETER;
2857 net_profile_info_t *profile_info = profile;
2858 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2860 if (!net_info || false == __profile_ethernet_validate_eap_passphrase(net_info)) {
2861 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
2863 return CONNECTION_ERROR_INVALID_OPERATION;
2866 *user_name = strdup(net_info->eap.username);
2867 if (*user_name == NULL) {
2868 CONN_UNLOCK; //LCOV_EXCL_LINE
2869 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2872 if (strlen(net_info->eap.password) > 0)
2873 *is_password_set = true;
2875 *is_password_set = false;
2878 return CONNECTION_ERROR_NONE;
2881 EXPORT_API int connection_profile_set_ethernet_eap_identity(connection_profile_h profile,
2882 const char *identity)
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 g_strlcpy(net_info->eap.username, identity, NET_USERNAME_LEN+1);
2908 return CONNECTION_ERROR_NONE;
2911 EXPORT_API int connection_profile_get_ethernet_eap_identity(connection_profile_h profile,
2916 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2917 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2919 if (!_connection_libnet_check_profile_validity(profile) ||
2920 identity == NULL ) {
2921 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2923 return CONNECTION_ERROR_INVALID_PARAMETER;
2926 net_profile_info_t *profile_info = profile;
2927 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2929 if (!net_info || false == __profile_ethernet_validate_eap_identity(net_info)) {
2930 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2931 CONN_UNLOCK; //LCOV_EXCL_LINE
2932 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2935 *identity = strdup(net_info->eap.username);
2936 if (*identity == NULL) {
2937 CONN_UNLOCK; //LCOV_EXCL_LINE
2938 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2942 return CONNECTION_ERROR_NONE;
2945 EXPORT_API int connection_profile_set_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 g_strlcpy(net_info->eap.ca_cert_filename, file, NET_CA_CERT_FILENAME_LEN+1);
2972 return CONNECTION_ERROR_NONE;
2975 EXPORT_API int connection_profile_get_ethernet_eap_ca_cert_file(connection_profile_h profile,
2980 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2981 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2983 if (!_connection_libnet_check_profile_validity(profile) ||
2985 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2987 return CONNECTION_ERROR_INVALID_PARAMETER;
2990 net_profile_info_t *profile_info = profile;
2991 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2993 if (!net_info || false == __profile_ethernet_validate_eap_ca_cert_file(net_info)) {
2994 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
2996 return CONNECTION_ERROR_INVALID_OPERATION;
2999 *file = strdup(net_info->eap.ca_cert_filename);
3000 if (*file == NULL) {
3001 CONN_UNLOCK; //LCOV_EXCL_LINE
3002 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3006 return CONNECTION_ERROR_NONE;
3009 EXPORT_API int connection_profile_set_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 g_strlcpy(net_info->eap.client_cert_filename, file, NET_CLIENT_CERT_FILENAME_LEN+1);
3036 return CONNECTION_ERROR_NONE;
3039 EXPORT_API int connection_profile_get_ethernet_eap_client_cert_file(connection_profile_h profile,
3044 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3045 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3047 if (!_connection_libnet_check_profile_validity(profile) ||
3049 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3051 return CONNECTION_ERROR_INVALID_PARAMETER;
3054 net_profile_info_t *profile_info = profile;
3055 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3057 if (!net_info || false == __profile_ethernet_validate_eap_client_cert_file(net_info)) {
3058 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3060 return CONNECTION_ERROR_INVALID_OPERATION;
3063 *file = strdup(net_info->eap.client_cert_filename);
3064 if (*file == NULL) {
3065 CONN_UNLOCK; //LCOV_EXCL_LINE
3066 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3070 return CONNECTION_ERROR_NONE;
3073 EXPORT_API int connection_profile_get_ethernet_eap_private_key_file(connection_profile_h profile,
3078 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3079 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3081 if (!_connection_libnet_check_profile_validity(profile) ||
3083 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3085 return CONNECTION_ERROR_INVALID_PARAMETER;
3088 net_profile_info_t *profile_info = profile;
3089 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3091 if (!net_info || false == __profile_ethernet_validate_eap_private_key_file(net_info)) {
3092 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3094 return CONNECTION_ERROR_INVALID_OPERATION;
3097 *file = strdup(net_info->eap.private_key_filename);
3098 if (*file == NULL) {
3099 CONN_UNLOCK; //LCOV_EXCL_LINE
3100 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3104 return CONNECTION_ERROR_NONE;
3107 EXPORT_API int connection_profile_set_ethernet_eap_private_key_info(connection_profile_h profile,
3108 const char *file, const char *password)
3112 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3113 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3115 if (!_connection_libnet_check_profile_validity(profile) ||
3116 file == NULL || password == NULL) {
3117 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3119 return CONNECTION_ERROR_INVALID_PARAMETER;
3122 net_profile_info_t *profile_info = profile;
3123 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3125 if (!net_info || false == __profile_ethernet_validate_eap_private_key_file(net_info)) {
3126 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3128 return CONNECTION_ERROR_INVALID_OPERATION;
3131 g_strlcpy(net_info->eap.private_key_filename, file, NET_PRIVATE_KEY_FILENAME_LEN+1);
3132 g_strlcpy(net_info->eap.private_key_passwd, password, NET_PRIVATE_KEY_PASSWD_LEN+1);
3135 return CONNECTION_ERROR_NONE;
3138 EXPORT_API int connection_profile_set_ethernet_eap_anonymous_identity(connection_profile_h profile,
3139 const 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 g_strlcpy(net_info->eap.anonymous_identity, anonymous_identity, NET_USERNAME_LEN+1);
3165 return CONNECTION_ERROR_NONE;
3168 EXPORT_API int connection_profile_get_ethernet_eap_anonymous_identity(connection_profile_h profile,
3169 char **anonymous_identity)
3173 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3174 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3176 if (!_connection_libnet_check_profile_validity(profile) ||
3177 anonymous_identity == NULL ) {
3178 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3180 return CONNECTION_ERROR_INVALID_PARAMETER;
3183 net_profile_info_t *profile_info = profile;
3184 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3186 if (!net_info || false == __profile_ethernet_validate_eap_anonymous_identity(net_info)) {
3187 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3189 return CONNECTION_ERROR_INVALID_OPERATION;
3192 *anonymous_identity= strdup(net_info->eap.anonymous_identity);
3193 if (*anonymous_identity== NULL) {
3194 CONN_UNLOCK; //LCOV_EXCL_LINE
3195 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3199 return CONNECTION_ERROR_NONE;
3202 EXPORT_API int connection_profile_set_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 g_strlcpy(net_info->eap.pac_filename, file, NET_PAC_FILENAME_LEN+1);
3229 return CONNECTION_ERROR_NONE;
3232 EXPORT_API int connection_profile_get_ethernet_eap_pac_file(connection_profile_h profile,
3237 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3238 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3240 if (!_connection_libnet_check_profile_validity(profile) ||
3242 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3244 return CONNECTION_ERROR_INVALID_PARAMETER;
3247 net_profile_info_t *profile_info = profile;
3248 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3250 if (!net_info || false == __profile_ethernet_validate_eap_pac_file(net_info)) {
3251 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3253 return CONNECTION_ERROR_INVALID_OPERATION;
3256 *file = strdup(net_info->eap.pac_filename);
3257 if (*file == NULL) {
3258 CONN_UNLOCK; //LCOV_EXCL_LINE
3259 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3263 return CONNECTION_ERROR_NONE;
3266 EXPORT_API int connection_profile_set_ethernet_eap_auth_type(connection_profile_h profile,
3267 connection_ethernet_eap_auth_type_e type)
3271 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3272 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3274 if (!_connection_libnet_check_profile_validity(profile)) {
3275 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3277 return CONNECTION_ERROR_INVALID_PARAMETER;
3280 net_profile_info_t *profile_info = profile;
3281 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3283 if (!net_info || false == __profile_ethernet_validate_eap_auth_type(net_info)) {
3284 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3286 return CONNECTION_ERROR_INVALID_OPERATION;
3289 net_info->eap.eap_auth = type;
3292 return CONNECTION_ERROR_NONE;
3295 EXPORT_API int connection_profile_get_ethernet_eap_auth_type(connection_profile_h profile,
3296 connection_ethernet_eap_auth_type_e *type)
3300 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3301 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3303 if (!_connection_libnet_check_profile_validity(profile) || type == NULL) {
3304 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3306 return CONNECTION_ERROR_INVALID_PARAMETER;
3309 net_profile_info_t *profile_info = profile;
3310 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3312 if (!net_info || false == __profile_ethernet_validate_eap_auth_type(net_info)) {
3313 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3315 return CONNECTION_ERROR_INVALID_OPERATION;
3318 *type = net_info->eap.eap_auth;
3321 return CONNECTION_ERROR_NONE;
3324 EXPORT_API int connection_profile_set_ethernet_eap_peap_version(connection_profile_h profile,
3325 connection_ethernet_eap_peap_version_e version)
3329 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3330 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3332 if (!_connection_libnet_check_profile_validity(profile)) {
3333 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3335 return CONNECTION_ERROR_INVALID_PARAMETER;
3338 net_profile_info_t *profile_info = profile;
3339 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3341 if (!net_info || false == __profile_ethernet_validate_eap_peap_version(net_info)) {
3342 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3344 return CONNECTION_ERROR_INVALID_OPERATION;
3346 net_info->eap.peap_version= version;
3349 return CONNECTION_ERROR_NONE;
3352 EXPORT_API int connection_profile_get_ethernet_eap_peap_version(connection_profile_h profile,
3353 connection_ethernet_eap_peap_version_e *version)
3357 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3358 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3360 if (!_connection_libnet_check_profile_validity(profile) || version == NULL) {
3361 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3363 return CONNECTION_ERROR_INVALID_PARAMETER;
3366 net_profile_info_t *profile_info = profile;
3367 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3369 if (!net_info || false == __profile_ethernet_validate_eap_peap_version(net_info)) {
3370 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3372 return CONNECTION_ERROR_INVALID_OPERATION;
3375 *version = net_info->eap.peap_version;
3378 return CONNECTION_ERROR_NONE;