source: titan/titan/network.h @ 15272

Last change on this file since 15272 was 15146, checked in by nit, 10 years ago

[titan] fix network

File size: 21.1 KB
Line 
1#ifndef NETWORK_H
2#define NETWORK_H
3
4int readwlan(const char* filename, char** type, char** ssid, char** key)
5{
6        debug(1000, "in");
7        FILE *fd = NULL;
8        char *fileline = NULL, *tmpstr = NULL;
9
10        fileline = malloc(MINMALLOC);
11        if(fileline == NULL)
12        {
13                err("no memory");
14                return 1;
15        }
16
17        fd = fopen(filename, "r");
18        if(fd == NULL)
19        {
20                perr("can't open %s", filename);
21                free(fileline);
22                return 1;
23        }
24
25        while(fgets(fileline, MINMALLOC, fd) != NULL)
26        {
27                if(fileline[0] == '#' || fileline[0] == '\n')
28                        continue;
29                if(fileline[strlen(fileline) - 1] == '\n')
30                        fileline[strlen(fileline) - 1] = '\0';
31                if(fileline[strlen(fileline) - 1] == '\r')
32                        fileline[strlen(fileline) - 1] = '\0';
33
34                tmpstr = ostrstrcase(fileline, "proto=");
35                if(tmpstr != NULL)
36                {
37                        tmpstr += 6;
38                        if(ostrcmp(tmpstr, "WPA") == 0)
39                        {
40                                free(*type); *type = NULL;
41                                *type = ostrcat("2", NULL, 0, 0);
42                        }
43                        if(ostrcmp(tmpstr, "RSN") == 0)
44                        {
45                                free(*type); *type = NULL;
46                                *type = ostrcat("3", NULL, 0, 0);
47                        }
48                }
49                tmpstr = ostrstrcase(fileline, "ssid=\"");
50                if(tmpstr != NULL)
51                {
52                        tmpstr += 6;
53                        if(tmpstr != NULL)
54                        {
55                                tmpstr[strlen(tmpstr) -1] = '\0';
56                                free(*ssid); *ssid = NULL;
57                                *ssid = ostrcat(tmpstr, NULL, 0, 0);
58                        }                               
59                }
60                tmpstr = ostrstrcase(fileline, "psk=\"");
61                if(tmpstr != NULL)
62                {
63                        tmpstr += 5;
64                        if(tmpstr != NULL)
65                        {
66                                tmpstr[strlen(tmpstr) -1] = '\0';
67                                free(*key); *key = NULL;
68                                *key = ostrcat(tmpstr, NULL, 0, 0);
69                        }                               
70                }
71                tmpstr = ostrstrcase(fileline, "wep_key0=");
72                if(tmpstr != NULL)
73                {
74                        tmpstr += 9;
75                        if(tmpstr != NULL)
76                        {
77                                tmpstr[strlen(tmpstr)] = '\0';
78                                free(*key); *key = NULL;
79                                *key = ostrcat(tmpstr, NULL, 0, 0);
80                                free(*type); *type = NULL;
81                                *type = ostrcat("1", NULL, 0, 0);
82                        }                               
83                }
84        }
85
86        free(fileline);
87        fclose(fd);
88        return 0;
89}
90
91int writewlan(const char* filename, int type, char* ssid, char* key)
92{
93        char* savesettings = NULL;
94       
95        char* tmpstr = "\nkey_mgmt=NONE\nscan_ssid=1";
96       
97        if(type == 1) //WEP
98                tmpstr = "\nkey_mgmt=NONE\nscan_ssid=1\nwep_tx_keyidx=0\nwep_key0=";
99        if(type == 2) //WPA
100                tmpstr = "\nkey_mgmt=WPA-PSK\nscan_ssid=1\nproto=WPA\npsk=";
101        if(type == 3) //WPA2
102                tmpstr = "\nkey_mgmt=WPA-PSK\nscan_ssid=1\nproto=RSN\npsk=";
103
104        savesettings = ostrcat("ctrl_interface=DIR=/var/run/wpa_supplicant\nnetwork={\nssid=\"", NULL, 0, 0);
105        savesettings = ostrcat(savesettings, ssid, 1, 0);
106        savesettings = ostrcat(savesettings, "\"", 1, 0);
107        savesettings = ostrcat(savesettings, tmpstr, 1, 0);
108       
109        if(type == 2 || type == 3)
110                savesettings = ostrcat(savesettings, "\"", 1, 0);
111        if(type == 1 || type == 2 || type == 3)
112                savesettings = ostrcat(savesettings, key, 1, 0);
113        if(type == 2 || type == 3)
114                savesettings = ostrcat(savesettings, "\"", 1, 0);
115       
116        savesettings = ostrcat(savesettings, "\n}", 1, 0);
117
118        FILE* fd = fopen(filename, "w");
119        if(fd)
120        {
121                fprintf(fd, "%s\n", savesettings);
122                fclose(fd);
123        }
124        free(savesettings); savesettings = NULL;
125
126        return 0;
127}
128
129int writeinterfaces()
130{
131        char* savesettings = NULL;
132        struct inetwork* net = inetwork;
133
134        savesettings = ostrcat(savesettings, "# automatically generated by titan\n", 1, 0);
135        savesettings = ostrcat(savesettings, "# do NOT change manually!\n", 1, 0);
136        savesettings = ostrcat(savesettings, "\n", 1, 0);
137        savesettings = ostrcat(savesettings, "auto lo\n", 1, 0);
138        savesettings = ostrcat(savesettings, "iface lo inet loopback\n", 1, 0);
139
140        while(net != NULL)
141        {
142                if(ostrncmp(net->device, "lo", 2) == 0)
143                {
144                        net = net->next;
145                        continue;
146                }
147                if(net->dhcp == 0 && (net->ip == NULL || ostrcmp(net->ip, "000.000.000.000") == 0))
148                {
149                        net = net->next;
150                        continue;
151                }
152
153                savesettings = ostrcat(savesettings, "\n", 1, 0);
154                savesettings = ostrcat(savesettings, "auto ", 1, 0);
155                savesettings = ostrcat(savesettings, net->device, 1, 0);
156                savesettings = ostrcat(savesettings, "\n", 1, 0);
157
158                savesettings = ostrcat(savesettings, "iface ", 1, 0);
159                savesettings = ostrcat(savesettings, net->device, 1, 0);
160
161                if(net->dhcp == 1)
162                        savesettings = ostrcat(savesettings, " inet dhcp\n", 1, 0);
163                else
164                {
165                        savesettings = ostrcat(savesettings, " inet static\n", 1, 0);
166
167                        savesettings = ostrcat(savesettings, "\taddress ", 1, 0);
168                        savesettings = ostrcat(savesettings, fixip(net->ip, 1), 1, 1);
169                        if(net->netmask != NULL && ostrcmp(net->netmask, "000.000.000.000") != 0)
170                        {
171                                savesettings = ostrcat(savesettings, "\n\tnetmask ", 1, 0);
172                                savesettings = ostrcat(savesettings, fixip(net->netmask, 1), 1, 1);
173                        }
174                        //if(net->broadcast != NULL && ostrcmp(net->broadcast, "000.000.000.000") != 0)
175                        //{
176                        //      savesettings = ostrcat(savesettings, "\n\tbroadcast ", 1, 0);
177                        //      savesettings = ostrcat(savesettings, fixip(net->broadcast, 1), 1, 1);
178                        //}
179                        if(status.gateway != NULL && ostrcmp(status.gateway, "000.000.000.000") != 0)
180                        {
181                                savesettings = ostrcat(savesettings, "\n\tgateway ", 1, 0);
182                                savesettings = ostrcat(savesettings, fixip(status.gateway, 1), 1, 1);
183                        }
184                        savesettings = ostrcat(savesettings, "\n", 1, 0);
185                }
186
187                int dnscount = 0;
188                if(net->dhcp == 0)
189                {
190                        char* savedns = NULL;
191                        if(status.dnsserver1 != NULL && ostrcmp(status.dnsserver1, "000.000.000.000") != 0)
192                        {
193                                dnscount = 1;
194                                savedns = ostrcat(savedns, "nameserver ", 1, 0);
195                                savedns = ostrcat(savedns, fixip(status.dnsserver1, 1), 1, 1);
196                        }
197
198                        if(status.dnsserver2 != NULL && ostrcmp(status.dnsserver2, "000.000.000.000") != 0)
199                        {
200                                dnscount = 2;
201                                savedns = ostrcat(savedns, "\n", 1, 0);
202                                savedns = ostrcat(savedns, "nameserver ", 1, 0);
203                                savedns = ostrcat(savedns, fixip(status.dnsserver2, 1), 1, 1);
204                        }
205
206                        if(savedns != NULL)
207                        {
208                                debug(50, "[NETWORK] save resolv.conf: %s\n", savedns);
209                               
210                                savedns = ostrcat(savedns, "\n", 1, 0);
211                                if(dnscount == 1)
212                                        savedns = ostrcat(savedns, "options timeout:3 attempts:1", 1, 0);
213                                else
214                                        savedns = ostrcat(savedns, "options timeout:2 attempts:1", 1, 0);
215
216                               
217                                FILE* fd1 = fopen("/var/etc/resolv.conf", "w");
218                                if(fd1)
219                                {
220                                        fprintf(fd1, "%s\n", savedns);
221                                        fclose(fd1);
222                                }
223                                free(savedns); savedns = NULL;
224                        }
225                }
226                net = net->next;
227        }
228
229        debug(50, "[NETWORK] save interfaces:\n %s", savesettings);
230
231        FILE* fd = fopen("/var/etc/network/interfaces", "w");
232        if(fd)
233        {
234                fprintf(fd, "%s\n", savesettings);
235                fclose(fd);
236        }
237        free(savesettings); savesettings = NULL;
238
239        return 0;
240}
241
242void screennetwork_test()
243{
244        int rcret = 0;
245        struct skin* network = getscreen("network_test");
246        struct skin* internet = getscreennode(network, "internet");
247        struct skin* lan = getscreennode(network, "lan");
248        char* tmpstr = NULL;
249               
250        drawscreen(network, 0);
251        addscreenrc(network, lan);
252        while(1)
253        {
254                rcret = waitrc(network, 0, 0);
255
256                if(rcret == getrcconfigint("rcexit", NULL)) break;
257                if(rcret == getrcconfigint("rcred", NULL))
258                {
259                        tmpstr = ostrcat(tmpstr, "ping -c1 -W1 ", 1, 0);
260                        tmpstr = ostrcat(tmpstr, fixip(status.gateway, 1), 1, 0);
261                        free(lan->text); lan->text=NULL;
262                        if(system(tmpstr) == 0)
263                                lan->text = ostrcat(lan->text, "OK", 1, 0);
264                        else
265                                lan->text = ostrcat(lan->text, "ERROR", 1, 0);
266                        free(tmpstr); tmpstr=NULL;
267                        tmpstr = ostrcat(tmpstr, "ping -c1 -W1 ", 1, 0);
268                        tmpstr = ostrcat(tmpstr, "www.google.de", 1, 0);
269                        free(internet->text); internet->text=NULL;
270                        if(system(tmpstr) == 0)
271                                internet->text = ostrcat(internet->text, "OK", 1, 0);
272                        else
273                                internet->text = ostrcat(internet->text, "ERROR", 1, 0);
274                        free(tmpstr); tmpstr=NULL;
275                        drawscreen(network, 0);
276                }
277        }
278        delownerrc(network);
279        clearscreen(network);
280}
281
282void screennetwork(int mode)
283{
284        textbox(_("Network"), _("comming soon..."), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 600, 0, 0);
285}
286
287void screennetwork_restart(struct inetwork *net)
288{
289        char* tmpstr = NULL, *cmd = NULL;
290
291        if(textbox(_("Network"), _("Restart Network ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0) == 1)
292        {
293                debug(10, "restart network");
294                if(net == NULL)
295                {
296                        net = inetwork;
297                        while(net != NULL)
298                        {
299                                if(net->flag == 1)
300                                {
301                                        cmd = ostrcat(cmd, "/etc/init.d/networking -i ", 1, 0);
302                                        cmd = ostrcat(cmd, net->device, 1, 0);
303                                        cmd = ostrcat(cmd, " restart", 1, 0);
304                                        tmpstr = ostrcat(tmpstr, command(cmd), 1, 1);
305                                        tmpstr = ostrcat(tmpstr, "\n\n", 1, 0);
306                                        free(cmd); cmd = NULL;
307                                }
308                                net = net->next;
309                        }
310                }
311                else
312                {
313                        cmd = ostrcat(cmd, "/etc/init.d/networking -i ", 1, 0);
314                        cmd = ostrcat(cmd, net->device, 1, 0);
315                        cmd = ostrcat(cmd, " restart", 1, 0);
316                        tmpstr = ostrcat(tmpstr, command(cmd), 1, 1);
317                        free(cmd); cmd = NULL;
318                }
319                textbox(_("Restart Network"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 600, 0, 0);
320                free(tmpstr); tmpstr = NULL;
321
322                if(status.security == 0)
323                {
324                        char* tmpstr2 = NULL;
325                        tmpstr2 = getcpuid();
326                        checkserial(tmpstr2);
327                        free(tmpstr2), tmpstr2 = NULL;
328                }
329        }
330}
331
332//void nethidden(struct skin* ipaddresse, struct skin* netmask, struct skin* gateway, struct skin* dnsserver1, struct skin* dnsserver2, struct skin* broadcast, int type)
333void nethidden(struct skin* ipaddresse, struct skin* netmask, struct skin* gateway, struct skin* dnsserver1, struct skin* dnsserver2, int type)
334{
335        ipaddresse->hidden = type;
336        netmask->hidden = type;
337        gateway->hidden = type;
338        dnsserver1->hidden = type;
339        dnsserver2->hidden = type;
340        //broadcast->hidden = type;
341}
342
343void screennetwork_adapterext(int mode, char* interface)
344{
345        int rcret = 0;
346        struct skin* network = getscreen("network");
347        struct skin* listbox = getscreennode(network, "listbox");
348        struct skin* dhcp = getscreennode(network, "dhcp");
349        struct skin* ipaddresse = getscreennode(network, "ipaddresse");
350        struct skin* netmask = getscreennode(network, "netmask");
351        struct skin* gateway = getscreennode(network, "gateway");
352        struct skin* dnsserver1 = getscreennode(network, "dnsserver1");
353        struct skin* dnsserver2 = getscreennode(network, "dnsserver2");
354        //struct skin* broadcast = getscreennode(network, "broadcast");
355        struct inetwork* net = getinetworkbydevice(interface);
356
357        struct skin* tmp = NULL;
358
359        if(net == NULL)
360                return;
361
362        char* tmp_ipaddresse = net->ip;
363        char* tmp_netmask = net->netmask;
364        char* tmp_gateway = status.gateway;
365        char* tmp_dnsserver1 = status.dnsserver1;
366        char* tmp_dnsserver2 = status.dnsserver2;
367        //char* tmp_broadcast = net->broadcast;
368        int tmp_dhcp = net->dhcp;
369
370        changemask(ipaddresse, "000.000.000.000");
371        changeinput(ipaddresse, net->ip);
372
373        changemask(netmask, "000.000.000.000");
374        changeinput(netmask, net->netmask);
375
376        changemask(gateway, "000.000.000.000");
377        changeinput(gateway, status.gateway);
378
379        changemask(dnsserver1, "000.000.000.000");
380        changeinput(dnsserver1, status.dnsserver1);
381
382        changemask(dnsserver2, "000.000.000.000");
383        changeinput(dnsserver2, status.dnsserver2);
384
385        //changemask(broadcast, "000.000.000.000");
386        //changeinput(broadcast, net->broadcast);
387
388        addchoicebox(dhcp, "1", _("enable"));
389        addchoicebox(dhcp, "0", _("disable"));
390
391        if(net->dhcp)
392        {
393                setchoiceboxselection(dhcp, "1");
394                //nethidden(ipaddresse, netmask, gateway, dnsserver1, dnsserver2, broadcast, YES);
395                nethidden(ipaddresse, netmask, gateway, dnsserver1, dnsserver2, YES);
396        }
397        else
398        {
399                setchoiceboxselection(dhcp, "0");
400                //nethidden(ipaddresse, netmask, gateway, dnsserver1, dnsserver2, broadcast, NO);
401                nethidden(ipaddresse, netmask, gateway, dnsserver1, dnsserver2, NO);
402        }
403
404        listbox->aktline = 1;
405
406        drawscreen(network, 0);
407        addscreenrc(network, listbox);
408
409        int save = 0;
410        struct skin* child = NULL;
411
412        tmp = listbox->select;
413        while(1)
414        {
415                addscreenrc(network, tmp);
416                rcret = waitrc(network, 0, 0);
417                tmp = listbox->select;
418
419                //printf("listbox->select->text: %s\n", listbox->select->text);
420
421                if(rcret == getrcconfigint("rcexit", NULL)) break;
422                if(rcret == getrcconfigint("rcok", NULL))
423                {
424                        if(textbox(_("Message"), _("save network settings ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0) == 1)
425                        {
426                                debug(10, "save network settings");
427                                save = 1;
428                                break;
429                        }
430                        drawscreen(network, 0);
431                }
432
433                if(listbox->select != NULL)
434                {
435                        if(ostrcmp(listbox->select->name, "dhcp") == 0)
436                        {
437                                child = listbox->select->next;
438
439                                if(atoi(listbox->select->ret) == 0)
440                                        //nethidden(ipaddresse, netmask, gateway, dnsserver1, dnsserver2, broadcast, NO);
441                                        nethidden(ipaddresse, netmask, gateway, dnsserver1, dnsserver2, NO);
442                                else
443                                        //nethidden(ipaddresse, netmask, gateway, dnsserver1, dnsserver2, broadcast, YES);
444                                        nethidden(ipaddresse, netmask, gateway, dnsserver1, dnsserver2, YES);
445
446                                drawscreen(network, 0);
447                                tmp_dhcp = atoi(listbox->select->ret);
448                        }
449                        else if(ostrcmp(listbox->select->name, "ipaddresse") == 0)
450                                tmp_ipaddresse = listbox->select->ret;
451                        else if(ostrcmp(listbox->select->name, "netmask") == 0)
452                                tmp_netmask = listbox->select->ret;
453                        else if(ostrcmp(listbox->select->name, "gateway") == 0)
454                                tmp_gateway = listbox->select->ret;
455                        else if(ostrcmp(listbox->select->name, "dnsserver1") == 0)
456                                tmp_dnsserver1 = listbox->select->ret;
457                        else if(ostrcmp(listbox->select->name, "dnsserver2") == 0)
458                                tmp_dnsserver2 = listbox->select->ret;
459                        //else if(ostrcmp(listbox->select->name, "broadcast") == 0)
460                        //      tmp_broadcast = listbox->select->ret;
461                }
462        }
463
464        if(save == 1)
465        {
466                debug(50, "save settings");
467                debug(50, "dhcp: %i", tmp_dhcp);
468                debug(50, "ipaddresse: %s", tmp_ipaddresse);
469                debug(50, "netmask: %s", tmp_netmask);
470                debug(50, "gateway: %s", tmp_gateway);
471                debug(50, "dnsserver1: %s", tmp_dnsserver1);
472                debug(50, "dnsserver2: %s", tmp_dnsserver2);
473                //debug(50, "broadcast: %s", tmp_broadcast);
474
475                if(net->ip != tmp_ipaddresse)
476                {
477                        free(net->ip);
478                        net->ip = ostrcat(tmp_ipaddresse, "", 0, 0);
479                }
480                if(net->netmask != tmp_netmask)
481                {
482                        free(net->netmask);
483                        net->netmask = ostrcat(tmp_netmask, "", 0, 0);
484                }
485                if(status.gateway != tmp_gateway)
486                {
487                        free(status.gateway);
488                        status.gateway = ostrcat(tmp_gateway, "", 0, 0);
489                }
490                if(status.dnsserver1 != tmp_dnsserver1)
491                {
492                        free(status.dnsserver1);
493                        status.dnsserver1 = ostrcat(tmp_dnsserver1, "", 0, 0);
494                }
495                if(status.dnsserver2 != tmp_dnsserver2)
496                {
497                        free(status.dnsserver2);
498                        status.dnsserver2 = ostrcat(tmp_dnsserver2, "", 0, 0);
499                }
500                //if(net->broadcast != tmp_broadcast)
501                //{
502                //      free(net->broadcast);
503                //      net->broadcast = ostrcat(tmp_broadcast, "", 0, 0);
504                //}
505                net->dhcp = tmp_dhcp;
506
507                writeinterfaces();
508                screennetwork_restart(net);
509        }
510
511        delownerrc(network);
512        clearscreen(network);
513}
514
515void screennetwork_adapter()
516{
517        int rcret = 0, mode = 0;
518        struct skin* interfacelist = getscreen("interfacelist");
519        struct skin* listbox = getscreennode(interfacelist, "listbox");
520        struct inetwork* inetworknode = NULL;
521        struct skin* tmp = NULL;
522        char* tmpstr = NULL;
523
524start:
525        tmp = NULL;
526        listbox->aktpage = -1;
527        listbox->aktline = 1;
528        listbox->select = NULL;
529        inetworknode = inetwork;
530
531        while(inetworknode != NULL)
532        {
533                if(ostrncmp(inetworknode->device, "lo", 2) == 0)
534                {
535                        inetworknode = inetworknode->next;
536                        continue;
537                }
538                tmp = addlistbox(interfacelist, listbox, tmp, 1);
539                if(tmp != NULL)
540                {
541                        tmpstr = ostrcat(inetworknode->device, " (", 0, 0);
542                        tmpstr = ostrcat(tmpstr, inetworknode->ip, 1, 0);
543                        tmpstr = ostrcat(tmpstr, ")", 1, 0);
544                        changetext(tmp, tmpstr);
545                        free(tmpstr); tmpstr = NULL;
546                        tmp->handle = inetworknode->device;
547                }
548                inetworknode = inetworknode->next;
549        }
550
551        drawscreen(interfacelist, 0);
552        addscreenrc(interfacelist, listbox);
553
554        tmp = listbox->select;
555        while(1)
556        {
557                addscreenrc(interfacelist, tmp);
558                rcret = waitrc(interfacelist, 0, 0);
559                tmp = listbox->select;
560
561                if(rcret == getrcconfigint("rcexit", NULL)) break;
562                if(listbox->select != NULL)
563                {
564                        if(rcret == getrcconfigint("rcred", NULL))
565                        {
566                                clearscreen(interfacelist);
567                                screennetwork_adapterext(mode, listbox->select->handle);
568                                delmarkedscreennodes(interfacelist, 1);
569                                goto start;
570                        }
571                }
572        }
573
574        delmarkedscreennodes(interfacelist, 1);
575        delownerrc(interfacelist);
576        clearscreen(interfacelist);
577}
578
579void screennetwork_wlan()
580{
581        int rcret = -1, scan = 0, ret = 0;
582        struct skin* wlan = getscreen("wlansettings");
583        struct skin* listbox = getscreennode(wlan, "listbox");
584        struct skin* startmode = getscreennode(wlan, "startmode");
585        struct skin* ssid = getscreennode(wlan, "ssid");
586        struct skin* type = getscreennode(wlan, "type");
587        struct skin* key = getscreennode(wlan, "key");
588        struct skin* b3 = getscreennode(wlan, "b3");
589        struct skin* b4 = getscreennode(wlan, "b4");
590        struct skin* b5 = getscreennode(wlan, "b5");
591        struct skin* b6 = getscreennode(wlan, "b6");
592        struct inetwork* net = NULL;
593        struct skin* tmp = NULL, *tmp1 = NULL, *tmp2 = NULL;
594        char* tmpstr = NULL;
595
596        char* wtype = NULL, *wssid = NULL, *wkey = NULL;
597
598        readwlan("/var/etc/wpa_supplicant.conf", &wtype, &wssid, &wkey);
599
600        addchoicebox(startmode, "n", _("no"));
601        addchoicebox(startmode, "y", _("yes"));
602        setchoiceboxselection(startmode, getownconfig("wlan"));
603
604        changeinput(ssid, wssid);
605        free(wssid); wssid = NULL;
606
607        addchoicebox(type, "0", _("NONE"));
608        addchoicebox(type, "1", _("WEP"));
609        addchoicebox(type, "2", _("WPA"));
610        addchoicebox(type, "3", _("WPA2"));
611        setchoiceboxselection(type, wtype);
612        free(wtype); wtype = NULL;
613
614        changeinput(key, wkey);
615        free(wkey); wkey = NULL;
616
617        drawscreen(wlan, 0);
618        addscreenrc(wlan, listbox);
619
620        tmp = listbox->select;
621        tmp2 = listbox->select;
622        while(1)
623        {
624                if(scan == 0) addscreenrc(wlan, tmp);
625                rcret = waitrc(wlan, 0, 0);
626                if(scan == 0) tmp = listbox->select;
627
628                if(rcret == getrcconfigint("rcexit", NULL))
629                {
630                        if(scan == 1)
631                        {
632                                scan = 0;
633                                delmarkedscreennodes(wlan, 1);
634                                startmode->hidden = NO;
635                                ssid->hidden = NO;
636                                type->hidden = NO;
637                                key->hidden = NO;
638                                b3->hidden = NO;
639                                b4->hidden = NO;
640                                b5->hidden = NO;
641                                b6->hidden = NO;
642                                listbox->select = NULL;
643                                listbox->aktline = 1;
644                                listbox->aktpage = -1;
645                                tmp = tmp2;
646                                drawscreen(wlan, 0);
647                        }
648                        else
649                                break;
650                }
651
652                if(rcret == getrcconfigint("rcok", NULL) || (scan == 0 && rcret == getrcconfigint("rcgreen", NULL)))
653                {
654                        if(scan == 1)
655                        {
656                                if(listbox->select != NULL)
657                                {       
658                                        ssid->linecount = 0;
659                                        ssid->pagecount = 0;
660                                        ssid->poscount = 0;
661                                        ssid->aktpage = 0;
662                                        ssid->aktline = 0;
663                                        changeinput(ssid, listbox->select->text);
664                                }
665                                scan = 0;
666                                delmarkedscreennodes(wlan, 1);
667                                startmode->hidden = NO;
668                                ssid->hidden = NO;
669                                type->hidden = NO;
670                                key->hidden = NO;
671                                b3->hidden = NO;
672                                b4->hidden = NO;
673                                b5->hidden = NO;
674                                b6->hidden = NO;
675                                listbox->select = NULL;
676                                listbox->aktline = 1;
677                                listbox->aktpage = -1;
678                                tmp = tmp2;
679                                drawscreen(wlan, 0);
680                        }
681                        else
682                        {
683                                int tmptype = 0;
684                                if(type->ret != NULL) tmptype = atoi(type->ret);
685                                writewlan("/var/etc/wpa_supplicant.conf", tmptype, ssid->ret, key->ret);
686                                if(startmode->ret != NULL) addownconfig("wlan", startmode->ret);
687                                if(rcret == getrcconfigint("rcok", NULL))
688                                {
689                                        net = getinetworkfirstwlan();
690                                        if(net != NULL) screennetwork_restart(net);
691                                        break;
692                                }
693                        }
694                        if(rcret == getrcconfigint("rcgreen", NULL))
695                        {
696                                system("killall wpa_supplicant; sleep 2; killall -9 wpa_supplicant");
697                                ret = system("wlan.sh");
698                                if(ret == 0)
699                                        textbox(_("Message"), _("WLAN started.\n You can now configure the new interface."), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
700                                else
701                                        textbox(_("Message"), _("WLAN not started,\nPlease check your config."), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
702                                drawscreen(wlan, 0);
703                        }
704                }
705
706                if(rcret == getrcconfigint("rcred", NULL) && scan == 0)
707                {
708                        tmp1 = NULL;
709                        scan = 1;
710                        startmode->hidden = YES;
711                        ssid->hidden = YES;
712                        type->hidden = YES;
713                        key->hidden = YES;
714                        b3->hidden = YES;
715                        b4->hidden = YES;
716                        b5->hidden = YES;
717                        b6->hidden = YES;
718                        listbox->select = NULL;
719                        listbox->aktline = 1;
720                        listbox->aktpage = -1;
721                        tmp1 = addlistbox(wlan, listbox, tmp1, 1);
722                        if(tmp1 != NULL)
723                                changetext(tmp1, _("searching..."));
724                        drawscreen(wlan, 0);
725
726                        system("wlan.sh notstart");
727                        tmpstr = command("iwlist scanning | grep 'ESSID:' | sed 's/ESSID:\\\"\\\"/ESSID:\\\"unknown\\\"/' | sed 's/[ ]*ESSID://' | tr -d \\\"");
728
729                        tmp1 = NULL;
730                        delmarkedscreennodes(wlan, 1);
731                        if(tmpstr != NULL)
732                        {
733                                int count = 0, i = 0;
734                                struct splitstr* splitret = NULL;
735
736                                splitret = strsplit(tmpstr, "\n", &count);
737                                for(i = 0; i < count; i++)
738                                {
739                                        tmp1 = addlistbox(wlan, listbox, tmp1, 1);
740                                        if(tmp1 != NULL)
741                                                changetext(tmp1, (&splitret[i])->part);
742                                }
743                                free(splitret); splitret = NULL;
744                                free(tmpstr); tmpstr = NULL;
745                        }
746                        drawscreen(wlan, 0);
747                }
748
749                if(rcret == getrcconfigint("rcyellow", NULL) && scan == 0)
750                {
751                        system("killall wpa_supplicant; sleep 2; killall -9 wpa_supplicant");
752                        textbox(_("Message"), _("WLAN now stopped"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
753                        drawscreen(wlan, 0);
754                }
755               
756                if(rcret == getrcconfigint("rcblue", NULL) && scan == 0)
757                {
758                        tmpstr = readfiletomem("/tmp/wlan.log", 0);
759                        textbox(_("WLAN LOG"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 600, 0, 0);
760                        free(tmpstr); tmpstr = NULL;
761                        drawscreen(wlan, 0);
762                }
763        }
764
765        delmarkedscreennodes(wlan, 1);
766        delownerrc(wlan);
767        clearscreen(wlan);
768}
769
770#endif
Note: See TracBrowser for help on using the repository browser.