Remove $Id$ tags from most of webcit
[citadel.git] / webcit / mainmenu.c
1 #include "webcit.h"
2
3 /*
4  * The Main Menu
5  */
6 void display_main_menu(void)
7 {
8         begin_burst();
9         output_headers(1, 0, 0, 0, 1, 0);
10         DoTemplate(HKEY("display_main_menu"), NULL, &NoCtx);
11         end_burst();
12 }
13
14
15 /*
16  * System administration menu
17  */
18 void display_aide_menu(void)
19 {
20         begin_burst();
21         output_headers(1, 0, 0, 0, 1, 0);
22         DoTemplate(HKEY("aide_display_menu"), NULL, &NoCtx);
23         end_burst();
24 }
25
26
27 /*
28  * Interactive window to perform generic Citadel server commands.
29  */
30 void do_generic(void)
31 {
32         WCTemplputParams SubTP;
33         int Done = 0;
34         StrBuf *Buf;
35         StrBuf *LineBuf;
36         char *junk;
37         size_t len;
38
39         if (!havebstr("sc_button")) {
40                 display_main_menu();
41                 return;
42         }
43
44         memset(&SubTP, 0, sizeof(WCTemplputParams));
45         Buf = NewStrBuf();
46         serv_puts(bstr("g_cmd"));
47         StrBuf_ServGetln(Buf);
48         
49         switch (GetServerStatus(Buf, NULL)) {
50         case 8:
51                 serv_puts("\n\n000");
52                 if ( (StrLength(Buf)==3) && 
53                      !strcmp(ChrPtr(Buf), "000")) {
54                         StrBufAppendBufPlain(Buf, HKEY("\000"), 0);
55                         break;
56                 }
57         case 1:
58                 LineBuf = NewStrBuf();
59                 StrBufAppendBufPlain(Buf, HKEY("\n"), 0);
60                 while (!Done) {
61                         StrBuf_ServGetln(LineBuf);
62                         if ( (StrLength(LineBuf)==3) && 
63                              !strcmp(ChrPtr(LineBuf), "000")) {
64                                 Done = 1;
65                         }
66                         StrBufAppendBuf(Buf, LineBuf, 0);
67                         StrBufAppendBufPlain(Buf, HKEY("\n"), 0);
68                 }
69                 FreeStrBuf(&LineBuf);
70                 break;
71         case 2:
72                 break;
73         case 4:
74                 text_to_server(bstr("g_input"));
75                 serv_puts("000");
76                 break;
77         case 6:
78                 len = atol(&ChrPtr(Buf)[4]);
79                 StrBuf_ServGetBLOBBuffered(Buf, len);
80                 break;
81         case 7:
82                 len = atol(&ChrPtr(Buf)[4]);
83                 junk = malloc(len);
84                 memset(junk, 0, len);
85                 serv_write(junk, len);
86                 free(junk);
87                 break;
88         }
89         
90         begin_burst();
91         output_headers(1, 0, 0, 0, 1, 0);
92
93         SubTP.Filter.ContextType = CTX_STRBUF;
94         SubTP.Context = Buf;
95
96         DoTemplate(HKEY("aide_display_generic_result"), NULL, &SubTP);
97
98         wDumpContent(1);
99
100         FreeStrBuf(&Buf);
101 }
102
103 /*
104  * Display the wait / input dialog while restarting the server.
105  */
106 void display_shutdown(void)
107 {
108         char buf[SIZ];
109         char *when;
110         
111         when=bstr("when");
112         if (strcmp(when, "now") == 0){
113                 serv_printf("DOWN 1");
114                 serv_getln(buf, sizeof buf);
115                 if (atol(buf) == 500)
116                 { /* upsie. maybe the server is not running as daemon? */
117                         
118                         safestrncpy(WC->ImportantMessage,
119                                     &buf[4],
120                                     sizeof WC->ImportantMessage);
121                 }
122                 begin_burst();
123                 output_headers(1, 0, 0, 0, 1, 0);
124                 DoTemplate(HKEY("aide_display_serverrestart"), NULL, &NoCtx);
125                 end_burst();
126                 lingering_close(WC->Hdr->http_sock);
127                 sleeeeeeeeeep(10);
128                 serv_printf("NOOP");
129                 serv_printf("NOOP");
130         }
131         else if (strcmp(when, "page") == 0) {
132                 char *message;
133                
134                 message = bstr("message");
135                 if ((message == NULL) || (IsEmptyStr(message)))
136                 {
137                         begin_burst();
138                         output_headers(1, 0, 0, 0, 1, 0);
139                         DoTemplate(HKEY("aide_display_serverrestart_page"), NULL, &NoCtx);
140                         end_burst();
141                 }
142                 else
143                 {
144                         serv_printf("SEXP broadcast|%s", message);
145                         serv_getln(buf, sizeof buf); /* TODO: should we care? */
146                         begin_burst();
147                         output_headers(1, 0, 0, 0, 1, 0);
148                         DoTemplate(HKEY("aide_display_serverrestart_page"), NULL, &NoCtx);
149                         end_burst();                    
150                 }
151         }
152         else if (!strcmp(when, "idle")) {
153                 serv_printf("SCDN 3");
154                 serv_getln(buf, sizeof buf);
155
156                 if (atol(buf) == 500)
157                 { /* upsie. maybe the server is not running as daemon? */
158                         safestrncpy(WC->ImportantMessage,
159                                     &buf[4],
160                                     sizeof WC->ImportantMessage);
161                 }
162                 begin_burst();
163                 output_headers(1, 0, 0, 0, 1, 0);
164                 DoTemplate(HKEY("aide_display_menu"), NULL, &NoCtx);
165                 end_burst();                    
166         }
167 }
168
169 void 
170 InitModule_MAINMENU
171 (void)
172 {
173         WebcitAddUrlHandler(HKEY("display_aide_menu"), "", 0, display_aide_menu, 0);
174         WebcitAddUrlHandler(HKEY("server_shutdown"), "", 0, display_shutdown, 0);
175         WebcitAddUrlHandler(HKEY("display_main_menu"), "", 0, display_main_menu, 0);
176         WebcitAddUrlHandler(HKEY("do_generic"), "", 0, do_generic, 0);
177 }