File indexing completed on 2024-04-28 04:58:02
0001 /* 0002 SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0003 SPDX-FileCopyrightText: 2019-2021 Harald Sitter <sitter@kde.org> 0004 */ 0005 0006 #ifndef WSDISCOVERER_H 0007 #define WSDISCOVERER_H 0008 0009 #include "discovery.h" 0010 #include <QHash> 0011 #include <QObject> 0012 #include <QTimer> 0013 0014 class WSDiscoveryClient; 0015 class WSDiscoveryTargetService; 0016 class PBSDResolver; 0017 class WSDResolver; 0018 0019 namespace KIO 0020 { 0021 class UDSEntry; 0022 } 0023 0024 class WSDiscovery : public Discovery 0025 { 0026 const QString m_computer; 0027 const QString m_remote; 0028 0029 public: 0030 WSDiscovery(const QString &computer, const QString &remote); 0031 QString udsName() const override; 0032 KIO::UDSEntry toEntry() const override; 0033 }; 0034 0035 class WSDiscoverer : public QObject, public Discoverer 0036 { 0037 Q_OBJECT 0038 public: 0039 WSDiscoverer(); 0040 ~WSDiscoverer() override; 0041 0042 void start() override; 0043 bool isFinished() const override; 0044 0045 Q_SIGNALS: 0046 void newDiscovery(Discovery::Ptr discovery) override; 0047 void finished() override; 0048 0049 private Q_SLOTS: 0050 void matchReceived(const WSDiscoveryTargetService &matchedService); 0051 void resolveReceived(const WSDiscoveryTargetService &matchedService); 0052 0053 private: 0054 void stop() override; 0055 void maybeFinish(); 0056 0057 WSDiscoveryClient *m_client = nullptr; 0058 bool m_startedTimer = false; 0059 QTimer m_probeMatchTimer; 0060 QStringList m_seenEndpoints; 0061 QList<PBSDResolver *> m_resolvers; 0062 int m_resolvedCount = 0; 0063 QHash<QString, WSDResolver *> m_endpointResolvers; 0064 0065 Q_DISABLE_COPY_MOVE(WSDiscoverer) 0066 }; 0067 0068 #endif // WSDISCOVERER_H