Move more stuff into private members of class DNS

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4654 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
brain 2006-08-02 20:34:23 +00:00
parent c0526f1dc2
commit a4b7833073
2 changed files with 29 additions and 22 deletions

View File

@ -57,6 +57,13 @@ enum ResolverError
class DNSRequest;
class DNSHeader;
class ResourceRecord;
/* A set of requests keyed by request id */
typedef std::map<int,DNSRequest*> requestlist;
/* An iterator into a set of requests */
typedef requestlist::iterator requestlist_iter;
/**
* The Resolver class is a high-level abstraction for resolving DNS entries.
@ -144,17 +151,26 @@ class Resolver : public Extensible
class DNS : public Extensible
{
private:
requestlist requests;
insp_inaddr myserver;
static int MasterSocket;
Resolver* Classes[65536];
int MakePayload(const char * const name, const unsigned short rr, const unsigned short rr_class, unsigned char * const payload);
public:
static void FillResourceRecord(ResourceRecord* rr, const unsigned char *input);
static void FillHeader(DNSHeader *header, const unsigned char *input, const int length);
static void EmptyHeader(unsigned char *output, const DNSHeader *header, const int length);
static int GetMasterSocket();
int GetIP(const char* name);
int GetName(const insp_inaddr* ip);
DNSResult GetResult();
void MarshallReads(int fd);
bool AddResolverClass(Resolver* r);
DNSRequest* DNSAddQuery(DNSHeader *header, int &id);
DNSRequest* AddQuery(DNSHeader *header, int &id);
DNS();
~DNS();
};

View File

@ -135,15 +135,6 @@ class DNSRequest
int SendRequests(const DNSHeader *header, const int length, QueryType qt);
};
/* A set of requests keyed by request id */
typedef std::map<int,DNSRequest*> requestlist;
/* An iterator into a set of requests */
typedef requestlist::iterator requestlist_iter;
/* Declare our map */
requestlist requests;
/*
* Optimized by brain, these were using integer division and modulus.
* We can use logic shifts and logic AND to replace these even divisions
@ -153,7 +144,7 @@ requestlist requests;
/* Fill a ResourceRecord class based on raw data input */
inline void DNSFillResourceRecord(ResourceRecord* rr, const unsigned char *input)
inline void DNS::FillResourceRecord(ResourceRecord* rr, const unsigned char *input)
{
rr->type = (QueryType)((input[0] << 8) + input[1]);
rr->rr_class = (input[2] << 8) + input[3];
@ -162,7 +153,7 @@ inline void DNSFillResourceRecord(ResourceRecord* rr, const unsigned char *input
}
/* Fill a DNSHeader class based on raw data input of a given length */
inline void DNSFillHeader(DNSHeader *header, const unsigned char *input, const int length)
inline void DNS::FillHeader(DNSHeader *header, const unsigned char *input, const int length)
{
header->id[0] = input[0];
header->id[1] = input[1];
@ -176,7 +167,7 @@ inline void DNSFillHeader(DNSHeader *header, const unsigned char *input, const i
}
/* Empty a DNSHeader class out into raw data, ready for transmission */
inline void DNSEmptyHeader(unsigned char *output, const DNSHeader *header, const int length)
inline void DNS::EmptyHeader(unsigned char *output, const DNSHeader *header, const int length)
{
output[0] = header->id[0];
output[1] = header->id[1];
@ -202,7 +193,7 @@ int DNSRequest::SendRequests(const DNSHeader *header, const int length, QueryTyp
this->rr_class = 1;
this->type = qt;
DNSEmptyHeader(payload,header,length);
DNS::EmptyHeader(payload,header,length);
memset(&addr,0,sizeof(addr));
#ifdef IPV6
@ -224,7 +215,7 @@ int DNSRequest::SendRequests(const DNSHeader *header, const int length, QueryTyp
}
/* Add a query with a predefined header, and allocate an ID for it. */
DNSRequest* DNS::DNSAddQuery(DNSHeader *header, int &id)
DNSRequest* DNS::AddQuery(DNSHeader *header, int &id)
{
id = rand() % 65536;
DNSRequest* req = new DNSRequest(this->myserver);
@ -305,7 +296,7 @@ DNS::DNS()
}
}
int DNSMakePayload(const char * const name, const unsigned short rr, const unsigned short rr_class, unsigned char * const payload)
int DNS::MakePayload(const char * const name, const unsigned short rr, const unsigned short rr_class, unsigned char * const payload)
{
short payloadpos;
const char * tempchr, * tempchr2;
@ -351,10 +342,10 @@ int DNS::GetIP(const char *name)
int length;
DNSRequest* req;
if ((length = DNSMakePayload(name,DNS_QRY_A,1,(unsigned char*)&h.payload)) == -1)
if ((length = this->MakePayload(name,DNS_QRY_A,1,(unsigned char*)&h.payload)) == -1)
return -1;
req = DNSAddQuery(&h, id);
req = this->AddQuery(&h, id);
if (req->SendRequests(&h,length,DNS_QRY_A) == -1)
return -1;
@ -377,10 +368,10 @@ int DNS::GetName(const insp_inaddr *ip)
sprintf(query,"%d.%d.%d.%d.in-addr.arpa",c[3],c[2],c[1],c[0]);
if ((length = DNSMakePayload(query,DNS_QRY_PTR,1,(unsigned char*)&h.payload)) == -1)
if ((length = this->MakePayload(query,DNS_QRY_PTR,1,(unsigned char*)&h.payload)) == -1)
return -1;
req = DNSAddQuery(&h, id);
req = this->AddQuery(&h, id);
if (req->SendRequests(&h,length,DNS_QRY_PTR) == -1)
return -1;
@ -408,7 +399,7 @@ DNSResult DNS::GetResult()
return std::make_pair(-1,"");
/* Put the read header info into a header class */
DNSFillHeader(&header,buffer,length - 12);
DNS::FillHeader(&header,buffer,length - 12);
/* Get the id of this request.
* Its a 16 bit value stored in two char's,
@ -536,7 +527,7 @@ DNSInfo DNSRequest::ResultIsReady(DNSHeader &header, int length)
if (length - i < 10)
return std::make_pair((unsigned char*)NULL,"Incorrectly sized DNS reply");
DNSFillResourceRecord(&rr,&header.payload[i]);
DNS::FillResourceRecord(&rr,&header.payload[i]);
i += 10;
if (rr.type != this->type)
{