| 303 | | if(mdp.d_header.arcount && !mdp.d_answers.empty() && |
| 304 | | mdp.d_answers.back().first.d_type == QType::OPT) { |
| 305 | | eo->d_packetsize=mdp.d_answers.back().first.d_class; |
| 306 | | |
| 307 | | EDNS0Record stuff; |
| 308 | | uint32_t ttl=ntohl(mdp.d_answers.back().first.d_ttl); |
| 309 | | memcpy(&stuff, &ttl, sizeof(stuff)); |
| 310 | | |
| 311 | | eo->d_extRCode=stuff.extRCode; |
| 312 | | eo->d_version=stuff.version; |
| 313 | | eo->d_Z = ntohs(stuff.Z); |
| 314 | | OPTRecordContent* orc = |
| 315 | | dynamic_cast<OPTRecordContent*>(mdp.d_answers.back().first.d_content.get()); |
| 316 | | if(!orc) |
| 317 | | return false; |
| 318 | | orc->getData(eo->d_options); |
| 319 | | |
| 320 | | return true; |
| 321 | | } |
| 322 | | else |
| 323 | | return false; |
| | 306 | if(mdp.d_header.arcount && !mdp.d_answers.empty()) { |
| | 307 | BOOST_FOREACH(const MOADNSParser::answers_t::value_type& val, mdp.d_answers) { |
| | 308 | if(val.first.d_place == DNSRecord::Additional && val.first.d_type == QType::OPT) { |
| | 309 | eo->d_packetsize=val.first.d_class; |
| | 310 | |
| | 311 | EDNS0Record stuff; |
| | 312 | uint32_t ttl=ntohl(val.first.d_ttl); |
| | 313 | memcpy(&stuff, &ttl, sizeof(stuff)); |
| | 314 | |
| | 315 | eo->d_extRCode=stuff.extRCode; |
| | 316 | eo->d_version=stuff.version; |
| | 317 | eo->d_Z = ntohs(stuff.Z); |
| | 318 | OPTRecordContent* orc = |
| | 319 | dynamic_cast<OPTRecordContent*>(val.first.d_content.get()); |
| | 320 | if(!orc) |
| | 321 | return false; |
| | 322 | orc->getData(eo->d_options); |
| | 323 | return true; |
| | 324 | } |
| | 325 | } |
| | 326 | } |
| | 327 | return false; |