]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/utils.cpp
Allow SASL messages to be targeted at the services server
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / utils.cpp
index ab057570a3a2f32655d3a25fd60882e556d0c48b..2271bf374d00fe33aace7def98cf34f497cde470 100644 (file)
@@ -144,14 +144,13 @@ CullResult SpanningTreeUtilities::cull()
                {
                        TreeSocket* sock = child_server->GetSocket();
                        sock->Close();
-                       ServerInstance->GlobalCulls.AddItem(sock);
                }
        }
 
        for(std::map<TreeSocket*, std::pair<std::string, int> >::iterator i = timeoutlist.begin(); i != timeoutlist.end(); ++i)
        {
                TreeSocket* s = i->first;
-               ServerInstance->GlobalCulls.AddItem(s);
+               s->Close();
        }
        TreeRoot->cull();
 
@@ -172,6 +171,14 @@ void SpanningTreeUtilities::AddThisServer(TreeServer* server, TreeServerList &li
 /* returns a list of DIRECT servernames for a specific channel */
 void SpanningTreeUtilities::GetListOfServersForChannel(Channel* c, TreeServerList &list, char status, const CUList &exempt_list)
 {
+       unsigned int minrank = 0;
+       if (status)
+       {
+               ModeHandler* mh = ServerInstance->Modes->FindPrefix(status);
+               if (mh)
+                       minrank = mh->GetPrefixRank();
+       }
+
        const UserMembList *ulist = c->GetUsers();
 
        for (UserMembCIter i = ulist->begin(); i != ulist->end(); i++)
@@ -179,7 +186,7 @@ void SpanningTreeUtilities::GetListOfServersForChannel(Channel* c, TreeServerLis
                if (IS_LOCAL(i->first))
                        continue;
 
-               if (status && !strchr(c->GetAllPrefixChars(i->first), status))
+               if (minrank && i->second->getRank() < minrank)
                        continue;
 
                if (exempt_list.find(i->first) == exempt_list.end())
@@ -192,7 +199,7 @@ void SpanningTreeUtilities::GetListOfServersForChannel(Channel* c, TreeServerLis
        return;
 }
 
-bool SpanningTreeUtilities::DoOneToAllButSenderRaw(const std::string &data, const std::string &omit, const std::string &prefix, const irc::string &command, parameterlist &params)
+bool SpanningTreeUtilities::DoOneToAllButSenderRaw(const std::string &data, const std::string &omit, const std::string &prefix, const irc::string &command, const parameterlist &params)
 {
        TreeServer* omitroute = this->BestRouteTo(omit);
        unsigned int items =this->TreeRoot->ChildCount();
@@ -209,7 +216,7 @@ bool SpanningTreeUtilities::DoOneToAllButSenderRaw(const std::string &data, cons
        return true;
 }
 
-bool SpanningTreeUtilities::DoOneToAllButSender(const std::string &prefix, const std::string &command, parameterlist &params, std::string omit)
+bool SpanningTreeUtilities::DoOneToAllButSender(const std::string &prefix, const std::string &command, const parameterlist &params, std::string omit)
 {
        TreeServer* omitroute = this->BestRouteTo(omit);
        std::string FullLine = ":" + prefix + " " + command;
@@ -236,7 +243,7 @@ bool SpanningTreeUtilities::DoOneToAllButSender(const std::string &prefix, const
        return true;
 }
 
-bool SpanningTreeUtilities::DoOneToMany(const std::string &prefix, const std::string &command, parameterlist &params)
+bool SpanningTreeUtilities::DoOneToMany(const std::string &prefix, const std::string &command, const parameterlist &params)
 {
        std::string FullLine = ":" + prefix + " " + command;
        unsigned int words = params.size();
@@ -258,21 +265,21 @@ bool SpanningTreeUtilities::DoOneToMany(const std::string &prefix, const std::st
        return true;
 }
 
-bool SpanningTreeUtilities::DoOneToMany(const char* prefix, const char* command, parameterlist &params)
+bool SpanningTreeUtilities::DoOneToMany(const char* prefix, const char* command, const parameterlist &params)
 {
        std::string spfx = prefix;
        std::string scmd = command;
        return this->DoOneToMany(spfx, scmd, params);
 }
 
-bool SpanningTreeUtilities::DoOneToAllButSender(const char* prefix, const char* command, parameterlist &params, std::string omit)
+bool SpanningTreeUtilities::DoOneToAllButSender(const char* prefix, const char* command, const parameterlist &params, std::string omit)
 {
        std::string spfx = prefix;
        std::string scmd = command;
        return this->DoOneToAllButSender(spfx, scmd, params, omit);
 }
 
-bool SpanningTreeUtilities::DoOneToOne(const std::string &prefix, const std::string &command, parameterlist &params, std::string target)
+bool SpanningTreeUtilities::DoOneToOne(const std::string &prefix, const std::string &command, const parameterlist &params, std::string target)
 {
        TreeServer* Route = this->BestRouteTo(target);
        if (Route)