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 <vconf/vconf.h>
22 #include <system_info.h>
24 #include "net_connection_private.h"
26 static GSList *conn_handle_list = NULL;
27 static int tv_profile = -1; // Unknown
30 static int __connection_convert_net_state(int status)
33 case VCONFKEY_NETWORK_CELLULAR:
34 return CONNECTION_TYPE_CELLULAR;
35 case VCONFKEY_NETWORK_WIFI:
36 return CONNECTION_TYPE_WIFI;
37 case VCONFKEY_NETWORK_ETHERNET:
38 return CONNECTION_TYPE_ETHERNET;
39 case VCONFKEY_NETWORK_BLUETOOTH:
40 return CONNECTION_TYPE_BT;
41 case VCONFKEY_NETWORK_DEFAULT_PROXY:
42 return CONNECTION_TYPE_NET_PROXY;
44 return CONNECTION_TYPE_DISCONNECTED;
48 static int __connection_convert_cellular_state(int status)
51 case VCONFKEY_NETWORK_CELLULAR_ON:
52 return CONNECTION_CELLULAR_STATE_AVAILABLE;
53 case VCONFKEY_NETWORK_CELLULAR_3G_OPTION_OFF:
54 return CONNECTION_CELLULAR_STATE_CALL_ONLY_AVAILABLE;
55 case VCONFKEY_NETWORK_CELLULAR_ROAMING_OFF:
56 return CONNECTION_CELLULAR_STATE_ROAMING_OFF;
57 case VCONFKEY_NETWORK_CELLULAR_FLIGHT_MODE:
58 return CONNECTION_CELLULAR_STATE_FLIGHT_MODE;
60 return CONNECTION_CELLULAR_STATE_OUT_OF_SERVICE;
64 static bool __connection_check_handle_validity(connection_h connection)
68 if (connection == NULL)
71 if (g_slist_find(conn_handle_list, connection) != NULL)
77 bool _connection_check_handle_validity(connection_h connection)
79 return __connection_check_handle_validity(connection);
82 static void __connection_set_type_changed_callback(connection_handle_s *conn_handle,
83 void *callback, void *user_data)
85 conn_handle->type_changed_user_data = user_data;
86 conn_handle->type_changed_callback = callback;
89 static void __connection_set_ip_changed_callback(connection_handle_s *conn_handle,
90 void *callback, void *user_data)
92 conn_handle->ip_changed_user_data = user_data;
93 conn_handle->ip_changed_callback = callback;
96 static void __connection_set_proxy_changed_callback(connection_handle_s *conn_handle,
97 void *callback, void *user_data)
99 conn_handle->proxy_changed_user_data = user_data;
100 conn_handle->proxy_changed_callback = callback;
103 static void __connection_set_internet_state_changed_callback(connection_handle_s *conn_handle,
104 void *callback, void *user_data)
106 conn_handle->internet_state_changed_user_data = user_data;
107 conn_handle->internet_state_changed_callback = callback;
110 static void __connection_set_ethernet_cable_state_changed_cb(connection_handle_s *conn_handle,
111 void *callback, void *user_data)
113 conn_handle->ethernet_cable_state_changed_callback = callback;
114 conn_handle->ethernet_cable_state_changed_user_data = user_data;
117 static void __connection_set_default_cellular_service_profile_callback(connection_handle_s *conn_handle,
118 void *callback, void *user_data)
120 conn_handle->set_default_callback = callback;
121 conn_handle->set_default_user_data = user_data;
124 static void __connection_open_profile_set_callback(connection_handle_s *conn_handle,
125 void *callback, void *user_data)
127 conn_handle->opened_callback = callback;
128 conn_handle->opened_user_data = user_data;
131 static void __connection_close_profile_set_callback(connection_handle_s *conn_handle,
132 void *callback, void *user_data)
134 conn_handle->closed_callback = callback;
135 conn_handle->closed_user_data = user_data;
138 static void __connection_reset_profile_set_callback(connection_handle_s *conn_handle,
139 void *callback, void *user_data)
141 conn_handle->reset_callback = callback;
142 conn_handle->reset_user_data = user_data;
146 /* Connection Manager ********************************************************/
147 EXPORT_API int connection_create(connection_h *connection)
151 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
155 if (connection == NULL || __connection_check_handle_validity(*connection)) {
156 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
157 CONN_UNLOCK; //LCOV_EXCL_LINE
158 return CONNECTION_ERROR_INVALID_PARAMETER;
161 *connection = g_try_malloc0(sizeof(connection_handle_s));
162 if (*connection != NULL) {
163 CONNECTION_LOG(CONNECTION_INFO, "New handle created[%p]", *connection);
165 CONN_UNLOCK; //LCOV_EXCL_LINE
166 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
169 rv = _connection_libnet_init(*connection);
170 if (rv == NET_ERR_ACCESS_DENIED) {
171 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
175 CONN_UNLOCK; //LCOV_EXCL_LINE
176 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
177 } else if (rv != NET_ERR_NONE) {
178 CONNECTION_LOG(CONNECTION_ERROR, "Failed to create connection[%d]", rv); //LCOV_EXCL_LINE
182 CONN_UNLOCK; //LCOV_EXCL_LINE
183 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
186 conn_handle_list = g_slist_prepend(conn_handle_list, *connection);
189 return CONNECTION_ERROR_NONE;
192 EXPORT_API int connection_destroy(connection_h connection)
196 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
198 if (!(__connection_check_handle_validity(connection))) {
199 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
201 return CONNECTION_ERROR_INVALID_PARAMETER;
204 CONNECTION_LOG(CONNECTION_INFO, "Destroy handle: %p", connection);
206 __connection_set_type_changed_callback(connection, NULL, NULL);
207 __connection_set_ip_changed_callback(connection, NULL, NULL);
208 __connection_set_proxy_changed_callback(connection, NULL, NULL);
209 __connection_set_internet_state_changed_callback(connection, NULL, NULL);
210 __connection_set_ethernet_cable_state_changed_cb(connection, NULL, NULL);
212 conn_handle_list = g_slist_remove(conn_handle_list, connection);
213 _connection_libnet_deinit(connection, (conn_handle_list == NULL));
219 return CONNECTION_ERROR_NONE;
223 EXPORT_API int connection_create_cs(int tid, connection_h *connection)
227 rv = connection_create(connection);
228 if (rv == CONNECTION_ERROR_NONE) {
230 _connection_set_cs_tid(tid, *connection);
237 EXPORT_API int connection_destroy_cs(int tid, connection_h connection)
242 _connection_unset_cs_tid(tid, connection);
245 rv = connection_destroy(connection);
251 EXPORT_API int connection_get_type(connection_h connection, connection_type_e* type)
258 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
260 if (type == NULL || !(__connection_check_handle_validity(connection))) {
261 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
263 return CONNECTION_ERROR_INVALID_PARAMETER;
266 rv = vconf_get_int(VCONFKEY_NETWORK_STATUS, &status);
267 if (rv != VCONF_OK) {
268 CONNECTION_LOG(CONNECTION_ERROR, "vconf_get_int Failed = %d", status); //LCOV_EXCL_LINE
269 CONN_UNLOCK; //LCOV_EXCL_LINE
270 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
273 CONNECTION_LOG(CONNECTION_INFO, "Connected Network = %d", status);
275 *type = __connection_convert_net_state(status);
278 return CONNECTION_ERROR_NONE;
281 EXPORT_API int connection_get_ip_address(connection_h connection,
282 connection_address_family_e address_family, char** ip_address)
286 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
288 if (ip_address == NULL || !(__connection_check_handle_validity(connection))) {
289 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
291 return CONNECTION_ERROR_INVALID_PARAMETER;
294 switch (address_family) {
295 case CONNECTION_ADDRESS_FAMILY_IPV4:
296 *ip_address = vconf_get_str(VCONFKEY_NETWORK_IP);
298 case CONNECTION_ADDRESS_FAMILY_IPV6:
299 *ip_address = vconf_get_str(VCONFKEY_NETWORK_IP6);
302 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
304 return CONNECTION_ERROR_INVALID_PARAMETER;
307 if (*ip_address == NULL) {
308 CONNECTION_LOG(CONNECTION_ERROR, "vconf_get_str Failed"); //LCOV_EXCL_LINE
309 CONN_UNLOCK; //LCOV_EXCL_LINE
310 return CONNECTION_ERROR_OPERATION_FAILED;//LCOV_EXCL_LINE
314 return CONNECTION_ERROR_NONE;
317 EXPORT_API int connection_get_proxy(connection_h connection,
318 connection_address_family_e address_family, char** proxy)
322 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
324 if (proxy == NULL || !(__connection_check_handle_validity(connection))) {
325 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
327 return CONNECTION_ERROR_INVALID_PARAMETER;
330 switch (address_family) {
331 case CONNECTION_ADDRESS_FAMILY_IPV4:
332 case CONNECTION_ADDRESS_FAMILY_IPV6:
333 *proxy = vconf_get_str(VCONFKEY_NETWORK_PROXY);
336 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
338 return CONNECTION_ERROR_INVALID_PARAMETER;
341 if (*proxy == NULL) {
342 CONNECTION_LOG(CONNECTION_ERROR, "vconf_get_str Failed"); //LCOV_EXCL_LINE
343 CONN_UNLOCK; //LCOV_EXCL_LINE
344 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
348 return CONNECTION_ERROR_NONE;
351 EXPORT_API int connection_get_mac_address(connection_h connection, connection_type_e type, char** mac_addr)
354 char buf[CONNECTION_MAC_INFO_LENGTH + 1];
358 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE, ETHERNET_FEATURE);
360 if (type == CONNECTION_TYPE_WIFI)
361 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
362 else if (type == CONNECTION_TYPE_ETHERNET) //LCOV_EXCL_LINE
363 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE); //LCOV_EXCL_LINE
365 if (mac_addr == NULL || !(__connection_check_handle_validity(connection))) {
366 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
368 return CONNECTION_ERROR_INVALID_PARAMETER;
372 case CONNECTION_TYPE_WIFI:
373 if (__builtin_expect(tv_profile == -1, 0)) {
375 system_info_get_platform_string("http://tizen.org/feature/profile", &profileName);
376 if (*profileName == 't' || *profileName == 'T')
377 tv_profile = 1; //LCOV_EXCL_LINE
382 if (tv_profile == 1) {
384 fp = fopen(WIFI_MAC_INFO_FILE, "r");
386 CONNECTION_LOG(CONNECTION_ERROR, "Failed to open file %s", WIFI_MAC_INFO_FILE);
388 return CONNECTION_ERROR_OUT_OF_MEMORY;
391 if (fgets(buf, sizeof(buf), fp) == NULL) {
392 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get MAC info from %s", WIFI_MAC_INFO_FILE);
395 return CONNECTION_ERROR_OPERATION_FAILED;
398 CONNECTION_LOG(CONNECTION_INFO, "%s : %s", WIFI_MAC_INFO_FILE, buf);
400 *mac_addr = (char *)malloc(CONNECTION_MAC_INFO_LENGTH + 1);
401 if (*mac_addr == NULL) {
402 CONNECTION_LOG(CONNECTION_ERROR, "malloc() failed");
405 return CONNECTION_ERROR_OUT_OF_MEMORY;
407 g_strlcpy(*mac_addr, buf, CONNECTION_MAC_INFO_LENGTH + 1);
411 *mac_addr = vconf_get_str(VCONFKEY_WIFI_BSSID_ADDRESS);
413 if (*mac_addr == NULL) {
414 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get vconf from %s", VCONFKEY_WIFI_BSSID_ADDRESS); //LCOV_EXCL_LINE
415 CONN_UNLOCK; //LCOV_EXCL_LINE
416 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
421 case CONNECTION_TYPE_ETHERNET:
422 fp = fopen(ETHERNET_MAC_INFO_FILE, "r");
424 CONNECTION_LOG(CONNECTION_ERROR, "Failed to open file %s", ETHERNET_MAC_INFO_FILE);
426 return CONNECTION_ERROR_OUT_OF_MEMORY;
429 if (fgets(buf, sizeof(buf), fp) == NULL) {
430 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get MAC info from %s", ETHERNET_MAC_INFO_FILE);
433 return CONNECTION_ERROR_OPERATION_FAILED;
436 CONNECTION_LOG(CONNECTION_INFO, "%s : %s", ETHERNET_MAC_INFO_FILE, buf);
438 *mac_addr = (char *)malloc(CONNECTION_MAC_INFO_LENGTH + 1);
439 if (*mac_addr == NULL) {
440 CONNECTION_LOG(CONNECTION_ERROR, "malloc() failed");
443 return CONNECTION_ERROR_OUT_OF_MEMORY;
446 g_strlcpy(*mac_addr, buf, CONNECTION_MAC_INFO_LENGTH + 1);
452 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
453 CONN_UNLOCK; //LCOV_EXCL_LINE
454 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
457 /* Checking Invalid MAC Address */
458 if ((strcmp(*mac_addr, "00:00:00:00:00:00") == 0) ||
459 (strcmp(*mac_addr, "ff:ff:ff:ff:ff:ff") == 0)) {
460 CONNECTION_LOG(CONNECTION_ERROR, "MAC Address(%s) is invalid", *mac_addr); //LCOV_EXCL_LINE
461 CONN_UNLOCK; //LCOV_EXCL_LINE
462 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
465 CONNECTION_LOG(CONNECTION_INFO, "MAC Address %s", *mac_addr);
468 return CONNECTION_ERROR_NONE;
472 EXPORT_API int connection_is_metered_network(connection_h connection, bool* is_metered)
476 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
478 if (is_metered == NULL || !(__connection_check_handle_validity(connection))) {
479 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
481 return CONNECTION_ERROR_INVALID_PARAMETER;
484 int rv = _connection_libnet_get_metered_state(connection, is_metered);
485 if (rv != CONNECTION_ERROR_NONE) {
486 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get metered state[%d]", rv); //LCOV_EXCL_LINE
487 CONN_UNLOCK; //LCOV_EXCL_LINE
488 return rv; //LCOV_EXCL_LINE
491 CONNECTION_LOG(CONNECTION_INFO, "metered state: %s", is_metered ? "true" : "false");
493 return CONNECTION_ERROR_NONE;
497 EXPORT_API int connection_get_cellular_state(connection_h connection, connection_cellular_state_e* state)
501 int cellular_state = 0;
502 #if defined TIZEN_DUALSIM_ENABLE
508 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
510 if (state == NULL || !(__connection_check_handle_validity(connection))) {
511 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
513 return CONNECTION_ERROR_INVALID_PARAMETER;
516 rv = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_STATE, &status);
517 if (rv != VCONF_OK) {
518 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get cellular state"); //LCOV_EXCL_LINE
519 CONN_UNLOCK; //LCOV_EXCL_LINE
520 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
523 CONNECTION_LOG(CONNECTION_INFO, "Cellular: %d", status);
524 *state = __connection_convert_cellular_state(status);
526 if (*state == CONNECTION_CELLULAR_STATE_AVAILABLE) {
527 #if defined TIZEN_DUALSIM_ENABLE
528 rv = vconf_get_int(VCONF_TELEPHONY_DEFAULT_DATA_SERVICE, &sim_id);
529 if (rv != VCONF_OK) {
530 CONNECTION_LOG(CONNECTION_ERROR,
531 "Failed to get default subscriber id", sim_id);
533 return CONNECTION_ERROR_OPERATION_FAILED;
537 case CONNECTION_CELLULAR_SUBSCRIBER_1:
539 rv = vconf_get_int(VCONFKEY_DNET_STATE, &cellular_state);
540 #if defined TIZEN_DUALSIM_ENABLE
543 case CONNECTION_CELLULAR_SUBSCRIBER_2:
544 rv = vconf_get_int(VCONFKEY_DNET_STATE2, &cellular_state);
548 CONNECTION_LOG(CONNECTION_ERROR, "Invalid subscriber id:%d", sim_id);
550 return CONNECTION_ERROR_OPERATION_FAILED;
553 if (rv != VCONF_OK) {
554 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get cellular state"); //LCOV_EXCL_LINE
555 CONN_UNLOCK; //LCOV_EXCL_LINE
556 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
560 CONNECTION_LOG(CONNECTION_INFO, "Cellular state: %d", cellular_state);
562 if (cellular_state == VCONFKEY_DNET_NORMAL_CONNECTED ||
563 cellular_state == VCONFKEY_DNET_SECURE_CONNECTED ||
564 cellular_state == VCONFKEY_DNET_TRANSFER)
565 *state = CONNECTION_CELLULAR_STATE_CONNECTED;
568 return CONNECTION_ERROR_NONE;
571 EXPORT_API int connection_get_wifi_state(connection_h connection, connection_wifi_state_e* state)
575 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
577 if (state == NULL || !(__connection_check_handle_validity(connection))) {
578 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
580 return CONNECTION_ERROR_INVALID_PARAMETER;
583 int rv = _connection_libnet_get_wifi_state(connection, state);
584 if (rv != CONNECTION_ERROR_NONE) {
585 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get Wi-Fi state[%d]", rv); //LCOV_EXCL_LINE
586 CONN_UNLOCK; //LCOV_EXCL_LINE
587 return rv; //LCOV_EXCL_LINE
590 CONNECTION_LOG(CONNECTION_INFO, "Wi-Fi state: %d", *state);
593 return CONNECTION_ERROR_NONE;
596 EXPORT_API int connection_get_ethernet_state(connection_h connection, connection_ethernet_state_e *state)
600 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE);
602 if (state == NULL || !(__connection_check_handle_validity(connection))) {
603 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
605 return CONNECTION_ERROR_INVALID_PARAMETER;
608 int rv = _connection_libnet_get_ethernet_state(connection, state);
609 if (rv != CONNECTION_ERROR_NONE) {
610 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get ethernet state[%d]", rv); //LCOV_EXCL_LINE
611 CONN_UNLOCK; //LCOV_EXCL_LINE
612 return rv; //LCOV_EXCL_LINE
616 return CONNECTION_ERROR_NONE;
619 EXPORT_API int connection_get_ethernet_cable_state(connection_h connection, connection_ethernet_cable_state_e *state)
623 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE);
625 if (state == NULL || !(__connection_check_handle_validity(connection))) {
626 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
628 return CONNECTION_ERROR_INVALID_PARAMETER;
631 int rv = _connection_libnet_get_ethernet_cable_state(connection, state);
632 if (rv != CONNECTION_ERROR_NONE) {
633 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get ethernet cable state[%d]", rv); //LCOV_EXCL_LINE
634 CONN_UNLOCK; //LCOV_EXCL_LINE
635 return rv; //LCOV_EXCL_LINE
639 return CONNECTION_ERROR_NONE;
642 EXPORT_API int connection_set_ethernet_cable_state_chaged_cb(connection_h connection,
643 connection_ethernet_cable_state_chaged_cb callback, void *user_data)
645 DEPRECATED_LOG(__FUNCTION__, "connection_set_ethernet_cable_state_changed_cb");
649 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE);
651 if (callback == NULL || !(__connection_check_handle_validity(connection))) {
652 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
654 return CONNECTION_ERROR_INVALID_PARAMETER;
657 DEPRECATED_LOG("connection_ethernet_cable_state_chaged_cb",
658 "connection_ethernet_cable_state_changed_cb");
660 __connection_set_ethernet_cable_state_changed_cb(connection, callback, user_data);
663 return CONNECTION_ERROR_NONE;
666 EXPORT_API int connection_unset_ethernet_cable_state_chaged_cb(connection_h connection)
668 DEPRECATED_LOG(__FUNCTION__, "connection_unset_ethernet_cable_state_changed_cb");
672 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE);
674 if (!(__connection_check_handle_validity(connection))) {
675 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
677 return CONNECTION_ERROR_INVALID_PARAMETER;
680 __connection_set_ethernet_cable_state_changed_cb(connection, NULL, NULL);
683 return CONNECTION_ERROR_NONE;
686 EXPORT_API int connection_set_ethernet_cable_state_changed_cb(connection_h connection,
687 connection_ethernet_cable_state_changed_cb callback, void *user_data)
691 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE);
693 if (callback == NULL || !(__connection_check_handle_validity(connection))) {
694 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
696 return CONNECTION_ERROR_INVALID_PARAMETER;
699 __connection_set_ethernet_cable_state_changed_cb(connection, callback, user_data);
702 return CONNECTION_ERROR_NONE;
705 EXPORT_API int connection_unset_ethernet_cable_state_changed_cb(connection_h connection)
709 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE);
711 if (!(__connection_check_handle_validity(connection))) {
712 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
714 return CONNECTION_ERROR_INVALID_PARAMETER;
717 __connection_set_ethernet_cable_state_changed_cb(connection, NULL, NULL);
720 return CONNECTION_ERROR_NONE;
723 EXPORT_API int connection_get_bt_state(connection_h connection, connection_bt_state_e *state)
727 CHECK_FEATURE_SUPPORTED(TETHERING_BLUETOOTH_FEATURE);
729 if (state == NULL || !(__connection_check_handle_validity(connection))) {
730 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
732 return CONNECTION_ERROR_INVALID_PARAMETER;
735 int rv = _connection_libnet_get_bluetooth_state(connection, state);
736 if (rv != CONNECTION_ERROR_NONE) {
737 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get bluetooth state[%d]", rv); //LCOV_EXCL_LINE
738 CONN_UNLOCK; //LCOV_EXCL_LINE
739 return rv; //LCOV_EXCL_LINE
743 return CONNECTION_ERROR_NONE;
746 EXPORT_API int connection_set_type_changed_cb(connection_h connection,
747 connection_type_changed_cb callback, void* user_data)
751 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
753 if (callback == NULL || !(__connection_check_handle_validity(connection))) {
754 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
756 return CONNECTION_ERROR_INVALID_PARAMETER;
759 __connection_set_type_changed_callback(connection, callback, user_data);
762 return CONNECTION_ERROR_NONE;
765 EXPORT_API int connection_unset_type_changed_cb(connection_h connection)
769 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
771 if (!(__connection_check_handle_validity(connection))) {
772 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
774 return CONNECTION_ERROR_INVALID_PARAMETER;
777 __connection_set_type_changed_callback(connection, NULL, NULL);
780 return CONNECTION_ERROR_NONE;
783 EXPORT_API int connection_set_ip_address_changed_cb(connection_h connection,
784 connection_address_changed_cb callback, void* user_data)
788 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
790 if (callback == NULL || !(__connection_check_handle_validity(connection))) {
791 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
793 return CONNECTION_ERROR_INVALID_PARAMETER;
796 __connection_set_ip_changed_callback(connection, callback, user_data);
799 return CONNECTION_ERROR_NONE;
802 EXPORT_API int connection_unset_ip_address_changed_cb(connection_h connection)
806 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
808 if (!(__connection_check_handle_validity(connection))) {
809 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
811 return CONNECTION_ERROR_INVALID_PARAMETER;
814 __connection_set_ip_changed_callback(connection, NULL, NULL);
817 return CONNECTION_ERROR_NONE;
820 EXPORT_API int connection_set_proxy_address_changed_cb(connection_h connection,
821 connection_address_changed_cb callback, void* user_data)
825 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
827 if (callback == NULL || !(__connection_check_handle_validity(connection))) {
828 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
830 return CONNECTION_ERROR_INVALID_PARAMETER;
833 __connection_set_proxy_changed_callback(connection, callback, user_data);
836 return CONNECTION_ERROR_NONE;
839 EXPORT_API int connection_unset_proxy_address_changed_cb(connection_h connection)
843 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
845 if (!(__connection_check_handle_validity(connection))) {
846 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
848 return CONNECTION_ERROR_INVALID_PARAMETER;
851 __connection_set_proxy_changed_callback(connection, NULL, NULL);
854 return CONNECTION_ERROR_NONE;
857 EXPORT_API int connection_set_internet_state_changed_cb(connection_h connection,
858 connection_internet_state_changed_cb callback, void *user_data)
862 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
864 if (callback == NULL || !(__connection_check_handle_validity(connection))) {
865 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
867 return CONNECTION_ERROR_INVALID_PARAMETER;
870 __connection_set_internet_state_changed_callback(connection, callback, user_data);
873 return CONNECTION_ERROR_NONE;
876 EXPORT_API int connection_unset_internet_state_changed_cb(connection_h connection)
880 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
882 if (!(__connection_check_handle_validity(connection))) {
883 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
885 return CONNECTION_ERROR_INVALID_PARAMETER;
888 __connection_set_internet_state_changed_callback(connection, NULL, NULL);
891 return CONNECTION_ERROR_NONE;
894 EXPORT_API int connection_add_profile(connection_h connection, connection_profile_h profile)
897 connection_handle_s *conn_handle = (connection_handle_s *)connection;
898 net_profile_info_t *profile_info = (net_profile_info_t *)profile;
902 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
904 if (!(__connection_check_handle_validity(connection)) ||
905 !(_connection_libnet_check_profile_validity(profile))) {
906 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
908 return CONNECTION_ERROR_INVALID_PARAMETER;
911 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
912 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
913 CONN_UNLOCK; //LCOV_EXCL_LINE
914 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
917 if (profile_info->ProfileInfo.Pdp.PSModemPath[0] != '/' ||
918 strlen(profile_info->ProfileInfo.Pdp.PSModemPath) < 2) {
919 CONNECTION_LOG(CONNECTION_ERROR, "Modem object path is NULL"); //LCOV_EXCL_LINE
920 CONN_UNLOCK; //LCOV_EXCL_LINE
921 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
924 rv = net_add_profile(conn_handle->network_info_handle,
925 profile_info->ProfileInfo.Pdp.ServiceType, profile_info);
926 if (rv == NET_ERR_ACCESS_DENIED) {
927 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
928 CONN_UNLOCK; //LCOV_EXCL_LINE
929 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
930 } else if (rv != NET_ERR_NONE) {
931 CONNECTION_LOG(CONNECTION_ERROR, "Failed to add profile[%d]", rv); //LCOV_EXCL_LINE
932 CONN_UNLOCK; //LCOV_EXCL_LINE
933 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
937 return CONNECTION_ERROR_NONE;
940 EXPORT_API int connection_remove_profile(connection_h connection, connection_profile_h profile)
943 connection_handle_s *conn_handle = (connection_handle_s *)connection;
944 net_profile_info_t *profile_info = (net_profile_info_t *)profile;
948 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
950 if (!(__connection_check_handle_validity(connection)) ||
951 !(_connection_libnet_check_profile_validity(profile))) {
952 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
954 return CONNECTION_ERROR_INVALID_PARAMETER;
957 if (profile_info->profile_type != NET_DEVICE_CELLULAR &&
958 profile_info->profile_type != NET_DEVICE_MESH &&
959 profile_info->profile_type != NET_DEVICE_WIFI) {
960 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
961 CONN_UNLOCK; //LCOV_EXCL_LINE
962 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
965 rv = net_delete_profile(conn_handle->network_info_handle, profile_info->ProfileName);
966 if (rv == NET_ERR_ACCESS_DENIED) {
967 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
968 CONN_UNLOCK; //LCOV_EXCL_LINE
969 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
970 } else if (rv != NET_ERR_NONE) {
971 CONNECTION_LOG(CONNECTION_ERROR, "Failed to delete profile[%d]", rv); //LCOV_EXCL_LINE
972 CONN_UNLOCK; //LCOV_EXCL_LINE
973 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
977 return CONNECTION_ERROR_NONE;
980 EXPORT_API int connection_update_profile(connection_h connection, connection_profile_h profile)
983 connection_handle_s *conn_handle = (connection_handle_s *)connection;
984 net_profile_info_t *profile_info = (net_profile_info_t *)profile;
988 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, ETHERNET_FEATURE);
990 if (!(__connection_check_handle_validity(connection)) ||
991 !(_connection_libnet_check_profile_validity(profile))) {
992 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
994 return CONNECTION_ERROR_INVALID_PARAMETER;
997 rv = net_modify_profile(conn_handle->network_info_handle,
998 profile_info->ProfileName, (net_profile_info_t*)profile);
999 if (rv == NET_ERR_ACCESS_DENIED) {
1000 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
1001 CONN_UNLOCK; //LCOV_EXCL_LINE
1002 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
1003 } else if (rv != NET_ERR_NONE) {
1004 CONNECTION_LOG(CONNECTION_ERROR, "Failed to modify profile[%d]", rv); //LCOV_EXCL_LINE
1005 CONN_UNLOCK; //LCOV_EXCL_LINE
1006 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1010 return CONNECTION_ERROR_NONE;
1013 EXPORT_API int connection_get_profile_iterator(connection_h connection,
1014 connection_iterator_type_e type, connection_profile_iterator_h* profile_iterator)
1018 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1020 if (!(__connection_check_handle_validity(connection)) ||
1021 (type != CONNECTION_ITERATOR_TYPE_REGISTERED &&
1022 type != CONNECTION_ITERATOR_TYPE_CONNECTED &&
1023 type != CONNECTION_ITERATOR_TYPE_DEFAULT)) {
1024 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1026 return CONNECTION_ERROR_INVALID_PARAMETER;
1029 int rv = _connection_libnet_get_profile_iterator(connection, type, profile_iterator);
1030 if (rv != CONNECTION_ERROR_NONE) {
1031 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get profile iterator [%d]", rv); //LCOV_EXCL_LINE
1032 CONN_UNLOCK; //LCOV_EXCL_LINE
1033 return rv; //LCOV_EXCL_LINE
1037 return CONNECTION_ERROR_NONE;
1040 EXPORT_API int connection_profile_iterator_next(connection_profile_iterator_h profile_iterator,
1041 connection_profile_h* profile)
1045 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1047 int rv = _connection_libnet_get_iterator_next(profile_iterator, profile);
1053 EXPORT_API bool connection_profile_iterator_has_next(connection_profile_iterator_h profile_iterator)
1057 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1059 int rv = _connection_libnet_iterator_has_next(profile_iterator);
1065 EXPORT_API int connection_destroy_profile_iterator(connection_profile_iterator_h profile_iterator)
1069 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1071 int rv = _connection_libnet_destroy_iterator(profile_iterator);
1077 EXPORT_API int connection_get_current_profile(connection_h connection, connection_profile_h* profile)
1081 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1083 if (!(__connection_check_handle_validity(connection)) || profile == NULL) {
1084 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1086 return CONNECTION_ERROR_INVALID_PARAMETER;
1089 int rv = _connection_libnet_get_current_profile(connection, profile);
1090 if (rv != CONNECTION_ERROR_NONE) {
1091 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get current profile [%d]", rv); //LCOV_EXCL_LINE
1092 CONN_UNLOCK; //LCOV_EXCL_LINE
1093 return rv; //LCOV_EXCL_LINE
1097 return CONNECTION_ERROR_NONE;
1100 EXPORT_API int connection_get_default_cellular_service_profile(
1101 connection_h connection, connection_cellular_service_type_e type,
1102 connection_profile_h *profile)
1106 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1108 if (!(__connection_check_handle_validity(connection)) || profile == NULL) {
1109 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1111 return CONNECTION_ERROR_INVALID_PARAMETER;
1114 int rv = _connection_libnet_get_cellular_service_profile(connection, type, profile);
1115 if (rv != CONNECTION_ERROR_NONE) {
1116 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get default cellular service profile [%d]", rv); //LCOV_EXCL_LINE
1117 CONN_UNLOCK; //LCOV_EXCL_LINE
1118 return rv; //LCOV_EXCL_LINE
1122 return CONNECTION_ERROR_NONE;
1125 EXPORT_API int connection_set_default_cellular_service_profile(connection_h connection,
1126 connection_cellular_service_type_e type, connection_profile_h profile)
1130 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1132 if (!(__connection_check_handle_validity(connection)) || profile == NULL) {
1133 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1135 return CONNECTION_ERROR_INVALID_PARAMETER;
1138 int rv = _connection_libnet_set_cellular_service_profile_sync(connection, type, profile);
1139 if (rv != CONNECTION_ERROR_NONE) {
1140 CONNECTION_LOG(CONNECTION_ERROR, "Fail to set default cellular service profile [%d]", rv); //LCOV_EXCL_LINE
1141 CONN_UNLOCK; //LCOV_EXCL_LINE
1142 return rv; //LCOV_EXCL_LINE
1146 return CONNECTION_ERROR_NONE;
1149 EXPORT_API int connection_set_default_cellular_service_profile_async(connection_h connection,
1150 connection_cellular_service_type_e type, connection_profile_h profile,
1151 connection_set_default_cb callback, void* user_data)
1155 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1159 if (!(__connection_check_handle_validity(connection)) ||
1160 profile == NULL || callback == NULL) {
1161 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1163 return CONNECTION_ERROR_INVALID_PARAMETER;
1166 rv = _connection_libnet_set_cellular_service_profile_async(connection, type, profile);
1167 if (rv == NET_ERR_ACCESS_DENIED) {
1168 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
1169 CONN_UNLOCK; //LCOV_EXCL_LINE
1170 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
1171 } else if (rv != NET_ERR_NONE) {
1172 CONNECTION_LOG(CONNECTION_ERROR, "Failed to set default cellular service profile[%d]", rv); //LCOV_EXCL_LINE
1173 CONN_UNLOCK; //LCOV_EXCL_LINE
1174 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1177 __connection_set_default_cellular_service_profile_callback(connection, callback, user_data);
1180 return CONNECTION_ERROR_NONE;
1183 EXPORT_API int connection_open_profile(connection_h connection, connection_profile_h profile,
1184 connection_opened_cb callback, void* user_data)
1188 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE);
1192 if (!(__connection_check_handle_validity(connection)) ||
1193 profile == NULL || callback == NULL) {
1194 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1196 return CONNECTION_ERROR_INVALID_PARAMETER;
1199 rv = _connection_libnet_open_profile(connection, profile);
1200 if (rv == NET_ERR_ACCESS_DENIED) {
1201 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
1202 CONN_UNLOCK; //LCOV_EXCL_LINE
1203 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
1204 } else if (rv != NET_ERR_NONE) {
1205 CONNECTION_LOG(CONNECTION_ERROR, "Failed to open profile[%d]", rv); //LCOV_EXCL_LINE
1206 CONN_UNLOCK; //LCOV_EXCL_LINE
1207 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1210 __connection_open_profile_set_callback(connection, callback, user_data);
1213 return CONNECTION_ERROR_NONE;
1216 EXPORT_API int connection_close_profile(connection_h connection, connection_profile_h profile,
1217 connection_closed_cb callback, void* user_data)
1221 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE);
1225 if (!(__connection_check_handle_validity(connection)) ||
1226 profile == NULL || callback == NULL) {
1227 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1229 return CONNECTION_ERROR_INVALID_PARAMETER;
1232 rv = _connection_libnet_close_profile(connection, profile);
1233 if (rv == NET_ERR_ACCESS_DENIED) {
1234 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
1235 CONN_UNLOCK; //LCOV_EXCL_LINE
1236 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
1237 } else if (rv != NET_ERR_NONE) {
1238 CONNECTION_LOG(CONNECTION_ERROR, "Failed to close profile[%d]", rv); //LCOV_EXCL_LINE
1239 CONN_UNLOCK; //LCOV_EXCL_LINE
1240 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1243 __connection_close_profile_set_callback(connection, callback, user_data);
1246 return CONNECTION_ERROR_NONE;
1249 EXPORT_API int connection_reset_profile(connection_h connection,
1250 connection_reset_option_e type, int id, connection_reset_cb callback, void *user_data)
1254 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1258 if (!(__connection_check_handle_validity(connection))) {
1259 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed");
1261 return CONNECTION_ERROR_INVALID_PARAMETER;
1264 if (id < 0 || id > 1) {
1265 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed"); //LCOV_EXCL_LINE
1266 CONN_UNLOCK; //LCOV_EXCL_LINE
1267 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1270 rv = _connection_libnet_reset_profile(connection, type, id);
1271 if (rv == NET_ERR_ACCESS_DENIED) {
1272 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
1273 CONN_UNLOCK; //LCOV_EXCL_LINE
1274 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
1275 } else if (rv != NET_ERR_NONE) {
1276 CONNECTION_LOG(CONNECTION_ERROR, "Failed to reset profile[%d]", rv); //LCOV_EXCL_LINE
1277 CONN_UNLOCK; //LCOV_EXCL_LINE
1278 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1281 __connection_reset_profile_set_callback(connection, callback, user_data);
1284 return CONNECTION_ERROR_NONE;
1287 EXPORT_API int connection_add_route(connection_h connection, const char* interface_name, const char* host_address)
1291 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1293 if (!(__connection_check_handle_validity(connection)) ||
1294 interface_name == NULL || host_address == NULL) {
1295 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1297 return CONNECTION_ERROR_INVALID_PARAMETER;
1300 int rv = _connection_libnet_add_route(connection, interface_name, host_address);
1301 if (rv != CONNECTION_ERROR_NONE) {
1302 CONNECTION_LOG(CONNECTION_ERROR, "Fail to add route [%d]", rv); //LCOV_EXCL_LINE
1303 CONN_UNLOCK; //LCOV_EXCL_LINE
1304 return rv; //LCOV_EXCL_LINE
1308 return CONNECTION_ERROR_NONE;
1311 EXPORT_API int connection_remove_route(connection_h connection, const char* interface_name, const char* host_address)
1315 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1317 if (!(__connection_check_handle_validity(connection)) ||
1318 interface_name == NULL || host_address == NULL) {
1319 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1321 return CONNECTION_ERROR_INVALID_PARAMETER;
1324 int rv = _connection_libnet_remove_route(connection, interface_name, host_address);
1325 if (rv != CONNECTION_ERROR_NONE) {
1326 CONNECTION_LOG(CONNECTION_ERROR, "Fail to remove route [%d]", rv); //LCOV_EXCL_LINE
1327 CONN_UNLOCK; //LCOV_EXCL_LINE
1328 return rv; //LCOV_EXCL_LINE
1332 return CONNECTION_ERROR_NONE;
1335 EXPORT_API int connection_add_route_ipv6(connection_h connection, const char *interface_name, const char *host_address, const char * gateway)
1339 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, ETHERNET_FEATURE);
1341 if (!(__connection_check_handle_validity(connection)) ||
1342 interface_name == NULL || host_address == NULL) {
1343 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1345 return CONNECTION_ERROR_INVALID_PARAMETER;
1348 int rv = _connection_libnet_add_route_ipv6(connection, interface_name, host_address, gateway);
1349 if (rv != CONNECTION_ERROR_NONE) {
1350 CONNECTION_LOG(CONNECTION_ERROR, "Fail to add route ipv6 [%d]", rv); //LCOV_EXCL_LINE
1351 CONN_UNLOCK; //LCOV_EXCL_LINE
1352 return rv; //LCOV_EXCL_LINE
1356 return CONNECTION_ERROR_NONE;
1359 EXPORT_API int connection_remove_route_ipv6(connection_h connection, const char *interface_name, const char *host_address, const char * gateway)
1363 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, ETHERNET_FEATURE);
1365 if (!(__connection_check_handle_validity(connection)) ||
1366 interface_name == NULL || host_address == NULL) {
1367 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1369 return CONNECTION_ERROR_INVALID_PARAMETER;
1372 int rv = _connection_libnet_remove_route_ipv6(connection, interface_name, host_address, gateway);
1373 if (rv != CONNECTION_ERROR_NONE) {
1374 CONNECTION_LOG(CONNECTION_ERROR, "Fail to remove route ipv6 [%d]", rv); //LCOV_EXCL_LINE
1375 CONN_UNLOCK; //LCOV_EXCL_LINE
1376 return rv; //LCOV_EXCL_LINE
1380 return CONNECTION_ERROR_NONE;
1383 EXPORT_API int connection_add_route_entry(connection_h connection,
1384 connection_address_family_e address_family, const char *interface_name,
1385 const char *host_address, const char *gateway)
1389 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, ETHERNET_FEATURE);
1391 if (!(__connection_check_handle_validity(connection)) ||
1392 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1393 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1394 interface_name == NULL || host_address == NULL) {
1395 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1397 return CONNECTION_ERROR_INVALID_PARAMETER;
1400 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
1401 int rv = _connection_libnet_add_route_entry(connection, CONNECTION_ADDRESS_FAMILY_IPV4,
1402 interface_name, host_address, gateway);
1406 int rv = _connection_libnet_add_route_entry(connection, CONNECTION_ADDRESS_FAMILY_IPV6,
1407 interface_name, host_address, gateway);
1413 EXPORT_API int connection_remove_route_entry(connection_h connection,
1414 connection_address_family_e address_family, const char *interface_name,
1415 const char *host_address, const char *gateway)
1419 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, ETHERNET_FEATURE);
1421 if (!(__connection_check_handle_validity(connection)) ||
1422 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1423 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1424 interface_name == NULL || host_address == NULL) {
1425 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1427 return CONNECTION_ERROR_INVALID_PARAMETER;
1430 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
1431 int rv = _connection_libnet_remove_route_entry(connection, CONNECTION_ADDRESS_FAMILY_IPV4,
1432 interface_name, host_address, gateway);
1436 int rv = _connection_libnet_remove_route_entry(connection, CONNECTION_ADDRESS_FAMILY_IPV6,
1437 interface_name, host_address, gateway);
1443 static int __get_cellular_statistic(connection_statistics_type_e statistics_type, long long *llsize)
1445 int rv = VCONF_OK, rv1 = VCONF_OK;
1446 int last_size = 0, size = 0;
1447 #if defined TIZEN_DUALSIM_ENABLE
1451 if (llsize == NULL) {
1452 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1453 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1456 switch (statistics_type) {
1457 case CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA:
1458 case CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA:
1459 case CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA:
1460 case CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
1463 return CONNECTION_ERROR_INVALID_PARAMETER;
1466 #if defined TIZEN_DUALSIM_ENABLE
1467 rv = vconf_get_int(VCONF_TELEPHONY_DEFAULT_DATA_SERVICE, &sim_id);
1468 if (rv != VCONF_OK) {
1469 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get default subscriber id");
1471 return CONNECTION_ERROR_OPERATION_FAILED;
1477 switch (statistics_type) {
1478 case CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA:
1479 rv = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_PKT_LAST_SNT, &last_size);
1481 case CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA:
1482 rv = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_PKT_LAST_RCV, &last_size);
1484 case CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA:
1485 rv = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_PKT_LAST_SNT, &last_size);
1486 rv1 = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_PKT_TOTAL_SNT, &size);
1488 case CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
1489 rv = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_PKT_LAST_RCV, &last_size);
1490 rv1 = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_PKT_TOTAL_RCV, &size);
1493 #if defined TIZEN_DUALSIM_ENABLE
1496 switch (statistics_type) {
1497 case CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA:
1498 rv = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_PKT_LAST_SNT2, &last_size);
1500 case CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA:
1501 rv = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_PKT_LAST_RCV2, &last_size);
1503 case CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA:
1504 rv = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_PKT_LAST_SNT2, &last_size);
1505 rv1 = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_PKT_TOTAL_SNT2, &size);
1507 case CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
1508 rv = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_PKT_LAST_RCV2, &last_size);
1509 rv1 = vconf_get_int(VCONFKEY_NETWORK_CELLULAR_PKT_TOTAL_RCV2, &size);
1515 CONNECTION_LOG(CONNECTION_ERROR, "Invalid subscriber id:%d", sim_id);
1516 return CONNECTION_ERROR_OPERATION_FAILED;
1520 if (rv != VCONF_OK || rv1 != VCONF_OK) {
1521 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get cellular statistics"); //LCOV_EXCL_LINE
1522 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1525 *llsize = (long long)(last_size * 1000) + (long long)(size * 1000);
1526 CONNECTION_LOG(CONNECTION_INFO, "%lld bytes", *llsize);
1528 return CONNECTION_ERROR_NONE;
1531 static int __get_statistic(connection_handle_s *conn_handle, connection_type_e connection_type,
1532 connection_statistics_type_e statistics_type, long long *llsize)
1535 unsigned long long ull_size;
1537 if (llsize == NULL) {
1538 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1539 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1542 rv = _connection_libnet_check_get_privilege();
1543 if (rv == CONNECTION_ERROR_PERMISSION_DENIED)
1545 else if (rv != CONNECTION_ERROR_NONE) {
1546 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get statistics"); //LCOV_EXCL_LINE
1547 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1550 if (connection_type == CONNECTION_TYPE_CELLULAR)
1551 return __get_cellular_statistic(statistics_type, llsize);
1552 else if (connection_type == CONNECTION_TYPE_WIFI) {
1553 switch (statistics_type) {
1554 case CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA:
1555 stat_type = NET_STATISTICS_TYPE_LAST_SENT_DATA;
1557 case CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA:
1558 stat_type = NET_STATISTICS_TYPE_LAST_RECEIVED_DATA;
1560 case CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA:
1561 stat_type = NET_STATISTICS_TYPE_TOTAL_SENT_DATA;
1563 case CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
1564 stat_type = NET_STATISTICS_TYPE_TOTAL_RECEIVED_DATA;
1567 return CONNECTION_ERROR_INVALID_PARAMETER;
1570 rv = _connection_libnet_get_statistics(conn_handle, stat_type, &ull_size);
1571 if (rv == CONNECTION_ERROR_PERMISSION_DENIED)
1573 else if (rv != CONNECTION_ERROR_NONE) {
1574 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get Wi-Fi statistics"); //LCOV_EXCL_LINE
1575 *llsize = 0; //LCOV_EXCL_LINE
1576 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1579 CONNECTION_LOG(CONNECTION_INFO, "%lld bytes", ull_size);
1580 *llsize = (long long)ull_size;
1582 return CONNECTION_ERROR_INVALID_PARAMETER;
1584 return CONNECTION_ERROR_NONE;
1587 static int __reset_statistic(connection_handle_s *conn_handle,
1588 connection_type_e connection_type, connection_statistics_type_e statistics_type)
1594 if (connection_type == CONNECTION_TYPE_CELLULAR)
1595 conn_type = NET_DEVICE_CELLULAR;
1596 else if (connection_type == CONNECTION_TYPE_WIFI)
1597 conn_type = NET_DEVICE_WIFI;
1599 return CONNECTION_ERROR_INVALID_PARAMETER;
1601 switch (statistics_type) {
1602 case CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA:
1603 stat_type = NET_STATISTICS_TYPE_LAST_SENT_DATA;
1605 case CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA:
1606 stat_type = NET_STATISTICS_TYPE_LAST_RECEIVED_DATA;
1608 case CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA:
1609 stat_type = NET_STATISTICS_TYPE_TOTAL_SENT_DATA;
1611 case CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
1612 stat_type = NET_STATISTICS_TYPE_TOTAL_RECEIVED_DATA;
1615 return CONNECTION_ERROR_INVALID_PARAMETER;
1618 rv = _connection_libnet_set_statistics(conn_handle, conn_type, stat_type);
1619 if (rv != CONNECTION_ERROR_NONE)
1622 CONNECTION_LOG(CONNECTION_INFO, "connection_reset_statistics success");
1624 return CONNECTION_ERROR_NONE;
1627 EXPORT_API int connection_get_statistics(connection_h connection,
1628 connection_type_e connection_type,
1629 connection_statistics_type_e statistics_type, long long* size)
1633 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
1635 if (connection_type == CONNECTION_TYPE_CELLULAR)
1636 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1637 else if (connection_type == CONNECTION_TYPE_WIFI)
1638 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1640 if (!(__connection_check_handle_validity(connection)) || size == NULL) {
1641 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1643 return CONNECTION_ERROR_INVALID_PARAMETER;
1646 int rv = __get_statistic(connection, connection_type, statistics_type, size);
1647 if (rv != CONNECTION_ERROR_NONE) {
1648 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get statistics [%d]", rv); //LCOV_EXCL_LINE
1650 return rv; //LCOV_EXCL_LINE
1654 return CONNECTION_ERROR_NONE;
1657 EXPORT_API int connection_reset_statistics(connection_h connection,
1658 connection_type_e connection_type,
1659 connection_statistics_type_e statistics_type)
1663 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
1665 if (connection_type == CONNECTION_TYPE_CELLULAR)
1666 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1667 else if (connection_type == CONNECTION_TYPE_WIFI)
1668 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1670 if (!__connection_check_handle_validity(connection)) {
1671 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1673 return CONNECTION_ERROR_INVALID_PARAMETER;
1676 int rv = __reset_statistic(connection, connection_type, statistics_type);
1677 if (rv != CONNECTION_ERROR_NONE) {
1678 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get statistics [%d]", rv); //LCOV_EXCL_LINE
1680 return rv; //LCOV_EXCL_LINE
1684 return CONNECTION_ERROR_NONE;
1687 EXPORT_API int connection_foreach_ipv6_address(connection_h connection,
1688 connection_type_e connection_type, connection_ipv6_address_cb callback,
1693 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
1694 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1696 GSList *ipv6_address_list = NULL;
1698 if (!(__connection_check_handle_validity(connection))) {
1699 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1701 return CONNECTION_ERROR_INVALID_PARAMETER;
1704 int rv = CONNECTION_ERROR_NONE;
1706 switch (connection_type) {
1707 case CONNECTION_TYPE_WIFI:
1708 rv = net_foreach_ipv6_address(NET_DEVICE_WIFI,
1709 &ipv6_address_list);
1711 case CONNECTION_TYPE_CELLULAR:
1712 rv = net_foreach_ipv6_address(NET_DEVICE_CELLULAR,
1713 &ipv6_address_list);
1715 case CONNECTION_TYPE_ETHERNET:
1716 rv = net_foreach_ipv6_address(NET_DEVICE_ETHERNET,
1717 &ipv6_address_list);
1719 case CONNECTION_TYPE_BT:
1720 rv = net_foreach_ipv6_address(NET_DEVICE_BLUETOOTH,
1721 &ipv6_address_list);
1724 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1726 return CONNECTION_ERROR_INVALID_PARAMETER;
1729 if (rv != NET_ERR_NONE) {
1730 CONNECTION_LOG(CONNECTION_ERROR, "net_get_multiple_id_address" //LCOV_EXCL_LINE
1731 " Failed = %d\n", rv);
1732 CONN_UNLOCK; //LCOV_EXCL_LINE
1733 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1737 for (list = ipv6_address_list; list; list = list->next) {
1738 rv = callback((char *)list->data, user_data);
1743 g_slist_free_full(ipv6_address_list, g_free);
1744 ipv6_address_list = NULL;
1747 return CONNECTION_ERROR_NONE;
1750 EXPORT_API int connection_profile_start_tcpdump(connection_h connection)
1756 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE);
1758 if (!(__connection_check_handle_validity(connection))) {
1759 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1761 return CONNECTION_ERROR_INVALID_PARAMETER;
1764 ret = _connection_libnet_start_tcpdump(connection);
1765 if (ret != CONNECTION_ERROR_NONE) {
1766 CONNECTION_LOG(CONNECTION_ERROR, "Failed to start tcpdump (%d)", ret); //LCOV_EXCL_LINE
1767 CONN_UNLOCK; //LCOV_EXCL_LINE
1768 return ret; //LCOV_EXCL_LINE
1772 return CONNECTION_ERROR_NONE;
1775 EXPORT_API int connection_profile_stop_tcpdump(connection_h connection)
1781 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE);
1783 if (!(__connection_check_handle_validity(connection))) {
1784 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1786 return CONNECTION_ERROR_INVALID_PARAMETER;
1789 ret = _connection_libnet_stop_tcpdump(connection);
1790 if (ret != CONNECTION_ERROR_NONE) {
1791 CONNECTION_LOG(CONNECTION_ERROR, "Failed to stop tcpdump (%d)", ret); //LCOV_EXCL_LINE
1792 CONN_UNLOCK; //LCOV_EXCL_LINE
1793 return ret; //LCOV_EXCL_LINE
1797 return CONNECTION_ERROR_NONE;
1800 EXPORT_API int connection_profile_get_tcpdump_state(connection_h connection, gboolean *tcpdump_state)
1806 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE);
1808 if (!(__connection_check_handle_validity(connection)) || !tcpdump_state) {
1809 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1811 return CONNECTION_ERROR_INVALID_PARAMETER;
1814 ret = _connection_libnet_get_tcpdump_state(connection, tcpdump_state);
1815 if (ret != CONNECTION_ERROR_NONE) {
1816 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get the tcpdump state (%d)", ret); //LCOV_EXCL_LINE
1817 CONN_UNLOCK; //LCOV_EXCL_LINE
1818 return ret; //LCOV_EXCL_LINE
1822 return CONNECTION_ERROR_NONE;
1825 EXPORT_API int connection_profile_save_ethernet_eap_config(connection_h connection,
1826 connection_profile_h profile)
1830 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE);
1834 if (!__connection_check_handle_validity(connection) ||
1835 !_connection_libnet_check_profile_validity(profile)) {
1836 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1838 return CONNECTION_ERROR_INVALID_PARAMETER;
1841 rv = _connection_libnet_profile_save_ethernet_eap_config(connection, profile);
1842 if (rv != CONNECTION_ERROR_NONE) {
1843 CONNECTION_LOG(CONNECTION_ERROR, "Failed to save ethernet eap config."); //LCOV_EXCL_LINE
1844 CONN_UNLOCK; //LCOV_EXCL_LINE
1845 return rv; //LCOV_EXCL_LINE
1849 return CONNECTION_ERROR_NONE;