]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Added back ip->host caching now we can make it not be a performance hit (we write...
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Fri, 3 Feb 2006 14:31:55 +0000 (14:31 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Fri, 3 Feb 2006 14:31:55 +0000 (14:31 +0000)
*TODO* - TTL

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

src/dnsqueue.cpp

index dee671aa16ca1e636108e16e74c5d27d3a07f884..cd6f696d684775084df023723b2fd0111615278b 100644 (file)
@@ -53,6 +53,8 @@ using namespace std;
 extern ServerConfig* Config;
 extern InspIRCd* ServerInstance;
 
+address_cache addrcache;
+
 class Lookup;
 
 Lookup* dnslist[MAX_DESCRIPTORS];
@@ -129,6 +131,12 @@ public:
                                                        {
                                                                strlcpy(usr->host,hostname.c_str(),MAXBUF);
                                                                strlcpy(usr->dhost,hostname.c_str(),MAXBUF);
+                                                               address_hash::iterator address = addrcache.find(usr->ip4);
+                                                               if (address == addrcache.end())
+                                                               {
+                                                                       log(DEBUG,"Caching hostname %s -> %s",(char*)inet_ntoa(usr->ip4),hostname.c_str());
+                                                                       addrcache[usr->ip4] = new std::string(hostname);
+                                                               }
                                                        }
                                                        usr->dns_done = true;
                                                        return true;
@@ -201,6 +209,18 @@ bool lookup_dns(std::string nick)
        userrec* u = Find(nick);
        if (u)
        {
+               /* Check the cache */
+               address_hash::iterator address = addrcache.find(u->ip4);
+               if (address != addrcache.end())
+               {
+                       /* Theyre in the cache, dont waste a lookup */
+                       WriteServ(u->fd,"NOTICE Auth :*** Found your hostname (cached)");
+                       log(DEBUG,"Found cached host");
+                       strlcpy(u->host,address->second->c_str(),MAXBUF);
+                       strlcpy(u->dhost,address->second->c_str(),MAXBUF);
+                       u->dns_done = true;
+                       return true;
+               }
                /* If the user exists, create a new
                 * lookup object, and associate it
                 * with the user. The lookup object