2 * Copyright (c) 2011-2013 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <arpa/inet.h>
22 #include <vconf/vconf.h>
24 #include "net_connection_private.h"
26 #define HTTP_PROXY "http_proxy"
27 #define MAX_PREFIX_LENGTH 6
29 static net_dev_info_t* __profile_get_net_info(net_profile_info_t *profile_info)
31 switch (profile_info->profile_type) {
32 case NET_DEVICE_CELLULAR:
33 return &profile_info->ProfileInfo.Pdp.net_info;
35 return &profile_info->ProfileInfo.Wlan.net_info;
36 case NET_DEVICE_ETHERNET:
37 return &profile_info->ProfileInfo.Ethernet.net_info; //LCOV_EXCL_LINE
38 case NET_DEVICE_BLUETOOTH:
39 return &profile_info->ProfileInfo.Bluetooth.net_info;
40 case NET_DEVICE_DEFAULT:
42 case NET_DEVICE_UNKNOWN:
49 static char *__profile_convert_ip_to_string(net_addr_t *ip_addr, connection_address_family_e address_family)
51 unsigned char *ipaddr = NULL;
54 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
55 ipaddr = (unsigned char *)&ip_addr->Data.Ipv4.s_addr;
56 ipstr = g_try_malloc0(INET_ADDRSTRLEN);
60 inet_ntop(AF_INET, ipaddr, ipstr, INET_ADDRSTRLEN);
63 ipaddr = (unsigned char *)&ip_addr->Data.Ipv6.s6_addr;
64 ipstr = g_try_malloc0(INET6_ADDRSTRLEN);
68 inet_ntop(AF_INET6, ipaddr, ipstr, INET6_ADDRSTRLEN);
75 static void __profile_init_cellular_profile(net_profile_info_t *profile_info, const char *keyword)
77 int default_subscriber_id = 0;
78 connection_profile_h profile = NULL;
80 profile_info->profile_type = NET_DEVICE_CELLULAR;
81 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
82 profile_info->ProfileInfo.Pdp.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
83 profile_info->ProfileInfo.Pdp.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
84 g_strlcpy(profile_info->ProfileInfo.Pdp.Keyword, keyword, NET_PDP_APN_LEN_MAX);
86 if (vconf_get_int(VCONF_TELEPHONY_DEFAULT_DATA_SERVICE,
87 &default_subscriber_id) != 0)
88 CONNECTION_LOG(CONNECTION_ERROR, //LCOV_EXCL_LINE
89 "Failed to get VCONF_TELEPHONY_DEFAULT_DATA_SERVICE");
91 profile = (connection_profile_h)profile_info;
92 _connection_libnet_set_cellular_subscriber_id(profile, default_subscriber_id);
95 static void __profile_init_wifi_profile(net_profile_info_t *profile_info)
97 profile_info->profile_type = NET_DEVICE_WIFI;
98 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
99 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
100 profile_info->ProfileInfo.Wlan.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
101 profile_info->ProfileInfo.Wlan.wlan_mode = NETPM_WLAN_CONNMODE_AUTO;
102 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_NONE;
103 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_NONE;
107 static const char* __profile_get_ethernet_proxy(void)
111 proxy = vconf_get_str(VCONFKEY_NETWORK_PROXY);
114 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get system proxy");
123 connection_cellular_service_type_e _profile_convert_to_connection_cellular_service_type(net_service_type_t svc_type)
126 case NET_SERVICE_INTERNET:
127 return CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET;
128 case NET_SERVICE_MMS:
129 return CONNECTION_CELLULAR_SERVICE_TYPE_MMS;
130 case NET_SERVICE_PREPAID_INTERNET:
131 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET;
132 case NET_SERVICE_PREPAID_MMS:
133 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS;
134 case NET_SERVICE_TETHERING:
135 return CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING;
136 case NET_SERVICE_APPLICATION:
137 return CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION;
139 return CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
143 connection_profile_state_e _profile_convert_to_cp_state(net_state_type_t state)
145 connection_profile_state_e cp_state;
148 case NET_STATE_TYPE_ONLINE:
149 case NET_STATE_TYPE_READY:
150 cp_state = CONNECTION_PROFILE_STATE_CONNECTED;
152 case NET_STATE_TYPE_IDLE:
153 case NET_STATE_TYPE_FAILURE:
154 case NET_STATE_TYPE_DISCONNECT:
155 cp_state = CONNECTION_PROFILE_STATE_DISCONNECTED;
157 case NET_STATE_TYPE_ASSOCIATION:
158 cp_state = CONNECTION_PROFILE_STATE_ASSOCIATION;
160 case NET_STATE_TYPE_CONFIGURATION:
161 cp_state = CONNECTION_PROFILE_STATE_CONFIGURATION;
170 net_service_type_t _connection_profile_convert_to_libnet_cellular_service_type(connection_cellular_service_type_e svc_type)
173 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
174 return NET_SERVICE_INTERNET;
175 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
176 return NET_SERVICE_MMS;
177 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
178 return NET_SERVICE_PREPAID_INTERNET;
179 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
180 return NET_SERVICE_PREPAID_MMS;
181 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
182 return NET_SERVICE_TETHERING;
183 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
184 return NET_SERVICE_APPLICATION;
186 return NET_SERVICE_UNKNOWN;
190 net_state_type_t _connection_profile_convert_to_net_state(connection_profile_state_e state)
192 net_state_type_t libnet_state = NET_STATE_TYPE_UNKNOWN;
195 case CONNECTION_PROFILE_STATE_CONNECTED:
196 libnet_state = NET_STATE_TYPE_ONLINE;
198 case CONNECTION_PROFILE_STATE_DISCONNECTED:
199 libnet_state = NET_STATE_TYPE_IDLE;
201 case CONNECTION_PROFILE_STATE_ASSOCIATION:
202 libnet_state = NET_STATE_TYPE_ASSOCIATION;
204 case CONNECTION_PROFILE_STATE_CONFIGURATION:
205 libnet_state = NET_STATE_TYPE_CONFIGURATION;
213 /* Connection profile ********************************************************/
214 EXPORT_API int connection_profile_create(connection_profile_type_e type, const char* keyword, connection_profile_h* profile)
216 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
218 if (type == CONNECTION_PROFILE_TYPE_CELLULAR)
219 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
220 else if (type == CONNECTION_PROFILE_TYPE_WIFI)
221 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
223 if (type != CONNECTION_PROFILE_TYPE_CELLULAR &&
224 type != CONNECTION_PROFILE_TYPE_WIFI) {
225 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
226 return CONNECTION_ERROR_INVALID_PARAMETER;
229 if (profile == NULL) {
230 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
231 return CONNECTION_ERROR_INVALID_PARAMETER;
234 int rv = _connection_libnet_check_profile_privilege();
235 if (rv == CONNECTION_ERROR_PERMISSION_DENIED)
237 else if (rv != CONNECTION_ERROR_NONE) {
238 CONNECTION_LOG(CONNECTION_ERROR, "Failed to create profile"); //LCOV_EXCL_LINE
239 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
242 net_profile_info_t *profile_info = g_try_malloc0(sizeof(net_profile_info_t));
243 if (profile_info == NULL)
244 return CONNECTION_ERROR_OUT_OF_MEMORY;
247 case CONNECTION_PROFILE_TYPE_CELLULAR:
248 if (keyword == NULL) {
249 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
250 g_free(profile_info);
251 return CONNECTION_ERROR_INVALID_PARAMETER;
253 __profile_init_cellular_profile(profile_info, keyword);
255 case CONNECTION_PROFILE_TYPE_WIFI:
256 __profile_init_wifi_profile(profile_info);
262 *profile = (connection_profile_h)profile_info;
263 _connection_libnet_add_to_profile_list(*profile);
265 return CONNECTION_ERROR_NONE;
268 EXPORT_API int connection_profile_destroy(connection_profile_h profile)
270 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
272 if (!(_connection_libnet_check_profile_validity(profile))) {
273 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
274 return CONNECTION_ERROR_INVALID_PARAMETER;
277 _connection_libnet_remove_from_profile_list(profile);
279 return CONNECTION_ERROR_NONE;
282 EXPORT_API int connection_profile_clone(connection_profile_h* cloned_profile, connection_profile_h origin_profile)
284 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
286 if (!(_connection_libnet_check_profile_validity(origin_profile)) || cloned_profile == NULL) {
287 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
288 return CONNECTION_ERROR_INVALID_PARAMETER;
291 *cloned_profile = g_try_malloc0(sizeof(net_profile_info_t));
292 if (*cloned_profile == NULL)
293 return CONNECTION_ERROR_OUT_OF_MEMORY;
295 memcpy(*cloned_profile, origin_profile, sizeof(net_profile_info_t));
296 _connection_libnet_add_to_profile_list(*cloned_profile);
298 return CONNECTION_ERROR_NONE;
301 EXPORT_API int connection_profile_get_id(connection_profile_h profile, char** profile_id)
303 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
305 if (!(_connection_libnet_check_profile_validity(profile)) || profile_id == NULL) {
306 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
307 return CONNECTION_ERROR_INVALID_PARAMETER;
310 net_profile_info_t *profile_info = profile;
312 char *prof_id = strrchr(profile_info->ProfileName, '/');
314 return CONNECTION_ERROR_INVALID_PARAMETER;
317 *profile_id = g_strdup(prof_id);
319 if (*profile_id == NULL)
320 return CONNECTION_ERROR_OUT_OF_MEMORY;
322 return CONNECTION_ERROR_NONE;
325 EXPORT_API int connection_profile_get_name(connection_profile_h profile, char** profile_name)
327 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
329 if (!(_connection_libnet_check_profile_validity(profile)) || profile_name == NULL) {
330 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
331 return CONNECTION_ERROR_INVALID_PARAMETER;
334 net_profile_info_t *profile_info = profile;
336 switch (profile_info->profile_type) {
337 case NET_DEVICE_CELLULAR:
338 *profile_name = g_strdup(profile_info->ProfileInfo.Pdp.Keyword);
340 case NET_DEVICE_WIFI:
341 *profile_name = g_strdup(profile_info->ProfileInfo.Wlan.essid);
343 case NET_DEVICE_ETHERNET:
344 *profile_name = g_strdup(profile_info->ProfileInfo.Ethernet.net_info.DevName); //LCOV_EXCL_LINE
345 break; //LCOV_EXCL_LINE
346 case NET_DEVICE_BLUETOOTH: {
347 char *bt_name = strrchr(profile_info->ProfileName, '/');
349 return CONNECTION_ERROR_INVALID_PARAMETER;
352 *profile_name = g_strdup(bt_name);
355 return CONNECTION_ERROR_INVALID_PARAMETER;
358 if (*profile_name == NULL)
359 return CONNECTION_ERROR_OUT_OF_MEMORY;
361 return CONNECTION_ERROR_NONE;
364 EXPORT_API int connection_profile_get_type(connection_profile_h profile, connection_profile_type_e* type)
366 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
368 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
369 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
370 return CONNECTION_ERROR_INVALID_PARAMETER;
373 net_profile_info_t *profile_info = profile;
375 switch (profile_info->profile_type) {
376 case NET_DEVICE_CELLULAR:
377 *type = CONNECTION_PROFILE_TYPE_CELLULAR;
379 case NET_DEVICE_WIFI:
380 *type = CONNECTION_PROFILE_TYPE_WIFI;
382 case NET_DEVICE_ETHERNET:
383 *type = CONNECTION_PROFILE_TYPE_ETHERNET; //LCOV_EXCL_LINE
384 break; //LCOV_EXCL_LINE
385 case NET_DEVICE_BLUETOOTH:
386 *type = CONNECTION_PROFILE_TYPE_BT;
389 CONNECTION_LOG(CONNECTION_ERROR, "Invalid profile type");
390 return CONNECTION_ERROR_OPERATION_FAILED;
393 return CONNECTION_ERROR_NONE;
396 EXPORT_API int connection_profile_get_network_interface_name(connection_profile_h profile, char** interface_name)
398 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
400 if (!(_connection_libnet_check_profile_validity(profile)) || interface_name == NULL) {
401 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
402 return CONNECTION_ERROR_INVALID_PARAMETER;
405 net_profile_info_t *profile_info = profile;
406 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
407 if (net_info == NULL)
408 return CONNECTION_ERROR_INVALID_PARAMETER;
410 *interface_name = g_strdup(net_info->DevName);
411 if (*interface_name == NULL)
412 return CONNECTION_ERROR_OUT_OF_MEMORY;
414 return CONNECTION_ERROR_NONE;
417 EXPORT_API int connection_profile_refresh(connection_profile_h profile)
421 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
423 if (!(_connection_libnet_check_profile_validity(profile))) {
424 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
425 return CONNECTION_ERROR_INVALID_PARAMETER;
428 net_profile_info_t profile_info_local;
429 net_profile_info_t *profile_info = profile;
431 rv = net_get_profile_info(profile_info->ProfileName, &profile_info_local);
432 if (rv == NET_ERR_ACCESS_DENIED) {
433 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
434 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
435 } else if (rv != NET_ERR_NONE) {
436 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get profile information"); //LCOV_EXCL_LINE
437 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
440 memcpy(profile, &profile_info_local, sizeof(net_profile_info_t));
442 return CONNECTION_ERROR_NONE;
445 EXPORT_API int connection_profile_get_state(connection_profile_h profile, connection_profile_state_e* state)
447 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
449 if (!(_connection_libnet_check_profile_validity(profile)) || state == NULL) {
450 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
451 return CONNECTION_ERROR_INVALID_PARAMETER;
454 net_profile_info_t *profile_info = profile;
455 *state = _profile_convert_to_cp_state(profile_info->ProfileState);
457 return CONNECTION_ERROR_NONE;
460 EXPORT_API int connection_profile_get_ip_config_type(connection_profile_h profile,
461 connection_address_family_e address_family, connection_ip_config_type_e* type)
463 net_ip_config_type_t profile_type;
465 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
467 if (!(_connection_libnet_check_profile_validity(profile)) ||
468 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
469 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
471 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
472 return CONNECTION_ERROR_INVALID_PARAMETER;
475 net_profile_info_t *profile_info = profile;
476 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
477 if (net_info == NULL)
478 return CONNECTION_ERROR_OPERATION_FAILED;
480 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
481 profile_type = net_info->IpConfigType;
483 profile_type = net_info->IpConfigType6;
485 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
486 switch (profile_type) {
488 case NET_IP_CONFIG_TYPE_STATIC:
489 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
492 case NET_IP_CONFIG_TYPE_DYNAMIC:
493 *type = CONNECTION_IP_CONFIG_TYPE_DYNAMIC;
496 case NET_IP_CONFIG_TYPE_AUTO_IP:
497 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
500 case NET_IP_CONFIG_TYPE_FIXED:
501 *type = CONNECTION_IP_CONFIG_TYPE_FIXED;
504 case NET_IP_CONFIG_TYPE_OFF:
505 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
508 return CONNECTION_ERROR_OPERATION_FAILED;
513 switch (profile_type) {
514 case NET_IP_CONFIG_TYPE_STATIC:
515 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
518 case NET_IP_CONFIG_TYPE_AUTO_IP:
519 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
522 case NET_IP_CONFIG_TYPE_OFF:
523 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
527 return CONNECTION_ERROR_OPERATION_FAILED;
533 return CONNECTION_ERROR_NONE;
536 EXPORT_API int connection_profile_get_ip_address(connection_profile_h profile,
537 connection_address_family_e address_family, char** ip_address)
539 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
541 if (!(_connection_libnet_check_profile_validity(profile)) ||
542 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
543 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
544 ip_address == NULL) {
545 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
546 return CONNECTION_ERROR_INVALID_PARAMETER;
549 net_profile_info_t *profile_info = profile;
550 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
551 if (net_info == NULL)
552 return CONNECTION_ERROR_OPERATION_FAILED;
554 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
555 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr6,
558 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr,
561 if (*ip_address == NULL)
562 return CONNECTION_ERROR_OUT_OF_MEMORY;
564 return CONNECTION_ERROR_NONE;
567 EXPORT_API int connection_profile_get_subnet_mask(connection_profile_h profile,
568 connection_address_family_e address_family, char** subnet_mask)
572 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
574 if (!(_connection_libnet_check_profile_validity(profile)) ||
575 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
576 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
577 subnet_mask == NULL) {
578 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
579 return CONNECTION_ERROR_INVALID_PARAMETER;
582 net_profile_info_t *profile_info = profile;
583 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
584 if (net_info == NULL)
585 return CONNECTION_ERROR_OPERATION_FAILED;
587 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
589 prefixlen = g_try_malloc0(MAX_PREFIX_LENGTH);
590 if (prefixlen != NULL) {
591 snprintf(prefixlen, MAX_PREFIX_LENGTH, "%d", net_info->PrefixLen6);
592 *subnet_mask = prefixlen;
597 *subnet_mask = __profile_convert_ip_to_string(&net_info->SubnetMask,
600 if (*subnet_mask == NULL)
601 return CONNECTION_ERROR_OUT_OF_MEMORY;
603 return CONNECTION_ERROR_NONE;
606 EXPORT_API int connection_profile_get_gateway_address(connection_profile_h profile,
607 connection_address_family_e address_family, char** gateway_address)
609 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
611 if (!(_connection_libnet_check_profile_validity(profile)) ||
612 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
613 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
614 gateway_address == NULL) {
615 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
616 return CONNECTION_ERROR_INVALID_PARAMETER;
619 net_profile_info_t *profile_info = profile;
620 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
621 if (net_info == NULL)
622 return CONNECTION_ERROR_OPERATION_FAILED;
624 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
625 *gateway_address = __profile_convert_ip_to_string(
626 &net_info->GatewayAddr6, address_family);
628 *gateway_address = __profile_convert_ip_to_string(
629 &net_info->GatewayAddr, address_family);
631 if (*gateway_address == NULL)
632 return CONNECTION_ERROR_OUT_OF_MEMORY;
634 return CONNECTION_ERROR_NONE;
637 EXPORT_API int connection_profile_get_dns_address(connection_profile_h profile, int order,
638 connection_address_family_e address_family, char** dns_address)
640 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
642 if (!(_connection_libnet_check_profile_validity(profile)) ||
643 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
644 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
645 dns_address == NULL ||
647 order > NET_DNS_ADDR_MAX) {
648 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
649 return CONNECTION_ERROR_INVALID_PARAMETER;
652 net_profile_info_t *profile_info = profile;
653 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
654 if (net_info == NULL)
655 return CONNECTION_ERROR_OPERATION_FAILED;
657 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
658 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr[order-1],
660 else if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) //LCOV_EXCL_LINE
661 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr6[order-1], //LCOV_EXCL_LINE
664 CONNECTION_LOG(CONNECTION_ERROR, "Invalid address family\n"); //LCOV_EXCL_LINE
666 if (*dns_address == NULL)
667 return CONNECTION_ERROR_OUT_OF_MEMORY;
669 return CONNECTION_ERROR_NONE;
672 EXPORT_API int connection_profile_get_proxy_type(connection_profile_h profile, connection_proxy_type_e* type)
674 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
676 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
677 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
678 return CONNECTION_ERROR_INVALID_PARAMETER;
682 net_profile_info_t *profile_info = profile;
683 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
684 if (net_info == NULL)
685 return CONNECTION_ERROR_OPERATION_FAILED;
688 if (profile_info->profile_type == NET_DEVICE_ETHERNET) {
689 proxy = __profile_get_ethernet_proxy();
691 *type = CONNECTION_PROXY_TYPE_DIRECT;
693 *type = CONNECTION_PROXY_TYPE_MANUAL;
695 return CONNECTION_ERROR_NONE;
699 switch (net_info->ProxyMethod) {
701 case NET_PROXY_TYPE_DIRECT:
702 *type = CONNECTION_PROXY_TYPE_DIRECT;
704 case NET_PROXY_TYPE_AUTO:
705 *type = CONNECTION_PROXY_TYPE_AUTO;
707 case NET_PROXY_TYPE_MANUAL:
708 *type = CONNECTION_PROXY_TYPE_MANUAL;
710 case NET_PROXY_TYPE_UNKNOWN:
712 return CONNECTION_ERROR_OPERATION_FAILED;
716 return CONNECTION_ERROR_NONE;
719 EXPORT_API int connection_profile_get_proxy_address(connection_profile_h profile,
720 connection_address_family_e address_family, char** proxy_address)
722 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
724 if (!(_connection_libnet_check_profile_validity(profile)) ||
725 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
726 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
727 proxy_address == NULL) {
728 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
729 return CONNECTION_ERROR_INVALID_PARAMETER;
732 net_profile_info_t *profile_info = profile;
733 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
734 if (net_info == NULL)
735 return CONNECTION_ERROR_OPERATION_FAILED;
737 *proxy_address = g_strdup(net_info->ProxyAddr);
739 if (*proxy_address == NULL)
740 return CONNECTION_ERROR_OUT_OF_MEMORY;
742 return CONNECTION_ERROR_NONE;
745 EXPORT_API int connection_profile_set_ip_config_type(connection_profile_h profile,
746 connection_address_family_e address_family, connection_ip_config_type_e type)
748 net_ip_config_type_t *profile_type = NULL;
750 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
752 if (!(_connection_libnet_check_profile_validity(profile)) ||
753 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
754 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
755 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
756 return CONNECTION_ERROR_INVALID_PARAMETER;
759 net_profile_info_t *profile_info = profile;
760 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
761 if (net_info == NULL)
762 return CONNECTION_ERROR_OPERATION_FAILED;
764 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
765 profile_type = &net_info->IpConfigType ;
767 profile_type = &net_info->IpConfigType6 ;
769 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
772 case CONNECTION_IP_CONFIG_TYPE_STATIC:
773 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
774 net_info->IpAddr.Data.Ipv4.s_addr = 0;
775 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
776 net_info->GatewayAddr.Data.Ipv4.s_addr = 0 ;
779 case CONNECTION_IP_CONFIG_TYPE_DYNAMIC:
780 *profile_type = NET_IP_CONFIG_TYPE_DYNAMIC;
783 case CONNECTION_IP_CONFIG_TYPE_AUTO:
784 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
787 case CONNECTION_IP_CONFIG_TYPE_FIXED:
788 net_info->IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
791 case CONNECTION_IP_CONFIG_TYPE_NONE:
792 *profile_type = NET_IP_CONFIG_TYPE_OFF;
796 return CONNECTION_ERROR_INVALID_PARAMETER;
802 case CONNECTION_IP_CONFIG_TYPE_STATIC:
803 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
804 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
805 net_info->PrefixLen6 = 0 ;
806 inet_pton(AF_INET6, "::",
807 &net_info->GatewayAddr6.Data.Ipv6);
810 case CONNECTION_IP_CONFIG_TYPE_AUTO:
811 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
814 case CONNECTION_IP_CONFIG_TYPE_NONE:
815 *profile_type = NET_IP_CONFIG_TYPE_OFF;
819 return CONNECTION_ERROR_INVALID_PARAMETER;
824 return CONNECTION_ERROR_NONE;
827 EXPORT_API int connection_profile_set_ip_address(connection_profile_h profile,
828 connection_address_family_e address_family, const char* ip_address)
830 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
832 if (!(_connection_libnet_check_profile_validity(profile)) ||
833 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
834 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
835 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
836 return CONNECTION_ERROR_INVALID_PARAMETER;
839 net_profile_info_t *profile_info = profile;
840 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
841 if (net_info == NULL)
842 return CONNECTION_ERROR_OPERATION_FAILED;
844 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
846 if (ip_address == NULL)
847 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
848 else if (inet_pton(AF_INET6, ip_address,
849 &net_info->IpAddr6.Data.Ipv6) < 1)
850 return CONNECTION_ERROR_INVALID_PARAMETER;
853 if (ip_address == NULL)
854 net_info->IpAddr.Data.Ipv4.s_addr = 0;
855 else if (inet_pton(AF_INET, ip_address,
856 &net_info->IpAddr.Data.Ipv4) < 1)
857 return CONNECTION_ERROR_INVALID_PARAMETER;
860 return CONNECTION_ERROR_NONE;
863 EXPORT_API int connection_profile_set_subnet_mask(connection_profile_h profile,
864 connection_address_family_e address_family, const char* subnet_mask)
866 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
868 if (!(_connection_libnet_check_profile_validity(profile)) ||
869 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
870 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
871 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
872 return CONNECTION_ERROR_INVALID_PARAMETER;
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 return CONNECTION_ERROR_OPERATION_FAILED;
880 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
882 if (subnet_mask == NULL)
883 net_info->PrefixLen6 = 0 ;
885 net_info->PrefixLen6 = atoi(subnet_mask) ;
888 if (subnet_mask == NULL)
889 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
890 else if (inet_pton(AF_INET, subnet_mask , &net_info->SubnetMask.Data.Ipv4) < 1)
891 return CONNECTION_ERROR_INVALID_PARAMETER;
894 return CONNECTION_ERROR_NONE;
897 EXPORT_API int connection_profile_set_gateway_address(connection_profile_h profile,
898 connection_address_family_e address_family, const char* gateway_address)
900 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
902 if (!(_connection_libnet_check_profile_validity(profile)) ||
903 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
904 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
905 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
906 return CONNECTION_ERROR_INVALID_PARAMETER;
909 net_profile_info_t *profile_info = profile;
910 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
911 if (net_info == NULL)
912 return CONNECTION_ERROR_OPERATION_FAILED;
914 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
916 if (gateway_address == NULL)
917 inet_pton(AF_INET6, "::", &net_info->GatewayAddr6.Data.Ipv6);
918 else if (inet_pton(AF_INET6, gateway_address, &net_info->GatewayAddr6.Data.Ipv6) < 1)
919 return CONNECTION_ERROR_INVALID_PARAMETER;
922 if (gateway_address == NULL)
923 net_info->GatewayAddr.Data.Ipv4.s_addr = 0;
924 else if (inet_pton(AF_INET, gateway_address, &(net_info->GatewayAddr.Data.Ipv4)) < 1)
925 return CONNECTION_ERROR_INVALID_PARAMETER;
928 return CONNECTION_ERROR_NONE;
931 EXPORT_API int connection_profile_set_dns_address(connection_profile_h profile, int order,
932 connection_address_family_e address_family, const char* dns_address)
934 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
936 if (!(_connection_libnet_check_profile_validity(profile)) ||
937 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
938 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
940 order > NET_DNS_ADDR_MAX) {
941 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
942 return CONNECTION_ERROR_INVALID_PARAMETER;
945 net_profile_info_t *profile_info = profile;
946 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
947 if (net_info == NULL)
948 return CONNECTION_ERROR_OPERATION_FAILED;
950 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
952 net_info->DnsAddr6[order-1].Type = NET_ADDR_IPV6;
953 if (dns_address == NULL)
954 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[order-1].Data.Ipv6);
955 else if (inet_pton(AF_INET6, dns_address, &net_info->DnsAddr6[order-1].Data.Ipv6) < 1)
956 return CONNECTION_ERROR_INVALID_PARAMETER;
957 if (net_info->DnsCount6 < order)
958 net_info->DnsCount6 = order;
961 net_info->DnsAddr[order-1].Type = NET_ADDR_IPV4;
962 if (dns_address == NULL)
963 net_info->DnsAddr[order-1].Data.Ipv4.s_addr = 0;
964 else if (inet_pton(AF_INET, dns_address, &(net_info->DnsAddr[order-1].Data.Ipv4)) < 1)
965 return CONNECTION_ERROR_INVALID_PARAMETER;
966 if (net_info->DnsCount < order)
967 net_info->DnsCount = order;
970 return CONNECTION_ERROR_NONE;
973 EXPORT_API int connection_profile_set_proxy_type(connection_profile_h profile, connection_proxy_type_e type)
975 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
977 if (!(_connection_libnet_check_profile_validity(profile))) {
978 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
979 return CONNECTION_ERROR_INVALID_PARAMETER;
982 net_profile_info_t *profile_info = profile;
983 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
984 if (net_info == NULL)
985 return CONNECTION_ERROR_OPERATION_FAILED;
989 case CONNECTION_PROXY_TYPE_DIRECT:
990 net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
992 case CONNECTION_PROXY_TYPE_AUTO:
993 net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
995 case CONNECTION_PROXY_TYPE_MANUAL:
996 net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
999 return CONNECTION_ERROR_INVALID_PARAMETER;
1003 return CONNECTION_ERROR_NONE;
1006 EXPORT_API int connection_profile_set_proxy_address(connection_profile_h profile,
1007 connection_address_family_e address_family, const char* proxy_address)
1009 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1011 if (!(_connection_libnet_check_profile_validity(profile)) ||
1012 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1013 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
1014 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1015 return CONNECTION_ERROR_INVALID_PARAMETER;
1018 net_profile_info_t *profile_info = profile;
1019 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
1020 if (net_info == NULL)
1021 return CONNECTION_ERROR_OPERATION_FAILED;
1023 if (proxy_address == NULL)
1024 net_info->ProxyAddr[0] = '\0';
1026 g_strlcpy(net_info->ProxyAddr, proxy_address, NET_PROXY_LEN_MAX);
1028 return CONNECTION_ERROR_NONE;
1031 EXPORT_API int connection_profile_set_state_changed_cb(connection_profile_h profile,
1032 connection_profile_state_changed_cb callback, void* user_data)
1034 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1036 if (!(_connection_libnet_check_profile_validity(profile)) || callback == NULL) {
1037 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1038 return CONNECTION_ERROR_INVALID_PARAMETER;
1041 if (_connection_libnet_add_to_profile_cb_list(profile, callback, user_data))
1042 return CONNECTION_ERROR_NONE;
1044 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1047 EXPORT_API int connection_profile_unset_state_changed_cb(connection_profile_h profile)
1049 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1051 if (!(_connection_libnet_check_profile_validity(profile))) {
1052 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1053 return CONNECTION_ERROR_INVALID_PARAMETER;
1056 if (_connection_libnet_remove_from_profile_cb_list(profile) != true)
1057 return CONNECTION_ERROR_INVALID_PARAMETER;
1059 return CONNECTION_ERROR_NONE;
1063 /* Wi-Fi profile *************************************************************/
1064 EXPORT_API int connection_profile_get_wifi_essid(connection_profile_h profile, char** essid)
1066 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1068 if (!(_connection_libnet_check_profile_validity(profile)) || essid == NULL) {
1069 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1070 return CONNECTION_ERROR_INVALID_PARAMETER;
1073 net_profile_info_t *profile_info = profile;
1075 if (profile_info->profile_type != NET_DEVICE_WIFI)
1076 return CONNECTION_ERROR_INVALID_PARAMETER;
1078 *essid = g_strdup(profile_info->ProfileInfo.Wlan.essid);
1080 return CONNECTION_ERROR_OUT_OF_MEMORY;
1082 return CONNECTION_ERROR_NONE;
1085 EXPORT_API int connection_profile_get_wifi_bssid(connection_profile_h profile, char** bssid)
1087 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1089 if (!(_connection_libnet_check_profile_validity(profile)) || bssid == NULL) {
1090 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1091 return CONNECTION_ERROR_INVALID_PARAMETER;
1094 net_profile_info_t *profile_info = profile;
1096 if (profile_info->profile_type != NET_DEVICE_WIFI)
1097 return CONNECTION_ERROR_INVALID_PARAMETER;
1099 *bssid = g_strdup(profile_info->ProfileInfo.Wlan.bssid);
1101 return CONNECTION_ERROR_OUT_OF_MEMORY;
1103 return CONNECTION_ERROR_NONE;
1106 EXPORT_API int connection_profile_get_wifi_rssi(connection_profile_h profile, int* rssi)
1108 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1110 if (!(_connection_libnet_check_profile_validity(profile)) || rssi == NULL) {
1111 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1112 return CONNECTION_ERROR_INVALID_PARAMETER;
1115 net_profile_info_t *profile_info = profile;
1117 if (profile_info->profile_type != NET_DEVICE_WIFI)
1118 return CONNECTION_ERROR_INVALID_PARAMETER;
1120 *rssi = (int)profile_info->ProfileInfo.Wlan.Strength;
1122 return CONNECTION_ERROR_NONE;
1125 EXPORT_API int connection_profile_get_wifi_frequency(connection_profile_h profile, int* frequency)
1127 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1129 if (!(_connection_libnet_check_profile_validity(profile)) || frequency == NULL) {
1130 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1131 return CONNECTION_ERROR_INVALID_PARAMETER;
1134 net_profile_info_t *profile_info = profile;
1136 if (profile_info->profile_type != NET_DEVICE_WIFI)
1137 return CONNECTION_ERROR_INVALID_PARAMETER;
1139 *frequency = (int)profile_info->ProfileInfo.Wlan.frequency;
1141 return CONNECTION_ERROR_NONE;
1144 EXPORT_API int connection_profile_get_wifi_max_speed(connection_profile_h profile, int* max_speed)
1146 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1148 if (!(_connection_libnet_check_profile_validity(profile)) || max_speed == NULL) {
1149 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1150 return CONNECTION_ERROR_INVALID_PARAMETER;
1153 net_profile_info_t *profile_info = profile;
1155 if (profile_info->profile_type != NET_DEVICE_WIFI)
1156 return CONNECTION_ERROR_INVALID_PARAMETER;
1158 *max_speed = (int)profile_info->ProfileInfo.Wlan.max_rate;
1160 return CONNECTION_ERROR_NONE;
1163 EXPORT_API int connection_profile_get_wifi_security_type(connection_profile_h profile, connection_wifi_security_type_e* type)
1165 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1167 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1168 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1169 return CONNECTION_ERROR_INVALID_PARAMETER;
1172 net_profile_info_t *profile_info = profile;
1174 if (profile_info->profile_type != NET_DEVICE_WIFI)
1175 return CONNECTION_ERROR_INVALID_PARAMETER;
1177 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
1179 case WLAN_SEC_MODE_NONE:
1180 *type = CONNECTION_WIFI_SECURITY_TYPE_NONE;
1182 case WLAN_SEC_MODE_WEP:
1183 *type = CONNECTION_WIFI_SECURITY_TYPE_WEP;
1185 case WLAN_SEC_MODE_IEEE8021X:
1186 *type = CONNECTION_WIFI_SECURITY_TYPE_EAP;
1188 case WLAN_SEC_MODE_WPA_PSK:
1189 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA_PSK;
1191 case WLAN_SEC_MODE_WPA2_PSK:
1192 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA2_PSK;
1195 return CONNECTION_ERROR_OPERATION_FAILED;
1199 return CONNECTION_ERROR_NONE;
1202 EXPORT_API int connection_profile_get_wifi_encryption_type(connection_profile_h profile, connection_wifi_encryption_type_e* type)
1204 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1206 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1207 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1208 return CONNECTION_ERROR_INVALID_PARAMETER;
1211 net_profile_info_t *profile_info = profile;
1213 if (profile_info->profile_type != NET_DEVICE_WIFI)
1214 return CONNECTION_ERROR_INVALID_PARAMETER;
1216 switch (profile_info->ProfileInfo.Wlan.security_info.enc_mode) {
1218 case WLAN_ENC_MODE_NONE:
1219 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_NONE;
1221 case WLAN_ENC_MODE_WEP:
1222 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_WEP;
1224 case WLAN_ENC_MODE_TKIP:
1225 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP;
1227 case WLAN_ENC_MODE_AES:
1228 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_AES;
1230 case WLAN_ENC_MODE_TKIP_AES_MIXED:
1231 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP_AES_MIXED;
1234 return CONNECTION_ERROR_OPERATION_FAILED;
1238 return CONNECTION_ERROR_NONE;
1241 EXPORT_API int connection_profile_is_wifi_passphrase_required(connection_profile_h profile, bool* required)
1243 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1245 if (!(_connection_libnet_check_profile_validity(profile)) || required == NULL) {
1246 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1247 return CONNECTION_ERROR_INVALID_PARAMETER;
1250 net_profile_info_t *profile_info = profile;
1252 if (profile_info->profile_type != NET_DEVICE_WIFI)
1253 return CONNECTION_ERROR_INVALID_PARAMETER;
1255 if (profile_info->Favourite) {
1257 return CONNECTION_ERROR_NONE;
1260 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
1262 case WLAN_SEC_MODE_NONE:
1265 case WLAN_SEC_MODE_WEP:
1266 case WLAN_SEC_MODE_IEEE8021X:
1267 case WLAN_SEC_MODE_WPA_PSK:
1268 case WLAN_SEC_MODE_WPA2_PSK:
1272 return CONNECTION_ERROR_OPERATION_FAILED;
1276 return CONNECTION_ERROR_NONE;
1279 EXPORT_API int connection_profile_set_wifi_passphrase(connection_profile_h profile, const char* passphrase)
1281 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1283 if (!(_connection_libnet_check_profile_validity(profile)) || passphrase == NULL) {
1284 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1285 return CONNECTION_ERROR_INVALID_PARAMETER;
1288 net_profile_info_t *profile_info = profile;
1290 if (profile_info->profile_type != NET_DEVICE_WIFI)
1291 return CONNECTION_ERROR_INVALID_PARAMETER;
1293 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.psk.pskKey,
1294 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1296 return CONNECTION_ERROR_NONE;
1299 EXPORT_API int connection_profile_is_wifi_wps_supported(connection_profile_h profile, bool* supported)
1301 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1303 if (!(_connection_libnet_check_profile_validity(profile)) || supported == NULL) {
1304 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1305 return CONNECTION_ERROR_INVALID_PARAMETER;
1308 net_profile_info_t *profile_info = profile;
1310 if (profile_info->profile_type != NET_DEVICE_WIFI)
1311 return CONNECTION_ERROR_INVALID_PARAMETER;
1313 if (profile_info->ProfileInfo.Wlan.security_info.wps_support)
1318 return CONNECTION_ERROR_NONE;
1322 /* Cellular profile **********************************************************/
1323 EXPORT_API int connection_profile_get_cellular_service_type(connection_profile_h profile,
1324 connection_cellular_service_type_e* type)
1326 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1328 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1329 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1330 return CONNECTION_ERROR_INVALID_PARAMETER;
1333 net_profile_info_t *profile_info = profile;
1335 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1336 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1337 return CONNECTION_ERROR_INVALID_PARAMETER;
1340 *type = _profile_convert_to_connection_cellular_service_type(profile_info->ProfileInfo.Pdp.ServiceType);
1342 if (*type == CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN) {
1343 CONNECTION_LOG(CONNECTION_ERROR, "Invalid service type Passed"); //LCOV_EXCL_LINE
1344 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1347 return CONNECTION_ERROR_NONE;
1350 EXPORT_API int connection_profile_get_cellular_apn(connection_profile_h profile, char** apn)
1352 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1354 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1355 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1356 return CONNECTION_ERROR_INVALID_PARAMETER;
1359 net_profile_info_t *profile_info = profile;
1361 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1362 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1363 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1366 *apn = g_strdup(profile_info->ProfileInfo.Pdp.Apn);
1368 return CONNECTION_ERROR_OUT_OF_MEMORY;
1370 return CONNECTION_ERROR_NONE;
1373 EXPORT_API int connection_profile_get_cellular_auth_info(connection_profile_h profile,
1374 connection_cellular_auth_type_e* type, char** user_name, char** password)
1376 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1378 if (!(_connection_libnet_check_profile_validity(profile)) ||
1379 type == NULL || user_name == NULL || password == NULL) {
1380 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1381 return CONNECTION_ERROR_INVALID_PARAMETER;
1384 net_profile_info_t *profile_info = profile;
1386 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1387 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1388 return CONNECTION_ERROR_INVALID_PARAMETER;
1391 switch (profile_info->ProfileInfo.Pdp.AuthInfo.AuthType) {
1393 case NET_PDP_AUTH_NONE:
1394 *type = CONNECTION_CELLULAR_AUTH_TYPE_NONE;
1396 case NET_PDP_AUTH_PAP:
1397 *type = CONNECTION_CELLULAR_AUTH_TYPE_PAP;
1399 case NET_PDP_AUTH_CHAP:
1400 *type = CONNECTION_CELLULAR_AUTH_TYPE_CHAP;
1403 return CONNECTION_ERROR_OPERATION_FAILED;
1407 *user_name = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.UserName);
1408 if (*user_name == NULL)
1409 return CONNECTION_ERROR_OUT_OF_MEMORY;
1411 *password = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.Password);
1412 if (*password == NULL) {
1413 g_free(*user_name); //LCOV_EXCL_LINE
1414 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
1417 return CONNECTION_ERROR_NONE;
1420 EXPORT_API int connection_profile_get_cellular_home_url(connection_profile_h profile, char** home_url)
1422 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1424 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1425 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1426 return CONNECTION_ERROR_INVALID_PARAMETER;
1429 net_profile_info_t *profile_info = profile;
1431 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1432 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1433 return CONNECTION_ERROR_INVALID_PARAMETER;
1436 *home_url = g_strdup(profile_info->ProfileInfo.Pdp.HomeURL);
1437 if (*home_url == NULL)
1438 return CONNECTION_ERROR_OUT_OF_MEMORY;
1440 return CONNECTION_ERROR_NONE;
1443 EXPORT_API int connection_profile_is_cellular_roaming(connection_profile_h profile, bool* is_roaming)
1445 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1447 if (!(_connection_libnet_check_profile_validity(profile)) || is_roaming == NULL) {
1448 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1449 return CONNECTION_ERROR_INVALID_PARAMETER;
1452 net_profile_info_t *profile_info = profile;
1454 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1455 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1456 return CONNECTION_ERROR_INVALID_PARAMETER;
1459 if (profile_info->ProfileInfo.Pdp.Roaming)
1462 *is_roaming = false;
1464 return CONNECTION_ERROR_NONE;
1467 EXPORT_API int connection_profile_is_cellular_hidden(connection_profile_h profile, bool* is_hidden)
1469 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1471 if (!(_connection_libnet_check_profile_validity(profile)) || is_hidden == NULL) {
1472 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1473 return CONNECTION_ERROR_INVALID_PARAMETER;
1476 net_profile_info_t *profile_info = profile;
1478 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1479 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1480 return CONNECTION_ERROR_INVALID_PARAMETER;
1483 if (profile_info->ProfileInfo.Pdp.Hidden)
1488 return CONNECTION_ERROR_NONE;
1491 EXPORT_API int connection_profile_is_cellular_editable(connection_profile_h profile, bool* is_editable)
1493 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1495 if (!(_connection_libnet_check_profile_validity(profile)) || is_editable == NULL) {
1496 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1497 return CONNECTION_ERROR_INVALID_PARAMETER;
1500 net_profile_info_t *profile_info = profile;
1502 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1503 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1504 return CONNECTION_ERROR_INVALID_PARAMETER;
1507 if (profile_info->ProfileInfo.Pdp.Editable)
1508 *is_editable = true;
1510 *is_editable = false;
1512 return CONNECTION_ERROR_NONE;
1515 EXPORT_API int connection_profile_is_cellular_default(connection_profile_h profile, bool* is_default)
1517 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1519 if (!(_connection_libnet_check_profile_validity(profile)) || is_default == NULL) {
1520 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1521 return CONNECTION_ERROR_INVALID_PARAMETER;
1524 net_profile_info_t *profile_info = profile;
1526 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1527 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1528 return CONNECTION_ERROR_INVALID_PARAMETER;
1531 if (profile_info->ProfileInfo.Pdp.DefaultConn)
1534 *is_default = false;
1536 return CONNECTION_ERROR_NONE;
1539 EXPORT_API int connection_profile_set_cellular_service_type(connection_profile_h profile,
1540 connection_cellular_service_type_e service_type)
1542 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1544 if (!(_connection_libnet_check_profile_validity(profile))) {
1545 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1546 return CONNECTION_ERROR_INVALID_PARAMETER;
1549 net_profile_info_t *profile_info = profile;
1551 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1552 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1553 return CONNECTION_ERROR_INVALID_PARAMETER;
1556 switch (service_type) {
1558 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
1559 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_INTERNET;
1561 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
1562 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_MMS;
1564 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
1565 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_INTERNET;
1567 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
1568 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_MMS;
1570 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
1571 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_TETHERING;
1573 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
1574 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_APPLICATION;
1576 case CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN:
1578 return CONNECTION_ERROR_INVALID_PARAMETER;
1582 return CONNECTION_ERROR_NONE;
1585 EXPORT_API int connection_profile_set_cellular_apn(connection_profile_h profile, const char* apn)
1587 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1589 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1590 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1591 return CONNECTION_ERROR_INVALID_PARAMETER;
1594 net_profile_info_t *profile_info = profile;
1596 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1597 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1598 return CONNECTION_ERROR_INVALID_PARAMETER;
1601 g_strlcpy(profile_info->ProfileInfo.Pdp.Apn, apn, NET_PDP_APN_LEN_MAX+1);
1603 return CONNECTION_ERROR_NONE;
1606 EXPORT_API int connection_profile_set_cellular_auth_info(connection_profile_h profile,
1607 connection_cellular_auth_type_e type, const char* user_name, const char* password)
1609 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1611 if (!(_connection_libnet_check_profile_validity(profile)) ||
1612 user_name == NULL || password == NULL) {
1613 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1614 return CONNECTION_ERROR_INVALID_PARAMETER;
1617 net_profile_info_t *profile_info = profile;
1619 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1620 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1621 return CONNECTION_ERROR_INVALID_PARAMETER;
1626 case CONNECTION_CELLULAR_AUTH_TYPE_NONE:
1627 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_NONE;
1629 case CONNECTION_CELLULAR_AUTH_TYPE_PAP:
1630 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_PAP;
1632 case CONNECTION_CELLULAR_AUTH_TYPE_CHAP:
1633 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_CHAP;
1636 return CONNECTION_ERROR_INVALID_PARAMETER;
1640 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.UserName, user_name, NET_PDP_AUTH_USERNAME_LEN_MAX+1);
1641 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.Password, password, NET_PDP_AUTH_PASSWORD_LEN_MAX+1);
1643 return CONNECTION_ERROR_NONE;
1646 EXPORT_API int connection_profile_set_cellular_home_url(connection_profile_h profile, const char* home_url)
1648 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1650 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1651 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1652 return CONNECTION_ERROR_INVALID_PARAMETER;
1655 net_profile_info_t *profile_info = profile;
1657 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1658 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1659 return CONNECTION_ERROR_INVALID_PARAMETER;
1662 g_strlcpy(profile_info->ProfileInfo.Pdp.HomeURL, home_url, NET_HOME_URL_LEN_MAX);
1664 return CONNECTION_ERROR_NONE;