#include <dns.h>
Inherits Timer.

Data Structures | |
| class | ReplySocket |
| class | TCPSocket |
| class | UDPSocket |
Public Member Functions | |
| DNSManager (const Anope::string &nameserver, const Anope::string &ip, int port) | |
| ~DNSManager () | |
| bool | HandlePacket (ReplySocket *s, const unsigned char *const data, int len, sockaddrs *from) |
| void | AddCache (DNSQuery &r) |
| bool | CheckCache (DNSRequest *request) |
| void | Tick (time_t now) anope_override |
| void | Cleanup (Module *mod) |
| void | UpdateSerial () |
| uint32_t | GetSerial () const |
Static Public Member Functions | |
| static DNSQuery | BlockingQuery (const Anope::string &mask, QueryType qt) |
Data Fields | |
| TCPSocket * | tcpsock |
| UDPSocket * | udpsock |
| sockaddrs | addrs |
| std::map< unsigned short, DNSRequest * > | requests |
Private Types | |
| typedef std::multimap < Anope::string, ResourceRecord, ci::less > | cache_map |
Private Attributes | |
| cache_map | cache |
| bool | listen |
| uint32_t | serial |
DNS manager
Definition at line 161 of file dns.h.
typedef std::multimap<Anope::string, ResourceRecord, ci::less> DNSManager::cache_map [private] |
| DNSManager::DNSManager | ( | const Anope::string & | nameserver, | |
| const Anope::string & | ip, | |||
| int | port | |||
| ) |
Definition at line 633 of file dns.cpp.
References addrs, Socket::Bind(), Anope::string::find(), CoreException::GetReason(), listen, LOG_DEBUG, Anope::string::npos, sockaddrs::pton(), tcpsock, udpsock, and UpdateSerial().
| DNSManager::~DNSManager | ( | ) |
Definition at line 661 of file dns.cpp.
References cache, DNSQuery::error, DNSRequest::OnError(), requests, tcpsock, and udpsock.
| void DNSManager::AddCache | ( | DNSQuery & | r | ) |
Add a record to the dns cache
| r | The record |
Definition at line 830 of file dns.cpp.
References DNSQuery::answers, cache, LOG_DEBUG_3, Question::name, ResourceRecord::rdata, and ResourceRecord::ttl.
Referenced by HandlePacket().
| DNSQuery DNSManager::BlockingQuery | ( | const Anope::string & | mask, | |
| QueryType | qt | |||
| ) | [static] |
Does a BLOCKING DNS query and returns the first IP. Only use this if you know what you are doing. Unless you specifically need a blocking query use the DNSRequest system
Definition at line 910 of file dns.cpp.
References sockaddrs::addr(), DNSQuery::answers, Anope::string::c_str(), DNS_QUERY_A, DNS_QUERY_AAAA, LOG_DEBUG_2, and ResourceRecord::rdata.
Referenced by Connect().
| bool DNSManager::CheckCache | ( | DNSRequest * | request | ) |
Check the DNS cache to see if request can be handled by a cached result
Definition at line 840 of file dns.cpp.
References DNSQuery::answers, cache, ResourceRecord::created, Anope::CurTime, LOG_DEBUG_3, Question::name, DNSRequest::OnLookupComplete(), and ResourceRecord::ttl.
Referenced by DNSRequest::Process().
| void DNSManager::Cleanup | ( | Module * | mod | ) |
Cleanup all pending DNS queries for a module
| mod | The module |
Definition at line 880 of file dns.cpp.
References DNSRequest::creator, DNSQuery::error, DNSRequest::OnError(), and requests.
Referenced by Module::~Module().
| uint32_t DNSManager::GetSerial | ( | ) | const |
| bool DNSManager::HandlePacket | ( | ReplySocket * | s, | |
| const unsigned char *const | data, | |||
| int | len, | |||
| sockaddrs * | from | |||
| ) |
Definition at line 683 of file dns.cpp.
References AddCache(), DNSQuery::additional, sockaddrs::addr(), addrs, DNSQuery::answers, DNSQuery::authorities, Config, DNS_QUERY_AXFR, DNS_QUERY_NS, DNS_QUERY_SOA, DNS_QUERYFLAGS_OPCODE, DNS_QUERYFLAGS_QR, DNS_QUERYFLAGS_RCODE, ServerConfig::DNSSOANS, DNSQuery::error, DNSPacket::Fill(), DNSPacket::flags, FOREACH_MOD, CoreException::GetReason(), DNSPacket::HEADER_LENGTH, I_OnDnsRequest, DNSPacket::id, listen, LOG_DEBUG_2, Question::name, DNSRequest::OnError(), DNSRequest::OnLookupComplete(), DNSQuery::questions, ResourceRecord::rdata, DNSManager::ReplySocket::Reply(), requests, and Question::type.
Referenced by DNSManager::UDPSocket::ProcessRead(), and DNSManager::TCPSocket::Client::ProcessRead().
| void DNSManager::Tick | ( | time_t | now | ) | [virtual] |
Tick this timer, used to clear the DNS cache.
Implements Timer.
Definition at line 865 of file dns.cpp.
References cache, ResourceRecord::created, LOG_DEBUG_2, and ResourceRecord::ttl.
| void DNSManager::UpdateSerial | ( | ) |
Definition at line 900 of file dns.cpp.
References Anope::CurTime, and serial.
Referenced by CommandOSDNS::AddIP(), CommandOSDNS::DelIP(), DNSManager(), and DNSServer::Pool().
Definition at line 226 of file dns.h.
Referenced by DNSManager(), HandlePacket(), and DNSRequest::Process().
cache_map DNSManager::cache [private] |
Definition at line 217 of file dns.h.
Referenced by AddCache(), CheckCache(), Tick(), and ~DNSManager().
bool DNSManager::listen [private] |
Definition at line 219 of file dns.h.
Referenced by DNSManager(), and HandlePacket().
| std::map<unsigned short, DNSRequest *> DNSManager::requests |
Definition at line 227 of file dns.h.
Referenced by Cleanup(), DNSRequest::DNSRequest(), HandlePacket(), ~DNSManager(), and DNSRequest::~DNSRequest().
uint32_t DNSManager::serial [private] |
Definition at line 220 of file dns.h.
Referenced by GetSerial(), and UpdateSerial().
Definition at line 223 of file dns.h.
Referenced by DNSManager(), and ~DNSManager().
Definition at line 224 of file dns.h.
Referenced by DNSManager(), DNSRequest::DNSRequest(), DNSRequest::Process(), and ~DNSManager().
1.7.1