File indexing completed on 2024-06-23 05:24:06

0001 // SPDX-FileCopyrightText: 2023 Arjen Hiemstra <ahiemstra@heimr.nl>
0002 //
0003 // SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0004 
0005 #pragma once
0006 
0007 #include <chrono>
0008 #include <memory>
0009 
0010 #include <QObject>
0011 
0012 #include <freerdp/freerdp.h>
0013 
0014 namespace KRdp
0015 {
0016 
0017 class RdpConnection;
0018 
0019 class NetworkDetection : public QObject
0020 {
0021     Q_OBJECT
0022 
0023 public:
0024     enum class State {
0025         None,
0026         PendingStop,
0027         QueuedStop,
0028         PendingResults,
0029     };
0030 
0031     explicit NetworkDetection(RdpConnection *session);
0032     ~NetworkDetection();
0033 
0034     Q_PROPERTY(std::chrono::system_clock::duration minimumRTT READ minimumRTT NOTIFY rttChanged)
0035     std::chrono::system_clock::duration minimumRTT() const;
0036     Q_PROPERTY(std::chrono::system_clock::duration averageRTT READ averageRTT NOTIFY rttChanged)
0037     std::chrono::system_clock::duration averageRTT() const;
0038 
0039     Q_SIGNAL void rttChanged();
0040 
0041     void initialize();
0042 
0043     void startBandwidthMeasure();
0044     void stopBandwidthMeasure();
0045 
0046     void update();
0047 
0048 private:
0049     friend BOOL rttMeasureResponse(rdpContext *, uint16_t);
0050     friend BOOL bwMeasureResults(rdpContext *, uint16_t);
0051 
0052     bool onRttMeasureResponse(uint16_t sequence);
0053     bool onBandwidthMeasureResults();
0054 
0055     void updateAverageRtt();
0056 
0057     class Private;
0058     const std::unique_ptr<Private> d;
0059 };
0060 
0061 }