/* * list users in chat in this room */ void roomchat_rwho(char *argbuf) { struct CitContext *nptr; int nContexts, i; if ((CC->cs_flags & CS_CHAT) == 0) { cprintf("%d Session is not in chat mode.\n", ERROR); return; } cprintf("%d%c \n", LISTING_FOLLOWS, CtdlCheckExpress() ); nptr = CtdlGetContextArray(&nContexts) ; // grab a copy of the wholist if (nptr) { for (i=0; i<nContexts; i++) { // list the users if ( (nptr[i].room.QRnumber == CC->room.QRnumber) && (nptr[i].cs_flags & CS_CHAT) ) { cprintf("%s\n", nptr[i].user.fullname); } } free(nptr); // free our copy } cprintf("000\n"); }
/* * get room parameters (admin or room admin command) */ void cmd_getr(char *cmdbuf) { if (CtdlAccessCheck(ac_room_aide)) return; CtdlGetRoom(&CC->room, CC->room.QRname); cprintf("%d%c%s|%s|%s|%d|%d|%d|%d|%d|\n", CIT_OK, CtdlCheckExpress(), ((CC->room.QRflags & QR_MAILBOX) ? &CC->room.QRname[11] : CC->room.QRname), ((CC->room.QRflags & QR_PASSWORDED) ? CC->room.QRpasswd : ""), ((CC->room.QRflags & QR_DIRECTORY) ? CC->room.QRdirname : ""), CC->room.QRflags, (int) CC->room.QRfloor, (int) CC->room.QRorder, CC->room.QRdefaultview, CC->room.QRflags2 ); }
/* * display who's online */ void cmd_rwho(char *argbuf) { struct CitContext *nptr; int nContexts, i; int spoofed = 0; int user_spoofed = 0; int room_spoofed = 0; int host_spoofed = 0; int aide; char un[40]; char real_room[ROOMNAMELEN], room[ROOMNAMELEN]; char host[64], flags[5]; /* So that we don't keep the context list locked for a long time * we create a copy of it first */ nptr = CtdlGetContextArray(&nContexts) ; if (!nptr) { /* Couldn't malloc so we have to bail but stick to the protocol */ cprintf("%d%c \n", LISTING_FOLLOWS, CtdlCheckExpress() ); cprintf("000\n"); return; } aide = ( (CC->user.axlevel >= AxAideU) || (CC->internal_pgm) ) ; cprintf("%d%c \n", LISTING_FOLLOWS, CtdlCheckExpress() ); for (i=0; i<nContexts; i++) { flags[0] = '\0'; spoofed = 0; user_spoofed = 0; room_spoofed = 0; host_spoofed = 0; if (!aide && nptr[i].state == CON_SYS) continue; if (!aide && nptr[i].kill_me != 0) continue; if (nptr[i].cs_flags & CS_POSTING) strcat(flags, "*"); else strcat(flags, "."); if (nptr[i].fake_username[0]) { strcpy(un, nptr[i].fake_username); spoofed = 1; user_spoofed = 1; } else strcpy(un, nptr[i].curr_user); if (nptr[i].fake_hostname[0]) { strcpy(host, nptr[i].fake_hostname); spoofed = 1; host_spoofed = 1; } else strcpy(host, nptr[i].cs_host); GenerateRoomDisplay(real_room, &nptr[i], CC); if (nptr[i].fake_roomname[0]) { strcpy(room, nptr[i].fake_roomname); spoofed = 1; room_spoofed = 1; } else { strcpy(room, real_room); } if ((aide) && (spoofed)) { strcat(flags, "+"); } if ((nptr[i].cs_flags & CS_STEALTH) && (aide)) { strcat(flags, "-"); } if (((nptr[i].cs_flags&CS_STEALTH)==0) || (aide)) { cprintf("%d|%s|%s|%s|%s|%ld|%s|%s|", nptr[i].cs_pid, un, room, host, nptr[i].cs_clientname, (long)(nptr[i].lastidle), nptr[i].lastcmdname, flags ); if ((user_spoofed) && (aide)) { cprintf("%s|", nptr[i].curr_user); } else { cprintf("|"); } if ((room_spoofed) && (aide)) { cprintf("%s|", real_room); } else { cprintf("|"); } if ((host_spoofed) && (aide)) { cprintf("%s|", nptr[i].cs_host); } else { cprintf("|"); } cprintf("%d\n", nptr[i].logged_in); } } /* release out copy of the context list */ free(nptr); /* Now it's magic time. Before we finish, call any EVT_RWHO hooks * so that external paging modules such as serv_icq can add more * content to the Wholist. */ PerformSessionHooks(EVT_RWHO); cprintf("000\n"); }