reSIProcate/rutil  9694
Public Member Functions | Private Types | Static Private Member Functions | Private Attributes | Static Private Attributes
resip::LocalDns Class Reference

#include <LocalDns.hxx>

Inheritance diagram for resip::LocalDns:
Inheritance graph
[legend]
Collaboration diagram for resip::LocalDns:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 LocalDns ()
virtual ~LocalDns ()
virtual int init ()
virtual unsigned int getTimeTillNextProcessMS ()
virtual void buildFdSet (fd_set &read, fd_set &write, int &size)
virtual void process (fd_set &read, fd_set &write)
virtual void freeResult (ExternalDnsRawResult)
virtual void freeResult (ExternalDnsHostResult)
void lookup (const char *target, unsigned short type, ExternalDnsHandler *handler, void *userData)
virtual void lookupARecords (const char *target, ExternalDnsHandler *handler, void *userData)
virtual void lookupAAAARecords (const char *target, ExternalDnsHandler *handler, void *userData)
virtual void lookupNAPTR (const char *target, ExternalDnsHandler *handler, void *userData)
virtual void lookupSRV (const char *target, ExternalDnsHandler *handler, void *userData)
virtual char * errorMessage (long errorCode)

Private Types

typedef std::pair
< ExternalDnsHandler *, void * > 
Payload

Static Private Member Functions

static ExternalDnsRawResult makeRawResult (void *arg, int status, unsigned char *abuf, int alen)
static ExternalDnsHandlergetHandler (void *arg)
static void localCallback (void *arg, int status, unsigned char *abuf, int alen)
static void message (const char *file, unsigned char *buf, int &len)

Private Attributes

struct ares_channeldata * mChannel

Static Private Attributes

static std::map< Data, Datafiles
static Data mTarget

Detailed Description

Definition at line 16 of file LocalDns.hxx.


Member Typedef Documentation

typedef std::pair<ExternalDnsHandler*, void*> resip::LocalDns::Payload [private]

Definition at line 52 of file LocalDns.hxx.


Constructor & Destructor Documentation

LocalDns::LocalDns ( )

Definition at line 38 of file LocalDns.cxx.

{
   files["yahoo.com"] = "yahoo.dns";
   files["demo.xten.com"] = "demo.naptr";
   files["_ldap._tcp.openldap.org"] = "openldap.srv";
   files["quartz"] = "quartz.aaaa";
   files["crystal"] = "crystal.aaaa";
   files["www.google.com"] = "google.cname";
}
LocalDns::~LocalDns ( ) [virtual]

Definition at line 48 of file LocalDns.cxx.

{
}

Member Function Documentation

void LocalDns::buildFdSet ( fd_set &  read,
fd_set &  write,
int &  size 
) [virtual]

Implements resip::ExternalDns.

Definition at line 83 of file LocalDns.cxx.

{
}
virtual char* resip::LocalDns::errorMessage ( long  errorCode) [inline, virtual]

Implements resip::ExternalDns.

Definition at line 36 of file LocalDns.hxx.

      {
         const char* msg = "Local Dns";

         int len = (int)strlen(msg);
         char* errorString = new char[len+1];

         strncpy(errorString, msg, len);
         errorString[len] = '\0';
         return errorString;
      }
virtual void resip::LocalDns::freeResult ( ExternalDnsRawResult  ) [inline, virtual]

Implements resip::ExternalDns.

Definition at line 27 of file LocalDns.hxx.

{}
virtual void resip::LocalDns::freeResult ( ExternalDnsHostResult  ) [inline, virtual]

Implements resip::ExternalDns.

Definition at line 28 of file LocalDns.hxx.

{}
ExternalDnsHandler * LocalDns::getHandler ( void *  arg) [static, private]

Definition at line 53 of file LocalDns.cxx.

{
   Payload* p = reinterpret_cast<Payload*>(arg);
   ExternalDnsHandler *thisp = reinterpret_cast<ExternalDnsHandler*>(p->first);
   return thisp;
}
unsigned int LocalDns::getTimeTillNextProcessMS ( ) [virtual]

Implements resip::ExternalDns.

Definition at line 77 of file LocalDns.cxx.

{
   return 20; 
}
int LocalDns::init ( ) [virtual]

Definition at line 25 of file LocalDns.cxx.

{
   int status;
   if ((status = ares_init(&mChannel)) != ARES_SUCCESS)
   {
      return status;
   }
   else
   {
      return 0;
   }
}
void LocalDns::localCallback ( void *  arg,
int  status,
unsigned char *  abuf,
int  alen 
) [static, private]

Definition at line 122 of file LocalDns.cxx.

Referenced by lookup().

{
   unsigned char msg[1024];
   int len = 0;
   map<Data, Data>::iterator it = files.find(mTarget);
   assert(it != files.end());
   message(it->second.c_str(), msg, len);   
   assert(0 != len);
   getHandler(arg)->handleDnsRaw(makeRawResult(arg, 0, msg, len));
   Payload* p = reinterpret_cast<Payload*>(arg);
   delete p;
}
void LocalDns::lookup ( const char *  target,
unsigned short  type,
ExternalDnsHandler handler,
void *  userData 
) [virtual]

Implements resip::ExternalDns.

Definition at line 93 of file LocalDns.cxx.

References localCallback().

{
   mTarget = target;
   ares_query(mChannel, target, C_IN, type, LocalDns::localCallback, new Payload(handler, userData));
}

Here is the call graph for this function:

virtual void resip::LocalDns::lookupAAAARecords ( const char *  target,
ExternalDnsHandler handler,
void *  userData 
) [inline, virtual]

Definition at line 33 of file LocalDns.hxx.

{}
virtual void resip::LocalDns::lookupARecords ( const char *  target,
ExternalDnsHandler handler,
void *  userData 
) [inline, virtual]

Definition at line 32 of file LocalDns.hxx.

{}
virtual void resip::LocalDns::lookupNAPTR ( const char *  target,
ExternalDnsHandler handler,
void *  userData 
) [inline, virtual]

Definition at line 34 of file LocalDns.hxx.

{}
virtual void resip::LocalDns::lookupSRV ( const char *  target,
ExternalDnsHandler handler,
void *  userData 
) [inline, virtual]

Definition at line 35 of file LocalDns.hxx.

{}
ExternalDnsRawResult LocalDns::makeRawResult ( void *  arg,
int  status,
unsigned char *  abuf,
int  alen 
) [static, private]

Definition at line 61 of file LocalDns.cxx.

{
   Payload* p = reinterpret_cast<Payload*>(arg);
   void* userArg = reinterpret_cast<void*>(p->second);
   
   if (status != ARES_SUCCESS)
   {
      return ExternalDnsRawResult(status, abuf, alen, userArg);
   }
   else
   {
      return ExternalDnsRawResult(abuf, alen, userArg);
   }
}
void LocalDns::message ( const char *  file,
unsigned char *  buf,
int &  len 
) [static, private]

Definition at line 99 of file LocalDns.cxx.

{
   len = 0;
   ifstream fs;
   fs.open(file, ios_base::binary | ios_base::in);
   assert(fs.is_open());
   
   unsigned char* p = buf;
   
   while (!fs.eof())
   {
      unsigned char c = fs.get();
      if (c != char_traits<char>::eof())
      {
         *p++ = c;
         len++;
      }
   }
   
   fs.close();
}
void LocalDns::process ( fd_set &  read,
fd_set &  write 
) [virtual]

Implements resip::ExternalDns.

Definition at line 88 of file LocalDns.cxx.

{
}

Member Data Documentation

std::map< Data, Data > LocalDns::files [static, private]

Definition at line 59 of file LocalDns.hxx.

struct ares_channeldata* resip::LocalDns::mChannel [private]

Definition at line 50 of file LocalDns.hxx.

Data LocalDns::mTarget [static, private]

Definition at line 60 of file LocalDns.hxx.


The documentation for this class was generated from the following files: