From 1cc1d1bf50036fc5be63cb4cecda23ebca9ec0c9 Mon Sep 17 00:00:00 2001 From: John Date: Sun, 27 Feb 2022 17:46:47 +0100 Subject: [PATCH] replace old config path --- src/ebusd/main.cpp | 38 +++++++++++++++++++++++++++----------- src/ebusd/main.h | 1 - 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/ebusd/main.cpp b/src/ebusd/main.cpp index f7b9eaf2..37af42aa 100644 --- a/src/ebusd/main.cpp +++ b/src/ebusd/main.cpp @@ -64,11 +64,17 @@ using std::cout; #define LOG_FILE_NAME "/var/log/ebusd.log" #endif +/** the config path part behind the scheme (scheme without "://"). */ +#define CONFIG_PATH_SUFFIX "://cfg.ebusd.eu/" + +/** the previous config path part to rewrite to the current one. */ +#define PREVIOUS_CONFIG_PATH_SUFFIX "://ebusd.eu/config/" + /** the default path of the configuration files. */ #ifdef HAVE_SSL -#define CONFIG_PATH "https://cfg.ebusd.eu/" +#define CONFIG_PATH "https" CONFIG_PATH_SUFFIX #else -#define CONFIG_PATH "http://cfg.ebusd.eu/" +#define CONFIG_PATH "http" CONFIG_PATH_SUFFIX #endif /** the opened PID file, or nullptr. */ @@ -82,7 +88,6 @@ static struct options s_opt = { false, // initialSend 0, // extraLatency - CONFIG_PATH, // configPath false, // scanConfig 0, // initialScan getenv("LANG"), // preferLanguage @@ -137,6 +142,9 @@ static MessageMap* s_messageMap = nullptr; /** the @a MainLoop instance, or nullptr. */ static MainLoop* s_mainLoop = nullptr; +/** the (optionally corrected) config path for retrieving configuration files from. */ +static string s_configPath = CONFIG_PATH; + /** the path prefix (including trailing "/") for retrieving configuration files from local files (empty for HTTPS). */ static string s_configLocalPrefix = ""; @@ -327,7 +335,7 @@ error_t parse_opt(int key, char *arg, struct argp_state *state) { argp_error(state, "invalid configpath"); return EINVAL; } - opt->configPath = arg; + s_configPath = arg; break; case 's': // --scanconfig[=ADDR] (ADDR=|full|) opt->scanConfig = true; @@ -1056,7 +1064,7 @@ result_t loadDefinitionsFromConfigPath(FileReader* reader, const string& filenam } result_t loadConfigFiles(MessageMap* messages, bool verbose, bool denyRecursive) { - logInfo(lf_main, "loading configuration files from %s", s_opt.configPath); + logInfo(lf_main, "loading configuration files from %s", s_configPath.c_str()); messages->lock(); messages->clear(); s_globalTemplates.clear(); @@ -1074,8 +1082,8 @@ result_t loadConfigFiles(MessageMap* messages, bool verbose, bool denyRecursive) if (result == RESULT_OK) { logInfo(lf_main, "read config files, got %d messages", messages->size()); } else { - logError(lf_main, "error reading config files from %s: %s, last error: %s", s_opt.configPath, - getResultCode(result), errorDescription.c_str()); + logError(lf_main, "error reading config files from %s: %s, last error: %s", s_configPath.c_str(), + getResultCode(result), errorDescription.c_str()); } messages->unlock(); return s_opt.checkConfig ? result : RESULT_OK; @@ -1350,17 +1358,25 @@ int main(int argc, char* argv[]) { return EINVAL; } - string configPath = string(s_opt.configPath); - if (configPath.find("://") == string::npos) { - s_configLocalPrefix = configPath[configPath.length()-1] == '/' ? configPath : configPath + "/"; + if (!s_configPath.empty() && s_configPath[s_configPath.length()-1] != '/') { + s_configPath += "/"; + } + if (s_configPath.find("://") == string::npos) { + s_configLocalPrefix = s_configPath; } else { if (!s_opt.scanConfig) { logError(lf_main, "invalid configpath without scanconfig"); return EINVAL; } + size_t pos = s_configPath.find(PREVIOUS_CONFIG_PATH_SUFFIX); + if (pos != string::npos) { + string newPath = s_configPath.substr(0, pos) + CONFIG_PATH_SUFFIX + s_configPath.substr(pos+strlen(PREVIOUS_CONFIG_PATH_SUFFIX)); + logNotice(lf_main, "replaced old configPath %s with new one: %s", s_configPath.c_str(), newPath.c_str()); + s_configPath = newPath; + } uint16_t configPort = 80; string proto, configHost; - if (!HttpClient::parseUrl(configPath, &proto, &configHost, &configPort, &s_configUriPrefix)) { + if (!HttpClient::parseUrl(s_configPath, &proto, &configHost, &configPort, &s_configUriPrefix)) { logError(lf_main, "invalid configPath URL"); return EINVAL; } diff --git a/src/ebusd/main.h b/src/ebusd/main.h index 4fc89097..c83e6660 100644 --- a/src/ebusd/main.h +++ b/src/ebusd/main.h @@ -41,7 +41,6 @@ struct options { bool initialSend; //!< send an initial escape symbol after connecting device unsigned int extraLatency; //!< extra transfer latency in ms [0 for USB, 10 for IP] - const char* configPath; //!< path to CSV configuration files [https://cfg.ebusd.eu/] bool scanConfig; //!< pick configuration files matching initial scan /** the initial address to scan for scanconfig * (@a ESC=none, 0xfe=broadcast ident, @a SYN=full scan, else: single slave address). */