char a[MAXBUF],b[MAXBUF];
strlcpy(a,s1.c_str(),MAXBUF);
strlcpy(b,s2.c_str(),MAXBUF);
+ strlower(a);
+ strlower(b);
return (strcasecmp(a,b) == 0);
}
extern ClassVector Classes;
extern char DNSServer[MAXBUF];
+long max_fd_alloc = 0;
+
+extern time_t TIME;
class Lookup {
private:
- DNS* resolver;
+ DNS resolver;
char u[NICKMAX];
public:
Lookup()
{
strcpy(u,"");
- resolver = NULL;
}
void Reset()
{
strcpy(u,"");
- if (resolver)
- delete resolver;
- resolver = NULL;
}
~Lookup()
{
- if (resolver)
- delete resolver;
}
bool DoLookup(std::string nick)
if (usr)
{
log(DEBUG,"New Lookup class for %s with DNSServer set to '%s'",nick.c_str(),DNSServer);
- resolver = new DNS(std::string(DNSServer));
- if (!resolver->ReverseLookup(std::string(usr->host)))
+ resolver.SetNS(std::string(DNSServer));
+ if (!resolver.ReverseLookup(std::string(usr->host)))
return false;
strlcpy(u,nick.c_str(),NICKMAX);
return true;
bool Done()
{
userrec* usr = NULL;
- if (resolver->HasResult())
+ if (resolver.HasResult())
{
- if (resolver->GetFD() != 0)
+ if (resolver.GetFD() != 0)
{
- std::string hostname = resolver->GetResult();
+ std::string hostname = resolver.GetResult();
usr = Find(u);
if (usr)
{
if ((hostname != "") && (usr->registered != 7))
{
strlcpy(usr->host,hostname.c_str(),MAXBUF);
+ strlcpy(usr->dhost,hostname.c_str(),MAXBUF);
WriteServ(usr->fd,"NOTICE Auth :Resolved your hostname: %s",hostname.c_str());
usr->dns_done = true;
return true;
int GetFD()
{
userrec* usr = Find(u);
- if (usr)
- return usr->fd;
- else return 0;
+ if (!usr)
+ return 0;
+ if (usr->dns_done)
+ return 0;
+ return usr->fd;
}
};
return true;
}
}
+ // calculate the maximum value, this saves cpu time later
+ for (int p = 0; p < MAXBUF; p++)
+ if (dnsq[p].GetFD())
+ max_fd_alloc = p;
}
else
{
void dns_poll()
{
// do we have items in the queue?
- for (int j = 0; j < MAXBUF; j++)
+ for (int j = 0; j <= max_fd_alloc; j++)
{
// are any ready, or stale?
if (dnsq[j].GetFD())
}
}
}
+ // looks like someones freed an item, recalculate end of list.
+ if ((!dnsq[max_fd_alloc].GetFD()) && (max_fd_alloc != 0))
+ for (int p = 0; p < MAXBUF; p++)
+ if (dnsq[p].GetFD())
+ max_fd_alloc = p;
+
}