Changeset 517 for trunk/pdns/pdns/pdns_recursor.cc
- Timestamp:
- 10/16/05 13:47:22 (8 years ago)
- Files:
-
- 1 modified
-
trunk/pdns/pdns/pdns_recursor.cc (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/pdns/pdns/pdns_recursor.cc
r516 r517 252 252 DNSComboWriter* dc=(DNSComboWriter *)p; 253 253 254 uint16_t maxudpsize=512; 255 MOADNSParser::EDNSOpts edo; 256 if(dc->d_mdp.getEDNSOpts(&edo)) { 257 maxudpsize=edo.d_packetsize; 258 } 259 254 260 vector<DNSResourceRecord> ret; 255 261 … … 261 267 pw.getHeader()->qr=1; 262 268 pw.getHeader()->id=dc->d_mdp.d_header.id; 269 pw.getHeader()->rd=dc->d_mdp.d_header.rd; 263 270 264 271 // MT->setTitle("udp question for "+P.qdomain+"|"+P.qtype.getName()); … … 278 285 if(ret.size()) { 279 286 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); 281 288 shared_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(i->qtype.getCode(), 1, i->content)); 282 289 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 } 283 295 } 284 296 pw.commit(); 285 297 } 286 298 } 287 299 sendit:; 288 300 if(!dc->d_tcp) { 289 /*290 if(R->len > 512) {291 R->truncate(512);292 }293 */294 295 301 sendto(dc->d_socket, &*packet.begin(), packet.size(), 0, (struct sockaddr *)(dc->d_remote), dc->d_socklen); 296 302 } … … 772 778 continue; 773 779 774 DNSComboWriter* dc = new DNSComboWriter(data, d_len);780 DNSComboWriter* dc = new DNSComboWriter(data, d_len); 775 781 776 782 dc->setRemote((struct sockaddr *)&fromaddr, addrlen);