aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2019-01-05 13:18:45 +0100
committerJeremy Lainé <jeremy.laine@m4x.org>2019-05-01 10:24:51 +0200
commitc0412e29545c109e3473b38dbeba4e17514a7b05 (patch)
tree9c6d10d44198a6e06312899fffe42d3f7a183251 /src/base
parentf8fc440ef424dec4e465eb6a57eadb734f43da59 (diff)
downloadqxmpp-c0412e29545c109e3473b38dbeba4e17514a7b05.tar.gz
Implement MIX-PAM XEP-0405: Presence extension
This implements the new presence extension defined by XEP-0405: Mediated Information eXchange (MIX): Participant Server Requirements in version 0.4.0. https://xmpp.org/extensions/xep-0405.html#usecase-user-presence-receive
Diffstat (limited to 'src/base')
-rw-r--r--src/base/QXmppConstants.cpp1
-rw-r--r--src/base/QXmppConstants_p.h1
-rw-r--r--src/base/QXmppPresence.cpp50
-rw-r--r--src/base/QXmppPresence.h7
4 files changed, 58 insertions, 1 deletions
diff --git a/src/base/QXmppConstants.cpp b/src/base/QXmppConstants.cpp
index 5cbc5024..b5c2215b 100644
--- a/src/base/QXmppConstants.cpp
+++ b/src/base/QXmppConstants.cpp
@@ -144,3 +144,4 @@ const char* ns_mix_node_info = "urn:xmpp:mix:nodes:info";
// XEP-0405: Mediated Information eXchange (MIX): Participant Server Requirements
const char* ns_mix_pam = "urn:xmpp:mix:pam:0";
const char* ns_mix_roster = "urn:xmpp:mix:roster:0";
+const char* ns_mix_presence = "urn:xmpp:presence:0";
diff --git a/src/base/QXmppConstants_p.h b/src/base/QXmppConstants_p.h
index 5821a05a..e425485c 100644
--- a/src/base/QXmppConstants_p.h
+++ b/src/base/QXmppConstants_p.h
@@ -156,5 +156,6 @@ extern const char* ns_mix_node_info;
// XEP-0405: Mediated Information eXchange (MIX): Participant Server Requirements
extern const char* ns_mix_pam;
extern const char* ns_mix_roster;
+extern const char* ns_mix_presence;
#endif // QXMPPCONSTANTS_H
diff --git a/src/base/QXmppPresence.cpp b/src/base/QXmppPresence.cpp
index f8a27f43..ad0b1c60 100644
--- a/src/base/QXmppPresence.cpp
+++ b/src/base/QXmppPresence.cpp
@@ -80,6 +80,10 @@ public:
// XEP-0319: Last User Interaction in Presence
QDateTime lastUserInteraction;
+
+ // XEP-0405: Mediated Information eXchange (MIX): Participant Server Requirements
+ QString mixUserJid;
+ QString mixUserNick;
};
/// Constructs a QXmppPresence.
@@ -265,6 +269,11 @@ void QXmppPresence::parse(const QDomElement &element)
d->lastUserInteraction = QXmppUtils::datetimeFromString(since);
}
}
+ // XEP-0405: Mediated Information eXchange (MIX): Participant Server Requirements
+ else if (xElement.tagName() == "mix" && xElement.namespaceURI() == ns_mix_presence) {
+ d->mixUserJid = xElement.firstChildElement("jid").text();
+ d->mixUserNick = xElement.firstChildElement("nick").text();
+ }
else if (xElement.tagName() != "addresses" && xElement.tagName() != "error"
&& xElement.tagName() != "show" && xElement.tagName() != "status"
&& xElement.tagName() != "priority")
@@ -361,6 +370,17 @@ void QXmppPresence::toXml(QXmlStreamWriter *xmlWriter) const
xmlWriter->writeEndElement();
}
+ // XEP-0405: Mediated Information eXchange (MIX): Participant Server Requirements
+ if (!d->mixUserJid.isEmpty() || !d->mixUserNick.isEmpty()) {
+ xmlWriter->writeStartElement("mix");
+ xmlWriter->writeAttribute("xmlns", ns_mix_presence);
+ if (!d->mixUserJid.isEmpty())
+ xmlWriter->writeTextElement("jid", d->mixUserJid);
+ if (!d->mixUserNick.isEmpty())
+ xmlWriter->writeTextElement("nick", d->mixUserNick);
+ xmlWriter->writeEndElement();
+ }
+
// other extensions
QXmppStanza::extensionsToXml(xmlWriter);
@@ -522,7 +542,35 @@ void QXmppPresence::setLastUserInteraction(const QDateTime& lastUserInteraction)
d->lastUserInteraction = lastUserInteraction;
}
-/// Indicates if the QXmppStanza is a stanza in the XMPP sense (i. e. a message,
+/// Returns the actual (full) JID of the MIX channel participant.
+
+QString QXmppPresence::mixUserJid() const
+{
+ return d->mixUserJid;
+}
+
+/// Sets the actual (full) JID of the MIX channel participant.
+
+void QXmppPresence::setMixUserJid(const QString& mixUserJid)
+{
+ d->mixUserJid = mixUserJid;
+}
+
+/// Returns the MIX participant's nickname.
+
+QString QXmppPresence::mixUserNick() const
+{
+ return d->mixUserNick;
+}
+
+/// Sets the MIX participant's nickname.
+
+void QXmppPresence::setMixUserNick(const QString& mixUserNick)
+{
+ d->mixUserNick = mixUserNick;
+}
+
+/// Indicates if the QXmppStanza is a stanza in the XMPP sence (i. e. a message,
/// iq or presence)
bool QXmppPresence::isXmppStanza() const
diff --git a/src/base/QXmppPresence.h b/src/base/QXmppPresence.h
index bda272af..25b6ea7f 100644
--- a/src/base/QXmppPresence.h
+++ b/src/base/QXmppPresence.h
@@ -132,6 +132,13 @@ public:
QDateTime lastUserInteraction() const;
void setLastUserInteraction(const QDateTime&);
+ // XEP-0405: Mediated Information eXchange (MIX): Participant Server Requirements
+ QString mixUserJid() const;
+ void setMixUserJid(const QString&);
+
+ QString mixUserNick() const;
+ void setMixUserNick(const QString&);
+
bool isXmppStanza() const;
private: