QXmpp Version: 1.15.1
Loading...
Searching...
No Matches
QXmppDiscoveryManager_p.h
1// SPDX-FileCopyrightText: 2025 Linus Jahn <lnj@kaidan.im>
2//
3// SPDX-License-Identifier: LGPL-2.1-or-later
4
5#ifndef QXMPPDISCOVERYMANAGER_P_H
6#define QXMPPDISCOVERYMANAGER_P_H
7
8#include "QXmppDiscoveryManager.h"
9#include "QXmppPromise.h"
10
11#include "Async.h"
12#include "Iq.h"
13
14#include <QCache>
15
16using namespace QXmpp::Private;
17
18class QXmppDiscoveryManagerPrivate
19{
20public:
22
23 struct WatchEntry {
24 std::weak_ptr<QXmppDiscoServicesWatch::Data> data;
25 QString category;
26 std::optional<QString> type;
27 QStringList requiredFeatures;
28 };
29
30 QXmppDiscoveryManager *q = nullptr;
31 QString clientCapabilitiesNode;
32 QList<QXmppDiscoIdentity> identities;
33 QList<QXmppDataForm> dataForms;
34
35 // cached data
36 QCache<std::tuple<QString, QString>, QXmppDiscoInfo> infoCache;
37 QCache<std::tuple<QString, QString>, QList<QXmppDiscoItem>> itemsCache;
38
39 // outgoing requests
40 AttachableRequests<std::tuple<QString, QString>, QXmpp::Result<QXmppDiscoInfo>> infoRequests;
41 AttachableRequests<std::tuple<QString, QString>, QXmpp::Result<QList<QXmppDiscoItem>>> itemsRequests;
42
43 // service watches
44 QList<WatchEntry> watches;
45 QList<QXmppDiscoService> discoveredServices;
46 bool discoveryComplete = false;
47
48 explicit QXmppDiscoveryManagerPrivate(QXmppDiscoveryManager *q) : q(q) { }
49
50 static QString defaultApplicationName();
51 static QXmppDiscoIdentity defaultIdentity();
52
53 std::variant<CompatIq<QXmppDiscoInfo>, StanzaError> handleIq(GetIq<QXmppDiscoInfo> &&iq);
54 std::variant<CompatIq<QXmppDiscoItems>, StanzaError> handleIq(GetIq<QXmppDiscoItems> &&iq);
55
56 void discoverServices();
57 void processServiceInfo(const QString &jid, const QXmppDiscoInfo &info);
58 void finalizeDiscovery();
59 void pruneExpiredWatches();
60 bool matchesFilter(const WatchEntry &watch, const QXmppDiscoInfo &info) const;
61};
62
63#endif // QXMPPDISCOVERYMANAGER_P_H
Definition QXmppDiscoveryIq.h:147
Definition QXmppDiscoveryIq.h:206
The QXmppDiscoveryManager class makes it possible to discover information about other entities as def...
Definition QXmppDiscoveryManager.h:56
The Error class represents a stanza error.
Definition QXmppStanza.h:112
std::variant< T, QXmppError > Result
Definition QXmppGlobal.h:209