diff options
| author | Melvin Keskin <melvo@olomono.de> | 2022-09-21 14:14:43 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-09-25 14:14:26 +0200 |
| commit | f762f730b5adf769a55434e7786b56f3d092b662 (patch) | |
| tree | cde1b296b312140d23ca4e96bc6a7f4a95006ffa /src/base | |
| parent | 3bd90b240c2692f6654fb0967556caeacf478f5a (diff) | |
| download | qxmpp-f762f730b5adf769a55434e7786b56f3d092b662.tar.gz | |
Implement XEP-0167: Jingle RTP Sessions multiplexing
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppJingleIq.cpp | 33 | ||||
| -rw-r--r-- | src/base/QXmppJingleIq.h | 3 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/base/QXmppJingleIq.cpp b/src/base/QXmppJingleIq.cpp index 9d883860..9a365929 100644 --- a/src/base/QXmppJingleIq.cpp +++ b/src/base/QXmppJingleIq.cpp @@ -134,6 +134,8 @@ public: QString descriptionMedia; quint32 descriptionSsrc; QString descriptionType; + bool isRtpMultiplexingSupported = false; + QString transportType; QString transportUser; QString transportPassword; @@ -230,6 +232,33 @@ void QXmppJingleIq::Content::setDescriptionSsrc(quint32 ssrc) d->descriptionSsrc = ssrc; } +/// +/// Returns whether multiplexing of RTP data and control packets on a single port is supported as +/// specified by \xep{0167, Jingle RTP Sessions} and RFC 5761. +/// +/// \return whether multiplexing of RTP data and control packets is supported +/// +/// \since QXmpp 1.5 +/// +bool QXmppJingleIq::Content::isRtpMultiplexingSupported() const +{ + return d->isRtpMultiplexingSupported; +} + +/// +/// Sets whether multiplexing of RTP data and control packets on a single port is supported as +/// specified by \xep{0167, Jingle RTP Sessions} and RFC 5761. +/// +/// \param isRtpMultiplexingSupported whether multiplexing of RTP data and control packets is +/// supported +/// +/// \since QXmpp 1.5 +/// +void QXmppJingleIq::Content::setRtpMultiplexingSupported(bool isRtpMultiplexingSupported) +{ + d->isRtpMultiplexingSupported = isRtpMultiplexingSupported; +} + void QXmppJingleIq::Content::addPayloadType(const QXmppJinglePayloadType &payload) { d->descriptionType = ns_jingle_rtp; @@ -374,6 +403,7 @@ void QXmppJingleIq::Content::parse(const QDomElement &element) d->descriptionType = descriptionElement.namespaceURI(); d->descriptionMedia = descriptionElement.attribute(QStringLiteral("media")); d->descriptionSsrc = descriptionElement.attribute(QStringLiteral("ssrc")).toULong(); + d->isRtpMultiplexingSupported = !descriptionElement.firstChildElement(QStringLiteral("rtcp-mux")).isNull(); QDomElement child = descriptionElement.firstChildElement(QStringLiteral("payload-type")); while (!child.isNull()) { QXmppJinglePayloadType payload; @@ -424,6 +454,9 @@ void QXmppJingleIq::Content::toXml(QXmlStreamWriter *writer) const if (d->descriptionSsrc) { writer->writeAttribute(QStringLiteral("ssrc"), QString::number(d->descriptionSsrc)); } + if (d->isRtpMultiplexingSupported) { + writer->writeEmptyElement(QStringLiteral("rtcp-mux")); + } for (const auto &payload : d->payloadTypes) { payload.toXml(writer); } diff --git a/src/base/QXmppJingleIq.h b/src/base/QXmppJingleIq.h index be915787..cbb711d6 100644 --- a/src/base/QXmppJingleIq.h +++ b/src/base/QXmppJingleIq.h @@ -189,6 +189,9 @@ public: quint32 descriptionSsrc() const; void setDescriptionSsrc(quint32 ssrc); + bool isRtpMultiplexingSupported() const; + void setRtpMultiplexingSupported(bool isRtpMultiplexingSupported); + void addPayloadType(const QXmppJinglePayloadType &payload); QList<QXmppJinglePayloadType> payloadTypes() const; void setPayloadTypes(const QList<QXmppJinglePayloadType> &payloadTypes); |
