X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fdns.cpp;h=53224ba864cefecab007ca0744d1cab4244aaa93;hb=12b9855339a3bbd05cc0636588ea68bf8db390f5;hp=d297260d5c8e0aee132aa4637dd9073b95bebf40;hpb=61816ef0dd848225e9ec1c21c3c7a3bc03a34da9;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/dns.cpp b/src/dns.cpp index d297260d5..53224ba86 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -11,6 +11,8 @@ * --------------------------------------------------- */ +/* $Core: libIRCDasyncdns */ + /* dns.cpp - Nonblocking DNS functions. Very very loosely based on the firedns library, @@ -42,7 +44,6 @@ using irc::sockets::insp_inaddr; using irc::sockets::insp_ntoa; using irc::sockets::insp_aton; using irc::sockets::OpenTCPSocket; -using irc::sockets::NonBlocking; /** Masks to mask off the responses we get from the DNSRequest methods */ @@ -101,6 +102,7 @@ class DNSRequest DNS* dnsobj; /* DNS caller (where we get our FD from) */ unsigned long ttl; /* Time to live */ std::string orig; /* Original requested name/ip */ + InspIRCd* ServerInstance; DNSRequest(InspIRCd* Instance, DNS* dns, int id, const std::string &original); ~DNSRequest(); @@ -108,32 +110,32 @@ class DNSRequest int SendRequests(const DNSHeader *header, const int length, QueryType qt); }; -class CacheTimer : public InspTimer +class CacheTimer : public Timer { private: InspIRCd* ServerInstance; DNS* dns; public: CacheTimer(InspIRCd* Instance, DNS* thisdns) - : InspTimer(3600, Instance->Time(), true), ServerInstance(Instance), dns(thisdns) { } + : Timer(3600, Instance->Time(), true), ServerInstance(Instance), dns(thisdns) { } - virtual void Tick(time_t TIME) + virtual void Tick(time_t) { dns->PruneCache(); } }; -class RequestTimeout : public InspTimer +class RequestTimeout : public Timer { InspIRCd* ServerInstance; DNSRequest* watch; int watchid; public: - RequestTimeout(unsigned long n, InspIRCd* SI, DNSRequest* watching, int id) : InspTimer(n, time(NULL)), ServerInstance(SI), watch(watching), watchid(id) + RequestTimeout(unsigned long n, InspIRCd* SI, DNSRequest* watching, int id) : Timer(n, time(NULL)), ServerInstance(SI), watch(watching), watchid(id) { } - void Tick(time_t TIME) + void Tick(time_t) { if (ServerInstance->Res->requests[watchid] == watch) { @@ -145,14 +147,14 @@ class RequestTimeout : public InspTimer ServerInstance->Res->Classes[watchid] = NULL; } ServerInstance->Res->requests[watchid] = NULL; - DELETE(watch); + delete watch; return; } } }; /* Allocate the processing buffer */ -DNSRequest::DNSRequest(InspIRCd* Instance, DNS* dns, int id, const std::string &original) : dnsobj(dns) +DNSRequest::DNSRequest(InspIRCd* Instance, DNS* dns, int id, const std::string &original) : dnsobj(dns), ServerInstance(Instance) { res = new unsigned char[512]; *res = 0; @@ -226,7 +228,7 @@ int DNSRequest::SendRequests(const DNSHeader *header, const int length, QueryTyp memcpy(&addr.sin6_addr,&dnsobj->myserver6,sizeof(addr.sin6_addr)); addr.sin6_family = AF_INET6; addr.sin6_port = htons(DNS::QUERY_PORT); - if (sendto(dnsobj->GetFd(), payload, length + 12, 0, (sockaddr *) &addr, sizeof(addr)) != length+12) + if (ServerInstance->SE->SendTo(dnsobj, payload, length + 12, 0, (sockaddr *) &addr, sizeof(addr)) != length+12) return -1; } else @@ -237,7 +239,7 @@ int DNSRequest::SendRequests(const DNSHeader *header, const int length, QueryTyp memcpy(&addr.sin_addr.s_addr,&dnsobj->myserver4,sizeof(addr.sin_addr)); addr.sin_family = AF_INET; addr.sin_port = htons(DNS::QUERY_PORT); - if (sendto(dnsobj->GetFd(), (const char*)payload, length + 12, 0, (sockaddr *) &addr, sizeof(addr)) != length+12) + if (ServerInstance->SE->SendTo(dnsobj, (const char*)payload, length + 12, 0, (sockaddr *) &addr, sizeof(addr)) != length+12) return -1; } return 0; @@ -311,8 +313,8 @@ void DNS::Rehash() { if (ServerInstance && ServerInstance->SE) ServerInstance->SE->DelFd(this); - shutdown(this->GetFd(), 2); - close(this->GetFd()); + ServerInstance->SE->Shutdown(this, 2); + ServerInstance->SE->Close(this); this->SetFd(-1); /* Rehash the cache */ @@ -351,7 +353,7 @@ void DNS::Rehash() /* Initialize mastersocket */ int s = OpenTCPSocket(ServerInstance->Config->DNSServer, SOCK_DGRAM); this->SetFd(s); - NonBlocking(s); + ServerInstance->SE->NonBlocking(this->GetFd()); /* Have we got a socket and is it nonblocking? */ if (this->GetFd() != -1) @@ -360,8 +362,8 @@ void DNS::Rehash() if (!ServerInstance->BindSocket(this->GetFd(), portpass, "", false)) { /* Failed to bind */ - shutdown(this->GetFd(),2); - close(this->GetFd()); + ServerInstance->SE->Shutdown(this, 2); + ServerInstance->SE->Close(this); this->SetFd(-1); } @@ -373,8 +375,8 @@ void DNS::Rehash() if (!ServerInstance->SE->AddFd(this)) { ServerInstance->Log(DEFAULT,"Internal error starting DNS - hostnames will NOT resolve."); - shutdown(this->GetFd(),2); - close(this->GetFd()); + ServerInstance->SE->Shutdown(this, 2); + ServerInstance->SE->Close(this); this->SetFd(-1); } } @@ -618,10 +620,7 @@ DNSResult DNS::GetResult(int resultnum) const char* ipaddr_from; unsigned short int port_from = 0; - void* m_readEvent = NULL; - GetExt("windows_readevent", m_readEvent); - - int length = _recvfrom(this->GetFd(),(char*)buffer,sizeof(DNSHeader),0,from,&x); + int length = ServerInstance->SE->RecvFrom(this, (char*)buffer, sizeof(DNSHeader), 0, from, &x); /* Did we get the whole header? */ if (length < 12) @@ -724,15 +723,7 @@ DNSResult DNS::GetResult(int resultnum) case DNS_QUERY_AAAA: { - snprintf(formatted,40,"%x:%x:%x:%x:%x:%x:%x:%x", - (ntohs(data.first[0]) + ntohs(data.first[1] << 8)), - (ntohs(data.first[2]) + ntohs(data.first[3] << 8)), - (ntohs(data.first[4]) + ntohs(data.first[5] << 8)), - (ntohs(data.first[6]) + ntohs(data.first[7] << 8)), - (ntohs(data.first[8]) + ntohs(data.first[9] << 8)), - (ntohs(data.first[10]) + ntohs(data.first[11] << 8)), - (ntohs(data.first[12]) + ntohs(data.first[13] << 8)), - (ntohs(data.first[14]) + ntohs(data.first[15] << 8))); + inet_ntop(AF_INET6, data.first, formatted, sizeof(formatted)); char* c = strstr(formatted,":0:"); if (c != NULL) { @@ -929,8 +920,8 @@ DNSInfo DNSRequest::ResultIsReady(DNSHeader &header, int length, int result_we_w /** Close the master socket */ DNS::~DNS() { - shutdown(this->GetFd(), 2); - close(this->GetFd()); + ServerInstance->SE->Shutdown(this, 2); + ServerInstance->SE->Close(this); ServerInstance->Timers->DelTimer(this->PruneTimer); delete this->PruneTimer; } @@ -1029,7 +1020,7 @@ Resolver::Resolver(InspIRCd* Instance, const std::string &source, QueryType qt, } /** Called when an error occurs */ -void Resolver::OnError(ResolverError e, const std::string &errormessage) +void Resolver::OnError(ResolverError, const std::string&) { /* Nothing in here */ } @@ -1052,7 +1043,7 @@ Module* Resolver::GetCreator() } /** Process a socket read event */ -void DNS::HandleEvent(EventType et, int errornum) +void DNS::HandleEvent(EventType, int) { /* Fetch the id and result of the next available packet */ int resultnum = 0;