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.
22 #include <vconf/vconf.h>
23 #include <system_info.h>
25 #include "net_connection_private.h"
27 static GSList *conn_handle_list = NULL;
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 void *_connection_get_default_handle(void)
86 for (list = conn_handle_list; list; list = list->next)
93 static void __connection_set_type_changed_callback(connection_handle_s *conn_handle,
94 void *callback, void *user_data)
96 conn_handle->type_changed_user_data = user_data;
97 conn_handle->type_changed_callback = callback;
100 static void __connection_set_ip_changed_callback(connection_handle_s *conn_handle,
101 void *callback, void *user_data)
103 conn_handle->ip_changed_user_data = user_data;
104 conn_handle->ip_changed_callback = callback;
107 static void __connection_set_proxy_changed_callback(connection_handle_s *conn_handle,
108 void *callback, void *user_data)
110 conn_handle->proxy_changed_user_data = user_data;
111 conn_handle->proxy_changed_callback = callback;
114 static void __connection_set_internet_state_changed_callback(connection_handle_s *conn_handle,
115 void *callback, void *user_data)
117 conn_handle->internet_state_changed_user_data = user_data;
118 conn_handle->internet_state_changed_callback = callback;
121 static void __connection_set_ethernet_cable_state_changed_cb(connection_handle_s *conn_handle,
122 void *callback, void *user_data)
124 conn_handle->ethernet_cable_state_changed_callback = callback;
125 conn_handle->ethernet_cable_state_changed_user_data = user_data;
128 static void __connection_set_default_cellular_service_profile_callback(connection_handle_s *conn_handle,
129 void *callback, void *user_data)
131 conn_handle->set_default_callback = callback;
132 conn_handle->set_default_user_data = user_data;
135 static void __connection_open_profile_set_callback(connection_handle_s *conn_handle,
136 void *callback, void *user_data)
138 conn_handle->opened_callback = callback;
139 conn_handle->opened_user_data = user_data;
142 static void __connection_close_profile_set_callback(connection_handle_s *conn_handle,
143 void *callback, void *user_data)
145 conn_handle->closed_callback = callback;
146 conn_handle->closed_user_data = user_data;
149 static void __connection_reset_profile_set_callback(connection_handle_s *conn_handle,
150 void *callback, void *user_data)
152 conn_handle->reset_callback = callback;
153 conn_handle->reset_user_data = user_data;
157 /* Connection Manager ********************************************************/
158 EXPORT_API int connection_create(connection_h *connection)
162 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
166 if (connection == NULL || __connection_check_handle_validity(*connection)) {
167 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
168 CONN_UNLOCK; //LCOV_EXCL_LINE
169 return CONNECTION_ERROR_INVALID_PARAMETER;
172 *connection = g_try_malloc0(sizeof(connection_handle_s));
173 if (*connection != NULL) {
174 CONNECTION_LOG(CONNECTION_INFO, "New handle created[%p]", *connection);
176 CONN_UNLOCK; //LCOV_EXCL_LINE
177 return CONNECTION_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
180 rv = _connection_libnet_init(*connection);
181 if (rv == NET_ERR_ACCESS_DENIED) {
182 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
183 g_free(*connection); //LCOV_EXCL_LINE
184 *connection = NULL; //LCOV_EXCL_LINE
185 CONN_UNLOCK; //LCOV_EXCL_LINE
186 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
187 } else if (rv != NET_ERR_NONE) {
188 CONNECTION_LOG(CONNECTION_ERROR, "Failed to create connection[%d]", rv); //LCOV_EXCL_LINE
189 g_free(*connection); //LCOV_EXCL_LINE
190 *connection = NULL; //LCOV_EXCL_LINE
191 CONN_UNLOCK; //LCOV_EXCL_LINE
192 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
195 conn_handle_list = g_slist_prepend(conn_handle_list, *connection);
198 return CONNECTION_ERROR_NONE;
201 EXPORT_API int connection_destroy(connection_h connection)
205 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
207 if (!(__connection_check_handle_validity(connection))) {
208 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
210 return CONNECTION_ERROR_INVALID_PARAMETER;
213 CONNECTION_LOG(CONNECTION_INFO, "Destroy handle: %p", connection);
215 __connection_set_type_changed_callback(connection, NULL, NULL);
216 __connection_set_ip_changed_callback(connection, NULL, NULL);
217 __connection_set_proxy_changed_callback(connection, NULL, NULL);
218 __connection_set_internet_state_changed_callback(connection, NULL, NULL);
219 __connection_set_ethernet_cable_state_changed_cb(connection, NULL, NULL);
221 conn_handle_list = g_slist_remove(conn_handle_list, connection);
222 _connection_libnet_deinit(connection, (conn_handle_list == NULL));
227 return CONNECTION_ERROR_NONE;
231 EXPORT_API int connection_create_cs(int tid, connection_h *connection)
235 rv = connection_create(connection);
236 if (rv == CONNECTION_ERROR_NONE) {
238 _connection_set_cs_tid(tid, *connection);
245 EXPORT_API int connection_destroy_cs(int tid, connection_h connection)
251 if (!(__connection_check_handle_validity(connection))) {
252 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
254 return CONNECTION_ERROR_INVALID_PARAMETER;
257 CONNECTION_LOG(CONNECTION_INFO, "Destroy connection handle: %p", connection);
258 _connection_unset_cs_tid(tid, connection);
261 rv = connection_destroy(connection);
267 EXPORT_API int connection_get_type(connection_h connection, connection_type_e* type)
274 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
276 if (type == NULL || !(__connection_check_handle_validity(connection))) {
277 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
279 return CONNECTION_ERROR_INVALID_PARAMETER;
282 rv = _connection_vconf_get_int(connection, VCONFKEY_NETWORK_STATUS, &status);
283 if (rv != VCONF_OK) {
284 CONNECTION_LOG(CONNECTION_ERROR, "vconf_get_int Failed = %d", status); //LCOV_EXCL_LINE
285 CONN_UNLOCK; //LCOV_EXCL_LINE
286 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
289 CONNECTION_LOG(CONNECTION_INFO, "Connected Network = %d", status);
291 *type = __connection_convert_net_state(status);
294 return CONNECTION_ERROR_NONE;
297 EXPORT_API int connection_get_ip_address(connection_h connection,
298 connection_address_family_e address_family, char** ip_address)
302 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
304 if (ip_address == NULL || !(__connection_check_handle_validity(connection))) {
305 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
307 return CONNECTION_ERROR_INVALID_PARAMETER;
310 switch (address_family) {
311 case CONNECTION_ADDRESS_FAMILY_IPV4:
312 *ip_address = _connection_vconf_get_str(connection, VCONFKEY_NETWORK_IP);
314 case CONNECTION_ADDRESS_FAMILY_IPV6:
315 *ip_address = _connection_vconf_get_str(connection, VCONFKEY_NETWORK_IP6);
318 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
320 return CONNECTION_ERROR_INVALID_PARAMETER;
323 if (*ip_address == NULL) {
324 CONNECTION_LOG(CONNECTION_ERROR, "vconf_get_str Failed"); //LCOV_EXCL_LINE
325 CONN_UNLOCK; //LCOV_EXCL_LINE
326 return CONNECTION_ERROR_OPERATION_FAILED;//LCOV_EXCL_LINE
330 return CONNECTION_ERROR_NONE;
333 EXPORT_API int connection_get_proxy(connection_h connection,
334 connection_address_family_e address_family, char** proxy)
338 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
340 if (proxy == NULL || !(__connection_check_handle_validity(connection))) {
341 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
343 return CONNECTION_ERROR_INVALID_PARAMETER;
346 switch (address_family) {
347 case CONNECTION_ADDRESS_FAMILY_IPV4:
348 case CONNECTION_ADDRESS_FAMILY_IPV6:
349 *proxy = _connection_vconf_get_str(connection, VCONFKEY_NETWORK_PROXY);
352 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
354 return CONNECTION_ERROR_INVALID_PARAMETER;
357 if (*proxy == NULL) {
358 CONNECTION_LOG(CONNECTION_ERROR, "vconf_get_str Failed"); //LCOV_EXCL_LINE
359 CONN_UNLOCK; //LCOV_EXCL_LINE
360 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
364 return CONNECTION_ERROR_NONE;
367 EXPORT_API int connection_get_mac_address(connection_h connection, connection_type_e type, char** mac_addr)
370 char buf[CONNECTION_MAC_INFO_LENGTH + 1];
374 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE, ETHERNET_FEATURE);
376 if (type == CONNECTION_TYPE_WIFI)
377 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
378 else if (type == CONNECTION_TYPE_ETHERNET) //LCOV_EXCL_LINE
379 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE); //LCOV_EXCL_LINE
381 if (mac_addr == NULL || !(__connection_check_handle_validity(connection))) {
382 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
384 return CONNECTION_ERROR_INVALID_PARAMETER;
388 case CONNECTION_TYPE_WIFI:
389 if (access(WIFI_MAC_INFO_FILE, F_OK) == 0)
390 fp = fopen(WIFI_MAC_INFO_FILE, "r");
393 if (fgets(buf, sizeof(buf), fp) == NULL) {
394 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get MAC info from %s", WIFI_MAC_INFO_FILE);
397 return CONNECTION_ERROR_OPERATION_FAILED;
400 CONNECTION_LOG(CONNECTION_INFO, "%s : %s", WIFI_MAC_INFO_FILE, buf);
402 *mac_addr = g_strdup(buf);
405 *mac_addr = _connection_vconf_get_str(connection, VCONFKEY_WIFI_BSSID_ADDRESS);
407 if (*mac_addr == NULL) {
408 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get vconf from %s", VCONFKEY_WIFI_BSSID_ADDRESS); //LCOV_EXCL_LINE
409 CONN_UNLOCK; //LCOV_EXCL_LINE
410 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
413 if (strlen(*mac_addr) == 0) {
414 CONNECTION_LOG(CONNECTION_ERROR, "Mac address is invalid"
415 " from %s", VCONFKEY_WIFI_BSSID_ADDRESS); //LCOV_EXCL_LINE
416 g_free(*mac_addr); //LCOV_EXCL_LINE
417 *mac_addr = NULL; //LCOV_EXCL_LINE
418 CONN_UNLOCK; //LCOV_EXCL_LINE
419 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
424 case CONNECTION_TYPE_ETHERNET:
425 fp = fopen(ETHERNET_MAC_INFO_FILE, "r");
427 CONNECTION_LOG(CONNECTION_ERROR, "Failed to open file %s", ETHERNET_MAC_INFO_FILE);
429 return CONNECTION_ERROR_OUT_OF_MEMORY;
432 if (fgets(buf, sizeof(buf), fp) == NULL) {
433 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get MAC info from %s", ETHERNET_MAC_INFO_FILE);
436 return CONNECTION_ERROR_OPERATION_FAILED;
439 CONNECTION_LOG(CONNECTION_INFO, "%s : %s", ETHERNET_MAC_INFO_FILE, buf);
441 *mac_addr = g_strdup(buf);
446 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
447 CONN_UNLOCK; //LCOV_EXCL_LINE
448 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
451 /* Checking Invalid MAC Address */
452 if ((strcmp(*mac_addr, "00:00:00:00:00:00") == 0) ||
453 (strcmp(*mac_addr, "ff:ff:ff:ff:ff:ff") == 0)) {
454 CONNECTION_LOG(CONNECTION_ERROR, "MAC Address(%s) is invalid", *mac_addr); //LCOV_EXCL_LINE
455 CONN_UNLOCK; //LCOV_EXCL_LINE
456 return CONNECTION_ERROR_INVALID_OPERATION; //LCOV_EXCL_LINE
459 CONNECTION_LOG(CONNECTION_INFO, "MAC Address %s", *mac_addr);
462 return CONNECTION_ERROR_NONE;
466 EXPORT_API int connection_is_metered_network(connection_h connection, bool* is_metered)
470 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
472 if (is_metered == NULL || !(__connection_check_handle_validity(connection))) {
473 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
475 return CONNECTION_ERROR_INVALID_PARAMETER;
478 int rv = _connection_libnet_get_metered_state(connection, is_metered);
479 if (rv != CONNECTION_ERROR_NONE) {
480 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get metered state[%d]", rv); //LCOV_EXCL_LINE
481 CONN_UNLOCK; //LCOV_EXCL_LINE
482 return rv; //LCOV_EXCL_LINE
485 CONNECTION_LOG(CONNECTION_INFO, "metered state: %s", is_metered ? "true" : "false");
487 return CONNECTION_ERROR_NONE;
491 EXPORT_API int connection_get_cellular_state(connection_h connection, connection_cellular_state_e* state)
495 int cellular_state = 0;
496 #if defined TIZEN_DUALSIM_ENABLE
502 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
504 if (state == NULL || !(__connection_check_handle_validity(connection))) {
505 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
507 return CONNECTION_ERROR_INVALID_PARAMETER;
510 rv = _connection_vconf_get_int(connection, VCONFKEY_NETWORK_CELLULAR_STATE, &status);
511 if (rv != VCONF_OK) {
512 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get cellular state"); //LCOV_EXCL_LINE
513 CONN_UNLOCK; //LCOV_EXCL_LINE
514 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
517 CONNECTION_LOG(CONNECTION_INFO, "Cellular: %d", status);
518 *state = __connection_convert_cellular_state(status);
520 if (*state == CONNECTION_CELLULAR_STATE_AVAILABLE) {
521 #if defined TIZEN_DUALSIM_ENABLE
522 rv = _connection_vconf_get_int(connection, VCONF_TELEPHONY_DEFAULT_DATA_SERVICE, &sim_id);
523 if (rv != VCONF_OK) {
524 CONNECTION_LOG(CONNECTION_ERROR,
525 "Failed to get default subscriber id", sim_id);
527 return CONNECTION_ERROR_OPERATION_FAILED;
531 case CONNECTION_CELLULAR_SUBSCRIBER_1:
533 rv = _connection_vconf_get_int(connection, VCONFKEY_DNET_STATE, &cellular_state);
534 #if defined TIZEN_DUALSIM_ENABLE
537 case CONNECTION_CELLULAR_SUBSCRIBER_2:
538 rv = _connection_vconf_get_int(connection, VCONFKEY_DNET_STATE2, &cellular_state);
542 CONNECTION_LOG(CONNECTION_ERROR, "Invalid subscriber id:%d", sim_id);
544 return CONNECTION_ERROR_OPERATION_FAILED;
547 if (rv != VCONF_OK) {
548 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get cellular state"); //LCOV_EXCL_LINE
549 CONN_UNLOCK; //LCOV_EXCL_LINE
550 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
554 CONNECTION_LOG(CONNECTION_INFO, "Cellular state: %d", cellular_state);
556 if (cellular_state == VCONFKEY_DNET_NORMAL_CONNECTED ||
557 cellular_state == VCONFKEY_DNET_SECURE_CONNECTED ||
558 cellular_state == VCONFKEY_DNET_TRANSFER)
559 *state = CONNECTION_CELLULAR_STATE_CONNECTED;
562 return CONNECTION_ERROR_NONE;
565 EXPORT_API int connection_get_wifi_state(connection_h connection, connection_wifi_state_e* state)
569 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
571 if (state == NULL || !(__connection_check_handle_validity(connection))) {
572 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
574 return CONNECTION_ERROR_INVALID_PARAMETER;
577 int rv = _connection_libnet_get_wifi_state(connection, state);
578 if (rv != CONNECTION_ERROR_NONE) {
579 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get Wi-Fi state[%d]", rv); //LCOV_EXCL_LINE
580 CONN_UNLOCK; //LCOV_EXCL_LINE
581 return rv; //LCOV_EXCL_LINE
584 CONNECTION_LOG(CONNECTION_INFO, "Wi-Fi state: %d", *state);
587 return CONNECTION_ERROR_NONE;
590 EXPORT_API int connection_get_ethernet_state(connection_h connection, connection_ethernet_state_e *state)
594 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE);
596 if (state == NULL || !(__connection_check_handle_validity(connection))) {
597 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
599 return CONNECTION_ERROR_INVALID_PARAMETER;
602 int rv = _connection_libnet_get_ethernet_state(connection, state);
603 if (rv != CONNECTION_ERROR_NONE) {
604 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get ethernet state[%d]", rv); //LCOV_EXCL_LINE
605 CONN_UNLOCK; //LCOV_EXCL_LINE
606 return rv; //LCOV_EXCL_LINE
610 return CONNECTION_ERROR_NONE;
613 EXPORT_API int connection_get_ethernet_cable_state(connection_h connection, connection_ethernet_cable_state_e *state)
617 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE);
619 if (state == NULL || !(__connection_check_handle_validity(connection))) {
620 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
622 return CONNECTION_ERROR_INVALID_PARAMETER;
625 int rv = _connection_libnet_get_ethernet_cable_state(connection, state);
626 if (rv != CONNECTION_ERROR_NONE) {
627 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get ethernet cable state[%d]", rv); //LCOV_EXCL_LINE
628 CONN_UNLOCK; //LCOV_EXCL_LINE
629 return rv; //LCOV_EXCL_LINE
633 return CONNECTION_ERROR_NONE;
636 EXPORT_API int connection_set_ethernet_cable_state_chaged_cb(connection_h connection,
637 connection_ethernet_cable_state_chaged_cb callback, void *user_data)
639 DEPRECATED_LOG(__FUNCTION__, "connection_set_ethernet_cable_state_changed_cb");
643 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE);
645 if (callback == NULL || !(__connection_check_handle_validity(connection))) {
646 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
648 return CONNECTION_ERROR_INVALID_PARAMETER;
651 DEPRECATED_LOG("connection_ethernet_cable_state_chaged_cb",
652 "connection_ethernet_cable_state_changed_cb");
654 __connection_set_ethernet_cable_state_changed_cb(connection, callback, user_data);
657 return CONNECTION_ERROR_NONE;
660 EXPORT_API int connection_unset_ethernet_cable_state_chaged_cb(connection_h connection)
662 DEPRECATED_LOG(__FUNCTION__, "connection_unset_ethernet_cable_state_changed_cb");
666 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE);
668 if (!(__connection_check_handle_validity(connection))) {
669 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
671 return CONNECTION_ERROR_INVALID_PARAMETER;
674 __connection_set_ethernet_cable_state_changed_cb(connection, NULL, NULL);
677 return CONNECTION_ERROR_NONE;
680 EXPORT_API int connection_set_ethernet_cable_state_changed_cb(connection_h connection,
681 connection_ethernet_cable_state_changed_cb callback, void *user_data)
685 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE);
687 if (callback == NULL || !(__connection_check_handle_validity(connection))) {
688 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
690 return CONNECTION_ERROR_INVALID_PARAMETER;
693 __connection_set_ethernet_cable_state_changed_cb(connection, callback, user_data);
696 return CONNECTION_ERROR_NONE;
699 EXPORT_API int connection_unset_ethernet_cable_state_changed_cb(connection_h connection)
703 CHECK_FEATURE_SUPPORTED(ETHERNET_FEATURE);
705 if (!(__connection_check_handle_validity(connection))) {
706 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
708 return CONNECTION_ERROR_INVALID_PARAMETER;
711 __connection_set_ethernet_cable_state_changed_cb(connection, NULL, NULL);
714 return CONNECTION_ERROR_NONE;
717 EXPORT_API int connection_get_bt_state(connection_h connection, connection_bt_state_e *state)
721 CHECK_FEATURE_SUPPORTED(TETHERING_BLUETOOTH_FEATURE);
723 if (state == NULL || !(__connection_check_handle_validity(connection))) {
724 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
726 return CONNECTION_ERROR_INVALID_PARAMETER;
729 int rv = _connection_libnet_get_bluetooth_state(connection, state);
730 if (rv != CONNECTION_ERROR_NONE) {
731 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get bluetooth state[%d]", rv); //LCOV_EXCL_LINE
732 CONN_UNLOCK; //LCOV_EXCL_LINE
733 return rv; //LCOV_EXCL_LINE
737 return CONNECTION_ERROR_NONE;
740 EXPORT_API int connection_set_type_changed_cb(connection_h connection,
741 connection_type_changed_cb callback, void* user_data)
745 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
747 if (callback == NULL || !(__connection_check_handle_validity(connection))) {
748 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
750 return CONNECTION_ERROR_INVALID_PARAMETER;
753 __connection_set_type_changed_callback(connection, callback, user_data);
756 return CONNECTION_ERROR_NONE;
759 EXPORT_API int connection_unset_type_changed_cb(connection_h connection)
763 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
765 if (!(__connection_check_handle_validity(connection))) {
766 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
768 return CONNECTION_ERROR_INVALID_PARAMETER;
771 __connection_set_type_changed_callback(connection, NULL, NULL);
774 return CONNECTION_ERROR_NONE;
777 EXPORT_API int connection_set_ip_address_changed_cb(connection_h connection,
778 connection_address_changed_cb callback, void* user_data)
782 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
784 if (callback == NULL || !(__connection_check_handle_validity(connection))) {
785 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
787 return CONNECTION_ERROR_INVALID_PARAMETER;
790 __connection_set_ip_changed_callback(connection, callback, user_data);
793 return CONNECTION_ERROR_NONE;
796 EXPORT_API int connection_unset_ip_address_changed_cb(connection_h connection)
800 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
802 if (!(__connection_check_handle_validity(connection))) {
803 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
805 return CONNECTION_ERROR_INVALID_PARAMETER;
808 __connection_set_ip_changed_callback(connection, NULL, NULL);
811 return CONNECTION_ERROR_NONE;
814 EXPORT_API int connection_set_proxy_address_changed_cb(connection_h connection,
815 connection_address_changed_cb callback, void* user_data)
819 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
821 if (callback == NULL || !(__connection_check_handle_validity(connection))) {
822 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
824 return CONNECTION_ERROR_INVALID_PARAMETER;
827 __connection_set_proxy_changed_callback(connection, callback, user_data);
830 return CONNECTION_ERROR_NONE;
833 EXPORT_API int connection_unset_proxy_address_changed_cb(connection_h connection)
837 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
839 if (!(__connection_check_handle_validity(connection))) {
840 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
842 return CONNECTION_ERROR_INVALID_PARAMETER;
845 __connection_set_proxy_changed_callback(connection, NULL, NULL);
848 return CONNECTION_ERROR_NONE;
851 EXPORT_API int connection_set_internet_state_changed_cb(connection_h connection,
852 connection_internet_state_changed_cb callback, void *user_data)
856 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
858 if (callback == NULL || !(__connection_check_handle_validity(connection))) {
859 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
861 return CONNECTION_ERROR_INVALID_PARAMETER;
864 __connection_set_internet_state_changed_callback(connection, callback, user_data);
867 return CONNECTION_ERROR_NONE;
870 EXPORT_API int connection_unset_internet_state_changed_cb(connection_h connection)
874 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
876 if (!(__connection_check_handle_validity(connection))) {
877 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
879 return CONNECTION_ERROR_INVALID_PARAMETER;
882 __connection_set_internet_state_changed_callback(connection, NULL, NULL);
885 return CONNECTION_ERROR_NONE;
888 EXPORT_API int connection_add_profile(connection_h connection, connection_profile_h profile)
891 connection_handle_s *conn_handle = (connection_handle_s *)connection;
892 net_profile_info_t *profile_info = (net_profile_info_t *)profile;
896 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
898 if (!(__connection_check_handle_validity(connection)) ||
899 !(_connection_libnet_check_profile_validity(profile))) {
900 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
902 return CONNECTION_ERROR_INVALID_PARAMETER;
905 if (profile_info->profile_type != NET_DEVICE_CELLULAR) {
906 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
907 CONN_UNLOCK; //LCOV_EXCL_LINE
908 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
911 if (profile_info->profile_info.pdp.ps_modem_path[0] != '/' ||
912 strlen(profile_info->profile_info.pdp.ps_modem_path) < 2) {
913 CONNECTION_LOG(CONNECTION_ERROR, "Modem object path is NULL"); //LCOV_EXCL_LINE
914 CONN_UNLOCK; //LCOV_EXCL_LINE
915 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
918 rv = net_add_profile(conn_handle->network_info_handle,
919 profile_info->profile_info.pdp.service_type, profile_info);
920 if (rv == NET_ERR_ACCESS_DENIED) {
921 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
922 CONN_UNLOCK; //LCOV_EXCL_LINE
923 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
924 } else if (rv != NET_ERR_NONE) {
925 CONNECTION_LOG(CONNECTION_ERROR, "Failed to add profile[%d]", rv); //LCOV_EXCL_LINE
926 CONN_UNLOCK; //LCOV_EXCL_LINE
927 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
931 return CONNECTION_ERROR_NONE;
934 EXPORT_API int connection_remove_profile(connection_h connection, connection_profile_h profile)
937 connection_handle_s *conn_handle = (connection_handle_s *)connection;
938 net_profile_info_t *profile_info = (net_profile_info_t *)profile;
942 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
944 if (!(__connection_check_handle_validity(connection)) ||
945 !(_connection_libnet_check_profile_validity(profile))) {
946 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
948 return CONNECTION_ERROR_INVALID_PARAMETER;
951 if (profile_info->profile_type != NET_DEVICE_CELLULAR &&
952 profile_info->profile_type != NET_DEVICE_MESH &&
953 profile_info->profile_type != NET_DEVICE_WIFI) {
954 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
955 CONN_UNLOCK; //LCOV_EXCL_LINE
956 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
959 rv = net_delete_profile(conn_handle->network_info_handle, profile_info->profile_name);
960 if (rv == NET_ERR_ACCESS_DENIED) {
961 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
962 CONN_UNLOCK; //LCOV_EXCL_LINE
963 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
964 } else if (rv != NET_ERR_NONE) {
965 CONNECTION_LOG(CONNECTION_ERROR, "Failed to delete profile[%d]", rv); //LCOV_EXCL_LINE
966 CONN_UNLOCK; //LCOV_EXCL_LINE
967 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
971 return CONNECTION_ERROR_NONE;
974 EXPORT_API int connection_update_profile(connection_h connection, connection_profile_h profile)
977 connection_handle_s *conn_handle = (connection_handle_s *)connection;
978 net_profile_info_t *profile_info = (net_profile_info_t *)profile;
982 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, ETHERNET_FEATURE);
984 if (!(__connection_check_handle_validity(connection)) ||
985 !(_connection_libnet_check_profile_validity(profile))) {
986 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
988 return CONNECTION_ERROR_INVALID_PARAMETER;
991 rv = net_modify_profile(conn_handle->network_info_handle,
992 profile_info->profile_name, (net_profile_info_t*)profile);
993 if (rv == NET_ERR_ACCESS_DENIED) {
994 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
995 CONN_UNLOCK; //LCOV_EXCL_LINE
996 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
997 } else if (rv != NET_ERR_NONE) {
998 CONNECTION_LOG(CONNECTION_ERROR, "Failed to modify profile[%d]", rv); //LCOV_EXCL_LINE
999 CONN_UNLOCK; //LCOV_EXCL_LINE
1000 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1004 return CONNECTION_ERROR_NONE;
1007 EXPORT_API int connection_get_profile_iterator(connection_h connection,
1008 connection_iterator_type_e type, connection_profile_iterator_h* profile_iterator)
1012 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1014 if (!(__connection_check_handle_validity(connection)) ||
1015 (type != CONNECTION_ITERATOR_TYPE_REGISTERED &&
1016 type != CONNECTION_ITERATOR_TYPE_CONNECTED &&
1017 type != CONNECTION_ITERATOR_TYPE_DEFAULT)) {
1018 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1020 return CONNECTION_ERROR_INVALID_PARAMETER;
1023 int rv = _connection_libnet_get_profile_iterator(connection, type, profile_iterator);
1024 if (rv != CONNECTION_ERROR_NONE) {
1025 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get profile iterator [%d]", rv); //LCOV_EXCL_LINE
1026 CONN_UNLOCK; //LCOV_EXCL_LINE
1027 return rv; //LCOV_EXCL_LINE
1031 return CONNECTION_ERROR_NONE;
1034 EXPORT_API int connection_profile_iterator_next(connection_profile_iterator_h profile_iterator,
1035 connection_profile_h* profile)
1039 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1041 int rv = _connection_libnet_get_iterator_next(profile_iterator, profile);
1047 EXPORT_API bool connection_profile_iterator_has_next(connection_profile_iterator_h profile_iterator)
1051 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1053 int rv = _connection_libnet_iterator_has_next(profile_iterator);
1059 EXPORT_API int connection_destroy_profile_iterator(connection_profile_iterator_h profile_iterator)
1063 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1065 int rv = _connection_libnet_destroy_iterator(profile_iterator);
1071 EXPORT_API int connection_get_current_profile(connection_h connection, connection_profile_h* profile)
1075 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1077 if (!(__connection_check_handle_validity(connection)) || profile == NULL) {
1078 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1080 return CONNECTION_ERROR_INVALID_PARAMETER;
1083 int rv = _connection_libnet_get_current_profile(connection, profile);
1084 if (rv != CONNECTION_ERROR_NONE) {
1085 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get current profile [%d]", rv); //LCOV_EXCL_LINE
1086 CONN_UNLOCK; //LCOV_EXCL_LINE
1087 return rv; //LCOV_EXCL_LINE
1091 return CONNECTION_ERROR_NONE;
1094 EXPORT_API int connection_get_default_cellular_service_profile(
1095 connection_h connection, connection_cellular_service_type_e type,
1096 connection_profile_h *profile)
1100 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1102 if (!(__connection_check_handle_validity(connection)) || profile == NULL) {
1103 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1105 return CONNECTION_ERROR_INVALID_PARAMETER;
1108 int rv = _connection_libnet_get_cellular_service_profile(connection, type, profile);
1109 if (rv != CONNECTION_ERROR_NONE) {
1110 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get default cellular service profile [%d]", rv); //LCOV_EXCL_LINE
1111 CONN_UNLOCK; //LCOV_EXCL_LINE
1112 return rv; //LCOV_EXCL_LINE
1116 return CONNECTION_ERROR_NONE;
1119 EXPORT_API int connection_set_default_cellular_service_profile(connection_h connection,
1120 connection_cellular_service_type_e type, connection_profile_h profile)
1124 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1126 if (!(__connection_check_handle_validity(connection)) || profile == NULL) {
1127 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1129 return CONNECTION_ERROR_INVALID_PARAMETER;
1132 int rv = _connection_libnet_set_cellular_service_profile_sync(connection, type, profile);
1133 if (rv != CONNECTION_ERROR_NONE) {
1134 CONNECTION_LOG(CONNECTION_ERROR, "Fail to set default cellular service profile [%d]", rv); //LCOV_EXCL_LINE
1135 CONN_UNLOCK; //LCOV_EXCL_LINE
1136 return rv; //LCOV_EXCL_LINE
1140 return CONNECTION_ERROR_NONE;
1143 EXPORT_API int connection_set_default_cellular_service_profile_async(connection_h connection,
1144 connection_cellular_service_type_e type, connection_profile_h profile,
1145 connection_set_default_cb callback, void* user_data)
1149 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1153 if (!(__connection_check_handle_validity(connection)) ||
1154 profile == NULL || callback == NULL) {
1155 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1157 return CONNECTION_ERROR_INVALID_PARAMETER;
1160 rv = _connection_libnet_set_cellular_service_profile_async(connection, type, profile);
1161 if (rv == NET_ERR_ACCESS_DENIED) {
1162 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
1163 CONN_UNLOCK; //LCOV_EXCL_LINE
1164 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
1165 } else if (rv != NET_ERR_NONE) {
1166 CONNECTION_LOG(CONNECTION_ERROR, "Failed to set default cellular service profile[%d]", rv); //LCOV_EXCL_LINE
1167 CONN_UNLOCK; //LCOV_EXCL_LINE
1168 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1171 __connection_set_default_cellular_service_profile_callback(connection, callback, user_data);
1174 return CONNECTION_ERROR_NONE;
1177 EXPORT_API int connection_open_profile(connection_h connection, connection_profile_h profile,
1178 connection_opened_cb callback, void* user_data)
1182 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE);
1186 if (!(__connection_check_handle_validity(connection)) ||
1187 profile == NULL || callback == NULL) {
1188 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1190 return CONNECTION_ERROR_INVALID_PARAMETER;
1193 rv = _connection_libnet_open_profile(connection, profile);
1194 if (rv == NET_ERR_ACCESS_DENIED) {
1195 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
1196 CONN_UNLOCK; //LCOV_EXCL_LINE
1197 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
1198 } else if (rv != NET_ERR_NONE) {
1199 CONNECTION_LOG(CONNECTION_ERROR, "Failed to open profile[%d]", rv); //LCOV_EXCL_LINE
1200 CONN_UNLOCK; //LCOV_EXCL_LINE
1201 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1204 __connection_open_profile_set_callback(connection, callback, user_data);
1207 return CONNECTION_ERROR_NONE;
1210 EXPORT_API int connection_close_profile(connection_h connection, connection_profile_h profile,
1211 connection_closed_cb callback, void* user_data)
1215 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE);
1219 if (!(__connection_check_handle_validity(connection)) ||
1220 profile == NULL || callback == NULL) {
1221 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1223 return CONNECTION_ERROR_INVALID_PARAMETER;
1226 rv = _connection_libnet_close_profile(connection, profile);
1227 if (rv == NET_ERR_ACCESS_DENIED) {
1228 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
1229 CONN_UNLOCK; //LCOV_EXCL_LINE
1230 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
1231 } else if (rv != NET_ERR_NONE) {
1232 CONNECTION_LOG(CONNECTION_ERROR, "Failed to close profile[%d]", rv); //LCOV_EXCL_LINE
1233 CONN_UNLOCK; //LCOV_EXCL_LINE
1234 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1237 __connection_close_profile_set_callback(connection, callback, user_data);
1240 return CONNECTION_ERROR_NONE;
1243 EXPORT_API int connection_reset_profile(connection_h connection,
1244 connection_reset_option_e type, int id, connection_reset_cb callback, void *user_data)
1248 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1252 if (!(__connection_check_handle_validity(connection))) {
1253 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed");
1255 return CONNECTION_ERROR_INVALID_PARAMETER;
1258 if (id < 0 || id > 1) {
1259 CONNECTION_LOG(CONNECTION_ERROR, "Wrong Parameter Passed"); //LCOV_EXCL_LINE
1260 CONN_UNLOCK; //LCOV_EXCL_LINE
1261 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1264 rv = _connection_libnet_reset_profile(connection, type, id);
1265 if (rv == NET_ERR_ACCESS_DENIED) {
1266 CONNECTION_LOG(CONNECTION_ERROR, "Access denied"); //LCOV_EXCL_LINE
1267 CONN_UNLOCK; //LCOV_EXCL_LINE
1268 return CONNECTION_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
1269 } else if (rv != NET_ERR_NONE) {
1270 CONNECTION_LOG(CONNECTION_ERROR, "Failed to reset profile[%d]", rv); //LCOV_EXCL_LINE
1271 CONN_UNLOCK; //LCOV_EXCL_LINE
1272 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1275 __connection_reset_profile_set_callback(connection, callback, user_data);
1278 return CONNECTION_ERROR_NONE;
1281 EXPORT_API int connection_add_route(connection_h connection, const char* interface_name, const char* host_address)
1285 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1287 if (!(__connection_check_handle_validity(connection)) ||
1288 interface_name == NULL || host_address == NULL) {
1289 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1291 return CONNECTION_ERROR_INVALID_PARAMETER;
1294 int rv = _connection_libnet_add_route(connection, interface_name, host_address);
1295 if (rv != CONNECTION_ERROR_NONE) {
1296 CONNECTION_LOG(CONNECTION_ERROR, "Fail to add route [%d]", rv); //LCOV_EXCL_LINE
1297 CONN_UNLOCK; //LCOV_EXCL_LINE
1298 return rv; //LCOV_EXCL_LINE
1302 return CONNECTION_ERROR_NONE;
1305 EXPORT_API int connection_remove_route(connection_h connection, const char* interface_name, const char* host_address)
1309 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1311 if (!(__connection_check_handle_validity(connection)) ||
1312 interface_name == NULL || host_address == NULL) {
1313 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1315 return CONNECTION_ERROR_INVALID_PARAMETER;
1318 int rv = _connection_libnet_remove_route(connection, interface_name, host_address);
1319 if (rv != CONNECTION_ERROR_NONE) {
1320 CONNECTION_LOG(CONNECTION_ERROR, "Fail to remove route [%d]", rv); //LCOV_EXCL_LINE
1321 CONN_UNLOCK; //LCOV_EXCL_LINE
1322 return rv; //LCOV_EXCL_LINE
1326 return CONNECTION_ERROR_NONE;
1329 EXPORT_API int connection_add_route_ipv6(connection_h connection, const char *interface_name, const char *host_address, const char * gateway)
1333 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, ETHERNET_FEATURE);
1335 if (!(__connection_check_handle_validity(connection)) ||
1336 interface_name == NULL || host_address == NULL) {
1337 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1339 return CONNECTION_ERROR_INVALID_PARAMETER;
1342 int rv = _connection_libnet_add_route_ipv6(connection, interface_name, host_address, gateway);
1343 if (rv != CONNECTION_ERROR_NONE) {
1344 CONNECTION_LOG(CONNECTION_ERROR, "Fail to add route ipv6 [%d]", rv); //LCOV_EXCL_LINE
1345 CONN_UNLOCK; //LCOV_EXCL_LINE
1346 return rv; //LCOV_EXCL_LINE
1350 return CONNECTION_ERROR_NONE;
1353 EXPORT_API int connection_remove_route_ipv6(connection_h connection, const char *interface_name, const char *host_address, const char * gateway)
1357 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, ETHERNET_FEATURE);
1359 if (!(__connection_check_handle_validity(connection)) ||
1360 interface_name == NULL || host_address == NULL) {
1361 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1363 return CONNECTION_ERROR_INVALID_PARAMETER;
1366 int rv = _connection_libnet_remove_route_ipv6(connection, interface_name, host_address, gateway);
1367 if (rv != CONNECTION_ERROR_NONE) {
1368 CONNECTION_LOG(CONNECTION_ERROR, "Fail to remove route ipv6 [%d]", rv); //LCOV_EXCL_LINE
1369 CONN_UNLOCK; //LCOV_EXCL_LINE
1370 return rv; //LCOV_EXCL_LINE
1374 return CONNECTION_ERROR_NONE;
1377 EXPORT_API int connection_add_route_entry(connection_h connection,
1378 connection_address_family_e address_family, const char *interface_name,
1379 const char *host_address, const char *gateway)
1383 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, ETHERNET_FEATURE);
1385 if (!(__connection_check_handle_validity(connection)) ||
1386 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1387 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1388 interface_name == NULL || host_address == NULL) {
1389 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1391 return CONNECTION_ERROR_INVALID_PARAMETER;
1394 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
1395 int rv = _connection_libnet_add_route_entry(connection, CONNECTION_ADDRESS_FAMILY_IPV4,
1396 interface_name, host_address, gateway);
1400 int rv = _connection_libnet_add_route_entry(connection, CONNECTION_ADDRESS_FAMILY_IPV6,
1401 interface_name, host_address, gateway);
1407 EXPORT_API int connection_remove_route_entry(connection_h connection,
1408 connection_address_family_e address_family, const char *interface_name,
1409 const char *host_address, const char *gateway)
1413 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, ETHERNET_FEATURE);
1415 if (!(__connection_check_handle_validity(connection)) ||
1416 (address_family != CONNECTION_ADDRESS_FAMILY_IPV4 &&
1417 address_family != CONNECTION_ADDRESS_FAMILY_IPV6) ||
1418 interface_name == NULL || host_address == NULL) {
1419 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1421 return CONNECTION_ERROR_INVALID_PARAMETER;
1424 if (address_family == CONNECTION_ADDRESS_FAMILY_IPV4) {
1425 int rv = _connection_libnet_remove_route_entry(connection, CONNECTION_ADDRESS_FAMILY_IPV4,
1426 interface_name, host_address, gateway);
1430 int rv = _connection_libnet_remove_route_entry(connection, CONNECTION_ADDRESS_FAMILY_IPV6,
1431 interface_name, host_address, gateway);
1437 static int __get_cellular_statistic(connection_handle_s *conn_handle,
1438 connection_statistics_type_e statistics_type, long long *llsize)
1440 int rv = VCONF_OK, rv1 = VCONF_OK;
1441 int last_size = 0, size = 0;
1442 #if defined TIZEN_DUALSIM_ENABLE
1446 if (llsize == NULL) {
1447 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1448 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1451 switch (statistics_type) {
1452 case CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA:
1453 case CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA:
1454 case CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA:
1455 case CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
1458 return CONNECTION_ERROR_INVALID_PARAMETER;
1461 #if defined TIZEN_DUALSIM_ENABLE
1462 rv = _connection_vconf_get_int(conn_handle, VCONF_TELEPHONY_DEFAULT_DATA_SERVICE, &sim_id);
1463 if (rv != VCONF_OK) {
1464 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get default subscriber id");
1466 return CONNECTION_ERROR_OPERATION_FAILED;
1472 switch (statistics_type) {
1473 case CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA:
1474 rv = _connection_vconf_get_int(conn_handle, VCONFKEY_NETWORK_CELLULAR_PKT_LAST_SNT, &last_size);
1476 case CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA:
1477 rv = _connection_vconf_get_int(conn_handle, VCONFKEY_NETWORK_CELLULAR_PKT_LAST_RCV, &last_size);
1479 case CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA:
1480 rv = _connection_vconf_get_int(conn_handle, VCONFKEY_NETWORK_CELLULAR_PKT_LAST_SNT, &last_size);
1481 rv1 = _connection_vconf_get_int(conn_handle, VCONFKEY_NETWORK_CELLULAR_PKT_TOTAL_SNT, &size);
1483 case CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
1484 rv = _connection_vconf_get_int(conn_handle, VCONFKEY_NETWORK_CELLULAR_PKT_LAST_RCV, &last_size);
1485 rv1 = _connection_vconf_get_int(conn_handle, VCONFKEY_NETWORK_CELLULAR_PKT_TOTAL_RCV, &size);
1488 #if defined TIZEN_DUALSIM_ENABLE
1491 switch (statistics_type) {
1492 case CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA:
1493 rv = _connection_vconf_get_int(conn_handle, VCONFKEY_NETWORK_CELLULAR_PKT_LAST_SNT2, &last_size);
1495 case CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA:
1496 rv = _connection_vconf_get_int(conn_handle, VCONFKEY_NETWORK_CELLULAR_PKT_LAST_RCV2, &last_size);
1498 case CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA:
1499 rv = _connection_vconf_get_int(conn_handle, VCONFKEY_NETWORK_CELLULAR_PKT_LAST_SNT2, &last_size);
1500 rv1 = _connection_vconf_get_int(conn_handle, VCONFKEY_NETWORK_CELLULAR_PKT_TOTAL_SNT2, &size);
1502 case CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
1503 rv = _connection_vconf_get_int(conn_handle, VCONFKEY_NETWORK_CELLULAR_PKT_LAST_RCV2, &last_size);
1504 rv1 = _connection_vconf_get_int(conn_handle, VCONFKEY_NETWORK_CELLULAR_PKT_TOTAL_RCV2, &size);
1510 CONNECTION_LOG(CONNECTION_ERROR, "Invalid subscriber id:%d", sim_id);
1511 return CONNECTION_ERROR_OPERATION_FAILED;
1515 if (rv != VCONF_OK || rv1 != VCONF_OK) {
1516 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get cellular statistics"); //LCOV_EXCL_LINE
1517 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1520 *llsize = (long long)(last_size * 1000) + (long long)(size * 1000);
1521 CONNECTION_LOG(CONNECTION_INFO, "%lld bytes", *llsize);
1523 return CONNECTION_ERROR_NONE;
1526 static int __get_statistic(connection_handle_s *conn_handle, connection_type_e connection_type,
1527 connection_statistics_type_e statistics_type, long long *llsize)
1530 unsigned long long ull_size;
1532 if (llsize == NULL) {
1533 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1534 return CONNECTION_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
1537 rv = _connection_libnet_check_get_privilege();
1538 if (rv == CONNECTION_ERROR_PERMISSION_DENIED)
1540 else if (rv != CONNECTION_ERROR_NONE) {
1541 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get statistics"); //LCOV_EXCL_LINE
1542 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1545 if (connection_type == CONNECTION_TYPE_CELLULAR)
1546 return __get_cellular_statistic(conn_handle, statistics_type, llsize);
1547 else if (connection_type == CONNECTION_TYPE_WIFI) {
1548 switch (statistics_type) {
1549 case CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA:
1550 stat_type = NET_STATISTICS_TYPE_LAST_SENT_DATA;
1552 case CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA:
1553 stat_type = NET_STATISTICS_TYPE_LAST_RECEIVED_DATA;
1555 case CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA:
1556 stat_type = NET_STATISTICS_TYPE_TOTAL_SENT_DATA;
1558 case CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
1559 stat_type = NET_STATISTICS_TYPE_TOTAL_RECEIVED_DATA;
1562 return CONNECTION_ERROR_INVALID_PARAMETER;
1565 CONNECTION_LOG(CONNECTION_INFO, "connection type[%d] statistics type[%d]",
1566 connection_type, statistics_type);
1568 rv = _connection_libnet_get_statistics(conn_handle, stat_type, &ull_size);
1569 if (rv == CONNECTION_ERROR_PERMISSION_DENIED)
1571 else if (rv != CONNECTION_ERROR_NONE) {
1572 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get Wi-Fi statistics"); //LCOV_EXCL_LINE
1573 *llsize = 0; //LCOV_EXCL_LINE
1574 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1577 CONNECTION_LOG(CONNECTION_INFO, "%lld bytes", ull_size);
1578 *llsize = (long long)ull_size;
1580 return CONNECTION_ERROR_INVALID_PARAMETER;
1582 return CONNECTION_ERROR_NONE;
1585 static int __reset_statistic(connection_handle_s *conn_handle,
1586 connection_type_e connection_type, connection_statistics_type_e statistics_type)
1592 if (connection_type == CONNECTION_TYPE_CELLULAR)
1593 conn_type = NET_DEVICE_CELLULAR;
1594 else if (connection_type == CONNECTION_TYPE_WIFI)
1595 conn_type = NET_DEVICE_WIFI;
1597 return CONNECTION_ERROR_INVALID_PARAMETER;
1599 switch (statistics_type) {
1600 case CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA:
1601 stat_type = NET_STATISTICS_TYPE_LAST_SENT_DATA;
1603 case CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA:
1604 stat_type = NET_STATISTICS_TYPE_LAST_RECEIVED_DATA;
1606 case CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA:
1607 stat_type = NET_STATISTICS_TYPE_TOTAL_SENT_DATA;
1609 case CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA:
1610 stat_type = NET_STATISTICS_TYPE_TOTAL_RECEIVED_DATA;
1613 return CONNECTION_ERROR_INVALID_PARAMETER;
1616 rv = _connection_libnet_set_statistics(conn_handle, conn_type, stat_type);
1617 if (rv != CONNECTION_ERROR_NONE)
1620 CONNECTION_LOG(CONNECTION_INFO, "connection_reset_statistics success");
1622 return CONNECTION_ERROR_NONE;
1625 EXPORT_API int connection_get_statistics(connection_h connection,
1626 connection_type_e connection_type,
1627 connection_statistics_type_e statistics_type, long long* size)
1631 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
1633 if (connection_type == CONNECTION_TYPE_CELLULAR)
1634 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1635 else if (connection_type == CONNECTION_TYPE_WIFI)
1636 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1638 if (!(__connection_check_handle_validity(connection)) || size == NULL) {
1639 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1641 return CONNECTION_ERROR_INVALID_PARAMETER;
1644 int rv = __get_statistic(connection, connection_type, statistics_type, size);
1645 if (rv != CONNECTION_ERROR_NONE) {
1646 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get statistics [%d]", rv); //LCOV_EXCL_LINE
1648 return rv; //LCOV_EXCL_LINE
1652 return CONNECTION_ERROR_NONE;
1655 EXPORT_API int connection_reset_statistics(connection_h connection,
1656 connection_type_e connection_type,
1657 connection_statistics_type_e statistics_type)
1661 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE);
1663 if (connection_type == CONNECTION_TYPE_CELLULAR)
1664 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
1665 else if (connection_type == CONNECTION_TYPE_WIFI)
1666 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
1668 if (!__connection_check_handle_validity(connection)) {
1669 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1671 return CONNECTION_ERROR_INVALID_PARAMETER;
1674 int rv = __reset_statistic(connection, connection_type, statistics_type);
1675 if (rv != CONNECTION_ERROR_NONE) {
1676 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get statistics [%d]", rv); //LCOV_EXCL_LINE
1678 return rv; //LCOV_EXCL_LINE
1682 return CONNECTION_ERROR_NONE;
1685 EXPORT_API int connection_foreach_ipv6_address(connection_h connection,
1686 connection_type_e connection_type, connection_ipv6_address_cb callback,
1691 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE,
1692 TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1694 GSList *ipv6_address_list = NULL;
1696 if (!(__connection_check_handle_validity(connection))) {
1697 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1699 return CONNECTION_ERROR_INVALID_PARAMETER;
1702 int rv = CONNECTION_ERROR_NONE;
1704 switch (connection_type) {
1705 case CONNECTION_TYPE_WIFI:
1706 rv = net_foreach_ipv6_address(NET_DEVICE_WIFI,
1707 &ipv6_address_list);
1709 case CONNECTION_TYPE_CELLULAR:
1710 rv = net_foreach_ipv6_address(NET_DEVICE_CELLULAR,
1711 &ipv6_address_list);
1713 case CONNECTION_TYPE_ETHERNET:
1714 rv = net_foreach_ipv6_address(NET_DEVICE_ETHERNET,
1715 &ipv6_address_list);
1717 case CONNECTION_TYPE_BT:
1718 rv = net_foreach_ipv6_address(NET_DEVICE_BLUETOOTH,
1719 &ipv6_address_list);
1722 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1724 return CONNECTION_ERROR_INVALID_PARAMETER;
1727 if (rv != NET_ERR_NONE) {
1728 CONNECTION_LOG(CONNECTION_ERROR, "net_get_multiple_id_address" //LCOV_EXCL_LINE
1729 " Failed = %d\n", rv);
1730 CONN_UNLOCK; //LCOV_EXCL_LINE
1731 return CONNECTION_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
1735 for (list = ipv6_address_list; list; list = list->next) {
1736 rv = callback((char *)list->data, user_data);
1741 g_slist_free_full(ipv6_address_list, g_free);
1742 ipv6_address_list = NULL;
1745 return CONNECTION_ERROR_NONE;
1748 EXPORT_API int connection_profile_start_tcpdump(connection_h connection)
1754 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE);
1756 if (!(__connection_check_handle_validity(connection))) {
1757 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1759 return CONNECTION_ERROR_INVALID_PARAMETER;
1762 ret = _connection_libnet_start_tcpdump(connection);
1763 if (ret != CONNECTION_ERROR_NONE) {
1764 CONNECTION_LOG(CONNECTION_ERROR, "Failed to start tcpdump (%d)", ret); //LCOV_EXCL_LINE
1765 CONN_UNLOCK; //LCOV_EXCL_LINE
1766 return ret; //LCOV_EXCL_LINE
1770 return CONNECTION_ERROR_NONE;
1773 EXPORT_API int connection_profile_stop_tcpdump(connection_h connection)
1779 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE);
1781 if (!(__connection_check_handle_validity(connection))) {
1782 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1784 return CONNECTION_ERROR_INVALID_PARAMETER;
1787 ret = _connection_libnet_stop_tcpdump(connection);
1788 if (ret != CONNECTION_ERROR_NONE) {
1789 CONNECTION_LOG(CONNECTION_ERROR, "Failed to stop tcpdump (%d)", ret); //LCOV_EXCL_LINE
1790 CONN_UNLOCK; //LCOV_EXCL_LINE
1791 return ret; //LCOV_EXCL_LINE
1795 return CONNECTION_ERROR_NONE;
1798 EXPORT_API int connection_profile_get_tcpdump_state(connection_h connection, gboolean *tcpdump_state)
1804 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE);
1806 if (!(__connection_check_handle_validity(connection)) || !tcpdump_state) {
1807 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1809 return CONNECTION_ERROR_INVALID_PARAMETER;
1812 ret = _connection_libnet_get_tcpdump_state(connection, tcpdump_state);
1813 if (ret != CONNECTION_ERROR_NONE) {
1814 CONNECTION_LOG(CONNECTION_ERROR, "Failed to get the tcpdump state (%d)", ret); //LCOV_EXCL_LINE
1815 CONN_UNLOCK; //LCOV_EXCL_LINE
1816 return ret; //LCOV_EXCL_LINE
1820 return CONNECTION_ERROR_NONE;
1823 EXPORT_API int connection_profile_save_ethernet_eap_config(connection_h connection,
1824 connection_profile_h profile)
1828 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE);
1832 if (!__connection_check_handle_validity(connection) ||
1833 !_connection_libnet_check_profile_validity(profile)) {
1834 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter");
1836 return CONNECTION_ERROR_INVALID_PARAMETER;
1839 rv = _connection_libnet_profile_save_ethernet_eap_config(connection, profile);
1840 if (rv != CONNECTION_ERROR_NONE) {
1841 CONNECTION_LOG(CONNECTION_ERROR, "Failed to save ethernet eap config."); //LCOV_EXCL_LINE
1842 CONN_UNLOCK; //LCOV_EXCL_LINE
1843 return rv; //LCOV_EXCL_LINE
1847 return CONNECTION_ERROR_NONE;
1850 EXPORT_API int connection_clock_is_updated(connection_h connection, bool *updated)
1854 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, TETHERING_BLUETOOTH_FEATURE, ETHERNET_FEATURE);
1856 if (!(_connection_check_handle_validity(connection))) {
1857 CONNECTION_LOG(CONNECTION_ERROR, "Invalid parameter"); //LCOV_EXCL_LINE
1858 CONN_UNLOCK; //LCOV_EXCL_LINE
1859 return CONNECTION_ERROR_INVALID_PARAMETER;//LCOV_EXCL_LINE
1862 int rv = _connection_libnet_get_clock_updated(connection, updated);
1864 if (rv != CONNECTION_ERROR_NONE) {
1865 CONNECTION_LOG(CONNECTION_ERROR, "Fail to get clock update information[%d]", rv); //LCOV_EXCL_LINE
1866 CONN_UNLOCK; //LCOV_EXCL_LINE
1867 return rv; //LCOV_EXCL_LINE
1870 CONNECTION_LOG(CONNECTION_INFO, "Clock updated: %s", updated ? "true" : "false");
1873 return CONNECTION_ERROR_NONE;