aboutsummaryrefslogtreecommitdiff
path: root/src/client/QXmppExternalServiceDiscoveryManager.cpp
diff options
context:
space:
mode:
authortaiBsu <dev@taibsu.de>2023-03-09 16:45:10 +0100
committerGitHub <noreply@github.com>2023-03-09 16:45:10 +0100
commit6ea3edfd83a0bf1558d43e48eac563730276c175 (patch)
tree0139fb92aca9da9f637237b7bedbd34393b0292e /src/client/QXmppExternalServiceDiscoveryManager.cpp
parent37d56016ac7940f5c876d0293cd9e3f7802ea63a (diff)
downloadqxmpp-6ea3edfd83a0bf1558d43e48eac563730276c175.tar.gz
Implement XEP-0215: External Service Discovery (#542)
Implements https://xmpp.org/extensions/xep-0215.html in version 1.0.
Diffstat (limited to 'src/client/QXmppExternalServiceDiscoveryManager.cpp')
-rw-r--r--src/client/QXmppExternalServiceDiscoveryManager.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/client/QXmppExternalServiceDiscoveryManager.cpp b/src/client/QXmppExternalServiceDiscoveryManager.cpp
new file mode 100644
index 00000000..27cfe0b2
--- /dev/null
+++ b/src/client/QXmppExternalServiceDiscoveryManager.cpp
@@ -0,0 +1,60 @@
+// SPDX-FileCopyrightText: 2023 Tibor Csötönyi <work@taibsu.de>
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+
+#include "QXmppExternalServiceDiscoveryManager.h"
+
+#include "QXmppClient.h"
+#include "QXmppConstants_p.h"
+#include "QXmppExternalServiceDiscoveryIq.h"
+#include "QXmppIqHandling.h"
+
+using namespace QXmpp::Private;
+
+///
+/// \brief The QXmppExternalServiceDiscoveryManager class makes it possible to
+/// discover information about external services from providers
+/// as defined by \xep{0215, External Service Discovery}.
+///
+/// To make use of this manager, you need to instantiate it and load it into
+/// the QXmppClient instance as follows:
+///
+/// \code
+/// auto *manager = client->addNewExtension<QXmppExternalServiceDiscoveryManager>();
+/// \endcode
+///
+/// \ingroup Managers
+///
+/// \since QXmpp 1.6
+///
+QXmppExternalServiceDiscoveryManager::QXmppExternalServiceDiscoveryManager()
+{
+}
+
+QXmppExternalServiceDiscoveryManager::~QXmppExternalServiceDiscoveryManager() = default;
+
+///
+/// Requests external services from the specified XMPP entity.
+///
+/// \param jid The target entity's JID.
+/// \param node The target node (optional).
+///
+/// \since QXmpp 1.6
+///
+QXmppTask<QXmppExternalServiceDiscoveryManager::ServicesResult> QXmppExternalServiceDiscoveryManager::requestServices(const QString &jid, const QString &node)
+{
+ QXmppExternalServiceDiscoveryIq request;
+ request.setType(QXmppIq::Get);
+ request.setTo(jid);
+
+ return chainIq(client()->sendIq(std::move(request)), this, [](QXmppExternalServiceDiscoveryIq &&iq) -> ServicesResult {
+ return iq.externalServices();
+ });
+}
+
+/// \cond
+QStringList QXmppExternalServiceDiscoveryManager::discoveryFeatures() const
+{
+ return { ns_external_service_discovery };
+}
+/// \endcond