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->profile_info.pdp.net_info;
36 return &profile_info->profile_info.wlan.net_info;
37 case NET_DEVICE_ETHERNET:
38 return &profile_info->profile_info.ethernet.net_info; //LCOV_EXCL_LINE
39 case NET_DEVICE_BLUETOOTH:
40 return &profile_info->profile_info.bluetooth.net_info; //LCOV_EXCL_LINE
42 return &profile_info->profile_info.mesh.net_info; //LCOV_EXCL_LINE
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->profile_state = NET_STATE_TYPE_IDLE;
215 profile_info->profile_info.pdp.pdn_type = NET_PDN_TYPE_UNKNOWN;
216 profile_info->profile_info.pdp.roam_pdn_type = NET_PDN_TYPE_UNKNOWN;
217 profile_info->profile_info.pdp.net_info.ip_config_type = NET_IP_CONFIG_TYPE_OFF;
218 profile_info->profile_info.pdp.net_info.proxy_method = NET_PROXY_TYPE_DIRECT;
219 g_strlcpy(profile_info->profile_info.pdp.keyword, keyword, NET_PDP_APN_LEN_MAX);
221 if (_connection_vconf_get_int(_connection_get_default_handle(),
222 VCONF_TELEPHONY_DEFAULT_DATA_SERVICE,
223 &default_subscriber_id) != 0)
224 CONNECTION_LOG(CONNECTION_ERROR, //LCOV_EXCL_LINE
225 "Failed to get VCONF_TELEPHONY_DEFAULT_DATA_SERVICE");
227 profile = (connection_profile_h)profile_info;
228 _connection_libnet_set_cellular_subscriber_id(profile, default_subscriber_id);
231 static int __profile_init_wifi_profile(net_profile_info_t *profile_info)
233 GSList *interface_list = NULL;
234 const char *interface_name = NULL;
236 if (net_get_wifi_interface_list(NULL, &interface_list) != NET_ERR_NONE) {
237 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get interface list");
238 return CONNECTION_ERROR_OPERATION_FAILED;
241 interface_name = interface_list->data;
242 g_strlcpy(profile_info->profile_name, interface_name, NET_PROFILE_NAME_LEN_MAX);
243 g_strlcpy(profile_info->profile_info.wlan.net_info.profile_name,
244 interface_name, NET_PROFILE_NAME_LEN_MAX);
246 profile_info->profile_type = NET_DEVICE_WIFI;
247 profile_info->profile_state = NET_STATE_TYPE_IDLE;
248 profile_info->profile_info.wlan.net_info.ip_config_type = NET_IP_CONFIG_TYPE_OFF;
249 profile_info->profile_info.wlan.net_info.proxy_method = NET_PROXY_TYPE_DIRECT;
250 profile_info->profile_info.wlan.wlan_mode = NETPM_WLAN_CONNMODE_AUTO;
251 profile_info->profile_info.wlan.security_info.sec_mode = WLAN_SEC_MODE_NONE;
252 profile_info->profile_info.wlan.security_info.enc_mode = WLAN_ENC_MODE_NONE;
254 g_slist_free_full(interface_list, g_free);
255 return CONNECTION_ERROR_NONE;
259 static char *__profile_get_ethernet_proxy(void)
263 proxy = _connection_vconf_get_str(_connection_get_default_handle(), VCONFKEY_NETWORK_PROXY);
266 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get system proxy");
274 static unsigned char __profile_convert_netmask_to_prefix_len(const char *netmask)
279 in_addr_t mask = inet_network(netmask);
280 in_addr_t host = ~mask;
281 unsigned char prefix_len = 0;
283 /* a valid netmask must be 2^n - 1 */
284 if ((host & (host + 1)) != 0)
287 for (; mask; mask <<= 1)
293 static in_addr_t __profile_convert_prefix_len_to_netmask(int prefix_len)
295 return (prefix_len ? (in_addr_t) 0xFFFFFFFFu >> (32 - prefix_len) : 0);
299 connection_cellular_service_type_e _profile_convert_to_connection_cellular_service_type(net_service_type_t svc_type)
302 case NET_SERVICE_INTERNET:
303 return CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET;
304 case NET_SERVICE_MMS:
305 return CONNECTION_CELLULAR_SERVICE_TYPE_MMS;
306 case NET_SERVICE_PREPAID_INTERNET:
307 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET;
308 case NET_SERVICE_PREPAID_MMS:
309 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS;
310 case NET_SERVICE_TETHERING:
311 return CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING;
312 case NET_SERVICE_APPLICATION:
313 return CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION;
315 return CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
319 connection_profile_state_e _profile_convert_to_cp_state(net_state_type_t state)
321 connection_profile_state_e cp_state;
324 case NET_STATE_TYPE_ONLINE:
325 case NET_STATE_TYPE_READY:
326 cp_state = CONNECTION_PROFILE_STATE_CONNECTED;
328 case NET_STATE_TYPE_IDLE:
329 case NET_STATE_TYPE_FAILURE:
330 case NET_STATE_TYPE_DISCONNECT:
331 cp_state = CONNECTION_PROFILE_STATE_DISCONNECTED;
333 case NET_STATE_TYPE_ASSOCIATION:
334 cp_state = CONNECTION_PROFILE_STATE_ASSOCIATION;
336 case NET_STATE_TYPE_CONFIGURATION:
337 cp_state = CONNECTION_PROFILE_STATE_CONFIGURATION;
346 net_service_type_t _connection_profile_convert_to_libnet_cellular_service_type(connection_cellular_service_type_e svc_type)
349 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
350 return NET_SERVICE_INTERNET;
351 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
352 return NET_SERVICE_MMS;
353 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
354 return NET_SERVICE_PREPAID_INTERNET;
355 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
356 return NET_SERVICE_PREPAID_MMS;
357 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
358 return NET_SERVICE_TETHERING;
359 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
360 return NET_SERVICE_APPLICATION;
362 return NET_SERVICE_UNKNOWN;
366 net_state_type_t _connection_profile_convert_to_net_state(connection_profile_state_e state)
368 net_state_type_t libnet_state = NET_STATE_TYPE_UNKNOWN;
371 case CONNECTION_PROFILE_STATE_CONNECTED:
372 libnet_state = NET_STATE_TYPE_ONLINE;
374 case CONNECTION_PROFILE_STATE_DISCONNECTED:
375 libnet_state = NET_STATE_TYPE_IDLE;
377 case CONNECTION_PROFILE_STATE_ASSOCIATION:
378 libnet_state = NET_STATE_TYPE_ASSOCIATION;
380 case CONNECTION_PROFILE_STATE_CONFIGURATION:
381 libnet_state = NET_STATE_TYPE_CONFIGURATION;
389 /* Connection profile ********************************************************/
390 EXPORT_API int connection_profile_create(connection_profile_type_e type, const char* keyword, connection_profile_h* profile)
394 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
396 if (type == CONNECTION_PROFILE_TYPE_CELLULAR)
397 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
398 else if (type == CONNECTION_PROFILE_TYPE_WIFI)
399 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
401 if (type != CONNECTION_PROFILE_TYPE_CELLULAR &&
402 type != CONNECTION_PROFILE_TYPE_WIFI) {
403 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
404 CONN_UNLOCK; //LCOV_EXCL_LINE
405 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
408 if (profile == NULL) {
409 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
410 CONN_UNLOCK; //LCOV_EXCL_LINE
411 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
414 int rv = _connection_libnet_check_profile_privilege();
415 if (rv == CONNECTION_ERROR_PERMISSION_DENIED) {
416 CONN_UNLOCK; //LCOV_EXCL_LINE
417 return rv; //LCOV_EXCL_LINE
418 } else if (rv != CONNECTION_ERROR_NONE) {
419 CONNECTION_LOG(CONNECTION_ERROR, "Failed to create profile"); //LCOV_EXCL_LINE
420 CONN_UNLOCK; //LCOV_EXCL_LINE
421 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
424 net_profile_info_t *profile_info = g_try_malloc0(sizeof(net_profile_info_t));
425 if (profile_info == NULL) {
426 CONN_UNLOCK; //LCOV_EXCL_LINE
427 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
430 if (type == CONNECTION_PROFILE_TYPE_CELLULAR) {
431 if (keyword == NULL) {
432 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
433 g_free(profile_info); //LCOV_EXCL_LINE
434 CONN_UNLOCK; //LCOV_EXCL_LINE
435 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
437 __profile_init_cellular_profile(profile_info, keyword);
438 } else if (type == CONNECTION_PROFILE_TYPE_WIFI) {
439 rv = __profile_init_wifi_profile(profile_info);
440 if (rv != CONNECTION_ERROR_NONE) {
441 g_free(profile_info); //LCOV_EXCL_LINE
442 CONN_UNLOCK; //LCOV_EXCL_LINE
443 return rv; //LCOV_EXCL_LINE
447 *profile = (connection_profile_h)profile_info;
448 _connection_libnet_add_to_profile_list(*profile);
451 return CONNECTION_ERROR_NONE;
454 EXPORT_API int connection_profile_destroy(connection_profile_h profile)
458 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
460 if (!(_connection_libnet_check_profile_validity(profile))) {
461 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
463 return CONNECTION_ERROR_INVALID_PARAMETER;
466 _connection_libnet_remove_from_profile_list(profile);
469 return CONNECTION_ERROR_NONE;
472 EXPORT_API int connection_profile_clone(connection_profile_h* cloned_profile, connection_profile_h origin_profile)
476 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
478 if (!(_connection_libnet_check_profile_validity(origin_profile)) || cloned_profile == NULL) {
479 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
481 return CONNECTION_ERROR_INVALID_PARAMETER;
484 *cloned_profile = g_try_malloc0(sizeof(net_profile_info_t));
485 if (*cloned_profile == NULL) {
486 CONN_UNLOCK; //LCOV_EXCL_LINE
487 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
490 memcpy(*cloned_profile, origin_profile, sizeof(net_profile_info_t));
491 _connection_libnet_add_to_profile_list(*cloned_profile);
494 return CONNECTION_ERROR_NONE;
497 EXPORT_API int connection_profile_get_id(connection_profile_h profile, char** profile_id)
501 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
503 if (!(_connection_libnet_check_profile_validity(profile)) || profile_id == NULL) {
504 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
506 return CONNECTION_ERROR_INVALID_PARAMETER;
509 net_profile_info_t *profile_info = profile;
511 char *prof_id = strrchr(profile_info->profile_name, '/');
512 if (prof_id == NULL) {
513 CONN_UNLOCK; //LCOV_EXCL_LINE
514 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
518 *profile_id = g_strdup(prof_id);
520 if (*profile_id == NULL) {
521 CONN_UNLOCK; //LCOV_EXCL_LINE
522 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
526 return CONNECTION_ERROR_NONE;
529 EXPORT_API int connection_profile_get_name(connection_profile_h profile, char** profile_name)
533 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
535 if (!(_connection_libnet_check_profile_validity(profile)) || profile_name == NULL) {
536 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
538 return CONNECTION_ERROR_INVALID_PARAMETER;
541 net_profile_info_t *profile_info = profile;
543 switch (profile_info->profile_type) {
544 case NET_DEVICE_CELLULAR:
545 *profile_name = g_strdup(profile_info->profile_info.pdp.keyword);
547 case NET_DEVICE_WIFI:
548 *profile_name = g_strdup(profile_info->profile_info.wlan.essid);
550 case NET_DEVICE_ETHERNET:
551 *profile_name = g_strdup(profile_info->profile_info.ethernet.net_info.dev_name); //LCOV_EXCL_LINE
552 break; //LCOV_EXCL_LINE
553 case NET_DEVICE_BLUETOOTH: {
554 char *bt_name = strrchr(profile_info->profile_name, '/');
555 if (bt_name == NULL) {
556 CONN_UNLOCK; //LCOV_EXCL_LINE
557 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
561 *profile_name = g_strdup(bt_name);
563 case NET_DEVICE_MESH:
564 *profile_name = g_strdup(profile_info->profile_info.mesh.essid);
567 CONN_UNLOCK; //LCOV_EXCL_LINE
568 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
571 if (*profile_name == NULL) {
572 CONN_UNLOCK; //LCOV_EXCL_LINE
573 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
577 return CONNECTION_ERROR_NONE;
580 EXPORT_API int connection_profile_get_type(connection_profile_h profile, connection_profile_type_e *type)
584 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
586 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
587 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
589 return CONNECTION_ERROR_INVALID_PARAMETER;
592 net_profile_info_t *profile_info = profile;
594 switch (profile_info->profile_type) {
595 case NET_DEVICE_CELLULAR:
596 *type = CONNECTION_PROFILE_TYPE_CELLULAR;
598 case NET_DEVICE_WIFI:
599 *type = CONNECTION_PROFILE_TYPE_WIFI;
601 case NET_DEVICE_ETHERNET:
602 *type = CONNECTION_PROFILE_TYPE_ETHERNET; //LCOV_EXCL_LINE
603 break; //LCOV_EXCL_LINE
604 case NET_DEVICE_BLUETOOTH:
605 *type = CONNECTION_PROFILE_TYPE_BT;
607 case NET_DEVICE_MESH:
608 *type = CONNECTION_PROFILE_TYPE_MESH;
611 CONNECTION_LOG(CONNECTION_ERROR, "Invalid profile type"); //LCOV_EXCL_LINE
612 CONN_UNLOCK; //LCOV_EXCL_LINE
613 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
617 return CONNECTION_ERROR_NONE;
620 EXPORT_API int connection_profile_get_network_interface_name(connection_profile_h profile, char** interface_name)
624 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
626 if (!(_connection_libnet_check_profile_validity(profile)) || interface_name == NULL) {
627 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
629 return CONNECTION_ERROR_INVALID_PARAMETER;
632 net_profile_info_t *profile_info = profile;
633 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
634 if (net_info == NULL) {
635 CONN_UNLOCK; //LCOV_EXCL_LINE
636 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
639 *interface_name = g_strdup(net_info->dev_name);
640 if (*interface_name == NULL) {
641 CONN_UNLOCK; //LCOV_EXCL_LINE
642 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
646 return CONNECTION_ERROR_NONE;
649 EXPORT_API int connection_profile_refresh(connection_profile_h profile)
655 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
657 if (!(_connection_libnet_check_profile_validity(profile))) {
658 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
660 return CONNECTION_ERROR_INVALID_PARAMETER;
663 net_profile_info_t profile_info_local;
664 net_profile_info_t *profile_info = profile;
666 rv = net_get_profile_info(NULL, profile_info->profile_name, &profile_info_local);
667 if (rv == NET_ERR_ACCESS_DENIED) {
668 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
669 CONN_UNLOCK; //LCOV_EXCL_LINE
670 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
671 } else if (rv != NET_ERR_NONE) {
672 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get profile information"); //LCOV_EXCL_LINE
673 CONN_UNLOCK; //LCOV_EXCL_LINE
674 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
677 memcpy(profile, &profile_info_local, sizeof(net_profile_info_t));
680 return CONNECTION_ERROR_NONE;
683 EXPORT_API int connection_profile_get_state(connection_profile_h profile, connection_profile_state_e* state)
687 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
689 if (!(_connection_libnet_check_profile_validity(profile)) || state == NULL) {
690 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
692 return CONNECTION_ERROR_INVALID_PARAMETER;
695 net_profile_info_t *profile_info = profile;
696 *state = _profile_convert_to_cp_state(profile_info->profile_state);
699 return CONNECTION_ERROR_NONE;
702 EXPORT_API int connection_profile_get_internet_state(connection_profile_h profile,
703 connection_internet_state_e *state)
707 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
709 if (!(_connection_libnet_check_profile_validity(profile)) || state == NULL) {
710 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
712 return CONNECTION_ERROR_INVALID_PARAMETER;
715 net_profile_info_t *profile_info = profile;
716 if (profile_info->profile_state == NET_STATE_TYPE_ONLINE)
717 *state = CONNECTION_INTERNET_STATE_ONLINE;
719 *state = CONNECTION_INTERNET_STATE_OFFLINE;
722 return CONNECTION_ERROR_NONE;
725 EXPORT_API int connection_profile_get_ip_config_type(connection_profile_h profile,
726 connection_address_family_e address_family, connection_ip_config_type_e *type)
728 net_ip_config_type_t profile_type;
732 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
734 if (!(_connection_libnet_check_profile_validity(profile)) ||
735 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
736 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
738 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
740 return CONNECTION_ERROR_INVALID_PARAMETER;
743 net_profile_info_t *profile_info = profile;
744 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
745 if (net_info == NULL) {
746 CONN_UNLOCK; //LCOV_EXCL_LINE
747 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
750 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
751 profile_type = net_info->ip_config_type;
753 profile_type = net_info->ip_config_type6;
755 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
756 switch (profile_type) {
758 case NET_IP_CONFIG_TYPE_STATIC:
759 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
762 case NET_IP_CONFIG_TYPE_DYNAMIC:
763 *type = CONNECTION_IP_CONFIG_TYPE_DYNAMIC;
766 case NET_IP_CONFIG_TYPE_AUTO_IP:
767 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
770 case NET_IP_CONFIG_TYPE_FIXED:
771 *type = CONNECTION_IP_CONFIG_TYPE_FIXED;
774 case NET_IP_CONFIG_TYPE_OFF:
775 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
779 return CONNECTION_ERROR_OPERATION_FAILED;
784 switch (profile_type) {
785 case NET_IP_CONFIG_TYPE_STATIC:
786 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
789 case NET_IP_CONFIG_TYPE_AUTO_IP:
790 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
793 case NET_IP_CONFIG_TYPE_OFF:
794 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
799 return CONNECTION_ERROR_OPERATION_FAILED;
806 return CONNECTION_ERROR_NONE;
809 EXPORT_API int connection_profile_get_ip_address(connection_profile_h profile,
810 connection_address_family_e address_family, char** ip_address)
814 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
816 if (!(_connection_libnet_check_profile_validity(profile)) ||
817 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
818 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
819 ip_address == NULL) {
820 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
822 return CONNECTION_ERROR_INVALID_PARAMETER;
825 net_profile_info_t *profile_info = profile;
826 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
827 if (net_info == NULL) {
828 CONN_UNLOCK; //LCOV_EXCL_LINE
829 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
832 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
833 *ip_address = __profile_convert_ip_to_string(&net_info->ip_addr,
836 if (net_get_preferred_ipv6_address(net_info->profile_name, ip_address) != NET_ERR_NONE) {
837 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get preferred ipv6 address"); //LCOV_EXCL_LINE
838 *ip_address = __profile_convert_ip_to_string(&net_info->ip_addr6, //LCOV_EXCL_LINE
843 if (*ip_address == NULL) {
844 CONN_UNLOCK; //LCOV_EXCL_LINE
845 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
849 return CONNECTION_ERROR_NONE;
852 EXPORT_API int connection_profile_get_subnet_mask(connection_profile_h profile,
853 connection_address_family_e address_family, char** subnet_mask)
857 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
859 if (!(_connection_libnet_check_profile_validity(profile)) ||
860 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
861 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
862 subnet_mask == NULL) {
863 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
865 return CONNECTION_ERROR_INVALID_PARAMETER;
868 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
869 CONNECTION_LOG(CONNECTION_ERROR, //LCOV_EXCL_LINE
870 "Please uses connection_profile_get_prefix_length()");
871 CONN_UNLOCK; //LCOV_EXCL_LINE
872 return CONNECTION_ERROR_NOT_SUPPORTED; //LCOV_EXCL_LINE
875 net_profile_info_t *profile_info = profile;
876 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
877 if (net_info == NULL) {
878 CONN_UNLOCK; //LCOV_EXCL_LINE
879 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
882 *subnet_mask = __profile_convert_ip_to_string(&net_info->subnet_mask,
885 if (*subnet_mask == NULL) {
886 CONN_UNLOCK; //LCOV_EXCL_LINE
887 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
891 return CONNECTION_ERROR_NONE;
894 EXPORT_API int connection_profile_get_gateway_address(connection_profile_h profile,
895 connection_address_family_e address_family, char** gateway_address)
899 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
901 if (!(_connection_libnet_check_profile_validity(profile)) ||
902 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
903 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
904 gateway_address == NULL) {
905 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
907 return CONNECTION_ERROR_INVALID_PARAMETER;
910 net_profile_info_t *profile_info = profile;
911 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
912 if (net_info == NULL) {
913 CONN_UNLOCK; //LCOV_EXCL_LINE
914 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
917 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
918 *gateway_address = __profile_convert_ip_to_string(
919 &net_info->gateway_addr6, address_family);
921 *gateway_address = __profile_convert_ip_to_string(
922 &net_info->gateway_addr, address_family);
924 if (*gateway_address == NULL) {
925 CONN_UNLOCK; //LCOV_EXCL_LINE
926 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
930 return CONNECTION_ERROR_NONE;
933 EXPORT_API int connection_profile_get_dhcp_server_address(
934 connection_profile_h profile,
935 connection_address_family_e address_family, char** dhcp_server)
939 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
941 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
942 CONNECTION_LOG(CONNECTION_ERROR, "Not supported");
944 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
947 if (!(_connection_libnet_check_profile_validity(profile)) ||
948 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4) ||
949 dhcp_server == NULL) {
950 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
952 return CONNECTION_ERROR_INVALID_PARAMETER;
955 net_profile_info_t *profile_info = profile;
956 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
957 if (net_info == NULL) {
958 CONN_UNLOCK; //LCOV_EXCL_LINE
959 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
962 CONNECTION_LOG(CONNECTION_INFO, "IP Config %d, DHCP Server Address %s",
963 net_info->ip_config_type, (net_info->b_server_addr ? "TRUE" : "FALSE"));
965 *dhcp_server = __profile_convert_ip_to_string(&net_info->server_addr,
968 if (*dhcp_server == NULL) {
969 CONN_UNLOCK; //LCOV_EXCL_LINE
970 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
974 return CONNECTION_ERROR_NONE;
977 EXPORT_API int connection_profile_get_dhcp_lease_duration(
978 connection_profile_h profile,
979 connection_address_family_e address_family, int* dhcp_lease_duration)
983 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
985 if (!(_connection_libnet_check_profile_validity(profile)) ||
986 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
987 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
988 dhcp_lease_duration == NULL) {
989 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
991 return CONNECTION_ERROR_INVALID_PARAMETER;
994 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
995 CONNECTION_LOG(CONNECTION_ERROR, "Not supported");
997 return CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
1000 net_profile_info_t *profile_info = profile;
1001 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1002 if (net_info == NULL) {
1003 CONN_UNLOCK; //LCOV_EXCL_LINE
1004 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1007 CONNECTION_LOG(CONNECTION_INFO, "Lease duration : %d",
1008 net_info->dhcp_lease_duration);
1010 *dhcp_lease_duration = net_info->dhcp_lease_duration;
1013 return CONNECTION_ERROR_NONE;
1016 EXPORT_API int connection_profile_get_dns_address(connection_profile_h profile, int order,
1017 connection_address_family_e address_family, char** dns_address)
1021 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1023 if (!(_connection_libnet_check_profile_validity(profile)) ||
1024 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1025 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1026 dns_address == NULL ||
1028 order > NET_DNS_ADDR_MAX) {
1029 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1031 return CONNECTION_ERROR_INVALID_PARAMETER;
1034 net_profile_info_t *profile_info = profile;
1035 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1036 if (net_info == NULL) {
1037 CONN_UNLOCK; //LCOV_EXCL_LINE
1038 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1041 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
1042 *dns_address = __profile_convert_ip_to_string(&net_info->dns_addr[order-1],
1044 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) //LCOV_EXCL_LINE
1045 *dns_address = __profile_convert_ip_to_string(&net_info->dns_addr6[order-1], //LCOV_EXCL_LINE
1048 if (*dns_address == NULL) {
1049 CONN_UNLOCK; //LCOV_EXCL_LINE
1050 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1054 return CONNECTION_ERROR_NONE;
1057 EXPORT_API int connection_profile_get_proxy_type(connection_profile_h profile, connection_proxy_type_e *type)
1061 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1063 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1064 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1066 return CONNECTION_ERROR_INVALID_PARAMETER;
1069 net_profile_info_t *profile_info = profile;
1070 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1071 if (net_info == NULL) {
1072 CONN_UNLOCK; //LCOV_EXCL_LINE
1073 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1077 if (profile_info->profile_type == NET_DEVICE_ETHERNET) {
1078 char *proxy = __profile_get_ethernet_proxy();
1079 if (proxy == NULL) {
1080 *type = CONNECTION_PROXY_TYPE_DIRECT;
1082 *type = CONNECTION_PROXY_TYPE_MANUAL;
1087 return CONNECTION_ERROR_NONE;
1091 switch (net_info->proxy_method) {
1093 case NET_PROXY_TYPE_DIRECT:
1094 *type = CONNECTION_PROXY_TYPE_DIRECT;
1096 case NET_PROXY_TYPE_AUTO:
1097 *type = CONNECTION_PROXY_TYPE_AUTO;
1099 case NET_PROXY_TYPE_MANUAL:
1100 *type = CONNECTION_PROXY_TYPE_MANUAL;
1102 case NET_PROXY_TYPE_UNKNOWN:
1105 return CONNECTION_ERROR_OPERATION_FAILED;
1110 return CONNECTION_ERROR_NONE;
1113 EXPORT_API int connection_profile_get_proxy_address(connection_profile_h profile,
1114 connection_address_family_e address_family, char** proxy_address)
1118 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1120 if (!(_connection_libnet_check_profile_validity(profile)) ||
1121 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1122 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1123 proxy_address == NULL) {
1124 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1126 return CONNECTION_ERROR_INVALID_PARAMETER;
1129 net_profile_info_t *profile_info = profile;
1130 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1131 if (net_info == NULL) {
1132 CONN_UNLOCK; //LCOV_EXCL_LINE
1133 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1136 *proxy_address = g_strdup(net_info->proxy_addr);
1138 if (*proxy_address == NULL) {
1139 CONN_UNLOCK; //LCOV_EXCL_LINE
1140 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1144 return CONNECTION_ERROR_NONE;
1147 EXPORT_API int connection_profile_set_ip_config_type(connection_profile_h profile,
1148 connection_address_family_e address_family, connection_ip_config_type_e type)
1150 net_ip_config_type_t *profile_type = NULL;
1154 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1156 if (!(_connection_libnet_check_profile_validity(profile)) ||
1157 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1158 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1159 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1161 return CONNECTION_ERROR_INVALID_PARAMETER;
1164 net_profile_info_t *profile_info = profile;
1165 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1166 if (net_info == NULL) {
1167 CONN_UNLOCK; //LCOV_EXCL_LINE
1168 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1171 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
1172 profile_type = &net_info->ip_config_type ;
1174 profile_type = &net_info->ip_config_type6 ;
1176 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
1179 case CONNECTION_IP_CONFIG_TYPE_STATIC:
1180 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
1181 net_info->ip_addr.data.Ipv4.s_addr = 0;
1182 net_info->subnet_mask.data.Ipv4.s_addr = 0;
1183 net_info->gateway_addr.data.Ipv4.s_addr = 0 ;
1186 case CONNECTION_IP_CONFIG_TYPE_DYNAMIC:
1187 *profile_type = NET_IP_CONFIG_TYPE_DYNAMIC;
1190 case CONNECTION_IP_CONFIG_TYPE_AUTO:
1191 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
1194 case CONNECTION_IP_CONFIG_TYPE_FIXED:
1195 net_info->ip_config_type = NET_IP_CONFIG_TYPE_FIXED;
1198 case CONNECTION_IP_CONFIG_TYPE_NONE:
1199 *profile_type = NET_IP_CONFIG_TYPE_OFF;
1204 return CONNECTION_ERROR_INVALID_PARAMETER;
1210 case CONNECTION_IP_CONFIG_TYPE_STATIC:
1211 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
1212 inet_pton(AF_INET6, "::", &net_info->ip_addr6.data.Ipv6);
1213 net_info->prefix_len6 = 0 ;
1214 inet_pton(AF_INET6, "::",
1215 &net_info->gateway_addr6.data.Ipv6);
1218 case CONNECTION_IP_CONFIG_TYPE_AUTO:
1219 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
1222 case CONNECTION_IP_CONFIG_TYPE_NONE:
1223 *profile_type = NET_IP_CONFIG_TYPE_OFF;
1228 return CONNECTION_ERROR_INVALID_PARAMETER;
1234 return CONNECTION_ERROR_NONE;
1237 EXPORT_API int connection_profile_set_ip_address(connection_profile_h profile,
1238 connection_address_family_e address_family, const char* ip_address)
1242 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1244 if (!(_connection_libnet_check_profile_validity(profile)) ||
1245 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1246 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1247 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1249 return CONNECTION_ERROR_INVALID_PARAMETER;
1252 net_profile_info_t *profile_info = profile;
1253 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1254 if (net_info == NULL) {
1255 CONN_UNLOCK; //LCOV_EXCL_LINE
1256 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1259 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1261 if (ip_address == NULL)
1262 inet_pton(AF_INET6, "::", &net_info->ip_addr6.data.Ipv6);
1263 else if (inet_pton(AF_INET6, ip_address, &net_info->ip_addr6.data.Ipv6) < 1) {
1265 return CONNECTION_ERROR_INVALID_PARAMETER;
1269 if (ip_address == NULL)
1270 net_info->ip_addr.data.Ipv4.s_addr = 0;
1271 else if (inet_pton(AF_INET, ip_address, &net_info->ip_addr.data.Ipv4) < 1) {
1272 CONN_UNLOCK; //LCOV_EXCL_LINE
1273 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1278 return CONNECTION_ERROR_NONE;
1281 EXPORT_API int connection_profile_set_subnet_mask(connection_profile_h profile,
1282 connection_address_family_e address_family, const char* subnet_mask)
1286 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1288 if (!(_connection_libnet_check_profile_validity(profile)) ||
1289 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1290 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1291 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1293 return CONNECTION_ERROR_INVALID_PARAMETER;
1296 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1297 CONNECTION_LOG(CONNECTION_ERROR, //LCOV_EXCL_LINE
1298 "Please uses connection_profile_set_prefix_length()");
1299 CONN_UNLOCK; //LCOV_EXCL_LINE
1300 return CONNECTION_ERROR_NOT_SUPPORTED; //LCOV_EXCL_LINE
1303 net_profile_info_t *profile_info = profile;
1304 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1305 if (net_info == NULL) {
1306 CONN_UNLOCK; //LCOV_EXCL_LINE
1307 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1310 if (subnet_mask == NULL)
1311 net_info->subnet_mask.data.Ipv4.s_addr = 0;
1312 else if (inet_pton(AF_INET, subnet_mask , &net_info->subnet_mask.data.Ipv4) < 1) {
1313 CONN_UNLOCK; //LCOV_EXCL_LINE
1314 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1317 net_info->prefix_len = __profile_convert_netmask_to_prefix_len(subnet_mask);
1318 if (net_info->prefix_len <= 0 || net_info->prefix_len > 31) {
1319 CONNECTION_LOG(CONNECTION_ERROR, "Invalid Prefix length: %d", net_info->prefix_len); //LCOV_EXCL_LINE
1320 CONN_UNLOCK; //LCOV_EXCL_LINE
1321 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1325 return CONNECTION_ERROR_NONE;
1328 EXPORT_API int connection_profile_set_gateway_address(connection_profile_h profile,
1329 connection_address_family_e address_family, const char* gateway_address)
1333 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1335 if (!(_connection_libnet_check_profile_validity(profile)) ||
1336 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1337 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1338 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1340 return CONNECTION_ERROR_INVALID_PARAMETER;
1343 net_profile_info_t *profile_info = profile;
1344 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1345 if (net_info == NULL) {
1346 CONN_UNLOCK; //LCOV_EXCL_LINE
1347 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1350 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1352 if (gateway_address == NULL)
1353 inet_pton(AF_INET6, "::", &net_info->gateway_addr6.data.Ipv6);
1354 else if (inet_pton(AF_INET6, gateway_address, &net_info->gateway_addr6.data.Ipv6) < 1) {
1356 return CONNECTION_ERROR_INVALID_PARAMETER;
1360 if (gateway_address == NULL)
1361 net_info->gateway_addr.data.Ipv4.s_addr = 0;
1362 else if (inet_pton(AF_INET, gateway_address, &(net_info->gateway_addr.data.Ipv4)) < 1) {
1363 CONN_UNLOCK; //LCOV_EXCL_LINE
1364 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1369 return CONNECTION_ERROR_NONE;
1372 EXPORT_API int connection_profile_set_dns_address(connection_profile_h profile, int order,
1373 connection_address_family_e address_family, const char* dns_address)
1377 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1379 if (!(_connection_libnet_check_profile_validity(profile)) ||
1380 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1381 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1383 order > NET_DNS_ADDR_MAX) {
1384 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1386 return CONNECTION_ERROR_INVALID_PARAMETER;
1389 net_profile_info_t *profile_info = profile;
1390 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1391 if (net_info == NULL) {
1392 CONN_UNLOCK; //LCOV_EXCL_LINE
1393 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1396 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
1398 net_info->dns_addr6[order-1].Type = NET_ADDR_IPV6;
1399 if (dns_address == NULL)
1400 inet_pton(AF_INET6, "::", &net_info->dns_addr6[order-1].data.Ipv6);
1401 else if (inet_pton(AF_INET6, dns_address, &net_info->dns_addr6[order-1].data.Ipv6) < 1) {
1403 return CONNECTION_ERROR_INVALID_PARAMETER;
1405 if (net_info->dns_count6 < order)
1406 net_info->dns_count6 = order;
1409 net_info->dns_addr[order-1].Type = NET_ADDR_IPV4;
1410 if (dns_address == NULL)
1411 net_info->dns_addr[order-1].data.Ipv4.s_addr = 0;
1412 else if (inet_pton(AF_INET, dns_address, &(net_info->dns_addr[order-1].data.Ipv4)) < 1) {
1413 CONN_UNLOCK; //LCOV_EXCL_LINE
1414 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1416 if (net_info->dns_count < order)
1417 net_info->dns_count = order;
1421 return CONNECTION_ERROR_NONE;
1424 EXPORT_API int connection_profile_set_proxy_type(connection_profile_h profile, connection_proxy_type_e type)
1428 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1430 if (!(_connection_libnet_check_profile_validity(profile))) {
1431 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1433 return CONNECTION_ERROR_INVALID_PARAMETER;
1436 net_profile_info_t *profile_info = profile;
1437 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1438 if (net_info == NULL) {
1439 CONN_UNLOCK; //LCOV_EXCL_LINE
1440 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1445 case CONNECTION_PROXY_TYPE_DIRECT:
1446 net_info->proxy_method = NET_PROXY_TYPE_DIRECT;
1448 case CONNECTION_PROXY_TYPE_AUTO:
1449 net_info->proxy_method = NET_PROXY_TYPE_AUTO;
1451 case CONNECTION_PROXY_TYPE_MANUAL:
1452 net_info->proxy_method = NET_PROXY_TYPE_MANUAL;
1456 return CONNECTION_ERROR_INVALID_PARAMETER;
1461 return CONNECTION_ERROR_NONE;
1464 EXPORT_API int connection_profile_set_proxy_address(connection_profile_h profile,
1465 connection_address_family_e address_family, const char* proxy_address)
1467 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1469 CONNECTION_LOG(CONNECTION_ERROR, "Address Family: %d", address_family);
1470 if (!(_connection_libnet_check_profile_validity(profile)) ||
1471 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1472 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1473 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1475 return CONNECTION_ERROR_INVALID_PARAMETER;
1478 net_profile_info_t *profile_info = profile;
1479 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1480 if (net_info == NULL) {
1481 CONN_UNLOCK; //LCOV_EXCL_LINE
1482 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1485 if (proxy_address == NULL)
1486 net_info->proxy_addr[0] = '\0';
1488 g_strlcpy(net_info->proxy_addr, proxy_address, NET_PROXY_LEN_MAX);
1491 return CONNECTION_ERROR_NONE;
1494 EXPORT_API int connection_profile_set_state_changed_cb(connection_profile_h profile,
1495 connection_profile_state_changed_cb callback, void* user_data)
1499 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1501 if (!(_connection_libnet_check_profile_validity(profile)) || callback == NULL) {
1502 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1504 return CONNECTION_ERROR_INVALID_PARAMETER;
1507 if (_connection_libnet_add_to_profile_cb_list(profile, callback, user_data)) {
1509 return CONNECTION_ERROR_NONE;
1512 CONN_UNLOCK; //LCOV_EXCL_LINE
1513 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1516 EXPORT_API int connection_profile_unset_state_changed_cb(connection_profile_h profile)
1520 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1522 if (!(_connection_libnet_check_profile_validity(profile))) {
1523 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1525 return CONNECTION_ERROR_INVALID_PARAMETER;
1528 if (_connection_libnet_remove_from_profile_cb_list(profile) != true) {
1529 CONN_UNLOCK; //LCOV_EXCL_LINE
1530 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1534 return CONNECTION_ERROR_NONE;
1538 /* Wi-Fi profile *************************************************************/
1539 EXPORT_API int connection_profile_get_wifi_essid(connection_profile_h profile, char** essid)
1543 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1545 if (!(_connection_libnet_check_profile_validity(profile)) || essid == NULL) {
1546 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1548 return CONNECTION_ERROR_INVALID_PARAMETER;
1551 net_profile_info_t *profile_info = profile;
1553 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1554 profile_info->profile_type != NET_DEVICE_MESH) {
1555 CONN_UNLOCK; //LCOV_EXCL_LINE
1556 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1559 if (profile_info->profile_type == NET_DEVICE_WIFI)
1560 *essid = g_strdup(profile_info->profile_info.wlan.essid);
1562 *essid = g_strdup(profile_info->profile_info.mesh.essid);
1564 if (*essid == NULL) {
1565 CONN_UNLOCK; //LCOV_EXCL_LINE
1566 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1570 return CONNECTION_ERROR_NONE;
1573 EXPORT_API int connection_profile_get_wifi_bssid(connection_profile_h profile, char** bssid)
1577 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1579 if (!(_connection_libnet_check_profile_validity(profile)) || bssid == NULL) {
1580 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1582 return CONNECTION_ERROR_INVALID_PARAMETER;
1585 net_profile_info_t *profile_info = profile;
1587 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1588 profile_info->profile_type != NET_DEVICE_MESH) {
1589 CONN_UNLOCK; //LCOV_EXCL_LINE
1590 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1593 if (profile_info->profile_type == NET_DEVICE_WIFI)
1594 *bssid = g_strdup(profile_info->profile_info.wlan.bssid);
1596 *bssid = g_strdup(profile_info->profile_info.mesh.bssid);
1598 if (*bssid == NULL) {
1599 CONN_UNLOCK; //LCOV_EXCL_LINE
1600 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1604 return CONNECTION_ERROR_NONE;
1607 EXPORT_API int connection_profile_get_wifi_rssi(connection_profile_h profile, int* rssi)
1611 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1613 if (!(_connection_libnet_check_profile_validity(profile)) || rssi == NULL) {
1614 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1616 return CONNECTION_ERROR_INVALID_PARAMETER;
1619 net_profile_info_t *profile_info = profile;
1621 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1622 profile_info->profile_type != NET_DEVICE_MESH) {
1623 CONN_UNLOCK; //LCOV_EXCL_LINE
1624 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1627 if (profile_info->profile_type == NET_DEVICE_WIFI)
1628 *rssi = (int)profile_info->profile_info.wlan.strength;
1630 *rssi = (int)profile_info->profile_info.mesh.strength;
1633 return CONNECTION_ERROR_NONE;
1636 EXPORT_API int connection_profile_get_wifi_frequency(connection_profile_h profile, int* frequency)
1640 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1642 if (!(_connection_libnet_check_profile_validity(profile)) || frequency == NULL) {
1643 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1645 return CONNECTION_ERROR_INVALID_PARAMETER;
1648 net_profile_info_t *profile_info = profile;
1650 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1651 profile_info->profile_type != NET_DEVICE_MESH) {
1652 CONN_UNLOCK; //LCOV_EXCL_LINE
1653 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1656 if (profile_info->profile_type == NET_DEVICE_WIFI)
1657 *frequency = (int)profile_info->profile_info.wlan.frequency;
1659 *frequency = (int)profile_info->profile_info.mesh.frequency;
1662 return CONNECTION_ERROR_NONE;
1665 EXPORT_API int connection_profile_get_wifi_max_speed(connection_profile_h profile, int* max_speed)
1669 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1671 if (!(_connection_libnet_check_profile_validity(profile)) || max_speed == NULL) {
1672 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1674 return CONNECTION_ERROR_INVALID_PARAMETER;
1677 net_profile_info_t *profile_info = profile;
1679 if (profile_info->profile_type != NET_DEVICE_WIFI) {
1680 CONN_UNLOCK; //LCOV_EXCL_LINE
1681 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1684 *max_speed = profile_info->profile_info.wlan.max_rate;
1687 return CONNECTION_ERROR_NONE;
1690 EXPORT_API int connection_profile_get_wifi_security_type(connection_profile_h profile, connection_wifi_security_type_e *type)
1694 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1696 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1697 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1699 return CONNECTION_ERROR_INVALID_PARAMETER;
1702 net_profile_info_t *profile_info = profile;
1704 wlan_security_mode_type_t sec_mode;
1705 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1706 profile_info->profile_type != NET_DEVICE_MESH) {
1707 CONN_UNLOCK; //LCOV_EXCL_LINE
1708 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1711 if (profile_info->profile_type == NET_DEVICE_WIFI)
1712 sec_mode = profile_info->profile_info.wlan.security_info.sec_mode;
1714 sec_mode = profile_info->profile_info.mesh.security_info.sec_mode;
1718 case WLAN_SEC_MODE_NONE:
1719 *type = CONNECTION_WIFI_SECURITY_TYPE_NONE;
1721 case WLAN_SEC_MODE_WEP:
1722 *type = CONNECTION_WIFI_SECURITY_TYPE_WEP;
1724 case WLAN_SEC_MODE_IEEE8021X:
1725 *type = CONNECTION_WIFI_SECURITY_TYPE_EAP;
1727 case WLAN_SEC_MODE_WPA_PSK:
1728 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA_PSK;
1730 case WLAN_SEC_MODE_WPA2_PSK:
1731 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA2_PSK;
1733 case WLAN_SEC_MODE_SAE:
1734 *type = CONNECTION_WIFI_SECURITY_TYPE_SAE;
1738 return CONNECTION_ERROR_OPERATION_FAILED;
1743 return CONNECTION_ERROR_NONE;
1746 EXPORT_API int connection_profile_get_wifi_encryption_type(connection_profile_h profile, connection_wifi_encryption_type_e *type)
1750 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1752 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1753 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1755 return CONNECTION_ERROR_INVALID_PARAMETER;
1758 net_profile_info_t *profile_info = profile;
1760 if (profile_info->profile_type != NET_DEVICE_WIFI) {
1761 CONN_UNLOCK; //LCOV_EXCL_LINE
1762 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1765 switch (profile_info->profile_info.wlan.security_info.enc_mode) {
1767 case WLAN_ENC_MODE_NONE:
1768 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_NONE;
1770 case WLAN_ENC_MODE_WEP:
1771 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_WEP;
1773 case WLAN_ENC_MODE_TKIP:
1774 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP;
1776 case WLAN_ENC_MODE_AES:
1777 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_AES;
1779 case WLAN_ENC_MODE_TKIP_AES_MIXED:
1780 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP_AES_MIXED;
1784 return CONNECTION_ERROR_OPERATION_FAILED;
1789 return CONNECTION_ERROR_NONE;
1792 EXPORT_API int connection_profile_is_wifi_passphrase_required(connection_profile_h profile, bool* required)
1796 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1798 if (!(_connection_libnet_check_profile_validity(profile)) || required == NULL) {
1799 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1801 return CONNECTION_ERROR_INVALID_PARAMETER;
1804 net_profile_info_t *profile_info = profile;
1806 wlan_security_mode_type_t sec_mode;
1807 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1808 profile_info->profile_type != NET_DEVICE_MESH) {
1810 return CONNECTION_ERROR_INVALID_PARAMETER;
1813 if (profile_info->favourite) {
1814 *required = false; //LCOV_EXCL_LINE
1815 CONN_UNLOCK; //LCOV_EXCL_LINE
1816 return CONNECTION_ERROR_NONE; //LCOV_EXCL_LINE
1819 if (profile_info->profile_type == NET_DEVICE_WIFI)
1820 sec_mode = profile_info->profile_info.wlan.security_info.sec_mode;
1822 sec_mode = profile_info->profile_info.mesh.security_info.sec_mode;
1826 case WLAN_SEC_MODE_NONE:
1829 case WLAN_SEC_MODE_WEP:
1830 case WLAN_SEC_MODE_IEEE8021X:
1831 case WLAN_SEC_MODE_WPA_PSK:
1832 case WLAN_SEC_MODE_WPA2_PSK:
1833 case WLAN_SEC_MODE_SAE:
1838 return CONNECTION_ERROR_OPERATION_FAILED;
1843 return CONNECTION_ERROR_NONE;
1846 EXPORT_API int connection_profile_set_wifi_passphrase(connection_profile_h profile, const char* passphrase)
1850 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1852 if (!(_connection_libnet_check_profile_validity(profile)) || passphrase == NULL) {
1853 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1855 return CONNECTION_ERROR_INVALID_PARAMETER;
1858 net_profile_info_t *profile_info = profile;
1860 if (profile_info->profile_type != NET_DEVICE_WIFI &&
1861 profile_info->profile_type != NET_DEVICE_MESH) {
1863 return CONNECTION_ERROR_INVALID_PARAMETER;
1866 if (profile_info->profile_type == NET_DEVICE_WIFI)
1867 g_strlcpy(profile_info->profile_info.wlan.security_info.authentication.psk.psk_key,
1868 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1870 g_strlcpy(profile_info->profile_info.mesh.security_info.authentication.sae.sae_key,
1871 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1874 return CONNECTION_ERROR_NONE;
1877 EXPORT_API int connection_profile_is_wifi_wps_supported(connection_profile_h profile, bool* supported)
1881 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1883 if (!(_connection_libnet_check_profile_validity(profile)) || supported == NULL) {
1884 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1886 return CONNECTION_ERROR_INVALID_PARAMETER;
1889 net_profile_info_t *profile_info = profile;
1891 if (profile_info->profile_type != NET_DEVICE_WIFI) {
1893 return CONNECTION_ERROR_INVALID_PARAMETER;
1896 if (profile_info->profile_info.wlan.security_info.wps_support)
1902 return CONNECTION_ERROR_NONE;
1906 /* Cellular profile **********************************************************/
1907 EXPORT_API int connection_profile_get_cellular_service_type(connection_profile_h profile,
1908 connection_cellular_service_type_e* type)
1912 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1914 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1915 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1916 CONN_UNLOCK; //LCOV_EXCL_LINE
1917 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1920 net_profile_info_t *profile_info = profile;
1922 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1923 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1924 CONN_UNLOCK; //LCOV_EXCL_LINE
1925 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1928 *type = _profile_convert_to_connection_cellular_service_type(profile_info->profile_info.pdp.service_type);
1930 if (*type == CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN) {
1931 CONNECTION_LOG(CONNECTION_ERROR, "Invalid service type Passed"); //LCOV_EXCL_LINE
1932 CONN_UNLOCK; //LCOV_EXCL_LINE
1933 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1937 return CONNECTION_ERROR_NONE;
1940 EXPORT_API int connection_profile_get_cellular_apn(connection_profile_h profile, char** apn)
1944 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1946 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1947 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1948 CONN_UNLOCK; //LCOV_EXCL_LINE
1949 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1952 net_profile_info_t *profile_info = profile;
1954 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1955 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1956 CONN_UNLOCK; //LCOV_EXCL_LINE
1957 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1960 *apn = g_strdup(profile_info->profile_info.pdp.apn);
1962 CONN_UNLOCK; //LCOV_EXCL_LINE
1963 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1967 return CONNECTION_ERROR_NONE;
1970 EXPORT_API int connection_profile_get_cellular_auth_info(connection_profile_h profile,
1971 connection_cellular_auth_type_e *type, char** user_name, char** password)
1975 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1977 if (!(_connection_libnet_check_profile_validity(profile)) ||
1978 type == NULL || user_name == NULL || password == NULL) {
1979 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1980 CONN_UNLOCK; //LCOV_EXCL_LINE
1981 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1984 net_profile_info_t *profile_info = profile;
1986 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1987 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1989 return CONNECTION_ERROR_INVALID_PARAMETER;
1992 switch (profile_info->profile_info.pdp.auth_info.auth_type) {
1994 case NET_PDP_AUTH_NONE:
1995 *type = CONNECTION_CELLULAR_AUTH_TYPE_NONE;
1997 case NET_PDP_AUTH_PAP:
1998 *type = CONNECTION_CELLULAR_AUTH_TYPE_PAP;
2000 case NET_PDP_AUTH_CHAP:
2001 *type = CONNECTION_CELLULAR_AUTH_TYPE_CHAP;
2005 return CONNECTION_ERROR_OPERATION_FAILED;
2009 *user_name = g_strdup(profile_info->profile_info.pdp.auth_info.user_name);
2010 if (*user_name == NULL) {
2011 CONN_UNLOCK; //LCOV_EXCL_LINE
2012 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2015 *password = g_strdup(profile_info->profile_info.pdp.auth_info.password);
2016 if (*password == NULL) {
2017 g_free(*user_name); //LCOV_EXCL_LINE
2018 CONN_UNLOCK; //LCOV_EXCL_LINE
2019 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2023 return CONNECTION_ERROR_NONE;
2026 EXPORT_API int connection_profile_get_cellular_home_url(connection_profile_h profile, char** home_url)
2030 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2032 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
2033 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2035 return CONNECTION_ERROR_INVALID_PARAMETER;
2038 net_profile_info_t *profile_info = profile;
2040 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2041 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2043 return CONNECTION_ERROR_INVALID_PARAMETER;
2046 *home_url = g_strdup(profile_info->profile_info.pdp.home_url);
2047 if (*home_url == NULL) {
2048 CONN_UNLOCK; //LCOV_EXCL_LINE
2049 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2053 return CONNECTION_ERROR_NONE;
2056 EXPORT_API int connection_profile_get_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
2060 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2062 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
2063 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2065 return CONNECTION_ERROR_INVALID_PARAMETER;
2068 net_profile_info_t *profile_info = profile;
2070 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2071 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2073 return CONNECTION_ERROR_INVALID_PARAMETER;
2076 switch (profile_info->profile_info.pdp.pdn_type) {
2078 case NET_PDN_TYPE_UNKNOWN:
2079 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
2081 case NET_PDN_TYPE_IPV4:
2082 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
2084 case NET_PDN_TYPE_IPV6:
2085 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
2087 case NET_PDN_TYPE_IPV4_IPV6:
2088 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
2092 return CONNECTION_ERROR_OPERATION_FAILED;
2097 return CONNECTION_ERROR_NONE;
2100 EXPORT_API int connection_profile_get_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e *type)
2104 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2106 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
2107 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2109 return CONNECTION_ERROR_INVALID_PARAMETER;
2112 net_profile_info_t *profile_info = profile;
2114 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2115 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2117 return CONNECTION_ERROR_INVALID_PARAMETER;
2120 switch (profile_info->profile_info.pdp.roam_pdn_type) {
2122 case NET_PDN_TYPE_UNKNOWN:
2123 *type = CONNECTION_CELLULAR_PDN_TYPE_UNKNOWN;
2125 case NET_PDN_TYPE_IPV4:
2126 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4;
2128 case NET_PDN_TYPE_IPV6:
2129 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV6;
2131 case NET_PDN_TYPE_IPV4_IPV6:
2132 *type = CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6;
2136 return CONNECTION_ERROR_OPERATION_FAILED;
2141 return CONNECTION_ERROR_NONE;
2144 EXPORT_API int connection_profile_is_cellular_roaming(connection_profile_h profile, bool* is_roaming)
2148 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2150 if (!(_connection_libnet_check_profile_validity(profile)) || is_roaming == NULL) {
2151 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2153 return CONNECTION_ERROR_INVALID_PARAMETER;
2156 net_profile_info_t *profile_info = profile;
2158 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2159 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2161 return CONNECTION_ERROR_INVALID_PARAMETER;
2164 if (profile_info->profile_info.pdp.roaming)
2167 *is_roaming = false;
2170 return CONNECTION_ERROR_NONE;
2173 EXPORT_API int connection_profile_is_cellular_hidden(connection_profile_h profile, bool* is_hidden)
2177 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2179 if (!(_connection_libnet_check_profile_validity(profile)) || is_hidden == NULL) {
2180 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2182 return CONNECTION_ERROR_INVALID_PARAMETER;
2185 net_profile_info_t *profile_info = profile;
2187 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2188 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2190 return CONNECTION_ERROR_INVALID_PARAMETER;
2193 if (profile_info->profile_info.pdp.hidden)
2199 return CONNECTION_ERROR_NONE;
2202 EXPORT_API int connection_profile_is_cellular_editable(connection_profile_h profile, bool* is_editable)
2206 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2208 if (!(_connection_libnet_check_profile_validity(profile)) || is_editable == NULL) {
2209 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2211 return CONNECTION_ERROR_INVALID_PARAMETER;
2214 net_profile_info_t *profile_info = profile;
2216 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2217 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2219 return CONNECTION_ERROR_INVALID_PARAMETER;
2222 if (profile_info->profile_info.pdp.editable)
2223 *is_editable = true;
2225 *is_editable = false;
2228 return CONNECTION_ERROR_NONE;
2231 EXPORT_API int connection_profile_is_cellular_default(connection_profile_h profile, bool* is_default)
2235 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2237 if (!(_connection_libnet_check_profile_validity(profile)) || is_default == NULL) {
2238 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2240 return CONNECTION_ERROR_INVALID_PARAMETER;
2243 net_profile_info_t *profile_info = profile;
2245 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2246 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2248 return CONNECTION_ERROR_INVALID_PARAMETER;
2251 if (profile_info->profile_info.pdp.default_conn)
2254 *is_default = false;
2257 return CONNECTION_ERROR_NONE;
2260 EXPORT_API int connection_profile_set_cellular_service_type(connection_profile_h profile,
2261 connection_cellular_service_type_e service_type)
2265 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2267 if (!(_connection_libnet_check_profile_validity(profile))) {
2268 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2270 return CONNECTION_ERROR_INVALID_PARAMETER;
2273 net_profile_info_t *profile_info = profile;
2275 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2276 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2278 return CONNECTION_ERROR_INVALID_PARAMETER;
2281 switch (service_type) {
2283 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
2284 profile_info->profile_info.pdp.service_type = NET_SERVICE_INTERNET;
2286 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
2287 profile_info->profile_info.pdp.service_type = NET_SERVICE_MMS;
2289 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
2290 profile_info->profile_info.pdp.service_type = NET_SERVICE_PREPAID_INTERNET;
2292 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
2293 profile_info->profile_info.pdp.service_type = NET_SERVICE_PREPAID_MMS;
2295 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
2296 profile_info->profile_info.pdp.service_type = NET_SERVICE_TETHERING;
2298 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
2299 profile_info->profile_info.pdp.service_type = NET_SERVICE_APPLICATION;
2301 case CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN:
2304 return CONNECTION_ERROR_INVALID_PARAMETER;
2309 return CONNECTION_ERROR_NONE;
2312 EXPORT_API int connection_profile_set_cellular_apn(connection_profile_h profile, const char* apn)
2316 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2318 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
2319 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2321 return CONNECTION_ERROR_INVALID_PARAMETER;
2324 net_profile_info_t *profile_info = profile;
2326 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2327 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2329 return CONNECTION_ERROR_INVALID_PARAMETER;
2332 g_strlcpy(profile_info->profile_info.pdp.apn, apn, NET_PDP_APN_LEN_MAX+1);
2335 return CONNECTION_ERROR_NONE;
2338 EXPORT_API int connection_profile_set_cellular_auth_info(connection_profile_h profile,
2339 connection_cellular_auth_type_e type, const char* user_name, const char* password)
2343 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2345 if (!(_connection_libnet_check_profile_validity(profile)) ||
2346 user_name == NULL || password == NULL) {
2347 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2349 return CONNECTION_ERROR_INVALID_PARAMETER;
2352 net_profile_info_t *profile_info = profile;
2354 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2355 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2357 return CONNECTION_ERROR_INVALID_PARAMETER;
2362 case CONNECTION_CELLULAR_AUTH_TYPE_NONE:
2363 profile_info->profile_info.pdp.auth_info.auth_type = NET_PDP_AUTH_NONE;
2365 case CONNECTION_CELLULAR_AUTH_TYPE_PAP:
2366 profile_info->profile_info.pdp.auth_info.auth_type = NET_PDP_AUTH_PAP;
2368 case CONNECTION_CELLULAR_AUTH_TYPE_CHAP:
2369 profile_info->profile_info.pdp.auth_info.auth_type = NET_PDP_AUTH_CHAP;
2373 return CONNECTION_ERROR_INVALID_PARAMETER;
2377 g_strlcpy(profile_info->profile_info.pdp.auth_info.user_name, user_name, NET_PDP_AUTH_USERNAME_LEN_MAX+1);
2378 g_strlcpy(profile_info->profile_info.pdp.auth_info.password, password, NET_PDP_AUTH_PASSWORD_LEN_MAX+1);
2381 return CONNECTION_ERROR_NONE;
2384 EXPORT_API int connection_profile_set_cellular_home_url(connection_profile_h profile, const char* home_url)
2388 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2390 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
2391 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2393 return CONNECTION_ERROR_INVALID_PARAMETER;
2396 net_profile_info_t *profile_info = profile;
2398 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2399 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2401 return CONNECTION_ERROR_INVALID_PARAMETER;
2404 g_strlcpy(profile_info->profile_info.pdp.home_url, home_url, NET_HOME_URL_LEN_MAX);
2407 return CONNECTION_ERROR_NONE;
2410 EXPORT_API int connection_profile_set_cellular_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
2414 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2416 if (!(_connection_libnet_check_profile_validity(profile))) {
2417 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2419 return CONNECTION_ERROR_INVALID_PARAMETER;
2422 net_profile_info_t *profile_info = profile;
2424 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2425 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2427 return CONNECTION_ERROR_INVALID_PARAMETER;
2432 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
2433 profile_info->profile_info.pdp.pdn_type = NET_PDN_TYPE_IPV4;
2435 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
2436 profile_info->profile_info.pdp.pdn_type = NET_PDN_TYPE_IPV6;
2438 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
2439 profile_info->profile_info.pdp.pdn_type = NET_PDN_TYPE_IPV4_IPV6;
2440 CONNECTION_LOG(CONNECTION_WARN, "DEPRECATION WARNINIG: CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6 " \
2441 "from next release. Use CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6 instead");
2443 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6:
2444 profile_info->profile_info.pdp.pdn_type = NET_PDN_TYPE_IPV4_IPV6;
2448 return CONNECTION_ERROR_INVALID_PARAMETER;
2453 return CONNECTION_ERROR_NONE;
2456 EXPORT_API int connection_profile_set_cellular_roam_pdn_type(connection_profile_h profile, connection_cellular_pdn_type_e type)
2460 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
2462 if (!(_connection_libnet_check_profile_validity(profile))) {
2463 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2465 return CONNECTION_ERROR_INVALID_PARAMETER;
2468 net_profile_info_t *profile_info = profile;
2470 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
2471 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2473 return CONNECTION_ERROR_INVALID_PARAMETER;
2478 case CONNECTION_CELLULAR_PDN_TYPE_IPV4:
2479 profile_info->profile_info.pdp.roam_pdn_type = NET_PDN_TYPE_IPV4;
2481 case CONNECTION_CELLULAR_PDN_TYPE_IPV6:
2482 profile_info->profile_info.pdp.roam_pdn_type = NET_PDN_TYPE_IPV6;
2484 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6:
2485 profile_info->profile_info.pdp.roam_pdn_type = NET_PDN_TYPE_IPV4_IPV6;
2486 CONNECTION_LOG(CONNECTION_WARN, "DEPRECATION WARNINIG: CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPv6 " \
2487 "from next release. Use CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6 instead");
2489 case CONNECTION_CELLULAR_PDN_TYPE_IPV4_IPV6:
2490 profile_info->profile_info.pdp.roam_pdn_type = NET_PDN_TYPE_IPV4_IPV6;
2494 return CONNECTION_ERROR_INVALID_PARAMETER;
2499 return CONNECTION_ERROR_NONE;
2502 EXPORT_API int connection_profile_get_ipv6_state(connection_profile_h profile, connection_profile_state_e *state)
2506 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2507 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2509 if (!(_connection_libnet_check_profile_validity(profile)) ||
2511 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2513 return CONNECTION_ERROR_INVALID_PARAMETER;
2516 net_profile_info_t *profile_info = profile;
2517 *state = _profile_convert_to_cp_state(profile_info->profile_state6);
2520 return CONNECTION_ERROR_NONE;
2523 EXPORT_API int connection_profile_set_dns_config_type(connection_profile_h profile,
2524 connection_address_family_e address_family, connection_dns_config_type_e type)
2528 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2529 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2531 if (!(_connection_libnet_check_profile_validity(profile))) {
2532 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2534 return CONNECTION_ERROR_INVALID_PARAMETER;
2537 if ((address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2538 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
2539 (type != CONNECTION_DNS_CONFIG_TYPE_STATIC &&
2540 type != CONNECTION_DNS_CONFIG_TYPE_DYNAMIC)) {
2541 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
2542 CONN_UNLOCK; //LCOV_EXCL_LINE
2543 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
2546 net_dns_config_type_t *profileType = NULL;
2547 net_dns_config_type_t *profileType6 = NULL;
2548 net_profile_info_t *profile_info = profile;
2550 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2551 if (net_info == NULL) {
2552 CONN_UNLOCK; //LCOV_EXCL_LINE
2553 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
2556 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
2557 profileType = &net_info->dns_config_type;
2558 net_info->dns_addr[0].data.Ipv4.s_addr = 0;
2559 net_info->dns_addr[1].data.Ipv4.s_addr = 0;
2560 *profileType = type;
2562 profileType6 = &net_info->dns_config_type6;
2563 inet_pton(AF_INET6, "::", &net_info->dns_addr6[0].data.Ipv6);
2564 inet_pton(AF_INET6, "::", &net_info->dns_addr6[1].data.Ipv6);
2565 *profileType6 = type;
2569 return CONNECTION_ERROR_NONE;
2572 EXPORT_API int connection_profile_get_dns_config_type(connection_profile_h profile,
2573 connection_address_family_e address_family, connection_dns_config_type_e *type)
2577 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2578 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2580 if (!(_connection_libnet_check_profile_validity(profile)) ||
2581 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2582 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
2584 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2586 return CONNECTION_ERROR_INVALID_PARAMETER;
2589 net_dns_config_type_t profileType;
2590 net_profile_info_t *profile_info = profile;
2591 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2592 if (net_info == NULL) {
2593 CONN_UNLOCK; //LCOV_EXCL_LINE
2594 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
2597 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
2598 profileType = net_info->dns_config_type;
2600 profileType = net_info->dns_config_type6;
2602 switch (profileType) {
2603 case NET_DNS_CONFIG_TYPE_STATIC:
2604 *type = CONNECTION_DNS_CONFIG_TYPE_STATIC;
2606 case NET_DNS_CONFIG_TYPE_DYNAMIC:
2607 *type = CONNECTION_DNS_CONFIG_TYPE_DYNAMIC;
2610 *type = CONNECTION_DNS_CONFIG_TYPE_NONE;
2615 return CONNECTION_ERROR_NONE;
2618 EXPORT_API int connection_profile_set_prefix_length(connection_profile_h profile,
2619 connection_address_family_e address_family, int prefix_len)
2623 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2624 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2626 if (!(_connection_libnet_check_profile_validity(profile)) ||
2627 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2628 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
2629 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2631 return CONNECTION_ERROR_INVALID_PARAMETER;
2634 net_profile_info_t *profile_info = profile;
2635 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2636 if (net_info == NULL) {
2637 CONN_UNLOCK; //LCOV_EXCL_LINE
2638 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
2641 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
2642 net_info->prefix_len = prefix_len;
2643 net_info->subnet_mask.data.Ipv4.s_addr = __profile_convert_prefix_len_to_netmask(prefix_len);
2645 net_info->prefix_len6 = prefix_len;
2648 return CONNECTION_ERROR_NONE;
2651 EXPORT_API int connection_profile_get_prefix_length(connection_profile_h profile,
2652 connection_address_family_e address_family, int *prefix_len)
2656 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2657 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2659 if (!(_connection_libnet_check_profile_validity(profile)) ||
2660 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
2661 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
2662 prefix_len == NULL) {
2663 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2665 return CONNECTION_ERROR_INVALID_PARAMETER;
2668 net_profile_info_t *profile_info = profile;
2669 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2670 if (net_info == NULL) {
2671 CONN_UNLOCK; //LCOV_EXCL_LINE
2672 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
2675 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
2676 *prefix_len = net_info->prefix_len;
2677 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
2678 *prefix_len = net_info->prefix_len6;
2681 return CONNECTION_ERROR_NONE;
2684 EXPORT_API int connection_profile_is_ethernet_eap_enabled(connection_profile_h profile, bool *enabled)
2688 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2689 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2691 if (!(_connection_libnet_check_profile_validity(profile)) ||
2693 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2695 return CONNECTION_ERROR_INVALID_PARAMETER;
2698 net_profile_info_t *profile_info = profile;
2699 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2702 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2703 CONN_UNLOCK; //LCOV_EXCL_LINE
2704 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2707 if (net_info->use_eapol == true) {
2708 *enabled = net_info->use_eapol;
2712 int ret = _connection_libnet_ethernet_eap_enabled(net_info->profile_name, enabled);
2713 if (ret != CONNECTION_ERROR_NONE) {
2714 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get EAP over Ethernet enabled status."); //LCOV_EXCL_LINE
2715 CONN_UNLOCK; //LCOV_EXCL_LINE
2716 return ret; //LCOV_EXCL_LINE
2720 CONNECTION_LOG(CONNECTION_INFO, "EAP over Ethernet enabled status: [%s]", enabled ? "true" : "false");
2723 return CONNECTION_ERROR_NONE;
2726 EXPORT_API int connection_profile_enable_ethernet_eap(connection_profile_h profile, bool enable)
2730 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2731 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2733 if (!_connection_libnet_check_profile_validity(profile)) {
2734 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2736 return CONNECTION_ERROR_INVALID_PARAMETER;
2739 net_profile_info_t *profile_info = profile;
2740 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2743 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2744 CONN_UNLOCK; //LCOV_EXCL_LINE
2745 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2748 int ret = _connection_libnet_enable_ethernet_eap(enable, net_info->profile_name);
2749 if (ret != CONNECTION_ERROR_NONE) {
2750 CONNECTION_LOG(CONNECTION_ERROR, "Failed to enable EAP over ethernet"); //LCOV_EXCL_LINE
2751 CONN_UNLOCK; //LCOV_EXCL_LINE
2752 return ret; //LCOV_EXCL_LINE
2755 net_info->use_eapol = enable;
2758 return CONNECTION_ERROR_NONE;
2761 EXPORT_API int connection_profile_set_ethernet_eap_type(connection_profile_h profile,
2762 connection_ethernet_eap_type_e type)
2766 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2767 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2769 if (!_connection_libnet_check_profile_validity(profile)) {
2770 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2772 return CONNECTION_ERROR_INVALID_PARAMETER;
2775 net_profile_info_t *profile_info = profile;
2776 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2778 if (!net_info || net_info->use_eapol == false) {
2779 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2780 CONN_UNLOCK; //LCOV_EXCL_LINE
2781 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2783 net_info->eap.eap_type = type;
2786 return CONNECTION_ERROR_NONE;
2789 EXPORT_API int connection_profile_get_ethernet_eap_type(connection_profile_h profile,
2790 connection_ethernet_eap_type_e *type)
2794 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2795 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2797 if (!_connection_libnet_check_profile_validity(profile) || type == NULL) {
2798 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2800 return CONNECTION_ERROR_INVALID_PARAMETER;
2803 net_profile_info_t *profile_info = profile;
2804 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2806 if (!net_info || net_info->use_eapol == false) {
2807 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2808 CONN_UNLOCK; //LCOV_EXCL_LINE
2809 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2812 *type = net_info->eap.eap_type;
2815 return CONNECTION_ERROR_NONE;
2818 EXPORT_API int connection_profile_set_ethernet_eap_passphrase(connection_profile_h profile,
2819 const char *user_name, const char *password)
2823 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2824 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2826 if (!_connection_libnet_check_profile_validity(profile) ||
2827 user_name == NULL || password == NULL) {
2828 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2830 return CONNECTION_ERROR_INVALID_PARAMETER;
2833 net_profile_info_t *profile_info = profile;
2834 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2836 if (!net_info || false == __profile_ethernet_validate_eap_passphrase(net_info)) {
2837 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
2839 return CONNECTION_ERROR_INVALID_OPERATION;
2842 g_strlcpy(net_info->eap.username, user_name, NET_USERNAME_LEN+1);
2843 g_strlcpy(net_info->eap.password, password, NET_PASSWORD_LEN+1);
2846 return CONNECTION_ERROR_NONE;
2849 EXPORT_API int connection_profile_get_ethernet_eap_passphrase(connection_profile_h profile,
2850 char **user_name, bool *is_password_set)
2854 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2855 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2857 if (!_connection_libnet_check_profile_validity(profile) ||
2858 user_name == NULL || is_password_set == NULL) {
2859 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2861 return CONNECTION_ERROR_INVALID_PARAMETER;
2864 net_profile_info_t *profile_info = profile;
2865 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2867 if (!net_info || false == __profile_ethernet_validate_eap_passphrase(net_info)) {
2868 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
2870 return CONNECTION_ERROR_INVALID_OPERATION;
2873 *user_name = strdup(net_info->eap.username);
2874 if (*user_name == NULL) {
2875 CONN_UNLOCK; //LCOV_EXCL_LINE
2876 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2879 if (strlen(net_info->eap.password) > 0)
2880 *is_password_set = true;
2882 *is_password_set = false;
2885 return CONNECTION_ERROR_NONE;
2888 EXPORT_API int connection_profile_set_ethernet_eap_identity(connection_profile_h profile,
2889 const char *identity)
2893 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2894 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2896 if (!_connection_libnet_check_profile_validity(profile) || identity == NULL) {
2897 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2899 return CONNECTION_ERROR_INVALID_PARAMETER;
2902 net_profile_info_t *profile_info = profile;
2903 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2905 if (!net_info || false == __profile_ethernet_validate_eap_identity(net_info)) {
2906 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2907 CONN_UNLOCK; //LCOV_EXCL_LINE
2908 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2911 g_strlcpy(net_info->eap.username, identity, NET_USERNAME_LEN+1);
2914 return CONNECTION_ERROR_NONE;
2917 EXPORT_API int connection_profile_get_ethernet_eap_identity(connection_profile_h profile,
2922 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2923 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2925 if (!_connection_libnet_check_profile_validity(profile) ||
2927 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2929 return CONNECTION_ERROR_INVALID_PARAMETER;
2932 net_profile_info_t *profile_info = profile;
2933 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2935 if (!net_info || false == __profile_ethernet_validate_eap_identity(net_info)) {
2936 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation"); //LCOV_EXCL_LINE
2937 CONN_UNLOCK; //LCOV_EXCL_LINE
2938 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
2941 *identity = strdup(net_info->eap.username);
2942 if (*identity == NULL) {
2943 CONN_UNLOCK; //LCOV_EXCL_LINE
2944 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
2948 return CONNECTION_ERROR_NONE;
2951 EXPORT_API int connection_profile_set_ethernet_eap_ca_cert_file(connection_profile_h profile,
2956 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2957 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2959 if (!_connection_libnet_check_profile_validity(profile) ||
2961 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2963 return CONNECTION_ERROR_INVALID_PARAMETER;
2966 net_profile_info_t *profile_info = profile;
2967 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2969 if (!net_info || false == __profile_ethernet_validate_eap_ca_cert_file(net_info)) {
2970 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
2972 return CONNECTION_ERROR_INVALID_OPERATION;
2975 g_strlcpy(net_info->eap.ca_cert_filename, file, NET_CA_CERT_FILENAME_LEN+1);
2978 return CONNECTION_ERROR_NONE;
2981 EXPORT_API int connection_profile_get_ethernet_eap_ca_cert_file(connection_profile_h profile,
2986 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
2987 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
2989 if (!_connection_libnet_check_profile_validity(profile) ||
2991 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
2993 return CONNECTION_ERROR_INVALID_PARAMETER;
2996 net_profile_info_t *profile_info = profile;
2997 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
2999 if (!net_info || false == __profile_ethernet_validate_eap_ca_cert_file(net_info)) {
3000 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3002 return CONNECTION_ERROR_INVALID_OPERATION;
3005 *file = strdup(net_info->eap.ca_cert_filename);
3006 if (*file == NULL) {
3007 CONN_UNLOCK; //LCOV_EXCL_LINE
3008 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3012 return CONNECTION_ERROR_NONE;
3015 EXPORT_API int connection_profile_set_ethernet_eap_client_cert_file(connection_profile_h profile,
3020 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3021 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3023 if (!_connection_libnet_check_profile_validity(profile) ||
3025 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3027 return CONNECTION_ERROR_INVALID_PARAMETER;
3030 net_profile_info_t *profile_info = profile;
3031 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3033 if (!net_info || false == __profile_ethernet_validate_eap_client_cert_file(net_info)) {
3034 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3036 return CONNECTION_ERROR_INVALID_OPERATION;
3039 g_strlcpy(net_info->eap.client_cert_filename, file, NET_CLIENT_CERT_FILENAME_LEN+1);
3042 return CONNECTION_ERROR_NONE;
3045 EXPORT_API int connection_profile_get_ethernet_eap_client_cert_file(connection_profile_h profile,
3050 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3051 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3053 if (!_connection_libnet_check_profile_validity(profile) ||
3055 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3057 return CONNECTION_ERROR_INVALID_PARAMETER;
3060 net_profile_info_t *profile_info = profile;
3061 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3063 if (!net_info || false == __profile_ethernet_validate_eap_client_cert_file(net_info)) {
3064 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3066 return CONNECTION_ERROR_INVALID_OPERATION;
3069 *file = strdup(net_info->eap.client_cert_filename);
3070 if (*file == NULL) {
3071 CONN_UNLOCK; //LCOV_EXCL_LINE
3072 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3076 return CONNECTION_ERROR_NONE;
3079 EXPORT_API int connection_profile_get_ethernet_eap_private_key_file(connection_profile_h profile, char **file)
3083 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3084 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3086 if (!_connection_libnet_check_profile_validity(profile) ||
3088 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3090 return CONNECTION_ERROR_INVALID_PARAMETER;
3093 net_profile_info_t *profile_info = profile;
3094 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3096 if (!net_info || false == __profile_ethernet_validate_eap_private_key_file(net_info)) {
3097 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3099 return CONNECTION_ERROR_INVALID_OPERATION;
3102 *file = strdup(net_info->eap.private_key_filename);
3103 if (*file == NULL) {
3104 CONN_UNLOCK; //LCOV_EXCL_LINE
3105 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3109 return CONNECTION_ERROR_NONE;
3112 EXPORT_API int connection_profile_set_ethernet_eap_private_key_info(connection_profile_h profile, const char *file, const char *password)
3116 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3117 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3119 if (!_connection_libnet_check_profile_validity(profile) || file == NULL || password == NULL) {
3120 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3122 return CONNECTION_ERROR_INVALID_PARAMETER;
3125 net_profile_info_t *profile_info = profile;
3126 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3128 if (!net_info || false == __profile_ethernet_validate_eap_private_key_file(net_info)) {
3129 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3131 return CONNECTION_ERROR_INVALID_OPERATION;
3134 g_strlcpy(net_info->eap.private_key_filename, file, NET_PRIVATE_KEY_FILENAME_LEN+1);
3135 g_strlcpy(net_info->eap.private_key_passwd, password, NET_PRIVATE_KEY_PASSWD_LEN+1);
3138 return CONNECTION_ERROR_NONE;
3141 EXPORT_API int connection_profile_set_ethernet_eap_anonymous_identity(connection_profile_h profile,
3142 const char *anonymous_identity)
3146 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3147 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3149 if (!_connection_libnet_check_profile_validity(profile) || anonymous_identity == NULL) {
3150 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3152 return CONNECTION_ERROR_INVALID_PARAMETER;
3155 net_profile_info_t *profile_info = profile;
3156 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3158 if (!net_info || false == __profile_ethernet_validate_eap_anonymous_identity(net_info)) {
3159 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3161 return CONNECTION_ERROR_INVALID_OPERATION;
3164 g_strlcpy(net_info->eap.anonymous_identity, anonymous_identity, NET_USERNAME_LEN+1);
3167 return CONNECTION_ERROR_NONE;
3170 EXPORT_API int connection_profile_get_ethernet_eap_anonymous_identity(connection_profile_h profile,
3171 char **anonymous_identity)
3175 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3176 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3178 if (!_connection_libnet_check_profile_validity(profile) ||
3179 anonymous_identity == NULL) {
3180 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3182 return CONNECTION_ERROR_INVALID_PARAMETER;
3185 net_profile_info_t *profile_info = profile;
3186 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3188 if (!net_info || false == __profile_ethernet_validate_eap_anonymous_identity(net_info)) {
3189 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3191 return CONNECTION_ERROR_INVALID_OPERATION;
3194 *anonymous_identity = strdup(net_info->eap.anonymous_identity);
3195 if (*anonymous_identity == NULL) {
3196 CONN_UNLOCK; //LCOV_EXCL_LINE
3197 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3201 return CONNECTION_ERROR_NONE;
3204 EXPORT_API int connection_profile_set_ethernet_eap_pac_file(connection_profile_h profile,
3209 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3210 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3212 if (!_connection_libnet_check_profile_validity(profile) ||
3214 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3216 return CONNECTION_ERROR_INVALID_PARAMETER;
3219 net_profile_info_t *profile_info = profile;
3220 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3222 if (!net_info || false == __profile_ethernet_validate_eap_pac_file(net_info)) {
3223 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3225 return CONNECTION_ERROR_INVALID_OPERATION;
3228 g_strlcpy(net_info->eap.pac_filename, file, NET_PAC_FILENAME_LEN+1);
3231 return CONNECTION_ERROR_NONE;
3234 EXPORT_API int connection_profile_get_ethernet_eap_pac_file(connection_profile_h profile,
3239 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3240 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3242 if (!_connection_libnet_check_profile_validity(profile) ||
3244 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3246 return CONNECTION_ERROR_INVALID_PARAMETER;
3249 net_profile_info_t *profile_info = profile;
3250 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3252 if (!net_info || false == __profile_ethernet_validate_eap_pac_file(net_info)) {
3253 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3255 return CONNECTION_ERROR_INVALID_OPERATION;
3258 *file = strdup(net_info->eap.pac_filename);
3259 if (*file == NULL) {
3260 CONN_UNLOCK; //LCOV_EXCL_LINE
3261 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
3265 return CONNECTION_ERROR_NONE;
3268 EXPORT_API int connection_profile_set_ethernet_eap_auth_type(connection_profile_h profile,
3269 connection_ethernet_eap_auth_type_e type)
3273 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3274 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3276 if (!_connection_libnet_check_profile_validity(profile)) {
3277 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3279 return CONNECTION_ERROR_INVALID_PARAMETER;
3282 net_profile_info_t *profile_info = profile;
3283 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3285 if (!net_info || false == __profile_ethernet_validate_eap_auth_type(net_info)) {
3286 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3288 return CONNECTION_ERROR_INVALID_OPERATION;
3291 net_info->eap.eap_auth = type;
3294 return CONNECTION_ERROR_NONE;
3297 EXPORT_API int connection_profile_get_ethernet_eap_auth_type(connection_profile_h profile,
3298 connection_ethernet_eap_auth_type_e *type)
3302 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3303 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3305 if (!_connection_libnet_check_profile_validity(profile) || type == NULL) {
3306 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3308 return CONNECTION_ERROR_INVALID_PARAMETER;
3311 net_profile_info_t *profile_info = profile;
3312 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3314 if (!net_info || false == __profile_ethernet_validate_eap_auth_type(net_info)) {
3315 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3317 return CONNECTION_ERROR_INVALID_OPERATION;
3320 *type = net_info->eap.eap_auth;
3323 return CONNECTION_ERROR_NONE;
3326 EXPORT_API int connection_profile_set_ethernet_eap_peap_version(connection_profile_h profile,
3327 connection_ethernet_eap_peap_version_e version)
3331 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3332 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3334 if (!_connection_libnet_check_profile_validity(profile)) {
3335 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3337 return CONNECTION_ERROR_INVALID_PARAMETER;
3340 net_profile_info_t *profile_info = profile;
3341 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3343 if (!net_info || false == __profile_ethernet_validate_eap_peap_version(net_info)) {
3344 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3346 return CONNECTION_ERROR_INVALID_OPERATION;
3348 net_info->eap.peap_version = version;
3351 return CONNECTION_ERROR_NONE;
3354 EXPORT_API int connection_profile_get_ethernet_eap_peap_version(connection_profile_h profile,
3355 connection_ethernet_eap_peap_version_e *version)
3359 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
3360 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
3362 if (!_connection_libnet_check_profile_validity(profile) || version == NULL) {
3363 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
3365 return CONNECTION_ERROR_INVALID_PARAMETER;
3368 net_profile_info_t *profile_info = profile;
3369 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
3371 if (!net_info || false == __profile_ethernet_validate_eap_peap_version(net_info)) {
3372 CONNECTION_LOG(CONNECTION_ERROR, "Invalid operation");
3374 return CONNECTION_ERROR_INVALID_OPERATION;
3377 *version = net_info->eap.peap_version;
3380 return CONNECTION_ERROR_NONE;