diff options
Diffstat (limited to 'include/modules/dns.h')
-rw-r--r-- | include/modules/dns.h | 66 |
1 files changed, 47 insertions, 19 deletions
diff --git a/include/modules/dns.h b/include/modules/dns.h index 69e92e68b..61a23caec 100644 --- a/include/modules/dns.h +++ b/include/modules/dns.h @@ -1,12 +1,20 @@ /* + * Anope IRC Services * - * (C) 2003-2017 Anope Team - * Contact us at team@anope.org + * Copyright (C) 2012-2017 Anope Team <team@anope.org> * - * Please read COPYING and README for further details. + * This file is part of Anope. Anope is free software; you can + * redistribute it and/or modify it under the terms of the GNU + * General Public License as published by the Free Software + * Foundation, version 2. * - * Based on the original code of Epona by Lara. - * Based on the original code of Services by Andy Church. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see see <http://www.gnu.org/licenses/>. */ #ifndef DNS_H @@ -78,11 +86,11 @@ namespace DNS Question() : type(QUERY_NONE), qclass(0) { } Question(const Anope::string &n, QueryType t, unsigned short c = 1) : name(n), type(t), qclass(c) { } - inline bool operator==(const Question & other) const { return name == other.name && type == other.type && qclass == other.qclass; } + inline bool operator==(const Question & other) const { return name == other.name && type == other.type && qclass == other.qclass; } struct hash { - size_t operator()(const Question &q) const + size_t operator()(const Question &q) const { return Anope::hash_ci()(q.name); } @@ -94,7 +102,7 @@ namespace DNS unsigned int ttl; Anope::string rdata; time_t created; - + ResourceRecord(const Anope::string &n, QueryType t, unsigned short c = 1) : Question(n, t, c), ttl(0), created(Anope::CurTime) { } ResourceRecord(const Question &q) : Question(q), ttl(0), created(Anope::CurTime) { } }; @@ -104,7 +112,7 @@ namespace DNS std::vector<Question> questions; std::vector<ResourceRecord> answers, authorities, additional; Error error; - + Query() : error(ERROR_NONE) { } Query(const Question &q) : error(ERROR_NONE) { questions.push_back(q); } }; @@ -117,17 +125,19 @@ namespace DNS class Manager : public Service { public: - Manager(Module *creator) : Service(creator, "DNS::Manager", "dns/manager") { } + static constexpr const char *NAME = "dns/manager"; + + Manager(Module *creator) : Service(creator, NAME) { } virtual ~Manager() { } - virtual void Process(Request *req) = 0; - virtual void RemoveRequest(Request *req) = 0; + virtual void Process(Request *req) anope_abstract; + virtual void RemoveRequest(Request *req) anope_abstract; - virtual bool HandlePacket(ReplySocket *s, const unsigned char *const data, int len, sockaddrs *from) = 0; + virtual bool HandlePacket(ReplySocket *s, const unsigned char *const data, int len, sockaddrs *from) anope_abstract; - virtual void UpdateSerial() = 0; - virtual void Notify(const Anope::string &zone) = 0; - virtual uint32_t GetSerial() const = 0; + virtual void UpdateSerial() anope_abstract; + virtual void Notify(const Anope::string &zone) anope_abstract; + virtual uint32_t GetSerial() const anope_abstract; }; /** A DNS query. @@ -154,7 +164,7 @@ namespace DNS /** Called when this request succeeds * @param r The query sent back from the nameserver */ - virtual void OnLookupComplete(const Query *r) = 0; + virtual void OnLookupComplete(const Query *r) anope_abstract; /** Called when this request fails or times out. * @param r The query sent back from the nameserver, check the error code. @@ -164,9 +174,9 @@ namespace DNS /** Used to time out the query, xalls OnError and lets the TimerManager * delete this request. */ - void Tick(time_t) anope_override + void Tick(time_t) override { - Log(LOG_DEBUG_2) << "Resolver: timeout for query " << this->name; + Anope::Logger.Debug2("Resolver: timeout for query {0}", this->name); Query rr(*this); rr.error = ERROR_TIMEDOUT; this->OnError(&rr); @@ -175,4 +185,22 @@ namespace DNS } // namespace DNS +namespace Event +{ + struct CoreExport DnsRequest : Events + { + static constexpr const char *NAME = "dnsrequest"; + + using Events::Events; + + /** Called when a DNS request (question) is recieved. + * @param req The dns request + * @param reply The reply that will be sent + */ + virtual void OnDnsRequest(DNS::Query &req, DNS::Query *reply) anope_abstract; + }; +} + #endif // DNS_H + + |