diff options
author | om <om@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-04-04 06:47:22 +0000 |
---|---|---|
committer | om <om@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-04-04 06:47:22 +0000 |
commit | b450c430626cd3034844a749874cce3d2259704a (patch) | |
tree | 500e282c3e042821e8d75baba483e1368a71d544 /src/cmd_whois.cpp | |
parent | 0a067563630ae108d2cca747e69adf2ead1788be (diff) |
move do_whois to cmd_whois, i'm stopping now. really.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3825 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/cmd_whois.cpp')
-rw-r--r-- | src/cmd_whois.cpp | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/src/cmd_whois.cpp b/src/cmd_whois.cpp index f15bce87e..20215b9cf 100644 --- a/src/cmd_whois.cpp +++ b/src/cmd_whois.cpp @@ -61,6 +61,67 @@ extern std::vector<userrec*> all_opers; extern std::vector<userrec*> local_users; extern userrec* fd_ref_table[MAX_DESCRIPTORS]; +void do_whois(userrec* user, userrec* dest,unsigned long signon, unsigned long idle, char* nick) +{ + // bug found by phidjit - were able to whois an incomplete connection if it had sent a NICK or USER + if (dest->registered == 7) + { + WriteServ(user->fd,"311 %s %s %s %s * :%s",user->nick, dest->nick, dest->ident, dest->dhost, dest->fullname); + if ((user == dest) || (*user->oper)) + { + WriteServ(user->fd,"378 %s %s :is connecting from *@%s %s",user->nick, dest->nick, dest->host, inet_ntoa(dest->ip4)); + } + std::string cl = chlist(dest,user); + if (cl.length()) + { + if (cl.length() > 400) + { + split_chlist(user,dest,cl); + } + else + { + WriteServ(user->fd,"319 %s %s :%s",user->nick, dest->nick, cl.c_str()); + } + } + if (*Config->HideWhoisServer && !(*user->oper)) + { + WriteServ(user->fd,"312 %s %s %s :%s",user->nick, dest->nick, Config->HideWhoisServer, Config->Network); + } + else + { + WriteServ(user->fd,"312 %s %s %s :%s",user->nick, dest->nick, dest->server, GetServerDescription(dest->server).c_str()); + } + if (*dest->awaymsg) + { + WriteServ(user->fd,"301 %s %s :%s",user->nick, dest->nick, dest->awaymsg); + } + if (*dest->oper) + { + WriteServ(user->fd,"313 %s %s :is %s %s on %s",user->nick, dest->nick, (strchr("aeiou",*dest->oper) ? "an" : "a"),dest->oper, Config->Network); + } + if ((!signon) && (!idle)) + { + FOREACH_MOD(I_OnWhois,OnWhois(user,dest)); + } + if (!strcasecmp(user->server,dest->server)) + { + // idle time and signon line can only be sent if youre on the same server (according to RFC) + WriteServ(user->fd,"317 %s %s %d %d :seconds idle, signon time",user->nick, dest->nick, abs((dest->idle_lastmsg)-TIME), dest->signon); + } + else + { + if ((idle) || (signon)) + WriteServ(user->fd,"317 %s %s %d %d :seconds idle, signon time",user->nick, dest->nick, idle, signon); + } + WriteServ(user->fd,"318 %s %s :End of /WHOIS list.",user->nick, dest->nick); + } + else + { + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, nick); + WriteServ(user->fd,"318 %s %s :End of /WHOIS list.",user->nick, nick); + } +} + void cmd_whois::Handle (char **parameters, int pcnt, userrec *user) { userrec *dest; @@ -78,4 +139,3 @@ void cmd_whois::Handle (char **parameters, int pcnt, userrec *user) WriteServ(user->fd,"318 %s %s :End of /WHOIS list.",user->nick, parameters[0]); } } - |