]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Use Utils->ServerUser instead of ServerInstance->FakeClient in m_spanningtree
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 13 May 2009 17:04:17 +0000 (17:04 +0000)
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 13 May 2009 17:04:17 +0000 (17:04 +0000)
This makes it possible to determine which server initiated a mode change,
instead of having only a flag saying that some server did.

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11379 e03df62e-2008-0410-955e-edbf42e46eb7

include/fakeuser.h
src/inspircd.cpp
src/modules/m_spanningtree/fjoin.cpp
src/modules/m_spanningtree/fmode.cpp
src/modules/m_spanningtree/treesocket2.cpp
src/users.cpp

index afb267c5217aef371e875e0bac2c2a32c0f12e10..efdb5bd3d8719ccbdac5f1f72a90cf06184bb1db 100644 (file)
@@ -24,8 +24,9 @@ class CoreExport FakeUser : public User
                SetFd(FD_FAKEUSER_NUMBER);
        }
 
-       virtual const std::string GetFullHost() { return server; }
-       virtual const std::string GetFullRealHost() { return server; }
+       virtual const std::string GetFullHost() { return nick; }
+       virtual const std::string GetFullRealHost() { return nick; }
+       void SetFakeServer(std::string name);
 };
 
 #endif
index 3d24c7cd208b62e0a466f9f0f4459adfe2547829..a2a634a64559697358c439a9d97bce73ee431e59 100644 (file)
@@ -610,6 +610,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
 
        /* set up fake client again this time with the correct uid */
        this->FakeClient = new FakeUser(this, "!");
+       this->FakeClient->SetFakeServer(Config->ServerName);
 
        // Get XLine to do it's thing.
        this->XLines->CheckELines();
index b9bd79f18764089a708157782d14c569eb2ff2c0..28a922c0f56de341f52d7c8141d112dda27b87e1 100644 (file)
@@ -123,7 +123,7 @@ bool TreeSocket::ForceJoin(const std::string &source, std::deque<std::string> &p
                        modelist.push_back(params[idx]);
                }
 
-               this->ServerInstance->SendMode(modelist, this->ServerInstance->FakeClient);
+               this->ServerInstance->SendMode(modelist, Utils->ServerUser);
        }
 
        /* Now, process every 'modes,nick' pair */
@@ -188,7 +188,7 @@ bool TreeSocket::ForceJoin(const std::string &source, std::deque<std::string> &p
                while (modestack.GetStackedLine(stackresult))
                {
                        mode_junk.insert(mode_junk.end(), stackresult.begin(), stackresult.end());
-                       ServerInstance->SendMode(mode_junk, ServerInstance->FakeClient);
+                       ServerInstance->SendMode(mode_junk, Utils->ServerUser);
                        mode_junk.erase(mode_junk.begin() + 1, mode_junk.end());
                }
        }
@@ -225,7 +225,7 @@ bool TreeSocket::RemoveStatus(const std::string &prefix, std::deque<std::string>
                while (stack.GetStackedLine(stackresult))
                {
                        mode_junk.insert(mode_junk.end(), stackresult.begin(), stackresult.end());
-                       ServerInstance->SendMode(mode_junk, ServerInstance->FakeClient);
+                       ServerInstance->SendMode(mode_junk, Utils->ServerUser);
                        mode_junk.erase(mode_junk.begin() + 1, mode_junk.end());
                }
        }
index 24047226d67a22f1dbbde503550254c52f0b9264..2d9c37339820903cf935f062eb6a5dc0af9b166b 100644 (file)
@@ -31,7 +31,6 @@ bool TreeSocket::ForceMode(const std::string &source, std::deque<std::string> &p
                return true;
        }
 
-       bool smode = false;
        std::string sourceserv;
 
        /* Are we dealing with an FMODE from a user, or from a server? */
@@ -44,8 +43,7 @@ bool TreeSocket::ForceMode(const std::string &source, std::deque<std::string> &p
        else
        {
                /* FMODE from a server, use a fake user to receive mode feedback */
-               who = this->ServerInstance->FakeClient;
-               smode = true;                   /* Setting this flag tells us it is a server mode*/
+               who = Utils->ServerUser;
                sourceserv = source;    /* Set sourceserv to the actual source string */
        }
        std::vector<std::string> modelist;
@@ -99,14 +97,8 @@ bool TreeSocket::ForceMode(const std::string &source, std::deque<std::string> &p
         */
        if (TS <= ourTS)
        {
-               if (smode)
-               {
-                       this->ServerInstance->SendMode(modelist, who);
-               }
-               else
-               {
-                       this->ServerInstance->CallCommandHandler("MODE", modelist, who);
-               }
+               ServerInstance->Modes->Process(modelist, who, (who == Utils->ServerUser));
+
                /* HOT POTATO! PASS IT ON! */
                Utils->DoOneToAllButSender(source,"FMODE",params,sourceserv);
        }
index 68b5a784091cb4f5d7d61fc6056ce4c74c08fe9b..6f5bd6f3e87c51c897d510da7f553c5dc9e818f1 100644 (file)
@@ -299,9 +299,7 @@ bool TreeSocket::ProcessLine(std::string &line)
                        TreeServer *ServerSource = Utils->FindServer(prefix);
                        if (ServerSource)
                        {
-                               // ServerSource->GetName().c_str() may become invalid before it is used
-                               Utils->ServerUser->nick = ServerSource->GetName().c_str();
-                               Utils->ServerUser->server = Utils->ServerUser->nick.c_str();
+                               Utils->ServerUser->SetFakeServer(ServerSource->GetName());
                                Utils->ServerUser->uuid = ServerSource->GetID();
                        }
 
index 9574dd4155b55ed3940dcaa97f73c24f25f2d8c0..9c295caad100c22ad9e51a928bb042c0f3cbfd1a 100644 (file)
@@ -2045,6 +2045,12 @@ void User::DecreasePenalty(int decrease)
        this->Penalty -= decrease;
 }
 
+void FakeUser::SetFakeServer(std::string name)
+{
+       this->nick = name;
+       this->server = nick.c_str();
+}
+
 VisData::VisData()
 {
 }