Ejemplo n.º 1
0
/*
 * 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");
}
Ejemplo n.º 2
0
/*
 * 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
		);
}
Ejemplo n.º 3
0
/*
 * 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");
}