If '3', send bare queries
*/
- SyncRes::EDNSStatus* ednsstatus;
- ednsstatus = &t_sstorage.ednsstatus[ip]; // does this include port? YES
+ SyncRes::EDNSStatus* ednsstatus = &t_sstorage.ednsstatus[ip]; // does this include port? YES
- if(ednsstatus->modeSetAt && ednsstatus->modeSetAt + 3600 < d_now.tv_sec) {
- *ednsstatus=SyncRes::EDNSStatus();
+ if (ednsstatus->modeSetAt && ednsstatus->modeSetAt + 3600 < d_now.tv_sec) {
+ *ednsstatus = SyncRes::EDNSStatus();
// cerr<<"Resetting EDNS Status for "<<ip.toString()<<endl);
}
- SyncRes::EDNSStatus::EDNSMode& mode=ednsstatus->mode;
- SyncRes::EDNSStatus::EDNSMode oldmode = mode;
+ SyncRes::EDNSStatus::EDNSMode *mode = &ednsstatus->mode;
+ SyncRes::EDNSStatus::EDNSMode oldmode = *mode;
int EDNSLevel = 0;
auto luaconfsLocal = g_luaconfs.getLocal();
ResolveContext ctx;
for(int tries = 0; tries < 3; ++tries) {
// cerr<<"Remote '"<<ip.toString()<<"' currently in mode "<<mode<<endl;
- if(mode==EDNSStatus::NOEDNS) {
+ if (*mode == EDNSStatus::NOEDNS) {
g_stats.noEdnsOutQueries++;
EDNSLevel = 0; // level != mode
}
- else if(ednsMANDATORY || mode==EDNSStatus::UNKNOWN || mode==EDNSStatus::EDNSOK || mode==EDNSStatus::EDNSIGNORANT)
+ else if (ednsMANDATORY || *mode == EDNSStatus::UNKNOWN || *mode == EDNSStatus::EDNSOK || *mode == EDNSStatus::EDNSIGNORANT)
EDNSLevel = 1;
DNSName sendQname(domain);
else {
ret=asyncresolve(ip, sendQname, type, doTCP, sendRDQuery, EDNSLevel, now, srcmask, ctx, d_outgoingProtobufServers, d_frameStreamServers, luaconfsLocal->outgoingProtobufExportConfig.exportTypes, res, chained);
}
+ // ednsstatus might be cleared, so do a new lookup
+ ednsstatus = &t_sstorage.ednsstatus[ip]; // does this include port? YES
+ mode = &ednsstatus->mode;
if(ret < 0) {
return ret; // transport error, nothing to learn here
}
if(ret == 0) { // timeout, not doing anything with it now
return ret;
}
- else if(mode==EDNSStatus::UNKNOWN || mode==EDNSStatus::EDNSOK || mode == EDNSStatus::EDNSIGNORANT ) {
+ else if (*mode == EDNSStatus::UNKNOWN || *mode == EDNSStatus::EDNSOK || *mode == EDNSStatus::EDNSIGNORANT ) {
if(res->d_validpacket && !res->d_haveEDNS && res->d_rcode == RCode::FormErr) {
// cerr<<"Downgrading to NOEDNS because of "<<RCode::to_s(res->d_rcode)<<" for query to "<<ip.toString()<<" for '"<<domain<<"'"<<endl;
- mode = EDNSStatus::NOEDNS;
+ *mode = EDNSStatus::NOEDNS;
continue;
}
else if(!res->d_haveEDNS) {
- if(mode != EDNSStatus::EDNSIGNORANT) {
- mode = EDNSStatus::EDNSIGNORANT;
+ if (*mode != EDNSStatus::EDNSIGNORANT) {
+ *mode = EDNSStatus::EDNSIGNORANT;
// cerr<<"We find that "<<ip.toString()<<" is an EDNS-ignorer for '"<<domain<<"', moving to mode 2"<<endl;
}
}
else {
- mode = EDNSStatus::EDNSOK;
+ *mode = EDNSStatus::EDNSOK;
// cerr<<"We find that "<<ip.toString()<<" is EDNS OK!"<<endl;
}
}
- if(oldmode != mode || !ednsstatus->modeSetAt)
+ if (oldmode != *mode || !ednsstatus->modeSetAt)
ednsstatus->modeSetAt=d_now.tv_sec;
// cerr<<"Result: ret="<<ret<<", EDNS-level: "<<EDNSLevel<<", haveEDNS: "<<res->d_haveEDNS<<", new mode: "<<mode<<endl;
return ret;