QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
TransportStrategy.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QObject>
4#include <QtCore/QTimer>
5#include <QtNetwork/QSslCertificate>
6#include <QtNetwork/QSslKey>
7
8class TcpTransport;
9class UdpTransport;
10
13class TransportStrategy : public QObject
14{
15 Q_OBJECT
16
17public:
18 enum class Protocol
19 {
20 UDP,
21 TCP,
23 };
24 Q_ENUM(Protocol)
25
26 explicit TransportStrategy(QObject* parent = nullptr);
27 ~TransportStrategy() override;
28
29 [[nodiscard]] Protocol protocol() const { return _protocol; }
30 [[nodiscard]] QString host() const { return _host; }
31 [[nodiscard]] quint16 port() const { return _port; }
32 [[nodiscard]] bool tlsEnabled() const { return _tlsEnabled; }
33 [[nodiscard]] bool tlsVerifyPeer() const { return _tlsVerifyPeer; }
34
36 void setTarget(const QString& host, quint16 port);
37
38 void setTlsEnabled(bool enabled);
39 void setTlsVerifyPeer(bool verify);
40 void setTlsCaCertificates(const QList<QSslCertificate>& certs);
41 void setTlsClientCertificate(const QSslCertificate& cert, const QSslKey& key);
42
44 quint64 send(const QByteArray& data);
45
47 [[nodiscard]] bool isConnected() const;
48 [[nodiscard]] bool tcpConnected() const;
49
51 void reset();
52
53signals:
54 void connected();
56 void errorOccurred(const QString& message);
57
58private:
59 void _ensureUdp();
60 void _ensureTcp();
61 void _configureTcp();
62 bool _shouldUseTcp() const;
63
64 void _onTcpConnected();
65 void _onTcpDisconnected();
66 void _onTransportError(const QString& message);
67
68 Protocol _protocol = Protocol::UDP;
69 QString _host;
70 quint16 _port = 0;
71
72 bool _tlsEnabled = false;
73 bool _tlsVerifyPeer = true;
74 QList<QSslCertificate> _tlsCaCerts;
75 QSslCertificate _tlsClientCert;
76 QSslKey _tlsClientKey;
77
78 UdpTransport* _udpTransport = nullptr;
79 TcpTransport* _tcpTransport = nullptr;
80
81 int _tcpReconnectMs = kInitialReconnectMs;
82
83 static constexpr int kUdpFailureThreshold = 10;
84 static constexpr int kInitialReconnectMs = 5000;
85 static constexpr int kMaxReconnectMs = 60000;
86};
void setTlsClientCertificate(const QSslCertificate &cert, const QSslKey &key)
void errorOccurred(const QString &message)
void setTarget(const QString &host, quint16 port)
~TransportStrategy() override
Protocol protocol() const
quint16 port() const
void setTlsCaCertificates(const QList< QSslCertificate > &certs)
void setTlsVerifyPeer(bool verify)
quint64 send(const QByteArray &data)
Send pre-formatted payload. Returns bytes sent (0 on failure/pending).
void setTlsEnabled(bool enabled)
bool isConnected() const
Whether the active transport is connected and ready.
QString host() const
bool tlsEnabled() const
bool tlsVerifyPeer() const
void reset()
Reset transports (e.g. after host/port change).
void setProtocol(Protocol protocol)