1#if defined(HAVE_CONFIG_H)
13#include <sys/socket.h>
16# include <netinet/in.h>
17# include <arpa/nameser.h>
21#include <netinet/in.h>
41#define RESIPROCATE_SUBSYSTEM resip::Subsystem::DNS
48 mFactories[
T_A] =
new HostTransformFactory;
49 mFactories[
T_AAAA] =
new HostTransformFactory;
50 mFactories[
T_NAPTR] =
new NaptrTransformFactroy;
51 mFactories[
T_SRV] =
new SrvTransformFactory;
56 for (map<MapKey, Transform*>::iterator it = mTransforms.begin(); it != mTransforms.end(); ++it)
61 for (TransformFactoryMap::iterator it = mFactories.begin(); it != mFactories.end(); ++it)
71 RRVip::MapKey key(target, rrType);
72 TransformMap::iterator it = mTransforms.find(key);
73 if (it != mTransforms.end())
75 it->second->updateVip(
vip);
79 TransformFactoryMap::iterator it = mFactories.find(rrType);
82 mTransforms.insert(TransformMap::value_type(key,
transform));
89 RRVip::MapKey key(target, rrType);
90 TransformMap::iterator it = mTransforms.find(key);
91 if (it != mTransforms.end())
95 mTransforms.erase(it);
96 DebugLog(<<
"removed vip " << target <<
"(" << rrType <<
"): " <<
vip);
102 std::vector<DnsResourceRecord*>& src)
104 RRVip::MapKey key(target, rrType);
105 TransformMap::iterator it = mTransforms.find(key);
106 if (it != mTransforms.end())
108 bool invalidVip =
false;
109 it->second->transform(src, invalidVip);
117RRVip::Transform::Transform(
const Data& vip)
122RRVip::Transform::~Transform()
126void RRVip::Transform::updateVip(
const Data& vip)
128 DebugLog(<<
"updating an existing vip: " << mVip <<
" with " << vip);
132void RRVip::Transform::transform(RRVector& src,
136 RRVector::iterator it;
137 for (it = src.begin(); it != src.end(); ++it)
139 if ((*it)->isSameValue(mVip))
147 DebugLog( <<
"tranforming records");
148 if (src.begin() != it)
152 src.insert(src.begin(), vip);
157RRVip::NaptrTransform::NaptrTransform(
const Data& vip)
160 DebugLog(<<
"Creating a new Napter transform for " <<
vip);
163void RRVip::NaptrTransform::transform(RRVector& src,
167 RRVector::iterator vip;
168 for (RRVector::iterator it = src.begin(); it != src.end(); ++it)
170 if ((*it)->isSameValue(mVip))
172 DebugLog(<<
"naptr vip record " << mVip <<
"found");
180 DebugLog(<<
"Transforming Naptr records");
182 for (RRVector::iterator it = src.begin(); it != src.end(); ++it)
185 if (order < min) min = order;
191RRVip::SrvTransform::SrvTransform(
const Data& vip)
194 DebugLog(<<
"Creating a new SRV transform for" <<
vip);
197void RRVip::SrvTransform::transform(RRVector& src,
201 RRVector::iterator vip;
202 for (RRVector::iterator it = src.begin(); it != src.end(); ++it)
204 if ((*it)->isSameValue(mVip))
213 DebugLog(<<
"Transforming SRV records");
215 for (RRVector::iterator it = src.begin(); it != src.end(); ++it)
217 int priority = ((
dynamic_cast<DnsSrvRecord*
>(*it))->priority())++;
218 if (priority < min) min = priority;
224RRVip::MapKey::MapKey()
229RRVip::MapKey::MapKey(
const Data& target,
int rrType)
235bool RRVip::MapKey::operator<(
const MapKey& rhs)
const
237 if (mRRType < rhs.mRRType)
241 else if (mRRType > rhs.mRRType)
247 return mTarget < rhs.mTarget;
#define resip_assert(x)
This file needs to work for both C and C++ code.
An alternative to std::string, encapsulates an arbitrary buffer of bytes.
void removeVip(const Data &target, int rrType)
void vip(const Data &target, int rrType, const Data &vip)
void transform(const Data &target, int rrType, std::vector< DnsResourceRecord * > &)
dcm! – add UnusedChecking(_enum) below;