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;
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);
62 ipaddr = (unsigned char *)&ip_addr->Data.Ipv6.s6_addr;
63 ipstr = g_try_malloc0(INET6_ADDRSTRLEN);
67 inet_ntop(AF_INET6, ipaddr, ipstr, INET6_ADDRSTRLEN);
73 static void __profile_init_cellular_profile(net_profile_info_t *profile_info, const char *keyword)
75 int default_subscriber_id = 0;
76 connection_profile_h profile = NULL;
78 profile_info->profile_type = NET_DEVICE_CELLULAR;
79 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
80 profile_info->ProfileInfo.Pdp.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
81 profile_info->ProfileInfo.Pdp.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
82 g_strlcpy(profile_info->ProfileInfo.Pdp.Keyword, keyword, NET_PDP_APN_LEN_MAX);
84 if (vconf_get_int(VCONF_TELEPHONY_DEFAULT_DATA_SERVICE,
85 &default_subscriber_id) != 0)
86 CONNECTION_LOG(CONNECTION_ERROR,
87 "Failed to get VCONF_TELEPHONY_DEFAULT_DATA_SERVICE");
89 profile = (connection_profile_h)profile_info;
90 _connection_libnet_set_cellular_subscriber_id(profile, default_subscriber_id);
93 static void __profile_init_wifi_profile(net_profile_info_t *profile_info)
95 profile_info->profile_type = NET_DEVICE_WIFI;
96 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
97 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
98 profile_info->ProfileInfo.Wlan.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
99 profile_info->ProfileInfo.Wlan.wlan_mode = NETPM_WLAN_CONNMODE_AUTO;
100 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_NONE;
101 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_NONE;
104 static const char* __profile_get_ethernet_proxy(void)
108 proxy = vconf_get_str(VCONFKEY_NETWORK_PROXY);
111 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get system proxy");
118 connection_cellular_service_type_e _profile_convert_to_connection_cellular_service_type(net_service_type_t svc_type)
121 case NET_SERVICE_INTERNET:
122 return CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET;
123 case NET_SERVICE_MMS:
124 return CONNECTION_CELLULAR_SERVICE_TYPE_MMS;
125 case NET_SERVICE_PREPAID_INTERNET:
126 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET;
127 case NET_SERVICE_PREPAID_MMS:
128 return CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS;
129 case NET_SERVICE_TETHERING:
130 return CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING;
131 case NET_SERVICE_APPLICATION:
132 return CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION;
134 return CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN;
138 connection_profile_state_e _profile_convert_to_cp_state(net_state_type_t state)
140 connection_profile_state_e cp_state;
143 case NET_STATE_TYPE_ONLINE:
144 case NET_STATE_TYPE_READY:
145 cp_state = CONNECTION_PROFILE_STATE_CONNECTED;
147 case NET_STATE_TYPE_IDLE:
148 case NET_STATE_TYPE_FAILURE:
149 case NET_STATE_TYPE_DISCONNECT:
150 cp_state = CONNECTION_PROFILE_STATE_DISCONNECTED;
152 case NET_STATE_TYPE_ASSOCIATION:
153 cp_state = CONNECTION_PROFILE_STATE_ASSOCIATION;
155 case NET_STATE_TYPE_CONFIGURATION:
156 cp_state = CONNECTION_PROFILE_STATE_CONFIGURATION;
165 net_service_type_t _connection_profile_convert_to_libnet_cellular_service_type(connection_cellular_service_type_e svc_type)
168 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
169 return NET_SERVICE_INTERNET;
170 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
171 return NET_SERVICE_MMS;
172 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
173 return NET_SERVICE_PREPAID_INTERNET;
174 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
175 return NET_SERVICE_PREPAID_MMS;
176 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
177 return NET_SERVICE_TETHERING;
178 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
179 return NET_SERVICE_APPLICATION;
181 return NET_SERVICE_UNKNOWN;
185 net_state_type_t _connection_profile_convert_to_net_state(connection_profile_state_e state)
187 net_state_type_t libnet_state = NET_STATE_TYPE_UNKNOWN;
190 case CONNECTION_PROFILE_STATE_CONNECTED:
191 libnet_state = NET_STATE_TYPE_ONLINE;
193 case CONNECTION_PROFILE_STATE_DISCONNECTED:
194 libnet_state = NET_STATE_TYPE_IDLE;
196 case CONNECTION_PROFILE_STATE_ASSOCIATION:
197 libnet_state = NET_STATE_TYPE_ASSOCIATION;
199 case CONNECTION_PROFILE_STATE_CONFIGURATION:
200 libnet_state = NET_STATE_TYPE_CONFIGURATION;
208 /* Connection profile ********************************************************/
209 EXPORT_API int connection_profile_create(connection_profile_type_e type, const char* keyword, connection_profile_h* profile)
211 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
213 if(type == CONNECTION_PROFILE_TYPE_CELLULAR)
214 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
215 else if(type == CONNECTION_PROFILE_TYPE_WIFI)
216 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
218 if (type != CONNECTION_PROFILE_TYPE_CELLULAR &&
219 type != CONNECTION_PROFILE_TYPE_WIFI) {
220 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
221 return CONNECTION_ERROR_INVALID_PARAMETER;
224 if (profile == NULL) {
225 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
226 return CONNECTION_ERROR_INVALID_PARAMETER;
229 int rv = _connection_libnet_check_profile_privilege();
230 if (rv == CONNECTION_ERROR_PERMISSION_DENIED)
232 else if (rv != CONNECTION_ERROR_NONE) {
233 CONNECTION_LOG(CONNECTION_ERROR, "Failed to create profile");
234 return CONNECTION_ERROR_OPERATION_FAILED;
237 net_profile_info_t *profile_info = g_try_malloc0(sizeof(net_profile_info_t));
238 if (profile_info == NULL)
239 return CONNECTION_ERROR_OUT_OF_MEMORY;
242 case CONNECTION_PROFILE_TYPE_CELLULAR:
243 if (keyword == NULL) {
244 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
245 g_free(profile_info);
246 return CONNECTION_ERROR_INVALID_PARAMETER;
248 __profile_init_cellular_profile(profile_info, keyword);
250 case CONNECTION_PROFILE_TYPE_WIFI:
251 __profile_init_wifi_profile(profile_info);
257 *profile = (connection_profile_h)profile_info;
258 _connection_libnet_add_to_profile_list(*profile);
260 return CONNECTION_ERROR_NONE;
263 EXPORT_API int connection_profile_destroy(connection_profile_h profile)
265 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
267 if (!(_connection_libnet_check_profile_validity(profile))) {
268 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
269 return CONNECTION_ERROR_INVALID_PARAMETER;
272 _connection_libnet_remove_from_profile_list(profile);
274 return CONNECTION_ERROR_NONE;
277 EXPORT_API int connection_profile_clone(connection_profile_h* cloned_profile, connection_profile_h origin_profile)
279 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
281 if (!(_connection_libnet_check_profile_validity(origin_profile)) || cloned_profile == NULL) {
282 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
283 return CONNECTION_ERROR_INVALID_PARAMETER;
286 *cloned_profile = g_try_malloc0(sizeof(net_profile_info_t));
287 if (*cloned_profile == NULL)
288 return CONNECTION_ERROR_OUT_OF_MEMORY;
290 memcpy(*cloned_profile, origin_profile, sizeof(net_profile_info_t));
291 _connection_libnet_add_to_profile_list(*cloned_profile);
293 return CONNECTION_ERROR_NONE;
296 EXPORT_API int connection_profile_get_id(connection_profile_h profile, char** profile_id)
298 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
300 if (!(_connection_libnet_check_profile_validity(profile)) || profile_id == NULL) {
301 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
302 return CONNECTION_ERROR_INVALID_PARAMETER;
305 net_profile_info_t *profile_info = profile;
307 char *prof_id = strrchr(profile_info->ProfileName, '/');
309 return CONNECTION_ERROR_INVALID_PARAMETER;
312 *profile_id = g_strdup(prof_id);
314 if (*profile_id == NULL)
315 return CONNECTION_ERROR_OUT_OF_MEMORY;
317 return CONNECTION_ERROR_NONE;
320 EXPORT_API int connection_profile_get_name(connection_profile_h profile, char** profile_name)
322 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
324 if (!(_connection_libnet_check_profile_validity(profile)) || profile_name == NULL) {
325 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
326 return CONNECTION_ERROR_INVALID_PARAMETER;
329 net_profile_info_t *profile_info = profile;
331 switch (profile_info->profile_type) {
332 case NET_DEVICE_CELLULAR:
333 *profile_name = g_strdup(profile_info->ProfileInfo.Pdp.Keyword);
335 case NET_DEVICE_WIFI:
336 *profile_name = g_strdup(profile_info->ProfileInfo.Wlan.essid);
338 case NET_DEVICE_ETHERNET:
339 *profile_name = g_strdup(profile_info->ProfileInfo.Ethernet.net_info.DevName);
341 case NET_DEVICE_BLUETOOTH: {
342 char *bt_name = strrchr(profile_info->ProfileName, '/');
344 return CONNECTION_ERROR_INVALID_PARAMETER;
347 *profile_name = g_strdup(bt_name);
350 return CONNECTION_ERROR_INVALID_PARAMETER;
353 if (*profile_name == NULL)
354 return CONNECTION_ERROR_OUT_OF_MEMORY;
356 return CONNECTION_ERROR_NONE;
359 EXPORT_API int connection_profile_get_type(connection_profile_h profile, connection_profile_type_e* type)
361 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
363 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
364 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
365 return CONNECTION_ERROR_INVALID_PARAMETER;
368 net_profile_info_t *profile_info = profile;
370 switch (profile_info->profile_type) {
371 case NET_DEVICE_CELLULAR:
372 *type = CONNECTION_PROFILE_TYPE_CELLULAR;
374 case NET_DEVICE_WIFI:
375 *type = CONNECTION_PROFILE_TYPE_WIFI;
377 case NET_DEVICE_ETHERNET:
378 *type = CONNECTION_PROFILE_TYPE_ETHERNET;
380 case NET_DEVICE_BLUETOOTH:
381 *type = CONNECTION_PROFILE_TYPE_BT;
384 CONNECTION_LOG(CONNECTION_ERROR, "Invalid profile type");
385 return CONNECTION_ERROR_OPERATION_FAILED;
388 return CONNECTION_ERROR_NONE;
391 EXPORT_API int connection_profile_get_network_interface_name(connection_profile_h profile, char** interface_name)
393 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
395 if (!(_connection_libnet_check_profile_validity(profile)) || interface_name == NULL) {
396 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
397 return CONNECTION_ERROR_INVALID_PARAMETER;
400 net_profile_info_t *profile_info = profile;
401 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
402 if (net_info == NULL)
403 return CONNECTION_ERROR_INVALID_PARAMETER;
405 *interface_name = g_strdup(net_info->DevName);
406 if (*interface_name == NULL)
407 return CONNECTION_ERROR_OUT_OF_MEMORY;
409 return CONNECTION_ERROR_NONE;
412 EXPORT_API int connection_profile_refresh(connection_profile_h profile)
416 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
418 if (!(_connection_libnet_check_profile_validity(profile))) {
419 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
420 return CONNECTION_ERROR_INVALID_PARAMETER;
423 net_profile_info_t profile_info_local;
424 net_profile_info_t *profile_info = profile;
426 rv = net_get_profile_info(profile_info->ProfileName, &profile_info_local);
427 if (rv == NET_ERR_ACCESS_DENIED) {
428 CONNECTION_LOG(CONNECTION_ERROR, "Access denied");
429 return CONNECTION_ERROR_PERMISSION_DENIED;
430 } else if (rv != NET_ERR_NONE) {
431 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get profile information");
432 return CONNECTION_ERROR_OPERATION_FAILED;
435 memcpy(profile, &profile_info_local, sizeof(net_profile_info_t));
437 return CONNECTION_ERROR_NONE;
440 EXPORT_API int connection_profile_get_state(connection_profile_h profile, connection_profile_state_e* state)
442 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
444 if (!(_connection_libnet_check_profile_validity(profile)) || state == NULL) {
445 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
446 return CONNECTION_ERROR_INVALID_PARAMETER;
449 net_profile_info_t *profile_info = profile;
450 *state = _profile_convert_to_cp_state(profile_info->ProfileState);
452 return CONNECTION_ERROR_OPERATION_FAILED;
454 return CONNECTION_ERROR_NONE;
457 EXPORT_API int connection_profile_get_ip_config_type(connection_profile_h profile,
458 connection_address_family_e address_family, connection_ip_config_type_e* type)
460 net_ip_config_type_t profile_type;
462 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
464 if (!(_connection_libnet_check_profile_validity(profile)) ||
465 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
466 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
468 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
469 return CONNECTION_ERROR_INVALID_PARAMETER;
472 net_profile_info_t *profile_info = profile;
473 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
474 if (net_info == NULL)
475 return CONNECTION_ERROR_OPERATION_FAILED;
477 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
478 profile_type = net_info->IpConfigType;
480 profile_type = net_info->IpConfigType6;
482 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
483 switch (profile_type) {
484 case NET_IP_CONFIG_TYPE_STATIC:
485 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
488 case NET_IP_CONFIG_TYPE_DYNAMIC:
489 *type = CONNECTION_IP_CONFIG_TYPE_DYNAMIC;
492 case NET_IP_CONFIG_TYPE_AUTO_IP:
493 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
496 case NET_IP_CONFIG_TYPE_FIXED:
497 *type = CONNECTION_IP_CONFIG_TYPE_FIXED;
500 case NET_IP_CONFIG_TYPE_OFF:
501 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
504 return CONNECTION_ERROR_OPERATION_FAILED;
507 switch (profile_type) {
508 case NET_IP_CONFIG_TYPE_STATIC:
509 *type = CONNECTION_IP_CONFIG_TYPE_STATIC;
512 case NET_IP_CONFIG_TYPE_AUTO_IP:
513 *type = CONNECTION_IP_CONFIG_TYPE_AUTO;
516 case NET_IP_CONFIG_TYPE_OFF:
517 *type = CONNECTION_IP_CONFIG_TYPE_NONE;
521 return CONNECTION_ERROR_OPERATION_FAILED;
526 return CONNECTION_ERROR_NONE;
529 EXPORT_API int connection_profile_get_ip_address(connection_profile_h profile,
530 connection_address_family_e address_family, char** ip_address)
532 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
534 if (!(_connection_libnet_check_profile_validity(profile)) ||
535 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
536 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
537 ip_address == NULL) {
538 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
539 return CONNECTION_ERROR_INVALID_PARAMETER;
542 net_profile_info_t *profile_info = profile;
543 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
544 if (net_info == NULL)
545 return CONNECTION_ERROR_OPERATION_FAILED;
547 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
548 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr6,
551 *ip_address = __profile_convert_ip_to_string(&net_info->IpAddr,
554 if (*ip_address == NULL)
555 return CONNECTION_ERROR_OUT_OF_MEMORY;
557 return CONNECTION_ERROR_NONE;
560 EXPORT_API int connection_profile_get_subnet_mask(connection_profile_h profile,
561 connection_address_family_e address_family, char** subnet_mask)
565 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
567 if (!(_connection_libnet_check_profile_validity(profile)) ||
568 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
569 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
570 subnet_mask == NULL) {
571 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
572 return CONNECTION_ERROR_INVALID_PARAMETER;
575 net_profile_info_t *profile_info = profile;
576 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
577 if (net_info == NULL)
578 return CONNECTION_ERROR_OPERATION_FAILED;
580 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
581 prefixlen = g_try_malloc0(MAX_PREFIX_LENGTH);
582 if (prefixlen != NULL) {
583 snprintf(prefixlen, MAX_PREFIX_LENGTH, "%d", net_info->PrefixLen6);
584 *subnet_mask = prefixlen;
588 *subnet_mask = __profile_convert_ip_to_string(&net_info->SubnetMask,
591 if (*subnet_mask == NULL)
592 return CONNECTION_ERROR_OUT_OF_MEMORY;
594 return CONNECTION_ERROR_NONE;
597 EXPORT_API int connection_profile_get_gateway_address(connection_profile_h profile,
598 connection_address_family_e address_family, char** gateway_address)
600 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
602 if (!(_connection_libnet_check_profile_validity(profile)) ||
603 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
604 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
605 gateway_address == NULL) {
606 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
607 return CONNECTION_ERROR_INVALID_PARAMETER;
610 net_profile_info_t *profile_info = profile;
611 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
612 if (net_info == NULL)
613 return CONNECTION_ERROR_OPERATION_FAILED;
615 if(address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
616 *gateway_address = __profile_convert_ip_to_string(
617 &net_info->GatewayAddr6, address_family);
619 *gateway_address = __profile_convert_ip_to_string(
620 &net_info->GatewayAddr, address_family);
622 if (*gateway_address == NULL)
623 return CONNECTION_ERROR_OUT_OF_MEMORY;
625 return CONNECTION_ERROR_NONE;
628 EXPORT_API int connection_profile_get_dns_address(connection_profile_h profile, int order,
629 connection_address_family_e address_family, char** dns_address)
631 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
633 if (!(_connection_libnet_check_profile_validity(profile)) ||
634 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
635 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
636 dns_address == NULL ||
638 order > NET_DNS_ADDR_MAX) {
639 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
640 return CONNECTION_ERROR_INVALID_PARAMETER;
643 net_profile_info_t *profile_info = profile;
644 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
645 if (net_info == NULL)
646 return CONNECTION_ERROR_OPERATION_FAILED;
648 if(address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
649 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr[order-1],
651 else if(address_family == CONNECTION_ADDRESS_FAMILY_IPV6)
652 *dns_address = __profile_convert_ip_to_string(&net_info->DnsAddr6[order-1],
655 CONNECTION_LOG(CONNECTION_ERROR, "Invalid address family\n");
657 if (*dns_address == NULL)
658 return CONNECTION_ERROR_OUT_OF_MEMORY;
660 return CONNECTION_ERROR_NONE;
663 EXPORT_API int connection_profile_get_proxy_type(connection_profile_h profile, connection_proxy_type_e* type)
665 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
667 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
668 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
669 return CONNECTION_ERROR_INVALID_PARAMETER;
673 net_profile_info_t *profile_info = profile;
674 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
675 if (net_info == NULL)
676 return CONNECTION_ERROR_OPERATION_FAILED;
678 if (profile_info->profile_type == NET_DEVICE_ETHERNET) {
679 proxy = __profile_get_ethernet_proxy();
681 *type = CONNECTION_PROXY_TYPE_DIRECT;
683 *type = CONNECTION_PROXY_TYPE_MANUAL;
685 return CONNECTION_ERROR_NONE;
688 switch (net_info->ProxyMethod) {
689 case NET_PROXY_TYPE_DIRECT:
690 *type = CONNECTION_PROXY_TYPE_DIRECT;
692 case NET_PROXY_TYPE_AUTO:
693 *type = CONNECTION_PROXY_TYPE_AUTO;
695 case NET_PROXY_TYPE_MANUAL:
696 *type = CONNECTION_PROXY_TYPE_MANUAL;
698 case NET_PROXY_TYPE_UNKNOWN:
700 return CONNECTION_ERROR_OPERATION_FAILED;
703 return CONNECTION_ERROR_NONE;
706 EXPORT_API int connection_profile_get_proxy_address(connection_profile_h profile,
707 connection_address_family_e address_family, char** proxy_address)
709 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
711 if (!(_connection_libnet_check_profile_validity(profile)) ||
712 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
713 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
714 proxy_address == NULL) {
715 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
716 return CONNECTION_ERROR_INVALID_PARAMETER;
719 net_profile_info_t *profile_info = profile;
720 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
721 if (net_info == NULL)
722 return CONNECTION_ERROR_OPERATION_FAILED;
724 *proxy_address = g_strdup(net_info->ProxyAddr);
726 if (*proxy_address == NULL)
727 return CONNECTION_ERROR_OUT_OF_MEMORY;
729 return CONNECTION_ERROR_NONE;
732 EXPORT_API int connection_profile_set_ip_config_type(connection_profile_h profile,
733 connection_address_family_e address_family, connection_ip_config_type_e type)
735 net_ip_config_type_t *profile_type = NULL;
737 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
739 if (!(_connection_libnet_check_profile_validity(profile)) ||
740 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
741 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
742 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
743 return CONNECTION_ERROR_INVALID_PARAMETER;
746 net_profile_info_t *profile_info = profile;
747 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
748 if (net_info == NULL)
749 return CONNECTION_ERROR_OPERATION_FAILED;
751 if(address_family == CONNECTION_ADDRESS_FAMILY_IPV4)
752 profile_type = &net_info->IpConfigType ;
754 profile_type = &net_info->IpConfigType6 ;
756 if(address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
758 case CONNECTION_IP_CONFIG_TYPE_STATIC:
759 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
760 net_info->IpAddr.Data.Ipv4.s_addr = 0;
761 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
762 net_info->GatewayAddr.Data.Ipv4.s_addr = 0 ;
765 case CONNECTION_IP_CONFIG_TYPE_DYNAMIC:
766 *profile_type = NET_IP_CONFIG_TYPE_DYNAMIC;
769 case CONNECTION_IP_CONFIG_TYPE_AUTO:
770 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
773 case CONNECTION_IP_CONFIG_TYPE_FIXED:
774 net_info->IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
777 case CONNECTION_IP_CONFIG_TYPE_NONE:
778 *profile_type = NET_IP_CONFIG_TYPE_OFF;
782 return CONNECTION_ERROR_INVALID_PARAMETER;
786 case CONNECTION_IP_CONFIG_TYPE_STATIC:
787 *profile_type = NET_IP_CONFIG_TYPE_STATIC;
788 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
789 net_info->PrefixLen6 = 0 ;
790 inet_pton(AF_INET6, "::",
791 &net_info->GatewayAddr6.Data.Ipv6);
794 case CONNECTION_IP_CONFIG_TYPE_AUTO:
795 *profile_type = NET_IP_CONFIG_TYPE_AUTO_IP;
798 case CONNECTION_IP_CONFIG_TYPE_NONE:
799 *profile_type = NET_IP_CONFIG_TYPE_OFF;
803 return CONNECTION_ERROR_INVALID_PARAMETER;
807 return CONNECTION_ERROR_NONE;
810 EXPORT_API int connection_profile_set_ip_address(connection_profile_h profile,
811 connection_address_family_e address_family, const char* ip_address)
813 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
815 if (!(_connection_libnet_check_profile_validity(profile)) ||
816 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
817 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
818 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
819 return CONNECTION_ERROR_INVALID_PARAMETER;
822 net_profile_info_t *profile_info = profile;
823 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
824 if (net_info == NULL)
825 return CONNECTION_ERROR_OPERATION_FAILED;
827 if(address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
828 if (ip_address == NULL)
829 inet_pton(AF_INET6, "::", &net_info->IpAddr6.Data.Ipv6);
830 else if (inet_pton(AF_INET6, ip_address,
831 &net_info->IpAddr6.Data.Ipv6) < 1)
832 return CONNECTION_ERROR_INVALID_PARAMETER;
834 if (ip_address == NULL)
835 net_info->IpAddr.Data.Ipv4.s_addr = 0;
836 else if (inet_pton(AF_INET, ip_address,
837 &net_info->IpAddr.Data.Ipv4) < 1)
838 return CONNECTION_ERROR_INVALID_PARAMETER;
841 return CONNECTION_ERROR_NONE;
844 EXPORT_API int connection_profile_set_subnet_mask(connection_profile_h profile,
845 connection_address_family_e address_family, const char* subnet_mask)
847 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
849 if (!(_connection_libnet_check_profile_validity(profile)) ||
850 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
851 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
852 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
853 return CONNECTION_ERROR_INVALID_PARAMETER;
856 net_profile_info_t *profile_info = profile;
857 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
858 if (net_info == NULL)
859 return CONNECTION_ERROR_OPERATION_FAILED;
861 if(address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
862 if (subnet_mask == NULL)
863 net_info->PrefixLen6 = 0 ;
865 net_info->PrefixLen6 = atoi(subnet_mask) ;
867 if (subnet_mask == NULL)
868 net_info->SubnetMask.Data.Ipv4.s_addr = 0;
869 else if (inet_pton(AF_INET, subnet_mask , &net_info->SubnetMask.Data.Ipv4) < 1 )
870 return CONNECTION_ERROR_INVALID_PARAMETER;
873 return CONNECTION_ERROR_NONE;
876 EXPORT_API int connection_profile_set_gateway_address(connection_profile_h profile,
877 connection_address_family_e address_family, const char* gateway_address)
879 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
881 if (!(_connection_libnet_check_profile_validity(profile)) ||
882 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
883 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
884 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
885 return CONNECTION_ERROR_INVALID_PARAMETER;
888 net_profile_info_t *profile_info = profile;
889 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
890 if (net_info == NULL)
891 return CONNECTION_ERROR_OPERATION_FAILED;
893 if(address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
894 if (gateway_address == NULL)
895 inet_pton(AF_INET6, "::", &net_info->GatewayAddr6.Data.Ipv6);
896 else if (inet_pton(AF_INET6, gateway_address, &net_info->GatewayAddr6.Data.Ipv6) < 1)
897 return CONNECTION_ERROR_INVALID_PARAMETER;
899 if (gateway_address == NULL)
900 net_info->GatewayAddr.Data.Ipv4.s_addr = 0;
901 else if (inet_pton(AF_INET, gateway_address, &(net_info->GatewayAddr.Data.Ipv4)) < 1)
902 return CONNECTION_ERROR_INVALID_PARAMETER;
905 return CONNECTION_ERROR_NONE;
908 EXPORT_API int connection_profile_set_dns_address(connection_profile_h profile, int order,
909 connection_address_family_e address_family, const char* dns_address)
911 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
913 if (!(_connection_libnet_check_profile_validity(profile)) ||
914 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
915 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
917 order > NET_DNS_ADDR_MAX) {
918 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
919 return CONNECTION_ERROR_INVALID_PARAMETER;
922 net_profile_info_t *profile_info = profile;
923 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
924 if (net_info == NULL)
925 return CONNECTION_ERROR_OPERATION_FAILED;
927 if(address_family == CONNECTION_ADDRESS_FAMILY_IPV6) {
928 net_info->DnsAddr6[order-1].Type = NET_ADDR_IPV6;
929 if (dns_address == NULL)
930 inet_pton(AF_INET6, "::", &net_info->DnsAddr6[order-1].Data.Ipv6);
931 else if (inet_pton(AF_INET6, dns_address, &net_info->DnsAddr6[order-1].Data.Ipv6) < 1)
932 return CONNECTION_ERROR_INVALID_PARAMETER;
933 if (net_info->DnsCount6 < order)
934 net_info->DnsCount6 = order;
936 net_info->DnsAddr[order-1].Type = NET_ADDR_IPV4;
937 if (dns_address == NULL)
938 net_info->DnsAddr[order-1].Data.Ipv4.s_addr = 0;
939 else if (inet_pton(AF_INET, dns_address, &(net_info->DnsAddr[order-1].Data.Ipv4)) < 1)
940 return CONNECTION_ERROR_INVALID_PARAMETER;
941 if (net_info->DnsCount < order)
942 net_info->DnsCount = order;
945 return CONNECTION_ERROR_NONE;
948 EXPORT_API int connection_profile_set_proxy_type(connection_profile_h profile, connection_proxy_type_e type)
950 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
952 if (!(_connection_libnet_check_profile_validity(profile))) {
953 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
954 return CONNECTION_ERROR_INVALID_PARAMETER;
957 net_profile_info_t *profile_info = profile;
958 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
959 if (net_info == NULL)
960 return CONNECTION_ERROR_OPERATION_FAILED;
963 case CONNECTION_PROXY_TYPE_DIRECT:
964 net_info->ProxyMethod = NET_PROXY_TYPE_DIRECT;
966 case CONNECTION_PROXY_TYPE_AUTO:
967 net_info->ProxyMethod = NET_PROXY_TYPE_AUTO;
969 case CONNECTION_PROXY_TYPE_MANUAL:
970 net_info->ProxyMethod = NET_PROXY_TYPE_MANUAL;
973 return CONNECTION_ERROR_INVALID_PARAMETER;
976 return CONNECTION_ERROR_NONE;
979 EXPORT_API int connection_profile_set_proxy_address(connection_profile_h profile,
980 connection_address_family_e address_family, const char* proxy_address)
982 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
984 if (!(_connection_libnet_check_profile_validity(profile)) ||
985 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
986 address_family != CONNECTION_ADDRESS_FAMILY_IPV6)) {
987 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
988 return CONNECTION_ERROR_INVALID_PARAMETER;
991 net_profile_info_t *profile_info = profile;
992 net_dev_info_t *net_info = __profile_get_net_info(profile_info);
993 if (net_info == NULL)
994 return CONNECTION_ERROR_OPERATION_FAILED;
996 if (proxy_address == NULL)
997 net_info->ProxyAddr[0] = '\0';
999 g_strlcpy(net_info->ProxyAddr, proxy_address, NET_PROXY_LEN_MAX);
1001 return CONNECTION_ERROR_NONE;
1004 EXPORT_API int connection_profile_set_state_changed_cb(connection_profile_h profile,
1005 connection_profile_state_changed_cb callback, void* user_data)
1007 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1009 if (!(_connection_libnet_check_profile_validity(profile)) || callback == NULL) {
1010 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1011 return CONNECTION_ERROR_INVALID_PARAMETER;
1014 if (_connection_libnet_add_to_profile_cb_list(profile, callback, user_data))
1015 return CONNECTION_ERROR_NONE;
1017 return CONNECTION_ERROR_OPERATION_FAILED;
1020 EXPORT_API int connection_profile_unset_state_changed_cb(connection_profile_h profile)
1022 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1024 if (!(_connection_libnet_check_profile_validity(profile))) {
1025 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1026 return CONNECTION_ERROR_INVALID_PARAMETER;
1029 if (_connection_libnet_remove_from_profile_cb_list(profile) != true)
1030 return CONNECTION_ERROR_INVALID_PARAMETER;
1032 return CONNECTION_ERROR_NONE;
1036 /* Wi-Fi profile *************************************************************/
1037 EXPORT_API int connection_profile_get_wifi_essid(connection_profile_h profile, char** essid)
1039 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1041 if (!(_connection_libnet_check_profile_validity(profile)) || essid == NULL) {
1042 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1043 return CONNECTION_ERROR_INVALID_PARAMETER;
1046 net_profile_info_t *profile_info = profile;
1048 if (profile_info->profile_type != NET_DEVICE_WIFI)
1049 return CONNECTION_ERROR_INVALID_PARAMETER;
1051 *essid = g_strdup(profile_info->ProfileInfo.Wlan.essid);
1053 return CONNECTION_ERROR_OUT_OF_MEMORY;
1055 return CONNECTION_ERROR_NONE;
1058 EXPORT_API int connection_profile_get_wifi_bssid(connection_profile_h profile, char** bssid)
1060 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1062 if (!(_connection_libnet_check_profile_validity(profile)) || bssid == NULL) {
1063 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1064 return CONNECTION_ERROR_INVALID_PARAMETER;
1067 net_profile_info_t *profile_info = profile;
1069 if (profile_info->profile_type != NET_DEVICE_WIFI)
1070 return CONNECTION_ERROR_INVALID_PARAMETER;
1072 *bssid = g_strdup(profile_info->ProfileInfo.Wlan.bssid);
1074 return CONNECTION_ERROR_OUT_OF_MEMORY;
1076 return CONNECTION_ERROR_NONE;
1079 EXPORT_API int connection_profile_get_wifi_rssi(connection_profile_h profile, int* rssi)
1081 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1083 if (!(_connection_libnet_check_profile_validity(profile)) || rssi == NULL) {
1084 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1085 return CONNECTION_ERROR_INVALID_PARAMETER;
1088 net_profile_info_t *profile_info = profile;
1090 if (profile_info->profile_type != NET_DEVICE_WIFI)
1091 return CONNECTION_ERROR_INVALID_PARAMETER;
1093 *rssi = (int)profile_info->ProfileInfo.Wlan.Strength;
1095 return CONNECTION_ERROR_NONE;
1098 EXPORT_API int connection_profile_get_wifi_frequency(connection_profile_h profile, int* frequency)
1100 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1102 if (!(_connection_libnet_check_profile_validity(profile)) || frequency == NULL) {
1103 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1104 return CONNECTION_ERROR_INVALID_PARAMETER;
1107 net_profile_info_t *profile_info = profile;
1109 if (profile_info->profile_type != NET_DEVICE_WIFI)
1110 return CONNECTION_ERROR_INVALID_PARAMETER;
1112 *frequency = (int)profile_info->ProfileInfo.Wlan.frequency;
1114 return CONNECTION_ERROR_NONE;
1117 EXPORT_API int connection_profile_get_wifi_max_speed(connection_profile_h profile, int* max_speed)
1119 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1121 if (!(_connection_libnet_check_profile_validity(profile)) || max_speed == NULL) {
1122 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1123 return CONNECTION_ERROR_INVALID_PARAMETER;
1126 net_profile_info_t *profile_info = profile;
1128 if (profile_info->profile_type != NET_DEVICE_WIFI)
1129 return CONNECTION_ERROR_INVALID_PARAMETER;
1131 *max_speed = (int)profile_info->ProfileInfo.Wlan.max_rate;
1133 return CONNECTION_ERROR_NONE;
1136 EXPORT_API int connection_profile_get_wifi_security_type(connection_profile_h profile, connection_wifi_security_type_e* type)
1138 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1140 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1141 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1142 return CONNECTION_ERROR_INVALID_PARAMETER;
1145 net_profile_info_t *profile_info = profile;
1147 if (profile_info->profile_type != NET_DEVICE_WIFI)
1148 return CONNECTION_ERROR_INVALID_PARAMETER;
1150 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
1151 case WLAN_SEC_MODE_NONE:
1152 *type = CONNECTION_WIFI_SECURITY_TYPE_NONE;
1154 case WLAN_SEC_MODE_WEP:
1155 *type = CONNECTION_WIFI_SECURITY_TYPE_WEP;
1157 case WLAN_SEC_MODE_IEEE8021X:
1158 *type = CONNECTION_WIFI_SECURITY_TYPE_EAP;
1160 case WLAN_SEC_MODE_WPA_PSK:
1161 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA_PSK;
1163 case WLAN_SEC_MODE_WPA2_PSK:
1164 *type = CONNECTION_WIFI_SECURITY_TYPE_WPA2_PSK;
1167 return CONNECTION_ERROR_OPERATION_FAILED;
1170 return CONNECTION_ERROR_NONE;
1173 EXPORT_API int connection_profile_get_wifi_encryption_type(connection_profile_h profile, connection_wifi_encryption_type_e* type)
1175 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1177 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1178 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1179 return CONNECTION_ERROR_INVALID_PARAMETER;
1182 net_profile_info_t *profile_info = profile;
1184 if (profile_info->profile_type != NET_DEVICE_WIFI)
1185 return CONNECTION_ERROR_INVALID_PARAMETER;
1187 switch (profile_info->ProfileInfo.Wlan.security_info.enc_mode) {
1188 case WLAN_ENC_MODE_NONE:
1189 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_NONE;
1191 case WLAN_ENC_MODE_WEP:
1192 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_WEP;
1194 case WLAN_ENC_MODE_TKIP:
1195 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP;
1197 case WLAN_ENC_MODE_AES:
1198 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_AES;
1200 case WLAN_ENC_MODE_TKIP_AES_MIXED:
1201 *type = CONNECTION_WIFI_ENCRYPTION_TYPE_TKIP_AES_MIXED;
1204 return CONNECTION_ERROR_OPERATION_FAILED;
1207 return CONNECTION_ERROR_NONE;
1210 EXPORT_API int connection_profile_is_wifi_passphrase_required(connection_profile_h profile, bool* required)
1212 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1214 if (!(_connection_libnet_check_profile_validity(profile)) || required == NULL) {
1215 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1216 return CONNECTION_ERROR_INVALID_PARAMETER;
1219 net_profile_info_t *profile_info = profile;
1221 if (profile_info->profile_type != NET_DEVICE_WIFI)
1222 return CONNECTION_ERROR_INVALID_PARAMETER;
1224 if (profile_info->Favourite) {
1226 return CONNECTION_ERROR_NONE;
1229 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
1230 case WLAN_SEC_MODE_NONE:
1233 case WLAN_SEC_MODE_WEP:
1234 case WLAN_SEC_MODE_IEEE8021X:
1235 case WLAN_SEC_MODE_WPA_PSK:
1236 case WLAN_SEC_MODE_WPA2_PSK:
1240 return CONNECTION_ERROR_OPERATION_FAILED;
1243 return CONNECTION_ERROR_NONE;
1246 EXPORT_API int connection_profile_set_wifi_passphrase(connection_profile_h profile, const char* passphrase)
1248 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1250 if (!(_connection_libnet_check_profile_validity(profile)) || passphrase == NULL) {
1251 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1252 return CONNECTION_ERROR_INVALID_PARAMETER;
1255 net_profile_info_t *profile_info = profile;
1257 if (profile_info->profile_type != NET_DEVICE_WIFI)
1258 return CONNECTION_ERROR_INVALID_PARAMETER;
1260 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.psk.pskKey,
1261 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN);
1263 return CONNECTION_ERROR_NONE;
1266 EXPORT_API int connection_profile_is_wifi_wps_supported(connection_profile_h profile, bool* supported)
1268 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1270 if (!(_connection_libnet_check_profile_validity(profile)) || supported == NULL) {
1271 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1272 return CONNECTION_ERROR_INVALID_PARAMETER;
1275 net_profile_info_t *profile_info = profile;
1277 if (profile_info->profile_type != NET_DEVICE_WIFI)
1278 return CONNECTION_ERROR_INVALID_PARAMETER;
1280 if (profile_info->ProfileInfo.Wlan.security_info.wps_support)
1285 return CONNECTION_ERROR_NONE;
1289 /* Cellular profile **********************************************************/
1290 EXPORT_API int connection_profile_get_cellular_service_type(connection_profile_h profile,
1291 connection_cellular_service_type_e* type)
1293 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1295 if (!(_connection_libnet_check_profile_validity(profile)) || type == NULL) {
1296 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1297 return CONNECTION_ERROR_INVALID_PARAMETER;
1300 net_profile_info_t *profile_info = profile;
1302 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1303 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1304 return CONNECTION_ERROR_INVALID_PARAMETER;
1307 *type = _profile_convert_to_connection_cellular_service_type(profile_info->ProfileInfo.Pdp.ServiceType);
1309 if (*type == CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN) {
1310 CONNECTION_LOG(CONNECTION_ERROR, "Invalid service type Passed");
1311 return CONNECTION_ERROR_OPERATION_FAILED;
1314 return CONNECTION_ERROR_NONE;
1317 EXPORT_API int connection_profile_get_cellular_apn(connection_profile_h profile, char** apn)
1319 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1321 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1322 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1323 return CONNECTION_ERROR_INVALID_PARAMETER;
1326 net_profile_info_t *profile_info = profile;
1328 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1329 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1330 return CONNECTION_ERROR_INVALID_PARAMETER;
1333 *apn = g_strdup(profile_info->ProfileInfo.Pdp.Apn);
1335 return CONNECTION_ERROR_OUT_OF_MEMORY;
1337 return CONNECTION_ERROR_NONE;
1340 EXPORT_API int connection_profile_get_cellular_auth_info(connection_profile_h profile,
1341 connection_cellular_auth_type_e* type, char** user_name, char** password)
1343 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1345 if (!(_connection_libnet_check_profile_validity(profile)) ||
1346 type == NULL || user_name == NULL || password == NULL) {
1347 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1348 return CONNECTION_ERROR_INVALID_PARAMETER;
1351 net_profile_info_t *profile_info = profile;
1353 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1354 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1355 return CONNECTION_ERROR_INVALID_PARAMETER;
1358 switch (profile_info->ProfileInfo.Pdp.AuthInfo.AuthType) {
1359 case NET_PDP_AUTH_NONE:
1360 *type = CONNECTION_CELLULAR_AUTH_TYPE_NONE;
1362 case NET_PDP_AUTH_PAP:
1363 *type = CONNECTION_CELLULAR_AUTH_TYPE_PAP;
1365 case NET_PDP_AUTH_CHAP:
1366 *type = CONNECTION_CELLULAR_AUTH_TYPE_CHAP;
1369 return CONNECTION_ERROR_OPERATION_FAILED;
1372 *user_name = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.UserName);
1373 if (*user_name == NULL)
1374 return CONNECTION_ERROR_OUT_OF_MEMORY;
1376 *password = g_strdup(profile_info->ProfileInfo.Pdp.AuthInfo.Password);
1377 if (*password == NULL) {
1379 return CONNECTION_ERROR_OUT_OF_MEMORY;
1382 return CONNECTION_ERROR_NONE;
1385 EXPORT_API int connection_profile_get_cellular_home_url(connection_profile_h profile, char** home_url)
1387 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1389 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1390 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1391 return CONNECTION_ERROR_INVALID_PARAMETER;
1394 net_profile_info_t *profile_info = profile;
1396 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1397 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1398 return CONNECTION_ERROR_INVALID_PARAMETER;
1401 *home_url = g_strdup(profile_info->ProfileInfo.Pdp.HomeURL);
1402 if (*home_url == NULL)
1403 return CONNECTION_ERROR_OUT_OF_MEMORY;
1405 return CONNECTION_ERROR_NONE;
1408 EXPORT_API int connection_profile_is_cellular_roaming(connection_profile_h profile, bool* is_roaming)
1410 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1412 if (!(_connection_libnet_check_profile_validity(profile)) || is_roaming == NULL) {
1413 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1414 return CONNECTION_ERROR_INVALID_PARAMETER;
1417 net_profile_info_t *profile_info = profile;
1419 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1420 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1421 return CONNECTION_ERROR_INVALID_PARAMETER;
1424 if (profile_info->ProfileInfo.Pdp.Roaming)
1427 *is_roaming = false;
1429 return CONNECTION_ERROR_NONE;
1432 EXPORT_API int connection_profile_is_cellular_hidden(connection_profile_h profile, bool* is_hidden)
1434 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1436 if (!(_connection_libnet_check_profile_validity(profile)) || is_hidden == NULL) {
1437 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1438 return CONNECTION_ERROR_INVALID_PARAMETER;
1441 net_profile_info_t *profile_info = profile;
1443 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1444 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1445 return CONNECTION_ERROR_INVALID_PARAMETER;
1448 if (profile_info->ProfileInfo.Pdp.Hidden)
1453 return CONNECTION_ERROR_NONE;
1456 EXPORT_API int connection_profile_is_cellular_editable(connection_profile_h profile, bool* is_editable)
1458 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1460 if (!(_connection_libnet_check_profile_validity(profile)) || is_editable == NULL) {
1461 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1462 return CONNECTION_ERROR_INVALID_PARAMETER;
1465 net_profile_info_t *profile_info = profile;
1467 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1468 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1469 return CONNECTION_ERROR_INVALID_PARAMETER;
1472 if (profile_info->ProfileInfo.Pdp.Editable)
1473 *is_editable = true;
1475 *is_editable = false;
1477 return CONNECTION_ERROR_NONE;
1480 EXPORT_API int connection_profile_is_cellular_default(connection_profile_h profile, bool* is_default)
1482 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1484 if (!(_connection_libnet_check_profile_validity(profile)) || is_default == NULL) {
1485 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1486 return CONNECTION_ERROR_INVALID_PARAMETER;
1489 net_profile_info_t *profile_info = profile;
1491 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1492 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1493 return CONNECTION_ERROR_INVALID_PARAMETER;
1496 if (profile_info->ProfileInfo.Pdp.DefaultConn)
1499 *is_default = false;
1501 return CONNECTION_ERROR_NONE;
1504 EXPORT_API int connection_profile_set_cellular_service_type(connection_profile_h profile,
1505 connection_cellular_service_type_e service_type)
1507 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1509 if (!(_connection_libnet_check_profile_validity(profile))) {
1510 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1511 return CONNECTION_ERROR_INVALID_PARAMETER;
1514 net_profile_info_t *profile_info = profile;
1516 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1517 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1518 return CONNECTION_ERROR_INVALID_PARAMETER;
1521 switch (service_type) {
1522 case CONNECTION_CELLULAR_SERVICE_TYPE_INTERNET:
1523 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_INTERNET;
1525 case CONNECTION_CELLULAR_SERVICE_TYPE_MMS:
1526 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_MMS;
1528 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_INTERNET:
1529 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_INTERNET;
1531 case CONNECTION_CELLULAR_SERVICE_TYPE_PREPAID_MMS:
1532 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_PREPAID_MMS;
1534 case CONNECTION_CELLULAR_SERVICE_TYPE_TETHERING:
1535 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_TETHERING;
1537 case CONNECTION_CELLULAR_SERVICE_TYPE_APPLICATION:
1538 profile_info->ProfileInfo.Pdp.ServiceType = NET_SERVICE_APPLICATION;
1540 case CONNECTION_CELLULAR_SERVICE_TYPE_UNKNOWN:
1542 return CONNECTION_ERROR_INVALID_PARAMETER;
1545 return CONNECTION_ERROR_NONE;
1548 EXPORT_API int connection_profile_set_cellular_apn(connection_profile_h profile, const char* apn)
1550 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1552 if (!(_connection_libnet_check_profile_validity(profile)) || apn == NULL) {
1553 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1554 return CONNECTION_ERROR_INVALID_PARAMETER;
1557 net_profile_info_t *profile_info = profile;
1559 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1560 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1561 return CONNECTION_ERROR_INVALID_PARAMETER;
1564 g_strlcpy(profile_info->ProfileInfo.Pdp.Apn, apn, NET_PDP_APN_LEN_MAX+1);
1566 return CONNECTION_ERROR_NONE;
1569 EXPORT_API int connection_profile_set_cellular_auth_info(connection_profile_h profile,
1570 connection_cellular_auth_type_e type, const char* user_name, const char* password)
1572 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1574 if (!(_connection_libnet_check_profile_validity(profile)) ||
1575 user_name == NULL || password == NULL) {
1576 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1577 return CONNECTION_ERROR_INVALID_PARAMETER;
1580 net_profile_info_t *profile_info = profile;
1582 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1583 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1584 return CONNECTION_ERROR_INVALID_PARAMETER;
1588 case CONNECTION_CELLULAR_AUTH_TYPE_NONE:
1589 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_NONE;
1591 case CONNECTION_CELLULAR_AUTH_TYPE_PAP:
1592 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_PAP;
1594 case CONNECTION_CELLULAR_AUTH_TYPE_CHAP:
1595 profile_info->ProfileInfo.Pdp.AuthInfo.AuthType = NET_PDP_AUTH_CHAP;
1598 return CONNECTION_ERROR_INVALID_PARAMETER;
1601 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.UserName, user_name, NET_PDP_AUTH_USERNAME_LEN_MAX+1);
1602 g_strlcpy(profile_info->ProfileInfo.Pdp.AuthInfo.Password, password, NET_PDP_AUTH_PASSWORD_LEN_MAX+1);
1604 return CONNECTION_ERROR_NONE;
1607 EXPORT_API int connection_profile_set_cellular_home_url(connection_profile_h profile, const char* home_url)
1609 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1611 if (!(_connection_libnet_check_profile_validity(profile)) || home_url == NULL) {
1612 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1613 return CONNECTION_ERROR_INVALID_PARAMETER;
1616 net_profile_info_t *profile_info = profile;
1618 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
1619 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1620 return CONNECTION_ERROR_INVALID_PARAMETER;
1623 g_strlcpy(profile_info->ProfileInfo.Pdp.HomeURL, home_url, NET_HOME_URL_LEN_MAX);
1625 return CONNECTION_ERROR_NONE;