QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
NTRIPTransportConfig.cc
Go to the documentation of this file.
2
3#include <QtCore/QCoreApplication>
4#include <QtCore/QRegularExpression>
5
6#include "Fact.h"
7#include "NTRIPSettings.h"
8
10{
11 const auto tr = [](const char* s) { return QCoreApplication::translate("NTRIPTransportConfig", s); };
12
13 if (host.isEmpty()) {
14 return tr("No host address");
15 }
16 if (port <= 0 || port > 65535) {
17 return tr("Invalid port");
18 }
19
20 static const QRegularExpression controlChars(QStringLiteral("[\\r\\n\\x00-\\x1f]"));
21 if (host.contains(controlChars)) {
22 return tr("Invalid host (contains control characters)");
23 }
24 if (!mountpoint.isEmpty() && mountpoint.contains(controlChars)) {
25 return tr("Invalid mountpoint name (contains control characters)");
26 }
27 // RFC 7617 ยง2: the Basic-auth userid must not contain a colon.
28 if (username.contains(QLatin1Char(':'))) {
29 return tr("Invalid username (must not contain ':')");
30 }
31
32 return QString();
33}
34
36{
37 const auto read = [](Fact* fact, const QVariant& fallback) { return fact ? fact->rawValue() : fallback; };
38
40 config.host = read(settings.ntripServerHostAddress(), config.host).toString();
41 config.port = read(settings.ntripServerPort(), config.port).toInt();
42 config.username = read(settings.ntripUsername(), config.username).toString();
43 config.password = read(settings.ntripPassword(), config.password).toString();
44 config.mountpoint = read(settings.ntripMountpoint(), config.mountpoint).toString();
45 config.whitelist = read(settings.ntripWhitelist(), config.whitelist).toString();
46 config.useTls = read(settings.ntripUseTls(), config.useTls).toBool();
47 config.allowSelfSignedCerts = read(settings.ntripAllowSelfSignedCerts(), config.allowSelfSignedCerts).toBool();
48 config.udpForwardEnabled = read(settings.ntripUdpForwardEnabled(), config.udpForwardEnabled).toBool();
49 config.udpTargetAddress = read(settings.ntripUdpTargetAddress(), config.udpTargetAddress).toString();
50 config.udpTargetPort = static_cast<quint16>(read(settings.ntripUdpTargetPort(), config.udpTargetPort).toUInt());
51 return config;
52}
53
55{
56 return host != other.host || port != other.port || username != other.username || password != other.password ||
57 mountpoint != other.mountpoint || useTls != other.useTls ||
59}
60
62{
63 return QStringLiteral("%1\x1f%2\x1f%3\x1f%4\x1f%5")
64 .arg(host)
65 .arg(port)
66 .arg(username)
67 .arg(password)
68 .arg(useTls ? 1 : 0);
69}
70
76
77QVector<int> NTRIPTransportConfig::parseWhitelist(const QString& csv)
78{
79 QVector<int> ids;
80 if (csv.isEmpty()) {
81 return ids;
82 }
83 for (const auto& token : csv.split(QLatin1Char(','), Qt::SkipEmptyParts)) {
84 bool ok = false;
85 const int id = token.trimmed().toInt(&ok);
86 if (ok && id > 0) {
87 ids.append(id);
88 }
89 }
90 return ids;
91}
Config config
A Fact is used to hold a single value within the system.
Definition Fact.h:17
QVariant rawValue() const
Value after translation.
Definition Fact.h:85
bool transportDiffers(const NTRIPTransportConfig &other) const
static NTRIPTransportConfig fromSettings(NTRIPSettings &settings)
bool udpForwardDiffers(const NTRIPTransportConfig &other) const
QString validationError() const
static QVector< int > parseWhitelist(const QString &csv)