aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-05-13 21:26:46 +0200
committerLinus Jahn <lnj@kaidan.im>2022-05-20 16:55:28 +0200
commit4714c48c8cf578deaf2488e98a9f844300dd5750 (patch)
treedde2a1420eea41b390dcc69c7217ed818fdce0ba /src/client
parent6c111246ec0a17309e4d6af4c57d6fcc058671cb (diff)
downloadqxmpp-4714c48c8cf578deaf2488e98a9f844300dd5750.tar.gz
ClientExtension: Add injectIq() function
Diffstat (limited to 'src/client')
-rw-r--r--src/client/QXmppClient.cpp5
-rw-r--r--src/client/QXmppClient.h4
-rw-r--r--src/client/QXmppClientExtension.cpp18
-rw-r--r--src/client/QXmppClientExtension.h2
4 files changed, 29 insertions, 0 deletions
diff --git a/src/client/QXmppClient.cpp b/src/client/QXmppClient.cpp
index b371e052..cfe798fd 100644
--- a/src/client/QXmppClient.cpp
+++ b/src/client/QXmppClient.cpp
@@ -784,6 +784,11 @@ QXmppVersionManager &QXmppClient::versionManager()
return *findExtension<QXmppVersionManager>();
}
+void QXmppClient::injectIq(const QDomElement &element, const std::optional<QXmppE2eeMetadata> &e2eeMetadata)
+{
+ StanzaPipeline::process(d->extensions, element, e2eeMetadata);
+}
+
///
/// Give extensions a chance to handle incoming stanzas.
///
diff --git a/src/client/QXmppClient.h b/src/client/QXmppClient.h
index 08f2f7cb..47b71706 100644
--- a/src/client/QXmppClient.h
+++ b/src/client/QXmppClient.h
@@ -307,6 +307,9 @@ public Q_SLOTS:
bool sendPacket(const QXmppNonza &);
void sendMessage(const QString &bareJid, const QString &message);
+private:
+ void injectIq(const QDomElement &element, const std::optional<QXmppE2eeMetadata> &e2eeMetadata);
+
private Q_SLOTS:
void _q_elementReceived(const QDomElement &element, bool &handled);
void _q_reconnect();
@@ -318,6 +321,7 @@ private Q_SLOTS:
private:
QXmppClientPrivate *const d;
+ friend class QXmppClientExtension;
friend class QXmppInternalClientExtension;
friend class TestClient;
};
diff --git a/src/client/QXmppClientExtension.cpp b/src/client/QXmppClientExtension.cpp
index eb6ec907..67f79889 100644
--- a/src/client/QXmppClientExtension.cpp
+++ b/src/client/QXmppClientExtension.cpp
@@ -4,6 +4,8 @@
#include "QXmppClientExtension.h"
+#include "QXmppClient.h"
+
#include <QStringList>
class QXmppClientExtensionPrivate
@@ -101,3 +103,19 @@ void QXmppClientExtension::setClient(QXmppClient *client)
{
d->client = client;
}
+
+///
+/// Injects an IQ element into the client.
+///
+/// The IQ is handled like any other stanza received via the XMPP stream.
+///
+/// \param element
+/// \param e2eeMetadata End-to-end encryption metadata for the IQ. Should
+/// be set if the stanza has been decrypted with an end-to-end encryption.
+///
+/// \since QXmpp 1.5
+///
+void QXmppClientExtension::injectIq(const QDomElement &element, const std::optional<QXmppE2eeMetadata> &e2eeMetadata)
+{
+ client()->injectIq(element, e2eeMetadata);
+}
diff --git a/src/client/QXmppClientExtension.h b/src/client/QXmppClientExtension.h
index 0cf81fc3..5178133a 100644
--- a/src/client/QXmppClientExtension.h
+++ b/src/client/QXmppClientExtension.h
@@ -43,6 +43,8 @@ protected:
QXmppClient *client();
virtual void setClient(QXmppClient *client);
+ void injectIq(const QDomElement &element, const std::optional<QXmppE2eeMetadata> &e2eeMetadata);
+
private:
QXmppClientExtensionPrivate *const d;