bool DNSDistPacketCache::get(const DNSQuestion& dq, uint16_t consumed, uint16_t queryId, char* response, uint16_t* responseLen, uint32_t* keyOut, boost::optional<Netmask>& subnet, bool dnssecOK, uint32_t allowExpired, bool skipAging)
{
- std::string dnsQName(dq.qname->toDNSString());
+ const auto& dnsQName = dq.qname->getStorage();
uint32_t key = getKey(dnsQName, consumed, reinterpret_cast<const unsigned char*>(dq.dh), dq.len, dq.tcp);
if (keyOut)
return getDNSPacketMinTTL(packet, length, seenNoDataSOA);
}
-uint32_t DNSDistPacketCache::getKey(const std::string& qname, uint16_t consumed, const unsigned char* packet, uint16_t packetLen, bool tcp)
+uint32_t DNSDistPacketCache::getKey(const DNSName::string_t& qname, uint16_t consumed, const unsigned char* packet, uint16_t packetLen, bool tcp)
{
uint32_t result = 0;
/* skip the query ID */
if (packetLen < sizeof(dnsheader))
throw std::range_error("Computing packet cache key for an invalid packet size");
result = burtle(packet + 2, sizeof(dnsheader) - 2, result);
- string lc(toLower(qname));
- result = burtle((const unsigned char*) lc.c_str(), lc.length(), result);
+ result = burtleCI((const unsigned char*) qname.c_str(), qname.length(), result);
if (packetLen < sizeof(dnsheader) + consumed) {
throw std::range_error("Computing packet cache key for an invalid packet");
}
}
static uint32_t getMinTTL(const char* packet, uint16_t length, bool* seenNoDataSOA);
- static uint32_t getKey(const std::string& qname, uint16_t consumed, const unsigned char* packet, uint16_t packetLen, bool tcp);
+ static uint32_t getKey(const DNSName::string_t& qname, uint16_t consumed, const unsigned char* packet, uint16_t packetLen, bool tcp);
static bool getClientSubnet(const char* packet, unsigned int consumed, uint16_t len, boost::optional<Netmask>& subnet);
private:
uint16_t qtype;
uint16_t qclass;
unsigned int consumed;
- DNSName qname(reinterpret_cast<const char*>(data), size, sizeof(dnsheader), false, &qtype, &qclass, &consumed);
- DNSDistPacketCache::getKey(qname.toString(), consumed, data, size, false);
+ const DNSName qname(reinterpret_cast<const char*>(data), size, sizeof(dnsheader), false, &qtype, &qclass, &consumed);
+ DNSDistPacketCache::getKey(qname.getStorage(), consumed, data, size, false);
boost::optional<Netmask> subnet;
DNSDistPacketCache::getClientSubnet(reinterpret_cast<const char*>(data), consumed, size, subnet);
}