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/treesocket.h | 4 ++++ src/modules/m_spanningtree/treesocket1.cpp | 2 +- src/modules/m_spanningtree/treesocket2.cpp | 29 +++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) (limited to 'src/modules/m_spanningtree') diff --git a/src/modules/m_spanningtree/treesocket.h b/src/modules/m_spanningtree/treesocket.h index d7b59447c..a798976d2 100644 --- a/src/modules/m_spanningtree/treesocket.h +++ b/src/modules/m_spanningtree/treesocket.h @@ -299,6 +299,10 @@ class TreeSocket : public InspSocket */ bool ServiceJoin(const std::string &prefix, std::deque ¶ms); + /** SVSPART + */ + bool ServicePart(const std::string &prefix, std::deque ¶ms); + /** REHASH */ bool RemoteRehash(const std::string &prefix, std::deque ¶ms); diff --git a/src/modules/m_spanningtree/treesocket1.cpp b/src/modules/m_spanningtree/treesocket1.cpp index a7cdb777a..fcfb21f68 100644 --- a/src/modules/m_spanningtree/treesocket1.cpp +++ b/src/modules/m_spanningtree/treesocket1.cpp @@ -371,7 +371,7 @@ void TreeSocket::SendCapabilities() extra = " CHALLENGE=" + this->GetOurChallenge(); } - this->WriteLine("CAPAB CAPABILITIES :NICKMAX="+ConvToStr(NICKMAX)+" HALFOP="+ConvToStr(this->Instance->Config->AllowHalfop)+" CHANMAX="+ConvToStr(CHANMAX)+" MAXMODES="+ConvToStr(MAXMODES)+" IDENTMAX="+ConvToStr(IDENTMAX)+" MAXQUIT="+ConvToStr(MAXQUIT)+" MAXTOPIC="+ConvToStr(MAXTOPIC)+" MAXKICK="+ConvToStr(MAXKICK)+" MAXGECOS="+ConvToStr(MAXGECOS)+" MAXAWAY="+ConvToStr(MAXAWAY)+" IP6NATIVE="+ConvToStr(ip6)+" IP6SUPPORT="+ConvToStr(ip6support)+" PROTOCOL="+ConvToStr(ProtocolVersion)+extra+" PREFIX="+Instance->Modes->BuildPrefixes()+" CHANMODES="+Instance->Modes->ChanModes()); + this->WriteLine("CAPAB CAPABILITIES :NICKMAX="+ConvToStr(NICKMAX)+" HALFOP="+ConvToStr(this->Instance->Config->AllowHalfop)+" CHANMAX="+ConvToStr(CHANMAX)+" MAXMODES="+ConvToStr(MAXMODES)+" IDENTMAX="+ConvToStr(IDENTMAX)+" MAXQUIT="+ConvToStr(MAXQUIT)+" MAXTOPIC="+ConvToStr(MAXTOPIC)+" MAXKICK="+ConvToStr(MAXKICK)+" MAXGECOS="+ConvToStr(MAXGECOS)+" MAXAWAY="+ConvToStr(MAXAWAY)+" IP6NATIVE="+ConvToStr(ip6)+" IP6SUPPORT="+ConvToStr(ip6support)+" PROTOCOL="+ConvToStr(ProtocolVersion)+extra+" PREFIX="+Instance->Modes->BuildPrefixes()+" CHANMODES="+Instance->Modes->ChanModes()+" SVSPART=1"); this->WriteLine("CAPAB END"); } 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