// // Copyright (c) 2018 Wind River Systems, Inc. // // SPDX-License-Identifier: Apache-2.0 // #include #include #include #include #include "fmAPI.h" #include "fmLog.h" #include "fmFile.h" #include "fmConfig.h" #include "fmMutex.h" #include "fmConstants.h" #include "fmSnmpConstants.h" #include "fmSnmpUtils.h" typedef std::map configParams; static const char *conf = NULL; static int config_loaded = false; CFmMutex & getConfMutex(){ static CFmMutex *m = new CFmMutex; return *m; } configParams &getConfigMap(){ static configParams conf; return conf; } void fm_conf_set_file(const char *fn){ conf = fn; } void fm_get_config_paramters(){ CfmFile f; std::string delimiter = "="; std::string line, key, value; size_t pos = 0; if (conf == NULL){ FM_ERROR_LOG("The config file is not set\n"); exit(-1); } if (!f.open(conf, CfmFile::READ, false)){ FM_ERROR_LOG("Failed to open config file: %s\n", conf); exit(-1); } while (true){ if (!f.read_line(line)) break; if (line.size() == 0) continue; if (line[0] == '#') continue; pos = line.find(delimiter); key = line.substr(0, pos); value = line.erase(0, pos + delimiter.length()); getConfigMap()[key] = value; if (key.compare(FM_SNMP_TRAPDEST) == 0){ set_trap_dest_list(value); } if (key.compare(FM_SQL_CONNECTION) != 0){ // Don't log sql_connection, as it has a password FM_INFO_LOG("Config key (%s), value (%s)", key.c_str(), value.c_str()); } } } bool fm_get_config_key(std::string &key, std::string &val){ configParams::iterator it; CFmMutexGuard m(getConfMutex()); if (!config_loaded){ fm_get_config_paramters(); config_loaded = true; } it = getConfigMap().find(key); if (it != getConfigMap().end()){ val = it->second; return true; } return false; }