int watchid;
requestlist &rl;
public:
- RequestTimeout(InspIRCd* SI, DNSRequest* watching, int id, requestlist &requests) : InspTimer(2, time(NULL)), ServerInstance(SI), watch(watching), watchid(id), rl(requests)
+ RequestTimeout(unsigned long n, InspIRCd* SI, DNSRequest* watching, int id, requestlist &requests) : InspTimer(n, time(NULL)), ServerInstance(SI), watch(watching), watchid(id), rl(requests)
{
- ServerInstance->Log(DEBUG,"New DNS timeout set on %08x", watching);
+ ServerInstance->Log(DEBUG, "New DNS timeout set on %08x", watching);
}
void Tick(time_t TIME)
/* Still exists, whack it */
if (rl.find(watchid)->second == watch)
{
+ if (ServerInstance->Res->Classes[watchid])
+ {
+ ServerInstance->Res->Classes[watchid]->OnError(RESOLVER_TIMEOUT, "Request timed out");
+ delete ServerInstance->Res->Classes[watchid];
+ ServerInstance->Res->Classes[watchid] = NULL;
+ }
rl.erase(rl.find(watchid));
delete watch;
- ServerInstance->Log(DEBUG,"DNS timeout on %08x squished pointer", watch);
+ ServerInstance->Log(DEBUG, "DNS timeout on %08x squished pointer", watch);
}
return;
}
- ServerInstance->Log(DEBUG,"DNS timeout on %08x: result already received!", watch);
+ ServerInstance->Log(DEBUG, "DNS timeout on %08x: result already received!", watch);
}
};
res = new unsigned char[512];
*res = 0;
memcpy(&myserver, &server, sizeof(insp_inaddr));
- RequestTimeout* RT = new RequestTimeout(Instance, this, id, requests);
+ RequestTimeout* RT = new RequestTimeout(Instance->Config->dns_timeout ? Instance->Config->dns_timeout : 5, Instance, this, id, requests);
Instance->Timers->AddTimer(RT); /* The timer manager frees this */
}