X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fdns.cpp;h=ec19ed397f9ec2f02a2adc60354f560e7a7711b3;hb=4cc6e5e14fdbde499481dbab5ab2ad1257b8af9c;hp=d297260d5c8e0aee132aa4637dd9073b95bebf40;hpb=61816ef0dd848225e9ec1c21c3c7a3bc03a34da9;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/dns.cpp b/src/dns.cpp index d297260d5..ec19ed397 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -42,7 +42,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 +100,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,14 +108,14 @@ 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) { @@ -123,13 +123,13 @@ class CacheTimer : public InspTimer } }; -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) { } @@ -152,7 +152,7 @@ class RequestTimeout : public InspTimer }; /* 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 +226,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 +237,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 +311,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 +351,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 +360,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 +373,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 +618,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 +721,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 +918,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; }