replace old config path

This commit is contained in:
John
2022-02-27 17:46:47 +01:00
parent ebd705b534
commit 1cc1d1bf50
2 changed files with 27 additions and 12 deletions
+27 -11
View File
@@ -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=<empty>|full|<hexaddr>)
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;
}
-1
View File
@@ -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). */