]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_dns.cpp
core_dns Allow usage of id 0
[user/henk/code/inspircd.git] / src / coremods / core_dns.cpp
index de8dedd4ac41e260eb0f773d25ce261020275137..f4559c08fe672cca508bb43f9305aaf7e55ada39 100644 (file)
@@ -473,32 +473,34 @@ class MyManager : public Manager, public Timer, public EventHandler
 
                /* Create an id */
                unsigned int tries = 0;
+               int id;
                do
                {
-                       req->id = ServerInstance->GenRandomInt(DNS::MAX_REQUEST_ID);
+                       id = ServerInstance->GenRandomInt(DNS::MAX_REQUEST_ID);
 
                        if (++tries == DNS::MAX_REQUEST_ID*5)
                        {
                                // If we couldn't find an empty slot this many times, do a sequential scan as a last
                                // resort. If an empty slot is found that way, go on, otherwise throw an exception
-                               req->id = 0;
-                               for (int i = 1; i < DNS::MAX_REQUEST_ID; i++)
+                               id = -1;
+                               for (unsigned int i = 0; i < DNS::MAX_REQUEST_ID; i++)
                                {
                                        if (!this->requests[i])
                                        {
-                                               req->id = i;
+                                               id = i;
                                                break;
                                        }
                                }
 
-                               if (req->id == 0)
+                               if (id == -1)
                                        throw Exception("DNS: All ids are in use");
 
                                break;
                        }
                }
-               while (!req->id || this->requests[req->id]);
+               while (this->requests[id]);
 
+               req->id = id;
                this->requests[req->id] = req;
 
                Packet p;
@@ -571,6 +573,15 @@ class MyManager : public Manager, public Timer, public EventHandler
                if (length < Packet::HEADER_LENGTH)
                        return;
 
+               if (myserver != from)
+               {
+                       std::string server1 = from.str();
+                       std::string server2 = myserver.str();
+                       ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "Got a result from the wrong server! Bad NAT or DNS forging attempt? '%s' != '%s'",
+                               server1.c_str(), server2.c_str());
+                       return;
+               }
+
                Packet recv_packet;
 
                try
@@ -583,15 +594,6 @@ class MyManager : public Manager, public Timer, public EventHandler
                        return;
                }
 
-               if (myserver != from)
-               {
-                       std::string server1 = from.str();
-                       std::string server2 = myserver.str();
-                       ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "Got a result from the wrong server! Bad NAT or DNS forging attempt? '%s' != '%s'",
-                               server1.c_str(), server2.c_str());
-                       return;
-               }
-
                DNS::Request* request = this->requests[recv_packet.id];
                if (request == NULL)
                {