]> granicus.if.org Git - pdns/commitdiff
several speedups that do little to make the code more readable
authorBert Hubert <bert.hubert@netherlabs.nl>
Sat, 25 Mar 2006 20:59:54 +0000 (20:59 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Sat, 25 Mar 2006 20:59:54 +0000 (20:59 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@622 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/dnsparser.cc
pdns/dnswriter.cc

index 0e607f71c815714da864d39e991edc7ab2fe8e5e..e5eb7e9a5d8c177f039062d08897e6bc311648c5 100644 (file)
@@ -39,7 +39,6 @@ public:
   string getZoneRepresentation() const
   {
     ostringstream str;
-  
     str<<"\\# "<<d_record.size()<<" ";
     char hex[4];
     for(size_t n=0; n<d_record.size(); ++n) {
@@ -96,13 +95,21 @@ shared_ptr<DNSRecordContent> DNSRecordContent::unserialize(const string& qname,
   dnsheader.ancount=htons(1);
 
   vector<uint8_t> 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> 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<DNSRecordContent> ret= mdp.d_answers.begin()->first.d_content;
   ret->header.d_type=ret->d_qtype;
index 4b79120ea7624b2bd9712729ba69ce04ffddd279..ef09c98c9d4ae1ad4ea66a33779f73a6696896a5 100644 (file)
@@ -17,30 +17,25 @@ DNSPacketWriter::DNSPacketWriter(vector<uint8_t>& 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;
 }