QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
NTRIPHttpTransport.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QChronoTimer>
4#include <QtCore/QLoggingCategory>
5#include <QtNetwork/QSslSocket>
6#include <QtNetwork/QTcpSocket>
7#include <chrono>
8
9#include "NTRIPTransport.h"
11#include "RTCMParser.h"
12
13Q_DECLARE_LOGGING_CATEGORY(NTRIPHttpTransportLog)
14
16{
17 Q_OBJECT
18 friend class NTRIPHttpTransportTest;
19
20public:
21 static constexpr std::chrono::milliseconds kConnectTimeout{10000};
22 static constexpr std::chrono::milliseconds kDataWatchdog{30000};
23 static constexpr int kMaxHttpHeaderSize = 32768;
24
25 explicit NTRIPHttpTransport(const NTRIPTransportConfig& config, QObject* parent = nullptr);
26 ~NTRIPHttpTransport() override;
27
28 void start() override;
29 void stop() override;
30 void sendNMEA(const QByteArray& nmea) override;
31
32 void setRtcmWhitelist(const QVector<int>& messageIds) override { _rtcmParser.setWhitelist(messageIds); }
33
34 const NTRIPTransportConfig& config() const { return _config; }
35
36 // plaintextCredentialsWarning lives on the NTRIPTransport base signal set so
37 // NTRIPManager can connect without concrete-type knowledge.
38
39protected:
41 {
42 int code = 0;
43 QString reason;
44 bool valid = false;
45 };
46
47 static HttpStatus parseHttpStatusLine(const QString& line);
48
49 static bool isHttpSuccess(int code) { return code >= 200 && code < 300; }
50
52 {
53 QByteArray bytes;
55 bool credentialsInClear = false;
56 };
57
58 static HttpRequest buildHttpRequest(const NTRIPTransportConfig& config);
59
60private:
61 void _connect();
62 void _failFatal(NTRIPError code, const QString& msg, QAbstractSocket* socket);
63 void _sendHttpRequest();
64 void _readBytes();
65 void _handleHttpResponse();
66 void _handleRtcmData();
67 void _parseRtcm(const QByteArray& buffer);
68
70
71 QTcpSocket* _socket = nullptr;
72 QChronoTimer _connectTimeoutTimer;
73 QChronoTimer _dataWatchdogTimer;
74
75 RTCMParser _rtcmParser;
76 bool _httpHandshakeDone = false;
77 bool _stopped = false;
78
79 qint64 _postOkTimestampMs = 0;
80
81 QByteArray _httpResponseBuf;
82};
Config config
const NTRIPTransportConfig & config() const
void setRtcmWhitelist(const QVector< int > &messageIds) override
static bool isHttpSuccess(int code)