Skip to content

Commit 70dd361

Browse files
authored
Use improved AssingLCG endpoint (#358)
* Start working on interfacing with improved endpoint * Supply version to assignlcg * Pass by ref * Remove lcg-override config
1 parent 09f2ee9 commit 70dd361

File tree

15 files changed

+44
-291
lines changed

15 files changed

+44
-291
lines changed

frontend/src/lib/_fbs/open-shock/serialization/configuration/backend-config.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,6 @@ authToken(optionalEncoding?:any):string|Uint8Array|null {
4242
return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
4343
}
4444

45-
/**
46-
* Override the Live-Control-Gateway (LCG) URL
47-
*/
48-
lcgOverride():string|null
49-
lcgOverride(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null
50-
lcgOverride(optionalEncoding?:any):string|Uint8Array|null {
51-
const offset = this.bb!.__offset(this.bb_pos, 8);
52-
return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
53-
}
54-
5545
static startBackendConfig(builder:flatbuffers.Builder) {
5646
builder.startObject(3);
5747
}
@@ -64,20 +54,15 @@ static addAuthToken(builder:flatbuffers.Builder, authTokenOffset:flatbuffers.Off
6454
builder.addFieldOffset(1, authTokenOffset, 0);
6555
}
6656

67-
static addLcgOverride(builder:flatbuffers.Builder, lcgOverrideOffset:flatbuffers.Offset) {
68-
builder.addFieldOffset(2, lcgOverrideOffset, 0);
69-
}
70-
7157
static endBackendConfig(builder:flatbuffers.Builder):flatbuffers.Offset {
7258
const offset = builder.endObject();
7359
return offset;
7460
}
7561

76-
static createBackendConfig(builder:flatbuffers.Builder, domainOffset:flatbuffers.Offset, authTokenOffset:flatbuffers.Offset, lcgOverrideOffset:flatbuffers.Offset):flatbuffers.Offset {
62+
static createBackendConfig(builder:flatbuffers.Builder, domainOffset:flatbuffers.Offset, authTokenOffset:flatbuffers.Offset):flatbuffers.Offset {
7763
BackendConfig.startBackendConfig(builder);
7864
BackendConfig.addDomain(builder, domainOffset);
7965
BackendConfig.addAuthToken(builder, authTokenOffset);
80-
BackendConfig.addLcgOverride(builder, lcgOverrideOffset);
8166
return BackendConfig.endBackendConfig(builder);
8267
}
8368
}

include/GatewayClient.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ namespace OpenShock {
2121

2222
inline GatewayClientState state() const { return m_state; }
2323

24-
void connect(std::string_view lcgAddress);
24+
void connect(const std::string& host, uint16_t port, const std::string& path);
2525
void disconnect();
2626

2727
bool sendMessageTXT(std::string_view data);

include/config/BackendConfig.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@
88
namespace OpenShock::Config {
99
struct BackendConfig : public ConfigBase<Serialization::Configuration::BackendConfig> {
1010
BackendConfig();
11-
BackendConfig(std::string_view domain, std::string_view authToken, std::string_view lcgOverride);
11+
BackendConfig(std::string_view domain, std::string_view authToken);
1212

1313
std::string domain;
1414
std::string authToken;
15-
std::string lcgOverride;
1615

1716
void ToDefault() override;
1817

include/config/Config.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,6 @@ namespace OpenShock::Config {
7878
bool GetBackendAuthToken(std::string& out);
7979
bool SetBackendAuthToken(std::string_view token);
8080
bool ClearBackendAuthToken();
81-
bool HasBackendLCGOverride();
82-
bool GetBackendLCGOverride(std::string& out);
83-
bool SetBackendLCGOverride(std::string_view lcgOverride);
84-
bool ClearBackendLCGOverride();
8581

8682
bool GetSerialInputConfigEchoEnabled(bool& out);
8783
bool SetSerialInputConfigEchoEnabled(bool enabled);

include/serial/command_handlers/index.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ namespace OpenShock::Serial::CommandHandlers {
1414
OpenShock::Serial::CommandGroup EStopHandler();
1515
OpenShock::Serial::CommandGroup DomainHandler();
1616
OpenShock::Serial::CommandGroup AuthTokenHandler();
17-
OpenShock::Serial::CommandGroup LcgOverrideHandler();
1817
OpenShock::Serial::CommandGroup HostnameHandler();
1918
OpenShock::Serial::CommandGroup NetworksHandler();
2019
OpenShock::Serial::CommandGroup KeepAliveHandler();
@@ -35,7 +34,6 @@ namespace OpenShock::Serial::CommandHandlers {
3534
EStopHandler(),
3635
DomainHandler(),
3736
AuthTokenHandler(),
38-
LcgOverrideHandler(),
3937
HostnameHandler(),
4038
NetworksHandler(),
4139
KeepAliveHandler(),

include/serialization/JsonAPI.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ namespace OpenShock::Serialization::JsonAPI {
3535
std::vector<ShockerInfo> shockers;
3636
};
3737
struct AssignLcgResponse {
38-
std::string fqdn;
38+
std::string host;
39+
uint16_t port;
40+
std::string path;
3941
std::string country;
4042
};
4143

include/serialization/_fbs/HubConfig_generated.h

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -505,8 +505,7 @@ struct BackendConfig FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
505505
}
506506
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
507507
VT_DOMAIN = 4,
508-
VT_AUTH_TOKEN = 6,
509-
VT_LCG_OVERRIDE = 8
508+
VT_AUTH_TOKEN = 6
510509
};
511510
/// Domain name of the backend server, e.g. "api.shocklink.net"
512511
const ::flatbuffers::String *domain() const {
@@ -516,18 +515,12 @@ struct BackendConfig FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
516515
const ::flatbuffers::String *auth_token() const {
517516
return GetPointer<const ::flatbuffers::String *>(VT_AUTH_TOKEN);
518517
}
519-
/// Override the Live-Control-Gateway (LCG) URL
520-
const ::flatbuffers::String *lcg_override() const {
521-
return GetPointer<const ::flatbuffers::String *>(VT_LCG_OVERRIDE);
522-
}
523518
bool Verify(::flatbuffers::Verifier &verifier) const {
524519
return VerifyTableStart(verifier) &&
525520
VerifyOffset(verifier, VT_DOMAIN) &&
526521
verifier.VerifyString(domain()) &&
527522
VerifyOffset(verifier, VT_AUTH_TOKEN) &&
528523
verifier.VerifyString(auth_token()) &&
529-
VerifyOffset(verifier, VT_LCG_OVERRIDE) &&
530-
verifier.VerifyString(lcg_override()) &&
531524
verifier.EndTable();
532525
}
533526
};
@@ -542,9 +535,6 @@ struct BackendConfigBuilder {
542535
void add_auth_token(::flatbuffers::Offset<::flatbuffers::String> auth_token) {
543536
fbb_.AddOffset(BackendConfig::VT_AUTH_TOKEN, auth_token);
544537
}
545-
void add_lcg_override(::flatbuffers::Offset<::flatbuffers::String> lcg_override) {
546-
fbb_.AddOffset(BackendConfig::VT_LCG_OVERRIDE, lcg_override);
547-
}
548538
explicit BackendConfigBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
549539
: fbb_(_fbb) {
550540
start_ = fbb_.StartTable();
@@ -559,10 +549,8 @@ struct BackendConfigBuilder {
559549
inline ::flatbuffers::Offset<BackendConfig> CreateBackendConfig(
560550
::flatbuffers::FlatBufferBuilder &_fbb,
561551
::flatbuffers::Offset<::flatbuffers::String> domain = 0,
562-
::flatbuffers::Offset<::flatbuffers::String> auth_token = 0,
563-
::flatbuffers::Offset<::flatbuffers::String> lcg_override = 0) {
552+
::flatbuffers::Offset<::flatbuffers::String> auth_token = 0) {
564553
BackendConfigBuilder builder_(_fbb);
565-
builder_.add_lcg_override(lcg_override);
566554
builder_.add_auth_token(auth_token);
567555
builder_.add_domain(domain);
568556
return builder_.Finish();
@@ -576,16 +564,13 @@ struct BackendConfig::Traits {
576564
inline ::flatbuffers::Offset<BackendConfig> CreateBackendConfigDirect(
577565
::flatbuffers::FlatBufferBuilder &_fbb,
578566
const char *domain = nullptr,
579-
const char *auth_token = nullptr,
580-
const char *lcg_override = nullptr) {
567+
const char *auth_token = nullptr) {
581568
auto domain__ = domain ? _fbb.CreateString(domain) : 0;
582569
auto auth_token__ = auth_token ? _fbb.CreateString(auth_token) : 0;
583-
auto lcg_override__ = lcg_override ? _fbb.CreateString(lcg_override) : 0;
584570
return OpenShock::Serialization::Configuration::CreateBackendConfig(
585571
_fbb,
586572
domain__,
587-
auth_token__,
588-
lcg_override__);
573+
auth_token__);
589574
}
590575

591576
struct SerialInputConfig FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {

src/GatewayClient.cpp

Lines changed: 1 addition & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -13,71 +13,10 @@ const char* const TAG = "GatewayClient";
1313
#include "util/CertificateUtils.h"
1414
#include "VisualStateManager.h"
1515

16-
#include <charconv>
17-
1816
using namespace OpenShock;
1917

2018
static bool s_bootStatusSent = false;
2119

22-
// TODO: THIS IS HORRIBLE!
23-
static bool parse_supplied_address(std::string_view input, std::string& host, uint16_t& port, std::string& path)
24-
{
25-
host.clear();
26-
path.clear();
27-
port = 0;
28-
29-
if (input.empty()) return false; // Input cannot be empty
30-
31-
// Remove scheme if present (e.g., "http://")
32-
if (auto scheme_pos = input.find("://"); scheme_pos != std::string_view::npos) {
33-
input.remove_prefix(scheme_pos + 3);
34-
}
35-
36-
// Extract path if present
37-
if (auto path_pos = input.find('/'); path_pos != std::string_view::npos) {
38-
path = std::string(input.substr(path_pos));
39-
path += ("/2/ws/hub" + (path.back() == '/' ? 1 : 0)); // I cant be bothered to do anything else so have a conditional assignment combined with C-style pointer arithmetic :>
40-
input.remove_suffix(input.size() - path_pos);
41-
} else {
42-
path = "/2/ws/hub";
43-
}
44-
45-
if (input.empty()) return false;
46-
47-
std::string_view port_part;
48-
49-
// Check for IPv6 address (e.g., [::1]:8080)
50-
if (input.front() == '[') {
51-
auto closing_bracket = input.find(']');
52-
if (closing_bracket == std::string_view::npos) return false; // Malformed IPv6
53-
54-
host = std::string(input.substr(1, closing_bracket - 1));
55-
56-
if (closing_bracket + 1 < input.size()) {
57-
if (input[closing_bracket + 1] != ':') return false; // Expecting ':' after ']'
58-
port_part = input.substr(closing_bracket + 2); // Skip "]:" for port
59-
}
60-
} else {
61-
// IPv4 or hostname
62-
if (auto colon_pos = input.rfind(':'); colon_pos != std::string_view::npos) {
63-
host = std::string(input.substr(0, colon_pos));
64-
port_part = input.substr(colon_pos + 1);
65-
} else {
66-
host = std::string(input);
67-
}
68-
}
69-
70-
// Parse port if present
71-
if (!port_part.empty()) {
72-
auto result = std::from_chars(port_part.data(), port_part.data() + port_part.size(), port);
73-
if (result.ec != std::errc()) return false; // Failed to parse port
74-
} else {
75-
port = 443;
76-
}
77-
78-
return true;
79-
}
80-
8120
GatewayClient::GatewayClient(const std::string& authToken)
8221
: m_webSocket()
8322
, m_state(GatewayClientState::Disconnected)
@@ -100,20 +39,12 @@ GatewayClient::~GatewayClient()
10039
m_webSocket.disconnect();
10140
}
10241

103-
void GatewayClient::connect(std::string_view lcgAddress)
42+
void GatewayClient::connect(const std::string& host, uint16_t port, const std::string& path)
10443
{
10544
if (m_state != GatewayClientState::Disconnected) {
10645
return;
10746
}
10847

109-
std::string host;
110-
uint16_t port;
111-
std::string path;
112-
if (!parse_supplied_address(lcgAddress, host, port, path)) {
113-
// TODO: Log error
114-
return;
115-
}
116-
11748
_setState(GatewayClientState::Connecting);
11849

11950
//

src/GatewayConnectionManager.cpp

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -232,15 +232,6 @@ bool StartConnectingToLCG()
232232
}
233233
s_lastConnectionAttempt = msNow;
234234

235-
if (Config::HasBackendLCGOverride()) {
236-
std::string lcgOverride;
237-
Config::GetBackendLCGOverride(lcgOverride);
238-
239-
OS_LOGD(TAG, "Connecting to overridden LCG endpoint %s", lcgOverride.c_str());
240-
s_wsClient->connect(lcgOverride);
241-
return true;
242-
}
243-
244235
if (!Config::HasBackendAuthToken()) {
245236
OS_LOGD(TAG, "No auth token, can't connect to LCG");
246237
return false;
@@ -273,8 +264,8 @@ bool StartConnectingToLCG()
273264
return false;
274265
}
275266

276-
OS_LOGD(TAG, "Connecting to LCG endpoint %s in country %s", response.data.fqdn.c_str(), response.data.country.c_str());
277-
s_wsClient->connect(response.data.fqdn);
267+
OS_LOGD(TAG, "Connecting to LCG endpoint { host: '%s', port: %hu, path: '%s' } %s in country %s", response.data.host.c_str(), response.data.port, response.data.path.c_str(), response.data.country.c_str());
268+
s_wsClient->connect(response.data.host, response.data.port, response.data.path);
278269

279270
return true;
280271
}

0 commit comments

Comments
 (0)