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