]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/dnsqueue.cpp
Left figure from output
[user/henk/code/inspircd.git] / src / dnsqueue.cpp
index 610288673b61723526a45000c1a4b62929315c7a..2e8cbaabbf549669c804a4f58d6773cb06183492 100644 (file)
@@ -60,6 +60,9 @@ using namespace std;
 #include "dns.h"
 #include "helperfuncs.h"
 #include "hashcomp.h"
+#include "socketengine.h"
+
+extern SocketEngine* SE;
 
 extern int MaxWhoResults;
 
@@ -104,6 +107,7 @@ public:
        void Reset()
        {
                strcpy(u,"");
+               log(DEBUG,"Reset class Lookup");
        }
 
        ~Lookup()
@@ -119,21 +123,27 @@ public:
                        log(DEBUG,"New Lookup class for %s with DNSServer set to '%s'",nick.c_str(),DNSServer);
                        resolver1.SetNS(std::string(DNSServer));
                        if (!resolver1.ReverseLookup(std::string(usr->host)))
+                       {
+                               log(DEBUG,"ReverseLookup didnt return true, we're outta here");
                                return false;
+                       }
                        strlcpy(u,nick.c_str(),NICKMAX);
                        return true;
                }
+               log(DEBUG,"We couldnt find that user");
                return false;
        }
 
-       bool Done()
+       bool Done(int fdcheck)
        {
                if (hostname != "")
                {
+                       log(DEBUG,"Doing forward lookup here with host %s",hostname.c_str());
                        // doing forward lookup
                        userrec* usr = NULL;
-                       if (resolver2.HasResult())
+                       if (resolver2.HasResult(fdcheck))
                        {
+                               log(DEBUG,"resolver2 has result");
                                if (resolver2.GetFD() != 0)
                                {
                                        std::string ip = resolver2.GetResultIP();
@@ -144,6 +154,7 @@ public:
                                        {
                                                if (usr->registered > 3)
                                                {
+                                                       log(DEBUG,"Point 1: Returning true as usr->dns_done is true");
                                                        usr->dns_done = true;
                                                        return true;
                                                }
@@ -168,16 +179,21 @@ public:
                                {
                                        usr = Find(u);
                                        if (usr)
+                                       {
+                                               log(DEBUG,"Point 2: Returning true");
                                                usr->dns_done = true;
+                                       }
                                        return true;
                                }
                        }
+                       log(DEBUG,"Returning false in forward");
+                       return false;
                }
                else
                {
                        // doing reverse lookup
                        userrec* usr = NULL;
-                       if (resolver1.HasResult())
+                       if (resolver1.HasResult(fdcheck))
                        {
                                usr = Find(u);
                                if ((usr) && (usr->dns_done))
@@ -187,16 +203,22 @@ public:
                                        hostname = resolver1.GetResult();
                                        if (usr)
                                        {
-                                               if ((usr->registered > 3) && (hostname == ""))
+                                               if ((usr->registered > 3) || (hostname == ""))
                                                {
+                                                       log(DEBUG,"Hostname is blank and user->registered > 3, returning true and setting done");
                                                        usr->dns_done = true;
                                                        return true;
                                                }
                                        }
-                                       resolver2.ForwardLookup(hostname);
+                                       if (hostname != "")
+                                       {
+                                               log(DEBUG,"Starting forwardlookup now for host '%s'...",hostname.c_str());
+                                               resolver2.ForwardLookup(hostname);
+                                       }
                                }
                        }
                }
+               log(DEBUG,"Returning false");
                return false;
        }
 
@@ -245,7 +267,7 @@ bool lookup_dns(std::string nick)
        return false;
 }
 
-void dns_poll()
+void dns_poll(int fdcheck)
 {
        // do we have items in the queue?
        for (int j = 0; j <= max_fd_alloc; j++)
@@ -253,7 +275,7 @@ void dns_poll()
                // are any ready, or stale?
                if (dnsq[j].GetFD())
                {
-                       if (dnsq[j].Done())
+                       if (dnsq[j].Done(fdcheck))
                        {
                                dnsq[j].Reset();
                        }