2 * Copyright (c) 2014 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * PROPRIETARY/CONFIDENTIAL
6 * This software is the confidential and proprietary information of
7 * SAMSUNG ELECTRONICS (Confidential Information).
8 * You shall not disclose such Confidential Information and shall
9 * use it only in accordance with the terms of the license agreement
10 * you entered into with SAMSUNG ELECTRONICS. SAMSUNG make no
11 * representations or warranties about the suitability
12 * of the software, either express or implied, including but not
13 * limited to the implied warranties of merchantability, fitness for a particular purpose, or non-
14 * infringement. SAMSUNG shall not be liable for any damages suffered by licensee as
15 * a result of using, modifying or distributing this software or its derivatives.
23 #include "net/util/vconf_helper.h"
24 #include "net/wifi_manager.h"
27 WIFI_MANAGER_CB_DEVICE_STATE_CHANGED,
28 WIFI_MANAGER_CB_CONNECTION_STATE_CHANGED,
29 WIFI_MANAGER_CB_BACKGROUND_SCAN
30 } wifi_manager_cb_type;
32 struct _wifi_manager_object {
37 struct _wifi_ap_object {
42 wifi_error_e last_connection_error;
43 gboolean is_captiveportal;
46 typedef struct _wifi_config_object {
50 wifi_security_type_e security_type;
51 wifi_error_e last_error;
55 wifi_manager_object *manager;
57 wifi_manager_cb_type type;
58 wifi_manager_generic_cb cb;
59 wifi_manager_generic_state_changed_cb state_changed_cb;
61 } wifi_manager_cb_data;
63 static wifi_manager_object *_last_initailized_wifi_manager;
65 static void _update_wifi_config_list(wifi_manager_object *manager);
66 static wifi_ap_object *_create_ap_object_by_ap_h(wifi_ap_h ap);
68 static void __wifi_common_cb(wifi_error_e error_code, gpointer user_data)
70 wifi_manager_cb_data *cb_data = (wifi_manager_cb_data *)user_data;
71 WIFI_RET_IF_FAIL(cb_data);
73 WIFI_LOG_INFO("common cb");
76 cb_data->cb(cb_data->manager, cb_data->ap, error_code, cb_data->user_data);
81 static void __wifi_background_scan_cb(wifi_error_e error_code, gpointer user_data)
83 wifi_manager_cb_data *cb_data = (wifi_manager_cb_data *)user_data;
84 WIFI_RET_IF_FAIL(cb_data != NULL);
87 cb_data->cb(cb_data->manager, cb_data->ap, error_code, cb_data->user_data);
90 static void __wifi_device_state_changed_cb(wifi_device_state_e state, void *user_data)
92 wifi_manager_cb_data *cb_data = (wifi_manager_cb_data *)user_data;
93 WIFI_RET_IF_FAIL(cb_data);
95 if (state == WIFI_DEVICE_STATE_ACTIVATED) {
96 _update_wifi_config_list(cb_data->manager);
99 if (cb_data->state_changed_cb)
100 cb_data->state_changed_cb(cb_data->manager,
102 WIFI_CONNECTION_STATE_FAILURE, NULL,
103 WIFI_RSSI_LEVEL_0, cb_data->user_data);
106 static void __wifi_connection_state_changed_cb(wifi_connection_state_e state,
107 wifi_ap_h ap, void *user_data)
109 wifi_manager_cb_data *cb_data = (wifi_manager_cb_data *)user_data;
110 WIFI_RET_IF_FAIL(cb_data);
112 if (state == WIFI_CONNECTION_STATE_CONNECTED ||
113 state == WIFI_CONNECTION_STATE_DISCONNECTED ||
114 state == WIFI_CONNECTION_STATE_FAILURE) {
115 _update_wifi_config_list(cb_data->manager);
118 if (cb_data->state_changed_cb) {
119 wifi_ap_object *ap_obj = _create_ap_object_by_ap_h(ap);
120 cb_data->state_changed_cb(cb_data->manager,
121 WIFI_DEVICE_STATE_DEACTIVATED,
123 WIFI_RSSI_LEVEL_0, cb_data->user_data);
124 wifi_manager_ap_destroy(ap_obj);
128 bool __wifi_config_list_cb(const wifi_config_h config, void *user_data)
132 wifi_manager_object *manager = user_data;
133 wifi_config_object *config_obj;
134 WIFI_RET_VAL_IF_FAIL(config != NULL, true);
135 WIFI_RET_VAL_IF_FAIL(manager != NULL, true);
137 config_obj = g_new0(wifi_config_object, 1);
138 WIFI_RET_VAL_IF_FAIL(config_obj != NULL, true);
140 wifi_config_clone(config, &(config_obj->handle));
141 wifi_config_get_name(config, &(config_obj->name));
142 wifi_config_get_security_type(config, &(config_obj->security_type));
143 manager->config_list = g_list_append(manager->config_list, config_obj);
149 static void _wifi_config_destory(gpointer data)
151 wifi_config_object *config = data;
152 if (config->handle) {
153 wifi_config_destroy(config->handle);
156 g_free(config->name);
158 if (config->passphrase) {
159 g_free(config->passphrase);
164 static void _clear_wifi_config_list(wifi_manager_object *manager)
168 WIFI_RET_IF_FAIL(manager != NULL);
169 WIFI_RET_IF_FAIL(manager->config_list != NULL);
171 g_list_free_full(manager->config_list, _wifi_config_destory);
172 manager->config_list = NULL;
177 static void _update_wifi_config_list(wifi_manager_object *manager)
180 WIFI_RET_IF_FAIL(manager);
184 if (manager->config_list) {
185 _clear_wifi_config_list(manager);
188 err = wifi_config_foreach_configuration(__wifi_config_list_cb, manager);
189 if (err != WIFI_ERROR_NONE) {
190 WIFI_LOG_ERR("wifi_config_foreach_configuration() is failed. error = %s",
191 wifi_error_to_string(err));
197 static wifi_config_object *_find_wifi_config_by_wifi_ap(wifi_manager_object *manager,
202 wifi_security_type_e sec_type;
203 WIFI_RET_VAL_IF_FAIL(manager, NULL);
204 WIFI_RET_VAL_IF_FAIL(ap, NULL);
206 ssid = wifi_manager_ap_get_ssid(ap);
207 WIFI_RET_VAL_IF_FAIL(ssid, NULL);
208 sec_type = wifi_manager_ap_get_security_type(ap);
210 config_list = manager->config_list;
211 while (config_list) {
212 wifi_config_object *config = config_list->data;
213 if (!g_strcmp0(config->name, ssid) && (config->security_type == sec_type)) {
217 config_list = config_list->next;
223 static wifi_ap_object *_create_ap_object_by_ap_h(wifi_ap_h ap)
225 wifi_ap_object *ap_obj = g_new0(wifi_ap_object, 1);
226 gboolean is_create_failed = FALSE;
230 if (WIFI_ERROR_NONE != wifi_ap_clone(&(ap_obj->ap), ap)) {
231 is_create_failed = TRUE;
232 } else if (WIFI_ERROR_NONE != wifi_ap_get_rssi(ap, &(ap_obj->rssi))) {
233 is_create_failed = TRUE;
234 } else if (WIFI_ERROR_NONE != wifi_ap_is_wps_supported(ap, &(ap_obj->wps_mode))) {
235 is_create_failed = TRUE;
238 if (is_create_failed) {
239 wifi_manager_ap_destroy(ap_obj);
242 ap_obj->last_connection_error = WIFI_ERROR_NONE;
243 ap_obj->is_captiveportal = FALSE;
247 gint wifi_manager_default_compare_ap(gconstpointer a, gconstpointer b)
249 wifi_ap_object *ap_obj1 = (wifi_ap_object *)a;
250 wifi_ap_object *ap_obj2 = (wifi_ap_object *)b;
251 wifi_connection_state_e state1 = WIFI_CONNECTION_STATE_DISCONNECTED;
252 wifi_connection_state_e state2 = WIFI_CONNECTION_STATE_DISCONNECTED;
253 bool favorite1 = false;
254 bool favorite2 = false;
256 wifi_ap_get_connection_state(ap_obj1->ap, &state1);
257 wifi_ap_get_connection_state(ap_obj2->ap, &state2);
258 if (state1 != state2) {
259 if (state1 == WIFI_CONNECTION_STATE_CONNECTED)
261 if (state2 == WIFI_CONNECTION_STATE_CONNECTED)
264 if (state1 == WIFI_CONNECTION_STATE_CONFIGURATION)
266 if (state2 == WIFI_CONNECTION_STATE_CONFIGURATION)
269 if (state1 == WIFI_CONNECTION_STATE_ASSOCIATION)
271 if (state2 == WIFI_CONNECTION_STATE_ASSOCIATION)
275 favorite1 = wifi_manager_ap_is_favorite(
276 _last_initailized_wifi_manager, ap_obj1);
277 favorite2 = wifi_manager_ap_is_favorite(
278 _last_initailized_wifi_manager, ap_obj2);
279 if (favorite1 != favorite2) {
286 /* Alphabetical order */
288 return strcasecmp((const char *) wifi_device1->ssid,
289 (const char *) wifi_device2->ssid);
292 return((ap_obj1->rssi >= ap_obj2->rssi) ? -1 : 1);
295 #ifdef TIZEN_TELEPHONY_ENABLE
296 static bool __update_ap_list_foreach(wifi_ap_h ap, void *user_data)
298 GList **ap_list = user_data;
299 wifi_ap_object *ap_obj = NULL;
300 WIFI_RET_VAL_IF_FAIL(ap_list, true);
302 ap_obj = _create_ap_object_by_ap_h(ap);
303 WIFI_RET_VAL_IF_FAIL(ap_obj, true);
305 *ap_list = g_list_insert_sorted(*ap_list, ap_obj, wifi_manager_default_compare_ap);
309 // Find AP list except EAP type when WC1-S Bluetooth model(No SIM).
310 static bool __update_ap_list_foreach(wifi_ap_h ap, void *user_data)
312 GList **ap_list = user_data;
313 wifi_security_type_e sec_type = WIFI_SECURITY_TYPE_NONE;
315 wifi_ap_object *ap_obj = NULL;
316 WIFI_RET_VAL_IF_FAIL(ap_list != NULL, true);
318 err = wifi_ap_get_security_type(ap, &sec_type);
319 WIFI_RET_VAL_IF_FAIL(err == WIFI_ERROR_NONE, true);
320 if (sec_type == WIFI_SECURITY_TYPE_EAP) {
321 WIFI_LOG_INFO("EAP type AP skip(No SIM model).");
325 ap_obj = _create_ap_object_by_ap_h(ap);
326 WIFI_RET_VAL_IF_FAIL(ap_obj != NULL, true);
328 *ap_list = g_list_insert_sorted(*ap_list, ap_obj, wifi_manager_default_compare_ap);
333 static void _delete_cb_data_by_type(wifi_manager_object *manager, wifi_manager_cb_type type)
335 GList *cb_data_list = manager->cb_data_list;
336 while (cb_data_list) {
337 GList *next = cb_data_list->next;
338 wifi_manager_cb_data *cb_data = cb_data_list->data;
339 if (cb_data->type == type) {
340 manager->cb_data_list =
341 g_list_delete_link(manager->cb_data_list, cb_data_list);
348 static gchar *_ap_get_proxy_address(wifi_ap_object *ap_obj)
350 gchar *proxy_address = NULL;
352 WIFI_RET_VAL_IF_FAIL(ap_obj != NULL, NULL);
354 err = wifi_ap_get_proxy_address(ap_obj->ap,
355 WIFI_ADDRESS_FAMILY_IPV4, &proxy_address);
356 if (err != WIFI_ERROR_NONE) {
357 WIFI_LOG_ERR("wifi_ap_get_proxy_address() is failed. error = %s",
358 wifi_error_to_string(err));
360 g_free(proxy_address);
364 if (!proxy_address || strlen(proxy_address) == 0) {
365 WIFI_LOG_INFO("proxy_address is NULL.");
367 g_free(proxy_address);
371 return proxy_address;
377 wifi_manager_object *wifi_manager_new()
379 return g_new0(wifi_manager_object, 1);
382 void wifi_manager_free(wifi_manager_object *manager)
388 wifi_error_e wifi_manager_init(wifi_manager_object *manager)
392 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
394 err = wifi_initialize();
395 if (err != WIFI_ERROR_NONE) {
398 err = wifi_manager_is_activated(manager, &is_activate);
399 if (err == WIFI_ERROR_NONE) {
401 _update_wifi_config_list(manager);
404 WIFI_LOG_ERR("wifi_manager_is_activated() is failed. error = %s",
405 wifi_error_to_string(err));
407 _last_initailized_wifi_manager = manager;
411 wifi_error_e wifi_manager_deinit(wifi_manager_object *manager)
413 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
415 _clear_wifi_config_list(manager);
416 if (manager->cb_data_list) {
417 GList *cb_data_list = manager->cb_data_list;
418 while (cb_data_list) {
419 wifi_manager_cb_data *cb_data = cb_data_list->data;
420 if (cb_data->type == WIFI_MANAGER_CB_DEVICE_STATE_CHANGED) {
421 wifi_unset_device_state_changed_cb();
422 } else if (cb_data->type == WIFI_MANAGER_CB_CONNECTION_STATE_CHANGED) {
423 wifi_unset_connection_state_changed_cb();
424 } else if (cb_data->type == WIFI_MANAGER_CB_BACKGROUND_SCAN) {
425 wifi_unset_background_scan_cb();
428 cb_data_list = cb_data_list->next;
430 g_list_free_full(manager->cb_data_list, g_free);
432 return wifi_deinitialize();
435 wifi_manager_object *wifi_manager_new_with_init(wifi_error_e *error)
437 wifi_manager_object *manager = wifi_manager_new();
438 *error = WIFI_ERROR_NONE;
440 *error = wifi_manager_init(manager);
441 if (*error != WIFI_ERROR_NONE) {
442 wifi_manager_free(manager);
445 *error = WIFI_ERROR_OUT_OF_MEMORY;
449 wifi_error_e wifi_manager_free_with_deinit(wifi_manager_object *manager)
451 wifi_error_e error = wifi_manager_deinit(manager);
452 wifi_manager_free(manager);
456 wifi_error_e wifi_manager_get_csccode(wifi_manager_object *manager, wifi_manager_csccode *code)
458 WIFI_RET_VAL_IF_FAIL(manager != NULL, WIFI_ERROR_INVALID_PARAMETER);
459 WIFI_RET_VAL_IF_FAIL(code != NULL, WIFI_ERROR_INVALID_PARAMETER);
461 *code = WIFI_MANAGER_CSC_UNKNOWN;
462 #ifdef TIZEN_TELEPHONY_ENABLE
463 if (vconf_is_skt()) {
464 *code = WIFI_MANAGER_CSC_SKT;
467 return WIFI_ERROR_NONE;
470 wifi_error_e wifi_manager_scan(wifi_manager_object *manager,
471 wifi_manager_generic_cb callback, gpointer user_data)
473 wifi_manager_cb_data *cb_data = NULL;
474 WIFI_RET_VAL_IF_FAIL(manager != NULL, WIFI_ERROR_INVALID_PARAMETER);
476 cb_data = g_new0(wifi_manager_cb_data, 1);
478 cb_data->manager = manager;
479 cb_data->cb = callback;
480 cb_data->user_data = user_data;
482 WIFI_LOG_INFO("Wi-Fi Scan start.");
483 return wifi_scan(__wifi_common_cb, cb_data);
485 return WIFI_ERROR_OUT_OF_MEMORY;
488 wifi_error_e wifi_manager_get_found_ap_list(wifi_manager_object *manager,
491 wifi_error_e error = WIFI_ERROR_INVALID_PARAMETER;
492 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
494 error = wifi_foreach_found_aps(__update_ap_list_foreach, ap_list);
495 if (error != WIFI_ERROR_NONE) {
497 g_list_free(*ap_list);
504 wifi_error_e wifi_manager_activate(wifi_manager_object *manager,
505 wifi_manager_generic_cb callback, gpointer user_data)
507 wifi_manager_cb_data *cb_data = NULL;
508 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
512 cb_data = g_new0(wifi_manager_cb_data, 1);
514 cb_data->manager = manager;
515 cb_data->cb = callback;
516 cb_data->user_data = user_data;
517 return wifi_activate(__wifi_common_cb, cb_data);
519 return WIFI_ERROR_OUT_OF_MEMORY;
522 wifi_error_e wifi_manager_deactivate(wifi_manager_object *manager,
523 wifi_manager_generic_cb callback, gpointer user_data)
525 wifi_manager_cb_data *cb_data = NULL;
526 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
530 cb_data = g_new0(wifi_manager_cb_data, 1);
532 cb_data->manager = manager;
533 cb_data->cb = callback;
534 cb_data->user_data = user_data;
535 return wifi_deactivate(__wifi_common_cb, cb_data);
537 return WIFI_ERROR_OUT_OF_MEMORY;
540 wifi_error_e wifi_manager_is_activated(wifi_manager_object *manager, bool *activated)
542 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
543 return wifi_is_activated(activated);
546 wifi_error_e wifi_manager_set_device_state_changed_cb(wifi_manager_object *manager,
547 wifi_manager_generic_state_changed_cb callback, void *user_data)
549 wifi_manager_cb_data *cb_data = NULL;
550 wifi_error_e err = WIFI_ERROR_INVALID_PARAMETER;
551 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
553 cb_data = g_new0(wifi_manager_cb_data, 1);
554 WIFI_RET_VAL_IF_FAIL(cb_data, WIFI_ERROR_OUT_OF_MEMORY);
556 cb_data->manager = manager;
557 cb_data->type = WIFI_MANAGER_CB_DEVICE_STATE_CHANGED;
558 cb_data->state_changed_cb = callback;
559 cb_data->user_data = user_data;
560 err = wifi_set_device_state_changed_cb(
561 __wifi_device_state_changed_cb, cb_data);
562 if (err == WIFI_ERROR_NONE)
563 manager->cb_data_list = g_list_append(manager->cb_data_list, cb_data);
567 wifi_error_e wifi_manager_unset_device_state_changed_cb(wifi_manager_object *manager)
569 wifi_error_e err = WIFI_ERROR_INVALID_PARAMETER;
570 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
572 err = wifi_unset_device_state_changed_cb();
573 _delete_cb_data_by_type(manager, WIFI_MANAGER_CB_DEVICE_STATE_CHANGED);
577 wifi_error_e wifi_manager_set_background_scan_cb(wifi_manager_object *manager,
578 wifi_manager_generic_cb callback, void *user_data)
580 wifi_manager_cb_data *cb_data = NULL;
581 wifi_error_e err = WIFI_ERROR_INVALID_PARAMETER;
582 WIFI_RET_VAL_IF_FAIL(manager != NULL, WIFI_ERROR_INVALID_PARAMETER);
584 cb_data = g_new0(wifi_manager_cb_data, 1);
585 WIFI_RET_VAL_IF_FAIL(cb_data != NULL, WIFI_ERROR_OUT_OF_MEMORY);
587 cb_data->manager = manager;
588 cb_data->type = WIFI_MANAGER_CB_BACKGROUND_SCAN;
589 cb_data->cb = callback;
590 cb_data->user_data = user_data;
591 err = wifi_set_background_scan_cb(__wifi_background_scan_cb, cb_data);
592 if (err == WIFI_ERROR_NONE)
593 manager->cb_data_list = g_list_append(manager->cb_data_list, cb_data);
597 wifi_error_e wifi_manager_unset_background_scan_cb(wifi_manager_object *manager)
599 wifi_error_e err = WIFI_ERROR_INVALID_PARAMETER;
600 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
602 err = wifi_unset_background_scan_cb();
603 _delete_cb_data_by_type(manager, WIFI_MANAGER_CB_BACKGROUND_SCAN);
607 wifi_error_e wifi_manager_set_connection_state_changed_cb(wifi_manager_object *manager,
608 wifi_manager_generic_state_changed_cb callback, void *user_data)
610 wifi_manager_cb_data *cb_data = NULL;
611 wifi_error_e err = WIFI_ERROR_INVALID_PARAMETER;
612 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
614 cb_data = g_new0(wifi_manager_cb_data, 1);
615 WIFI_RET_VAL_IF_FAIL(cb_data, WIFI_ERROR_OUT_OF_MEMORY);
617 cb_data->manager = manager;
618 cb_data->type = WIFI_MANAGER_CB_CONNECTION_STATE_CHANGED;
619 cb_data->state_changed_cb = callback;
620 cb_data->user_data = user_data;
621 err = wifi_set_connection_state_changed_cb(
622 __wifi_connection_state_changed_cb, cb_data);
623 if (err == WIFI_ERROR_NONE)
624 manager->cb_data_list = g_list_append(manager->cb_data_list, cb_data);
628 wifi_error_e wifi_manager_unset_connection_state_changed_cb(wifi_manager_object *manager)
630 wifi_error_e err = WIFI_ERROR_INVALID_PARAMETER;
631 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
633 err = wifi_unset_connection_state_changed_cb();
634 _delete_cb_data_by_type(manager, WIFI_MANAGER_CB_CONNECTION_STATE_CHANGED);
638 wifi_error_e wifi_manager_get_connection_state(wifi_manager_object *manager,
639 wifi_connection_state_e *connection_state)
641 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
642 return wifi_get_connection_state(connection_state);
645 wifi_error_e wifi_manager_connect(wifi_manager_object *manager,
646 wifi_ap_object *ap, wifi_manager_generic_cb callback, gpointer user_data)
648 wifi_manager_cb_data *cb_data = NULL;
649 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
650 WIFI_RET_VAL_IF_FAIL(ap, WIFI_ERROR_INVALID_PARAMETER);
652 cb_data = g_new0(wifi_manager_cb_data, 1);
654 cb_data->manager = manager;
656 cb_data->cb = callback;
657 cb_data->user_data = user_data;
658 return wifi_connect(ap->ap, __wifi_common_cb, cb_data);
660 return WIFI_ERROR_OUT_OF_MEMORY;
663 wifi_error_e wifi_manager_connect_by_wps_pbc(wifi_manager_object *manager,
664 wifi_ap_object *ap, wifi_manager_generic_cb callback, gpointer user_data)
666 wifi_manager_cb_data *cb_data = NULL;
667 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
668 WIFI_RET_VAL_IF_FAIL(ap, WIFI_ERROR_INVALID_PARAMETER);
670 cb_data = g_new0(wifi_manager_cb_data, 1);
672 cb_data->manager = manager;
674 cb_data->cb = callback;
675 cb_data->user_data = user_data;
676 return wifi_connect_by_wps_pbc(ap->ap, __wifi_common_cb, cb_data);
678 return WIFI_ERROR_OUT_OF_MEMORY;
681 wifi_error_e wifi_manager_connect_by_wps_pin(wifi_manager_object *manager,
682 wifi_ap_object *ap, const gchar *pin,
683 wifi_manager_generic_cb callback, gpointer user_data)
685 wifi_manager_cb_data *cb_data = NULL;
686 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
687 WIFI_RET_VAL_IF_FAIL(ap, WIFI_ERROR_INVALID_PARAMETER);
689 cb_data = g_new0(wifi_manager_cb_data, 1);
691 cb_data->manager = manager;
693 cb_data->cb = callback;
694 cb_data->user_data = user_data;
695 return wifi_connect_by_wps_pin(ap->ap, pin, __wifi_common_cb, cb_data);
697 return WIFI_ERROR_OUT_OF_MEMORY;
700 wifi_error_e wifi_manager_disconnect(wifi_manager_object *manager,
701 wifi_ap_object *ap, wifi_manager_generic_cb callback, gpointer user_data)
703 wifi_manager_cb_data *cb_data = NULL;
704 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
705 WIFI_RET_VAL_IF_FAIL(ap, WIFI_ERROR_INVALID_PARAMETER);
707 cb_data = g_new0(wifi_manager_cb_data, 1);
709 cb_data->manager = manager;
711 cb_data->cb = callback;
712 cb_data->user_data = user_data;
713 return wifi_disconnect(ap->ap, __wifi_common_cb, cb_data);
715 return WIFI_ERROR_OUT_OF_MEMORY;
718 wifi_error_e wifi_manager_get_connected_ap(wifi_manager_object *manager,
721 wifi_ap_h ap_h = NULL;
722 wifi_error_e err = WIFI_ERROR_INVALID_PARAMETER;
723 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
725 err = wifi_get_connected_ap(&ap_h);
726 if (err != WIFI_ERROR_NONE) {
728 wifi_ap_destroy(ap_h);
732 *ap = _create_ap_object_by_ap_h(ap_h);
733 wifi_ap_destroy(ap_h);
735 return WIFI_ERROR_OUT_OF_MEMORY;
736 return WIFI_ERROR_NONE;
742 wifi_ap_object *wifi_manager_ap_clone(wifi_ap_object *ap_obj)
744 WIFI_RET_VAL_IF_FAIL(ap_obj != NULL, NULL);
746 return _create_ap_object_by_ap_h(ap_obj->ap);
749 void wifi_manager_ap_destroy(wifi_ap_object *ap_obj)
751 WIFI_RET_IF_FAIL(ap_obj != NULL);
753 wifi_ap_destroy(ap_obj->ap);
757 gboolean wifi_manager_ap_is_equals(wifi_ap_object *ap_obj1, wifi_ap_object *ap_obj2)
759 gchar *ssid1, *ssid2;
760 wifi_security_type_e sec_type1, sec_type2;
761 gboolean is_equals = FALSE;
762 WIFI_RET_VAL_IF_FAIL(ap_obj1 != NULL, FALSE);
763 WIFI_RET_VAL_IF_FAIL(ap_obj2 != NULL, FALSE);
765 ssid1 = wifi_manager_ap_get_ssid(ap_obj1);
766 ssid2 = wifi_manager_ap_get_ssid(ap_obj2);
768 sec_type1 = wifi_manager_ap_get_security_type(ap_obj1);
769 sec_type2 = wifi_manager_ap_get_security_type(ap_obj2);
771 is_equals = (!g_strcmp0(ssid1, ssid2)) && (sec_type1 == sec_type2);
779 void wifi_manager_ap_refresh(wifi_ap_object *ap_obj)
781 WIFI_RET_IF_FAIL(ap_obj);
783 wifi_error_e err = wifi_ap_refresh(ap_obj->ap);
784 if (err != WIFI_ERROR_NONE) {
785 WIFI_LOG_ERR("wifi_ap_refresh() is failed. error = %s",
786 wifi_error_to_string(err));
790 wifi_ap_h wifi_manager_ap_get_ap_h(wifi_ap_object *ap_obj)
792 WIFI_RET_VAL_IF_FAIL(ap_obj, NULL);
797 wifi_error_e wifi_manager_ap_get_last_connection_error(wifi_manager_object *manager,
798 wifi_ap_object *ap_obj)
800 WIFI_RET_VAL_IF_FAIL(manager, WIFI_ERROR_INVALID_PARAMETER);
801 WIFI_RET_VAL_IF_FAIL(ap_obj, WIFI_ERROR_INVALID_PARAMETER);
803 if (wifi_manager_ap_is_favorite(manager, ap_obj)) {
804 wifi_config_object *config = _find_wifi_config_by_wifi_ap(manager, ap_obj);
806 // Favorite ap's last connection error
807 return config->last_error;
810 // Connection failed ap's last connection error
811 return ap_obj->last_connection_error;
814 void wifi_manager_ap_set_last_connection_error(wifi_ap_object *ap_obj, wifi_error_e error)
816 WIFI_RET_IF_FAIL(ap_obj);
818 ap_obj->last_connection_error = error;
821 gboolean wifi_manager_ap_is_captiveportal(wifi_manager_object *manager, wifi_ap_object *ap_obj)
823 WIFI_RET_VAL_IF_FAIL(manager != NULL, FALSE);
824 WIFI_RET_VAL_IF_FAIL(ap_obj != NULL, FALSE);
826 return ap_obj->is_captiveportal;
829 void wifi_manager_ap_set_captiveportal(wifi_ap_object *ap_obj, gboolean is_captiveportal)
831 WIFI_RET_IF_FAIL(ap_obj != NULL);
833 ap_obj->is_captiveportal = is_captiveportal;
836 wifi_error_e wifi_manager_ap_forget(wifi_ap_object *ap_obj)
839 WIFI_RET_VAL_IF_FAIL(ap_obj != NULL, WIFI_ERROR_INVALID_PARAMETER);
841 err = wifi_forget_ap(ap_obj->ap);
842 if (err != WIFI_ERROR_NONE) {
843 WIFI_LOG_ERR("wifi_forget_ap() is failed. error = %s",
844 wifi_error_to_string(err));
849 gchar *wifi_manager_ap_get_ssid(wifi_ap_object *ap_obj)
852 WIFI_RET_VAL_IF_FAIL(ap_obj, NULL);
854 wifi_error_e err = wifi_ap_get_essid(ap_obj->ap, &ssid);
855 if (err != WIFI_ERROR_NONE) {
856 WIFI_LOG_ERR("wifi_ap_get_essid() is failed. error = %s",
857 wifi_error_to_string(err));
866 gint wifi_manager_ap_get_rssi(wifi_ap_object *ap_obj)
868 WIFI_RET_VAL_IF_FAIL(ap_obj, 0);
873 wifi_manager_ap_signal_strength wifi_manager_ap_get_signal_strength(wifi_ap_object *ap_obj)
875 WIFI_RET_VAL_IF_FAIL(ap_obj, WIFI_MANAGER_SIGNAL_STRENGTH_NULL);
877 /* Wi-Fi Signal Strength Display (dB / ConnMan normalized value)
879 * Excellent : -63 ~ / 57 ~
880 * Good: -74 ~ -64 / 46 ~ 56
881 * Weak: -82 ~ -75 / 38 ~ 45
882 * Very weak: ~ -83 / ~ 37
884 if (ap_obj->rssi >= -63)
885 return WIFI_MANAGER_SIGNAL_STRENGTH_EXCELLENT;
886 else if (ap_obj->rssi >= -74)
887 return WIFI_MANAGER_SIGNAL_STRENGTH_GOOD;
888 else if (ap_obj->rssi >= -82)
889 return WIFI_MANAGER_SIGNAL_STRENGTH_WEAK;
890 else if (ap_obj->rssi >= -92)
891 return WIFI_MANAGER_SIGNAL_STRENGTH_VERY_WEAK;
893 return WIFI_MANAGER_SIGNAL_STRENGTH_NULL;
896 gint wifi_manager_ap_get_max_speed(wifi_ap_object *ap_obj)
899 WIFI_RET_VAL_IF_FAIL(ap_obj, 0);
901 wifi_error_e err = wifi_ap_get_max_speed(ap_obj->ap, &max_speed);
902 if (err != WIFI_ERROR_NONE) {
903 WIFI_LOG_ERR("wifi_ap_get_max_speed() is failed. error = %s",
904 wifi_error_to_string(err));
910 void wifi_manager_ap_set_password(wifi_ap_object *ap_obj, const gchar *password)
913 WIFI_RET_IF_FAIL(ap_obj);
915 err = wifi_ap_set_passphrase(ap_obj->ap, password);
916 if (err != WIFI_ERROR_NONE) {
917 WIFI_LOG_ERR("wifi_ap_set_passphrase() is failed. error = %s",
918 wifi_error_to_string(err));
922 wifi_eap_type_e wifi_manager_ap_get_eap_type(wifi_ap_object *ap_obj)
924 wifi_eap_type_e eap_type = WIFI_EAP_TYPE_AKA;
926 WIFI_RET_VAL_IF_FAIL(ap_obj, eap_type);
928 err = wifi_ap_get_eap_type(ap_obj->ap, &eap_type);
929 if (err != WIFI_ERROR_NONE) {
930 WIFI_LOG_ERR("wifi_ap_get_eap_type() is failed. error = %s",
931 wifi_error_to_string(err));
936 void wifi_manager_ap_set_eap_type(wifi_ap_object *ap_obj, wifi_eap_type_e type)
939 WIFI_RET_IF_FAIL(ap_obj);
941 err = wifi_ap_set_eap_type(ap_obj->ap, type);
942 if (err != WIFI_ERROR_NONE) {
943 WIFI_LOG_ERR("wifi_ap_set_eap_type() is failed. error = %s",
944 wifi_error_to_string(err));
948 wifi_security_type_e wifi_manager_ap_get_security_type(wifi_ap_object *ap_obj)
950 wifi_security_type_e sec_type = WIFI_SECURITY_TYPE_NONE;
952 WIFI_RET_VAL_IF_FAIL(ap_obj, sec_type);
954 err = wifi_ap_get_security_type(ap_obj->ap, &sec_type);
955 if (err != WIFI_ERROR_NONE) {
956 WIFI_LOG_ERR("wifi_ap_get_security_type() is failed. error = %s",
957 wifi_error_to_string(err));
962 gchar *wifi_manager_ap_get_security_type_text(wifi_ap_object *ap_obj)
964 switch (wifi_manager_ap_get_security_type(ap_obj)) {
965 case WIFI_SECURITY_TYPE_NONE:
966 return g_strdup(STR_OPEN);
968 case WIFI_SECURITY_TYPE_WEP:
969 case WIFI_SECURITY_TYPE_WPA_PSK:
970 case WIFI_SECURITY_TYPE_WPA2_PSK:
971 return g_strdup(STR_SECURED);
973 case WIFI_SECURITY_TYPE_EAP:
974 return g_strdup(STR_SECURED_EAP);
976 #if defined TIZEN_WLAN_CHINA_WAPI
977 case WIFI_SECURITY_TYPE_WAPI_PSK:
978 return g_strdup(STR_WAPI_PSK);
980 case WIFI_SECURITY_TYPE_WAPI_CERT:
981 return g_strdup(STR_WAPI_CERT);
988 wifi_connection_state_e wifi_manager_ap_get_connection_state(wifi_ap_object *ap_obj)
990 wifi_connection_state_e conn_state = WIFI_CONNECTION_STATE_FAILURE;
992 WIFI_RET_VAL_IF_FAIL(ap_obj, WIFI_CONNECTION_STATE_FAILURE);
993 err = wifi_ap_get_connection_state(ap_obj->ap, &conn_state);
994 if (err != WIFI_ERROR_NONE) {
995 WIFI_LOG_ERR("wifi_ap_get_connection_state() is failed. error = %s",
996 wifi_error_to_string(err));
1001 gchar *wifi_manager_ap_get_ip_address(wifi_ap_object *ap_obj)
1003 gchar *ip_address = NULL;
1004 WIFI_RET_VAL_IF_FAIL(ap_obj, NULL);
1006 wifi_error_e err = wifi_ap_get_ip_address(ap_obj->ap,
1007 WIFI_ADDRESS_FAMILY_IPV4, &ip_address);
1008 if (err != WIFI_ERROR_NONE) {
1009 WIFI_LOG_ERR("wifi_ap_get_ip_address() is failed. error = %s",
1010 wifi_error_to_string(err));
1019 void wifi_manager_ap_set_ip_address(wifi_ap_object *ap_obj, const gchar *ip_address)
1022 WIFI_RET_IF_FAIL(ap_obj);
1024 err = wifi_ap_set_ip_address(ap_obj->ap, WIFI_ADDRESS_FAMILY_IPV4, ip_address);
1025 if (err != WIFI_ERROR_NONE) {
1026 WIFI_LOG_ERR("wifi_ap_set_ip_address() is failed. error = %s",
1027 wifi_error_to_string(err));
1031 gchar *wifi_manager_ap_get_gateway_address(wifi_ap_object *ap_obj)
1033 gchar *gateway = NULL;
1034 WIFI_RET_VAL_IF_FAIL(ap_obj, NULL);
1036 wifi_error_e err = wifi_ap_get_gateway_address(ap_obj->ap,
1037 WIFI_ADDRESS_FAMILY_IPV4, &gateway);
1038 if (err != WIFI_ERROR_NONE) {
1039 WIFI_LOG_ERR("wifi_ap_get_gateway_address() is failed. error = %s",
1040 wifi_error_to_string(err));
1049 void wifi_manager_ap_set_gateway_address(wifi_ap_object *ap_obj, const gchar *gateway_address)
1052 WIFI_RET_IF_FAIL(ap_obj);
1054 err = wifi_ap_set_gateway_address(ap_obj->ap, WIFI_ADDRESS_FAMILY_IPV4, gateway_address);
1055 if (err != WIFI_ERROR_NONE) {
1056 WIFI_LOG_ERR("wifi_ap_set_gateway_address() is failed. error = %s",
1057 wifi_error_to_string(err));
1061 gchar *wifi_manager_ap_get_subnet_mask(wifi_ap_object *ap_obj)
1063 gchar *subnet_mask = NULL;
1064 WIFI_RET_VAL_IF_FAIL(ap_obj, NULL);
1066 wifi_error_e err = wifi_ap_get_subnet_mask(ap_obj->ap,
1067 WIFI_ADDRESS_FAMILY_IPV4, &subnet_mask);
1068 if (err != WIFI_ERROR_NONE) {
1069 WIFI_LOG_ERR("wifi_ap_get_subnet_mask() is failed. error = %s",
1070 wifi_error_to_string(err));
1072 g_free(subnet_mask);
1079 void wifi_manager_ap_set_subnet_mask(wifi_ap_object *ap_obj, const gchar *subnet_mask)
1082 WIFI_RET_IF_FAIL(ap_obj);
1084 err = wifi_ap_set_subnet_mask(ap_obj->ap, WIFI_ADDRESS_FAMILY_IPV4, subnet_mask);
1085 if (err != WIFI_ERROR_NONE) {
1086 WIFI_LOG_ERR("wifi_ap_set_subnet_mask() is failed. error = %s",
1087 wifi_error_to_string(err));
1091 gchar *wifi_manager_ap_get_dns_address(wifi_ap_object *ap_obj, gint order)
1093 gchar *dns_address = NULL;
1094 WIFI_RET_VAL_IF_FAIL(ap_obj, NULL);
1096 wifi_error_e err = wifi_ap_get_dns_address(ap_obj->ap,
1097 order, WIFI_ADDRESS_FAMILY_IPV4, &dns_address);
1098 if (err != WIFI_ERROR_NONE) {
1099 WIFI_LOG_ERR("wifi_ap_get_dns_address() is failed. error = %s",
1100 wifi_error_to_string(err));
1102 g_free(dns_address);
1109 void wifi_manager_ap_set_dns_address(wifi_ap_object *ap_obj, const gchar *dns_address, gint order)
1112 WIFI_RET_IF_FAIL(ap_obj);
1114 err = wifi_ap_set_dns_address(ap_obj->ap, order, WIFI_ADDRESS_FAMILY_IPV4, dns_address);
1115 if (err != WIFI_ERROR_NONE) {
1116 WIFI_LOG_ERR("wifi_ap_set_dns_address() is failed. error = %s",
1117 wifi_error_to_string(err));
1121 wifi_ip_config_type_e wifi_manager_ap_get_ip_config(wifi_ap_object *ap_obj)
1123 wifi_ip_config_type_e config_type = WIFI_IP_CONFIG_TYPE_NONE;
1125 WIFI_RET_VAL_IF_FAIL(ap_obj, WIFI_IP_CONFIG_TYPE_NONE);
1127 err = wifi_ap_get_ip_config_type(ap_obj->ap,
1128 WIFI_ADDRESS_FAMILY_IPV4, &config_type);
1129 if (err != WIFI_ERROR_NONE) {
1130 WIFI_LOG_ERR("wifi_ap_get_ip_config_type() is failed. error = %s",
1131 wifi_error_to_string(err));
1136 void wifi_manager_ap_set_ip_config(wifi_ap_object *ap_obj, wifi_ip_config_type_e config_type)
1139 WIFI_RET_IF_FAIL(ap_obj);
1140 err = wifi_ap_set_ip_config_type(ap_obj->ap,
1141 WIFI_ADDRESS_FAMILY_IPV4, config_type);
1142 if (err != WIFI_ERROR_NONE) {
1143 WIFI_LOG_ERR("wifi_ap_set_ip_config_type() is failed. error = %s",
1144 wifi_error_to_string(err));
1148 bool wifi_manager_ap_is_ip_config_static(wifi_ap_object *ap_obj)
1150 return wifi_manager_ap_get_ip_config(ap_obj) == WIFI_IP_CONFIG_TYPE_STATIC;
1153 void wifi_manager_ap_set_ip_config_static(wifi_ap_object *ap_obj)
1155 wifi_manager_ap_set_ip_config(ap_obj, WIFI_IP_CONFIG_TYPE_STATIC);
1158 wifi_proxy_type_e wifi_manager_ap_get_proxy_type(wifi_ap_object *ap_obj)
1160 wifi_proxy_type_e proxy_type = WIFI_PROXY_TYPE_AUTO;
1162 WIFI_RET_VAL_IF_FAIL(ap_obj, WIFI_PROXY_TYPE_AUTO);
1164 err = wifi_ap_get_proxy_type(ap_obj->ap, &proxy_type);
1165 if (err != WIFI_ERROR_NONE) {
1166 WIFI_LOG_ERR("wifi_ap_get_proxy_type() is failed. error = %s",
1167 wifi_error_to_string(err));
1172 void wifi_manager_ap_set_proxy_type(wifi_ap_object *ap_obj, wifi_proxy_type_e proxy_type)
1175 WIFI_RET_IF_FAIL(ap_obj);
1177 err = wifi_ap_set_proxy_type(ap_obj->ap, proxy_type);
1178 if (err != WIFI_ERROR_NONE) {
1179 WIFI_LOG_ERR("wifi_ap_set_proxy_type() is failed. error = %s",
1180 wifi_error_to_string(err));
1184 bool wifi_manager_ap_is_proxy_manual(wifi_ap_object *ap_obj)
1186 return wifi_manager_ap_get_proxy_type(ap_obj) == WIFI_PROXY_TYPE_MANUAL;
1189 void wifi_manager_ap_set_proxy_manual(wifi_ap_object *ap_obj)
1191 wifi_manager_ap_set_proxy_type(ap_obj, WIFI_PROXY_TYPE_MANUAL);
1194 gchar *wifi_manager_ap_get_proxy_address(wifi_ap_object *ap_obj)
1196 gchar *proxy_address = NULL;
1197 char *saveptr = NULL;
1198 WIFI_RET_VAL_IF_FAIL(ap_obj != NULL, NULL);
1200 proxy_address = _ap_get_proxy_address(ap_obj);
1201 if (proxy_address == NULL) {
1202 WIFI_LOG_INFO("Proxy address is NULL.");
1206 return g_strdup(strtok_r(proxy_address, ":", &saveptr));
1209 gchar *wifi_manager_ap_get_proxy_port(wifi_ap_object *ap_obj)
1211 gchar *proxy_address = NULL;
1212 char *saveptr = NULL;
1213 WIFI_RET_VAL_IF_FAIL(ap_obj != NULL, NULL);
1215 proxy_address = _ap_get_proxy_address(ap_obj);
1216 if (proxy_address == NULL) {
1217 WIFI_LOG_INFO("Proxy address is NULL.");
1221 strtok_r(proxy_address, ":", &saveptr);
1222 return g_strdup(strtok_r(NULL, ":", &saveptr));
1225 void wifi_manager_ap_set_proxy_address(wifi_ap_object *ap_obj, const gchar *proxy_address)
1228 WIFI_RET_IF_FAIL(ap_obj);
1230 err = wifi_ap_set_proxy_address(ap_obj->ap, WIFI_ADDRESS_FAMILY_IPV4, proxy_address);
1231 if (err != WIFI_ERROR_NONE) {
1232 WIFI_LOG_ERR("wifi_ap_set_proxy_type() is failed. error = %s",
1233 wifi_error_to_string(err));
1237 bool wifi_manager_ap_is_wps_mode(wifi_ap_object *ap_obj)
1239 return ap_obj->wps_mode;
1242 bool wifi_manager_ap_is_favorite(wifi_manager_object *manager, wifi_ap_object *ap_obj)
1244 bool is_favorite = false;
1246 WIFI_RET_VAL_IF_FAIL(ap_obj != NULL, false);
1248 err = wifi_ap_is_favorite(ap_obj->ap, &is_favorite);
1249 if (err != WIFI_ERROR_NONE) {
1250 WIFI_LOG_ERR("wifi_ap_is_favorite() is failed. error = %d", err);
1255 gboolean wifi_manager_ap_has_configuration(wifi_manager_object *manager,
1256 wifi_ap_object *ap_obj)
1258 WIFI_RET_VAL_IF_FAIL(manager != NULL, FALSE);
1259 WIFI_RET_VAL_IF_FAIL(ap_obj != NULL, FALSE);
1261 if (_find_wifi_config_by_wifi_ap(manager, ap_obj) == NULL) {
1262 WIFI_LOG_INFO("AP config profile not found.");
1265 WIFI_LOG_INFO("AP has config profile.");
1269 wifi_error_e wifi_manager_ap_remove_configuration(wifi_manager_object *manager,
1270 wifi_ap_object *ap_obj)
1272 wifi_config_object *config;
1273 wifi_error_e error = WIFI_ERROR_NONE;
1274 WIFI_RET_VAL_IF_FAIL(manager != NULL, WIFI_ERROR_INVALID_PARAMETER);
1275 WIFI_RET_VAL_IF_FAIL(ap_obj != NULL, WIFI_ERROR_INVALID_PARAMETER);
1277 config = _find_wifi_config_by_wifi_ap(manager, ap_obj);
1278 WIFI_RET_VAL_IF_FAIL(config != NULL, WIFI_ERROR_INVALID_OPERATION);
1280 _update_wifi_config_list(manager);
1284 wifi_error_e wifi_manager_update_wifi_config_list(wifi_manager_object *manager)
1286 wifi_error_e error = WIFI_ERROR_NONE;
1288 WIFI_RET_VAL_IF_FAIL(manager != NULL, WIFI_ERROR_INVALID_PARAMETER);
1290 _update_wifi_config_list(manager);
1296 * Wearable connection API (weconn feature)
1299 gboolean wifi_manager_set_wifi_use(wifi_manager_object *manager, gboolean is_wifi_use)
1301 WIFI_RET_VAL_IF_FAIL(manager, FALSE);
1302 return vconf_set_wifi_use(is_wifi_use ? 1 : 0);
1305 gboolean wifi_manager_is_wifi_use(wifi_manager_object *manager)
1307 WIFI_RET_VAL_IF_FAIL(manager, FALSE);
1308 return vconf_is_wifi_use();
1311 gboolean wifi_manager_set_wifi_use_changed_cb(wifi_manager_object *manager,
1312 vconf_callback_fn callback, void *data)
1314 WIFI_RET_VAL_IF_FAIL(manager, FALSE);
1315 WIFI_LOG_INFO("VCONF_WIFI_USE - notify wifi key changed");
1316 return vconf_notify_wifi_key_changed(callback, data);