From: Bert Hubert Date: Sat, 25 Mar 2006 20:59:54 +0000 (+0000) Subject: several speedups that do little to make the code more readable X-Git-Tag: rec-3-0~131 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=678ce973d8204cd7ca7527da57f74f5856ebbfda;p=pdns several speedups that do little to make the code more readable git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@622 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/dnsparser.cc b/pdns/dnsparser.cc index 0e607f71c..e5eb7e9a5 100644 --- a/pdns/dnsparser.cc +++ b/pdns/dnsparser.cc @@ -39,7 +39,6 @@ public: string getZoneRepresentation() const { ostringstream str; - str<<"\\# "< DNSRecordContent::unserialize(const string& qname, dnsheader.ancount=htons(1); vector packet; // build pseudo packet - const uint8_t* ptr=(const uint8_t*)&dnsheader; - packet.insert(packet.end(), ptr, ptr + sizeof(dnsheader)); - char tmp[6]="\x0" "\x0\x1" "\x0\x1"; // root question for ns_t_a - packet.insert(packet.end(), tmp, tmp+5); + + /* will look like: dnsheader, 5 bytes, encoded qname, dns record header, serialized data */ string encoded=EncodeDNSLabel(qname); - packet.insert(packet.end(), encoded.c_str(), encoded.c_str() + encoded.size()); // append the label + + packet.resize(sizeof(dnsheader) + 5 + encoded.size() + sizeof(struct dnsrecordheader) + serialized.size()); + + uint16_t pos=0; + + memcpy(&packet[0], &dnsheader, sizeof(dnsheader)); pos+=sizeof(dnsheader); + + char tmp[6]="\x0" "\x0\x1" "\x0\x1"; // root question for ns_t_a + memcpy(&packet[pos], &tmp, 5); pos+=5; + + memcpy(&packet[pos], encoded.c_str(), encoded.size()); pos+=encoded.size(); struct dnsrecordheader drh; drh.d_type=htons(qtype); @@ -110,11 +117,9 @@ shared_ptr DNSRecordContent::unserialize(const string& qname, drh.d_ttl=0; drh.d_clen=htons(serialized.size()); - ptr=(const uint8_t*)&drh; - packet.insert(packet.end(), ptr, ptr + sizeof(drh)); + memcpy(&packet[pos], &drh, sizeof(drh)); pos+=sizeof(drh); + memcpy(&packet[pos], serialized.c_str(), serialized.size()); pos+=serialized.size(); - packet.insert(packet.end(), serialized.c_str(), serialized.c_str() + serialized.size()); // this is our actual data - MOADNSParser mdp((char*)&*packet.begin(), packet.size()); shared_ptr ret= mdp.d_answers.begin()->first.d_content; ret->header.d_type=ret->d_qtype; diff --git a/pdns/dnswriter.cc b/pdns/dnswriter.cc index 4b79120ea..ef09c98c9 100644 --- a/pdns/dnswriter.cc +++ b/pdns/dnswriter.cc @@ -17,30 +17,25 @@ DNSPacketWriter::DNSPacketWriter(vector& content, const string& qname, d_content.resize(len + sizeof(dnsheader)); uint8_t* dptr=(&*d_content.begin()) + len; - memcpy(dptr, ptr, sizeof(dnsheader)); - // d_content.insert(d_content.end(), ptr, ptr + sizeof(dnsheader)); - xfrLabel(qname, false); len=d_content.size(); - d_content.resize(len + d_record.size()); + d_content.resize(len + d_record.size() + 4); ptr=&*d_record.begin(); dptr=(&*d_content.begin()) + len; memcpy(dptr, ptr, d_record.size()); - // d_content.insert(d_content.end(), d_record.begin(), d_record.end()); + len+=d_record.size(); d_record.clear(); qtype=htons(qtype); - ptr=(const uint8_t*)&qtype; - d_content.insert(d_content.end(), ptr, ptr+2); - + memcpy(&d_content[len], &qtype, 2); + qclass=htons(qclass); - ptr=(const uint8_t*)&qclass; - d_content.insert(d_content.end(), ptr, ptr+2); + memcpy(&d_content[len+2], &qclass, 2); d_stuff=0xffff; }