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&session_owner=", sess);
80 wprintf("\" onClick=\"return ConfirmKill();\" "
83 if (sess == WC->ctdl_pid) {
84 wprintf(" <A HREF=\"/edit_me\" "
89 /* (link to page this user) */
90 wprintf("<TD><A HREF=\"/display_page?recp=");
94 "SRC=\"/static/citadelchat_24x.gif\" "
96 " BORDER=0></A> ");
101 if ((now - last_activity) > 900L) {
104 "SRC=\"/static/inactiveuser_24x.gif\" "
105 "ALT=\"[idle]\" BORDER=0>");
110 "SRC=\"/static/activeuser_24x.gif\" "
111 "ALT=\"[active]\" BORDER=0>");
113 wprintf("</TD>\n\t<TD>");
117 /* username (link to user bio/photo page) */
118 wprintf("<A HREF=\"/showuser&who=");
125 wprintf("</TD>\n\t<TD>");
127 if (strlen(realroom) > 0) {
128 wprintf("<br /><I>");
132 wprintf("</TD>\n\t<TD>");
136 if (strlen(realhost) > 0) {
137 wprintf("<br /><I>");
141 wprintf("</TD>\n</TR>");
154 output_headers(1, 1, 2, 0, 1, 0, 0);
156 wprintf("<script type=\"text/javascript\">\n"
157 "function ConfirmKill() { \n"
158 "return confirm('Do you really want to kill this session?');\n"
163 wprintf("<div id=\"banner\">\n");
164 wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
165 wprintf("<IMG SRC=\"/static/usermanag_48x.gif\" ALT=\" \" ALIGN=MIDDLE>");
166 wprintf("<SPAN CLASS=\"titlebar\"> Users currently on ");
167 escputs(serv_info.serv_humannode);
168 wprintf("</SPAN></TD><TD ALIGN=RIGHT>");
170 wprintf("</TD></TR></TABLE>\n");
173 wprintf("<div id=\"content\">\n");
175 wprintf("<div id=\"fix_scrollbar_bug\">");
176 who_inner_div(); /* Actual data handled by another function */
179 wprintf("<div align=center>"
180 "Click on a name to read user info. Click on "
181 "<IMG ALIGN=MIDDLE SRC=\"/static/citadelchat_16x.gif\" ALT=\"(p)\" "
182 "BORDER=0> to send an instant message to that user.</div>\n");
187 void terminate_session(void)
191 serv_printf("TERM %s", bstr("which_session"));
192 serv_getln(buf, sizeof buf);
198 * Change your session info (fake roomname and hostname)
204 if (!strcasecmp(bstr("sc"), "Change room name")) {
205 serv_printf("RCHG %s", bstr("fake_roomname"));
206 serv_getln(buf, sizeof buf);
207 http_redirect("/who");
208 } else if (!strcasecmp(bstr("sc"), "Change host name")) {
209 serv_printf("HCHG %s", bstr("fake_hostname"));
210 serv_getln(buf, sizeof buf);
211 http_redirect("/who");
212 } else if (!strcasecmp(bstr("sc"), "Change user name")) {
213 serv_printf("UCHG %s", bstr("fake_username"));
214 serv_getln(buf, sizeof buf);
215 http_redirect("/who");
216 } else if (!strcasecmp(bstr("sc"), "Cancel")) {
217 http_redirect("/who");
220 output_headers(1, 1, 0, 0, 0, 0, 0);
222 wprintf("<div id=\"banner\">\n");
223 wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
224 wprintf("<SPAN CLASS=\"titlebar\">");
225 wprintf("Edit your session display");
226 wprintf("</SPAN></TD></TR></TABLE>\n");
227 wprintf("</div>\n<div id=\"content\">\n");
229 wprintf("This screen allows you to change the way your\n");
230 wprintf("session appears in the 'Who is online' listing.\n");
231 wprintf("To turn off any 'fake' name you've previously\n");
232 wprintf("set, simply click the appropriate 'change' button\n");
233 wprintf("without typing anything in the corresponding box.\n");
236 wprintf("<FORM METHOD=\"POST\" ACTION=\"/edit_me\">\n");
238 wprintf("<TABLE border=0 width=100%%>\n");
240 wprintf("<TR><TD><B>Room name:</B></TD>\n<TD>");
241 wprintf("<INPUT TYPE=\"text\" NAME=\"fake_roomname\" MAXLENGTH=\"64\">\n");
242 wprintf("</TD>\n<TD ALIGN=center>");
243 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Change room name\">");
244 wprintf("</TD>\n</TR>\n");
246 wprintf("<TR><TD><B>Host name:</B></TD><TD>");
247 wprintf("<INPUT TYPE=\"text\" NAME=\"fake_hostname\" MAXLENGTH=\"64\">\n");
248 wprintf("</TD>\n<TD ALIGN=center>");
249 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Change host name\">");
250 wprintf("</TD>\n</TR>\n");
253 wprintf("<TR><TD><B>User name:</B></TD><TD>");
254 wprintf("<INPUT TYPE=\"text\" NAME=\"fake_username\" MAXLENGTH=\"64\">\n");
255 wprintf("</TD>\n<TD ALIGN=center>");
256 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Change user name\">");
257 wprintf("</TD>\n</TR>\n");
259 wprintf("<TR><TD> </TD><TD> </TD><TD ALIGN=center>");
260 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
261 wprintf("</TD></TR></TABLE>\n");
263 wprintf("</FORM></CENTER>\n");