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