uint16_t numberOfRecords = 0;
if (!d_cname.empty()) {
qtype = QType::CNAME;
- totrdatalen += d_cname.toDNSString().size();
+ totrdatalen += d_cname.getStorage().size();
numberOfRecords = 1;
} else if (!d_rawResponse.empty()) {
totrdatalen += d_rawResponse.size();
bool raw = false;
if (qtype == QType::CNAME) {
- const std::string wireData = d_cname.toDNSString(); // Note! This doesn't do compression!
+ const auto& wireData = d_cname.getStorage(); // Note! This doesn't do compression!
uint16_t rdataLen = htons(wireData.length());
qtype = htons(qtype);
memcpy(&recordstart[2], &qtype, sizeof(qtype));
}
else {
if (d_binary) {
- std::string out = dq->qname->toDNSString();
+ const auto& out = dq->qname->getStorage();
if (d_includeTimestamp) {
uint64_t tv_sec = static_cast<uint64_t>(dq->queryTime->tv_sec);
uint32_t tv_nsec = static_cast<uint32_t>(dq->queryTime->tv_nsec);
return true;
}
- if(g_fixupCase) {
- string realname = qname.toDNSString();
+ if (g_fixupCase) {
+ const auto& realname = qname.getStorage();
if (*responseLen >= (sizeof(dnsheader) + realname.length())) {
memcpy(*response + sizeof(dnsheader), realname.c_str(), realname.length());
}
std::string DNSName::toDNSStringLC() const
{
- return toLower(toDNSString()); // label lengths are always < 'A'
+ auto result = toDNSString();
+ toLowerInPlace(result); // label lengths are always < 'A'
+ return result;
}
/**
/* will look like: dnsheader, 5 bytes, encoded qname, dns record header, serialized data */
- string encoded=qname.toDNSString();
+ const auto& encoded = qname.getStorage();
packet.resize(sizeof(dnsheader) + 5 + encoded.size() + sizeof(struct dnsrecordheader) + serialized.size());
size_t readn2WithTimeout(int fd, void* buffer, size_t len, int idleTimeout, int totalTimeout=0);
size_t writen2WithTimeout(int fd, const void * buffer, size_t len, int timeout);
+void toLowerInPlace(string& str);
const string toLower(const string &upper);
const string toLowerCanonic(const string &upper);
bool IpToU32(const string &str, uint32_t *ip);
return ret;
}
-inline const string toLower(const string &upper)
+inline void toLowerInPlace(string& str)
{
- string reply(upper);
- const size_t length = reply.length();
+ const size_t length = str.length();
char c;
- for(unsigned int i = 0; i < length; ++i) {
- c = dns_tolower(upper[i]);
- if( c != upper[i])
- reply[i] = c;
+ for (unsigned int i = 0; i < length; ++i) {
+ c = dns_tolower(str[i]);
+ if (c != str[i]) {
+ str[i] = c;
+ }
}
+}
+
+inline const string toLower(const string &upper)
+{
+ string reply(upper);
+
+ toLowerInPlace(reply);
+
return reply;
}