2 * Copyright (c) 2011 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 <glib-object.h>
23 #include <sys/socket.h>
24 #include <netinet/in.h>
25 #include <arpa/inet.h>
29 #include "tethering.h"
31 #define DISABLE_REASON_TEXT_LEN 64
32 #define COMMON_STR_BUF_LEN 32
34 gboolean test_thread(GIOChannel *source, GIOCondition condition, gpointer data);
37 tethering_enabled_cb enabled_cb;
38 tethering_disabled_cb disabled_cb;
39 tethering_connection_state_changed_cb changed_cb;
40 tethering_wifi_security_type_changed_cb security_type_changed_cb;
41 tethering_wifi_ssid_visibility_changed_cb ssid_visibility_changed_cb;
42 tethering_wifi_passphrase_changed_cb passphrase_changed_cb;
45 tethering_h th = NULL;
47 static bool __is_err(tethering_error_e ret)
52 case TETHERING_ERROR_INVALID_PARAMETER:
53 err_msg = "Wrong parameter is used";
56 case TETHERING_ERROR_OUT_OF_MEMORY:
57 err_msg = "Memory is not enough";
60 case TETHERING_ERROR_NONE:
63 case TETHERING_ERROR_NOT_ENABLED:
64 err_msg = "Tethering is not enabled";
67 case TETHERING_ERROR_OPERATION_FAILED:
68 err_msg = "Operation is failed";
71 case TETHERING_ERROR_RESOURCE_BUSY:
72 err_msg = "Resource is busy";
76 err_msg = "This should not be happened";
80 g_print("##ERR: %s\n", err_msg);
85 static const char *__convert_tethering_type_to_str(const tethering_type_e type)
87 static char str_buf[COMMON_STR_BUF_LEN] = {0, };
90 case TETHERING_TYPE_USB:
91 g_strlcpy(str_buf, "USB Tethering", sizeof(str_buf));
94 case TETHERING_TYPE_WIFI:
95 g_strlcpy(str_buf, "Wi-Fi Tethering", sizeof(str_buf));
98 case TETHERING_TYPE_BT:
99 g_strlcpy(str_buf, "Bluetooth Tethering", sizeof(str_buf));
103 g_strlcpy(str_buf, "Unknown", sizeof(str_buf));
110 static const char *__convert_disabled_code_to_str(const tethering_disabled_cause_e code)
112 static char str_buf[DISABLE_REASON_TEXT_LEN] = {0, };
115 case TETHERING_DISABLED_BY_USB_DISCONNECTION:
116 strncpy(str_buf, "disabled due to usb disconnection", sizeof(str_buf));
119 case TETHERING_DISABLED_BY_FLIGHT_MODE:
120 strncpy(str_buf, "disabled due to flight mode on", sizeof(str_buf));
123 case TETHERING_DISABLED_BY_LOW_BATTERY:
124 strncpy(str_buf, "disabled due to low battery", sizeof(str_buf));
127 case TETHERING_DISABLED_BY_NETWORK_CLOSE:
128 strncpy(str_buf, "disabled due to pdp network close", sizeof(str_buf));
131 case TETHERING_DISABLED_BY_TIMEOUT:
132 strncpy(str_buf, "disabled due to timeout", sizeof(str_buf));
135 case TETHERING_DISABLED_BY_OTHERS:
136 strncpy(str_buf, "disabled by other apps", sizeof(str_buf));
139 case TETHERING_DISABLED_BY_REQUEST:
140 strncpy(str_buf, "disabled by my request", sizeof(str_buf));
143 case TETHERING_DISABLED_BY_WIFI_ON:
144 strncpy(str_buf, "disabled by Wi-Fi station on", sizeof(str_buf));
147 case TETHERING_DISABLED_BY_BT_OFF:
148 strncpy(str_buf, "disabled by bluetooth off", sizeof(str_buf));
152 strncpy(str_buf, "disabled by unknown reason", sizeof(str_buf));
159 static void __register_cbs(tethering_h th, __tethering_cbs *cbs, void *user_data)
161 tethering_error_e ret = TETHERING_ERROR_NONE;
163 ret = tethering_set_enabled_cb(th, TETHERING_TYPE_ALL,
164 cbs->enabled_cb, user_data);
165 if (__is_err(ret) == true)
166 g_print("tethering_set_enabled_cb is failed\n");
168 ret = tethering_set_disabled_cb(th, TETHERING_TYPE_ALL,
169 cbs->disabled_cb, user_data);
170 if (__is_err(ret) == true)
171 g_print("tethering_set_disabled_cb is failed\n");
173 ret = tethering_set_connection_state_changed_cb(th, TETHERING_TYPE_ALL,
174 cbs->changed_cb, user_data);
175 if (__is_err(ret) == true)
176 g_print("tethering_set_connection_state_changed_cb is failed\n");
178 ret = tethering_wifi_set_security_type_changed_cb(th,
179 cbs->security_type_changed_cb, user_data);
180 if (__is_err(ret) == true)
181 g_print("tethering_wifi_set_security_type_changed_cb is failed\n");
183 ret = tethering_wifi_set_ssid_visibility_changed_cb(th,
184 cbs->ssid_visibility_changed_cb, user_data);
185 if (__is_err(ret) == true)
186 g_print("tethering_wifi_set_ssid_visibility_changed_cb is failed\n");
188 ret = tethering_wifi_set_passphrase_changed_cb(th,
189 cbs->passphrase_changed_cb, user_data);
190 if (__is_err(ret) == true)
191 g_print("tethering_wifi_set_passphrase_changed_cb is failed\n");
196 static void __deregister_cbs(tethering_h th)
198 tethering_error_e ret = TETHERING_ERROR_NONE;
200 ret = tethering_unset_enabled_cb(th, TETHERING_TYPE_ALL);
201 if (__is_err(ret) == true)
202 g_print("tethering_unset_enabled_cb is failed\n");
204 ret = tethering_unset_disabled_cb(th, TETHERING_TYPE_ALL);
205 if (__is_err(ret) == true)
206 g_print("tethering_unset_disabled_cb is failed\n");
208 ret = tethering_unset_connection_state_changed_cb(th, TETHERING_TYPE_ALL);
209 if (__is_err(ret) == true)
210 g_print("tethering_unset_connection_state_changed_cb is failed\n");
212 ret = tethering_wifi_unset_security_type_changed_cb(th);
213 if (__is_err(ret) == true)
214 g_print("tethering_wifi_unset_security_type_changed_cb is failed\n");
216 ret = tethering_wifi_unset_ssid_visibility_changed_cb(th);
217 if (__is_err(ret) == true)
218 g_print("tethering_wifi_unset_ssid_visibility_changed_cb is failed\n");
220 ret = tethering_wifi_unset_passphrase_changed_cb(th);
221 if (__is_err(ret) == true)
222 g_print("tethering_wifi_unset_passphrase_changed_cb is failed\n");
227 /* Tethering callbacks */
228 static void __enabled_cb(tethering_error_e error, tethering_type_e type, bool is_requested, void *data)
230 if (__is_err(error)) {
234 g_print("## %s is not enabled. error code[0x%X]\n",
235 __convert_tethering_type_to_str(type),
241 g_print("## %s is enabled successfully\n",
242 __convert_tethering_type_to_str(type));
244 g_print("## %s is enabled by other app\n",
245 __convert_tethering_type_to_str(type));
250 static void __disabled_cb(tethering_error_e error, tethering_type_e type, tethering_disabled_cause_e code, void *data)
252 if (__is_err(error)) {
253 if (code != TETHERING_DISABLED_BY_REQUEST)
256 g_print("## %s is not disabled. error code[0x%X]\n",
257 __convert_tethering_type_to_str(type), error);
261 g_print("## %s is %s\n",
262 __convert_tethering_type_to_str(type),
263 __convert_disabled_code_to_str(code));
268 static void __connection_state_changed_cb(tethering_client_h client, bool open, void *data)
270 tethering_client_h clone = NULL;
271 tethering_type_e type;
272 char *ip_address = NULL;
273 char *mac_address = NULL;
274 char *hostname = NULL;
276 tethering_client_clone(&clone, client);
278 g_print("tetheirng_client_clone is failed\n");
282 tethering_client_get_tethering_type(clone, &type);
283 tethering_client_get_ip_address(clone,
284 TETHERING_ADDRESS_FAMILY_IPV4, &ip_address);
285 tethering_client_get_mac_address(clone, &mac_address);
286 tethering_client_get_name(clone, &hostname);
289 g_print("## New station Type [%s], IP [%s], MAC [%s], hostname [%s]\n",
290 __convert_tethering_type_to_str(type),
291 ip_address, mac_address, hostname);
293 g_print("## Disconnected station Type [%s], IP [%s], MAC [%s], hostname [%s]\n",
294 __convert_tethering_type_to_str(type),
295 ip_address, mac_address, hostname);
305 tethering_client_destroy(clone);
310 static void __data_usage_cb(tethering_error_e result, unsigned long long received_data,
311 unsigned long long sent_data, void *user_data)
313 g_print("__data_usage_cb\n");
315 if (result != TETHERING_ERROR_NONE) {
316 g_print("tethering_get_data_usage is failed. error[0x%X]\n", result);
320 g_print("## Received data : %llu bytes\n", received_data);
321 g_print("## Sent data : %llu bytes\n", sent_data);
326 static void __settings_reloaded_cb(tethering_error_e result, void *user_data)
328 g_print("__settings_reloaded_cb\n");
330 if (result != TETHERING_ERROR_NONE) {
331 g_print("tethering_wifi_reload_settings is failed. error[0x%X]\n", result);
335 g_print("## Wi-Fi tethering setting is reloaded\n");
340 static bool __clients_foreach_cb(tethering_client_h client, void *data)
342 tethering_client_h clone = NULL;
343 tethering_type_e type;
344 char *ip_address = NULL;
345 char *mac_address = NULL;
346 char *hostname = NULL;
348 /* Clone internal information */
349 if (tethering_client_clone(&clone, client) != TETHERING_ERROR_NONE) {
350 g_print("tethering_client_clone is failed\n");
354 /* Get information */
355 if (tethering_client_get_tethering_type(clone, &type) != TETHERING_ERROR_NONE)
356 g_print("tethering_client_get_type is failed\n");
358 if (tethering_client_get_ip_address(clone, TETHERING_ADDRESS_FAMILY_IPV4, &ip_address) != TETHERING_ERROR_NONE)
359 g_print("tethering_client_get_ip_address is failed\n");
361 if (tethering_client_get_mac_address(clone, &mac_address) != TETHERING_ERROR_NONE)
362 g_print("tethering_client_get_mac_address is failed\n");
364 if (tethering_client_get_name(clone, &hostname) != TETHERING_ERROR_NONE)
365 g_print("tethering_client_get_hostname is failed\n");
367 /* End of getting information */
369 g_print("\n< Client Info. >\n");
370 g_print("\tType %s\n", __convert_tethering_type_to_str(type));
371 g_print("\tIP Address %s\n", ip_address);
372 g_print("\tMAC Address : %s\n", mac_address);
373 g_print("\tHostname : %s\n", hostname);
375 /* Destroy cloned objects */
383 tethering_client_destroy(clone);
385 /* Continue iteration */
389 static void __security_type_changed_cb(tethering_wifi_security_type_e changed_type, void *user_data)
391 g_print("Wi-Fi Tethering Security type is changed to [%s]\n",
392 changed_type == TETHERING_WIFI_SECURITY_TYPE_NONE ?
393 "open" : "wpa2-psk");
397 static void __ssid_visibility_changed_cb(bool changed_visible, void *user_data)
399 g_print("SSID visibility for Wi-Fi tethering changed to [%s]\n",
400 changed_visible ? "visible" : "invisible");
404 static void __passphrase_changed_cb(void *user_data)
406 g_print("Wi-Fi Tethering passphrase is changed\n");
409 /* End of tethering callbacks */
411 static void __print_interface_info(tethering_h th, tethering_type_e type)
413 char *interface = NULL;
414 char *mac_address = NULL;
415 char *ip_address = NULL;
416 char *gateway_address = NULL;
417 char *subnet_mask = NULL;
419 if (tethering_is_enabled(th, type) == FALSE) {
420 g_print("%s is not enabled\n",
421 __convert_tethering_type_to_str(type));
425 tethering_get_network_interface_name(th, type, &interface);
426 tethering_get_mac_address(th, type, &mac_address);
427 tethering_get_ip_address(th, type, TETHERING_ADDRESS_FAMILY_IPV4,
429 tethering_get_gateway_address(th, type, TETHERING_ADDRESS_FAMILY_IPV4,
431 tethering_get_subnet_mask(th, type, TETHERING_ADDRESS_FAMILY_IPV4,
434 g_print("interface name : %s\n", interface);
435 g_print("mac address : %s\n", mac_address);
436 g_print("ip address : %s\n", ip_address);
437 g_print("gateway address: %s\n", gateway_address);
438 g_print("subnet mask : %s\n", subnet_mask);
447 free(gateway_address);
454 static void __print_wifi_tethering_setting(tethering_h th)
457 char *passphrase = NULL;
458 bool visibility = false;
460 bool forwarding_enabled = false;
461 bool filtering_enabled = false;
463 int max_connected = 0;
464 tethering_wifi_security_type_e security_type = TETHERING_WIFI_SECURITY_TYPE_NONE;
465 tethering_wifi_mode_type_e hw_mode = TETHERING_WIFI_MODE_TYPE_G;
467 int error = TETHERING_ERROR_NONE;
469 error = tethering_wifi_get_ssid(th, &ssid);
470 if (error != TETHERING_ERROR_NONE)
473 g_print("\n\t** WiFi tethering SSID : %s\n", ssid);
475 error = tethering_wifi_get_passphrase(th, &passphrase);
476 if (error != TETHERING_ERROR_NONE)
479 g_print("\t** WiFi tethering passphrase : %s\n", passphrase);
481 error = tethering_wifi_get_ssid_visibility(th, &visibility);
482 if (error != TETHERING_ERROR_NONE)
485 g_print("\t** WiFi tethering ssid visibility : %s\n",
486 visibility ? "visible" : "invisible");
488 error = tethering_wifi_get_security_type(th, &security_type);
489 if (error != TETHERING_ERROR_NONE)
492 g_print("\t** WiFi tethering security_type : %s\n",
494 TETHERING_WIFI_SECURITY_TYPE_NONE ?
495 "open" : "wpa2-psk");
497 error = tethering_wifi_get_mode(th, &hw_mode);
498 if (error != TETHERING_ERROR_NONE)
501 g_print("\t** WiFi tethering mode : %d\n", hw_mode);
503 error = tethering_wifi_get_channel(th, &channel);
504 if (error != TETHERING_ERROR_NONE)
507 g_print("\t** WiFi tethering channel : %d\n", channel);
509 error = tethering_wifi_get_max_connected_device(th, &max_connected);
510 if (error != TETHERING_ERROR_NONE)
513 g_print("\t** WiFi tethering max connected device : %d\n", max_connected);
515 error = tethering_wifi_get_mac_filter(th, &mac_filter);
516 if (error != TETHERING_ERROR_NONE)
519 g_print("\t** WiFi tethering mac filter : %s\n",
520 mac_filter ? "enable" : "disable");
522 error = tethering_wifi_is_port_filtering_enabled(th, &filtering_enabled);
523 if (error != TETHERING_ERROR_NONE)
526 g_print("\t** WiFi tethering port filtering : %s\n",
527 filtering_enabled ? "enable" : "disable");
529 error = tethering_wifi_is_port_forwarding_enabled(th, &forwarding_enabled);
530 if (error != TETHERING_ERROR_NONE)
533 g_print("\t** WiFi tethering port forwarding : %s\n",
534 forwarding_enabled ? "enable" : "disable");
544 void __display_list(GSList *list)
546 GSList *iterator = NULL;
548 for (iterator = list; iterator; iterator = iterator->next)
549 printf("%s\n", (char*)iterator->data);
552 bool __get_tethering_type(tethering_type_e *type)
557 printf("Select tethering type (1:Wi-Fi, 2:BT, 3:USB 4:ALL)\n");
558 ret = scanf("%9d", &sel);
560 printf("scanf is failed!!\n");
566 *type = TETHERING_TYPE_WIFI;
569 *type = TETHERING_TYPE_BT;
572 *type = TETHERING_TYPE_USB;
575 *type = TETHERING_TYPE_ALL;
578 printf("Invalid input!!\n");
585 static int test_tethering_create(void)
587 int ret = tethering_create(&th);
588 __tethering_cbs cbs = {
589 __enabled_cb, __disabled_cb,
590 __connection_state_changed_cb, __security_type_changed_cb,
591 __ssid_visibility_changed_cb, __passphrase_changed_cb};
593 if (__is_err(ret) == false) __register_cbs(th, &cbs, NULL);
595 printf("Tethering create is failed\n");
598 printf("Tethering create and register callback success\n");
603 static int test_tethering_destroy(void)
605 int ret = TETHERING_ERROR_NONE;
607 __deregister_cbs(th);
609 ret = tethering_destroy(th);
610 if (__is_err(ret) == true) {
611 printf("Tethering destroy is failed\n");
618 static int test_tethering_enable(void)
620 int ret = TETHERING_ERROR_NONE;
621 tethering_type_e type;
623 if (!__get_tethering_type(&type))
626 ret = tethering_enable(th, type);
627 if (__is_err(ret) == true) {
628 printf("Fail to enable tethering\n");
634 static int test_tethering_disable(void)
636 int ret = TETHERING_ERROR_NONE;
637 tethering_type_e type;
639 if (!__get_tethering_type(&type))
642 ret = tethering_disable(th, type);
643 if (__is_err(ret) == true) {
644 printf("Fail to disable tethering\n");
650 static int test_tethering_get_client_info(void)
653 tethering_type_e type;
655 if (!__get_tethering_type(&type))
658 ret = tethering_foreach_connected_clients(th, type,
659 __clients_foreach_cb, NULL);
660 if (__is_err(ret) == true) {
661 printf("Fail to disable tethering\n");
668 static int test_tethering_get_interface_info(void)
670 tethering_type_e type;
672 if (!__get_tethering_type(&type))
675 __print_interface_info(th, type);
680 static int test_tethering_get_data_usage(void)
682 int ret = tethering_get_data_usage(th, __data_usage_cb, NULL);
684 if (__is_err(ret) == true) {
685 printf("Fail to get data usage!!\n");
692 static int test_tethering_wifi_get_setting(void)
694 __print_wifi_tethering_setting(th);
698 static int test_tethering_wifi_set_ssid(void)
703 printf("Input SSID for Wi-Fi tethering: ");
704 ret = scanf("%99s", ssid);
706 printf("scanf is failed!!\n");
710 ret = tethering_wifi_set_ssid(th, ssid);
711 if (__is_err(ret) == true) {
712 printf("Fail to set wifi ssid!!\n");
719 static int test_tethering_wifi_set_security_type(void)
724 printf("Input security type for Wi-Fi tethering (0:NONE, 1:WPA2_PSK)");
725 ret = scanf("%9d", &security_type);
727 printf("scanf is failed!!\n");
731 ret = tethering_wifi_set_security_type(th, security_type);
732 if (__is_err(ret) == true) {
733 printf("Fail to set security type!!\n");
740 int test_tethering_wifi_set_visibility(void)
745 printf("Input security type for Wi-Fi tethering (0:invisible, 1:visible)");
746 ret = scanf("%9d", &visibility);
748 printf("scanf is failed!!\n");
752 ret = tethering_wifi_set_ssid_visibility(th, visibility);
753 if (__is_err(ret) == true) {
754 printf("Fail to set visibility!!\n");
761 static int test_tethering_wifi_set_passphrase(void)
764 char passphrase[100];
766 printf("Input passphrase for Wi-Fi tethering: ");
767 ret = scanf("%99s", passphrase);
769 printf("scanf is failed!!\n");
773 ret = tethering_wifi_set_passphrase(th, passphrase);
774 if (__is_err(ret) == true) {
775 printf("Fail to set passphrase!!\n");
782 static int test_tethering_wifi_set_channel(void)
787 printf("Input channel for Wi-Fi tethering: ");
788 ret = scanf("%d", &channel);
790 ret = tethering_wifi_set_channel(th, channel);
791 if (__is_err(ret) == true) {
792 printf("Fail to set channel!!\n");
799 static int test_tethering_wifi_set_mode(void)
804 printf("Input hw_mode for Wi-Fi tethering(0-b, 1-g, 2-a, 3-ad): ");
805 ret = scanf("%d", &type);
807 ret = tethering_wifi_set_mode(th, type);
808 if (__is_err(ret) == true) {
809 printf("Fail to set mode!!\n");
816 static int test_tethering_wifi_enable_dhcp(void)
821 printf("Input (0-Disable, 1-Enable): ");
822 ret = scanf("%d", &enable);
824 ret = tethering_wifi_enable_dhcp(th, enable);
825 if (__is_err(ret) == true) {
826 printf("Fail to enable dhcp server!!\n");
833 static int test_tethering_wifi_set_dhcp_range(void)
836 char rangestart[16], rangestop[16];
838 printf("Input range (ex: 192.168.0.50 192.168.0.150): ");
840 ret = scanf("%15s %15s", rangestart, rangestop);
842 ret = tethering_wifi_set_dhcp_range(th, rangestart, rangestop);
843 if (__is_err(ret) == true) {
844 printf("Fail to set dhcp range and enable dhcp server!!\n");
851 static int test_tethering_wifi_is_dhcp_enabled(void)
856 ret = tethering_wifi_is_dhcp_enabled(th, &enabled);
858 if (__is_err(ret) == true) {
859 printf("Fail to get dhcp server status!!\n");
862 printf("DHCP server is %s\n", enabled ? "enabled" : "disabled");
868 static int test_tethering_wifi_set_mac_filtering(void)
873 printf("Input mac filtering option (0: disable, 1: enable): ");
874 ret = scanf("%d", &enable);
876 ret = tethering_wifi_set_mac_filter(th, enable);
877 if (__is_err(ret) == true) {
878 printf("Fail to set mac filtering!!\n");
885 static int test_tethering_manage_mac_list(void)
891 printf("Select MAC list to modify (0: allowed mac list, 1: blocked mac list): ");
892 ret = scanf("%d", &list);
894 printf("Select option (0: Add, 1: Remove): ");
895 ret = scanf("%d", &option);
897 printf("Input MAC Address to add/remove allowed/blocked mac list: ");
898 ret = scanf("%99s", mac);
900 printf("scanf is failed!!\n");
904 if (!list && !option) {
905 /* Add to allowed mac list*/
906 ret = tethering_wifi_add_allowed_mac_list(th, mac);
907 } else if (!list && option) {
908 /* Remove from allowed mac list */
909 ret = tethering_wifi_remove_allowed_mac_list(th, mac);
910 } else if (list && !option) {
911 /* Add to blocked mac list */
912 ret = tethering_wifi_add_blocked_mac_list(th, mac);
913 } else if (list && option) {
914 /* Remove from blocked mac list */
915 ret = tethering_wifi_remove_blocked_mac_list(th, mac);
917 printf("Input failed!!\n");
927 static int test_tethering_get_mac_list(void)
931 void *mac_list = NULL;
933 printf("Select MAC list to get (0: allowed mac list, 1: blocked mac list): ");
934 ret = scanf("%d", &list);
938 ret = tethering_wifi_get_allowed_mac_list(th, &mac_list);
941 ret = tethering_wifi_get_blocked_mac_list(th, &mac_list);
944 printf("Input failed!!\n");
951 __display_list(mac_list);
956 static int test_tethering_wifi_reload_settings(void)
958 int ret = tethering_wifi_reload_settings(th, __settings_reloaded_cb, NULL);
960 if (__is_err(ret) == true) {
961 printf("Fail to reload wifi tethering!!\n");
967 static int test_tethering_wifi_get_txpower(void)
969 int ret = TETHERING_ERROR_NONE;
971 unsigned int txpower = 0;
972 ret = tethering_wifi_get_txpower(th, &txpower);
973 if (__is_err(ret) == true) {
974 printf("Fail to get txpower!!\n");
977 g_print("tethering_hostapd_get_txpower received [%d]\n",txpower);
981 static int test_tethering_wifi_set_txpower(void)
984 unsigned int txpower = 0;
986 printf("Input tx power for Wi-Fi tethering: ");
987 ret = scanf("%d", &txpower);
989 ret = tethering_wifi_set_txpower(th, txpower);
990 if (__is_err(ret) == true) {
991 printf("Fail to set txpower!!\n");
998 static int test_tethering_wifi_set_mtu(void)
1001 unsigned int mtu = 0;
1003 printf("Input mtu for Wi-Fi tethering: ");
1004 ret = scanf("%d", &mtu);
1006 ret = tethering_wifi_set_mtu(th, mtu);
1007 if (__is_err(ret) == true) {
1008 printf("Fail to set mtu!!\n");
1015 static int test_tethering_wifi_change_mac(void)
1020 printf("Input mac address: ");
1021 ret = scanf("%17s", mac);
1023 ret = tethering_wifi_change_mac(th, mac);
1024 if (__is_err(ret) == true) {
1025 printf("Fail to change mac!\n");
1032 static int test_tethering_wifi_set_max_connected_device(void)
1037 printf("Input max connected device: ");
1038 ret = scanf("%d", &max_connected);
1040 ret = tethering_wifi_set_max_connected_device(th, max_connected);
1041 if (__is_err(ret) == true) {
1042 printf("Fail to set max connected device!\n");
1050 static int test_tethering_wifi_enable_port_forwarding(void)
1055 printf("Wi-Fi tethring port forwarding(0:disable 1:enable): ");
1056 ret = scanf("%d", &enable);
1058 ret =tethering_wifi_enable_port_forwarding(th, enable);
1059 if (__is_err(ret) == true) {
1060 printf("Fail to enable port forwarding!\n");
1067 static int test_tethering_wifi_add_port_forwarding_rule(void)
1074 int org_port, final_port;
1076 printf("Input ifname, protocol, original ip/port, final ip/port: ");
1077 ret = scanf("%19s", ifname);
1078 ret = scanf("%19s", proto);
1079 ret = scanf("%15s", org_ip);
1080 ret = scanf("%d", &org_port);
1081 ret = scanf("%15s", final_ip);
1082 ret = scanf("%d", &final_port);
1084 ret = tethering_wifi_add_port_forwarding_rule(th, ifname, proto, org_ip, org_port, final_ip, final_port);
1085 if (__is_err(ret) == true) {
1086 printf("Fail to add port forwarding rule!\n");
1093 static int test_tethering_wifi_reset_port_forwarding_rule(void)
1097 ret = tethering_wifi_reset_port_forwarding_rule(th);
1098 if (__is_err(ret) == true) {
1099 printf("Fail to reset port forwarding rule!\n");
1106 static int test_tethering_wifi_get_port_forwarding_rule(void)
1109 void *pf_list = NULL;
1111 ret = tethering_wifi_get_port_forwarding_rule(th, &pf_list);
1112 if (__is_err(ret) == true) {
1113 printf("Fail to get port forwarding rule!\n");
1117 __display_list(pf_list);
1122 static int test_tethering_wifi_enable_port_filtering(void)
1127 printf("Wi-Fi tethring port filtering(0:disable 1:enable): ");
1128 ret = scanf("%d", &enable);
1130 ret =tethering_wifi_enable_port_filtering(th, enable);
1131 if (__is_err(ret) == true) {
1132 printf("Fail to enable port filtering!\n");
1139 static int test_tethering_wifi_add_port_filtering_rule(void)
1146 printf("Input protocol, port, allow: ");
1147 ret = scanf("%19s", proto);
1148 ret = scanf("%d", &port);
1149 ret = scanf("%d", &allow);
1151 ret = tethering_wifi_add_port_filtering_rule(th, port, proto, allow);
1152 if (__is_err(ret) == true) {
1153 printf("Fail to add port forwarding rule!\n");
1160 static int test_tethering_wifi_add_custom_port_filtering_rule(void)
1167 printf("Input protocol, port1, port2, allow: ");
1168 ret = scanf("%19s", proto);
1169 ret = scanf("%d", &port1);
1170 ret = scanf("%d", &port2);
1171 ret = scanf("%d", &allow);
1173 ret = tethering_wifi_add_custom_port_filtering_rule(th, port1, port2, proto, allow);
1174 if (__is_err(ret) == true) {
1175 printf("Fail to add custom port forwarding rule!\n");
1182 static int test_tethering_wifi_get_port_filtering_rule(void)
1185 void *pf_list = NULL;
1187 ret = tethering_wifi_get_port_filtering_rule(th, &pf_list);
1188 if (__is_err(ret) == true) {
1189 printf("Fail to get port filtering rule!\n");
1193 __display_list(pf_list);
1198 static int test_tethering_wifi_get_custom_port_filtering_rule(void)
1201 void *pf_list = NULL;
1203 ret = tethering_wifi_get_custom_port_filtering_rule(th, &pf_list);
1204 if (__is_err(ret) == true) {
1205 printf("Fail to get port filtering rule!\n");
1209 __display_list(pf_list);
1214 static int test_tethering_wifi_set_vpn_passthrough_rule(void)
1219 printf("Select vpn passthrough type (0:IPSEC 1:PPTP 2:L2TP): ");
1220 ret = scanf("%d", &type);
1222 ret = tethering_wifi_set_vpn_passthrough_rule(th, (tethering_vpn_passthrough_type_e)type, true);
1223 if (__is_err(ret) == true) {
1224 printf("Fail to get port filtering rule!\n");
1231 int main(int argc, char **argv)
1233 GMainLoop *mainloop;
1235 #if !GLIB_CHECK_VERSION(2, 36, 0)
1238 mainloop = g_main_loop_new(NULL, false);
1240 GIOChannel *channel = g_io_channel_unix_new(0);
1241 g_io_add_watch(channel, (G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL), test_thread, NULL);
1242 printf("Test Thread created...\n");
1243 g_main_loop_run(mainloop);
1248 gboolean test_thread(GIOChannel *source, GIOCondition condition, gpointer data)
1253 printf("Event received from stdin\n");
1255 rv = read(0, a, 10);
1257 if (rv <= 0 || a[0] == '0')
1260 if (a[0] == '\n' || a[0] == '\r') {
1261 printf("\n\n Network Connection API Test App\n\n");
1262 printf("Options..\n");
1263 printf("1 - Tethering create and set callbacks\n");
1264 printf("2 - Tethering destroy\n");
1265 printf("3 - Enable Tethering\n");
1266 printf("4 - Disable Tethering\n");
1267 printf("5 - Get client information\n");
1268 printf("6 - Get interface information\n");
1269 printf("7 - Get data usage\n");
1270 printf("8 - Get Wi-Fi tethering setting\n");
1271 printf("a - Set Wi-Fi tethering SSID\n");
1272 printf("b - Set Wi-Fi tethering security type\n");
1273 printf("c - Set Wi-Fi tethering visibility\n");
1274 printf("d - Set Wi-Fi tethering passphrase\n");
1275 printf("e - Set Wi-Fi tethering mac filtering\n");
1276 printf("f - Add/Remove MAC adress to/from allowed/blocked list\n");
1277 printf("g - Get allowed/blocked list\n");
1278 printf("k - Reload Wi-Fi tethering\n");
1279 printf("m - Set Wi-Fi channel\n");
1280 printf("n - Set Wi-Fi hw_mode\n");
1281 printf("o - Enable dhcp server\n");
1282 printf("p - Enable dhcp server with range\n");
1283 printf("q - Is dhcp server enabled?\n");
1284 printf("r - Get Wi-Fi txpower\n");
1285 printf("s - Set Wi-Fi txpower\n");
1286 printf("t - Set Wi-Fi mtu\n");
1287 printf("u - Change mac address\n");
1288 printf("v - Set max connected device(Wi-Fi tethering)\n");
1289 printf("w - Enable port forwarding\n");
1290 printf("x - Add port forwarding rule\n");
1291 printf("y - Reset port forwarding rule\n");
1292 printf("z - Get port forwarding rule\n");
1293 printf("A - Enable port filtering\n");
1294 printf("B - Add port filtering rule\n");
1295 printf("C - Add custom port filtering rule\n");
1296 printf("D - Get port filtering rule\n");
1297 printf("E - Get custom port filtering rule\n");
1298 printf("F - Set vpn passthrough rule\n");
1300 printf("ENTER - Show options menu.......\n");
1305 rv = test_tethering_create();
1308 rv = test_tethering_destroy();
1311 rv = test_tethering_enable();
1314 rv = test_tethering_disable();
1317 rv = test_tethering_get_client_info();
1320 rv = test_tethering_get_interface_info();
1323 rv = test_tethering_get_data_usage();
1326 rv = test_tethering_wifi_get_setting();
1329 rv = test_tethering_wifi_set_ssid();
1332 rv = test_tethering_wifi_set_security_type();
1335 rv = test_tethering_wifi_set_visibility();
1338 rv = test_tethering_wifi_set_passphrase();
1341 rv = test_tethering_wifi_set_mac_filtering();
1344 rv = test_tethering_manage_mac_list();
1347 rv = test_tethering_get_mac_list();
1350 rv = test_tethering_wifi_reload_settings();
1353 rv = test_tethering_wifi_set_channel();
1356 rv = test_tethering_wifi_set_mode();
1359 rv = test_tethering_wifi_enable_dhcp();
1362 rv = test_tethering_wifi_set_dhcp_range();
1365 rv = test_tethering_wifi_is_dhcp_enabled();
1368 rv = test_tethering_wifi_get_txpower();
1371 rv = test_tethering_wifi_set_txpower();
1374 rv = test_tethering_wifi_set_mtu();
1377 rv = test_tethering_wifi_change_mac();
1380 rv = test_tethering_wifi_set_max_connected_device();
1383 rv = test_tethering_wifi_enable_port_forwarding();
1386 rv = test_tethering_wifi_add_port_forwarding_rule();
1389 rv = test_tethering_wifi_reset_port_forwarding_rule();
1392 rv = test_tethering_wifi_get_port_forwarding_rule();
1395 rv = test_tethering_wifi_enable_port_filtering();
1398 rv = test_tethering_wifi_add_port_filtering_rule();
1401 rv = test_tethering_wifi_add_custom_port_filtering_rule();
1404 rv = test_tethering_wifi_get_port_filtering_rule();
1407 rv = test_tethering_wifi_get_custom_port_filtering_rule();
1410 rv = test_tethering_wifi_set_vpn_passthrough_rule();
1415 printf("Operation succeeded!\n");
1417 printf("Operation failed!\n");