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 }