]> git.decadent.org.uk Git - ap-utils.git/blob - src/ap-config.c
Imported Upstream version 1.5~pre1
[ap-utils.git] / src / ap-config.c
1 /*
2  *      ap-config.c from Wireless Access Point Utilites for Unix
3  *
4  * Copyright (c) 2002 Roman Festchook <roma at polesye dot net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License Version 2 from
8  * June 1991 as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  */
20
21 #include <stdlib.h>
22 #include <string.h>
23 #include <menu.h>
24 #include <sys/types.h>
25 #include <unistd.h>
26 #include <fcntl.h>
27 #include <sys/ioctl.h>
28 #include "ap-utils.h"
29
30 WINDOW *win_for_menu, *sub_for_menu, *win_for_help, *main_win, *main_sub;
31 char *community;
32 int sockfd, atmel410_filter = 0, wait_mode = WAIT_FOREVER;
33 struct in_addr ap_ip;
34 char *prog_title = "Wireless Access Point Configurator";
35 char set_oeminfo_allowed = 0;
36 extern short ap_type;
37
38 void config_menu()
39 {
40     struct umitems umenu_atmel[] = {
41         {_("Bridging"), _("Set bridging and IP-related options"), bridging,
42          0},
43         {_("Wireless"), _("Set wireless options"), atmel_wireless, 0},
44         {_("Privacy"), MENU_ENCRYPT, wep, 0},
45         {_("MAC auth"), MENU_MAC, atmel_auth_mac, 0},
46         {_("Community"), MENU_COMMUNITY, AuthorizedSettings, 0},
47         {_("Radio"), _("Set radio signal power and antenna options"),
48          power, 0},
49         {"..", MAIN_MENU, NULL, 0},
50         {0, 0, NULL, 0}
51     };
52
53     struct umitems umenu_nwn[] = {
54         {_("General"), _("Set general options"), nwn_wireless, 0},
55         {_("Advanced"), _("Set advanced options"), advanced, 0},
56         {_("Privacy"), MENU_ENCRYPT, nwn_wep, 0},
57         {_("MAC auth"), MENU_MAC, nwn_auth_mac, 0},
58         {_("Community"), MENU_COMMUNITY, AuthorizedSettings, 0},
59         {"..", MAIN_MENU, NULL, 0},
60         {0, 0, NULL, 0}
61     };
62     
63     switch (ap_type) {
64         case ATMEL410:
65         case ATMEL12350:
66             set_oeminfo_allowed++;
67             uni_menu(umenu_atmel, sizeof(umenu_atmel) / sizeof(umenu_atmel[0]));
68             set_oeminfo_allowed--;
69             break;
70         case NWN:
71             uni_menu(umenu_nwn, sizeof(umenu_nwn) / sizeof(umenu_nwn[0]));
72             break;
73     }
74 }
75
76
77 void command_menu()
78 {
79     struct umitems command_umenu_atmel[] = {
80         {_("Upload"), _("Activate current configuration"), upload, 0},
81         {_("Defaults"), _("Restore factory default settings"), defaults, 0},
82         {_("Reset"),
83          _("Reset AP. All not uploaded configuration will be lost"), reset, 0},
84         {_("TestMode"), _("Put Access Point in test mode"), test, 0},
85         {"..", MAIN_MENU, NULL, 0},
86         {0, 0, NULL, 0}
87     };
88     struct umitems command_umenu_nwn[] = {
89         {_("Reset"), _("Reset AP."), reset, 0},
90         {"..", MAIN_MENU, NULL, 0},
91         {0, 0, NULL, 0}
92     };
93
94     switch (ap_type) {
95         case ATMEL410:
96         case ATMEL12350:
97             uni_menu(command_umenu_atmel,
98                 sizeof(command_umenu_atmel) / sizeof(command_umenu_atmel[0]));
99             break;      
100         case NWN:
101             uni_menu(command_umenu_nwn,
102                 sizeof(command_umenu_nwn) / sizeof(command_umenu_nwn[0]));
103             break;
104     }    
105 }
106
107 void stat_menu()
108 {
109     struct umitems umenu_atmel[] = {
110         {_("SysInfo"), MENU_SYSINFO, atmel_sysinfo, 0},
111         {_("Ethernet"), _("Get ethernet port statistics"), EthStat, 0},
112         {_("Wireless"), MENU_WIRELESS, WirelessStat, 0},
113         {_("Stations"), MENU_STAS, atmel_stations, 0},
114         {_("KnownAPs"), _("Get info about known Access Points"), APs, 0},
115         {"..", MAIN_MENU, NULL, 0},
116         {0, 0, NULL, 0}
117     };
118     struct umitems umenu_nwn[] = {
119         {_("SysInfo"), MENU_SYSINFO, nwn_sysinfo, 0},
120         {_("Wireless"), MENU_WIRELESS, nwn_wireless_stat, 0},
121         {_("Stations"), MENU_STAS, nwn_stations, 0},
122         {_("Latest"), _("Get info about latest events"), latest, 0},
123         {"..", MAIN_MENU, NULL, 0},
124         {0, 0, NULL, 0}
125     };
126     
127     switch (ap_type) {
128         case ATMEL410:
129         case ATMEL12350:
130             uni_menu(umenu_atmel, sizeof(umenu_atmel) / sizeof(umenu_atmel[0]));
131             break;      
132         case NWN:
133             uni_menu(umenu_nwn, sizeof(umenu_nwn) / sizeof(umenu_nwn[0]));
134             break;
135     }    
136 }
137
138 void _auth()
139 {
140     if (get_opts() == 0)
141         connect_options((unsigned long) NULL, (int) NULL);
142 }
143
144 void main_menu()
145 {
146     struct umitems config_umenu[] = {
147         {_("Info"), MENU_INFO, stat_menu, 1},
148         {_("Config"), MENU_CONFIG, config_menu, 1},
149         {_("Commands"), _("Execute commands on Access Point"),
150          command_menu, 1},
151         {_("Connect"), MENU_CONNECT, _auth, 0},
152         {_("Search"), MENU_SEARCH, ap_search, 0},
153         {_("About"), MENU_ABOUT, about, 0},
154         {_("Shell"), MENU_SHELL, exit_shell, 0},
155         {_("Exit"), MENU_EXIT, exit_program, 0},
156         {0, 0, NULL, 0}
157     };
158
159     uni_menu(config_umenu, sizeof(config_umenu) / sizeof(config_umenu[0]));
160 }
161
162
163
164 int main( /*int argc, char **argv */ )
165 {
166     int i;
167     WINDOW *win_for_title;
168     char message[100];
169
170 #ifdef HAVE_GETTEXT
171     /* locale support init */
172     setlocale(LC_ALL, "");
173     bindtextdomain("ap-utils", LOCALEDIR);
174     textdomain("ap-utils");
175 #endif
176
177     initscr();
178     if (has_colors()) {
179         start_color();
180         init_pair(1, COLOR_BLACK, COLOR_CYAN);
181         init_pair(2, COLOR_BLACK, COLOR_WHITE);
182         init_pair(3, COLOR_BLACK, COLOR_GREEN);
183         init_pair(4, COLOR_WHITE, COLOR_RED);
184     }
185
186     noraw();
187     cbreak();
188     noecho();
189     scrollok(stdscr, TRUE);
190     idlok(stdscr, TRUE);
191     keypad(stdscr, TRUE);
192     refresh();
193
194 /* draw help win */
195     win_for_help = newwin(1, COLS, LINES - 1, 0);
196     wattrset(win_for_help, COLOR_PAIR(1));
197     print_help("");
198
199 /* draw title win */
200     win_for_title = newwin(1, COLS, 0, 0);
201     wattrset(win_for_title, COLOR_PAIR(1));
202     for (i = 0; i < COLS; i++)
203         waddch(win_for_title, ' ');
204     sprintf(message, _("Wireless Access Point Configurator ver. %s"),
205             VERSION);
206     mvwaddstr(win_for_title, 0, (COLS - strlen(message)) / 2, message);
207     wrefresh(win_for_title);
208
209 /* draw menu win */
210     win_for_menu = newwin(LINES - 2, MCOLS, 1, 0);
211     sub_for_menu = derwin(win_for_menu, LINES - 5, MCOLS - 2, 2, 1);
212     set_menu_win(NULL, win_for_menu);
213     set_menu_sub(NULL, sub_for_menu);
214     attrset(COLOR_PAIR(1));
215
216     /* íÁÌÀÀ ÒÁÍËÕ */
217     waddch(win_for_menu, ACS_BSSB);
218     for (i = 0; i < MCOLS - 2; i++)
219         waddch(win_for_menu, ACS_BSBS);
220     waddch(win_for_menu, ACS_BSSS);
221     for (i = 0; i < LINES - 4; i++) {
222         waddch(win_for_menu, ACS_SBSB);
223         mvwaddch(win_for_menu, i + 1, MCOLS - 1, ACS_SBSB);
224     }
225     waddch(win_for_menu, ACS_SSBB);
226     for (i = 0; i < MCOLS - 2; i++)
227         waddch(win_for_menu, ACS_BSBS);
228     waddch(win_for_menu, ACS_SSBS);
229     wrefresh(win_for_menu);
230
231 /* draw_main_win */
232     main_win = newwin(LINES - 2, COLS - MCOLS, 1, MCOLS);
233     /* íÁÌÀÀ ÒÁÍËÕ */
234     for (i = 0; i < COLS - MCOLS - 1; i++)
235         waddch(main_win, ACS_BSBS);
236     waddch(main_win, ACS_BBSS);
237     for (i = 0; i < LINES - 4; i++)
238         mvwaddch(main_win, i + 1, COLS - MCOLS - 1, ACS_SBSB);
239     for (i = 0; i < COLS - MCOLS - 1; i++)
240         waddch(main_win, ACS_BSBS);
241     waddch(main_win, ACS_SBBS);
242     main_sub = derwin(main_win, LINES - 4, COLS - MCOLS - 1, 1, 0);
243     wclear(main_sub);
244     wrefresh(main_win);
245
246     about();
247     if (get_opts() == 0)
248         connect_options((unsigned long) NULL, (int) NULL);
249
250     while (1)
251         main_menu();
252
253 /* Not reachable */
254     return 0;
255 }
256