aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-09 08:16:59 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-09 08:16:59 +0000
commit4c8e3957e860becd0a473ac4b8f5c839a8b18c44 (patch)
treeb2afe0eda36a601f357de39d60ad8b7a6eb83115 /source
parent1b2786d8020acecc94a82e7cd39dde5c28813f13 (diff)
downloadqxmpp-4c8e3957e860becd0a473ac4b8f5c839a8b18c44.tar.gz
add support for XEP-0128: Service Discovery Extensions (issue #59)
Diffstat (limited to 'source')
-rw-r--r--source/QXmppDiscoveryIq.cpp35
-rw-r--r--source/QXmppDiscoveryIq.h5
2 files changed, 38 insertions, 2 deletions
diff --git a/source/QXmppDiscoveryIq.cpp b/source/QXmppDiscoveryIq.cpp
index 866c82f7..f7a0cae5 100644
--- a/source/QXmppDiscoveryIq.cpp
+++ b/source/QXmppDiscoveryIq.cpp
@@ -153,6 +153,26 @@ void QXmppDiscoveryIq::setItems(const QList<QXmppDiscoveryIq::Item> &items)
m_items = items;
}
+/// Returns the QXmppDataForm for this IQ, as defined by
+/// XEP-0128: Service Discovery Extensions.
+///
+
+QXmppDataForm QXmppDiscoveryIq::form() const
+{
+ return m_form;
+}
+
+/// Sets the QXmppDataForm for this IQ, as define by
+/// XEP-0128: Service Discovery Extensions.
+///
+/// \param form
+///
+
+void QXmppDiscoveryIq::setForm(const QXmppDataForm &form)
+{
+ m_form = form;
+}
+
QString QXmppDiscoveryIq::queryNode() const
{
return m_queryNode;
@@ -213,20 +233,29 @@ void QXmppDiscoveryIq::parseElementFromChild(const QDomElement &element)
if (itemElement.tagName() == "feature")
{
m_features.append(itemElement.attribute("var"));
- } else if (itemElement.tagName() == "identity") {
+ }
+ else if (itemElement.tagName() == "identity")
+ {
QXmppDiscoveryIq::Identity identity;
identity.setLanguage(itemElement.attribute("xml:lang"));
identity.setCategory(itemElement.attribute("category"));
identity.setName(itemElement.attribute("name"));
identity.setType(itemElement.attribute("type"));
m_identities.append(identity);
- } else if (itemElement.tagName() == "item") {
+ }
+ 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);
}
+ else if (itemElement.tagName() == "x" &&
+ itemElement.namespaceURI() == ns_data)
+ {
+ m_form.parse(itemElement);
+ }
itemElement = itemElement.nextSiblingElement();
}
}
@@ -264,6 +293,8 @@ void QXmppDiscoveryIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
writer->writeEndElement();
}
+ m_form.toXml(writer);
+
writer->writeEndElement();
}
diff --git a/source/QXmppDiscoveryIq.h b/source/QXmppDiscoveryIq.h
index 5e2a618d..4aef97ff 100644
--- a/source/QXmppDiscoveryIq.h
+++ b/source/QXmppDiscoveryIq.h
@@ -25,6 +25,7 @@
#define QXMPPDISCOVERY_H
#include "QXmppElement.h"
+#include "QXmppDataForm.h"
#include "QXmppIq.h"
class QDomElement;
@@ -86,6 +87,9 @@ public:
QList<QXmppDiscoveryIq::Item> items() const;
void setItems(const QList<QXmppDiscoveryIq::Item> &items);
+ QXmppDataForm form() const;
+ void setForm(const QXmppDataForm &form);
+
QString queryNode() const;
void setQueryNode(const QString &node);
@@ -104,6 +108,7 @@ private:
QStringList m_features;
QList<QXmppDiscoveryIq::Identity> m_identities;
QList<QXmppDiscoveryIq::Item> m_items;
+ QXmppDataForm m_form;
QString m_queryNode;
enum QueryType m_queryType;
};