summaryrefslogtreecommitdiff
path: root/src/dns.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dns.cpp')
-rw-r--r--src/dns.cpp33
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;
+}
+