4 * Display a list of all users currently logged on to the Citadel server.
13 #include <sys/types.h>
15 #include <sys/socket.h>
18 #include <netinet/in.h>
31 * Display inner div of Wholist
33 void who_inner_div(void) {
34 char buf[SIZ], user[SIZ], room[SIZ], host[SIZ],
35 realroom[SIZ], realhost[SIZ];
41 wprintf("<table border=\"0\" cellspacing=\"0\" width=\"100%%\" bgcolor=\"#FFFFFF\">"
43 wprintf("<th colspan=\"3\"> </th>\n");
44 wprintf("<th>User Name</th>\n");
45 wprintf("<th>Room</th>");
46 wprintf("<th>From host</th>\n</tr>\n");
49 serv_getln(buf, sizeof buf);
51 now = extract_long(&buf[4], 0);
58 serv_getln(buf, sizeof buf);
60 while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
61 sess = extract_int(buf, 0);
62 extract_token(user, buf, 1, '|', sizeof user);
63 extract_token(room, buf, 2, '|', sizeof room);
64 extract_token(host, buf, 3, '|', sizeof host);
65 extract_token(realroom, buf, 9, '|', sizeof realroom);
66 extract_token(realhost, buf, 10, '|', sizeof realhost);
67 last_activity = extract_long(buf, 5);
70 wprintf("<tr bgcolor=\"#%s\">",
71 (bg ? "DDDDDD" : "FFFFFF")
77 (sess != WC->ctdl_pid)) {
78 wprintf(" <a href=\"/terminate_session?which_session=%d", sess);
79 wprintf("\" onClick=\"return ConfirmKill();\" "
82 if (sess == WC->ctdl_pid) {
83 wprintf(" <a href=\"/edit_me\" "
88 /* (link to page this user) */
89 wprintf("<td><a href=\"/display_page?recp=");
92 "<img align=\"middle\" "
93 "src=\"/static/citadelchat_24x.gif\" "
95 " border=\"0\" /></a> ");
100 if ((now - last_activity) > 900L) {
102 "<img align=\"middle\" "
103 "src=\"/static/inactiveuser_24x.gif\" "
104 "alt=\"[idle]\" border=\"0\" />");
108 "<img align=\"middle\" "
109 "src=\"/static/activeuser_24x.gif\" "
110 "alt=\"[active]\" border=\"0\" />");
112 wprintf("</td>\n<td>");
116 /* username (link to user bio/photo page) */
117 wprintf("<a href=\"/showuser?who=");
124 wprintf("</td>\n\t<td>");
126 if (strlen(realroom) > 0) {
127 wprintf("<br /><i>");
131 wprintf("</td>\n\t<td>");
135 if (strlen(realhost) > 0) {
136 wprintf("<br /><i>");
140 wprintf("</td>\n</tr>");
148 * XML-encapsulated version of wholist inner html
150 void who_inner_html(void) {
151 output_headers(0, 0, 0, 0, 0, 0, 0);
153 wprintf("Content-type: text/xml;charset=UTF-8\r\n"
155 "Connection: close\r\n"
156 "Pragma: no-cache\r\n"
157 "Cache-Control: no-store\r\n",
161 wprintf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
162 "<ajax-response>\r\n"
163 "<response type=\"element\" id=\"fix_scrollbar_bug\">\r\n"
168 wprintf("</response>\r\n"
169 "</ajax-response>\r\n"
183 output_headers(1, 1, 2, 0, 1, 0, 0); old refresh30 version
185 output_headers(1, 1, 2, 0, 0, 0, 0);
187 wprintf("<script type=\"text/javascript\">\n"
188 "function ConfirmKill() { \n"
189 "return confirm('Do you really want to kill this session?');\n"
194 wprintf("<div id=\"banner\">\n");
195 wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
196 wprintf("<IMG SRC=\"/static/usermanag_48x.gif\" ALT=\" \" "
199 /* "onLoad=\"javascript:bodyOnLoad()\" " */
200 wprintf("<SPAN CLASS=\"titlebar\"> Users currently on ");
201 escputs(serv_info.serv_humannode);
202 wprintf("</SPAN></TD><TD ALIGN=RIGHT>");
204 wprintf("</TD></TR></TABLE>\n");
207 wprintf("<div id=\"content\">\n");
209 wprintf("<div style=\"display:inline\" id=\"fix_scrollbar_bug\">");
210 who_inner_div(); /* Actual data handled by another function */
213 wprintf("<div id=\"instructions\" align=center>"
214 "Click on a name to read user info. Click on "
215 "<IMG ALIGN=MIDDLE SRC=\"/static/citadelchat_16x.gif\" "
216 "ALT=\"(p)\" BORDER=0>"
217 " to send an instant message to that user.</div>\n");
219 /* JavaScript to make the ajax refresh happen:
220 * 1. Register the request 'getWholist' which calls the WebCit action 'who_inner_html'
221 * 2. Register the 'fix_scrollbar_bug' div as one we're interested in ajaxifying
222 * 3. setInterval to make the ajax refresh happen every 30 seconds. The random number
223 * in the request is there to prevent IE from caching the XML even though it's been
224 * told not to. Die, Microsoft, Die.
228 " <script type=\"text/javascript\"> \n"
229 " ajaxEngine.registerRequest('getWholist', 'who_inner_html');\n"
230 " ajaxEngine.registerAjaxElement('fix_scrollbar_bug'); \n"
231 " setInterval(\"ajaxEngine.sendRequest('getWholist', 'junk='+Math.random());\", 3000); \n"
240 void terminate_session(void)
244 serv_printf("TERM %s", bstr("which_session"));
245 serv_getln(buf, sizeof buf);
251 * Change your session info (fake roomname and hostname)
257 if (!strcasecmp(bstr("sc"), "Change room name")) {
258 serv_printf("RCHG %s", bstr("fake_roomname"));
259 serv_getln(buf, sizeof buf);
260 http_redirect("/who");
261 } else if (!strcasecmp(bstr("sc"), "Change host name")) {
262 serv_printf("HCHG %s", bstr("fake_hostname"));
263 serv_getln(buf, sizeof buf);
264 http_redirect("/who");
265 } else if (!strcasecmp(bstr("sc"), "Change user name")) {
266 serv_printf("UCHG %s", bstr("fake_username"));
267 serv_getln(buf, sizeof buf);
268 http_redirect("/who");
269 } else if (!strcasecmp(bstr("sc"), "Cancel")) {
270 http_redirect("/who");
273 output_headers(1, 1, 0, 0, 0, 0, 0);
275 wprintf("<div id=\"banner\">\n");
276 wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
277 wprintf("<SPAN CLASS=\"titlebar\">");
278 wprintf("Edit your session display");
279 wprintf("</SPAN></TD></TR></TABLE>\n");
280 wprintf("</div>\n<div id=\"content\">\n");
282 wprintf("This screen allows you to change the way your\n");
283 wprintf("session appears in the 'Who is online' listing.\n");
284 wprintf("To turn off any 'fake' name you've previously\n");
285 wprintf("set, simply click the appropriate 'change' button\n");
286 wprintf("without typing anything in the corresponding box.\n");
289 wprintf("<FORM METHOD=\"POST\" ACTION=\"/edit_me\">\n");
291 wprintf("<TABLE border=0 width=100%%>\n");
293 wprintf("<TR><TD><B>Room name:</B></TD>\n<TD>");
294 wprintf("<INPUT TYPE=\"text\" NAME=\"fake_roomname\" MAXLENGTH=\"64\">\n");
295 wprintf("</TD>\n<TD ALIGN=center>");
296 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Change room name\">");
297 wprintf("</TD>\n</TR>\n");
299 wprintf("<TR><TD><B>Host name:</B></TD><TD>");
300 wprintf("<INPUT TYPE=\"text\" NAME=\"fake_hostname\" MAXLENGTH=\"64\">\n");
301 wprintf("</TD>\n<TD ALIGN=center>");
302 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Change host name\">");
303 wprintf("</TD>\n</TR>\n");
306 wprintf("<TR><TD><B>User name:</B></TD><TD>");
307 wprintf("<INPUT TYPE=\"text\" NAME=\"fake_username\" MAXLENGTH=\"64\">\n");
308 wprintf("</TD>\n<TD ALIGN=center>");
309 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Change user name\">");
310 wprintf("</TD>\n</TR>\n");
312 wprintf("<TR><TD> </TD><TD> </TD><TD ALIGN=center>");
313 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
314 wprintf("</TD></TR></TABLE>\n");
315 wprintf("</FORM></CENTER>\n");