X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmodules%2Fdns.h;h=8ac90f7deb12a24cab248ba710101039416b1588;hb=aa692dc1039b63deef7886e914ec499abe7facaf;hp=1ba54cc616375fcfed8d4d26b75b25607b617d77;hpb=b9e11915a976daaf790ebc763aff56e19fd49e0f;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/modules/dns.h b/include/modules/dns.h index 1ba54cc61..8ac90f7de 100644 --- a/include/modules/dns.h +++ b/include/modules/dns.h @@ -1,8 +1,9 @@ /* * InspIRCd -- Internet Relay Chat Daemon * - * Copyright (C) 2013 Adam - * Copyright (C) 2003-2013 Anope Team + * Copyright (C) 2017, 2019 Sadie Powell + * Copyright (C) 2014-2015 Attila Molnar + * Copyright (C) 2013, 2015-2016 Adam * * This file is part of InspIRCd. InspIRCd is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public @@ -33,6 +34,8 @@ namespace DNS QUERY_CNAME = 5, /* Reverse DNS lookup */ QUERY_PTR = 12, + /* TXT */ + QUERY_TXT = 16, /* IPv6 AAAA lookup */ QUERY_AAAA = 28 }; @@ -117,6 +120,18 @@ namespace DNS Query() : error(ERROR_NONE), cached(false) { } Query(const Question& q) : question(q), error(ERROR_NONE), cached(false) { } + + const ResourceRecord* FindAnswerOfType(QueryType qtype) const + { + for (std::vector::const_iterator i = answers.begin(); i != answers.end(); ++i) + { + const DNS::ResourceRecord& rr = *i; + if (rr.type == qtype) + return &rr; + } + + return NULL; + } }; class ReplySocket; @@ -132,15 +147,17 @@ namespace DNS virtual void Process(Request* req) = 0; virtual void RemoveRequest(Request* req) = 0; virtual std::string GetErrorStr(Error) = 0; + virtual std::string GetTypeStr(QueryType) = 0; }; /** A DNS query. */ - class Request : public Timer, public Question + class Request : public Timer { protected: Manager* const manager; public: + Question question; /* Use result cache if available */ bool use_cache; /* Request id */ @@ -149,9 +166,9 @@ namespace DNS Module* const creator; Request(Manager* mgr, Module* mod, const std::string& addr, QueryType qt, bool usecache = true) - : Timer((ServerInstance->Config->dns_timeout ? ServerInstance->Config->dns_timeout : 5)) - , Question(addr, qt) + : Timer(ServerInstance->Config->ConfValue("dns")->getDuration("timeout", 5, 1)) , manager(mgr) + , question(addr, qt) , use_cache(usecache) , id(0) , creator(mod) @@ -176,9 +193,9 @@ namespace DNS /** Used to time out the query, calls OnError and asks the TimerManager * to delete this request */ - bool Tick(time_t now) + bool Tick(time_t now) CXX11_OVERRIDE { - Query rr(*this); + Query rr(this->question); rr.error = ERROR_TIMEDOUT; this->OnError(&rr); delete this;