diff options
| author | Zam <love8879201@gmail.com> | 2018-08-14 14:10:56 +0800 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2018-08-17 07:26:13 +0200 |
| commit | 5be0f372b58f87b70683cb71267f4f6aa698163b (patch) | |
| tree | 0fde121e2760ccac787bfdb0e3fcfbdf7fa2268c /src/base | |
| parent | c692a258faf3d93e2bec153f5bff704749a84d84 (diff) | |
| download | qxmpp-5be0f372b58f87b70683cb71267f4f6aa698163b.tar.gz | |
support XEP-0237 Roster Versioning
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppRosterIq.cpp | 30 | ||||
| -rw-r--r-- | src/base/QXmppRosterIq.h | 7 |
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 |
