* Brought over the newer string tokenizer from Citadel
[citadel.git] / webcit / netconf.c
1
2
3
4 #include <ctype.h>
5 #include <stdlib.h>
6 #include <unistd.h>
7 #include <stdio.h>
8 #include <fcntl.h>
9 #include <signal.h>
10 #include <sys/types.h>
11 #include <sys/wait.h>
12 #include <sys/socket.h>
13 #include <sys/time.h>
14 #include <limits.h>
15 #include <netinet/in.h>
16 #include <netdb.h>
17 #include <string.h>
18 #include <pwd.h>
19 #include <errno.h>
20 #include <stdarg.h>
21 #include <pthread.h>
22 #include <signal.h>
23 #include "webcit.h"
24
25
26
27
28
29
30 struct sharelist {
31         struct sharelist *next;
32         char shname[SIZ];
33 };
34
35
36 void display_edit_node(void)
37 {
38         char buf[SIZ];
39         char node[SIZ];
40         char sroom[SIZ];
41
42         strcpy(node, bstr("node"));
43
44         output_headers(1);
45         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=000077><TR><TD>");
46         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
47         wprintf("<B>Edit share list for ");
48         escputs(node);
49         wprintf("</B>\n");
50         wprintf("</FONT></TD></TR></TABLE>\n");
51
52         wprintf("<CENTER>\n");
53         wprintf("<A HREF=\"/display_share&node=");
54         urlescputs(node);
55         wprintf("\">Add a shared room</A><BR>\n");
56
57         wprintf("<A HREF=\"/display_netconf");
58         wprintf("\">Return to network configuration screen</A><BR>\n");
59
60         serv_printf("NSET roomlist|%s", node);
61         serv_gets(buf);
62         if (buf[0] == '1') {
63                 wprintf("<TABLE border=0>\n");
64                 while (serv_gets(buf), strcmp(buf, "000")) {
65                         extract(sroom, buf, 0);
66                         wprintf("<TR><TD><FONT SIZE=+1>");
67                         escputs(sroom);
68                         wprintf("</FONT></TD>");
69                         wprintf("<TD><A HREF=\"/display_confirm_unshare&sroom=");
70                         urlescputs(sroom);
71                         wprintf("&node=");
72                         urlescputs(node);
73                         wprintf("\">(UnShare)</A></TD>");
74                         wprintf("</TR>\n");
75                 }
76                 wprintf("</TABLE></CENTER>\n");
77         }
78         wDumpContent(1);
79 }
80
81
82
83 void display_netconf(void)
84 {
85         char buf[SIZ];
86         char node[SIZ];
87
88         output_headers(1);
89         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=770000><TR><TD>");
90         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
91         wprintf("<B>Network configuration</B>\n");
92         wprintf("</FONT></TD></TR></TABLE>\n");
93
94         wprintf("<CENTER>");
95         wprintf("<A HREF=\"/display_add_node\">");
96         wprintf("Add a new node</A><BR>\n");
97         wprintf("</CENTER>");
98
99         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=000077><TR><TD>");
100         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
101         wprintf("<B>Currently configured nodes</B>\n");
102         wprintf("</FONT></TD></TR></TABLE>\n");
103         serv_puts("NSET nodelist");
104         serv_gets(buf);
105         if (buf[0] == '1') {
106                 wprintf("<CENTER><TABLE border=0>\n");
107                 while (serv_gets(buf), strcmp(buf, "000")) {
108                         extract(node, buf, 0);
109                         wprintf("<TR><TD><FONT SIZE=+1>");
110                         escputs(node);
111                         wprintf("</FONT></TD>");
112                         wprintf("<TD><A HREF=\"/display_edit_node&node=");
113                         urlescputs(node);
114                         wprintf("\">(Edit)</A></TD>");
115                         wprintf("<TD><A HREF=\"/display_confirm_delete_node&node=");
116                         urlescputs(node);
117                         wprintf("\">(Delete)</A></TD>");
118                         wprintf("</TR>\n");
119                 }
120                 wprintf("</TABLE></CENTER>\n");
121         }
122         wDumpContent(1);
123 }
124
125
126 void display_confirm_unshare(void)
127 {
128         char node[SIZ];
129         char sroom[SIZ];
130
131         output_headers(1);
132         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=770000><TR><TD>");
133         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
134         wprintf("<B>Confirm unshare</B>\n");
135         wprintf("</FONT></TD></TR></TABLE>\n");
136
137         strcpy(node, bstr("node"));
138         strcpy(sroom, bstr("sroom"));
139         wprintf("<CENTER>Are you sure you want to unshare <FONT SIZE=+1>");
140         escputs(sroom);
141         wprintf("</FONT>?<BR>\n");
142         wprintf("<A HREF=\"/unshare&node=");
143         urlescputs(node);
144         wprintf("&sroom=");
145         urlescputs(sroom);
146         wprintf("\">Yes</A>&nbsp;&nbsp;&nbsp;");
147         wprintf("<A HREF=\"/display_edit_node&node=");
148         urlescputs(node);
149         wprintf("\">No</A><BR>\n");
150         wDumpContent(1);
151 }
152
153
154 void display_confirm_delete_node(void)
155 {
156         char node[SIZ];
157
158         output_headers(1);
159         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=770000><TR><TD>");
160         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
161         wprintf("<B>Confirm delete</B>\n");
162         wprintf("</FONT></TD></TR></TABLE>\n");
163
164         strcpy(node, bstr("node"));
165         wprintf("<CENTER>Are you sure you want to delete <FONT SIZE=+1>");
166         escputs(node);
167         wprintf("</FONT>?<BR>\n");
168         wprintf("<A HREF=\"/delete_node&node=");
169         urlescputs(node);
170         wprintf("\">Yes</A>&nbsp;&nbsp;&nbsp;");
171         wprintf("<A HREF=\"/display_netconf\">No</A><BR>\n");
172         wDumpContent(1);
173 }
174
175
176 void delete_node(void)
177 {
178         char node[SIZ];
179         char buf[SIZ];
180
181         strcpy(node, bstr("node"));
182         sprintf(buf, "NSET deletenode|%s", node);
183         serv_puts(buf);
184         serv_gets(buf);
185         if (buf[0] == '1') {
186                 output_headers(1);
187                 server_to_text();
188                 wprintf("<A HREF=\"/display_netconf\">Back to menu</A>\n");
189                 wDumpContent(1);
190         } else {
191                 display_error(&buf[4]);
192         }
193 }
194
195
196 void unshare(void)
197 {
198         char node[SIZ];
199         char sroom[SIZ];
200         char buf[SIZ];
201
202         strcpy(node, bstr("node"));
203         strcpy(sroom, bstr("sroom"));
204         sprintf(buf, "NSET unshare|%s|%s", node, sroom);
205         serv_puts(buf);
206         serv_gets(buf);
207         if (buf[0] == '1') {
208                 output_headers(1);
209                 server_to_text();
210                 wprintf("<A HREF=\"/display_netconf\">Back to menu</A>\n");
211                 wDumpContent(1);
212         } else {
213                 display_error(&buf[4]);
214         }
215 }
216
217
218
219 void display_add_node(void)
220 {
221
222         output_headers(1);
223         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=007700><TR><TD>");
224         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
225         wprintf("<B>Add a new node</B>\n");
226         wprintf("</FONT></TD></TR></TABLE>\n");
227
228         wprintf("<CENTER>");
229         wprintf("<FORM METHOD=\"POST\" ACTION=\"/add_node\">\n");
230
231         wprintf("Enter name of new node: ");
232         wprintf("<INPUT TYPE=\"text\" NAME=\"node\" MAXLENGTH=\"64\"><BR>\n");
233
234         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Add\">");
235         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
236
237         wprintf("</FORM></CENTER>\n");
238         wDumpContent(1);
239 }
240
241
242
243 void add_node(void)
244 {
245         char node[SIZ];
246         char buf[SIZ];
247         char sc[SIZ];
248
249         strcpy(node, bstr("node"));
250         strcpy(sc, bstr("sc"));
251
252         if (!strcmp(sc, "Add")) {
253                 sprintf(buf, "NSET addnode|%s", node);
254                 serv_puts(buf);
255                 serv_gets(buf);
256                 if (buf[0] == '1') {
257                         output_headers(1);
258                         server_to_text();
259                         wprintf("<A HREF=\"/display_netconf\">Back to menu</A>\n");
260                         wDumpContent(1);
261                 } else {
262                         display_error(&buf[4]);
263                 }
264         }
265 }
266
267
268
269 void display_share(void)
270 {
271         char buf[SIZ];
272         char node[SIZ];
273         char sroom[SIZ];
274         struct sharelist *shlist = NULL;
275         struct sharelist *shptr;
276         int already_shared;
277
278         strcpy(node, bstr("node"));
279
280         output_headers(1);
281         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=007700><TR><TD>");
282         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
283         wprintf("<B>Add a shared room</B>\n");
284         wprintf("</FONT></TD></TR></TABLE>\n");
285
286         wprintf("<CENTER>");
287         wprintf("<FORM METHOD=\"POST\" ACTION=\"/share\">\n");
288         wprintf("<INPUT TYPE=\"hidden\" NAME=\"node\" VALUE=\"");
289         urlescputs(node);
290         wprintf("\">\n");
291
292         sprintf(buf, "NSET roomlist|%s", node);
293         serv_puts(buf);
294         serv_gets(buf);
295         if (buf[0] == '1') {
296                 while (serv_gets(buf), strcmp(buf, "000")) {
297                         shptr = (struct sharelist *)
298                             malloc(sizeof(struct sharelist));
299                         shptr->next = shlist;
300                         extract(shptr->shname, buf, 0);
301                         shlist = shptr;
302                 }
303         }
304         wprintf("<SELECT NAME=\"sroom\" SIZE=5 WIDTH=30>\n");
305         serv_puts("LKRA");
306         serv_gets(buf);
307         if (buf[0] == '1') {
308                 while (serv_gets(buf), strcmp(buf, "000")) {
309                         extract(sroom, buf, 0);
310                         already_shared = 0;
311                         for (shptr = shlist; shptr != NULL; shptr = shptr->next) {
312                                 if (!strcasecmp(sroom, shptr->shname))
313                                         already_shared = 1;
314                         }
315
316                         if (already_shared == 0) {
317                                 wprintf("<OPTION>");
318                                 escputs(sroom);
319                                 wprintf("\n");
320                         }
321                 }
322         }
323         wprintf("</SELECT>\n");
324         wprintf("<BR>\n");
325
326         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Share\">");
327         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
328
329         wprintf("</FORM></CENTER>\n");
330         wDumpContent(1);
331
332         /* free the list */
333         while (shlist != NULL) {
334                 shptr = shlist->next;
335                 free(shlist);
336                 shlist = shptr;
337         }
338
339 }
340
341
342
343 void share(void)
344 {
345         char node[SIZ];
346         char buf[SIZ];
347         char sc[SIZ];
348         char sroom[SIZ];
349
350         strcpy(node, bstr("node"));
351         strcpy(sc, bstr("sc"));
352         strcpy(sroom, bstr("sroom"));
353
354         if (!strcmp(sc, "Share")) {
355                 sprintf(buf, "NSET share|%s|%s", node, sroom);
356                 serv_puts(buf);
357                 serv_gets(buf);
358                 if (buf[0] == '1') {
359                         output_headers(1);
360                         server_to_text();
361                         wprintf("<A HREF=\"/display_netconf\">Back to menu</A>\n");
362                         wDumpContent(1);
363                 } else {
364                         display_error(&buf[4]);
365                 }
366
367         }
368 }