From 6ea3edfd83a0bf1558d43e48eac563730276c175 Mon Sep 17 00:00:00 2001 From: taiBsu Date: Thu, 9 Mar 2023 16:45:10 +0100 Subject: Implement XEP-0215: External Service Discovery (#542) Implements https://xmpp.org/extensions/xep-0215.html in version 1.0. --- .../QXmppExternalServiceDiscoveryManager.cpp | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/client/QXmppExternalServiceDiscoveryManager.cpp (limited to 'src/client/QXmppExternalServiceDiscoveryManager.cpp') 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 +// +// 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(); +/// \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::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 -- cgit v1.2.3