summaryrefslogtreecommitdiff
path: root/src/modules/m_spanningtree/idle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/m_spanningtree/idle.cpp')
-rw-r--r--src/modules/m_spanningtree/idle.cpp78
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 &params)
+{
+ 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;
+}
+
+