diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-03-17 10:29:39 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-03-17 10:29:39 +0000 |
| commit | ba0c25c412c88c829075e56b498edb898480b80e (patch) | |
| tree | 7a0c936831fd412a4969406aaf2f72801addb73a /source | |
| parent | d1d22f604378c37e7e5582d31b90f8c6d8a2c4ae (diff) | |
| download | qxmpp-ba0c25c412c88c829075e56b498edb898480b80e.tar.gz | |
parse contents of Discovery iqs instead of returning raw QXmppElement's
Diffstat (limited to 'source')
| -rw-r--r-- | source/QXmppDiscoveryIq.cpp | 133 | ||||
| -rw-r--r-- | source/QXmppDiscoveryIq.h | 50 | ||||
| -rw-r--r-- | source/QXmppInformationRequestResult.cpp | 26 |
3 files changed, 182 insertions, 27 deletions
diff --git a/source/QXmppDiscoveryIq.cpp b/source/QXmppDiscoveryIq.cpp index c3f3f9cc..8cbe5b6e 100644 --- a/source/QXmppDiscoveryIq.cpp +++ b/source/QXmppDiscoveryIq.cpp @@ -27,14 +27,94 @@ #include <QDomElement> -QXmppElementList QXmppDiscoveryIq::queryItems() const +QString QXmppDiscoveryIq::Identity::category() const { - return m_queryItems; + return m_category; } -void QXmppDiscoveryIq::setQueryItems(const QXmppElementList &items) +void QXmppDiscoveryIq::Identity::setCategory(const QString &category) { - m_queryItems = items; + m_category = category; +} + +QString QXmppDiscoveryIq::Identity::name() const +{ + return m_name; +} + +void QXmppDiscoveryIq::Identity::setName(const QString &name) +{ + m_name = name; +} + +QString QXmppDiscoveryIq::Identity::type() const +{ + return m_type; +} + +void QXmppDiscoveryIq::Identity::setType(const QString &type) +{ + m_type = type; +} + +QString QXmppDiscoveryIq::Item::jid() const +{ + return m_jid; +} + +void QXmppDiscoveryIq::Item::setJid(const QString &jid) +{ + m_jid = jid; +} + +QString QXmppDiscoveryIq::Item::name() const +{ + return m_name; +} + +void QXmppDiscoveryIq::Item::setName(const QString &name) +{ + m_name = name; +} + +QString QXmppDiscoveryIq::Item::node() const +{ + return m_node; +} + +void QXmppDiscoveryIq::Item::setNode(const QString &node) +{ + m_node = node; +} + +QStringList QXmppDiscoveryIq::features() const +{ + return m_features; +} + +void QXmppDiscoveryIq::setFeatures(const QStringList &features) +{ + m_features = features; +} + +QList<QXmppDiscoveryIq::Identity> QXmppDiscoveryIq::identities() const +{ + return m_identities; +} + +void QXmppDiscoveryIq::setIdentities(const QList<QXmppDiscoveryIq::Identity> &identities) +{ + m_identities = identities; +} + +QList<QXmppDiscoveryIq::Item> QXmppDiscoveryIq::items() const +{ + return m_items; +} + +void QXmppDiscoveryIq::setItems(const QList<QXmppDiscoveryIq::Item> &items) +{ + m_items = items; } QString QXmppDiscoveryIq::queryNode() const @@ -79,7 +159,22 @@ void QXmppDiscoveryIq::parse(const QDomElement &element) QDomElement itemElement = queryElement.firstChildElement(); while (!itemElement.isNull()) { - m_queryItems.append(QXmppElement(itemElement)); + if (itemElement.tagName() == "feature") + { + m_features.append(itemElement.attribute("var")); + } else if (itemElement.tagName() == "identity") { + QXmppDiscoveryIq::Identity identity; + identity.setCategory(itemElement.attribute("category")); + identity.setName(itemElement.attribute("name")); + identity.setType(itemElement.attribute("type")); + m_identities.append(identity); + } else if (itemElement.tagName() == "item") { + QXmppDiscoveryIq::Item item; + item.setJid(itemElement.attribute("jid")); + item.setName(itemElement.attribute("name")); + item.setNode(itemElement.attribute("node")); + m_items.append(item); + } itemElement = itemElement.nextSiblingElement(); } } @@ -90,8 +185,32 @@ void QXmppDiscoveryIq::toXmlElementFromChild(QXmlStreamWriter *writer) const helperToXmlAddAttribute(writer, "xmlns", m_queryType == InfoQuery ? ns_disco_info : ns_disco_items); helperToXmlAddAttribute(writer, "node", m_queryNode); - foreach (const QXmppElement &item, m_queryItems) - item.toXml(writer); + + foreach (const QString &feature, m_features) + { + writer->writeStartElement("feature"); + helperToXmlAddAttribute(writer, "var", feature); + writer->writeEndElement(); + } + + foreach (const QXmppDiscoveryIq::Identity& identity, m_identities) + { + writer->writeStartElement("identity"); + helperToXmlAddAttribute(writer, "category", identity.category()); + helperToXmlAddAttribute(writer, "name", identity.name()); + helperToXmlAddAttribute(writer, "type", identity.type()); + writer->writeEndElement(); + } + + foreach (const QXmppDiscoveryIq::Item& item, m_items) + { + writer->writeStartElement("item"); + helperToXmlAddAttribute(writer, "jid", item.jid()); + helperToXmlAddAttribute(writer, "name", item.name()); + helperToXmlAddAttribute(writer, "node", item.node()); + writer->writeEndElement(); + } + writer->writeEndElement(); } diff --git a/source/QXmppDiscoveryIq.h b/source/QXmppDiscoveryIq.h index cc4f556c..c5af21a9 100644 --- a/source/QXmppDiscoveryIq.h +++ b/source/QXmppDiscoveryIq.h @@ -32,13 +32,55 @@ class QDomElement; class QXmppDiscoveryIq : public QXmppIq { public: + class Identity + { + public: + QString category() const; + void setCategory(const QString &category); + + QString name() const; + void setName(const QString &name); + + QString type() const; + void setType(const QString &type); + + private: + QString m_category; + QString m_name; + QString m_type; + }; + + class Item + { + public: + QString jid() const; + void setJid(const QString &jid); + + QString name() const; + void setName(const QString &name); + + QString node() const; + void setNode(const QString &node); + + private: + QString m_jid; + QString m_name; + QString m_node; + }; + enum QueryType { InfoQuery, ItemsQuery, }; - QXmppElementList queryItems() const; - void setQueryItems(const QXmppElementList &items); + QStringList features() const; + void setFeatures(const QStringList &features); + + QList<QXmppDiscoveryIq::Identity> identities() const; + void setIdentities(const QList<QXmppDiscoveryIq::Identity> &identities); + + QList<QXmppDiscoveryIq::Item> items() const; + void setItems(const QList<QXmppDiscoveryIq::Item> &items); QString queryNode() const; void setQueryNode(const QString &node); @@ -51,7 +93,9 @@ public: void toXmlElementFromChild(QXmlStreamWriter *writer) const; private: - QXmppElementList m_queryItems; + QStringList m_features; + QList<QXmppDiscoveryIq::Identity> m_identities; + QList<QXmppDiscoveryIq::Item> m_items; QString m_queryNode; enum QueryType m_queryType; }; diff --git a/source/QXmppInformationRequestResult.cpp b/source/QXmppInformationRequestResult.cpp index c5e35dab..3a3d1df9 100644 --- a/source/QXmppInformationRequestResult.cpp +++ b/source/QXmppInformationRequestResult.cpp @@ -1,12 +1,12 @@ #include "QXmppInformationRequestResult.h" #include "QXmppConstants.h" -#include <QXmlStreamWriter> QXmppInformationRequestResult::QXmppInformationRequestResult() { setType(QXmppIq::Result); setQueryType(QXmppDiscoveryIq::InfoQuery); + // features QStringList features; features << ns_rpc // XEP-0009: Jabber-RPC @@ -19,22 +19,14 @@ QXmppInformationRequestResult::QXmppInformationRequestResult() << ns_stream_initiation // XEP-0095: Stream Initiation << ns_stream_initiation_file_transfer // XEP-0096: SI File Transfer << ns_ping; // XEP-0199: XMPP Ping + setFeatures(features); - // build query items - QList<QXmppElement> queryItems; - foreach (const QString &var, features) - { - QXmppElement feature; - feature.setTagName("feature"); - feature.setAttribute("var", var); - queryItems.append(feature); - } + // identities + QList<QXmppDiscoveryIq::Identity> identities; + QXmppDiscoveryIq::Identity identity; + identity.setCategory("automation"); + identity.setType("rpc"); + identities.append(identity); - QXmppElement identity; - identity.setTagName("identity"); - identity.setAttribute("category", "automation"); - identity.setAttribute("type", "rpc"); - queryItems.append(identity); - - setQueryItems(queryItems); + setIdentities(identities); } |
