diff options
| author | 2007-06-13 22:04:14 +0000 | |
|---|---|---|
| committer | 2007-06-13 22:04:14 +0000 | |
| commit | d7ecb6198658cca6f79383f80e560c55527ab986 (patch) | |
| tree | dca4ed5ddc2a4068d2d071a23344852f67204c18 /src/modules/m_spanningtree/treesocket2.cpp | |
| parent | Have the installer install cert.pem and key.pem to the conf/ dir only if they... (diff) | |
This is not, not routing of SQUIT, nothing to see here, move along :>
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7301 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_spanningtree/treesocket2.cpp')
| -rw-r--r-- | src/modules/m_spanningtree/treesocket2.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp index d13ea0d89..fadb1ef9c 100644 --- a/src/modules/m_spanningtree/treesocket2.cpp +++ b/src/modules/m_spanningtree/treesocket2.cpp @@ -294,6 +294,55 @@ bool TreeSocket::OperQuit(const std::string &prefix, std::deque<std::string> &pa return true; } +/* to be removed after 1.1.9 */ +/* + * Remote SQUIT (RSQUIT). Routing works similar to SVSNICK: Route it to the server that the target is connected to locally, + * then let that server do the dirty work (squit it!). Example: + * A -> B -> C -> D: oper on A squits D, A routes to B, B routes to C, C notices D connected locally, kills it. -- w00t + */ +bool TreeSocket::RemoteSquit(const std::string &prefix, std::deque<std::string> ¶ms) +{ + /* ok.. :w00t RSQUIT jupe.barafranca.com :reason here */ + if (params.size() < 2) + return true; + + TreeServer* s = Utils->FindServerMask(params[0]); + + if (s) + { + if (s == Utils->TreeRoot) + { + this->Instance->SNO->WriteToSnoMask('l',"What the fuck, I recieved a remote SQUIT for myself? :< (from %s", prefix.c_str()); + return true; + } + + TreeSocket* sock = s->GetSocket(); + + if (sock) + { + /* it's locally connected, KILL IT! */ + Instance->SNO->WriteToSnoMask('l',"RSQUIT: Server \002%s\002 removed from network by %s: %s", params[0].c_str(), prefix.c_str(), params[1].c_str()); + sock->Squit(s,"Server quit by " + prefix + ": " + params[1]); + Instance->SE->DelFd(sock); + sock->Close(); + delete sock; + } + else + { + /* route the rsquit */ + params[1] = ":" + params[1]; + Utils->DoOneToOne(prefix, "RSQUIT2", params, params[0]); + } + } + else + { + /* mother fucker! it doesn't exist */ + } + + return true; +} +/* end to be removed after 1.1.9 */ + bool TreeSocket::ServiceJoin(const std::string &prefix, std::deque<std::string> ¶ms) { if (params.size() < 2) @@ -1280,6 +1329,12 @@ bool TreeSocket::ProcessLine(std::string &line) { return this->OperQuit(prefix,params); } + /* to be removed after 1.1.9 */ + else if (command == "RSQUIT2") + { + return this->RemoteSquit(prefix, params); + } + /* end to be removed after 1.1.9 */ else if (command == "IDLE") { return this->Whois(prefix,params); |
