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

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

[titan] update netwerkbrowser

File size: 41.5 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        struct networkbrowser* next;
42};
43
44struct networkbrowser *networkbrowser = NULL;
45
46char* readnetworkbrowser(char* filename, int flag);
47void screennetworkbrowser_addshare(struct networkbrowser* node, int newnode);
48
49void debugnetworkbrowser(struct networkbrowser* node)
50{
51        if(node == NULL) return;
52       
53        debug(70, "mode: %s", node->mode);
54        debug(70, "sharename: %s", node->sharename);
55        debug(70, "ip: %s", node->ip);
56        debug(70, "sharedir: %s", node->sharedir);
57        debug(70, "username: %s", node->username);
58        debug(70, "password: %s", node->password);
59        debug(70, "rsize: %s", node->rsize);
60        debug(70, "wsize: %s", node->wsize);
61        debug(70, "protocol: %s", node->protocol);
62        debug(70, "options: %s", node->options);
63        debug(70, "ssl: %s", node->ssl);
64        debug(70, "proxy: %s", node->proxy);
65        debug(70, "proxyip: %s", node->proxyip);
66        debug(70, "proxyport: %s", node->proxyport);
67        debug(70, "proxyuser: %s", node->proxyuser);
68        debug(70, "proxypass: %s", node->proxypass);
69        debug(70, "ftpport: %s", node->ftpport);
70        debug(70, "userauth: %s", node->userauth);
71        debug(70, "proxyauth: %s", node->proxyauth);
72        debug(70, "useproxy: %s", node->useproxy);
73        debug(70, "usessl: %s", node->usessl);
74}
75
76void delnetworkbrowsercontent(struct networkbrowser* node)
77{
78        if(node == NULL) return;
79       
80        free(node->sharename); node->sharename = NULL;
81        free(node->ip); node->ip = NULL;
82        free(node->sharedir); node->sharedir = NULL;
83        free(node->username); node->username = NULL;
84        free(node->password); node->password = NULL;
85        free(node->rsize); node->rsize = NULL;
86        free(node->wsize); node->wsize = NULL;
87        free(node->protocol); node->protocol = NULL;
88        free(node->options); node->options = NULL;
89        free(node->ssl); node->ssl = NULL;
90        free(node->proxy); node->proxy = NULL;
91        free(node->proxyip); node->proxyip = NULL;
92        free(node->proxyport); node->proxyport = NULL;
93        free(node->proxyuser); node->proxyuser = NULL;
94        free(node->proxypass); node->proxypass = NULL;
95        free(node->ftpport); node->ftpport = NULL;
96        free(node->userauth); node->userauth = NULL;
97        free(node->proxyauth); node->proxyauth = NULL;
98        free(node->useproxy); node->useproxy = NULL;
99        free(node->usessl); node->usessl = NULL;
100}
101
102void delnetworkbrowser(struct networkbrowser* netnode)
103{
104        struct networkbrowser *node = networkbrowser, *prev = networkbrowser;
105
106        while(node != NULL)
107        {
108                if(node == netnode)
109                {
110                        if(node == networkbrowser)
111                                networkbrowser = node->next;
112                        else
113                                prev->next = node->next;
114
115                        delnetworkbrowsercontent(node);
116
117                        free(node);
118                        node = NULL;
119                        break;
120                }
121
122                prev = node;
123                node = node->next;
124        }
125}
126
127void freenetworkbrowser()
128{
129        struct networkbrowser *node = networkbrowser, *prev = networkbrowser;
130
131        while(node != NULL)
132        {
133                prev = node;
134                node = node->next;
135                if(prev != NULL)
136                        delnetworkbrowser(prev);
137        }
138}
139
140struct networkbrowser* addnetworkbrowser(char *line, int count, struct networkbrowser* last)
141{
142        struct networkbrowser *newnode = NULL, *prev = NULL, *node = networkbrowser;
143        int ret = 0, treffer = 0;
144        char* tmpstr = NULL;
145
146        newnode = (struct networkbrowser*)malloc(sizeof(struct networkbrowser));       
147        if(newnode == NULL)
148        {
149                err("no memory");
150                return NULL;
151        }
152        memset(newnode, 0, sizeof(struct networkbrowser));
153
154        if(line != NULL)
155        {
156                newnode->sharename = malloc(256);
157                if(newnode->sharename == NULL)
158                {
159                        err("no memory");
160                        delnetworkbrowsercontent(newnode);
161                        free(newnode);
162                        return NULL;
163                }
164                memset(newnode->sharename, 0, 256);
165
166                newnode->ip = malloc(256);
167                if(newnode->ip == NULL)
168                {
169                        err("no memory");
170                        delnetworkbrowsercontent(newnode);
171                        free(newnode);
172                        return NULL;
173                }
174                memset(newnode->ip, 0, 256);
175
176                newnode->sharedir = malloc(256);
177                if(newnode->sharedir == NULL)
178                {
179                        err("no memory");
180                        delnetworkbrowsercontent(newnode);
181                        free(newnode);
182                        return NULL;
183                }
184                memset(newnode->sharedir, 0, 256);
185
186                newnode->username = malloc(256);
187                if(newnode->username == NULL)
188                {
189                        err("no memory");
190                        delnetworkbrowsercontent(newnode);
191                        free(newnode);
192                        return NULL;
193                }
194                memset(newnode->username, 0, 256);
195
196                newnode->password = malloc(256);
197                if(newnode->password == NULL)
198                {
199                        err("no memory");
200                        delnetworkbrowsercontent(newnode);
201                        free(newnode);
202                        return NULL;
203                }
204                memset(newnode->password, 0, 256);
205
206                newnode->rsize = malloc(256);
207                if(newnode->rsize == NULL)
208                {
209                        err("no memory");
210                        delnetworkbrowsercontent(newnode);
211                        free(newnode);
212                        return NULL;
213                }
214                memset(newnode->rsize, 0, 256);
215
216                newnode->wsize = malloc(256);
217                if(newnode->wsize == NULL)
218                {
219                        err("no memory");
220                        delnetworkbrowsercontent(newnode);
221                        free(newnode);
222                        return NULL;
223                }
224                memset(newnode->wsize, 0, 256);
225
226                newnode->protocol = malloc(256);
227                if(newnode->protocol == NULL)
228                {
229                        err("no memory");
230                        delnetworkbrowsercontent(newnode);
231                        free(newnode);
232                        return NULL;
233                }
234                memset(newnode->protocol, 0, 256);
235
236                newnode->options = malloc(256);
237                if(newnode->options == NULL)
238                {
239                        err("no memory");
240                        delnetworkbrowsercontent(newnode);
241                        free(newnode);
242                        return NULL;
243                }
244                memset(newnode->options, 0, 256);
245
246                newnode->ssl = malloc(256);
247                if(newnode->ssl == NULL)
248                {
249                        err("no memory");
250                        delnetworkbrowsercontent(newnode);
251                        free(newnode);
252                        return NULL;
253                }
254                memset(newnode->ssl, 0, 256);
255
256                newnode->proxy = malloc(256);
257                if(newnode->proxy == NULL)
258                {
259                        err("no memory");
260                        delnetworkbrowsercontent(newnode);
261                        free(newnode);
262                        return NULL;
263                }
264                memset(newnode->proxy, 0, 256);
265
266                newnode->proxyip = malloc(256);
267                if(newnode->proxyip == NULL)
268                {
269                        err("no memory");
270                        delnetworkbrowsercontent(newnode);
271                        free(newnode);
272                        return NULL;
273                }
274                memset(newnode->proxyip, 0, 256);
275
276                newnode->proxyport = malloc(256);
277                if(newnode->proxyport == NULL)
278                {
279                        err("no memory");
280                        delnetworkbrowsercontent(newnode);
281                        free(newnode);
282                        return NULL;
283                }
284                memset(newnode->proxyport, 0, 256);
285
286                newnode->proxyuser = malloc(256);
287                if(newnode->proxyuser == NULL)
288                {
289                        err("no memory");
290                        delnetworkbrowsercontent(newnode);
291                        free(newnode);
292                        return NULL;
293                }
294                memset(newnode->proxyuser, 0, 256);
295
296                newnode->proxypass = malloc(256);
297                if(newnode->proxypass == NULL)
298                {
299                        err("no memory");
300                        delnetworkbrowsercontent(newnode);
301                        free(newnode);
302                        return NULL;
303                }
304                memset(newnode->proxypass, 0, 256);
305
306                newnode->ftpport = malloc(256);
307                if(newnode->ftpport == NULL)
308                {
309                        err("no memory");
310                        delnetworkbrowsercontent(newnode);
311                        free(newnode);
312                        return NULL;
313                }
314                memset(newnode->ftpport, 0, 256);
315
316                newnode->userauth = ostrcat(newnode->userauth, "0", 1, 0);
317                newnode->proxyauth = ostrcat(newnode->proxyauth, "0", 1, 0);
318                newnode->useproxy = ostrcat(newnode->useproxy, "0", 1, 0);
319                newnode->usessl = ostrcat(newnode->usessl, "0", 1, 0);
320
321                //nfs parse
322                if(strstr(line, "-fstype=nfs") != NULL)
323                {
324                        treffer = 1;
325                        newnode->mode = ostrcat("1", NULL, 0, 0);
326                        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);
327                        if(ret != 7)
328                        {
329                                if(count > 0)
330                                {
331                                        err("networkbrowser nfs line %d not ok", count);
332                                }
333                                else
334                                {
335                                        err("add networkbrowser nfs");
336                                }
337                                delnetworkbrowsercontent(newnode);
338                                free(newnode);
339                                return NULL;
340                        }
341                }
342
343                //cifs parse
344                if(strstr(line, "-fstype=cifs") != NULL)
345                {
346                        treffer = 1;
347                        newnode->mode = ostrcat("0", NULL, 0, 0);
348                        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);
349                        if(ret != 8)
350                        {
351                                if(count > 0)
352                                {
353                                        err("networkbrowser cifs line %d not ok", count);
354                                }
355                                else
356                                {
357                                        err("add networkbrowser cifs");
358                                }
359                                delnetworkbrowsercontent(newnode);
360                                free(newnode);
361                                return NULL;
362                        }
363                }
364
365                //ftpfs parse
366                if(strstr(line, "-fstype=ftpfs") != NULL)
367                {
368                        treffer = 1;
369                        newnode->mode = ostrcat("2", NULL, 0, 0);
370
371                        ret = sscanf(line, "%s\t-fstype=ftpfs,%[^,\t]", newnode->sharename, newnode->options);
372                        if(ret != 2) treffer = 0;
373
374                        tmpstr = strstr(line, "ssl");
375                        if(tmpstr != NULL)
376                        {
377                                free(newnode->usessl); newnode->usessl = NULL;
378                                newnode->usessl = ostrcat(newnode->usessl, "1", 1, 0);
379                                ret = sscanf(tmpstr, "%[^,\t]", newnode->ssl);
380                                if(ret != 1) treffer = 0;
381                        }
382
383                        tmpstr = strstr(line, "proxy=");
384                        if(tmpstr != NULL)
385                        {
386                                free(newnode->useproxy); newnode->useproxy = NULL;
387                                newnode->useproxy = ostrcat(newnode->useproxy, "1", 1, 0);
388                                ret = sscanf(tmpstr, "proxy=%[^\\]\\:%[^,],%[^,\t]", newnode->proxyip, newnode->proxyport, newnode->proxy);
389                                if(ret != 3) treffer = 0;
390
391                                tmpstr = strstr(line, "proxy_user=");
392                                if(tmpstr != NULL)
393                                {
394                                        free(newnode->proxyauth); newnode->proxyauth = NULL;
395                                        newnode->proxyauth = ostrcat(newnode->proxyauth, "1", 1, 0);
396                                        ret = sscanf(tmpstr, "proxy_user=%[^\\]\\:%[^,\t]", newnode->proxyuser, newnode->proxypass);
397                                        if(ret != 2) treffer = 0;
398                                }
399                        }
400
401                        tmpstr = strstr(line, ":ftp\\://");
402                        if(tmpstr != NULL)
403                        {
404                                if(strstr(line, "@") != NULL)
405                                {
406                                        free(newnode->userauth); newnode->userauth = NULL;
407                                        newnode->userauth = ostrcat(newnode->userauth, "1", 1, 0);
408                                        ret = sscanf(tmpstr, ":ftp\\://%[^\\]\\:%[^@]@%[^\\]\\:%[^/]/%s", newnode->username, newnode->password, newnode->ip, newnode->ftpport, newnode->sharedir);
409                                        if(ret != 5) treffer = 0;
410                                }
411                                else
412                                {
413                                        ret = sscanf(tmpstr, ":ftp\\://%[^\\]\\:%[^/]/%s", newnode->ip, newnode->ftpport, newnode->sharedir);
414                                        if(ret != 3) treffer = 0;
415                                }
416                        }
417                        else
418                                treffer = 0;
419
420                        if(treffer == 0)
421                        {
422                                if(count > 0)
423                                {
424                                        err("networkbrowser ftpfs line %d not ok", count);
425                                }
426                                else
427                                {
428                                        err("add networkbrowser ftpfs");
429                                }
430                                delnetworkbrowsercontent(newnode);
431                                free(newnode);
432                                return NULL;
433                        }
434                }
435
436                if(treffer == 0)
437                {
438                        delnetworkbrowsercontent(newnode);
439                        free(newnode);
440                        return NULL;
441                }
442        }
443       
444        if(last == NULL)
445        {
446                while(node != NULL)
447                {
448                        prev = node;
449                        node = node->next;
450                }
451        }
452        else
453        {
454                prev = last;
455                node = last->next;
456        }
457
458        if(prev == NULL)
459                networkbrowser = newnode;
460        else
461                prev->next = newnode;
462
463        newnode->next = node;
464       
465        return newnode;
466}
467
468void setdefaultnetworkbrowser(struct networkbrowser* node)
469{
470        if(node == NULL) return;
471       
472        if(node->mode == NULL || node->mode[0] == '\0') node->mode = ostrcat(node->mode, "0", 1, 0);
473        if(node->sharename == NULL || node->sharename[0] == '\0') node->sharename = ostrcat(node->sharename, "SHARENAME", 1, 0);
474        if(node->ip == NULL || node->ip[0] == '\0') node->ip = ostrcat(node->ip, "192.168.178.1", 1, 0);
475        if(node->sharedir == NULL || node->sharedir[0] == '\0') node->sharedir = ostrcat(node->sharedir, "sharedir", 1, 0);
476        if(node->username == NULL || node->username[0] == '\0') node->username = ostrcat(node->username, "username", 1, 0);
477        if(node->password == NULL || node->password[0] == '\0') node->password = ostrcat(node->password, "password", 1, 0);
478        if(node->rsize == NULL || node->rsize[0] == '\0') node->rsize = ostrcat(node->rsize, "32768", 1, 0);
479        if(node->wsize == NULL || node->wsize[0] == '\0') node->wsize = ostrcat(node->wsize, "32768", 1, 0);
480        if(node->protocol == NULL || node->protocol[0] == '\0') node->protocol = ostrcat(node->protocol, "udp", 1, 0);
481        if(node->options == NULL || node->options[0] == '\0') node->options = ostrcat(node->options, "rw", 1, 0);
482        if(node->ssl == NULL || node->ssl[0] == '\0') node->ssl = ostrcat(node->ssl, "ssl_try", 1, 0);
483        if(node->proxy == NULL || node->proxy[0] == '\0') node->proxy = ostrcat(node->proxy, "socks5", 1, 0);
484        if(node->proxyip == NULL || node->proxyip[0] == '\0') node->proxyip = ostrcat(node->proxyip, "12.23.45.67", 1, 0);
485        if(node->proxyport == NULL || node->proxyport[0] == '\0') node->proxyport = ostrcat(node->proxyport, "8080", 1, 0);
486        if(node->proxyuser == NULL || node->proxyuser[0] == '\0') node->proxyuser = ostrcat(node->proxyuser, "proxyuser", 1, 0);
487        if(node->proxypass == NULL || node->proxypass[0] == '\0') node->proxypass = ostrcat(node->proxypass, "proxypass", 1, 0);
488        if(node->ftpport == NULL || node->ftpport[0] == '\0') node->ftpport = ostrcat(node->ftpport, "21", 1, 0);
489        if(node->userauth == NULL || node->userauth[0] == '\0') node->userauth = ostrcat(node->userauth, "0", 1, 0);
490        if(node->proxyauth == NULL || node->proxyauth[0] == '\0') node->proxyauth = ostrcat(node->proxyauth, "0", 1, 0);
491        if(node->useproxy == NULL || node->useproxy[0] == '\0') node->useproxy = ostrcat(node->useproxy, "0", 1, 0);
492        if(node->usessl == NULL || node->usessl[0] == '\0') node->usessl = ostrcat(node->usessl, "0", 1, 0);
493}
494
495void savenetworkbrowser(char* filename)
496{
497        int save = 0;
498        struct networkbrowser* node = networkbrowser;
499        char* tmpstr = NULL, *savesettings = NULL;
500
501        if(filename == NULL) return;
502
503        savesettings = readnetworkbrowser("/var/etc/automount/auto.misc", 1);
504printf("%s\n", savesettings);
505        while(node != NULL)
506        {
507                save = 1;
508                savesettings = ostrcat(savesettings, node->sharename, 1, 0);
509
510                if(ostrcmp(node->mode, "0") == 0)
511                {
512                        savesettings = ostrcat(savesettings, "\t-fstype=cifs,rw,rsize=", 1, 0);
513                        savesettings = ostrcat(savesettings, node->rsize, 1, 0);
514                        savesettings = ostrcat(savesettings, ",wsize=", 1, 0);
515                        savesettings = ostrcat(savesettings, node->wsize, 1, 0);
516                        savesettings = ostrcat(savesettings, ",user=", 1, 0);
517                        savesettings = ostrcat(savesettings, node->username, 1, 0);
518                        savesettings = ostrcat(savesettings, ",pass=", 1, 0);
519                        savesettings = ostrcat(savesettings, node->password, 1, 0);
520                        savesettings = ostrcat(savesettings, "\t://", 1, 0);
521                        tmpstr = fixip(node->ip, 1);
522                        savesettings = ostrcat(savesettings, tmpstr, 1, 0);
523                        free(tmpstr); tmpstr = NULL;
524                        savesettings = ostrcat(savesettings, "/", 1, 0);
525                        savesettings = ostrcat(savesettings, node->sharedir, 1, 0);
526                        savesettings = ostrcat(savesettings, "\n", 1, 0);
527                }
528                else if(ostrcmp(node->mode, "1") == 0)
529                {
530                        savesettings = ostrcat(savesettings, "\t-fstype=nfs,", 1, 0);
531                        savesettings = ostrcat(savesettings, node->options, 1, 0);
532                        savesettings = ostrcat(savesettings, ",nolock", 1, 0);
533                        savesettings = ostrcat(savesettings, ",rsize=", 1, 0);
534                        savesettings = ostrcat(savesettings, node->rsize, 1, 0);
535                        savesettings = ostrcat(savesettings, ",wsize=", 1, 0);
536                        savesettings = ostrcat(savesettings, node->wsize, 1, 0);
537                        savesettings = ostrcat(savesettings, ",", 1, 0);
538                        savesettings = ostrcat(savesettings, node->protocol, 1, 0);
539                        savesettings = ostrcat(savesettings, "\t", 1, 0);
540                        tmpstr = fixip(node->ip, 1);
541                        savesettings = ostrcat(savesettings, fixip(node->ip, 1), 1, 0);
542                        free(tmpstr); tmpstr = NULL;
543                        savesettings = ostrcat(savesettings, "://", 1, 0);
544                        savesettings = ostrcat(savesettings, node->sharedir, 1, 0);
545                        savesettings = ostrcat(savesettings, "\n", 1, 0);
546                }
547                else if(ostrcmp(node->mode, "2") == 0)
548                {
549                        savesettings = ostrcat(savesettings, "\t-fstype=ftpfs,", 1, 0);
550                        savesettings = ostrcat(savesettings, node->options, 1, 0);
551                        savesettings = ostrcat(savesettings, ",nolock,allow_other,nonempty", 1, 0);
552                        if(ostrcmp(node->usessl, "1") == 0)
553                        {
554                                savesettings = ostrcat(savesettings, ",", 1, 0);
555                                savesettings = ostrcat(savesettings, node->ssl, 1, 0);
556                        }
557
558                        if(ostrcmp(node->useproxy, "1") == 0)
559                        {
560                                savesettings = ostrcat(savesettings, ",proxy=", 1, 0);
561                                savesettings = ostrcat(savesettings, node->proxyip, 1, 0);
562                                savesettings = ostrcat(savesettings, "\\:", 1, 0);
563                                savesettings = ostrcat(savesettings, node->proxyport, 1, 0);
564                        }
565                        if(ostrcmp(node->useproxy, "1") == 0)
566                        {
567                                savesettings = ostrcat(savesettings, ",", 1, 0);
568                                savesettings = ostrcat(savesettings, node->proxy, 1, 0);
569                        }
570
571                        if(ostrcmp(node->proxyauth, "1") == 0)
572                        {
573                                savesettings = ostrcat(savesettings, ",proxy_user=", 1, 0);
574                                savesettings = ostrcat(savesettings, node->proxyuser, 1, 0);
575                                savesettings = ostrcat(savesettings, "\\:", 1, 0);
576                                savesettings = ostrcat(savesettings, node->proxypass, 1, 0);
577                        }
578
579                        savesettings = ostrcat(savesettings, "\t:ftp\\://", 1, 0);
580                        if(ostrcmp(node->userauth, "1") == 0)
581                        {
582                                savesettings = ostrcat(savesettings, node->username, 1, 0);
583                                savesettings = ostrcat(savesettings, "\\:", 1, 0);
584                                savesettings = ostrcat(savesettings, node->password, 1, 0);
585                                savesettings = ostrcat(savesettings, "@", 1, 0);
586                        }
587
588                        tmpstr = fixip(node->ip, 1);
589                        savesettings = ostrcat(savesettings, fixip(tmpstr, 1), 1, 0);
590                        free(tmpstr); tmpstr = NULL;
591                        savesettings = ostrcat(savesettings, "\\:", 1, 0);
592                        savesettings = ostrcat(savesettings, node->ftpport, 1, 0);
593                        savesettings = ostrcat(savesettings, "/", 1, 0);
594                        savesettings = ostrcat(savesettings, node->sharedir, 1, 0);
595                        savesettings = ostrcat(savesettings, "\n", 1, 0);
596                }
597               
598                node = node->next;
599        }
600
601        if(save == 1 && savesettings != NULL)
602                writesys("/var/etc/automount/auto.misc", savesettings, 0);
603
604        debugnetworkbrowser(node);
605        debug(70, "savesettings: %s", savesettings);
606        debug(70, "--------------------");
607
608        free(savesettings); savesettings = NULL;
609}
610
611//flag 0: read and add to struct
612//flag 1: read and build string
613char* readnetworkbrowser(char* filename, int flag)
614{
615        FILE *fd = NULL;
616        char *fileline = NULL, *tmpstr = NULL;
617        int linecount = 0;
618
619        fileline = malloc(MINMALLOC);
620        if(fileline == NULL)
621        {
622                err("no memory");
623                return NULL;
624        }
625
626        fd = fopen(filename, "r");
627        if(fd == NULL)
628        {
629                perr("can't open %s", filename);
630                free(fileline);
631                return NULL;
632        }
633
634        while(fgets(fileline, MINMALLOC, fd) != NULL)
635        {
636                if(flag == 0)
637                {
638                        if(fileline[0] == '#' || fileline[0] == '\n')
639                                continue;
640                        if(fileline[strlen(fileline) - 1] == '\n')
641                                fileline[strlen(fileline) - 1] = '\0';
642                        if(fileline[strlen(fileline) - 1] == '\r')
643                                fileline[strlen(fileline) - 1] = '\0';
644       
645                        linecount++;
646               
647                        if(fileline != NULL)
648                                addnetworkbrowser(fileline, linecount, NULL);
649                }
650                if(flag == 1)
651                {
652                        if(strstr(fileline, "-fstype=cifs") != NULL) continue;
653                        if(strstr(fileline, "-fstype=nfs") != NULL) continue;
654                        if(strstr(fileline, "-fstype=ftpfs") != NULL) continue;
655                        tmpstr = ostrcat(tmpstr, fileline, 1, 0);
656                }
657        }
658
659        free(fileline);
660        fclose(fd);
661        return tmpstr;
662}
663
664void getnetworkbrowser_dns(struct inetwork* net, struct menulist** mlist)
665{
666        netinfo* nInfo;
667        char *tmpstr = NULL, *s = NULL;
668
669        if(net == NULL || mlist == NULL) return NULL;
670
671        s = ostrcat(s, net->ip, 1, 0);
672        s = ostrcat(s, "/24", 1, 0);
673        debug(70, "start scanning: %s", s);
674       
675        nInfo = newNetInfo();
676        netzInfo(s, nInfo);
677       
678        for(i = 0; i < 256; i++)
679        {
680                if(nInfo[i].ip[0] == '\0')
681                        break;
682                else
683                {
684                        debug(70, "service: %s", nInfo[i].service);
685                        debug(70, "ip: %s", nInfo[i].ip);
686                        debug(70, "name: %s", nInfo[i].name);
687                        debug(70, "mac: %s", nInfo[i].mac);
688                        tmpstr = ostrcat(tmpstr , strstrip(nInfo[i].domain), 1, 0);
689                        tmpstr = ostrcat(tmpstr , " (", 1, 0);
690
691                        tmpstr = ostrcat(tmpstr , strstrip(nInfo[i].ip), 1, 0);
692                        tmpstr = ostrcat(tmpstr , ")", 1, 0);
693                        struct menulist* tmpmlist = addmenulist(mlist, tmpstr, NULL, NULL, 0, 0);
694                        changemenulistparam(tmpmlist, nInfo[i].ip, nInfo[i].name);
695                        free(tmpstr); tmpstr = NULL;
696
697                }
698        }
699
700        freeNetInfo(nInfo);
701        free(s); s = NULL;
702}
703
704void getnetworkbrowser_cifs(struct menulist** mlist, char* s, char* r, char* u, char* p)
705{
706        char* tmpstr = NULL;
707        shareinfo* sInfo;
708
709        if(s == NULL || r == NULL || u == NULL || p == NULL || mlist == NULL) return;
710       
711        sInfo = newShareInfo();
712        smbInfo(s, r, u, p, sInfo);
713       
714        for (i = 0; i < 128; i++)
715        {
716                if(sInfo[i].sharename[0] == '\0'){
717                        break;
718                }
719                else
720                {
721                        debug(70, "sharename: %s", sInfo[i].sharename);
722                        debug(70, "type: %s", sInfo[i].typ);
723                        debug(70, "comment: %s", sInfo[i].comment);
724                        debug(70, "rech: %s", r);
725                        debug(70, "rechip: %s", s);
726                        tmpstr = ostrcat(tmpstr , "(cifs) ", 1, 0);
727                        tmpstr = ostrcat(tmpstr , strstrip(s), 1, 0);
728                        tmpstr = ostrcat(tmpstr , ": /", 1, 0);
729                        tmpstr = ostrcat(tmpstr , strstrip(sInfo[i].sharename), 1, 0);
730                        struct menulist* tmpmlist = addmenulist(mlist, tmpstr, NULL, NULL, 0, 0);
731                        changemenulistparam(tmpmlist, sInfo[i].sharename, NULL);
732                        free(tmpstr); tmpstr = NULL;
733                }
734        }
735
736        freeShareInfo(sInfo);
737}
738
739void  getnetworkbrowser_nfs(struct menulist** mlist, char* s, char* r)
740{
741        char* tmpstr = NULL;
742        nfsinfo* nfsInfo;
743        int err = 0;
744
745        if(s == NULL || r == NULL || mlist == NULL) return;
746       
747        nfsInfo = newNfsInfo();
748        err = showNfsShare(s, nfsInfo);
749       
750        if (err == 0)
751        {
752                for (i = 0; i < 256; i++)
753                {
754                        if(nfsInfo[i].ip[0] == '\0') {
755                                break;
756                        }
757                        else
758                        {
759                                debug(70, "ip: %s", nfsInfo[i].ip);
760                                debug(70, "share: %s", nfsInfo[i].share);
761                                debug(70, "nfsShare: nfsShare");
762                                debug(70, "rech: %s", r);
763                                debug(70, "rechip: %s", s);
764                                tmpstr = ostrcat(tmpstr , "(nfs) ", 1, 0);
765                                tmpstr = ostrcat(tmpstr , strstrip(s), 1, 0);
766                                tmpstr = ostrcat(tmpstr , ": ", 1, 0);
767                                tmpstr = ostrcat(tmpstr , strstrip(nfsInfo[i].share), 1, 0);
768                                struct menulist* tmpmlist = addmenulist(mlist, tmpstr, NULL, NULL, 0, 0);
769                                changemenulistparam(tmpmlist, nfsInfo[i].share, NULL);
770                                free(tmpstr); tmpstr = NULL;
771                        }
772                }
773        }
774
775        freeNfsInfo(nfsInfo);
776}
777
778void screennetworkbrowser_scan()
779{
780        struct menulist* mlist = NULL, *mbox = NULL;
781        struct menulist* mlist1 = NULL, *mbox1 = NULL;
782        struct skin* net_scan = getscreen("networkbrowser_scan");
783        struct skin* b1 = getscreennode(net_scan, "b1");
784        struct skin* b2 = getscreennode(net_scan, "b2");
785        struct inetwork *net = inetwork;
786       
787        status.hangtime = 99999;
788        changetitle(net_scan, _("Scanning Network Shares, please wait !!"));
789        b1->hidden = YES;
790        b2->hidden = YES;
791
792        net = inetwork;
793        drawscreen(net_scan, 0);
794
795        while(net != NULL)
796        {
797                if(net->flag == 1)
798                        getnetworkbrowser_dns(net, &mlist);
799                net = net->next;
800        }
801
802start:
803        b1->hidden = NO;
804        b2->hidden = NO;
805
806        mbox = menulistbox(mlist, "networkbrowser_scan", _("Networkbrowser - show scanned DNS-Shares"), "%pluginpath%/networkbrowser/skin/", NULL, 1, 0);
807
808        if(mbox != NULL)
809        {
810                getnetworkbrowser_cifs(&mlist1, mbox->param, mbox->param1, "user", "pass");
811                getnetworkbrowser_nfs(&mlist1, mbox->param, mbox->param1);
812start1:
813                mbox1 = menulistboxext(mlist1, "networkbrowser_scan", _("Networkbrowser - show scanned cifs/nfs-Shares"), "%pluginpath%/networkbrowser/skin/", NULL, 1, NULL, 0);
814                if(mbox1 != NULL && mbox->name != NULL)
815                {
816                        if(strstr(mbox1->name, "(cifs)") != NULL)
817                        {
818                                debug(70, "start addshare cifs");
819                                struct networkbrowser* node = addnetworkbrowser(NULL, 1, NULL);
820                                if(node != NULL)
821                                {
822                                        node->mode = ostrcat("0", NULL, 0, 0);
823                                        node->ip = ostrcat(mbox->param, NULL, 0, 0);
824                                        node->sharename = ostrcat(mbox1->param, NULL, 0, 0);
825                                        node->sharedir = ostrcat(mbox1->param, NULL, 0, 0);
826                                        screennetworkbrowser_addshare(node, 1);
827                                }
828                        }
829                        else if(strstr(mbox1->name, "(nfs)") != NULL)
830                        {
831                                debug(70, "start addshare nfs");
832                                struct networkbrowser* node = addnetworkbrowser(NULL, 1, NULL);
833                                if(node != NULL)
834                                {
835                                        node->mode = ostrcat("1", NULL, 0, 0);
836                                        node->ip = ostrcat(mbox->param, NULL, 0, 0);
837                                        node->sharename = ostrcat(mbox1->param, NULL, 0, 0);
838                                        node->sharedir = ostrcat(mbox1->param, NULL, 0, 0);
839                                        screennetworkbrowser_addshare(node, 1);
840                                }
841                        }
842                        goto start1;
843                }
844                freemenulist(mlist1, 1); mlist1 = NULL;
845                goto start;
846        }
847
848        freemenulist(mlist, 1); mlist = NULL;
849        freemenulist(mlist1, 1); mlist1 = NULL;
850        delownerrc(net_scan);
851        clearscreen(net_scan);
852        status.hangtime = getconfigint("hangtime", NULL);
853}
854
855void addhddreplacement(char* sharename)
856{
857        char* tmpstr = NULL;
858
859        if(sharename == NULL) return;
860        unlink("/media/hdd");
861
862        tmpstr = ostrcat("/media/net/", sharename, 0, 0);
863        symlink(tmpstr, "/media/hdd");
864        free(tmpstr); tmpstr = NULL;
865
866        writesys("/var/etc/automount/.recordshare", sharename, 0);
867        system("/sbin/hotplug.sh first &");
868}
869
870void delhddreplacement()
871{
872        unlink("/media/hdd");
873        unlink("/var/etc/automount/.recordshare");
874        system("/sbin/hotplug.sh first &");
875}
876
877int checkhddreplacement(char* sharename)
878{
879        char* recordshare = readfiletomem("/var/etc/automount/.recordshare", 0);
880
881        if(recordshare != NULL)
882        {
883                if(ostrcmp(sharename, recordshare) == 0)
884                {
885                        free(recordshare); recordshare = NULL;
886                        return 1;
887                }
888        }
889
890        free(recordshare); recordshare = NULL;
891        return 0;
892}
893
894void changemodenetworkbrowser(struct networkbrowser* node, 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)
895{
896        char* tmpstr = NULL;
897        if(node == NULL) return;
898
899        if(ostrcmp(node->userauth, "0") == 0)
900        {
901                skin_username->hidden = YES;
902                skin_password->hidden = YES;
903        }
904        else
905        {
906                skin_username->hidden = NO;
907                skin_password->hidden = NO;
908        }
909
910        if(ostrcmp(node->proxyauth, "0") == 0)
911        {
912                skin_proxyuser->hidden = YES;
913                skin_proxypass->hidden = YES;
914        }
915        else
916        {
917                skin_proxyuser->hidden = NO;
918                skin_proxypass->hidden = NO;
919        }
920
921        if(ostrcmp(node->useproxy, "0") == 0)
922        {
923                skin_proxy->hidden = YES;
924                skin_proxyip->hidden = YES;
925                skin_proxyport->hidden = YES;
926                skin_proxyuser->hidden = YES;
927                skin_proxypass->hidden = YES;
928                skin_proxyauth->hidden = YES;
929        }
930        else
931        {
932                skin_proxy->hidden = NO;
933                skin_proxyip->hidden = NO;
934                skin_proxyport->hidden = NO;
935                skin_proxyauth->hidden = NO;
936
937                if(ostrcmp(node->proxyauth, "0") == 0)
938                {
939                        skin_proxyuser->hidden = YES;
940                        skin_proxypass->hidden = YES;
941                }
942                else
943                {
944                        skin_proxyuser->hidden = NO;
945                        skin_proxypass->hidden = NO;
946                }
947        }
948
949        if(ostrcmp(node->usessl, "0") == 0)
950                skin_ssl->hidden = YES;
951        else
952                skin_ssl->hidden = NO;
953
954        if(ostrcmp(node->mode, "0") == 0)
955        {
956                tmpstr = ostrcat(tmpstr, _("Add Cifs Network Share"), 1, 0);
957                tmpstr = ostrcat(tmpstr, " (", 1, 0);
958                tmpstr = ostrcat(tmpstr, strstrip(node->sharename), 1, 0);
959                tmpstr = ostrcat(tmpstr, ")", 1, 0);
960                changetitle(net_addshare, tmpstr);
961                free(tmpstr); tmpstr = NULL;
962
963                skin_username->hidden = NO;
964                skin_password->hidden = NO;
965                skin_protocol->hidden = YES;
966                skin_rsize->hidden = NO;
967                skin_wsize->hidden = NO;
968                skin_options->hidden = YES;
969                skin_ssl->hidden = YES;
970                skin_proxy->hidden = YES;
971                skin_proxyip->hidden = YES;
972                skin_proxyport->hidden = YES;
973                skin_proxyuser->hidden = YES;
974                skin_proxypass->hidden = YES;
975                skin_ftpport->hidden = YES;
976                skin_userauth->hidden = YES;
977                skin_proxyauth->hidden = YES;
978                skin_useproxy->hidden = YES;
979                skin_usessl->hidden = YES;
980        }
981        else if(ostrcmp(node->mode, "1") == 0)
982        {
983                tmpstr = ostrcat(tmpstr, _("Add Nfs Network Share"), 1, 0);
984                tmpstr = ostrcat(tmpstr, " (", 1, 0);
985                tmpstr = ostrcat(tmpstr, strstrip(node->sharename), 1, 0);
986                tmpstr = ostrcat(tmpstr, ")", 1, 0);
987                changetitle(net_addshare, tmpstr);
988                free(tmpstr); tmpstr = NULL;
989
990                skin_username->hidden = YES;
991                skin_password->hidden = YES;
992                skin_protocol->hidden = NO;
993                skin_rsize->hidden = NO;
994                skin_wsize->hidden = NO;
995                skin_options->hidden = NO;
996                skin_ssl->hidden = YES;
997                skin_proxy->hidden = YES;
998                skin_proxyip->hidden = YES;
999                skin_proxyport->hidden = YES;
1000                skin_proxyuser->hidden = YES;
1001                skin_proxypass->hidden = YES;
1002                skin_ftpport->hidden = YES;
1003                skin_userauth->hidden = YES;
1004                skin_proxyauth->hidden = YES;
1005                skin_useproxy->hidden = YES;
1006                skin_usessl->hidden = YES;
1007        }
1008        else if(ostrcmp(node->mode, "2") == 0)
1009        {
1010                tmpstr = ostrcat(tmpstr, _("Add Ftpfs Network Share"), 1, 0);
1011                tmpstr = ostrcat(tmpstr, " (", 1, 0);
1012                tmpstr = ostrcat(tmpstr, strstrip(node->sharename), 1, 0);
1013                tmpstr = ostrcat(tmpstr, ")", 1, 0);
1014                changetitle(net_addshare, tmpstr);
1015                free(tmpstr); tmpstr = NULL;
1016               
1017                skin_protocol->hidden = YES;
1018                skin_rsize->hidden = YES;
1019                skin_wsize->hidden = YES;
1020                skin_options->hidden = YES;
1021                skin_userauth->hidden = NO;
1022                skin_usessl->hidden = NO;
1023                skin_useproxy->hidden = NO;
1024                skin_ftpport->hidden = NO;
1025               
1026                if(ostrcmp(node->userauth, "0") == 0)
1027                {
1028                        skin_username->hidden = YES;
1029                        skin_password->hidden = YES;
1030                }
1031                else
1032                {
1033                        skin_username->hidden = NO;
1034                        skin_password->hidden = NO;
1035                }
1036               
1037                if(ostrcmp(node->usessl, "0") == 0)
1038                        skin_ssl->hidden = YES;
1039                else
1040                        skin_ssl->hidden = NO;
1041
1042                if(ostrcmp(node->useproxy, "0") == 0)
1043                {
1044                        skin_proxy->hidden = YES;
1045                        skin_proxyip->hidden = YES;
1046                        skin_proxyport->hidden = YES;
1047                        skin_proxyuser->hidden = YES;
1048                        skin_proxypass->hidden = YES;
1049                        skin_proxyauth->hidden = YES;
1050                }
1051                else
1052                {
1053                        skin_proxy->hidden = NO;
1054                        skin_proxyip->hidden = NO;
1055                        skin_proxyport->hidden = NO;
1056                        skin_proxyauth->hidden = NO;
1057                        if(ostrcmp(node->proxyauth, "0") == 0)
1058                        {
1059                                skin_proxyuser->hidden = YES;
1060                                skin_proxypass->hidden = YES;
1061                        }
1062                        else
1063                        {
1064                                skin_proxyuser->hidden = NO;
1065                                skin_proxypass->hidden = NO;
1066                        }
1067                }
1068        }
1069}
1070
1071void screennetworkbrowser_addshare(struct networkbrowser* node, int newnode)
1072{
1073        int rcret = 0, save = 0;
1074        char* skinname = "networkbrowser_add_share";
1075        struct skin* net_addshare = getscreen(skinname);
1076        struct skin* listbox = getscreennode(net_addshare, "listbox");
1077        struct skin* tmp = NULL;
1078        struct skin* skin_sharename = getscreennode(net_addshare, "skin_sharename");
1079        struct skin* skin_ip = getscreennode(net_addshare, "skin_ipaddresse");
1080        struct skin* skin_sharedir = getscreennode(net_addshare, "skin_sharedir");
1081        struct skin* skin_username = getscreennode(net_addshare, "skin_username");
1082        struct skin* skin_password = getscreennode(net_addshare, "skin_password");
1083        struct skin* skin_wsize = getscreennode(net_addshare, "skin_wsize");
1084        struct skin* skin_rsize = getscreennode(net_addshare, "skin_rsize");
1085        struct skin* skin_hddreplacement = getscreennode(net_addshare, "skin_hddreplacement");
1086        struct skin* skin_protocol = getscreennode(net_addshare, "skin_protocol");
1087        struct skin* skin_options = getscreennode(net_addshare, "skin_options");
1088        struct skin* skin_ssl = getscreennode(net_addshare, "skin_ssl");
1089        struct skin* skin_proxy = getscreennode(net_addshare, "skin_proxy");
1090        struct skin* skin_proxyip = getscreennode(net_addshare, "skin_proxyip");
1091        struct skin* skin_proxyport = getscreennode(net_addshare, "skin_proxyport");
1092        struct skin* skin_proxyuser = getscreennode(net_addshare, "skin_proxyuser");
1093        struct skin* skin_proxypass = getscreennode(net_addshare, "skin_proxypass");
1094        struct skin* skin_ftpport = getscreennode(net_addshare, "skin_ftpport");
1095        struct skin* skin_useproxy = getscreennode(net_addshare, "skin_useproxy");
1096        struct skin* skin_usessl = getscreennode(net_addshare, "skin_usessl");
1097        struct skin* skin_userauth = getscreennode(net_addshare, "skin_userauth");
1098        struct skin* skin_proxyauth = getscreennode(net_addshare, "skin_proxyauth");
1099        struct skin* skin_mode = getscreennode(net_addshare, "skin_mode");
1100        char* tmpstr = NULL;
1101
1102        listbox->aktline = 1;
1103        listbox->aktpage = 1;
1104
1105        if(node == NULL)
1106        {
1107                node = addnetworkbrowser(NULL, 1, NULL);
1108                newnode = 1;
1109        }
1110        if(node == NULL) return;
1111
1112        setdefaultnetworkbrowser(node);
1113        debug(70, "after set defaut");
1114        debugnetworkbrowser(node);
1115        debug(70, "--------------------");
1116       
1117        addchoicebox(skin_mode, "0", _("cifs"));
1118        addchoicebox(skin_mode, "1", _("nfs"));
1119        addchoicebox(skin_mode, "2", _("ftpfs"));
1120        setchoiceboxselection(skin_mode, node->mode);
1121
1122        changemask(skin_sharename, "abcdefghijklmnopqrstuvwxyz");
1123        changeinput(skin_sharename, node->sharename);
1124
1125        tmpstr = fixip(node->ip, 0);
1126        changemask(skin_ip, "000.000.000.000");
1127        changeinput(skin_ip, tmpstr);
1128        free(tmpstr); tmpstr = NULL;
1129
1130        changemask(skin_ftpport, "00000");
1131        changeinput(skin_ftpport, node->ftpport);
1132
1133        changemask(skin_sharedir, "abcdefghijklmnopqrstuvwxyz");
1134        changeinput(skin_sharedir, node->sharedir);
1135
1136        addchoicebox(skin_wsize, "32768", "32768");
1137        addchoicebox(skin_wsize, "49152", "49152");
1138        addchoicebox(skin_wsize, "65536", "65536");
1139        addchoicebox(skin_wsize, "4096", "4096");
1140        addchoicebox(skin_wsize, "8192", "8192");
1141        addchoicebox(skin_wsize, "16384", "16384");
1142        setchoiceboxselection(skin_wsize, node->wsize);
1143
1144        addchoicebox(skin_rsize, "32768", "32768");
1145        addchoicebox(skin_rsize, "49152", "49152");
1146        addchoicebox(skin_rsize, "65536", "65536");
1147        addchoicebox(skin_rsize, "4096", "4096");
1148        addchoicebox(skin_rsize, "8192", "8192");
1149        addchoicebox(skin_rsize, "16384", "16384");
1150        setchoiceboxselection(skin_rsize, node->rsize);
1151
1152        addchoicebox(skin_ssl, "ssl_try", _("ssl_try"));
1153        addchoicebox(skin_ssl, "ssl_control", _("ssl_control"));
1154        addchoicebox(skin_ssl, "ssl", _("ssl"));
1155        setchoiceboxselection(skin_ssl, node->ssl);
1156
1157        addchoicebox(skin_proxy, "socks5", _("socks5"));
1158        addchoicebox(skin_proxy, "socks4", _("socks4"));
1159        addchoicebox(skin_proxy, "html", _("html"));
1160        setchoiceboxselection(skin_proxy, node->proxy);
1161
1162        addchoicebox(skin_useproxy, "0", _("no"));
1163        addchoicebox(skin_useproxy, "1", _("yes"));
1164        setchoiceboxselection(skin_useproxy, node->useproxy);
1165
1166        addchoicebox(skin_usessl, "0", _("no"));
1167        addchoicebox(skin_usessl, "1", _("yes"));
1168        setchoiceboxselection(skin_usessl, node->usessl);
1169
1170        addchoicebox(skin_userauth, "0", _("no"));
1171        addchoicebox(skin_userauth, "1", _("yes"));
1172        setchoiceboxselection(skin_userauth, node->userauth);
1173
1174        addchoicebox(skin_proxyauth, "0", _("no"));
1175        addchoicebox(skin_proxyauth, "1", _("yes"));
1176        setchoiceboxselection(skin_proxyauth, node->proxyauth);
1177
1178        tmpstr = fixip(node->proxyip, 0);
1179        changemask(skin_proxyip, "000.000.000.000");
1180        changeinput(skin_proxyip, tmpstr);
1181        free(tmpstr); tmpstr = NULL;
1182
1183        changemask(skin_proxyport, "00000");
1184        changeinput(skin_proxyport, node->proxyport);
1185
1186        changemask(skin_proxyuser, "abcdefghijklmnopqrstuvwxyz");
1187        changeinput(skin_proxyuser, node->proxyuser);
1188
1189        changemask(skin_proxypass, "abcdefghijklmnopqrstuvwxyz");
1190        changeinput(skin_proxypass, node->proxypass);
1191
1192        changemask(skin_username, "abcdefghijklmnopqrstuvwxyz");
1193        changeinput(skin_username, node->username);
1194
1195        changemask(skin_password, "abcdefghijklmnopqrstuvwxyz");
1196        changeinput(skin_password, node->password);
1197
1198        if(newnode == 0 && checkhddreplacement(node->sharename) == 1)
1199                tmpstr = ostrcat(tmpstr, "1", 1, 0);
1200        addchoicebox(skin_hddreplacement, "0", _("no"));
1201        addchoicebox(skin_hddreplacement, "1", _("yes"));
1202        setchoiceboxselection(skin_hddreplacement, tmpstr);
1203        free(tmpstr); tmpstr = NULL;
1204
1205        addchoicebox(skin_protocol, "udp", _("udp"));
1206        addchoicebox(skin_protocol, "tcp", _("tcp"));
1207        setchoiceboxselection(skin_protocol, node->protocol);
1208
1209        addchoicebox(skin_options, "rw", _("rw"));
1210        addchoicebox(skin_options, "ro", _("ro"));
1211        setchoiceboxselection(skin_options, node->options);
1212
1213        changemodenetworkbrowser(node, 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);
1214
1215        addscreenrc(net_addshare, listbox);
1216        drawscreen(net_addshare, 0);
1217
1218        tmp = listbox->select;
1219        while(1)
1220        {
1221                addscreenrc(net_addshare, tmp);
1222                rcret = waitrc(net_addshare, 0, 0);
1223                tmp = listbox->select;
1224
1225                free(node->mode); node->mode = ostrcat(skin_mode->ret, NULL, 0, 0);
1226                free(node->sharename); node->sharename = ostrcat(skin_sharename->ret, NULL, 0, 0);
1227                free(node->ip); node->ip = ostrcat(skin_ip->ret, NULL, 0, 0);
1228                free(node->ftpport); node->ftpport = ostrcat(skin_ftpport->ret, NULL, 0, 0);
1229                free(node->sharedir); node->sharedir = ostrcat(skin_sharedir->ret, NULL, 0, 0);
1230                free(node->wsize); node->wsize = ostrcat(skin_wsize->ret, NULL, 0, 0);
1231                free(node->rsize); node->rsize = ostrcat(skin_rsize->ret, NULL, 0, 0);
1232                free(node->ssl); node->ssl = ostrcat(skin_ssl->ret, NULL, 0, 0);
1233                free(node->proxy); node->proxy = ostrcat(skin_proxy->ret, NULL, 0, 0);
1234                free(node->useproxy); node->useproxy = ostrcat(skin_useproxy->ret, NULL, 0, 0);
1235                free(node->usessl); node->usessl = ostrcat(skin_usessl->ret, NULL, 0, 0);
1236                free(node->userauth); node->userauth = ostrcat(skin_userauth->ret, NULL, 0, 0);
1237                free(node->proxyauth); node->proxyauth = ostrcat(skin_proxyauth->ret, NULL, 0, 0);
1238                free(node->proxyip); node->proxyip = ostrcat(skin_proxyip->ret, NULL, 0, 0);
1239                free(node->proxyport); node->proxyport = ostrcat(skin_proxyport->ret, NULL, 0, 0);
1240                free(node->proxyuser); node->proxyuser = ostrcat(skin_proxyuser->ret, NULL, 0, 0);
1241                free(node->proxypass); node->proxypass = ostrcat(skin_proxypass->ret, NULL, 0, 0);
1242                free(node->username); node->username = ostrcat(skin_username->ret, NULL, 0, 0);
1243                free(node->password); node->password = ostrcat(skin_password->ret, NULL, 0, 0);
1244                free(node->protocol); node->protocol = ostrcat(skin_protocol->ret, NULL, 0, 0);
1245                free(node->options); node->options = ostrcat(skin_options->ret, NULL, 0, 0);
1246
1247                if(listbox->select != NULL)
1248                {
1249                        changemodenetworkbrowser(node, 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);
1250                        drawscreen(net_addshare, 0);
1251                }
1252
1253                if(rcret == getrcconfigint("rcexit", NULL)) break;
1254
1255                if(rcret == getrcconfigint("rcok", NULL))
1256                {
1257                        if(node->sharename == NULL || strlen(node->sharename) == 0)
1258                        {
1259                                textbox(_("Message"), _("Sharename can't be empty!"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 0, 0);
1260                                drawscreen(net_addshare, 0);
1261                                continue;
1262                        }
1263
1264                        int skip = 0;
1265                        struct networkbrowser* tmpbrowser = networkbrowser;
1266                        while(tmpbrowser != NULL)
1267                        {
1268                                if(tmpbrowser != node && ostrcmp(tmpbrowser->sharename, node->sharename) == 0)
1269                                {
1270                                        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);
1271                                        skip = 1;
1272                                        break;
1273                                }
1274                                tmpbrowser = tmpbrowser->next;
1275                        }
1276                        if(skip == 1)
1277                        {
1278                                drawscreen(net_addshare, 0);
1279                                continue;
1280                        }
1281
1282                        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)
1283                        {
1284                                //set to default if field is empty
1285                                setdefaultnetworkbrowser(node);
1286                                if(ostrcmp(skin_hddreplacement->ret, "1") == 0)
1287                                        addhddreplacement(node->sharename);
1288                                else if(checkhddreplacement(node->sharename) == 1)
1289                                        delhddreplacement();
1290
1291                                savenetworkbrowser("/var/etc/automount/auto.misc");
1292                                save = 1;
1293                        }
1294                        break;
1295                }
1296        }
1297
1298        if(newnode == 1 && save == 0) delnetworkbrowser(node);
1299        delownerrc(net_addshare);
1300        clearscreen(net_addshare);
1301}
1302
1303void screennetworkbrowser()
1304{
1305        int rcret = 0;
1306        struct networkbrowser* node = NULL;
1307        struct menulist* mlist = NULL, *mbox = NULL;
1308        char* tmpstr = NULL;
1309       
1310        status.hangtime = 99999;
1311
1312start:
1313        freenetworkbrowser(); networkbrowser = NULL;
1314        readnetworkbrowser("/var/etc/automount/auto.misc", 0);
1315       
1316        node = networkbrowser;
1317        while(node != NULL)
1318        {
1319                if(ostrcmp(node->mode, "0") == 0)
1320                        tmpstr = ostrcat(tmpstr, "(cifs) ", 1, 0);
1321                if(ostrcmp(node->mode, "1") == 0)
1322                        tmpstr = ostrcat(tmpstr, "(nfs) ", 1, 0);
1323                if(ostrcmp(node->mode, "2") == 0)
1324                        tmpstr = ostrcat(tmpstr, "(ftpfs) ", 1, 0);
1325
1326                tmpstr = ostrcat(tmpstr, node->sharename, 1, 0);
1327                tmpstr = ostrcat(tmpstr, " (", 1, 0);
1328                tmpstr = ostrcat(tmpstr, node->ip, 1, 0);
1329                tmpstr = ostrcat(tmpstr, ":", 1, 0);
1330                tmpstr = ostrcat(tmpstr, node->ftpport, 1, 0);
1331                tmpstr = ostrcat(tmpstr, "/", 1, 0);
1332                tmpstr = ostrcat(tmpstr, node->sharedir, 1, 0);
1333                tmpstr = ostrcat(tmpstr, ")", 1, 0);
1334                struct menulist* tmpmlist = addmenulist(&mlist, tmpstr, NULL, NULL, 0, 0);
1335                if(tmpmlist != NULL) tmpmlist->param = (char*)node;
1336                free(tmpstr); tmpstr = NULL;
1337                node = node->next;
1338        }
1339       
1340        mbox = menulistboxext(mlist, "networkbrowser", "Networkbrowser - show Shares", "%pluginpath%/networkbrowser/skin/", NULL, 1, &rcret, 0);
1341
1342        if(rcret == getrcconfigint("rcred", NULL))
1343        {
1344                screennetworkbrowser_addshare(NULL, 1);
1345                freemenulist(mlist, 0); mlist = NULL;
1346                freenetworkbrowser(); networkbrowser = NULL;
1347                goto start;
1348        }
1349
1350        if(rcret == getrcconfigint("rcblue", NULL))
1351        {
1352                screennetworkbrowser_scan();
1353                freemenulist(mlist, 0); mlist = NULL;
1354                freenetworkbrowser(); networkbrowser = NULL;
1355                goto start;
1356        }
1357       
1358        if(mbox != NULL)
1359        {
1360                if(rcret == getrcconfigint("rcok", NULL) || rcret == getrcconfigint("rcgreen", NULL))
1361                        screennetworkbrowser_addshare((struct networkbrowser*)mbox->param, 0);
1362                if(rcret == getrcconfigint("rcyellow", NULL))
1363                {
1364                        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)
1365                        {
1366                                struct networkbrowser* delnode = (struct networkbrowser*)mbox->param;
1367                                if(delnode != NULL)
1368                                {
1369                                        if(checkhddreplacement(delnode->sharename) == 1)
1370                                                delhddreplacement();
1371
1372                                        delnetworkbrowser(delnode);
1373                                        savenetworkbrowser("/var/etc/automount/auto.misc");
1374                                }
1375                        }
1376                }
1377                freemenulist(mlist, 0); mlist = NULL;
1378                freenetworkbrowser(); networkbrowser = NULL;
1379                goto start;
1380        }
1381
1382        freemenulist(mlist, 0); mlist = NULL;
1383        freenetworkbrowser();
1384
1385        status.hangtime = getconfigint("hangtime", NULL);
1386}
1387
1388#endif
Note: See TracBrowser for help on using the repository browser.