diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-08-03 16:47:40 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-08-03 16:47:40 +0000 |
commit | f16930668a928471847cd327e1edc69b6d27b979 (patch) | |
tree | b3863886e1bf6479858fbc564c1ba5273fcf9dc5 /src | |
parent | 73fda5d362f0dd7b9550badf364330b2fd4810db (diff) |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/dns.cpp | 40 | ||||
-rw-r--r-- | src/modules/m_testcommand.cpp | 12 |
2 files changed, 34 insertions, 18 deletions
diff --git a/src/dns.cpp b/src/dns.cpp index ae0e203cd..9788284b7 100644 --- a/src/dns.cpp +++ b/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 */ diff --git a/src/modules/m_testcommand.cpp b/src/modules/m_testcommand.cpp index ebb09a19d..cca30de5d 100644 --- a/src/modules/m_testcommand.cpp +++ b/src/modules/m_testcommand.cpp @@ -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) |