aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorMelvin Keskin <melvo@olomono.de>2022-09-21 14:14:43 +0200
committerLinus Jahn <lnj@kaidan.im>2022-09-25 14:14:26 +0200
commitf762f730b5adf769a55434e7786b56f3d092b662 (patch)
treecde1b296b312140d23ca4e96bc6a7f4a95006ffa /src/base
parent3bd90b240c2692f6654fb0967556caeacf478f5a (diff)
downloadqxmpp-f762f730b5adf769a55434e7786b56f3d092b662.tar.gz
Implement XEP-0167: Jingle RTP Sessions multiplexing
Diffstat (limited to 'src/base')
-rw-r--r--src/base/QXmppJingleIq.cpp33
-rw-r--r--src/base/QXmppJingleIq.h3
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);