1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
#if defined(HAVE_CONFIG_H)
#include "config.h"
#endif
#include "rutil/ResipAssert.h"
#include "rutil/ParseException.hxx"
#include "resip/stack/ExistsOrDataParameter.hxx"
#include "resip/stack/Symbols.hxx"
#include "rutil/Logger.hxx"
#include "rutil/ParseBuffer.hxx"
//#include "rutil/WinLeakCheck.hxx" // not compatible with placement new used below
namespace resip
{
#define RESIPROCATE_SUBSYSTEM Subsystem::SIP
ExistsOrDataParameter::ExistsOrDataParameter(ParameterTypes::Type type, bool) :
DataParameter(type)
{
}
ExistsOrDataParameter::ExistsOrDataParameter(ParameterTypes::Type type,
ParseBuffer& pb,
const std::bitset<256>& terminators)
: DataParameter(type, pb, terminators)
{
}
ExistsOrDataParameter::ExistsOrDataParameter(ParameterTypes::Type type)
: DataParameter(type)
{
}
Parameter*
ExistsOrDataParameter::decode(ParameterTypes::Type type,
ParseBuffer& pb,
const std::bitset<256>& terminators,
PoolBase* pool)
{
//pb.skipWhitespace(); // whitespace may be a terminator - don't skip it
if (pb.eof() || terminators[*pb.position()])
{
return new (pool) ExistsOrDataParameter(type);
}
else
{
return new (pool) ExistsOrDataParameter(type, pb, terminators);
}
}
Parameter*
ExistsOrDataParameter::clone() const
{
return new ExistsOrDataParameter(*this);
}
EncodeStream&
ExistsOrDataParameter::encode(EncodeStream& stream) const
{
if (mValue.empty())
{
return stream << getName();
}
else
{
return DataParameter::encode(stream);
}
}
} // namespace resip
|