source: titan/titan/network.h @ 34551

Last change on this file since 34551 was 34551, checked in by Stephan, 9 years ago

debuglevels reworked

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