aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorNiels Ole Salscheider <niels_ole@salscheider-online.de>2016-11-20 12:48:26 +0100
committerJeremy Lainé <jeremy.laine@m4x.org>2017-04-29 16:09:30 +0200
commit81691141d4ac136744f2520ca41f45e281902114 (patch)
treed750c853694312913c6b5e23c9373c99585cdc85 /src/base
parent084eb01fb395488a0a3aee799be2b72ce11aa220 (diff)
downloadqxmpp-81691141d4ac136744f2520ca41f45e281902114.tar.gz
Add QXmppMamManager (XEP-0313)
Diffstat (limited to 'src/base')
-rw-r--r--src/base/QXmppConstants.cpp4
-rw-r--r--src/base/QXmppConstants_p.h4
-rw-r--r--src/base/QXmppMamIq.cpp195
-rw-r--r--src/base/QXmppMamIq.h83
-rw-r--r--src/base/base.pri2
5 files changed, 288 insertions, 0 deletions
diff --git a/src/base/QXmppConstants.cpp b/src/base/QXmppConstants.cpp
index 323b77f5..7813b144 100644
--- a/src/base/QXmppConstants.cpp
+++ b/src/base/QXmppConstants.cpp
@@ -118,5 +118,9 @@ const char* ns_bob = "urn:xmpp:bob";
const char* ns_conference = "jabber:x:conference";
// XEP-0280: Message Carbons
const char* ns_carbons = "urn:xmpp:carbons:2";
+// XEP-0297: Stanza Forwarding
+const char* ns_forwarding = "urn:xmpp:forward:0";
+// XEP-0313: Message Archive Management
+const char* ns_mam = "urn:xmpp:mam:1";
// XEP-0333: Chat Markers
const char* ns_chat_markers = "urn:xmpp:chat-markers:0";
diff --git a/src/base/QXmppConstants_p.h b/src/base/QXmppConstants_p.h
index c4cddeb8..853f8222 100644
--- a/src/base/QXmppConstants_p.h
+++ b/src/base/QXmppConstants_p.h
@@ -130,6 +130,10 @@ extern const char* ns_bob;
extern const char* ns_conference;
// XEP-0280: Message Carbons
extern const char* ns_carbons;
+// XEP-0297: Stanza Forwarding
+extern const char* ns_forwarding;
+// XEP-0313: Message Archive Management
+extern const char* ns_mam;
// XEP-0333: Char Markers
extern const char* ns_chat_markers;
diff --git a/src/base/QXmppMamIq.cpp b/src/base/QXmppMamIq.cpp
new file mode 100644
index 00000000..8b85badc
--- /dev/null
+++ b/src/base/QXmppMamIq.cpp
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2016-2017 The QXmpp developers
+ *
+ * Author:
+ * Niels Ole Salscheider
+ *
+ * Source:
+ * https://github.com/qxmpp-project/qxmpp
+ *
+ * This file is a part of QXmpp library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ */
+
+#include <QDomElement>
+
+#include "QXmppMamIq.h"
+#include "QXmppConstants_p.h"
+
+QXmppMamQueryIq::QXmppMamQueryIq() : QXmppIq(QXmppIq::Set)
+{
+}
+
+/// Returns the form that specifies the query.
+QXmppDataForm QXmppMamQueryIq::form() const
+{
+ return m_form;
+}
+
+/// Sets the data form that specifies the query.
+///
+/// \param form The data form.
+void QXmppMamQueryIq::setForm(const QXmppDataForm &form)
+{
+ m_form = form;
+}
+
+/// Returns the result set query for result set management.
+QXmppResultSetQuery QXmppMamQueryIq::resultSetQuery() const
+{
+ return m_resultSetQuery;
+}
+
+/// Sets the result set query for result set management.
+///
+/// \param resultSetQuery The result set query.
+void QXmppMamQueryIq::setResultSetQuery(const QXmppResultSetQuery &resultSetQuery)
+{
+ m_resultSetQuery = resultSetQuery;
+}
+
+/// Returns the node to query.
+QString QXmppMamQueryIq::node() const
+{
+ return m_node;
+}
+
+/// Sets the node to query.
+///
+/// \param node The node to query.
+void QXmppMamQueryIq::setNode(const QString &node)
+{
+ m_node = node;
+}
+
+/// Returns the queryid that will be included in the results.
+QString QXmppMamQueryIq::queryId() const
+{
+ return m_queryId;
+}
+
+/// Sets the queryid that will be included in the results.
+///
+/// \param id The query id.
+void QXmppMamQueryIq::setQueryId(const QString &id)
+{
+ m_queryId = id;
+}
+
+/// \cond
+bool QXmppMamQueryIq::isMamQueryIq(const QDomElement &element)
+{
+ if (element.tagName() == "iq") {
+ QDomElement queryElement = element.firstChildElement("query");
+ if (!queryElement.isNull() && queryElement.namespaceURI() == ns_mam) {
+ return true;
+ }
+ }
+ return false;
+}
+
+void QXmppMamQueryIq::parseElementFromChild(const QDomElement &element)
+{
+ QDomElement queryElement = element.firstChildElement("query");
+ m_node = queryElement.attribute("node");
+ m_queryId = queryElement.attribute("queryId");
+ QDomElement resultSetElement = queryElement.firstChildElement("set");
+ if (!resultSetElement.isNull()) {
+ m_resultSetQuery.parse(resultSetElement);
+ }
+ QDomElement formElement = queryElement.firstChildElement("x");
+ if (!formElement.isNull()) {
+ m_form.parse(formElement);
+ }
+}
+
+void QXmppMamQueryIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
+{
+ writer->writeStartElement("query");
+ writer->writeAttribute("xmlns", ns_mam);
+ if (!m_node.isEmpty()) {
+ writer->writeAttribute("node", m_node);
+ }
+ if (!m_queryId.isEmpty()) {
+ writer->writeAttribute("queryid", m_queryId);
+ }
+ m_form.toXml(writer);
+ m_resultSetQuery.toXml(writer);
+ writer->writeEndElement();
+}
+/// \endcond
+
+
+QXmppMamResultIq::QXmppMamResultIq() : m_complete(false)
+{
+}
+
+/// Returns the result set reply for result set management.
+QXmppResultSetReply QXmppMamResultIq::resultSetReply() const
+{
+ return m_resultSetReply;
+}
+
+/// Sets the result set reply for result set management
+void QXmppMamResultIq::setResultSetReply(const QXmppResultSetReply &resultSetReply)
+{
+ m_resultSetReply = resultSetReply;
+}
+
+/// Returns true if the results returned by the server are complete (not
+/// limited by the server).
+bool QXmppMamResultIq::complete() const
+{
+ return m_complete;
+}
+
+/// Sets if the results returned by the server are complete (not limited by the
+/// server).
+void QXmppMamResultIq::setComplete(bool complete)
+{
+ m_complete = complete;
+}
+
+/// \cond
+bool QXmppMamResultIq::isMamResultIq(const QDomElement &element)
+{
+ if (element.tagName() == "iq") {
+ QDomElement finElement = element.firstChildElement("fin");
+ if (!finElement.isNull() && finElement.namespaceURI() == ns_mam) {
+ return true;
+ }
+ }
+ return false;
+}
+
+void QXmppMamResultIq::parseElementFromChild(const QDomElement &element)
+{
+ QDomElement finElement = element.firstChildElement("fin");
+ m_complete = finElement.attribute("complete") == QString("true");
+ QDomElement resultSetElement = finElement.firstChildElement("set");
+ if (!resultSetElement.isNull()) {
+ m_resultSetReply.parse(resultSetElement);
+ }
+}
+
+void QXmppMamResultIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
+{
+ writer->writeStartElement("fin");
+ writer->writeAttribute("xmlns", ns_mam);
+ if (m_complete) {
+ writer->writeAttribute("complete", "true");
+ }
+ m_resultSetReply.toXml(writer);
+ writer->writeEndElement();
+}
+/// \endcond
diff --git a/src/base/QXmppMamIq.h b/src/base/QXmppMamIq.h
new file mode 100644
index 00000000..6c0d2807
--- /dev/null
+++ b/src/base/QXmppMamIq.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2016-2017 The QXmpp developers
+ *
+ * Author:
+ * Niels Ole Salscheider
+ *
+ * Source:
+ * https://github.com/qxmpp-project/qxmpp
+ *
+ * This file is a part of QXmpp library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ */
+
+#ifndef QXMPPMAMIQ_H
+#define QXMPPMAMIQ_H
+
+#include "QXmppIq.h"
+#include "QXmppDataForm.h"
+#include "QXmppResultSet.h"
+
+/// \brief The QXmppMamQueryIq class represents the query IQ for
+/// XEP-0313: Message Archive Management.
+class QXmppMamQueryIq : public QXmppIq
+{
+public:
+ QXmppMamQueryIq();
+
+ QXmppDataForm form() const;
+ void setForm(const QXmppDataForm &form);
+ QXmppResultSetQuery resultSetQuery() const;
+ void setResultSetQuery(const QXmppResultSetQuery &resultSetQuery);
+ QString node() const;
+ void setNode(const QString &node);
+ QString queryId() const;
+ void setQueryId(const QString &id);
+
+ static bool isMamQueryIq(const QDomElement &element);
+
+protected:
+ void parseElementFromChild(const QDomElement &element);
+ void toXmlElementFromChild(QXmlStreamWriter *writer) const;
+
+private:
+ QXmppDataForm m_form;
+ QXmppResultSetQuery m_resultSetQuery;
+ QString m_node;
+ QString m_queryId;
+};
+
+/// \brief The QXmppMamQueryIq class represents the result IQ for
+/// XEP-0313: Message Archive Management.
+class QXmppMamResultIq : public QXmppIq
+{
+public:
+ QXmppMamResultIq();
+
+ QXmppResultSetReply resultSetReply() const;
+ void setResultSetReply(const QXmppResultSetReply &resultSetReply);
+ bool complete() const;
+ void setComplete(bool complete);
+
+ static bool isMamResultIq(const QDomElement &element);
+
+protected:
+ void parseElementFromChild(const QDomElement &element);
+ void toXmlElementFromChild(QXmlStreamWriter *writer) const;
+
+private:
+ QXmppResultSetReply m_resultSetReply;
+ bool m_complete;
+};
+
+#endif
diff --git a/src/base/base.pri b/src/base/base.pri
index 670de9d6..45a74afb 100644
--- a/src/base/base.pri
+++ b/src/base/base.pri
@@ -13,6 +13,7 @@ INSTALL_HEADERS += \
base/QXmppIq.h \
base/QXmppJingleIq.h \
base/QXmppLogger.h \
+ base/QXmppMamIq.h \
base/QXmppMessage.h \
base/QXmppMucIq.h \
base/QXmppNonSASLAuth.h \
@@ -61,6 +62,7 @@ SOURCES += \
base/QXmppIq.cpp \
base/QXmppJingleIq.cpp \
base/QXmppLogger.cpp \
+ base/QXmppMamIq.cpp \
base/QXmppMessage.cpp \
base/QXmppMucIq.cpp \
base/QXmppNonSASLAuth.cpp \