* wildmat.c, braindamage.c: added
[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 {
19         char buf[256];
20         char node[256];
21         char sroom[256];
22
23         strcpy(node, bstr("node"));
24
25         printf("HTTP/1.0 200 OK\n");
26         output_headers(1, "bottom");
27         wprintf("<TABLE WIDTH=100% BORDER=0 BGCOLOR=000077><TR><TD>");
28         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
29         wprintf("<B>Edit share list for ");
30         escputs(node);
31         wprintf("</B>\n");
32         wprintf("</FONT></TD></TR></TABLE>\n");
33
34         wprintf("<CENTER>\n");
35         wprintf("<A HREF=\"/display_share&node=");
36         urlescputs(node);
37         wprintf("\">Add a shared room</A><BR>\n");
38
39         wprintf("<A HREF=\"/display_netconf");
40         wprintf("\">Return to network configuration screen</A><BR>\n");
41
42         serv_printf("NSET roomlist|%s", node);
43         serv_gets(buf);
44         if (buf[0] == '1') {
45                 wprintf("<TABLE border=0>\n");
46                 while (serv_gets(buf), strcmp(buf, "000")) {
47                         extract(sroom, buf, 0);
48                         wprintf("<TR><TD><FONT SIZE=+1>");
49                         escputs(sroom);
50                         wprintf("</FONT></TD>");
51                         wprintf("<TD><A HREF=\"/display_confirm_unshare&sroom=");
52                         urlescputs(sroom);
53                         wprintf("&node=");
54                         urlescputs(node);
55                         wprintf("\">(UnShare)</A></TD>");
56                         wprintf("</TR>\n");
57                 }
58                 wprintf("</TABLE></CENTER>\n");
59         }
60         wDumpContent(1);
61 }
62
63
64
65 void display_netconf(void)
66 {
67         char buf[256];
68         char node[256];
69
70         printf("HTTP/1.0 200 OK\n");
71         output_headers(1, "bottom");
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         wDumpContent(1);
106 }
107
108
109 void display_confirm_unshare(void)
110 {
111         char node[256];
112         char sroom[256];
113
114         printf("HTTP/1.0 200 OK\n");
115         output_headers(1, "bottom");
116         wprintf("<TABLE WIDTH=100% BORDER=0 BGCOLOR=770000><TR><TD>");
117         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
118         wprintf("<B>Confirm unshare</B>\n");
119         wprintf("</FONT></TD></TR></TABLE>\n");
120
121         strcpy(node, bstr("node"));
122         strcpy(sroom, bstr("sroom"));
123         wprintf("<CENTER>Are you sure you want to unshare <FONT SIZE=+1>");
124         escputs(sroom);
125         wprintf("</FONT>?<BR>\n");
126         wprintf("<A HREF=\"/unshare&node=");
127         urlescputs(node);
128         wprintf("&sroom=");
129         urlescputs(sroom);
130         wprintf("\">Yes</A>&nbsp;&nbsp;&nbsp;");
131         wprintf("<A HREF=\"/display_edit_node&node=");
132         urlescputs(node);
133         wprintf("\">No</A><BR>\n");
134         wDumpContent(1);
135 }
136
137
138 void display_confirm_delete_node(void)
139 {
140         char node[256];
141
142         printf("HTTP/1.0 200 OK\n");
143         output_headers(1, "bottom");
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         wDumpContent(1);
158 }
159
160
161 void delete_node(void)
162 {
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, "bottom");
173                 server_to_text();
174                 wprintf("<A HREF=\"/display_netconf\">Back to menu</A>\n");
175                 wDumpContent(1);
176         } else {
177                 display_error(&buf[4]);
178         }
179 }
180
181
182 void unshare(void)
183 {
184         char node[256];
185         char sroom[256];
186         char buf[256];
187
188         strcpy(node, bstr("node"));
189         strcpy(sroom, bstr("sroom"));
190         sprintf(buf, "NSET unshare|%s|%s", node, sroom);
191         serv_puts(buf);
192         serv_gets(buf);
193         if (buf[0] == '1') {
194                 printf("HTTP/1.0 200 OK\n");
195                 output_headers(1, "bottom");
196                 server_to_text();
197                 wprintf("<A HREF=\"/display_netconf\">Back to menu</A>\n");
198                 wDumpContent(1);
199         } else {
200                 display_error(&buf[4]);
201         }
202 }
203
204
205
206 void display_add_node(void)
207 {
208
209         printf("HTTP/1.0 200 OK\n");
210         output_headers(1, "bottom");
211         wprintf("<TABLE WIDTH=100% BORDER=0 BGCOLOR=007700><TR><TD>");
212         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
213         wprintf("<B>Add a new node</B>\n");
214         wprintf("</FONT></TD></TR></TABLE>\n");
215
216         wprintf("<CENTER>");
217         wprintf("<FORM METHOD=\"POST\" ACTION=\"/add_node\">\n");
218
219         wprintf("Enter name of new node: ");
220         wprintf("<INPUT TYPE=\"text\" NAME=\"node\" MAXLENGTH=\"64\"><BR>\n");
221
222         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Add\">");
223         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
224
225         wprintf("</FORM></CENTER>\n");
226         wDumpContent(1);
227 }
228
229
230
231 void add_node(void)
232 {
233         char node[256];
234         char buf[256];
235         char sc[256];
236
237         strcpy(node, bstr("node"));
238         strcpy(sc, bstr("sc"));
239
240         if (!strcmp(sc, "Add")) {
241                 sprintf(buf, "NSET addnode|%s", node);
242                 serv_puts(buf);
243                 serv_gets(buf);
244                 if (buf[0] == '1') {
245                         printf("HTTP/1.0 200 OK\n");
246                         output_headers(1, "bottom");
247                         server_to_text();
248                         wprintf("<A HREF=\"/display_netconf\">Back to menu</A>\n");
249                         wDumpContent(1);
250                 } else {
251                         display_error(&buf[4]);
252                 }
253         }
254 }
255
256
257
258 void display_share(void)
259 {
260         char buf[256];
261         char node[256];
262         char sroom[256];
263         struct sharelist *shlist = NULL;
264         struct sharelist *shptr;
265         int already_shared;
266
267         strcpy(node, bstr("node"));
268
269         printf("HTTP/1.0 200 OK\n");
270         output_headers(1, "bottom");
271         wprintf("<TABLE WIDTH=100% BORDER=0 BGCOLOR=007700><TR><TD>");
272         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
273         wprintf("<B>Add a shared room</B>\n");
274         wprintf("</FONT></TD></TR></TABLE>\n");
275
276         wprintf("<CENTER>");
277         wprintf("<FORM METHOD=\"POST\" ACTION=\"/share\">\n");
278         wprintf("<INPUT TYPE=\"hidden\" NAME=\"node\" VALUE=\"");
279         urlescputs(node);
280         wprintf("\">\n");
281
282         sprintf(buf, "NSET roomlist|%s", node);
283         serv_puts(buf);
284         serv_gets(buf);
285         if (buf[0] == '1') {
286                 while (serv_gets(buf), strcmp(buf, "000")) {
287                         shptr = (struct sharelist *)
288                             malloc(sizeof(struct sharelist));
289                         shptr->next = shlist;
290                         extract(shptr->shname, buf, 0);
291                         shlist = shptr;
292                 }
293         }
294         wprintf("<SELECT NAME=\"sroom\" SIZE=5 WIDTH=30>\n");
295         serv_puts("LKRA");
296         serv_gets(buf);
297         if (buf[0] == '1') {
298                 while (serv_gets(buf), strcmp(buf, "000")) {
299                         extract(sroom, buf, 0);
300                         already_shared = 0;
301                         for (shptr = shlist; shptr != NULL; shptr = shptr->next) {
302                                 if (!strcasecmp(sroom, shptr->shname))
303                                         already_shared = 1;
304                         }
305
306                         if (already_shared == 0) {
307                                 wprintf("<OPTION>");
308                                 escputs(sroom);
309                                 wprintf("\n");
310                         }
311                 }
312         }
313         wprintf("</SELECT>\n");
314         wprintf("<BR>\n");
315
316         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Share\">");
317         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
318
319         wprintf("</FORM></CENTER>\n");
320         wDumpContent(1);
321
322         /* free the list */
323         while (shlist != NULL) {
324                 shptr = shlist->next;
325                 free(shlist);
326                 shlist = shptr;
327         }
328
329 }
330
331
332
333 void share(void)
334 {
335         char node[256];
336         char buf[256];
337         char sc[256];
338         char sroom[256];
339
340         strcpy(node, bstr("node"));
341         strcpy(sc, bstr("sc"));
342         strcpy(sroom, bstr("sroom"));
343
344         if (!strcmp(sc, "Share")) {
345                 sprintf(buf, "NSET share|%s|%s", node, sroom);
346                 serv_puts(buf);
347                 serv_gets(buf);
348                 if (buf[0] == '1') {
349                         printf("HTTP/1.0 200 OK\n");
350                         output_headers(1, "bottom");
351                         server_to_text();
352                         wprintf("<A HREF=\"/display_netconf\">Back to menu</A>\n");
353                         wDumpContent(1);
354                 } else {
355                         display_error(&buf[4]);
356                 }
357
358         }
359 }