aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorZam <love8879201@gmail.com>2018-08-14 14:10:56 +0800
committerJeremy Lainé <jeremy.laine@m4x.org>2018-08-17 07:26:13 +0200
commit5be0f372b58f87b70683cb71267f4f6aa698163b (patch)
tree0fde121e2760ccac787bfdb0e3fcfbdf7fa2268c /src/base
parentc692a258faf3d93e2bec153f5bff704749a84d84 (diff)
downloadqxmpp-5be0f372b58f87b70683cb71267f4f6aa698163b.tar.gz
support XEP-0237 Roster Versioning
Diffstat (limited to 'src/base')
-rw-r--r--src/base/QXmppRosterIq.cpp30
-rw-r--r--src/base/QXmppRosterIq.h7
2 files changed, 33 insertions, 4 deletions
diff --git a/src/base/QXmppRosterIq.cpp b/src/base/QXmppRosterIq.cpp
index b41dc799..3f92834b 100644
--- a/src/base/QXmppRosterIq.cpp
+++ b/src/base/QXmppRosterIq.cpp
@@ -45,6 +45,26 @@ QList<QXmppRosterIq::Item> QXmppRosterIq::items() const
return m_items;
}
+/// Returns the roster version of IQ.
+///
+/// \return version as a QString
+///
+
+QString QXmppRosterIq::version() const
+{
+ return m_version;
+}
+
+/// Sets the roster version of IQ.
+///
+/// \param version as a QString
+///
+
+void QXmppRosterIq::setVersion(const QString &version)
+{
+ m_version = version;
+}
+
/// \cond
bool QXmppRosterIq::isRosterIq(const QDomElement &element)
{
@@ -53,9 +73,10 @@ bool QXmppRosterIq::isRosterIq(const QDomElement &element)
void QXmppRosterIq::parseElementFromChild(const QDomElement &element)
{
- QDomElement itemElement = element.
- firstChildElement("query").
- firstChildElement("item");
+ QDomElement queryElement = element.firstChildElement("query");
+ QDomElement itemElement = queryElement.firstChildElement("item");
+
+ setVersion(queryElement.attribute("ver"));
while(!itemElement.isNull())
{
QXmppRosterIq::Item item;
@@ -70,6 +91,9 @@ void QXmppRosterIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
writer->writeStartElement("query");
writer->writeAttribute( "xmlns", ns_roster);
+ // XEP-0237 roster versioning - If the server does not advertise support for roster versioning, the client MUST NOT include the 'ver' attribute.
+ if(!version().isEmpty())
+ writer->writeAttribute( "ver", version());
for(int i = 0; i < m_items.count(); ++i)
m_items.at(i).toXml(writer);
writer->writeEndElement();
diff --git a/src/base/QXmppRosterIq.h b/src/base/QXmppRosterIq.h
index 586d701d..ad27575c 100644
--- a/src/base/QXmppRosterIq.h
+++ b/src/base/QXmppRosterIq.h
@@ -83,11 +83,14 @@ public:
QString m_bareJid;
SubscriptionType m_type;
QString m_name;
- // can be subscribe/unsubscribe (attribute "ask")
+ // can be subscribe/unsubscribe (attribute "ask")
QString m_subscriptionStatus;
QSet<QString> m_groups;
};
+ QString version() const;
+ void setVersion(const QString&);
+
void addItem(const Item&);
QList<Item> items() const;
@@ -103,6 +106,8 @@ protected:
private:
QList<Item> m_items;
+ // XEP-0237 Roster Versioning
+ QString m_version;
};
#endif // QXMPPROSTERIQ_H