mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 11:09:04 -04:00
Added test framework, so that i can work on improving MakeIP6Int
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4677 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
73fda5d362
commit
f16930668a
@ -318,6 +318,11 @@ class DNS : public Extensible
|
||||
* counter (currid)
|
||||
*/
|
||||
unsigned long PRNG();
|
||||
|
||||
/**
|
||||
* Turn an in6_addr into a .ip6.int domain
|
||||
*/
|
||||
static void MakeIP6Int(char* query, const in6_addr *ip);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
40
src/dns.cpp
40
src/dns.cpp
@ -399,13 +399,32 @@ int DNS::GetCName(const char *alias)
|
||||
/* Start lookup of an IP address to a hostname */
|
||||
int DNS::GetName(const insp_inaddr *ip)
|
||||
{
|
||||
char query[29];
|
||||
char query[128];
|
||||
DNSHeader h;
|
||||
int id;
|
||||
int length;
|
||||
|
||||
#ifdef IPV6
|
||||
/* XXX: This SUCKS. and i mean REALLY, REALLY sucks. Anyone who rewrites it pretty gets a cookie. */
|
||||
DNS::MakeIP6Int(query, (in6_addr*)ip);
|
||||
#else
|
||||
unsigned char* c = (unsigned char*)&ip->s_addr;
|
||||
|
||||
sprintf(query,"%d.%d.%d.%d.in-addr.arpa",c[3],c[2],c[1],c[0]);
|
||||
#endif
|
||||
|
||||
if ((length = this->MakePayload(query, DNS_QUERY_PTR, 1, (unsigned char*)&h.payload)) == -1)
|
||||
return -1;
|
||||
|
||||
DNSRequest* req = this->AddQuery(&h, id);
|
||||
|
||||
if ((!req) || (req->SendRequests(&h, length, DNS_QUERY_PTR) == -1))
|
||||
return -1;
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
void DNS::MakeIP6Int(char* query, const in6_addr *ip)
|
||||
{
|
||||
sprintf(query,"%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.%0x.ip6.int",
|
||||
ip->s6_addr[15] & 0x0f,
|
||||
(ip->s6_addr[15] & 0xf0) >> 4,
|
||||
@ -439,22 +458,7 @@ int DNS::GetName(const insp_inaddr *ip)
|
||||
(ip->s6_addr[1] & 0xf0) >> 4,
|
||||
ip->s6_addr[0] & 0x0f,
|
||||
(ip->s6_addr[0] & 0xf0) >> 4
|
||||
);
|
||||
#else
|
||||
unsigned char* c = (unsigned char*)&ip->s_addr;
|
||||
|
||||
sprintf(query,"%d.%d.%d.%d.in-addr.arpa",c[3],c[2],c[1],c[0]);
|
||||
#endif
|
||||
|
||||
if ((length = this->MakePayload(query, DNS_QUERY_PTR, 1, (unsigned char*)&h.payload)) == -1)
|
||||
return -1;
|
||||
|
||||
DNSRequest* req = this->AddQuery(&h, id);
|
||||
|
||||
if ((!req) || (req->SendRequests(&h, length, DNS_QUERY_PTR) == -1))
|
||||
return -1;
|
||||
|
||||
return id;
|
||||
);
|
||||
}
|
||||
|
||||
/* Return the next id which is ready, and the result attached to it */
|
||||
|
@ -33,6 +33,18 @@ class MyV6Resolver : public Resolver
|
||||
virtual void OnLookupComplete(const std::string &result)
|
||||
{
|
||||
log(DEBUG,"*** RESOLVER COMPLETED LOOKUP, IP IS: '%s'",result.c_str());
|
||||
|
||||
char query[128];
|
||||
in6_addr n;
|
||||
if (inet_pton(AF_INET6, result.c_str(), &n) > 0)
|
||||
{
|
||||
DNS::MakeIP6Int(query, &n);
|
||||
log(DEBUG,"Translation: %s",query);
|
||||
}
|
||||
else
|
||||
{
|
||||
log(DEBUG,"Bad IPV6 IP: %s",result.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnError(ResolverError e, const std::string &errormessage)
|
||||
|
Loading…
x
Reference in New Issue
Block a user