source: titan/plugins/networkbrowser/networkbrowser.h @ 27740

Last change on this file since 27740 was 27740, checked in by obi, 10 years ago

update menulistbox with detail text

File size: 60.6 KB
Line 
1/**************************************************************************/
2/* Name :   networkbrowser.h                                              */
3/*                                                                        */
4/* Author:  obi                                                           */
5/*                                                                        */
6/* Licence: This file is subject to the terms and conditions of the       */
7/*          GNU General Public License version 2.                         */
8/**************************************************************************/   
9
10#ifndef NETWORKBROWSER_H
11#define NETWORKBROWSER_H
12
13extern struct inetwork* inetwork;
14
15struct networkbrowser
16{
17        //mode 0 = cifs
18        //mode 1 = nfs
19        //mode 2 = ftp
20        char* mode;
21        char* sharename;
22        char* ip;
23        char* sharedir;
24        char* username;
25        char* password;
26        char* rsize;
27        char* wsize;
28        char* protocol;
29        char* options;
30        char* ssl;
31        char* proxy;
32        char* proxyip;
33        char* proxyport;
34        char* proxyuser;
35        char* proxypass;
36        char* ftpport;
37        char* userauth;
38        char* proxyauth;
39        char* useproxy;
40        char* usessl;
41        char* usedns;
42        char* dns;
43        struct networkbrowser* next;
44};
45
46struct networkbrowser *networkbrowser = NULL;
47
48char* readnetworkbrowser(char* filename, int flag);
49void screennetworkbrowser_settings();
50void screennetworkbrowser_addshare(struct networkbrowser* node, int newnode);
51
52void debugnetworkbrowser(struct networkbrowser* node)
53{
54        if(node == NULL) return;
55       
56        debug(70, "mode: %s", node->mode);
57        debug(70, "sharename: %s", node->sharename);
58        debug(70, "ip: %s", node->ip);
59        debug(70, "sharedir: %s", node->sharedir);
60        debug(70, "username: %s", node->username);
61        debug(70, "password: %s", node->password);
62        debug(70, "rsize: %s", node->rsize);
63        debug(70, "wsize: %s", node->wsize);
64        debug(70, "protocol: %s", node->protocol);
65        debug(70, "options: %s", node->options);
66        debug(70, "ssl: %s", node->ssl);
67        debug(70, "proxy: %s", node->proxy);
68        debug(70, "proxyip: %s", node->proxyip);
69        debug(70, "proxyport: %s", node->proxyport);
70        debug(70, "proxyuser: %s", node->proxyuser);
71        debug(70, "proxypass: %s", node->proxypass);
72        debug(70, "ftpport: %s", node->ftpport);
73        debug(70, "userauth: %s", node->userauth);
74        debug(70, "proxyauth: %s", node->proxyauth);
75        debug(70, "useproxy: %s", node->useproxy);
76        debug(70, "usessl: %s", node->usessl);
77        debug(70, "usedns: %s", node->usedns);
78        debug(70, "dns: %s", node->dns);
79}
80
81void delnetworkbrowsercontent(struct networkbrowser* node)
82{
83        if(node == NULL) return;
84       
85        free(node->mode); node->mode = NULL;
86        free(node->sharename); node->sharename = NULL;
87        free(node->ip); node->ip = NULL;
88        free(node->sharedir); node->sharedir = NULL;
89        free(node->username); node->username = NULL;
90        free(node->password); node->password = NULL;
91        free(node->rsize); node->rsize = NULL;
92        free(node->wsize); node->wsize = NULL;
93        free(node->protocol); node->protocol = NULL;
94        free(node->options); node->options = NULL;
95        free(node->ssl); node->ssl = NULL;
96        free(node->proxy); node->proxy = NULL;
97        free(node->proxyip); node->proxyip = NULL;
98        free(node->proxyport); node->proxyport = NULL;
99        free(node->proxyuser); node->proxyuser = NULL;
100        free(node->proxypass); node->proxypass = NULL;
101        free(node->ftpport); node->ftpport = NULL;
102        free(node->userauth); node->userauth = NULL;
103        free(node->proxyauth); node->proxyauth = NULL;
104        free(node->useproxy); node->useproxy = NULL;
105        free(node->usessl); node->usessl = NULL;
106        free(node->usedns); node->usedns = NULL;
107        free(node->dns); node->dns = NULL;
108}
109
110void delnetworkbrowser(struct networkbrowser* netnode)
111{
112        struct networkbrowser *node = networkbrowser, *prev = networkbrowser;
113
114        while(node != NULL)
115        {
116                if(node == netnode)
117                {
118                        if(node == networkbrowser)
119                                networkbrowser = node->next;
120                        else
121                                prev->next = node->next;
122
123                        delnetworkbrowsercontent(node);
124
125                        free(node);
126                        node = NULL;
127                        break;
128                }
129
130                prev = node;
131                node = node->next;
132        }
133}
134
135void freenetworkbrowser()
136{
137        struct networkbrowser *node = networkbrowser, *prev = networkbrowser;
138
139        while(node != NULL)
140        {
141                prev = node;
142                node = node->next;
143                if(prev != NULL)
144                        delnetworkbrowser(prev);
145        }
146}
147
148struct networkbrowser* addnetworkbrowser(char *line, int count, struct networkbrowser* last)
149{
150        struct networkbrowser *newnode = NULL, *prev = NULL, *node = networkbrowser;
151        int ret = 0, treffer = 0;
152        char* tmpstr = NULL;
153
154        newnode = (struct networkbrowser*)malloc(sizeof(struct networkbrowser));       
155        if(newnode == NULL)
156        {
157                err("no memory");
158                return NULL;
159        }
160        memset(newnode, 0, sizeof(struct networkbrowser));
161
162        if(line != NULL)
163        {
164                newnode->sharename = malloc(256);
165                if(newnode->sharename == NULL)
166                {
167                        err("no memory");
168                        delnetworkbrowsercontent(newnode);
169                        free(newnode);
170                        return NULL;
171                }
172                memset(newnode->sharename, 0, 256);
173
174                newnode->ip = malloc(256);
175                if(newnode->ip == NULL)
176                {
177                        err("no memory");
178                        delnetworkbrowsercontent(newnode);
179                        free(newnode);
180                        return NULL;
181                }
182                memset(newnode->ip, 0, 256);
183
184                newnode->dns = malloc(256);
185                if(newnode->dns == NULL)
186                {
187                        err("no memory");
188                        delnetworkbrowsercontent(newnode);
189                        free(newnode);
190                        return NULL;
191                }
192                memset(newnode->dns, 0, 256);
193       
194                newnode->sharedir = malloc(256);
195                if(newnode->sharedir == NULL)
196                {
197                        err("no memory");
198                        delnetworkbrowsercontent(newnode);
199                        free(newnode);
200                        return NULL;
201                }
202                memset(newnode->sharedir, 0, 256);
203
204                newnode->username = malloc(256);
205                if(newnode->username == NULL)
206                {
207                        err("no memory");
208                        delnetworkbrowsercontent(newnode);
209                        free(newnode);
210                        return NULL;
211                }
212                memset(newnode->username, 0, 256);
213
214                newnode->password = malloc(256);
215                if(newnode->password == NULL)
216                {
217                        err("no memory");
218                        delnetworkbrowsercontent(newnode);
219                        free(newnode);
220                        return NULL;
221                }
222                memset(newnode->password, 0, 256);
223
224                newnode->rsize = malloc(256);
225                if(newnode->rsize == NULL)
226                {
227                        err("no memory");
228                        delnetworkbrowsercontent(newnode);
229                        free(newnode);
230                        return NULL;
231                }
232                memset(newnode->rsize, 0, 256);
233
234                newnode->wsize = malloc(256);
235                if(newnode->wsize == NULL)
236                {
237                        err("no memory");
238                        delnetworkbrowsercontent(newnode);
239                        free(newnode);
240                        return NULL;
241                }
242                memset(newnode->wsize, 0, 256);
243
244                newnode->protocol = malloc(256);
245                if(newnode->protocol == NULL)
246                {
247                        err("no memory");
248                        delnetworkbrowsercontent(newnode);
249                        free(newnode);
250                        return NULL;
251                }
252                memset(newnode->protocol, 0, 256);
253
254                newnode->options = malloc(256);
255                if(newnode->options == NULL)
256                {
257                        err("no memory");
258                        delnetworkbrowsercontent(newnode);
259                        free(newnode);
260                        return NULL;
261                }
262                memset(newnode->options, 0, 256);
263
264                newnode->ssl = malloc(256);
265                if(newnode->ssl == NULL)
266                {
267                        err("no memory");
268                        delnetworkbrowsercontent(newnode);
269                        free(newnode);
270                        return NULL;
271                }
272                memset(newnode->ssl, 0, 256);
273
274                newnode->proxy = malloc(256);
275                if(newnode->proxy == NULL)
276                {
277                        err("no memory");
278                        delnetworkbrowsercontent(newnode);
279                        free(newnode);
280                        return NULL;
281                }
282                memset(newnode->proxy, 0, 256);
283
284                newnode->proxyip = malloc(256);
285                if(newnode->proxyip == NULL)
286                {
287                        err("no memory");
288                        delnetworkbrowsercontent(newnode);
289                        free(newnode);
290                        return NULL;
291                }
292                memset(newnode->proxyip, 0, 256);
293
294                newnode->proxyport = malloc(256);
295                if(newnode->proxyport == NULL)
296                {
297                        err("no memory");
298                        delnetworkbrowsercontent(newnode);
299                        free(newnode);
300                        return NULL;
301                }
302                memset(newnode->proxyport, 0, 256);
303
304                newnode->proxyuser = malloc(256);
305                if(newnode->proxyuser == NULL)
306                {
307                        err("no memory");
308                        delnetworkbrowsercontent(newnode);
309                        free(newnode);
310                        return NULL;
311                }
312                memset(newnode->proxyuser, 0, 256);
313
314                newnode->proxypass = malloc(256);
315                if(newnode->proxypass == NULL)
316                {
317                        err("no memory");
318                        delnetworkbrowsercontent(newnode);
319                        free(newnode);
320                        return NULL;
321                }
322                memset(newnode->proxypass, 0, 256);
323
324                newnode->ftpport = malloc(256);
325                if(newnode->ftpport == NULL)
326                {
327                        err("no memory");
328                        delnetworkbrowsercontent(newnode);
329                        free(newnode);
330                        return NULL;
331                }
332                memset(newnode->ftpport, 0, 256);
333
334                newnode->userauth = ostrcat(newnode->userauth, "0", 1, 0);
335                newnode->proxyauth = ostrcat(newnode->proxyauth, "0", 1, 0);
336                newnode->useproxy = ostrcat(newnode->useproxy, "0", 1, 0);
337                newnode->usessl = ostrcat(newnode->usessl, "0", 1, 0);
338                newnode->usedns = ostrcat(newnode->usedns, "0", 1, 0);
339
340                //nfs parse
341                if(ostrstr(line, "-fstype=nfs") != NULL)
342                {
343                        treffer = 1;
344                        newnode->mode = ostrcat("1", NULL, 0, 0);
345                        if(oregex(".*([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}).*", tmpstr))
346                        {
347                                ret = sscanf(line, "%s\t-fstype=nfs,%[^,],%*[^,],rsize=%[^,],wsize=%[^,],%s\t%[^:]:/%s", newnode->sharename, newnode->options, newnode->rsize, newnode->wsize, newnode->protocol, newnode->ip, newnode->sharedir);
348                        }
349                        else
350                        {
351                                free(newnode->usedns); newnode->usedns = NULL;
352                                newnode->usedns = ostrcat(newnode->usedns, "1", 1, 0);
353                                ret = sscanf(line, "%s\t-fstype=nfs,%[^,],%*[^,],rsize=%[^,],wsize=%[^,],%s\t%[^:]:/%s", newnode->sharename, newnode->options, newnode->rsize, newnode->wsize, newnode->protocol, newnode->dns, newnode->sharedir);
354                        }
355                        if(ret != 7)
356                        {
357                                if(count > 0)
358                                {
359                                        err("networkbrowser nfs line %d not ok", count);
360                                }
361                                else
362                                {
363                                        err("add networkbrowser nfs");
364                                }
365                                delnetworkbrowsercontent(newnode);
366                                free(newnode);
367                                return NULL;
368                        }
369                }
370
371                //cifs parse
372                if(ostrstr(line, "-fstype=cifs") != NULL)
373                {
374                        treffer = 1;
375                        newnode->mode = ostrcat("0", NULL, 0, 0);
376                        if(oregex(".*([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}).*", line))
377                        {
378                                if(ostrstr(line, "user=,") != NULL)
379                                {
380                                        treffer = 6;
381                                        ret = sscanf(line, "%s\t-fstype=cifs,%[^,],rsize=%[^,],wsize=%[^,],%*s\t://%[^/]/%s", newnode->sharename, newnode->options, newnode->rsize, newnode->wsize, newnode->ip, newnode->sharedir);
382                                }
383                                else
384                                {
385                                        treffer = 8;
386                                        free(newnode->userauth); newnode->userauth = NULL;
387                                        newnode->userauth = ostrcat(newnode->userauth, "1", 1, 0);
388                                        ret = sscanf(line, "%s\t-fstype=cifs,%[^,],rsize=%[^,],wsize=%[^,],user=%[^,],pass=%s\t://%[^/]/%s", newnode->sharename, newnode->options, newnode->rsize, newnode->wsize, newnode->username, newnode->password, newnode->ip, newnode->sharedir);
389                                }
390                        }
391                        else
392                        {
393                                free(newnode->usedns); newnode->usedns = NULL;
394                                newnode->usedns = ostrcat(newnode->usedns, "1", 1, 0);
395                                if(ostrstr(line, "user=,") != NULL)
396                                {
397                                        treffer = 6;
398                                        ret = sscanf(line, "%s\t-fstype=cifs,%[^,],rsize=%[^,],wsize=%[^,],%*s\t://%[^/]/%s", newnode->sharename, newnode->options, newnode->rsize, newnode->wsize, newnode->dns, newnode->sharedir);
399                                }
400                                else
401                                {
402                                        treffer = 8;
403                                        free(newnode->userauth); newnode->userauth = NULL;
404                                        newnode->userauth = ostrcat(newnode->userauth, "1", 1, 0);
405                                        ret = sscanf(line, "%s\t-fstype=cifs,%[^,],rsize=%[^,],wsize=%[^,],user=%[^,],pass=%s\t://%[^/]/%s", newnode->sharename, newnode->options, newnode->rsize, newnode->wsize, newnode->username, newnode->password, newnode->dns, newnode->sharedir);
406                                }
407                        }
408                        if(ret != treffer)
409                        {
410                                if(count > 0)
411                                {
412                                        err("networkbrowser cifs line %d not ok", count);
413                                }
414                                else
415                                {
416                                        err("add networkbrowser cifs");
417                                }
418                                delnetworkbrowsercontent(newnode);
419                                free(newnode);
420                                return NULL;
421                        }
422                }
423
424                //ftpfs parse
425                if(ostrstr(line, "-fstype=ftpfs") != NULL)
426                {
427                        treffer = 1;
428                        newnode->mode = ostrcat("2", NULL, 0, 0);
429
430                        ret = sscanf(line, "%s\t-fstype=ftpfs,%[^,\t]", newnode->sharename, newnode->options);
431                        if(ret != 2) treffer = 0;
432
433                        tmpstr = ostrstr(line, "ssl");
434                        if(tmpstr != NULL)
435                        {
436                                free(newnode->usessl); newnode->usessl = NULL;
437                                newnode->usessl = ostrcat(newnode->usessl, "1", 1, 0);
438                                ret = sscanf(tmpstr, "%[^,\t]", newnode->ssl);
439                                if(ret != 1) treffer = 0;
440                        }
441
442                        tmpstr = ostrstr(line, "proxy=");
443                        if(tmpstr != NULL)
444                        {
445                                free(newnode->useproxy); newnode->useproxy = NULL;
446                                newnode->useproxy = ostrcat(newnode->useproxy, "1", 1, 0);
447                                ret = sscanf(tmpstr, "proxy=%[^\\]\\:%[^,],%[^,\t]", newnode->proxyip, newnode->proxyport, newnode->proxy);
448                                if(ret != 3) treffer = 0;
449
450                                tmpstr = ostrstr(line, "proxy_user=");
451                                if(tmpstr != NULL)
452                                {
453                                        free(newnode->proxyauth); newnode->proxyauth = NULL;
454                                        newnode->proxyauth = ostrcat(newnode->proxyauth, "1", 1, 0);
455                                        ret = sscanf(tmpstr, "proxy_user=%[^\\]\\:%[^,\t]", newnode->proxyuser, newnode->proxypass);
456                                        if(ret != 2) treffer = 0;
457                                }
458                        }
459
460                        tmpstr = ostrstr(line, ":ftp\\://");
461                        if(tmpstr != NULL)
462                        {
463                                if(oregex(".*([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}).*", tmpstr))
464                                {
465                                        if(ostrstr(line, "@") != NULL)
466                                        {
467                                                free(newnode->userauth); newnode->userauth = NULL;
468                                                newnode->userauth = ostrcat(newnode->userauth, "1", 1, 0);
469                                                ret = sscanf(tmpstr, ":ftp\\://%[^\\]\\:%[^@]@%[^\\]\\:%s", newnode->username, newnode->password, newnode->ip, newnode->ftpport);
470        //                                      if(ret != 5) treffer = 0;
471                                                if(ret != 4) treffer = 0;
472                                        }
473                                        else
474                                        {
475                                                ret = sscanf(tmpstr, ":ftp\\://%[^\\]\\:%s", newnode->ip, newnode->ftpport);
476                                                if(ret != 3) treffer = 0;
477                                        }
478
479                                }
480                                else
481                                {
482                                        free(newnode->usedns); newnode->usedns = NULL;
483                                        newnode->usedns = ostrcat(newnode->usedns, "1", 1, 0);
484
485                                        if(ostrstr(line, "@") != NULL)
486                                        {
487                                                free(newnode->userauth); newnode->userauth = NULL;
488                                                newnode->userauth = ostrcat(newnode->userauth, "1", 1, 0);
489                                                ret = sscanf(tmpstr, ":ftp\\://%[^\\]\\:%[^@]@%[^\\]\\:%s", newnode->username, newnode->password, newnode->dns, newnode->ftpport);
490        //                                      if(ret != 5) treffer = 0;
491                                                if(ret != 4) treffer = 0;
492                                        }
493                                        else
494                                        {
495                                                ret = sscanf(tmpstr, ":ftp\\://%[^\\]\\:%s", newnode->dns, newnode->ftpport);
496                                                if(ret != 3) treffer = 0;
497                                        }
498                                }
499                        }
500                        else
501                                treffer = 0;
502       
503                        if(newnode->ftpport != NULL)
504                        {
505                                tmpstr = ostrstr(newnode->ftpport, "/");
506                                if(tmpstr != NULL)
507                                {
508                                        tmpstr[0] = '\0';
509                                        free(newnode->sharedir);
510                                        newnode->sharedir = ostrcat(tmpstr + 1, NULL, 0, 0);               
511                                }
512                        }
513
514                        if(treffer == 0)
515                        {
516                                if(count > 0)
517                                {
518                                        err("networkbrowser ftpfs line %d not ok", count);
519                                }
520                                else
521                                {
522                                        err("add networkbrowser ftpfs");
523                                }
524                                delnetworkbrowsercontent(newnode);
525                                free(newnode);
526                                return NULL;
527                        }
528
529                }
530
531                if(treffer == 0)
532                {
533                        delnetworkbrowsercontent(newnode);
534                        free(newnode);
535                        return NULL;
536                }
537        }
538       
539        if(last == NULL)
540        {
541                while(node != NULL)
542                {
543                        prev = node;
544                        node = node->next;
545                }
546        }
547        else
548        {
549                prev = last;
550                node = last->next;
551        }
552
553        if(prev == NULL)
554                networkbrowser = newnode;
555        else
556                prev->next = newnode;
557
558        newnode->next = node;
559       
560        return newnode;
561}
562
563void setdefaultnetworkbrowser(struct networkbrowser* node)
564{
565        if(node == NULL) return;
566       
567        if(node->mode == NULL || node->mode[0] == '\0') node->mode = ostrcat(node->mode, "0", 1, 0);
568        if(node->sharename == NULL || node->sharename[0] == '\0') node->sharename = ostrcat(node->sharename, "SHARENAME", 1, 0);
569        if(node->ip == NULL || node->ip[0] == '\0') node->ip = ostrcat(node->ip, "192.168.178.1", 1, 0);
570        if(node->sharedir == NULL || node->sharedir[0] == '\0') node->sharedir = ostrcat(node->sharedir, "sharedir", 1, 0);
571        if(node->username == NULL || node->username[0] == '\0') node->username = ostrcat(node->username, "username", 1, 0);
572        if(node->password == NULL || node->password[0] == '\0') node->password = ostrcat(node->password, "password", 1, 0);
573        if(node->rsize == NULL || node->rsize[0] == '\0') node->rsize = ostrcat(node->rsize, "32768", 1, 0);
574        if(node->wsize == NULL || node->wsize[0] == '\0') node->wsize = ostrcat(node->wsize, "32768", 1, 0);
575        if(node->protocol == NULL || node->protocol[0] == '\0') node->protocol = ostrcat(node->protocol, "udp", 1, 0);
576        if(node->options == NULL || node->options[0] == '\0') node->options = ostrcat(node->options, "rw", 1, 0);
577        if(node->ssl == NULL || node->ssl[0] == '\0') node->ssl = ostrcat(node->ssl, "ssl_try", 1, 0);
578        if(node->proxy == NULL || node->proxy[0] == '\0') node->proxy = ostrcat(node->proxy, "socks5", 1, 0);
579        if(node->proxyip == NULL || node->proxyip[0] == '\0') node->proxyip = ostrcat(node->proxyip, "12.23.45.67", 1, 0);
580        if(node->proxyport == NULL || node->proxyport[0] == '\0') node->proxyport = ostrcat(node->proxyport, "8080", 1, 0);
581        if(node->proxyuser == NULL || node->proxyuser[0] == '\0') node->proxyuser = ostrcat(node->proxyuser, "proxyuser", 1, 0);
582        if(node->proxypass == NULL || node->proxypass[0] == '\0') node->proxypass = ostrcat(node->proxypass, "proxypass", 1, 0);
583        if(node->ftpport == NULL || node->ftpport[0] == '\0') node->ftpport = ostrcat(node->ftpport, "21", 1, 0);
584        if(node->userauth == NULL || node->userauth[0] == '\0') node->userauth = ostrcat(node->userauth, "0", 1, 0);
585        if(node->proxyauth == NULL || node->proxyauth[0] == '\0') node->proxyauth = ostrcat(node->proxyauth, "0", 1, 0);
586        if(node->useproxy == NULL || node->useproxy[0] == '\0') node->useproxy = ostrcat(node->useproxy, "0", 1, 0);
587        if(node->usessl == NULL || node->usessl[0] == '\0') node->usessl = ostrcat(node->usessl, "0", 1, 0);
588        if(node->usedns == NULL || node->usedns[0] == '\0') node->usedns = ostrcat(node->usedns, "0", 1, 0);
589        if(node->dns == NULL || node->dns[0] == '\0') node->dns = ostrcat(node->dns, "dns.addresse.de", 1, 0);
590}
591
592void savenetworkbrowser(char* filename)
593{
594        struct networkbrowser* node = networkbrowser;
595        char* tmpstr = NULL, *savesettings = NULL;
596
597        if(filename == NULL) return;
598
599        savesettings = readnetworkbrowser(getconfig("automiscfile", NULL) , 1);
600
601        while(node != NULL)
602        {
603                savesettings = ostrcat(savesettings, node->sharename, 1, 0);
604
605                if(ostrcmp(node->mode, "0") == 0)
606                {
607                        savesettings = ostrcat(savesettings, "\t-fstype=cifs,rw,rsize=", 1, 0);
608                        savesettings = ostrcat(savesettings, node->rsize, 1, 0);
609                        savesettings = ostrcat(savesettings, ",wsize=", 1, 0);
610                        savesettings = ostrcat(savesettings, node->wsize, 1, 0);
611                       
612                        if(ostrcmp(node->userauth, "1") == 0)
613                        {
614                                savesettings = ostrcat(savesettings, ",user=", 1, 0);
615                                savesettings = ostrcat(savesettings, node->username, 1, 0);
616                                savesettings = ostrcat(savesettings, ",pass=", 1, 0);
617                                savesettings = ostrcat(savesettings, node->password, 1, 0);
618                        }
619                        else
620                                savesettings = ostrcat(savesettings, ",user=,pass=", 1, 0);
621                       
622                        savesettings = ostrcat(savesettings, "\t://", 1, 0);
623                        if(ostrcmp(node->usedns, "1") == 0)
624                                savesettings = ostrcat(savesettings, node->dns, 1, 0);
625                        else
626                        {
627                                tmpstr = fixip(node->ip, 1);
628                                savesettings = ostrcat(savesettings, tmpstr, 1, 0);
629                                free(tmpstr); tmpstr = NULL;
630                        }
631                        savesettings = ostrcat(savesettings, "/", 1, 0);
632                        savesettings = ostrcat(savesettings, node->sharedir, 1, 0);
633                        savesettings = ostrcat(savesettings, "\n", 1, 0);
634                }
635                else if(ostrcmp(node->mode, "1") == 0)
636                {
637                        savesettings = ostrcat(savesettings, "\t-fstype=nfs,", 1, 0);
638                        savesettings = ostrcat(savesettings, node->options, 1, 0);
639                        savesettings = ostrcat(savesettings, ",nolock", 1, 0);
640                        savesettings = ostrcat(savesettings, ",rsize=", 1, 0);
641                        savesettings = ostrcat(savesettings, node->rsize, 1, 0);
642                        savesettings = ostrcat(savesettings, ",wsize=", 1, 0);
643                        savesettings = ostrcat(savesettings, node->wsize, 1, 0);
644                        savesettings = ostrcat(savesettings, ",", 1, 0);
645                        savesettings = ostrcat(savesettings, node->protocol, 1, 0);
646                        savesettings = ostrcat(savesettings, "\t", 1, 0);
647                        if(ostrcmp(node->usedns, "1") == 0)
648                                savesettings = ostrcat(savesettings, node->dns, 1, 0);
649                        else
650                        {
651                                tmpstr = fixip(node->ip, 1);
652                                savesettings = ostrcat(savesettings, tmpstr, 1, 0);
653                                free(tmpstr); tmpstr = NULL;
654                        }
655                        savesettings = ostrcat(savesettings, ":/", 1, 0);
656                        savesettings = ostrcat(savesettings, node->sharedir, 1, 0);
657                        savesettings = ostrcat(savesettings, "\n", 1, 0);
658                }
659                else if(ostrcmp(node->mode, "2") == 0)
660                {
661                        savesettings = ostrcat(savesettings, "\t-fstype=ftpfs,", 1, 0);
662                        savesettings = ostrcat(savesettings, node->options, 1, 0);
663// not working nolock...no_verify_hostname...
664//                      savesettings = ostrcat(savesettings, ",nolock,allow_other,nonempty,nodev,noatime,kernel_cache,auto_cache,disable_epsv,skip_pasv_ip,no_verify_peer,no_verify_hostname", 1, 0);
665                        savesettings = ostrcat(savesettings, ",allow_other,nonempty,nodev,noatime,kernel_cache,auto_cache,disable_epsv,skip_pasv_ip,no_verify_peer", 1, 0);
666
667                        if(ostrcmp(node->usessl, "1") == 0)
668                        {
669                                savesettings = ostrcat(savesettings, ",", 1, 0);
670                                savesettings = ostrcat(savesettings, node->ssl, 1, 0);
671                        }
672
673                        if(ostrcmp(node->useproxy, "1") == 0)
674                        {
675                                savesettings = ostrcat(savesettings, ",proxy=", 1, 0);
676                                tmpstr = fixip(node->proxyip, 1);
677                                savesettings = ostrcat(savesettings, tmpstr, 1, 0);
678                                free(tmpstr); tmpstr = NULL;
679                                savesettings = ostrcat(savesettings, "\\:", 1, 0);
680                                savesettings = ostrcat(savesettings, node->proxyport, 1, 0);
681                        }
682                        if(ostrcmp(node->useproxy, "1") == 0)
683                        {
684                                savesettings = ostrcat(savesettings, ",", 1, 0);
685                                savesettings = ostrcat(savesettings, node->proxy, 1, 0);
686                        }
687
688                        if(ostrcmp(node->proxyauth, "1") == 0)
689                        {
690                                savesettings = ostrcat(savesettings, ",proxy_user=", 1, 0);
691                                savesettings = ostrcat(savesettings, node->proxyuser, 1, 0);
692                                savesettings = ostrcat(savesettings, "\\:", 1, 0);
693                                savesettings = ostrcat(savesettings, node->proxypass, 1, 0);
694                        }
695
696                        savesettings = ostrcat(savesettings, "\t:ftp\\://", 1, 0);
697                        if(ostrcmp(node->userauth, "1") == 0)
698                        {
699                                savesettings = ostrcat(savesettings, node->username, 1, 0);
700                                savesettings = ostrcat(savesettings, "\\:", 1, 0);
701                                savesettings = ostrcat(savesettings, node->password, 1, 0);
702                                savesettings = ostrcat(savesettings, "@", 1, 0);
703                        }
704
705                        if(ostrcmp(node->usedns, "1") == 0)
706                                savesettings = ostrcat(savesettings, node->dns, 1, 0);
707                        else
708                        {
709                                tmpstr = fixip(node->ip, 1);
710                                savesettings = ostrcat(savesettings, tmpstr, 1, 0);
711                                free(tmpstr); tmpstr = NULL;
712                        }
713                       
714                        savesettings = ostrcat(savesettings, "\\:", 1, 0);
715
716                        tmpstr = fixport(node->ftpport, 1);
717                        savesettings = ostrcat(savesettings, fixport(tmpstr, 1), 1, 0);
718                        free(tmpstr); tmpstr = NULL;
719
720                        if(ostrcmp(node->sharedir, "sharedir") != 0)
721                        {
722                                node->sharedir = string_replace_all("//", "", node->sharedir, 1);
723                                if(!ostrncmp("/", node->sharedir, 1))
724                                        savesettings = ostrcat(savesettings, "/", 1, 0);                               
725                                else
726                                        savesettings = ostrcat(savesettings, "//", 1, 0);
727
728                                savesettings = ostrcat(savesettings, node->sharedir, 1, 0);
729                        }
730
731                        savesettings = ostrcat(savesettings, "\n", 1, 0);
732                }
733               
734                node = node->next;
735        }
736
737        if(savesettings != NULL)
738        {
739                struct skin* loadmediadb = getscreen("loading");
740                struct skin* blackscreen = getscreen("blackscreen");
741                drawscreen(blackscreen, 0, 0);
742                drawscreen(loadmediadb, 0, 0); 
743
744                writesys(getconfig("automiscfile", NULL), savesettings, 0);
745                system("hotplug.sh first &");
746        }
747
748        debugnetworkbrowser(node);
749        debug(70, "savesettings: %s", savesettings);
750        debug(70, "--------------------");
751
752        free(savesettings); savesettings = NULL;
753}
754
755void copynetworkbrowser(struct networkbrowser* from, struct networkbrowser* to, char* sharename)
756{
757        if(from == NULL || to == NULL) return;
758
759        to->mode = ostrcat(from->mode, NULL, 0, 0);
760        to->sharename = ostrcat(sharename, NULL, 0, 0);
761        to->ip = ostrcat(from->ip, NULL, 0, 0);
762        to->sharedir = ostrcat(from->sharedir, NULL, 0, 0);
763        to->username = ostrcat(from->username, NULL, 0, 0);
764        to->password = ostrcat(from->password, NULL, 0, 0);
765        to->rsize = ostrcat(from->rsize, NULL, 0, 0);
766        to->wsize = ostrcat(from->wsize, NULL, 0, 0);
767        to->protocol = ostrcat(from->protocol, NULL, 0, 0);
768        to->options = ostrcat(from->options, NULL, 0, 0);
769        to->ssl = ostrcat(from->ssl, NULL, 0, 0);
770        to->proxy = ostrcat(from->proxy, NULL, 0, 0);
771        to->proxyip = ostrcat(from->proxyip, NULL, 0, 0);
772        to->proxyport = ostrcat(from->proxyport, NULL, 0, 0);
773        to->proxyuser = ostrcat(from->proxyuser, NULL, 0, 0);
774        to->proxypass = ostrcat(from->proxypass, NULL, 0, 0);
775        to->ftpport = ostrcat(from->ftpport, NULL, 0, 0);
776        to->userauth = ostrcat(from->userauth, NULL, 0, 0);
777        to->proxyauth = ostrcat(from->proxyauth, NULL, 0, 0);
778        to->useproxy = ostrcat(from->useproxy, NULL, 0, 0);
779        to->usessl = ostrcat(from->usessl, NULL, 0, 0);
780        to->usedns = ostrcat(from->usedns, NULL, 0, 0);
781        to->dns = ostrcat(from->dns, NULL, 0, 0);
782}
783
784//flag 0: read and add to struct
785//flag 1: read and build string
786char* readnetworkbrowser(char* filename, int flag)
787{
788        FILE *fd = NULL;
789        char *fileline = NULL, *tmpstr = NULL;
790        int linecount = 0;
791
792        fileline = malloc(MINMALLOC);
793        if(fileline == NULL)
794        {
795                err("no memory");
796                return NULL;
797        }
798
799        fd = fopen(filename, "r");
800        if(fd == NULL)
801        {
802                perr("can't open %s", filename);
803                free(fileline);
804                return NULL;
805        }
806
807        while(fgets(fileline, MINMALLOC, fd) != NULL)
808        {
809                if(flag == 0)
810                {
811                        if(fileline[0] == '#' || fileline[0] == '\n')
812                                continue;
813                        if(fileline[strlen(fileline) - 1] == '\n')
814                                fileline[strlen(fileline) - 1] = '\0';
815                        if(fileline[strlen(fileline) - 1] == '\r')
816                                fileline[strlen(fileline) - 1] = '\0';
817       
818                        linecount++;
819               
820                        if(fileline != NULL)
821                                addnetworkbrowser(fileline, linecount, NULL);
822                }
823                if(flag == 1)
824                {
825                        if(ostrstr(fileline, "-fstype=cifs") != NULL) continue;
826                        if(ostrstr(fileline, "-fstype=nfs") != NULL) continue;
827                        if(ostrstr(fileline, "-fstype=ftpfs") != NULL) continue;
828                        tmpstr = ostrcat(tmpstr, fileline, 1, 0);
829                }
830        }
831
832        free(fileline);
833        fclose(fd);
834        return tmpstr;
835}
836
837void getnetworkbrowser_dns(struct inetwork* net, struct menulist** mlist)
838{
839        int i = 0;
840        netinfo* nInfo;
841        char *tmpstr = NULL, *s = NULL, *tmpstr2 = NULL;
842
843        if(net == NULL || mlist == NULL) return;
844
845        tmpstr2 = ostrcat(tmpstr2, net->ip, 1, 0);
846        tmpstr = fixip(tmpstr2, 1);
847        free(tmpstr2); tmpstr2 = NULL;
848
849        if(ostrcmp(tmpstr, "0.0.0.0") == 0)
850        {
851                free(tmpstr); tmpstr = NULL;
852                return;
853        }
854       
855        s = ostrcat(s, tmpstr, 1, 0);
856        free(tmpstr); tmpstr = NULL;
857
858        s = ostrcat(s, "/24", 1, 0);
859        debug(70, "start scanning: %s", s);
860       
861        nInfo = newNetInfo();
862        netzInfo(s, nInfo);
863       
864        for(i = 0; i < 256; i++)
865        {
866                usleep(100000);
867
868                if(nInfo[i].ip[0] == '\0')
869                        break;
870                else
871                {
872                        debug(70, "service: %s", nInfo[i].service);
873                        debug(70, "ip: %s", nInfo[i].ip);
874                        debug(70, "name: %s", nInfo[i].name);
875                        debug(70, "mac: %s", nInfo[i].mac);
876                        tmpstr = ostrcat(tmpstr , strstrip(nInfo[i].domain), 1, 0);
877                        tmpstr = ostrcat(tmpstr , " (", 1, 0);
878
879                        tmpstr = ostrcat(tmpstr , strstrip(nInfo[i].ip), 1, 0);
880                        tmpstr = ostrcat(tmpstr , ")", 1, 0);
881                        struct menulist* tmpmlist = addmenulist(mlist, tmpstr, NULL, "netbrowser_scanshares.png", 0, 0);
882                        changemenulistparam(tmpmlist, nInfo[i].ip, strstrip(nInfo[i].name), NULL, NULL);
883                        free(tmpstr); tmpstr = NULL;
884
885                }
886        }
887
888        freeNetInfo(nInfo);
889        free(s); s = NULL;
890}
891
892void getnetworkbrowser_cifs(struct menulist** mlist, char* s, char* r, char* u, char* p)
893{
894        int i = 0, error = 0, found = 0;
895        char* tmpstr = NULL;
896        shareinfo* sInfo;
897
898        if(s == NULL || r == NULL || u == NULL || p == NULL || mlist == NULL) return;
899       
900        sInfo = newShareInfo();
901        smbInfo(s, r, u, p, sInfo);
902       
903        for (i = 0; i < 128; i++)
904        {
905                usleep(100000);
906
907                if(sInfo[i].sharename[0] == '\0')
908                {
909                        error = 1;
910                        break;
911                }
912                else
913                {
914                        debug(70, "----------------------------------------------------------", sInfo[i].sharename);
915                        debug(70, "sharename: %s", sInfo[i].sharename);
916                        debug(70, "type: %s", sInfo[i].typ);
917                        debug(70, "comment: %s", sInfo[i].comment);
918                        debug(70, "rech: %s", r);
919                        debug(70, "rechip: %s", s);
920                        debug(70, "----------------------------------------------------------", sInfo[i].sharename);                   
921                        tmpstr = ostrcat(tmpstr , "(cifs) ", 1, 0);
922                        tmpstr = ostrcat(tmpstr , strstrip(s), 1, 0);
923                        tmpstr = ostrcat(tmpstr , ": /", 1, 0);
924                        tmpstr = ostrcat(tmpstr , strstrip(sInfo[i].sharename), 1, 0);
925                        struct menulist* tmpmlist = addmenulist(mlist, tmpstr, NULL, "netbrowser_cifs.png", 0, 0);
926                        changemenulistparam(tmpmlist, sInfo[i].sharename, NULL, NULL, NULL);
927                        free(tmpstr); tmpstr = NULL;
928                        found = 1;
929                }
930        }
931
932        if(error == 1 && found == 0)
933        {
934                char* cmd = NULL, *bin = NULL;
935                cmd = ostrcat("which smbclient3 | wc -l", NULL , 0, 0);
936                debug(70, "cmd: %s", cmd);
937
938                char* tmpstr1 = command(cmd);
939                debug(70, "---- binary check ----");
940                debug(70, "%s", tmpstr1);
941                debug(70, "----------------------");
942                if(!ostrncmp("0", tmpstr1, 1))
943                {
944                        textbox(_("Message"), _("For Better Win7 Support install please Tpk Install > Network > Smbclient"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 5, 0);
945                        bin = ostrcat("smbclient", NULL , 0, 0);
946                }
947                else
948                        bin = ostrcat("smbclient3", NULL , 0, 0);
949
950                free(cmd), cmd = NULL;
951                free(tmpstr1), tmpstr1 = NULL;
952
953                cmd = ostrcat(bin, " -L //" , 0, 0);
954                cmd = ostrcat(cmd , r, 1, 0);
955                cmd = ostrcat(cmd, " -U '" , 1, 0);
956                cmd = ostrcat(cmd, u , 1, 0);
957                cmd = ostrcat(cmd, "%" , 1, 0);
958                cmd = ostrcat(cmd, p , 1, 0);
959                cmd = ostrcat(cmd, "'" , 1, 0);
960                debug(70, "cmd: %s", cmd);
961
962                tmpstr1 = command(cmd);
963                debug(70, "------ result 1 ------");
964                debug(70, "%s", tmpstr1);
965                debug(70, "----------------------");
966
967                char* tmpstr2 = NULL;
968                if(ostrstr(tmpstr1, "This machine has a browse list:") != NULL)
969                        tmpstr2 = string_resub("---------      ----      -------", "This machine has a browse list:", tmpstr1, 0);
970                else
971                        tmpstr2 = string_resub("---------       ----      -------", "Server               Comment", tmpstr1, 0);
972
973                debug(70, "------ result 2 ------");
974                debug(70, "%s", tmpstr2);
975                debug(70, "----------------------");
976                               
977                free(tmpstr1), tmpstr1 = NULL;
978
979                if(tmpstr2 == NULL)
980                {
981                        free(cmd), cmd = NULL;
982                        cmd = ostrcat(bin, "  -N -L //" , 0, 0);
983                        cmd = ostrcat(cmd , r, 1, 0);
984                        debug(70, "cmd: %s", cmd);
985       
986                        tmpstr1 = command(cmd);
987                        debug(70, "------ result 3 ------");
988                        debug(70, "%s", tmpstr1);
989                        debug(70, "----------------------");
990
991                        free(tmpstr2), tmpstr2 = NULL;
992                        if(ostrstr(tmpstr1, "This machine has a browse list:") != NULL)
993                                tmpstr2 = string_resub("---------      ----      -------", "This machine has a browse list:", tmpstr1, 0);
994                        else
995                                tmpstr2 = string_resub("---------       ----      -------", "Server               Comment", tmpstr1, 0);
996
997                        debug(70, "------ result 4 ------");
998                        debug(70, "%s", tmpstr2);
999                        debug(70, "----------------------");
1000
1001                        if(tmpstr2 == NULL)
1002                        {
1003                                if(ostrstr(tmpstr1, "Anonymous login successful") != NULL && ostrstr(tmpstr1, "Error returning browse list: NT_STATUS_ACCESS_DENIED") != NULL)
1004                                {
1005                                        textbox(_("Message"), _("Anonymous login Access Denied !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 5, 0);
1006                                        found = 1;
1007                                }
1008                                else if(ostrstr(tmpstr1, "Anonymous login successful") != NULL)
1009                                        textbox(_("Message"), _("Anonymous login successful"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 5, 0);
1010                                else if(ostrstr(tmpstr1, "Access denied") != NULL)
1011                                        textbox(_("Message"), _("Anonymous login Access Denied !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 5, 0);
1012                        }
1013                       
1014                        free(tmpstr1), tmpstr1 = NULL;
1015                }
1016
1017                if(tmpstr2 != NULL)
1018                {
1019                        if(ostrstr(tmpstr2, "Anonymous login successful") != NULL && ostrstr(tmpstr2, "Error returning browse list: NT_STATUS_ACCESS_DENIED") != NULL)
1020                        {
1021                                textbox(_("Message"), _("Anonymous login Access Denied !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 5, 0);
1022                                found = 1;
1023                        }
1024                        else if(ostrstr(tmpstr2, "Anonymous login successful") != NULL)
1025                                textbox(_("Message"), _("Anonymous login successful"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 5, 0);
1026                                       
1027                        char* tmpstr3 = ostrcat("\t", tmpstr2, 0, 0);
1028
1029                        int count = 0;
1030                        int j;
1031                        struct splitstr* ret1 = NULL;
1032                        ret1 = strsplit(tmpstr3, "\n", &count);
1033
1034                        if(found == 0 && ret1 != NULL && count > 0)
1035                        {
1036                                int max = count;
1037                                for(j = 0; j < max; j++)
1038                                {
1039                                        if(!ostrncmp("Error returning", ret1[j].part, 15))
1040                                        {
1041                                                debug(70, "break: Error returning: %s\n", ret1[j].part);
1042                                                break;
1043                                        }
1044
1045                                        if(ostrncmp("\t", ret1[j].part, 1))
1046                                        {
1047                                                debug(70, "continue: no tab: %s\n", ret1[j].part);
1048                                                continue;
1049                                        }
1050
1051                                        char* tmpstr4 = ostrcat(ret1[j].part, NULL, 0, 0);
1052                                       
1053                                        strstrip(tmpstr4);
1054                                        char* tmpstr5 = ostrcat(tmpstr4 + 15, NULL, 0, 0);
1055                                        char* tmpstr7 = ostrcat(tmpstr4 + 25, NULL, 0, 0);
1056                                        free(tmpstr4), tmpstr4 = NULL;
1057
1058                                        char* tmpstr6 = string_resub("\t", tmpstr5, ret1[j].part, 0);
1059
1060                                        stringreplacechar(tmpstr5, ' ', '\0');                                                                 
1061
1062                                        debug(70, "----------------------------------------------------------", sInfo[i].sharename);
1063                                        debug(70, "sharename: %s", tmpstr6);
1064                                        debug(70, "type: %s", tmpstr5);
1065                                        debug(70, "comment: %s", tmpstr7);
1066                                        debug(70, "rech: %s", r);
1067                                        debug(70, "rechip: %s", s);
1068                                        debug(70, "----------------------------------------------------------", sInfo[i].sharename);
1069                                               
1070                                        tmpstr = ostrcat(tmpstr , "(cifs) ", 1, 0);
1071                                        tmpstr = ostrcat(tmpstr , strstrip(s), 1, 0);
1072                                        tmpstr = ostrcat(tmpstr , ": /", 1, 0);
1073                                        tmpstr = ostrcat(tmpstr , strstrip(tmpstr6), 1, 0);
1074                                        free(tmpstr5), tmpstr5 = NULL; 
1075                                        free(tmpstr7), tmpstr7 = NULL;
1076/*
1077                                        strstrip(ret1[j].part);
1078                                        stringreplacechar(ret1[j].part, ' ', '\0');
1079
1080                                        tmpstr = ostrcat(tmpstr , "(cifs) ", 1, 0);
1081                                        tmpstr = ostrcat(tmpstr , strstrip(s), 1, 0);
1082                                        tmpstr = ostrcat(tmpstr , ": /", 1, 0);
1083                                        tmpstr = ostrcat(tmpstr , strstrip(ret1[j].part), 1, 0);
1084                                        struct menulist* tmpmlist = addmenulist(mlist, tmpstr, NULL, "netbrowser_cifs.png", 0, 0);
1085                                        changemenulistparam(tmpmlist, ret1[j].part, NULL, NULL, NULL);
1086                                        free(tmpstr); tmpstr = NULL;
1087*/
1088                                        struct menulist* tmpmlist = addmenulist(mlist, tmpstr, NULL, "netbrowser_cifs.png", 0, 0);
1089                                        changemenulistparam(tmpmlist, tmpstr6, NULL, NULL, NULL);
1090                                        free(tmpstr); tmpstr = NULL;
1091                                        free(tmpstr6), tmpstr6 = NULL;
1092                                }
1093                        }
1094                        free(ret1), ret1 = NULL;
1095                        free(tmpstr3), tmpstr3 = NULL;
1096                }
1097                free(cmd), cmd = NULL;
1098                free(tmpstr1), tmpstr1 = NULL;
1099                free(tmpstr2), tmpstr2 = NULL;
1100        }
1101
1102        freeShareInfo(sInfo);
1103}
1104
1105void  getnetworkbrowser_nfs(struct menulist** mlist, char* s, char* r)
1106{
1107        char* tmpstr = NULL, *tmpstr1 = NULL;
1108        nfsinfo* nfsInfo;
1109        int i = 0, err = 0;
1110
1111        if(s == NULL || r == NULL || mlist == NULL) return;
1112       
1113        nfsInfo = newNfsInfo();
1114        err = showNfsShare(s, nfsInfo);
1115       
1116        if (err == 0)
1117        {
1118                for (i = 0; i < 256; i++)
1119                {
1120                        usleep(100000);
1121
1122                        if(nfsInfo[i].ip[0] == '\0') {
1123                                break;
1124                        }
1125                        else
1126                        {
1127                                debug(70, "ip: %s", nfsInfo[i].ip);
1128                                debug(70, "share: %s", nfsInfo[i].share);
1129                                debug(70, "nfsShare: nfsShare");
1130                                debug(70, "rech: %s", r);
1131                                debug(70, "rechip: %s", s);
1132                                tmpstr = ostrcat(tmpstr , "(nfs) ", 1, 0);
1133                                tmpstr = ostrcat(tmpstr , strstrip(s), 1, 0);
1134                                tmpstr = ostrcat(tmpstr , ": ", 1, 0);
1135                                tmpstr = ostrcat(tmpstr , strstrip(nfsInfo[i].share), 1, 0);
1136                                struct menulist* tmpmlist = addmenulist(mlist, tmpstr, NULL, "netbrowser_nfs.png", 0, 0);
1137                                tmpstr1 = nfsInfo[i].share;
1138                                if(tmpstr1 != NULL && strlen(tmpstr1) > 0) tmpstr1++;
1139                                changemenulistparam(tmpmlist, tmpstr1, NULL, NULL, NULL);
1140                                free(tmpstr); tmpstr = NULL;
1141                        }
1142                }
1143        }
1144
1145        freeNfsInfo(nfsInfo);
1146}
1147
1148void screennetworkbrowser_scan()
1149{
1150        struct menulist* mlist = NULL, *mbox = NULL;
1151        struct menulist* mlist1 = NULL, *mbox1 = NULL;
1152        struct skin* net_scan = getscreen("networkbrowser_scan");
1153        struct skin* titletext = getscreennode(net_scan, "titletext");
1154        struct skin* b1 = getscreennode(net_scan, "b1");
1155        struct skin* b2 = getscreennode(net_scan, "b2");
1156        struct skin* load = getscreen("loading");
1157        struct inetwork *net = inetwork;
1158       
1159        status.hangtime = 99999;
1160        changetitle(net_scan, _("Scanning Network Shares, please wait !!"));
1161        if(titletext != status.skinerr) changetext(titletext, _("Scanning Network Shares, please wait !!"));
1162        b1->hidden = YES;
1163        b2->hidden = YES;
1164
1165        net = inetwork;
1166        drawscreen(net_scan, 0, 0);
1167        drawscreen(load, 0, 0);
1168
1169        while(net != NULL)
1170        {
1171                if(net->flag == 1)
1172                        getnetworkbrowser_dns(net, &mlist);
1173                net = net->next;
1174        }
1175        clearscreen(load);
1176
1177start:
1178        b1->hidden = NO;
1179        b2->hidden = NO;
1180
1181        mbox = menulistbox(mlist, "networkbrowser_scan", _("Networkbrowser - show scanned DNS-Shares"), _("Choose your DNS-Share from the following list"), "%pluginpath%/networkbrowser/skin/", NULL, 1, 0);
1182
1183        if(mbox != NULL)
1184        {
1185                drawscreen(load, 0, 0);
1186
1187                char* user = NULL, *pass = NULL;
1188
1189                if(textbox(_("Message"), _("Use User authentication ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 700, 200, 0, 0) == 1)
1190                {
1191                        user = ostrcat(user, getconfig("netbrowser_user", NULL), 1, 0);
1192                        pass = ostrcat(pass, getconfig("netbrowser_pass", NULL), 1, 0);
1193                }
1194
1195                if(user == NULL)
1196                        user = ostrcat("user", NULL, 0, 0);
1197                if(pass == NULL)
1198                        pass = ostrcat("pass", NULL, 0, 0);
1199
1200                debug(70, "user: %s",user);
1201                debug(70, "pass: %s",pass);
1202
1203                getnetworkbrowser_cifs(&mlist1, mbox->param, mbox->param1, user, pass);         
1204                getnetworkbrowser_nfs(&mlist1, mbox->param, mbox->param1);
1205                clearscreen(load);
1206start1:
1207                mbox1 = menulistboxext(mlist1, "networkbrowser_scan", _("Networkbrowser - show scanned cifs/nfs-Shares"), _("Choose your cifs/nfs Share from the following list"), "%pluginpath%/networkbrowser/skin/", NULL, 1, NULL, 0);
1208                if(mbox1 != NULL && mbox->name != NULL)
1209                {
1210                        if(ostrstr(mbox1->name, "(cifs)") != NULL)
1211                        {
1212                                debug(70, "start addshare cifs");
1213                                struct networkbrowser* node = addnetworkbrowser(NULL, 1, NULL);
1214                                if(node != NULL)
1215                                {
1216                                        node->mode = ostrcat("0", NULL, 0, 0);
1217                                        node->ip = ostrcat(mbox->param, NULL, 0, 0);
1218                                        char* tmpstr3 = ostrcat(mbox->param1, NULL, 0, 0);
1219                                        string_remove_whitechars(tmpstr3);
1220                                        node->sharename = ostrcat(tmpstr3, NULL, 0, 0);
1221                                        node->dns = ostrcat(tmpstr3, NULL, 0, 0);
1222                                        free(tmpstr3), tmpstr3 = NULL;
1223                                        node->sharedir = ostrcat(mbox1->param, NULL, 0, 0);
1224                                        node->username = ostrcat(user, NULL, 0, 0);
1225                                        node->password = ostrcat(pass, NULL, 0, 0);
1226                                        free(user), user = NULL;
1227                                        free(pass), pass = NULL;
1228                                        screennetworkbrowser_addshare(node, 1);
1229                                }
1230                        }
1231                        else if(ostrstr(mbox1->name, "(nfs)") != NULL)
1232                        {
1233                                debug(70, "start addshare nfs");
1234                                struct networkbrowser* node = addnetworkbrowser(NULL, 1, NULL);
1235                                if(node != NULL)
1236                                {
1237                                        node->mode = ostrcat("1", NULL, 0, 0);
1238                                        node->ip = ostrcat(mbox->param, NULL, 0, 0);
1239                                        char* tmpstr3 = ostrcat(mbox->param1, NULL, 0, 0);
1240                                        string_remove_whitechars(tmpstr3);
1241                                        node->sharename = ostrcat(tmpstr3, NULL, 0, 0);
1242                                        node->dns = ostrcat(tmpstr3, NULL, 0, 0);
1243                                        free(tmpstr3), tmpstr3 = NULL;
1244                                        node->sharedir = ostrcat(mbox1->param, NULL, 0, 0);
1245                                        screennetworkbrowser_addshare(node, 1);
1246                                }
1247                        }
1248                        goto start1;
1249                }
1250                freemenulist(mlist1, 1); mlist1 = NULL;
1251                free(user), user = NULL;
1252                free(pass), pass = NULL;
1253                goto start;
1254        }
1255
1256        freemenulist(mlist, 1); mlist = NULL;
1257        freemenulist(mlist1, 1); mlist1 = NULL;
1258        delownerrc(net_scan);
1259        clearscreen(net_scan);
1260        status.hangtime = getconfigint("hangtime", NULL);
1261}
1262
1263//flag = 0: don't start hotplug.sh
1264//flag = 1: start hotplug.sh
1265void addhddreplacement(char* sharename, int flag)
1266{
1267        struct skin* loadmediadb = getscreen("loading");
1268        struct skin* blackscreen = getscreen("blackscreen");
1269        drawscreen(blackscreen, 0, 0);
1270        drawscreen(loadmediadb, 0, 0);
1271
1272        char* tmpstr = NULL;
1273
1274        if(sharename == NULL) return;
1275        unlink("/media/hdd");
1276
1277        tmpstr = ostrcat("/media/net/", sharename, 0, 0);
1278        symlink(tmpstr, "/media/hdd");
1279        free(tmpstr); tmpstr = NULL;
1280
1281        writesys(getconfig("recordsharefile", NULL), sharename, 0);
1282        if(flag == 1) system("hotplug.sh first &");
1283}
1284
1285
1286//flag = 0: don't start hotplug.sh
1287//flag = 1: start hotplug.sh
1288void delhddreplacement(int flag)
1289{
1290        struct skin* loadmediadb = getscreen("loading");
1291        struct skin* blackscreen = getscreen("blackscreen");
1292        drawscreen(blackscreen, 0, 0);
1293        drawscreen(loadmediadb, 0, 0); 
1294
1295        unlink("/media/hdd");
1296        unlink(getconfig("recordsharefile", NULL));
1297        if(flag == 1) system("hotplug.sh first &");
1298}
1299
1300int checkhddreplacement(char* sharename)
1301{
1302        char* recordshare = readfiletomem(getconfig("recordsharefile", NULL), 0);
1303
1304        if(recordshare != NULL)
1305        {
1306                if(ostrcmp(sharename, recordshare) == 0)
1307                {
1308                        free(recordshare); recordshare = NULL;
1309                        return 1;
1310                }
1311  }
1312
1313        free(recordshare); recordshare = NULL;
1314        return 0;
1315}
1316
1317int checknetworkbrowserexist(struct networkbrowser* node)
1318{
1319        struct networkbrowser* tmpbrowser = networkbrowser;
1320
1321        if(node == NULL) return 0;
1322
1323        while(tmpbrowser != NULL)
1324        {
1325                if(tmpbrowser != node && ostrcmp(tmpbrowser->sharename, node->sharename) == 0)
1326                        return 1;
1327                tmpbrowser = tmpbrowser->next;
1328        }
1329
1330        return 0;
1331}
1332
1333void changemodenetworkbrowser(struct networkbrowser* node, struct skin* titletext, struct skin* net_addshare, struct skin* skin_username, struct skin* skin_password, struct skin* skin_protocol, struct skin* skin_rsize, struct skin* skin_wsize, struct skin* skin_options, struct skin* skin_ssl, struct skin* skin_proxy, struct skin* skin_proxyip, struct skin* skin_proxyport, struct skin* skin_proxyuser, struct skin* skin_proxypass, struct skin* skin_ftpport, struct skin* skin_userauth, struct skin* skin_proxyauth, struct skin* skin_useproxy, struct skin* skin_usessl, struct skin* skin_sharedir, struct skin* skin_usedns, struct skin* skin_dns, struct skin* skin_ip)
1334{
1335        char* tmpstr = NULL;
1336        if(node == NULL) return;
1337
1338        if(ostrcmp(node->mode, "0") == 0)
1339        {
1340                tmpstr = ostrcat(tmpstr, _("Add Cifs Network Share"), 1, 0);
1341                tmpstr = ostrcat(tmpstr, " (", 1, 0);
1342                tmpstr = ostrcat(tmpstr, strstrip(node->sharename), 1, 0);
1343                tmpstr = ostrcat(tmpstr, ")", 1, 0);
1344                changetitle(net_addshare, tmpstr);
1345                if(titletext != status.skinerr) changetext(titletext, tmpstr);
1346                free(tmpstr); tmpstr = NULL;
1347
1348                skin_protocol->hidden = YES;
1349                skin_rsize->hidden = NO;
1350                skin_wsize->hidden = NO;
1351                skin_options->hidden = YES;
1352                skin_ssl->hidden = YES;
1353                skin_proxy->hidden = YES;
1354                skin_proxyip->hidden = YES;
1355                skin_proxyport->hidden = YES;
1356                skin_proxyuser->hidden = YES;
1357                skin_proxypass->hidden = YES;
1358                skin_ftpport->hidden = YES;
1359                skin_userauth->hidden = NO;             
1360                skin_proxyauth->hidden = YES;
1361                skin_useproxy->hidden = YES;
1362                skin_usessl->hidden = YES;
1363                skin_sharedir->hidden = NO;
1364                skin_usedns->hidden = NO;
1365
1366                if(ostrcmp(node->usedns, "0") == 0)
1367                {
1368                        skin_dns->hidden = YES;
1369                        skin_ip->hidden = NO;
1370                }
1371                else
1372                {
1373                        skin_dns->hidden = NO;
1374                        skin_ip->hidden = YES;         
1375                }
1376
1377                if(ostrcmp(node->userauth, "0") == 0)
1378                {
1379                        skin_username->hidden = YES;
1380                        skin_password->hidden = YES;
1381                }
1382                else
1383                {
1384                        skin_username->hidden = NO;
1385                        skin_password->hidden = NO;
1386                }
1387        }
1388        else if(ostrcmp(node->mode, "1") == 0)
1389        {
1390                tmpstr = ostrcat(tmpstr, _("Add Nfs Network Share"), 1, 0);
1391                tmpstr = ostrcat(tmpstr, " (", 1, 0);
1392                tmpstr = ostrcat(tmpstr, strstrip(node->sharename), 1, 0);
1393                tmpstr = ostrcat(tmpstr, ")", 1, 0);
1394                changetitle(net_addshare, tmpstr);
1395                if(titletext != status.skinerr) changetext(titletext, tmpstr);
1396                free(tmpstr); tmpstr = NULL;
1397
1398                skin_username->hidden = YES;
1399                skin_password->hidden = YES;
1400                skin_protocol->hidden = NO;
1401                skin_rsize->hidden = NO;
1402                skin_wsize->hidden = NO;
1403                skin_options->hidden = NO;
1404                skin_ssl->hidden = YES;
1405                skin_proxy->hidden = YES;
1406                skin_proxyip->hidden = YES;
1407                skin_proxyport->hidden = YES;
1408                skin_proxyuser->hidden = YES;
1409                skin_proxypass->hidden = YES;
1410                skin_ftpport->hidden = YES;
1411                skin_userauth->hidden = YES;
1412                skin_proxyauth->hidden = YES;
1413                skin_useproxy->hidden = YES;
1414                skin_usessl->hidden = YES;
1415                skin_sharedir->hidden = NO;
1416                skin_usedns->hidden = NO;
1417                if(ostrcmp(node->usedns, "0") == 0)
1418                {
1419                        skin_dns->hidden = YES;
1420                        skin_ip->hidden = NO;
1421                }
1422                else
1423                {
1424                        skin_dns->hidden = NO;
1425                        skin_ip->hidden = YES;         
1426                }
1427        }
1428        else if(ostrcmp(node->mode, "2") == 0)
1429        {
1430                tmpstr = ostrcat(tmpstr, _("Add Ftpfs Network Share"), 1, 0);
1431                tmpstr = ostrcat(tmpstr, " (", 1, 0);
1432                tmpstr = ostrcat(tmpstr, strstrip(node->sharename), 1, 0);
1433                tmpstr = ostrcat(tmpstr, ")", 1, 0);
1434                changetitle(net_addshare, tmpstr);
1435                if(titletext != status.skinerr) changetext(titletext, tmpstr);
1436                free(tmpstr); tmpstr = NULL;
1437               
1438                skin_protocol->hidden = YES;
1439                skin_rsize->hidden = YES;
1440                skin_wsize->hidden = YES;
1441                skin_options->hidden = YES;
1442                skin_userauth->hidden = NO;
1443                skin_usessl->hidden = NO;
1444                skin_useproxy->hidden = NO;
1445                skin_ftpport->hidden = NO;
1446                skin_sharedir->hidden = NO;
1447                skin_usedns->hidden = NO;
1448               
1449                if(ostrcmp(node->userauth, "0") == 0)
1450                {
1451                        skin_username->hidden = YES;
1452                        skin_password->hidden = YES;
1453                }
1454                else
1455                {
1456                        skin_username->hidden = NO;
1457                        skin_password->hidden = NO;
1458                }
1459               
1460                if(ostrcmp(node->usessl, "0") == 0)
1461                        skin_ssl->hidden = YES;
1462                else
1463                        skin_ssl->hidden = NO;
1464
1465                if(ostrcmp(node->useproxy, "0") == 0)
1466                {
1467                        skin_proxy->hidden = YES;
1468                        skin_proxyip->hidden = YES;
1469                        skin_proxyport->hidden = YES;
1470                        skin_proxyuser->hidden = YES;
1471                        skin_proxypass->hidden = YES;
1472                        skin_proxyauth->hidden = YES;
1473                }
1474                else
1475                {
1476                        skin_proxy->hidden = NO;
1477                        skin_proxyip->hidden = NO;
1478                        skin_proxyport->hidden = NO;
1479                        skin_proxyauth->hidden = NO;
1480                        if(ostrcmp(node->proxyauth, "0") == 0)
1481                        {
1482                                skin_proxyuser->hidden = YES;
1483                                skin_proxypass->hidden = YES;
1484                        }
1485                        else
1486                        {
1487                                skin_proxyuser->hidden = NO;
1488                                skin_proxypass->hidden = NO;
1489                        }
1490                }
1491                if(ostrcmp(node->usedns, "0") == 0)
1492                {
1493                        skin_dns->hidden = YES;
1494                        skin_ip->hidden = NO;
1495                }
1496                else
1497                {
1498                        skin_dns->hidden = NO;
1499                        skin_ip->hidden = YES;         
1500                }
1501        }
1502}
1503
1504void screennetworkbrowser_addshare(struct networkbrowser* node, int newnode)
1505{
1506        int rcret = 0, save = 0;
1507        char* skinname = "networkbrowser_add_share";
1508        struct skin* net_addshare = getscreen(skinname);
1509        struct skin* titletext = getscreennode(net_addshare, "titletext");
1510        struct skin* listbox = getscreennode(net_addshare, "listbox");
1511        struct skin* tmp = NULL;
1512        struct skin* skin_sharename = getscreennode(net_addshare, "skin_sharename");
1513        struct skin* skin_ip = getscreennode(net_addshare, "skin_ipaddress");
1514        struct skin* skin_sharedir = getscreennode(net_addshare, "skin_sharedir");
1515        struct skin* skin_username = getscreennode(net_addshare, "skin_username");
1516        struct skin* skin_password = getscreennode(net_addshare, "skin_password");
1517        struct skin* skin_wsize = getscreennode(net_addshare, "skin_wsize");
1518        struct skin* skin_rsize = getscreennode(net_addshare, "skin_rsize");
1519        struct skin* skin_hddreplacement = getscreennode(net_addshare, "skin_hddreplacement");
1520        struct skin* skin_protocol = getscreennode(net_addshare, "skin_protocol");
1521        struct skin* skin_options = getscreennode(net_addshare, "skin_options");
1522        struct skin* skin_ssl = getscreennode(net_addshare, "skin_ssl");
1523        struct skin* skin_proxy = getscreennode(net_addshare, "skin_proxy");
1524        struct skin* skin_proxyip = getscreennode(net_addshare, "skin_proxyip");
1525        struct skin* skin_proxyport = getscreennode(net_addshare, "skin_proxyport");
1526        struct skin* skin_proxyuser = getscreennode(net_addshare, "skin_proxyuser");
1527        struct skin* skin_proxypass = getscreennode(net_addshare, "skin_proxypass");
1528        struct skin* skin_ftpport = getscreennode(net_addshare, "skin_ftpport");
1529        struct skin* skin_useproxy = getscreennode(net_addshare, "skin_useproxy");
1530        struct skin* skin_usessl = getscreennode(net_addshare, "skin_usessl");
1531        struct skin* skin_userauth = getscreennode(net_addshare, "skin_userauth");
1532        struct skin* skin_proxyauth = getscreennode(net_addshare, "skin_proxyauth");
1533        struct skin* skin_usedns = getscreennode(net_addshare, "skin_usedns");
1534        struct skin* skin_dns = getscreennode(net_addshare, "skin_dns");
1535        struct skin* skin_mode = getscreennode(net_addshare, "skin_mode");
1536        struct skin* b3 = getscreennode(net_addshare, "b3");
1537        char* tmpstr = NULL;
1538
1539        listbox->aktline = 1;
1540        listbox->aktpage = 1;
1541
1542        if(node == NULL)
1543        {
1544                node = addnetworkbrowser(NULL, 1, NULL);
1545                newnode = 1;
1546        }
1547        if(node == NULL) return;
1548       
1549        if(newnode == 0)
1550                b3->hidden = NO;
1551        else
1552                b3->hidden = YES;
1553
1554        setdefaultnetworkbrowser(node);
1555        debug(70, "after set defaut");
1556        debugnetworkbrowser(node);
1557        debug(70, "--------------------");
1558       
1559        addchoicebox(skin_mode, "0", _("cifs"));
1560        addchoicebox(skin_mode, "1", _("nfs"));
1561        addchoicebox(skin_mode, "2", _("ftpfs"));
1562        setchoiceboxselection(skin_mode, node->mode);
1563
1564        changemask(skin_sharename, "abcdefghijklmnopqrstuvwxyz");
1565        changeinput(skin_sharename, node->sharename);
1566
1567        tmpstr = fixip(node->ip, 0);
1568        changemask(skin_ip, "000.000.000.000");
1569        changeinput(skin_ip, tmpstr);
1570        free(tmpstr); tmpstr = NULL;
1571
1572        tmpstr = fixport(node->ftpport, 0);
1573        changemask(skin_ftpport, "00000");
1574        changeinput(skin_ftpport, tmpstr);
1575        free(tmpstr); tmpstr = NULL;
1576
1577        changemask(skin_sharedir, "abcdefghijklmnopqrstuvwxyz");
1578        changeinput(skin_sharedir, node->sharedir);
1579
1580        addchoicebox(skin_wsize, "32768", "32768");
1581        addchoicebox(skin_wsize, "49152", "49152");
1582        addchoicebox(skin_wsize, "65536", "65536");
1583        addchoicebox(skin_wsize, "4096", "4096");
1584        addchoicebox(skin_wsize, "8192", "8192");
1585        addchoicebox(skin_wsize, "16384", "16384");
1586        setchoiceboxselection(skin_wsize, node->wsize);
1587
1588        addchoicebox(skin_rsize, "32768", "32768");
1589        addchoicebox(skin_rsize, "49152", "49152");
1590        addchoicebox(skin_rsize, "65536", "65536");
1591        addchoicebox(skin_rsize, "4096", "4096");
1592        addchoicebox(skin_rsize, "8192", "8192");
1593        addchoicebox(skin_rsize, "16384", "16384");
1594        setchoiceboxselection(skin_rsize, node->rsize);
1595
1596        addchoicebox(skin_ssl, "ssl_try", _("ssl_try"));
1597        addchoicebox(skin_ssl, "ssl_control", _("ssl_control"));
1598        addchoicebox(skin_ssl, "ssl", _("ssl"));
1599        setchoiceboxselection(skin_ssl, node->ssl);
1600
1601        addchoicebox(skin_proxy, "socks5", _("socks5"));
1602        addchoicebox(skin_proxy, "socks4", _("socks4"));
1603        addchoicebox(skin_proxy, "html", _("html"));
1604        setchoiceboxselection(skin_proxy, node->proxy);
1605
1606        addchoicebox(skin_useproxy, "0", _("no"));
1607        addchoicebox(skin_useproxy, "1", _("yes"));
1608        setchoiceboxselection(skin_useproxy, node->useproxy);
1609
1610        addchoicebox(skin_usessl, "0", _("no"));
1611        addchoicebox(skin_usessl, "1", _("yes"));
1612        setchoiceboxselection(skin_usessl, node->usessl);
1613
1614        if(ostrcmp(node->username, "user") != 0 || ostrcmp(node->password, "pass") != 0)
1615        {
1616                tmpstr = ostrcat(tmpstr, "1", 1, 0);
1617                node->userauth = ostrcat(tmpstr, NULL, 0, 0);
1618        }
1619        addchoicebox(skin_userauth, "0", _("no"));
1620        addchoicebox(skin_userauth, "1", _("yes"));
1621        setchoiceboxselection(skin_userauth, tmpstr);
1622        free(tmpstr); tmpstr = NULL;
1623       
1624        addchoicebox(skin_proxyauth, "0", _("no"));
1625        addchoicebox(skin_proxyauth, "1", _("yes"));
1626        setchoiceboxselection(skin_proxyauth, node->proxyauth);
1627
1628        addchoicebox(skin_usedns, "0", _("no"));
1629        addchoicebox(skin_usedns, "1", _("yes"));
1630        setchoiceboxselection(skin_usedns, node->usedns);
1631
1632        tmpstr = fixip(node->proxyip, 0);
1633        changemask(skin_proxyip, "000.000.000.000");
1634        changeinput(skin_proxyip, tmpstr);
1635        free(tmpstr); tmpstr = NULL;
1636
1637        changemask(skin_proxyport, "00000");
1638        changeinput(skin_proxyport, node->proxyport);
1639
1640        changemask(skin_proxyuser, "abcdefghijklmnopqrstuvwxyz");
1641        changeinput(skin_proxyuser, node->proxyuser);
1642
1643        changemask(skin_proxypass, "abcdefghijklmnopqrstuvwxyz");
1644        changeinput(skin_proxypass, node->proxypass);
1645               
1646        changemask(skin_username, "abcdefghijklmnopqrstuvwxyz");
1647        changeinput(skin_username, node->username);
1648
1649        changemask(skin_password, "abcdefghijklmnopqrstuvwxyz");
1650        changeinput(skin_password, node->password);
1651
1652        if(newnode == 0 && checkhddreplacement(node->sharename) == 1)
1653                tmpstr = ostrcat(tmpstr, "1", 1, 0);
1654        addchoicebox(skin_hddreplacement, "0", _("no"));
1655        addchoicebox(skin_hddreplacement, "1", _("yes"));
1656        setchoiceboxselection(skin_hddreplacement, tmpstr);
1657        free(tmpstr); tmpstr = NULL;
1658
1659        addchoicebox(skin_protocol, "udp", _("udp"));
1660        addchoicebox(skin_protocol, "tcp", _("tcp"));
1661        setchoiceboxselection(skin_protocol, node->protocol);
1662
1663        addchoicebox(skin_options, "rw", _("rw"));
1664        addchoicebox(skin_options, "ro", _("ro"));
1665        setchoiceboxselection(skin_options, node->options);
1666
1667        changemask(skin_dns, "abcdefghijklmnopqrstuvwxyz");
1668        changeinput(skin_dns, node->dns);
1669
1670        changemodenetworkbrowser(node, titletext, net_addshare, skin_username, skin_password, skin_protocol, skin_rsize, skin_wsize, skin_options, skin_ssl, skin_proxy, skin_proxyip, skin_proxyport, skin_proxyuser, skin_proxypass, skin_ftpport, skin_userauth, skin_proxyauth, skin_useproxy, skin_usessl, skin_sharedir, skin_usedns, skin_dns, skin_ip);
1671
1672        addscreenrc(net_addshare, listbox);
1673        drawscreen(net_addshare, 0, 0);
1674
1675        tmp = listbox->select;
1676        while(1)
1677        {
1678                addscreenrc(net_addshare, tmp);
1679                rcret = waitrc(net_addshare, 0, 0);
1680                tmp = listbox->select;
1681
1682                free(node->mode); node->mode = ostrcat(skin_mode->ret, NULL, 0, 0);
1683                free(node->sharename); node->sharename = ostrcat(skin_sharename->ret, NULL, 0, 0);
1684                free(node->ip); node->ip = ostrcat(skin_ip->ret, NULL, 0, 0);
1685                free(node->ftpport); node->ftpport = ostrcat(skin_ftpport->ret, NULL, 0, 0);
1686                free(node->sharedir); node->sharedir = ostrcat(skin_sharedir->ret, NULL, 0, 0);
1687                free(node->wsize); node->wsize = ostrcat(skin_wsize->ret, NULL, 0, 0);
1688                free(node->rsize); node->rsize = ostrcat(skin_rsize->ret, NULL, 0, 0);
1689                free(node->ssl); node->ssl = ostrcat(skin_ssl->ret, NULL, 0, 0);
1690                free(node->proxy); node->proxy = ostrcat(skin_proxy->ret, NULL, 0, 0);
1691                free(node->useproxy); node->useproxy = ostrcat(skin_useproxy->ret, NULL, 0, 0);
1692                free(node->usessl); node->usessl = ostrcat(skin_usessl->ret, NULL, 0, 0);
1693                free(node->userauth); node->userauth = ostrcat(skin_userauth->ret, NULL, 0, 0);
1694                free(node->proxyauth); node->proxyauth = ostrcat(skin_proxyauth->ret, NULL, 0, 0);
1695                free(node->proxyip); node->proxyip = ostrcat(skin_proxyip->ret, NULL, 0, 0);
1696                free(node->proxyport); node->proxyport = ostrcat(skin_proxyport->ret, NULL, 0, 0);
1697                free(node->proxyuser); node->proxyuser = ostrcat(skin_proxyuser->ret, NULL, 0, 0);
1698                free(node->proxypass); node->proxypass = ostrcat(skin_proxypass->ret, NULL, 0, 0);
1699                free(node->username); node->username = ostrcat(skin_username->ret, NULL, 0, 0);
1700                free(node->password); node->password = ostrcat(skin_password->ret, NULL, 0, 0);
1701                free(node->protocol); node->protocol = ostrcat(skin_protocol->ret, NULL, 0, 0);
1702                free(node->options); node->options = ostrcat(skin_options->ret, NULL, 0, 0);
1703                free(node->usedns); node->usedns = ostrcat(skin_usedns->ret, NULL, 0, 0);
1704                free(node->dns); node->dns = ostrcat(skin_dns->ret, NULL, 0, 0);
1705
1706                if(listbox->select != NULL)
1707                {
1708                        changemodenetworkbrowser(node, titletext, net_addshare, skin_username, skin_password, skin_protocol, skin_rsize, skin_wsize, skin_options, skin_ssl, skin_proxy, skin_proxyip, skin_proxyport, skin_proxyuser, skin_proxypass, skin_ftpport, skin_userauth, skin_proxyauth, skin_useproxy, skin_usessl, skin_sharedir, skin_usedns, skin_dns, skin_ip);
1709                        drawscreen(net_addshare, 0, 0);
1710                }
1711
1712                if(rcret == getrcconfigint("rcexit", NULL)) break;
1713               
1714                if(newnode == 0 && rcret == getrcconfigint("rcred", NULL) && checknetworkbrowserexist(node) == 0)
1715                {
1716                        struct networkbrowser* newshare = addnetworkbrowser(NULL, 1, NULL);
1717                        if(newshare != NULL)
1718                        {
1719                                tmpstr = textinput(NULL, "SHARENAME");
1720                                if(tmpstr != NULL && strlen(tmpstr) != 0)
1721                                {
1722                                        //set to default if field is empty
1723                                        setdefaultnetworkbrowser(node);
1724                                        copynetworkbrowser(node, newshare, tmpstr);
1725                                        newnode = 1;
1726                                        node = newshare;
1727                                        changeinput(skin_sharename, node->sharename);
1728                                        b3->hidden = YES;
1729                                        changemodenetworkbrowser(node, titletext, net_addshare, skin_username, skin_password, skin_protocol, skin_rsize, skin_wsize, skin_options, skin_ssl, skin_proxy, skin_proxyip, skin_proxyport, skin_proxyuser, skin_proxypass, skin_ftpport, skin_userauth, skin_proxyauth, skin_useproxy, skin_usessl, skin_sharedir, skin_usedns, skin_dns, skin_ip);
1730                                }
1731                                else
1732                                        delnetworkbrowser(newshare);
1733                                free(tmpstr); tmpstr = NULL;
1734                                drawscreen(net_addshare, 0, 0);
1735                        }
1736                        continue;
1737                }
1738
1739                if(rcret == getrcconfigint("rcok", NULL))
1740                {
1741                        if(node->sharename == NULL || strlen(node->sharename) == 0)
1742                        {
1743                                textbox(_("Message"), _("Sharename can't be empty!"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 0, 0);
1744                                drawscreen(net_addshare, 0, 0);
1745                                continue;
1746                        }
1747
1748                        if(checknetworkbrowserexist(node) == 1)
1749                        {
1750                                textbox(_("Message"), _("A mount entry with this name already exists!"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 0, 0);
1751                                drawscreen(net_addshare, 0, 0);
1752                                continue;
1753                        }
1754
1755                        if(textbox(_("Message"), _("Are you sure you want to save this network mount?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 0, 0) == 1)
1756                        {
1757                                //set to default if field is empty
1758                                setdefaultnetworkbrowser(node);
1759                                if(ostrcmp(skin_hddreplacement->ret, "1") == 0)
1760                                        addhddreplacement(node->sharename, 0);
1761                                else if(checkhddreplacement(node->sharename) == 1)
1762                                        delhddreplacement(0);
1763
1764                                savenetworkbrowser(getconfig("automiscfile", NULL));
1765                                save = 1;
1766                        }
1767                        break;
1768                }
1769        }
1770
1771        if(newnode == 1 && save == 0) delnetworkbrowser(node);
1772        delownerrc(net_addshare);
1773        clearscreen(net_addshare);
1774}
1775
1776void screennetworkbrowser_settings()
1777{
1778        int rcret = -1;
1779        struct skin* settings = getscreen("networkbrowser_settings");
1780        struct skin* listbox = getscreennode(settings, "listbox");
1781        struct skin* username = getscreennode(settings, "user");
1782        struct skin* password = getscreennode(settings, "pass");
1783        struct skin* tmp = NULL;
1784
1785        char* user = ostrcat(getconfig("netbrowser_user", NULL), NULL, 0, 0);
1786        if(user == NULL)
1787                user = ostrcat("user", NULL, 0, 0);
1788
1789        char* pass = ostrcat(getconfig("netbrowser_pass", NULL), NULL, 0, 0);
1790        if(pass == NULL)
1791                pass = ostrcat("pass", NULL, 0, 0);
1792                                       
1793        changemask(username, "abcdefghijklmnopqrstuvwxyz");
1794        changeinput(username, user);
1795        free(user), user = NULL;
1796       
1797        changemask(password, "abcdefghijklmnopqrstuvwxyz");
1798        changeinput(password, pass);
1799        free(pass), pass = NULL;
1800
1801        drawscreen(settings, 0, 0);
1802        addscreenrc(settings, listbox);
1803
1804        tmp = listbox->select;
1805        while(1)
1806        {
1807                addscreenrc(settings, tmp);
1808                rcret = waitrc(settings, 0, 0);
1809                tmp = listbox->select;
1810
1811                if(rcret == getrcconfigint("rcexit", NULL)) break;
1812                if(rcret == getrcconfigint("rcok", NULL))
1813                {
1814                        addconfigscreen("netbrowser_user", username);
1815                        addconfigscreen("netbrowser_pass", password);
1816                        break;
1817                }
1818        }
1819
1820        delownerrc(settings);
1821        clearscreen(settings);
1822}
1823
1824void screennetworkbrowser()
1825{
1826        int rcret = 0;
1827        struct networkbrowser* node = NULL;
1828        struct menulist* mlist = NULL, *mbox = NULL;
1829        char* tmpstr = NULL, *tmppic = NULL;
1830       
1831        status.hangtime = 99999;
1832
1833start:
1834        freenetworkbrowser(); networkbrowser = NULL;
1835        readnetworkbrowser(getconfig("automiscfile", NULL), 0);
1836       
1837        node = networkbrowser;
1838        while(node != NULL)
1839        {
1840                if(ostrcmp(node->mode, "0") == 0)
1841                {
1842                        tmpstr = ostrcat(tmpstr, "(cifs) ", 1, 0);
1843                        tmppic = ostrcat("netbrowser_cifs.png", NULL, 0, 0);
1844                }
1845                else if(ostrcmp(node->mode, "1") == 0)
1846                {
1847                        tmpstr = ostrcat(tmpstr, "(nfs) ", 1, 0);
1848                        tmppic = ostrcat("netbrowser_nfs.png", NULL, 0, 0);
1849                }
1850                else if(ostrcmp(node->mode, "2") == 0)
1851                {
1852                        tmpstr = ostrcat(tmpstr, "(ftpfs) ", 1, 0);
1853                        tmppic = ostrcat("netbrowser_ftpfs.png", NULL, 0, 0);
1854            }
1855
1856                tmpstr = ostrcat(tmpstr, node->sharename, 1, 0);
1857                tmpstr = ostrcat(tmpstr, " (", 1, 0);
1858                if(ostrcmp(node->usedns, "1") == 0)
1859                        tmpstr = ostrcat(tmpstr, node->dns, 1, 0);
1860                else
1861                        tmpstr = ostrcat(tmpstr, node->ip, 1, 0);
1862                tmpstr = ostrcat(tmpstr, ":", 1, 0);
1863                tmpstr = ostrcat(tmpstr, node->ftpport, 1, 0);
1864                tmpstr = ostrcat(tmpstr, "/", 1, 0);
1865                tmpstr = ostrcat(tmpstr, node->sharedir, 1, 0);
1866                tmpstr = ostrcat(tmpstr, ")", 1, 0);
1867       
1868                struct menulist* tmpmlist = addmenulist(&mlist, tmpstr, NULL, tmppic, 0, 0);
1869                if(tmpmlist != NULL) tmpmlist->param = (char*)node;
1870                free(tmpstr); tmpstr = NULL;
1871            free(tmppic); tmppic = NULL;
1872                node = node->next;
1873        }
1874       
1875        mbox = menulistboxext(mlist, "networkbrowser", _("Networkbrowser - show Shares"), _("Choose your Shares from the following list"), "%pluginpath%/networkbrowser/skin/", NULL, 1, &rcret, 0);
1876
1877        if(rcret == getrcconfigint("rcred", NULL))
1878        {
1879                screennetworkbrowser_addshare(NULL, 1);
1880                freemenulist(mlist, 0); mlist = NULL;
1881                freenetworkbrowser(); networkbrowser = NULL;
1882                goto start;
1883        }
1884
1885        if(rcret == getrcconfigint("rcblue", NULL))
1886        {
1887                screennetworkbrowser_scan();
1888                freemenulist(mlist, 0); mlist = NULL;
1889                freenetworkbrowser(); networkbrowser = NULL;
1890                goto start;
1891        }
1892
1893        if(rcret == getrcconfigint("rcmenu", NULL))
1894        {
1895                screennetworkbrowser_settings();
1896                freemenulist(mlist, 0); mlist = NULL;
1897                freenetworkbrowser(); networkbrowser = NULL;
1898                goto start;
1899        }
1900       
1901        if(mbox != NULL)
1902        {
1903                if(rcret == getrcconfigint("rcok", NULL) || rcret == getrcconfigint("rcgreen", NULL))
1904                        screennetworkbrowser_addshare((struct networkbrowser*)mbox->param, 0);
1905                if(rcret == getrcconfigint("rcyellow", NULL))
1906                {
1907                        if(textbox(_("Message"), _("Are you sure you want remove this share?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 0, 0) == 1)
1908                        {
1909                                struct networkbrowser* delnode = (struct networkbrowser*)mbox->param;
1910                                if(delnode != NULL)
1911                                {
1912                                        if(checkhddreplacement(delnode->sharename) == 1)
1913                                                delhddreplacement(0);
1914
1915                                        delnetworkbrowser(delnode);
1916                                        savenetworkbrowser(getconfig("automiscfile", NULL));
1917                                }
1918                        }
1919                }
1920                freemenulist(mlist, 0); mlist = NULL;
1921                freenetworkbrowser(); networkbrowser = NULL;
1922                goto start;
1923        }
1924
1925        if(mbox == NULL)
1926        {
1927                if(rcret == getrcconfigint("rcok", NULL) || rcret == getrcconfigint("rcgreen", NULL) || rcret == getrcconfigint("rcyellow", NULL))
1928                {
1929                        freemenulist(mlist, 0); mlist = NULL;
1930                        freenetworkbrowser(); networkbrowser = NULL;
1931                        goto start;
1932                }
1933        }
1934
1935        freemenulist(mlist, 0); mlist = NULL;
1936        freenetworkbrowser();
1937
1938        status.hangtime = getconfigint("hangtime", NULL);
1939}
1940
1941#endif
Note: See TracBrowser for help on using the repository browser.