+
+/*
+ * Wholist section
+ * /
+void wholist_section(void) {
+ UserStateStruct *User;
+ void *VUser;
+ HashList *List;
+ HashPos *it;
+ const char *UserName;
+ long len;
+ char buf[SIZ];
+ time_t now;
+
+ serv_puts("TIME");
+ serv_getln(buf, sizeof buf);
+ if (buf[0] == '2') {
+ now = extract_long(&buf[4], 0);
+ }
+ else {
+ now = time(NULL);
+ }
+
+ List = NewHash(1, NULL);
+
+ if (GetWholistSection(List, now)) {
+ SortByPayload(List, CompareUserStruct);
+ it = GetNewHashPos();
+ while (GetNextHashPos(List, it, &len, &UserName, &VUser)) {
+ User = VUser;
+ if (strcmp(ChrPtr(User->UserName), NLI)) {
+ wprintf("<li class=\"");
+ if (User->Idle) {
+ wprintf("inactiveuser");
+ }
+ else {
+ wprintf("activeuser");
+ }
+ wprintf("\"><a href=\"showuser?who=");
+ UrlescPutStrBuf(User->UserName);
+ wprintf("\">");
+ StrEscPuts(User->UserName);
+ wprintf("</a></li>");
+ }
+ }
+ DeleteHashPos(&it);
+ }
+ DeleteHash(&List);
+}
+*/
+
+void _terminate_session(void) {
+ slrp_highest();
+ terminate_session();
+}
+
+HashList *GetWholistHash(WCTemplateToken *Token)
+{
+ HashList *List;
+ char buf[SIZ];
+ time_t now;
+
+ serv_puts("TIME");
+ serv_getln(buf, sizeof buf);
+ if (buf[0] == '2') {
+ now = extract_long(&buf[4], 0);
+ }
+ else {
+ now = time(NULL);
+ }
+
+ List = NewHash(1, NULL);
+ GetWholistSection(List, now);
+ return List;
+}
+
+void WholistSubst(StrBuf *TemplBuffer, void *vContext, WCTemplateToken *Token)
+{
+ UserStateStruct *User = (UserStateStruct*) vContext;
+
+ SVPutBuf("WHO:NAME", User->UserName, 1);
+ SVPutBuf("WHO:ROOM", User->Room, 1);
+ SVPutBuf("WHO:HOST", User->Host, 1);
+ SVPutBuf("WHO:REALROOM", User->RealRoom, 1);
+ SVPutBuf("WHO:REALHOST", User->RealHost, 1);
+ svputlong("WHO:LASTACTIVE", User->LastActive);
+ ///svputlong("WHO:IDLESINCE",(now - User->LastActive) / 60);//// todo
+ svputlong("WHO:SESSION", User->Session);
+ svputlong("WHO:IDLE", User->Idle);
+ svputlong("WHO:NSESSIONS", User->SessionCount);
+ svputlong("WHO:ISME", (User->Session == WC->ctdl_pid));
+}
+
+void DeleteWholistHash(HashList *KillMe)
+{
+ DeleteHash(&KillMe);
+}
+
+void
+InitModule_WHO
+(void)
+{
+/// WebcitAddUrlHandler(HKEY("who"), who, 0);
+// WebcitAddUrlHandler(HKEY("who_inner_html"), who_inner_div, AJAX);
+// WebcitAddUrlHandler(HKEY("wholist_section"), wholist_section, AJAX);
+ WebcitAddUrlHandler(HKEY("terminate_session"), _terminate_session, 0);
+ WebcitAddUrlHandler(HKEY("edit_me"), edit_me, 0);
+
+ RegisterIterator("WHOLIST", 0, NULL, GetWholistHash, WholistSubst, DeleteWholistHash);
+}