]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/utils.cpp
Make VF_OPTCOMMON module mismatches a fatal link error by default
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / utils.cpp
index 9ae6d4d14bcd398b81f5124e91ad9f91246e2d46..13a4cc760fd27e88a4a2d4118031f814f6316979 100644 (file)
 #include "commands/cmd_stats.h"
 #include "socket.h"
 #include "xline.h"
-#include "transport.h"
+#include "../transport.h"
 #include "socketengine.h"
 
-#include "m_spanningtree/main.h"
-#include "m_spanningtree/utils.h"
-#include "m_spanningtree/treeserver.h"
-#include "m_spanningtree/link.h"
-#include "m_spanningtree/treesocket.h"
-#include "m_spanningtree/resolvers.h"
+#include "main.h"
+#include "utils.h"
+#include "treeserver.h"
+#include "link.h"
+#include "treesocket.h"
+#include "resolvers.h"
 
 /* $ModDep: m_spanningtree/resolvers.h m_spanningtree/main.h m_spanningtree/utils.h m_spanningtree/treeserver.h m_spanningtree/link.h m_spanningtree/treesocket.h */
 
 /* Create server sockets off a listener. */
-void ServerSocketListener::OnAcceptReady(const std::string &ipconnectedto, int newsock, const std::string &incomingip)
+void ServerSocketListener::OnAcceptReady(int newsock)
 {
        bool found = false;
-       char *ip = (char *)incomingip.c_str(); // XXX ugly cast
+       int port;
+       std::string incomingip;
+       irc::sockets::satoap(&client, incomingip, port);
+       char *ip = const_cast<char*>(incomingip.c_str());
 
        found = (std::find(Utils->ValidIPs.begin(), Utils->ValidIPs.end(), ip) != Utils->ValidIPs.end());
        if (!found)
@@ -56,7 +59,7 @@ void ServerSocketListener::OnAcceptReady(const std::string &ipconnectedto, int n
 
        if (this->GetIOHook())
        {
-               this->GetIOHook()->OnRawSocketAccept(newsock, incomingip.c_str(), this->bind_port);
+               this->GetIOHook()->OnRawSocketAccept(newsock, &client, &server);
        }
 
        /* we don't need a pointer to this, creating it stores it in the necessary places */
@@ -176,8 +179,10 @@ SpanningTreeUtilities::~SpanningTreeUtilities()
                        sock->Close();
                }
        }
-       delete TreeRoot;
+       
+       // This avoids a collision on reload
        ServerUser->uuid = TreeRoot->GetID();
+       delete TreeRoot;
        delete ServerUser;
        ServerInstance->BufferedSocketCull();
 }
@@ -211,7 +216,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, std::deque<std::string> &params)
+bool SpanningTreeUtilities::DoOneToAllButSenderRaw(const std::string &data, const std::string &omit, const std::string &prefix, const irc::string &command, parameterlist &params)
 {
        char pfx = 0;
        TreeServer* omitroute = this->BestRouteTo(omit);
@@ -231,7 +236,7 @@ bool SpanningTreeUtilities::DoOneToAllButSenderRaw(const std::string &data, cons
                                User* d = ServerInstance->FindNick(params[0]);
                                if (d)
                                {
-                                       std::deque<std::string> par;
+                                       parameterlist par;
                                        par.push_back(params[0]);
                                        par.push_back(":"+params[1]);
                                        this->DoOneToOne(prefix,command.c_str(),par,d->server);
@@ -240,7 +245,7 @@ bool SpanningTreeUtilities::DoOneToAllButSenderRaw(const std::string &data, cons
                        }
                        else if (*(params[0].c_str()) == '$')
                        {
-                               std::deque<std::string> par;
+                               parameterlist par;
                                par.push_back(params[0]);
                                par.push_back(":"+params[1]);
                                this->DoOneToAllButSender(prefix,command.c_str(),par,omitroute->GetName());
@@ -284,7 +289,7 @@ bool SpanningTreeUtilities::DoOneToAllButSenderRaw(const std::string &data, cons
        return true;
 }
 
-bool SpanningTreeUtilities::DoOneToAllButSender(const std::string &prefix, const std::string &command, std::deque<std::string> &params, std::string omit)
+bool SpanningTreeUtilities::DoOneToAllButSender(const std::string &prefix, const std::string &command, parameterlist &params, std::string omit)
 {
        TreeServer* omitroute = this->BestRouteTo(omit);
        std::string FullLine = ":" + prefix + " " + command;
@@ -311,7 +316,7 @@ bool SpanningTreeUtilities::DoOneToAllButSender(const std::string &prefix, const
        return true;
 }
 
-bool SpanningTreeUtilities::DoOneToMany(const std::string &prefix, const std::string &command, std::deque<std::string> &params)
+bool SpanningTreeUtilities::DoOneToMany(const std::string &prefix, const std::string &command, parameterlist &params)
 {
        std::string FullLine = ":" + prefix + " " + command;
        unsigned int words = params.size();
@@ -333,21 +338,21 @@ bool SpanningTreeUtilities::DoOneToMany(const std::string &prefix, const std::st
        return true;
 }
 
-bool SpanningTreeUtilities::DoOneToMany(const char* prefix, const char* command, std::deque<std::string> &params)
+bool SpanningTreeUtilities::DoOneToMany(const char* prefix, const char* command, 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, std::deque<std::string> &params, std::string omit)
+bool SpanningTreeUtilities::DoOneToAllButSender(const char* prefix, const char* command, 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, std::deque<std::string> &params, std::string target)
+bool SpanningTreeUtilities::DoOneToOne(const std::string &prefix, const std::string &command, parameterlist &params, std::string target)
 {
        TreeServer* Route = this->BestRouteTo(target);
        if (Route)
@@ -400,7 +405,6 @@ void SpanningTreeUtilities::RefreshIPCache()
                /* Needs resolving */
                bool ipvalid = true;
                QueryType start_type = DNS_QUERY_A;
-#ifdef IPV6
                start_type = DNS_QUERY_AAAA;
                if (strchr(L->IPAddr.c_str(),':'))
                {
@@ -409,7 +413,6 @@ void SpanningTreeUtilities::RefreshIPCache()
                                ipvalid = false;
                }
                else
-#endif
                {
                        in_addr n;
                        if (inet_aton(L->IPAddr.c_str(),&n) < 1)
@@ -507,6 +510,7 @@ void SpanningTreeUtilities::ReadConfiguration(bool rebind)
        FlatLinks = Conf->ReadFlag("security","flatlinks",0);
        HideULines = Conf->ReadFlag("security","hideulines",0);
        AnnounceTSChange = Conf->ReadFlag("options","announcets",0);
+       AllowOptCommon = Conf->ReadFlag("options", "allowmismatch", 0);
        ChallengeResponse = !Conf->ReadFlag("security", "disablehmac", 0);
        quiet_bursts = Conf->ReadFlag("performance", "quietbursts", 0);
        PingWarnTime = Conf->ReadInteger("options", "pingwarning", 0, true);
@@ -566,7 +570,6 @@ void SpanningTreeUtilities::ReadConfiguration(bool rebind)
                        /* Needs resolving */
                        bool ipvalid = true;
                        QueryType start_type = DNS_QUERY_A;
-#ifdef IPV6
                        start_type = DNS_QUERY_AAAA;
                        if (strchr(L.IPAddr.c_str(),':'))
                        {
@@ -580,11 +583,6 @@ void SpanningTreeUtilities::ReadConfiguration(bool rebind)
                                if (inet_aton(L.IPAddr.c_str(),&n) < 1)
                                        ipvalid = false;
                        }
-#else
-                       in_addr n;
-                       if (inet_aton(L.IPAddr.c_str(),&n) < 1)
-                               ipvalid = false;
-#endif
 
                        if (!ipvalid)
                        {