|
reSIProcate/stack
9694
|
#include <Aor.hxx>

Public Member Functions | |
| Aor (const Data &value) | |
| Aor () | |
| Aor (const Uri &uri) | |
| Aor (const Aor &aor) | |
| Aor & | operator= (const Aor &aor) |
| bool | operator== (const Aor &other) const |
| bool | operator!= (const Aor &other) const |
| bool | operator< (const Aor &other) const |
| const Data & | value () const |
| Data & | scheme () |
| const Data & | scheme () const |
| Data & | host () |
| const Data & | host () const |
| Data & | user () |
| const Data & | user () const |
| int & | port () |
| int | port () const |
| EncodeStream & | operator<< (EncodeStream &str) const |
Private Attributes | |
| Data | mValue |
| Data | mOldScheme |
| Data | mOldUser |
| Data | mOldHost |
| int | mOldPort |
| Data | mCanonicalHost |
| Data | mScheme |
| Data | mUser |
| Data | mHost |
| int | mPort |
| Aor::Aor | ( | const Data & | value | ) | [explicit] |
Definition at line 15 of file Aor.cxx.
References resip::ParseBuffer::assertNotEof(), resip::Symbols::AT_SIGN, resip::DnsUtil::canonicalizeIpV6Address(), resip::Symbols::COLON, resip::ParseBuffer::data(), resip::ParseBuffer::eof(), resip::ParseBuffer::integer(), resip::isEqualNoCase(), resip::Data::lowercase(), mHost, mPort, mScheme, mUser, resip::ParseBuffer::position(), resip::Symbols::RA_QUOTE, resip::ParseBuffer::reset(), resip::Symbols::SEMI_COLON, resip::ParseBuffer::skipChar(), resip::ParseBuffer::skipToChar(), resip::ParseBuffer::skipToOneOf(), resip::ParseBuffer::skipWhitespace(), resip::Symbols::Tel, and resip::ParseBuffer::Whitespace.
{
ParseBuffer pb(value);
pb.skipWhitespace();
const char* start = pb.position();
pb.skipToOneOf(":@"); // make sure the colon precedes
pb.assertNotEof();
pb.data(mScheme, start);
pb.skipChar(Symbols::COLON[0]);
mScheme.lowercase();
if (isEqualNoCase(mScheme, Symbols::Tel))
{
const char* anchor = pb.position();
pb.skipToOneOf(ParseBuffer::Whitespace, ";>");
pb.data(mUser, anchor);
if (!pb.eof() && *pb.position() == Symbols::SEMI_COLON[0])
{
anchor = pb.skipChar();
pb.skipToOneOf(ParseBuffer::Whitespace, Symbols::RA_QUOTE);
}
return;
}
start = pb.position();
pb.skipToChar(Symbols::AT_SIGN[0]);
if (!pb.eof())
{
pb.reset(start);
start = pb.position();
pb.skipToOneOf(":@");
pb.data(mUser, start);
if (!pb.eof() && *pb.position() == Symbols::COLON[0])
{
start = pb.skipChar();
pb.skipToChar(Symbols::AT_SIGN[0]);
}
start = pb.skipChar();
}
else
{
pb.reset(start);
}
if (*start == '[')
{
start = pb.skipChar();
pb.skipToChar(']');
pb.data(mHost, start);
DnsUtil::canonicalizeIpV6Address(mHost);
pb.skipChar();
}
else
{
pb.skipToOneOf(ParseBuffer::Whitespace, ":;?>");
pb.data(mHost, start);
}
pb.skipToOneOf(ParseBuffer::Whitespace, ":;?>");
if (!pb.eof() && *pb.position() == ':')
{
start = pb.skipChar();
mPort = pb.integer();
pb.skipToOneOf(ParseBuffer::Whitespace, ";?>");
}
else
{
mPort = 0;
}
}

| Aor::Aor | ( | const Uri & | uri | ) |
| Data & Aor::host | ( | ) |
| const Data & Aor::host | ( | ) | const |
| bool Aor::operator!= | ( | const Aor & | other | ) | const |
| bool Aor::operator< | ( | const Aor & | other | ) | const |
| EncodeStream & Aor::operator<< | ( | EncodeStream & | str | ) | const |
| bool Aor::operator== | ( | const Aor & | other | ) | const |
| int & Aor::port | ( | ) |
| Data & Aor::scheme | ( | ) |
| const Data & Aor::scheme | ( | ) | const |
| Data & Aor::user | ( | ) |
| const Data & Aor::user | ( | ) | const |
| const Data & Aor::value | ( | ) | const |
Definition at line 136 of file Aor.cxx.
References resip::Symbols::AT_SIGN, resip::DnsUtil::canonicalizeIpV6Address(), resip::Symbols::COLON, resip::Data::empty(), resip::DnsUtil::isIpV6Address(), resip::Data::lowercase(), mCanonicalHost, mHost, mOldHost, mOldPort, mOldScheme, mOldUser, mPort, mScheme, mUser, mValue, resip::Data::reserve(), and resip::Data::size().
Referenced by main(), operator!=(), operator<(), operator<<(), and operator==().
{
if (mOldScheme != mScheme ||
mOldUser != mUser ||
mOldHost != mHost ||
mOldPort != mPort)
{
mOldHost = mHost;
if (DnsUtil::isIpV6Address(mHost))
{
mCanonicalHost = DnsUtil::canonicalizeIpV6Address(mHost);
}
else
{
mCanonicalHost = mHost;
mCanonicalHost.lowercase();
}
mOldScheme = mScheme;
mOldUser = mUser;
mOldPort = mPort;
mValue.reserve(mUser.size() + mCanonicalHost.size() + 10);
DataStream strm(mValue);
strm << mScheme;
strm << Symbols::COLON;
strm << mUser;
if (!mCanonicalHost.empty())
{
strm << Symbols::AT_SIGN;
strm << mCanonicalHost;
if (mPort != 0)
{
strm << Symbols::COLON;
strm << Data(mPort);
}
}
}
return mValue;
}

Data resip::Aor::mCanonicalHost [mutable, private] |
Data resip::Aor::mHost [private] |
Data resip::Aor::mOldHost [mutable, private] |
int resip::Aor::mOldPort [mutable, private] |
Data resip::Aor::mOldScheme [mutable, private] |
Data resip::Aor::mOldUser [mutable, private] |
int resip::Aor::mPort [private] |
Data resip::Aor::mScheme [private] |
Data resip::Aor::mUser [private] |
Data resip::Aor::mValue [mutable, private] |
1.7.5.1