diff options
Diffstat (limited to 'src/modules/m_spanningtree/idle.cpp')
-rw-r--r-- | src/modules/m_spanningtree/idle.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/modules/m_spanningtree/idle.cpp b/src/modules/m_spanningtree/idle.cpp new file mode 100644 index 000000000..59dc83985 --- /dev/null +++ b/src/modules/m_spanningtree/idle.cpp @@ -0,0 +1,78 @@ +/* +------------------------------------+ + * | Inspire Internet Relay Chat Daemon | + * +------------------------------------+ + * + * InspIRCd: (C) 2002-2010 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits + * + * This program is free but copyrighted software; see + * the file COPYING for details. + * + * --------------------------------------------------- + */ + +#include "inspircd.h" +#include "socket.h" +#include "xline.h" +#include "socketengine.h" + +#include "main.h" +#include "utils.h" +#include "treeserver.h" +#include "treesocket.h" + +bool TreeSocket::Whois(const std::string &prefix, parameterlist ¶ms) +{ + if (params.size() < 1) + return true; + User* u = ServerInstance->FindNick(prefix); + if (u) + { + // an incoming request + if (params.size() == 1) + { + User* x = ServerInstance->FindNick(params[0]); + if ((x) && (IS_LOCAL(x))) + { + long idle = abs((long)((x->idle_lastmsg) - ServerInstance->Time())); + parameterlist par; + par.push_back(prefix); + par.push_back(ConvToStr(x->signon)); + par.push_back(ConvToStr(idle)); + // ours, we're done, pass it BACK + Utils->DoOneToOne(params[0], "IDLE", par, u->server); + } + else + { + // not ours pass it on + if (x) + Utils->DoOneToOne(prefix, "IDLE", params, x->server); + } + } + else if (params.size() == 3) + { + std::string who_did_the_whois = params[0]; + User* who_to_send_to = ServerInstance->FindNick(who_did_the_whois); + if ((who_to_send_to) && (IS_LOCAL(who_to_send_to))) + { + // an incoming reply to a whois we sent out + std::string nick_whoised = prefix; + unsigned long signon = atoi(params[1].c_str()); + unsigned long idle = atoi(params[2].c_str()); + if ((who_to_send_to) && (IS_LOCAL(who_to_send_to))) + { + ServerInstance->DoWhois(who_to_send_to, u, signon, idle, nick_whoised.c_str()); + } + } + else + { + // not ours, pass it on + if (who_to_send_to) + Utils->DoOneToOne(prefix, "IDLE", params, who_to_send_to->server); + } + } + } + return true; +} + + |