From b3961a3e36b20cbb1f17197203739fb52222a9ef Mon Sep 17 00:00:00 2001 From: brain Date: Tue, 28 Aug 2007 21:44:10 +0000 Subject: Add SVSPART at request of the Anope team - You can tell if the server has SVSPART by the presence of SVSPART=1 in the CAPAB. No, we will NOT be enforcing this network-wide, its a server-origin command so it wont cause disconnects if it doesnt exist somewhere. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7982 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/m_spanningtree/treesocket2.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/modules/m_spanningtree/treesocket2.cpp') diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp index fa9c97a45..249507799 100644 --- a/src/modules/m_spanningtree/treesocket2.cpp +++ b/src/modules/m_spanningtree/treesocket2.cpp @@ -339,6 +339,29 @@ bool TreeSocket::ServiceJoin(const std::string &prefix, std::deque return true; } +bool TreeSocket::ServicePart(const std::string &prefix, std::deque ¶ms) +{ + if (params.size() < 2) + return true; + + if (!this->Instance->IsChannel(params[1].c_str())) + return true; + + userrec* u = this->Instance->FindNick(params[0]); + chanrec* c = this->Instance->FindChan(params[1]); + + if (u) + { + /* only part if it's local, otherwise just pass it on! */ + if (IS_LOCAL(u)) + if (!c->PartUser(u, "Services forced part")) + delete c; + Utils->DoOneToAllButSender(prefix,"SVSPART",params,prefix); + } + + return true; +} + bool TreeSocket::RemoteRehash(const std::string &prefix, std::deque ¶ms) { if (params.size() < 1) @@ -1408,6 +1431,12 @@ bool TreeSocket::ProcessLine(std::string &line) } return this->ServiceJoin(prefix,params); } + else if (command == "SVSPART") + { + if (prefix.empty()) + prefix = this->GetName(); + return this->ServicePart(prefix,params); + } else if (command == "SQUIT") { if (params.size() == 2) -- cgit v1.2.3