39 bool rtcpEnabled =
true;
61 const std::list<SdpContents::Session::Email>& emails = resipSession->
getEmails();
62 std::list<SdpContents::Session::Email>::const_iterator it;
63 for(it = emails.begin(); it != emails.end(); it++)
65 if(it->getFreeText().empty())
78 const std::list<SdpContents::Session::Phone>& phones = resipSession->
getPhones();
79 std::list<SdpContents::Session::Phone>::const_iterator it;
80 for(it = phones.begin(); it != phones.end(); it++)
82 if(it->getFreeText().empty())
95 const std::list<SdpContents::Session::Bandwidth>& bandwidths = resipSession->
bandwidths();
96 std::list<SdpContents::Session::Bandwidth>::const_iterator it;
97 bool RRSetToZero=
false;
98 bool RSSetToZero=
false;
99 for(it = bandwidths.begin(); it != bandwidths.end(); it++)
116 if(RRSetToZero && RSSetToZero)
124 const std::list<SdpContents::Session::Time>& times = resipSession->
getTimes();
125 std::list<SdpContents::Session::Time>::const_iterator it;
126 for(it = times.begin(); it != times.end(); it++)
131 const std::list<SdpContents::Session::Time::Repeat>& repeats = it->getRepeats();
132 std::list<SdpContents::Session::Time::Repeat>::const_iterator it2;
133 for(it2 = repeats.begin(); it2 != repeats.end(); it2++)
138 const std::list<int>& offsets = it2->getOffsets();
139 std::list<int>::const_iterator it3;
140 for(it3 = offsets.begin(); it3 != offsets.end(); it3++)
145 delete sdpTimeRepeat;
155 std::list<SdpContents::Session::Timezones::Adjustment>::const_iterator it;
156 for(it = adjustments.begin(); it != adjustments.end(); it++)
163 if(resipSession->
exists(
"cat"))
167 if(resipSession->
exists(
"keywds"))
171 if(resipSession->
exists(
"tool"))
175 if(resipSession->
exists(
"type"))
179 if(resipSession->
exists(
"charset"))
183 if(resipSession->
exists(
"ice-passive"))
187 if(resipSession->
exists(
"group"))
189 const std::list<Data>& values = resipSession->
getValues(
"group");
190 std::list<Data>::const_iterator it;
191 for(it = values.begin(); it != values.end(); it++)
199 pb.
data(token, anchor);
209 pb.
data(token, anchor);
217 if(resipSession->
exists(
"lang"))
221 if(resipSession->
exists(
"sdplang"))
225 if(resipSession->
exists(
"maxprate"))
227#ifndef RESIP_FIXED_POINT
235 const std::list<SdpContents::Session::Medium>& medias = resipSession->
media();
236 std::list<SdpContents::Session::Medium>::const_iterator it;
237 for(it = medias.begin(); it != medias.end(); it++)
240 SdpMediaLine* mediaLine = parseMediaLine(resipMedia, *resipSession, rtcpEnabled);
243 if(resipMedia.
exists(
"pcfg"))
245 std::list<SdpMediaLine::SdpTransportProtocolCapabilities> tcapList;
246 if(resipMedia.
exists(
"tcap"))
249 std::list<Data>::const_iterator it2;
250 for(it2 = tcaps.begin(); it2 != tcaps.end(); it2++)
255 std::map<unsigned int, std::pair<Data, Data> > acapList;
256 if(resipMedia.
exists(
"acap"))
259 std::list<Data>::const_iterator it2;
260 for(it2 = acaps.begin(); it2 != acaps.end(); it2++)
263 unsigned int acapId = pb.
uInt32();
271 pb.
data(name, anchor);
276 pb.
data(value, anchor);
279 acapList[acapId] = std::make_pair(name, value);
283 const std::list<Data>& pcfgs = resipMedia.
getValues(
"pcfg");
284 std::list<Data>::const_iterator it2;
285 for (it2 = pcfgs.begin(); it2 != pcfgs.end(); it2++)
287 Data acceptedConfigurationLine;
288 std::list<SdpMediaLine::SdpPotentialConfiguration> pcfgList;
290 std::list<SdpMediaLine::SdpPotentialConfiguration>::iterator pcfgIt = pcfgList.begin();
291 for (; pcfgIt != pcfgList.end(); pcfgIt++)
294 if (pcfgIt->getTransportId() != 0)
297 std::list<SdpMediaLine::SdpTransportProtocolCapabilities>::iterator tcapIt = tcapList.begin();
298 for (; tcapIt != tcapList.end(); tcapIt++)
300 if (tcapIt->getId() == pcfgIt->getTransportId())
302 potentialTransportType = tcapIt->getType();
303 acceptedConfigurationLine =
Data(pcfgIt->getId()) +
" t=" +
Data(pcfgIt->getTransportId());
311 acceptedConfigurationLine =
Data(pcfgIt->getId());
319 std::list<SdpContents::Session::Medium>& potentialMedias = potentialSession.
media();
320 std::list<SdpContents::Session::Medium>::iterator potMedIt;
321 for (potMedIt = potentialMedias.begin(); potMedIt != potentialMedias.end(); potMedIt++)
323 if (potMedIt->protocol() == resipMedia.
protocol() &&
324 potMedIt->port() == (
unsigned int)resipMedia.
port() &&
325 potMedIt->name() == resipMedia.
name())
327 potentialMedium = &(*potMedIt);
335 if (!pcfgIt->getAttributeIds().empty() || pcfgIt->getDeleteSessionAttributes() || pcfgIt->getDeleteMediaAttributes())
337 acceptedConfigurationLine +=
" a=";
338 if (pcfgIt->getDeleteSessionAttributes() && pcfgIt->getDeleteMediaAttributes())
340 acceptedConfigurationLine +=
"-ms:";
343 else if (pcfgIt->getDeleteSessionAttributes())
345 acceptedConfigurationLine +=
"-s:";
348 else if (pcfgIt->getDeleteMediaAttributes())
350 acceptedConfigurationLine +=
"-m:";
354 bool optional =
false;
356 SdpMediaLine::SdpPotentialConfiguration::ConfigIdList::const_iterator attribIt = pcfgIt->getAttributeIds().
begin();
357 for (; attribIt != pcfgIt->getAttributeIds().end(); attribIt++)
362 std::map<unsigned int, std::pair<Data, Data> >::iterator acapListIt = acapList.find(configIdItem->
getId());
363 if (acapListIt == acapList.end())
continue;
364 potentialMedium->
addAttribute(acapListIt->second.first, acapListIt->second.second);
368 acceptedConfigurationLine +=
",";
375 acceptedConfigurationLine +=
"[";
379 acceptedConfigurationLine +=
Data(configIdItem->
getId());
384 acceptedConfigurationLine +=
"]";
386 SdpMediaLine* potentialSdpMediaLine = parseMediaLine(*potentialMedium, potentialSession, rtcpEnabled);
389 delete potentialSdpMediaLine;
426 if(resipSession.
exists(
"sendrecv"))
430 else if(resipSession.
exists(
"sendonly"))
434 else if(resipSession.
exists(
"recvonly"))
438 else if(resipSession.
exists(
"inactive"))
459 if(resipMedia.
exists(
"sendrecv") && !resipSession.
exists(
"sendrecv"))
463 else if(resipMedia.
exists(
"sendonly") && !resipSession.
exists(
"sendonly"))
467 else if(resipMedia.
exists(
"recvonly") && !resipSession.
exists(
"recvonly"))
471 else if(resipMedia.
exists(
"inactive") && !resipSession.
exists(
"inactive"))
485 bool rtcpEnabledForMedia = sessionRtcpEnabled;
492 unsigned int ptime=20;
493 if(resipMedia.
exists(
"ptime"))
495 ptime = resipMedia.
getValues(
"ptime").front().convertInt();
501 const std::list<SdpContents::Session::Codec>& codecs = resipMedia.
codecs();
502 std::list<SdpContents::Session::Codec>::const_iterator it2;
503 for(it2 = codecs.begin(); it2 != codecs.end(); it2++)
513 resipCodec.parameters().c_str());
524 const std::list<SdpContents::Session::Bandwidth>& bandwidths = resipMedia.
bandwidths();
525 std::list<SdpContents::Session::Bandwidth>::const_iterator it;
526 bool RRSetToZero=
false;
527 bool RSSetToZero=
false;
528 for(it = bandwidths.begin(); it != bandwidths.end(); it++)
536 if(it->kbPerSecond() == 0)
543 rtcpEnabledForMedia =
true;
548 if(it->kbPerSecond() == 0)
555 rtcpEnabledForMedia =
true;
561 if(RRSetToZero && RSSetToZero)
563 rtcpEnabledForMedia =
false;
576 const std::list<SdpContents::Session::Connection>& connections = resipMedia.
getConnections();
577 std::list<SdpContents::Session::Connection>::const_iterator it2;
578 if(connections.size() == numPorts)
580 for(it2 = connections.begin(); it2 != connections.end(); it2++, i++)
587 resipMedia.
port() + (i*2),
588 resipConnection.
ttl());
593 for(it2 = connections.begin(); it2 != connections.end(); it2++)
597 for(i = 0; i < numPorts; i++)
602 resipMedia.
port() + (i*2),
603 resipConnection.
ttl());
611 if(rtcpEnabledForMedia)
616 unsigned int ipv4ttl = 0;
621 unsigned int port = pb.uInt32();
625 const char* anchor = pb.skipWhitespace();
633 pb.
data(address, anchor);
637 pb.data(address, anchor);
641 ipv4ttl = pb.integer();
662 SdpMediaLine::ConnectionList::const_iterator it2 = mediaLine->
getConnections().begin();
666 it2->getAddressType(),
667 it2->getAddress().data(),
669 it2->getMulticastIpV4Ttl());
701 if(resipMedia.
exists(
"maxptime"))
706 if(resipMedia.
exists(
"orient"))
711 if(resipMedia.
exists(
"sdplang"))
716 if(resipMedia.
exists(
"lang"))
721 if(resipMedia.
exists(
"framerate"))
726 if(resipMedia.
exists(
"quality"))
731 if(resipMedia.
exists(
"setup"))
736 if(resipMedia.
exists(
"connection"))
741 if(resipMedia.
exists(
"crypto"))
743 const std::list<Data>& cryptos = resipMedia.
getValues(
"crypto");
744 std::list<Data>::const_iterator it2;
745 for(it2 = cryptos.begin(); it2 != cryptos.end(); it2++)
756 if(resipMedia.
exists(
"fingerprint"))
758 const std::list<Data>& fingerprints = resipMedia.
getValues(
"fingerprint");
759 std::list<Data>::const_iterator it2;
762 for (it2 = fingerprints.begin(); it2 != fingerprints.end(); it2++)
773 bestHashType = hashType;
774 bestFingerprint = fingerprint;
784 if(resipMedia.
exists(
"key-mgmt"))
792 const char * anchor = pb.position();
794 pb.
data(token, anchor);
798 anchor = pb.skipWhitespace();
800 pb.data(token, anchor);
806 if(resipMedia.
exists(
"curr"))
808 const std::list<Data>& preconds = resipMedia.
getValues(
"curr");
809 std::list<Data>::const_iterator it2;
810 for(it2 = preconds.begin(); it2 != preconds.end(); it2++)
817 const char * anchor = pb.position();
819 pb.
data(token, anchor);
823 anchor = pb.skipWhitespace();
825 pb.data(token, anchor);
829 anchor = pb.skipWhitespace();
831 pb.data(token, anchor);
839 if(resipMedia.
exists(
"conf"))
841 const std::list<Data>& preconds = resipMedia.
getValues(
"conf");
842 std::list<Data>::const_iterator it2;
843 for(it2 = preconds.begin(); it2 != preconds.end(); it2++)
850 const char * anchor = pb.position();
852 pb.
data(token, anchor);
856 anchor = pb.skipWhitespace();
858 pb.data(token, anchor);
862 anchor = pb.skipWhitespace();
864 pb.data(token, anchor);
872 if(resipMedia.
exists(
"des"))
874 const std::list<Data>& preconds = resipMedia.
getValues(
"des");
875 std::list<Data>::const_iterator it2;
876 for(it2 = preconds.begin(); it2 != preconds.end(); it2++)
884 const char * anchor = pb.position();
886 pb.
data(token, anchor);
890 anchor = pb.skipWhitespace();
892 pb.data(token, anchor);
894 anchor = pb.skipWhitespace();
896 pb.data(token, anchor);
900 anchor = pb.skipWhitespace();
902 pb.data(token, anchor);
911#ifndef RESIP_FIXED_POINT
912 if(resipMedia.
exists(
"maxprate"))
920 if(resipMedia.
exists(
"label"))
925 if(resipMedia.
exists(
"mid"))
930 if(resipMedia.
exists(
"ice-ufrag"))
935 if(resipMedia.
exists(
"ice-pwd"))
940 if(resipMedia.
exists(
"remote-candidates"))
943 const std::list<Data>& preconds = resipMedia.
getValues(
"remote-candidates");
944 std::list<Data>::const_iterator it2;
945 for(it2 = preconds.begin(); it2 != preconds.end(); it2++)
949 unsigned int componentId;
955 componentId = pb.uInt32();
957 anchor = pb.skipWhitespace();
959 pb.
data(token, anchor);
969 if(resipMedia.
exists(
"candidate"))
971 const std::list<Data>& preconds = resipMedia.
getValues(
"candidate");
972 std::list<Data>::const_iterator it2;
973 for(it2 = preconds.begin(); it2 != preconds.end(); it2++)
977 unsigned int componentId;
985 unsigned int relatedPort = 0;
987 const char * anchor = pb.position();
989 pb.
data(foundation, anchor);
991 componentId = pb.uInt32();
993 anchor = pb.skipWhitespace();
995 pb.data(token, anchor);
1000 priority = pb.uInt64();
1002 anchor = pb.skipWhitespace();
1004 pb.data(address, anchor);
1005 pb.skipWhitespace();
1008 anchor = pb.skipWhitespace();
1012 pb.data(token, anchor);
1015 anchor = pb.skipWhitespace();
1017 pb.data(token, anchor);
1019 anchor = pb.skipWhitespace();
1023 pb.data(token, anchor);
1027 if(!pb.eof() && token ==
"raddr")
1029 anchor = pb.skipWhitespace();
1031 pb.data(relatedAddress, anchor);
1032 anchor = pb.skipWhitespace();
1036 pb.data(token, anchor);
1040 if(!pb.eof() && token ==
"rport")
1042 pb.skipWhitespace();
1043 relatedPort = pb.uInt32();
1045 anchor = pb.skipWhitespace();
1049 pb.data(token, anchor);
1056 Data extAttribValue;
1057 anchor = pb.skipWhitespace();
1059 pb.
data(extAttribValue, anchor);
1060 anchor = pb.skipWhitespace();
1065 pb.data(token, anchor);
1085 unsigned int tag = pb.
uInt32();
1092 pb.
data(token, anchor);
1106 unsigned int lifetime = 0;
1107 unsigned int mkiValue = 0;
1108 unsigned int mkiLength = 0;
1110 parseCryptoParams(pb, method, keyValue, lifetime, mkiValue, mkiLength);
1120 pb.
data(token, anchor);
1126 else if(token ==
"UNENCRYPTED_SRTP")
1130 else if(token ==
"UNENCRYPTED_SRTCP")
1134 else if(token ==
"UNAUTHENTICATED_SRTP")
1138 else if(token ==
"FEC_ORDER")
1142 pb.
data(token, anchor);
1145 else if(token ==
"FEC_KEY")
1150 unsigned int lifetime = 0;
1151 unsigned int mkiValue = 0;
1152 unsigned int mkiLength = 0;
1154 parseCryptoParams(pb, method, keyValue, lifetime, mkiValue, mkiLength);
1157 else if(token ==
"WSH")
1167 pb.
data(token, anchor);
1180 const char* anchor = pb.
position();
1182 pb.
data(fingerPrint, anchor);
1188 pb.
data(fingerPrint, anchor);
1197 unsigned int baseTcapId = pb.
uInt32();
1206 pb.
data(token, anchor);
1216 std::list<std::list<SdpMediaLine::SdpPotentialConfiguration::ConfigIdItem> > attributeLists;
1217 std::list<unsigned int> transportList;
1218 bool deleteMediaAttributes =
false;
1219 bool deleteSessionAttributes =
false;
1222 unsigned int pcfgId = pb.
uInt32();
1225 bool attributesFirst =
false;
1231 bool optionalOn =
false;
1235 pb.
data(token, anchor);
1238 std::list<SdpMediaLine::SdpPotentialConfiguration::ConfigIdItem> attributeList;
1239 if(transportList.empty())
1241 attributesFirst =
true;
1250 pb.
data(token, anchor);
1253 deleteMediaAttributes =
true;
1255 else if(token ==
"s")
1257 deleteSessionAttributes =
true;
1259 else if(token ==
"ms")
1261 deleteMediaAttributes =
true;
1262 deleteSessionAttributes =
true;
1272 pb.
data(token, anchor);
1278 pb.
data(token, anchor);
1280 attributeLists.push_back(attributeList);
1281 attributeList.clear();
1291 pb.
data(token, anchor);
1298 attributeLists.push_back(attributeList);
1303 else if(token ==
"t")
1309 pb.
data(token, anchor);
1327 std::list<std::list<SdpMediaLine::SdpPotentialConfiguration::ConfigIdItem> >::iterator listsIt = attributeLists.begin();
1328 for(;listsIt != attributeLists.end(); listsIt++)
1330 if(transportList.empty())
1333 std::list<SdpMediaLine::SdpPotentialConfiguration::ConfigIdItem>::iterator attributesIt = listsIt->begin();
1334 for(;attributesIt != listsIt->end(); attributesIt++)
1338 pcfgList.push_back(potentialConfiguration);
1342 std::list<unsigned int>::iterator transportsIt = transportList.begin();
1343 for(;transportsIt != transportList.end(); transportsIt++)
1346 std::list<SdpMediaLine::SdpPotentialConfiguration::ConfigIdItem>::iterator attributesIt = listsIt->begin();
1347 for(;attributesIt != listsIt->end(); attributesIt++)
1351 pcfgList.push_back(potentialConfiguration);
1358 std::list<unsigned int>::iterator transportsIt = transportList.begin();
1359 for(;transportsIt != transportList.end(); transportsIt++)
1361 if(attributeLists.empty())
1368 std::list<std::list<SdpMediaLine::SdpPotentialConfiguration::ConfigIdItem> >::iterator listsIt = attributeLists.begin();
1369 for(;listsIt != attributeLists.end(); listsIt++)
1372 std::list<SdpMediaLine::SdpPotentialConfiguration::ConfigIdItem>::iterator attributesIt = listsIt->begin();
1373 for(;attributesIt != listsIt->end(); attributesIt++)
1377 pcfgList.push_back(potentialConfiguration);
1388 std::list<SdpMediaLine::SdpTransportProtocolCapabilities> tcapList;
1389 std::list<SdpMediaLine::SdpPotentialConfiguration> pcfgList;
1390 Data tcap(
"1 UDP/TLS/RTP/AVP RTP/AVP");
1391 Data pcfg(
"1 a=-m:1,2,3,[4,5]|[6,7] x=blah t=1|2 y=foo");
1395 cout <<
"Transport List: " << tcap << endl;
1396 std::list<SdpMediaLine::SdpTransportProtocolCapabilities>::iterator it = tcapList.
begin();
1397 for(;it != tcapList.end(); it++)
1399 cout <<
" Tranpsort Id=" << it->getId() <<
" protocolType=" << it->getType() << endl;
1402 cout <<
"Potential Configuration List: " << pcfg << endl;
1403 std::list<SdpMediaLine::SdpPotentialConfiguration>::iterator it2 = pcfgList.
begin();
1404 for(;it2 != pcfgList.end(); it2++)
1406 cout <<
" Config Id=" << it2->getId() <<
" deleteMediaAttr=" << it2->getDeleteMediaAttributes() <<
" deleteSessionAttr=" << it2->getDeleteSessionAttributes() <<
" transportId=" << it2->getTransportId() << endl;
1407 SdpMediaLine::SdpPotentialConfiguration::ConfigIdList::const_iterator it3 = it2->getAttributeIds().begin();
1408 for(;it3 != it2->getAttributeIds().end(); it3++)
1410 cout <<
" AttributeId=" << it3->getId() <<
" optional=" << it3->getOptional() << endl;
1420 unsigned int& srtpLifetime,
1421 unsigned int& srtpMkiValue,
1422 unsigned int& srtpMkiLength)
1424 const char * anchor = pb.
position();
1427 pb.
data(token, anchor);
1433 pb.
data(keyValue, anchor);
1437 unsigned int base = pb.
uInt32();
1442 unsigned int exponent = pb.
uInt32();
1443 srtpLifetime = base;
1444 while(0 != --exponent) srtpLifetime *= base;
1455 srtpLifetime = base;
1468 srtpMkiValue = base;
1470 srtpMkiLength = pb.
uInt32();
1479 pb.
data(keyValue, anchor);
#define resip_assert(x)
This file needs to work for both C and C++ code.
static int fingerPrintHashFuncPreference(SdpMediaLine::SdpFingerPrintHashFuncType hashType)
static bool getMediumDirection(const SdpContents::Session::Medium &resipMedia, const SdpContents::Session &resipSession, SdpMediaLine::SdpDirectionType &direction)
static bool getSessionDirection(const SdpContents::Session &resipSession, SdpMediaLine::SdpDirectionType &direction)
void testSDPCapabilityNegotiationParsing(void)
static sdpcontainer::SdpMediaLine::SdpEncryptionMethod convertResipEncryptionMethod(resip::SdpContents::Session::Encryption::KeyType resipMethod)
static bool parsePotentialConfigurationLine(const resip::Data &pcfgLine, std::list< sdpcontainer::SdpMediaLine::SdpPotentialConfiguration > &pcfgList)
static sdpcontainer::Sdp::SdpAddressType convertResipAddressType(resip::SdpContents::AddrType resipAddrType)
static bool parseTransportCapabilitiesLine(const resip::Data &tcapLine, std::list< sdpcontainer::SdpMediaLine::SdpTransportProtocolCapabilities > &tcapList)
static bool parseFingerPrintLine(const resip::Data &fingerprintLine, sdpcontainer::SdpMediaLine::SdpFingerPrintHashFuncType &hashType, resip::Data &fingerPrint)
static sdpcontainer::Sdp * createSdpFromResipSdp(const resip::SdpContents &resipSdp)
static sdpcontainer::SdpMediaLine::SdpCrypto * parseCryptoLine(const resip::Data &cryptoLine)
An alternative to std::string, encapsulates an arbitrary buffer of bytes.
const char * c_str() const
Returns a null-terminated string representing.
unsigned long convertUnsignedLong() const
bool empty() const noexcept
Checks whether the Data is empty.
static Data from(const T &x)
Converts from arbitrary other type to Data.
const char * begin() const noexcept
Returns a pointer to the beginning of the buffer used by the Data.
const char * data() const noexcept
Returns a pointer to the contents of this Data.
Provides string-parsing functionality with protection from buffer overflow.
uint32_t uInt32()
dcm! – merge these, ask about length checks
CurrentPosition skipToEnd()
CurrentPosition skipWhitespace()
CurrentPosition skipToChar(char c)
CurrentPosition position() const
CurrentPosition skipToOneOf(const char *cs)
CurrentPosition skipChar()
void data(Data &data, const char *start) const
make the passed in data share memory with the buffer (uses Data::Share)
parameters for a specific codec are stored in this class.
const Data & encodingParameters() const
returns the encoding parameters associated with this codec
const Data & getName() const
returns the name of the codec.
int payloadType() const
returns the RTP payload type associated with this codec.
int getRate() const
returns the name of the codec.
Process c= (connection) lines in SDP.
unsigned long ttl() const
const Data & getAddress() const
returns the connection address
AddrType getAddressType() const
returns the connection address type
const KeyType & getMethod() const
const Data & getKey() const
process m= (media announcement) blocks
const std::list< Connection > getConnections() const
get a list of Connection objects, including the Session's c= line.
void addAttribute(const Data &key, const Data &value=Data::Empty)
add a media attribute line
const std::list< Data > & getValues(const Data &key) const
get the attribute values corresponding to the key - returns the attributes set on this medium,...
bool exists(const Data &key) const
tests if an a= key is present in the media section
int port() const
return the base port
std::list< Data > getMergedValues(const Data &key) const
get the attribute values corresponding to the key - returns both the attributes set on this medium,...
const CodecContainer & codecs() const
preferred codec/format interface
const Encryption & getEncryption() const
const std::list< Bandwidth > & bandwidths() const
get a list of bandwidth lines
int multicast() const
get the number of transport port pairs
const Data & information() const
get optional i= (information) line contents
const Data & protocol() const
return the transport protocol
const Data & name() const
return the media type
const uint64_t & getVersion() const
returns the session version
const Data & getAddress() const
returns the session address type
const uint64_t & getSessionId() const
returns the session ID
const Data & user() const
returns the user string for the session
AddrType getAddressType() const
returns the session address type
const std::list< Adjustment > & getAdjustments() const
Provides an interface to read and modify SDP bodies.
const std::list< Bandwidth > & bandwidths() const
return session Bandwidth lines
const std::list< Time > & getTimes() const
return session Time lines
const Timezones & getTimezones() const
const std::list< Phone > & getPhones() const
return session Phone number list
const Data & information() const
return session Information
const std::list< Email > & getEmails() const
return session Email list
int version() const
return session version
const Encryption & getEncryption() const
const Origin & origin() const
return session Origin line
const std::list< Data > & getValues(const Data &key) const
get the attribute values corresponding to the key
const Data & name() const
return session name
bool exists(const Data &key) const
tests if an a= key is present in the session
const MediumContainer & media() const
return session Media lines
const Uri & uri() const
return session Uri
Provides an interface to process and generate SDP bodies (MIME content-type application/sdp).
Session & session()
get the parsed SDP
static const char * SPACE
static const char * COLON
static const char * SLASH
static const char * EQUALS
SdpCandidateTransportType
@ CANDIDATE_TRANSPORT_TYPE_NONE
void addExtensionAttribute(const char *name, const char *value)
static SdpCandidateType getCandidateTypeFromString(const char *type)
static SdpCandidateTransportType getCandidateTransportTypeFromString(const char *type)
static SdpBandwidthType getTypeFromString(const char *type)
void addIdentificationTag(const char *identificationTag)
static SdpGroupSemantics getSemanticsFromString(const char *type)
void addOffsetFromStartTime(unsigned int offset)
void addRepeat(const SdpTimeRepeat &sdpTimeRepeat)
void setSessionLanguage(const char *sessionLanguage)
void addEmailAddress(const char *emailAddress)
void setConferenceType(SdpConferenceType conferenceType)
void setMaximumPacketRate(double maximumPacketRate)
static SdpConferenceType getConferenceTypeFromString(const char *type)
void setSessionUri(const char *sessionUri)
void setSessionName(const char *sessionName)
void addTimeZone(int adjustmentTime, int offset)
void setIcePassiveOnlyMode(bool icePassiveOnlyMode)
void setToolNameAndVersion(const char *toolNameAndVersion)
void setCharSet(const char *charSet)
static SdpAddressType getAddressTypeFromString(const char *type)
void addMediaLine(SdpMediaLine *mediaLine)
void addGroup(const SdpGroup &group)
void addPhoneNumber(const char *phoneNumber)
void addBandwidth(SdpBandwidthType type, unsigned int bandwidth)
void setSdpVersion(unsigned int sdpVersion)
void setKeywords(const char *keywords)
void setSessionInformation(const char *sessionInformation)
void addTime(uint64_t startTime, uint64_t stopTime)
void setOriginatorInfo(const char *userName, uint64_t sessionId, uint64_t sessionVersion, SdpNetType netType, SdpAddressType addressType, const char *unicastAddress)
void setDescriptionLanguage(const char *descriptionLanguage)
void setCategory(const char *category)
dcm! – add UnusedChecking(_enum) below;
unsigned __int64 uint64_t