Changeset 1050

Show
Ignore:
Timestamp:
05/13/07 23:07:18 (1 year ago)
Author:
ahu
Message:

speed up storage of NS records

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/pdns/pdns/dnsparser.cc

    r1034 r1050  
    441441} 
    442442 
    443 string simpleCompress(const string& label
     443string simpleCompress(const string& label, const string& root
    444444{ 
    445445  typedef vector<pair<unsigned int, unsigned int> > parts_t; 
     
    449449  ret.reserve(label.size()+4); 
    450450  for(parts_t::const_iterator i=parts.begin(); i!=parts.end(); ++i) { 
     451    if(!root.empty() && !strncasecmp(root.c_str(), label.c_str() + i->first, label.length() - i->first)) { 
     452      const char rootptr[2]={0xc0,0x11}; 
     453      ret.append(rootptr, 2); 
     454      return ret; 
     455    } 
    451456    ret.append(1, (char)(i->second - i->first)); 
    452457    ret.append(label.c_str() + i->first, i->second - i->first); 
     
    455460  return ret; 
    456461} 
     462 
    457463 
    458464void simpleExpandTo(const string& label, unsigned int frompos, string& ret) 
  • trunk/pdns/pdns/dnsparser.hh

    r996 r1050  
    150150  { 
    151151    vector<uint8_t> packet; 
    152     DNSPacketWriter pw(packet, "", 1); 
     152    string empty; 
     153    DNSPacketWriter pw(packet, empty, 1); 
    153154     
    154155    pw.startRecord(qname, d_qtype); 
     
    311312}; 
    312313 
    313 string simpleCompress(const string& label); 
     314string simpleCompress(const string& label, const string& root=""); 
    314315void simpleExpandTo(const string& label, unsigned int frompos, string& ret); 
    315316 
  • trunk/pdns/pdns/recursor_cache.cc

    r972 r1050  
    8686    return string((char*)&ip, 4); 
    8787  } 
    88   else if(type==QType::NS) { 
    89     NSRecordContent ar(rr.content); 
    90     return ar.serialize(rr.qname); 
    91   } 
    92   else if(type==QType::CNAME) { 
    93     CNAMERecordContent ar(rr.content); 
    94     return ar.serialize(rr.qname); 
    95   } 
     88  else if(type==QType::NS || type==QType::CNAME) 
     89      return simpleCompress(rr.content, rr.qname); 
    9690  else { 
    9791    string ret;