return "done\n";
}
+template<typename T>
+string doDumpEDNSStatus(T begin, T end)
+{
+ T i=begin;
+ string fname;
+
+ if(i!=end)
+ fname=*i;
+
+ int fd=open(fname.c_str(), O_CREAT | O_EXCL | O_WRONLY, 0660);
+ if(fd < 0)
+ return "Error opening dump file for writing: "+string(strerror(errno))+"\n";
+
+ SyncRes::doEDNSDumpAndClose(fd);
+
+ return "done\n";
+}
+
+
template<typename T>
string doWipeCache(T begin, T end)
{
if(cmd=="dump-cache")
return doDumpCache(begin, end);
+ if(cmd=="dump-ednsstatus" || cmd=="dump-edns")
+ return doDumpEDNSStatus(begin, end);
+
+
if(cmd=="slash-cache")
return doSlashCache(begin, end);
return true;
}
+void SyncRes::doEDNSDumpAndClose(int fd)
+{
+ FILE* fp=fdopen(fd, "w");
+ fprintf(fp,"IP Address\tMode\tMode last updated at\n");
+ for(ednsstatus_t::const_iterator iter = s_ednsstatus.begin(); iter != s_ednsstatus.end(); ++iter) {
+ fprintf(fp, "%s\t%d\t%s", iter->first.toString().c_str(), (int)iter->second.mode, ctime(&iter->second.modeSetAt));
+ }
+ fclose(fp);
+}
+
int SyncRes::asyncresolveWrapper(const ComboAddress& ip, const string& domain, int type, bool doTCP, struct timeval* now, LWResult* res)
{
/* what is your QUEST?
int EDNSLevel=0;
int ret;
- for(int tries = 0; tries < 2; ++tries) {
+ for(int tries = 0; tries < 3; ++tries) {
// cerr<<"Remote '"<<ip.toString()<<"' currently in mode "<<mode<<endl;
if(mode==EDNSStatus::CONFIRMEDPINGER || mode==EDNSStatus::UNKNOWN || mode==EDNSStatus::EDNSPINGOK || mode==EDNSStatus::EDNSIGNORANT)
d_doEDNS0=state;
}
+
+
int asyncresolveWrapper(const ComboAddress& ip, const string& domain, int type, bool doTCP, struct timeval* now, LWResult* res);
+
+ static void doEDNSDumpAndClose(int fd);
static unsigned int s_queries;
static unsigned int s_outgoingtimeouts;