15#include <arpa/nameser.h>
21std::map<Data, Data> LocalDns::files;
22Data LocalDns::mTarget;
40 files[
"yahoo.com"] =
"yahoo.dns";
41 files[
"demo.xten.com"] =
"demo.naptr";
42 files[
"_ldap._tcp.openldap.org"] =
"openldap.srv";
43 files[
"quartz"] =
"quartz.aaaa";
44 files[
"crystal"] =
"crystal.aaaa";
45 files[
"www.google.com"] =
"google.cname";
53LocalDns::getHandler(
void* arg)
55 Payload* p =
reinterpret_cast<Payload*
>(arg);
61LocalDns::makeRawResult(
void *arg,
int status,
unsigned char *abuf,
int alen)
63 Payload* p =
reinterpret_cast<Payload*
>(arg);
64 void* userArg =
reinterpret_cast<void*
>(p->second);
96 ares_query(mChannel, target,
C_IN, type, LocalDns::localCallback,
new Payload(handler, userData));
99void LocalDns::message(
const char* file,
unsigned char* buf,
int& len)
103 fs.open(file, ios_base::binary | ios_base::in);
106 unsigned char* p = buf;
110 unsigned char c = fs.get();
111 if (c != char_traits<char>::eof())
122LocalDns::localCallback(
void *arg,
int status,
unsigned char *abuf,
int alen)
124 unsigned char msg[1024];
126 map<Data, Data>::iterator it = files.find(mTarget);
128 message(it->second.c_str(), msg, len);
130 getHandler(arg)->
handleDnsRaw(makeRawResult(arg, 0, msg, len));
131 Payload* p =
reinterpret_cast<Payload*
>(arg);
#define resip_assert(x)
This file needs to work for both C and C++ code.
int ares_init(ares_channel *channelptr)
void ares_query(ares_channel channel, const char *name, int dnsclass, int type, ares_callback callback, void *arg)
An alternative to std::string, encapsulates an arbitrary buffer of bytes.
virtual void handleDnsRaw(ExternalDnsRawResult res)=0
virtual void buildFdSet(fd_set &read, fd_set &write, int &size)
virtual void process(fd_set &read, fd_set &write)
virtual unsigned int getTimeTillNextProcessMS()
void lookup(const char *target, unsigned short type, ExternalDnsHandler *handler, void *userData)
dcm! – add UnusedChecking(_enum) below;