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