X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcmd_who.cpp;h=49c44765cede09de70f8138c68df9db7e1d810dd;hb=84a19a9ab6129deb71cdc24b216b74dd8eb80978;hp=8292c0167576f5675e9d0b6bf33b8790a99ce75c;hpb=6d94d84683bd0e916e5ce0a3c7fedbc524d653b0;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/cmd_who.cpp b/src/cmd_who.cpp index 8292c0167..49c44765c 100644 --- a/src/cmd_who.cpp +++ b/src/cmd_who.cpp @@ -14,81 +14,45 @@ * --------------------------------------------------- */ -using namespace std; - -#include "inspircd_config.h" -#include "inspircd.h" -#include "inspircd_io.h" -#include -#include -#ifdef GCC3 -#include -#else -#include -#endif -#include -#include -#include -#include +#include "configreader.h" #include "users.h" -#include "ctables.h" -#include "globals.h" -#include "modules.h" -#include "dynamic.h" -#include "wildcard.h" #include "message.h" +#include "modules.h" #include "commands.h" -#include "mode.h" -#include "xline.h" -#include "inspstring.h" -#include "dnsqueue.h" #include "helperfuncs.h" -#include "hashcomp.h" -#include "socketengine.h" -#include "typedefs.h" -#include "command_parse.h" #include "cmd_who.h" extern ServerConfig* Config; -extern InspIRCd* ServerInstance; -extern int MODCOUNT; -extern std::vector modules; -extern std::vector factory; -extern time_t TIME; extern user_hash clientlist; extern chan_hash chanlist; -extern whowas_hash whowas; extern std::vector all_opers; -extern std::vector local_users; -extern userrec* fd_ref_table[MAX_DESCRIPTORS]; void cmd_who::Handle (char **parameters, int pcnt, userrec *user) { chanrec* Ptr = NULL; char tmp[10]; - /* theres more to do here, but for now just close the socket */ if (pcnt == 1) { - if ((!strcmp(parameters[0],"0")) || (!strcmp(parameters[0],"*"))) + if ((IS_SINGLE(parameters[0],'0')) || (IS_SINGLE(parameters[0],'*'))) { - if ((user->chans.size()) && (user->chans[0].channel)) + if ((user->chans.size()) && (((ucrec*)*(user->chans.begin()))->channel)) { int n_list = 0; for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++) { - Ptr = i->second->chans[0].channel; + Ptr = ((ucrec*)*(i->second->chans.begin()))->channel; // suggested by phidjit and FCS if ((!common_channels(user,i->second)) && (isnick(i->second->nick))) { // Bug Fix #29 *tmp = 0; if (*i->second->awaymsg) { - strlcat(tmp, "G", 9); + charlcat(tmp, 'G', 9); } else { - strlcat(tmp, "H", 9); + charlcat(tmp, 'H', 9); } - if (strchr(i->second->modes,'o')) { strlcat(tmp, "*", 9); } + if (*i->second->oper) { charlcat(tmp, '*', 9); } WriteServ(user->fd,"352 %s %s %s %s %s %s %s :0 %s",user->nick, Ptr ? Ptr->name : "*", i->second->ident, i->second->dhost, i->second->server, i->second->nick, tmp, i->second->fullname); if (n_list++ > Config->MaxWhoResults) { @@ -116,24 +80,24 @@ void cmd_who::Handle (char **parameters, int pcnt, userrec *user) int n_list = 0; for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++) { - if ((has_channel(i->second,Ptr)) && (isnick(i->second->nick))) + if ((Ptr->HasUser(i->second)) && (isnick(i->second->nick))) { // Fix Bug #29 - Part 2.. *tmp = 0; if (*i->second->awaymsg) { - strlcat(tmp, "G", 9); + charlcat(tmp, 'G', 9); } else { - strlcat(tmp, "H", 9); + charlcat(tmp, 'H', 9); } - if (strchr(i->second->modes,'o')) { strlcat(tmp, "*", 9); } + if (*i->second->oper) { charlcat(tmp, '*', 9); } strlcat(tmp, cmode(i->second, Ptr),5); WriteServ(user->fd,"352 %s %s %s %s %s %s %s :0 %s",user->nick, Ptr->name, i->second->ident, i->second->dhost, i->second->server, i->second->nick, tmp, i->second->fullname); - n_list++; - if (n_list > Config->MaxWhoResults) - { - WriteServ(user->fd,"523 %s WHO :Command aborted: More results than configured limit",user->nick); - break; - } + n_list++; + if (n_list > Config->MaxWhoResults) + { + WriteServ(user->fd,"523 %s WHO :Command aborted: More results than configured limit",user->nick); + break; + } } } @@ -152,39 +116,37 @@ void cmd_who::Handle (char **parameters, int pcnt, userrec *user) // Bug Fix #29 -- Part 29.. *tmp = 0; if (*u->awaymsg) { - strlcat(tmp, "G" ,9); + charlcat(tmp, 'G' ,9); } else { - strlcat(tmp, "H" ,9); + charlcat(tmp, 'H' ,9); } - if (strchr(u->modes,'o')) { strlcat(tmp, "*" ,9); } - WriteServ(user->fd,"352 %s %s %s %s %s %s %s :0 %s",user->nick, u->chans.size() && u->chans[0].channel ? u->chans[0].channel->name - : "*", u->ident, u->dhost, u->server, u->nick, tmp, u->fullname); + if (*u->oper) { charlcat(tmp, '*' ,9); } + WriteServ(user->fd,"352 %s %s %s %s %s %s %s :0 %s",user->nick, u->chans.size() && ((ucrec*)*(u->chans.begin()))->channel ? ((ucrec*)*(u->chans.begin()))->channel->name + : "*", u->ident, u->dhost, u->server, u->nick, tmp, u->fullname); } WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, parameters[0]); } } if (pcnt == 2) { - if ((!strcmp(parameters[0],"0")) || (!strcmp(parameters[0],"*")) && (!strcmp(parameters[1],"o"))) - { + if ((IS_SINGLE(parameters[0],'0')) || (IS_SINGLE(parameters[0],'*')) && (IS_SINGLE(parameters[1],'o'))) + { for (std::vector::iterator i = all_opers.begin(); i != all_opers.end(); i++) - { + { // If i were a rich man.. I wouldn't need to me making these bugfixes.. // But i'm a poor bastard with nothing better to do. userrec* oper = *i; *tmp = 0; if (*oper->awaymsg) { - strlcat(tmp, "G" ,9); + charlcat(tmp, 'G' ,9); } else { - strlcat(tmp, "H" ,9); + charlcat(tmp, 'H' ,9); } - WriteServ(user->fd,"352 %s %s %s %s %s %s %s* :0 %s", user->nick, oper->chans.size() && oper->chans[0].channel ? oper->chans[0].channel->name + WriteServ(user->fd,"352 %s %s %s %s %s %s %s* :0 %s", user->nick, oper->chans.size() && ((ucrec*)*(oper->chans.begin()))->channel ? ((ucrec*)*(oper->chans.begin()))->channel->name : "*", oper->ident, oper->dhost, oper->server, oper->nick, tmp, oper->fullname); - } - WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, parameters[0]); - return; - } + } + WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, parameters[0]); + return; + } } } - -