diff options
| author | Linus Jahn <lnj@kaidan.im> | 2020-02-11 10:56:00 +0100 |
|---|---|---|
| committer | LNJ <lnj@kaidan.im> | 2020-02-11 16:20:08 +0100 |
| commit | 776f028d9f3f51e9dbba834a01d1decd737c4a27 (patch) | |
| tree | 6ea444c840812d001ea2f259ae50c0aa38c50fdd /src/base | |
| parent | f583f1a71459f413f9f869b8f1616722054dbea8 (diff) | |
Implement XEP-0359: Unique and Stable Stanza IDs
This adds support of XEP-0359: Unique and Stable Stanza IDs in version
0.6.0.
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppConstants.cpp | 2 | ||||
| -rw-r--r-- | src/base/QXmppConstants_p.h | 2 | ||||
| -rw-r--r-- | src/base/QXmppMessage.cpp | 96 | ||||
| -rw-r--r-- | src/base/QXmppMessage.h | 10 |
4 files changed, 109 insertions, 1 deletions
diff --git a/src/base/QXmppConstants.cpp b/src/base/QXmppConstants.cpp index 794ce14c..b88bccf6 100644 --- a/src/base/QXmppConstants.cpp +++ b/src/base/QXmppConstants.cpp @@ -139,6 +139,8 @@ const char* ns_chat_markers = "urn:xmpp:chat-markers:0"; const char* ns_message_processing_hints = "urn:xmpp:hints"; // XEP-0352: Client State Indication const char* ns_csi = "urn:xmpp:csi:0"; +// XEP-0359: Unique and Stable Stanza IDs +const char* ns_sid = "urn:xmpp:sid:0"; // XEP-0363: HTTP File Upload const char* ns_http_upload = "urn:xmpp:http:upload:0"; // XEP-0364: Current Off-the-Record Messaging Usage diff --git a/src/base/QXmppConstants_p.h b/src/base/QXmppConstants_p.h index c7811811..23b0fcdd 100644 --- a/src/base/QXmppConstants_p.h +++ b/src/base/QXmppConstants_p.h @@ -151,6 +151,8 @@ extern const char* ns_chat_markers; extern const char* ns_message_processing_hints; // XEP-0352: Client State Indication extern const char* ns_csi; +// XEP-0359: Unique and Stable Stanza IDs +extern const char* ns_sid; // XEP-0363: HTTP File Upload extern const char* ns_http_upload; // XEP-0364: Current Off-the-Record Messaging Usage diff --git a/src/base/QXmppMessage.cpp b/src/base/QXmppMessage.cpp index e877e5c1..9084d957 100644 --- a/src/base/QXmppMessage.cpp +++ b/src/base/QXmppMessage.cpp @@ -141,6 +141,11 @@ public: // XEP-0334: Message Processing Hints quint8 hints; + // XEP-0359: Unique and Stable Stanza IDs + QString stanzaId; + QString stanzaIdBy; + QString originId; + // XEP-0367: Message Attaching QString attachId; @@ -607,6 +612,72 @@ void QXmppMessage::removeAllHints() d->hints = 0; } +/// +/// Returns the stanza ID of the message according to \xep{0359}: Unique and +/// Stable Stanza IDs. +/// +/// \since QXmpp 1.3 +/// +QString QXmppMessage::stanzaId() const +{ + return d->stanzaId; +} + +/// +/// Sets the stanza ID of the message according to \xep{0359}: Unique and +/// Stable Stanza IDs. +/// +/// \since QXmpp 1.3 +/// +void QXmppMessage::setStanzaId(const QString& id) +{ + d->stanzaId = id; +} + +/// +/// Returns the creator of the stanza ID according to \xep{0359}: Unique and +/// Stable Stanza IDs. +/// +/// \since QXmpp 1.3 +/// +QString QXmppMessage::stanzaIdBy() const +{ + return d->stanzaIdBy; +} + +/// +/// Sets the creator of the stanza ID according to \xep{0359}: Unique and +/// Stable Stanza IDs. +/// +/// \since QXmpp 1.3 +/// +void QXmppMessage::setStanzaIdBy(const QString &by) +{ + d->stanzaIdBy = by; +} + +/// +/// Returns the origin ID of the message according to \xep{0359}: Unique and +/// Stable Stanza IDs. +/// +/// \since QXmpp 1.3 +/// +QString QXmppMessage::originId() const +{ + return d->originId; +} + +/// +/// Sets the origin ID of the message according to \xep{0359}: Unique and +/// Stable Stanza IDs. +/// +/// \since QXmpp 1.3 +/// +void QXmppMessage::setOriginId(const QString &id) +{ + d->originId = id; +} + /// Returns the message id this message is linked/attached to. See XEP-0367: /// Message Attaching for details. /// @@ -997,6 +1068,23 @@ void QXmppMessage::toXml(QXmlStreamWriter *xmlWriter) const } } + // XEP-0359: Unique and Stable Stanza IDs + if (!d->stanzaId.isNull()) { + xmlWriter->writeStartElement(QStringLiteral("stanza-id")); + xmlWriter->writeDefaultNamespace(ns_sid); + xmlWriter->writeAttribute(QStringLiteral("id"), d->stanzaId); + if (!d->stanzaIdBy.isNull()) + xmlWriter->writeAttribute(QStringLiteral("by"), d->stanzaIdBy); + xmlWriter->writeEndElement(); + } + + if (!d->originId.isNull()) { + xmlWriter->writeStartElement(QStringLiteral("origin-id")); + xmlWriter->writeDefaultNamespace(ns_sid); + xmlWriter->writeAttribute(QStringLiteral("id"), d->originId); + xmlWriter->writeEndElement(); + } + // XEP-0367: Message Attaching if (!d->attachId.isEmpty()) { xmlWriter->writeStartElement(QStringLiteral("attach-to")); @@ -1117,8 +1205,14 @@ void QXmppMessage::parseExtension(const QDomElement &element, QXmppElementList & } else if (element.namespaceURI() == ns_message_processing_hints && HINT_TYPES.contains(element.tagName())) { addHint(Hint(1 << HINT_TYPES.indexOf(element.tagName()))); - // XEP-0367: Message Attaching + } else if (checkElement(element, QStringLiteral("stanza-id"), ns_sid)) { + // XEP-0359: Unique and Stable Stanza IDs + d->stanzaId = element.attribute(QStringLiteral("id")); + d->stanzaIdBy = element.attribute(QStringLiteral("by")); + } else if (checkElement(element, QStringLiteral("origin-id"), ns_sid)) { + d->originId = element.attribute(QStringLiteral("id")); } else if (checkElement(element, QStringLiteral("attach-to"), ns_message_attaching)) { + // XEP-0367: Message Attaching d->attachId = element.attribute(QStringLiteral("id")); // XEP-0369: Mediated Information eXchange (MIX) } else if (checkElement(element, QStringLiteral("mix"), ns_mix)) { diff --git a/src/base/QXmppMessage.h b/src/base/QXmppMessage.h index cd24c25a..7b43a651 100644 --- a/src/base/QXmppMessage.h +++ b/src/base/QXmppMessage.h @@ -178,6 +178,16 @@ public: void removeHint(const Hint hint); void removeAllHints(); + // XEP-0359: Unique and Stable Stanza IDs + QString stanzaId() const; + void setStanzaId(const QString &id); + + QString stanzaIdBy() const; + void setStanzaIdBy(const QString &id); + + QString originId() const; + void setOriginId(const QString &id); + // XEP-0367: Message Attaching QString attachId() const; void setAttachId(const QString &); |
