Six behavior-preserving consolidations from the audit: - RPCClient::call() overloads share a private performCall() (payload dump + curl_easy_perform + http code) and a static parseRpcResult() (error->RpcError extraction). The timeout overload restores the prior timeout in both the success and catch paths, exactly as before. - The six UnifiedCallback methods delegate to one splitUnified() that builds the (Callback, ErrorCallback) pair once (null-check preserved). - One liteTrimCopy() in lite_connection_service replaces 5 file-local trim-copy helpers across the lite slice. - lite_wallet_controller's inline height JSON parse now routes through the tested parseLiteHeightResponse(). - theme_effects.cpp: unpackRGB()/scaledAlpha() replace 14 RGB-unpack + 5 alpha-scale copy-paste blocks. - settings.cpp load() uses loadScalar()/loadClamped() helpers for ~44 scalar fields. Besides removing boilerplate this HARDENS loading: ~44 fields that previously only checked contains() now also verify the JSON type, so a malformed value in settings.json falls back to the default instead of throwing/misreading. Custom cases (enum parses, legacy migrations, arrays) stay inline; save() is unchanged. Full-node + Lite build clean; ctest 1/1; hygiene clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
86 lines
3.2 KiB
C++
86 lines
3.2 KiB
C++
#include "lite_wallet_server_selection_adapter.h"
|
|
|
|
namespace dragonx {
|
|
namespace wallet {
|
|
|
|
namespace {
|
|
|
|
LiteServerSelectionMode walletModeFromSettings(
|
|
config::Settings::LiteServerSelectionPreferenceMode mode)
|
|
{
|
|
switch (mode) {
|
|
case config::Settings::LiteServerSelectionPreferenceMode::Sticky:
|
|
return LiteServerSelectionMode::Sticky;
|
|
case config::Settings::LiteServerSelectionPreferenceMode::Random:
|
|
return LiteServerSelectionMode::Random;
|
|
}
|
|
return LiteServerSelectionMode::Sticky;
|
|
}
|
|
|
|
config::Settings::LiteServerSelectionPreferenceMode settingsModeFromWallet(
|
|
LiteServerSelectionMode mode)
|
|
{
|
|
switch (mode) {
|
|
case LiteServerSelectionMode::Sticky:
|
|
return config::Settings::LiteServerSelectionPreferenceMode::Sticky;
|
|
case LiteServerSelectionMode::Random:
|
|
return config::Settings::LiteServerSelectionPreferenceMode::Random;
|
|
}
|
|
return config::Settings::LiteServerSelectionPreferenceMode::Sticky;
|
|
}
|
|
|
|
} // namespace
|
|
|
|
LiteConnectionSettings liteConnectionSettingsFromAppSettings(const config::Settings& settings)
|
|
{
|
|
LiteConnectionSettings connectionSettings;
|
|
connectionSettings.servers.clear();
|
|
for (const auto& server : settings.getLiteServers()) {
|
|
connectionSettings.servers.push_back(LiteServerEndpoint{
|
|
liteTrimCopy(server.url),
|
|
server.label,
|
|
server.enabled
|
|
});
|
|
}
|
|
connectionSettings.selectionMode = walletModeFromSettings(settings.getLiteServerSelectionMode());
|
|
connectionSettings.stickyServerUrl = liteTrimCopy(settings.getLiteStickyServerUrl());
|
|
connectionSettings.chainName = liteTrimCopy(settings.getLiteChainName());
|
|
if (connectionSettings.chainName.empty()) connectionSettings.chainName = kDragonXLiteChainName;
|
|
connectionSettings.randomSelectionSeed = settings.getLiteRandomSelectionSeed();
|
|
return connectionSettings;
|
|
}
|
|
|
|
void applyLiteConnectionSettingsToAppSettings(config::Settings& settings,
|
|
const LiteConnectionSettings& connectionSettings)
|
|
{
|
|
std::vector<config::Settings::LiteServerPreference> servers;
|
|
servers.reserve(connectionSettings.servers.size());
|
|
for (const auto& server : connectionSettings.servers) {
|
|
servers.push_back(config::Settings::LiteServerPreference{
|
|
liteTrimCopy(server.url),
|
|
server.label,
|
|
server.enabled
|
|
});
|
|
}
|
|
|
|
settings.setLiteServerSelectionMode(settingsModeFromWallet(connectionSettings.selectionMode));
|
|
settings.setLiteStickyServerUrl(liteTrimCopy(connectionSettings.stickyServerUrl));
|
|
settings.setLiteChainName(liteTrimCopy(connectionSettings.chainName).empty()
|
|
? kDragonXLiteChainName
|
|
: liteTrimCopy(connectionSettings.chainName));
|
|
settings.setLiteRandomSelectionSeed(connectionSettings.randomSelectionSeed);
|
|
settings.setLiteServers(servers);
|
|
}
|
|
|
|
std::string redactLiteServerSelectionValue(const std::string& value)
|
|
{
|
|
const std::string trimmed = liteTrimCopy(value);
|
|
if (trimmed.empty()) return "<empty>";
|
|
const auto scheme = trimmed.find("://");
|
|
if (scheme == std::string::npos) return "<redacted>";
|
|
return trimmed.substr(0, scheme + 3) + "<redacted>";
|
|
}
|
|
|
|
} // namespace wallet
|
|
} // namespace dragonx
|