⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dnsnaptrrecord.cxx

📁 这是国外的resip协议栈
💻 CXX
字号:
#if defined(HAVE_CONFIG_H)#include "rutil/config.hxx"#endif#include <stdlib.h>#if defined(USE_ARES)#include "ares.h"#include "ares_dns.h"#endif#ifndef __CYGWIN__#ifndef RRFIXEDSZ#define RRFIXEDSZ 10#endif#endif#include "rutil/Data.hxx"#include "rutil/Logger.hxx"#include "rutil/ParseBuffer.hxx"#include "rutil/BaseException.hxx"#include "rutil/dns/RROverlay.hxx"#include "rutil/dns/DnsResourceRecord.hxx"#include "rutil/dns/DnsNaptrRecord.hxx"using namespace resip;#define RESIPROCATE_SUBSYSTEM resip::Subsystem::DNSDnsNaptrRecord::RegExp::RegExp(){}DnsNaptrRecord::RegExp::RegExp(const Data& data)  {   if (data.size() > 1)   {      ParseBuffer pb(data, "DnsNaptrRecord::RegExp parser");      const char delim = data[0];      const char* start = pb.skipChar(delim);      pb.skipToChar(delim);      pb.data(mRegexp, start);      start = pb.skipChar(delim);      pb.skipToChar(delim);      pb.data(mReplacement, start);      start = pb.skipChar(delim);      #if 0      //pb.data(mFlags, start);      if (regcomp(&mRe, mRegexp.c_str(), REG_EXTENDED) != 0)      {         // couldn't parse input regexp so ignore it         mRegexp.clear();      }#endif   }}DnsNaptrRecord::RegExp::~RegExp(){   //regfree(&mRe);}boolDnsNaptrRecord::RegExp::empty() const{   return mRegexp.empty();}const Data&DnsNaptrRecord::RegExp::regexp() const{   return mRegexp;}const Data&DnsNaptrRecord::RegExp::replacement() const{   return mReplacement;}DataDnsNaptrRecord::RegExp::apply(const Data& input) const{   // !jf! should be doing a real regexp here   //regmatch_t matches[10];   //regexec(&mRe, input.c_str(), 10, matches, 0);      return mReplacement;}DnsNaptrRecord::DnsNaptrRecord(const RROverlay& overlay){   char* name = 0;   int len = 0;   if (ARES_SUCCESS != ares_expand_name(overlay.data()-overlay.nameLength()-RRFIXEDSZ, overlay.msg(), overlay.msgLength(), &name, &len))   {      throw NaptrException("Failed parse of NAPTR record", __FILE__, __LINE__);   }   mName = name;   free(name);   mOrder = DNS__16BIT(overlay.data());   mPreference = DNS__16BIT(overlay.data() + 2);   const unsigned char* pPos = overlay.data() + 4;   len = *pPos;   if (pPos + len + 1 > overlay.data() + overlay.dataLength())   {      throw NaptrException("Failed parse of NAPTR record", __FILE__, __LINE__);   }   mFlags = Data(pPos + 1, len);   pPos += len + 1;   len = *pPos;   if (pPos + len + 1 > overlay.data() + overlay.dataLength())   {      throw NaptrException("Failed parse of NAPTR record", __FILE__, __LINE__);   }   mService = Data(pPos + 1, len);   pPos += len + 1;   len = *pPos;   if (pPos + len + 1 > overlay.data() + overlay.dataLength())   {      throw NaptrException("Failed parse of NAPTR record", __FILE__, __LINE__);   }   Data regexp(pPos + 1, len);   pPos += len + 1;   mRegexp = DnsNaptrRecord::RegExp(regexp);   InfoLog (<< "regexp=" << mRegexp.regexp() << " rep=" << mRegexp.replacement());   if (pPos[0] != 0)   {      if (ARES_SUCCESS != ares_expand_name(pPos, overlay.msg(), overlay.msgLength(), &name, &len))      {         throw NaptrException("Failed parse of NAPTR record", __FILE__, __LINE__);      }      mReplacement = name;      free(name);   }}bool DnsNaptrRecord::isSameValue(const Data& value) const{   return mReplacement == value;}std::ostream&DnsNaptrRecord::dump(std::ostream& strm) const{   strm << mName << " (NAPTR)--> o=" << mOrder << " p=" << mPreference;   return strm;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -