diff options
author | DukePyrolator <DukePyrolator@anope.org> | 2010-12-22 07:05:40 +0100 |
---|---|---|
committer | DukePyrolator <DukePyrolator@anope.org> | 2010-12-22 07:05:40 +0100 |
commit | 184e7b3f64beb104e2d676048fc5bf485c5ad743 (patch) | |
tree | 13aefec932d42365c50649b008c00612ec2e8d86 /src/dns.cpp | |
parent | 184e14ea83412489921367614d63a7c24df3827d (diff) | |
parent | 18377ac9fd36065bfd791b5cea51de9ae1d2b11d (diff) |
Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
Diffstat (limited to 'src/dns.cpp')
-rw-r--r-- | src/dns.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/dns.cpp b/src/dns.cpp index b37a0bde6..e5a2c3098 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -608,3 +608,36 @@ void DNSRequestTimeout::Tick(time_t) delete this->request; } +DNSRecord DNSManager::BlockingQuery(const Anope::string &mask, QueryType qt) +{ + DNSRecord result(mask); + addrinfo *addrresult, hints; + + result.result = mask; + result.type = qt; + + int type = AF_UNSPEC; + if (qt == DNS_QUERY_A) + type = AF_INET; + else if (qt == DNS_QUERY_AAAA) + type = AF_INET6; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = type; + + if (getaddrinfo(mask.c_str(), NULL, &hints, &addrresult) == 0) + { + sockaddrs addr; + memcpy(&addr, addrresult->ai_addr, addrresult->ai_addrlen); + try + { + result.result = addr.addr(); + } + catch (const SocketException &) { } + + freeaddrinfo(addrresult); + } + + return result; +} + |