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

Last change on this file since 43068 was 39714, checked in by andyjetset, 7 years ago

delete mount win10 fix 39383 display of saved shares and fix 39385 display of saved shares

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