static void hostapd_cli_interactive(void) { char *hfile = NULL; char *home; printf("\nInteractive mode\n\n"); #ifdef CONFIG_HOSTAPD_CLI_HISTORY_DIR home = CONFIG_HOSTAPD_CLI_HISTORY_DIR; #else /* CONFIG_HOSTAPD_CLI_HISTORY_DIR */ home = getenv("HOME"); #endif /* CONFIG_HOSTAPD_CLI_HISTORY_DIR */ if (home) { const char *fname = ".hostapd_cli_history"; int hfile_len = os_strlen(home) + 1 + os_strlen(fname) + 1; hfile = os_malloc(hfile_len); if (hfile) os_snprintf(hfile, hfile_len, "%s/%s", home, fname); } eloop_register_signal_terminate(hostapd_cli_eloop_terminate, NULL); edit_init(hostapd_cli_edit_cmd_cb, hostapd_cli_edit_eof_cb, hostapd_cli_edit_completion_cb, NULL, hfile, NULL); eloop_register_timeout(ping_interval, 0, hostapd_cli_ping, NULL, NULL); eloop_run(); cli_txt_list_flush(&stations); edit_deinit(hfile, NULL); os_free(hfile); eloop_cancel_timeout(hostapd_cli_ping, NULL, NULL); }
static void hostapd_cli_interactive(void) { printf("\nInteractive mode\n\n"); eloop_register_signal_terminate(hostapd_cli_eloop_terminate, NULL); edit_init(hostapd_cli_edit_cmd_cb, hostapd_cli_edit_eof_cb, hostapd_cli_edit_completion_cb, NULL, NULL, NULL); eloop_register_timeout(ping_interval, 0, hostapd_cli_ping, NULL, NULL); eloop_run(); cli_txt_list_flush(&stations); edit_deinit(NULL, NULL); eloop_cancel_timeout(hostapd_cli_ping, NULL, NULL); }
static void update_stations(struct wpa_ctrl *ctrl) { char addr[32], cmd[64]; if (!ctrl || !interactive) return; cli_txt_list_flush(&stations); if (wpa_ctrl_command_sta(ctrl, "STA-FIRST", addr, sizeof(addr), 0)) return; do { if (os_strcmp(addr, "") != 0) cli_txt_list_add(&stations, addr); os_snprintf(cmd, sizeof(cmd), "STA-NEXT %s", addr); } while (wpa_ctrl_command_sta(ctrl, cmd, addr, sizeof(addr), 0) == 0); }