Show
Ignore:
Timestamp:
10/16/05 13:47:22 (8 years ago)
Author:
ahu
Message:

add support for properly truncating records in the pdns_recursor again (was removed during upgrade to MOADNS stuff)

we can now rollback records

add support for honouring EDNS0 queries to pdns_recursor - turns out clients don't use it

EDNS0 parsing code added to MOADNSParser

properly copy recursion desired flag in

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/pdns/pdns/pdns_recursor.cc

    r516 r517  
    252252    DNSComboWriter* dc=(DNSComboWriter *)p; 
    253253 
     254    uint16_t maxudpsize=512; 
     255    MOADNSParser::EDNSOpts edo; 
     256    if(dc->d_mdp.getEDNSOpts(&edo)) { 
     257      maxudpsize=edo.d_packetsize; 
     258    } 
     259 
    254260    vector<DNSResourceRecord> ret; 
    255261     
     
    261267    pw.getHeader()->qr=1; 
    262268    pw.getHeader()->id=dc->d_mdp.d_header.id; 
     269    pw.getHeader()->rd=dc->d_mdp.d_header.rd; 
    263270 
    264271    //    MT->setTitle("udp question for "+P.qdomain+"|"+P.qtype.getName()); 
     
    278285      if(ret.size()) { 
    279286        for(vector<DNSResourceRecord>::const_iterator i=ret.begin();i!=ret.end();++i) { 
    280           pw.startRecord(i->qname, i->qtype.getCode(), i->ttl); 
     287          pw.startRecord(i->qname, i->qtype.getCode(), i->ttl, 1, (DNSPacketWriter::Place)i->d_place); 
    281288          shared_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(i->qtype.getCode(), 1, i->content));   
    282289          drc->toPacket(pw); 
     290          if(!dc->d_tcp && pw.size() > maxudpsize) { 
     291            pw.rollback(); 
     292            pw.getHeader()->tc=1; 
     293            goto sendit; // need to jump over pw.commit 
     294          } 
    283295        } 
    284296        pw.commit(); 
    285297      } 
    286298    } 
    287  
     299  sendit:; 
    288300    if(!dc->d_tcp) { 
    289       /* 
    290       if(R->len > 512) { 
    291         R->truncate(512); 
    292       } 
    293       */ 
    294  
    295301      sendto(dc->d_socket, &*packet.begin(), packet.size(), 0, (struct sockaddr *)(dc->d_remote), dc->d_socklen); 
    296302    } 
     
    772778            continue; 
    773779 
    774           DNSComboWriter*dc = new DNSComboWriter(data, d_len); 
     780          DNSComboWriter* dc = new DNSComboWriter(data, d_len); 
    775781 
    776782          dc->setRemote((struct sockaddr *)&fromaddr, addrlen);