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 | |
| parent | c692a258faf3d93e2bec153f5bff704749a84d84 (diff) | |
| download | qxmpp-5be0f372b58f87b70683cb71267f4f6aa698163b.tar.gz | |
support XEP-0237 Roster Versioning
| -rw-r--r-- | doc/xep.doc | 1 | ||||
| -rw-r--r-- | src/base/QXmppRosterIq.cpp | 30 | ||||
| -rw-r--r-- | src/base/QXmppRosterIq.h | 7 | ||||
| -rw-r--r-- | tests/qxmpprosteriq/tst_qxmpprosteriq.cpp | 27 |
4 files changed, 61 insertions, 4 deletions
diff --git a/doc/xep.doc b/doc/xep.doc index 9c356c32..9f12fa60 100644 --- a/doc/xep.doc +++ b/doc/xep.doc @@ -33,6 +33,7 @@ Complete: - XEP-0203: Delayed Delivery - XEP-0221: Data Forms Media Element - XEP-0224: Attention +- XEP-0237: Roster Versioning Ongoing: - XEP-0009: Jabber-RPC 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 diff --git a/tests/qxmpprosteriq/tst_qxmpprosteriq.cpp b/tests/qxmpprosteriq/tst_qxmpprosteriq.cpp index 9f9477cb..7ea08f9b 100644 --- a/tests/qxmpprosteriq/tst_qxmpprosteriq.cpp +++ b/tests/qxmpprosteriq/tst_qxmpprosteriq.cpp @@ -32,6 +32,8 @@ class tst_QXmppRosterIq : public QObject private slots: void testItem_data(); void testItem(); + void testVersion_data(); + void testVersion(); }; void tst_QXmppRosterIq::testItem_data() @@ -87,5 +89,30 @@ void tst_QXmppRosterIq::testItem() serializePacket(item, xml); } +void tst_QXmppRosterIq::testVersion_data() +{ + QTest::addColumn<QByteArray>("xml"); + QTest::addColumn<QString>("version"); + + QTest::newRow("noversion") + << QByteArray("<iq id=\"woodyisacat\" to=\"woody@zam.tw/cat\" type=\"result\"><query xmlns=\"jabber:iq:roster\"/></iq>") + << ""; + + QTest::newRow("version") + << QByteArray("<iq id=\"woodyisacat\" to=\"woody@zam.tw/cat\" type=\"result\"><query xmlns=\"jabber:iq:roster\" ver=\"3345678\"/></iq>") + << "3345678"; +} + +void tst_QXmppRosterIq::testVersion() +{ + QFETCH(QByteArray, xml); + QFETCH(QString, version); + + QXmppRosterIq iq; + parsePacket(iq, xml); + QCOMPARE(iq.version(), version); + serializePacket(iq, xml); +} + QTEST_MAIN(tst_QXmppRosterIq) #include "tst_qxmpprosteriq.moc" |
