//**********************************Init Config****************************************// int initConfig(char* configFile) { t_config* _config; int failure = 0; int getConfigInt(char *property) { if (config_has_property(_config, property)) { return config_get_int_value(_config, property); } failure = 1; log_error(logger, "Config not found for key %s", property); return -1; } char* getConfigString(char* property) { if (config_has_property(_config, property)) { return config_get_string_value(_config, property); } failure = 1; log_error(logger, "Config not found for key %s", property); return ""; } _config = config_create(configFile); cfgJob = malloc(sizeof(t_configJob)); cfgJob->PUERTO_MARTA = getConfigInt("PUERTO_MARTA"); cfgJob->IP_MARTA = strdup(getConfigString("IP_MARTA")); cfgJob->MAPPER = strdup(getConfigString("MAPPER")); cfgJob->REDUCER = strdup(getConfigString("REDUCER")); cfgJob->RESULTADO = strdup(getConfigString("RESULTADO")); cfgJob->LIST_ARCHIVOS = strdup(getConfigString("LIST_ARCHIVOS")); cfgJob->COMBINER = getConfigInt("COMBINER"); if (!failure) { log_info(logger, "PUERTO MARTA: %d", cfgJob->PUERTO_MARTA); log_info(logger, "IP MARTA: %s", cfgJob->IP_MARTA); log_info(logger, "MAPPER: %s", cfgJob->MAPPER); log_info(logger, "REDUCER: %s", cfgJob->REDUCER); log_info(logger, "RESULTADO: %s", cfgJob->RESULTADO); log_info(logger, "ARCHIVOS: %s", cfgJob->LIST_ARCHIVOS); log_info(logger, "COMBINER: %d", cfgJob->COMBINER); } config_destroy(_config); return !failure; }
const char* synce_ini_get_string(SynceIni* ini, const char* section, const char* key) { if (ini) return getConfigString(ini->cfg, (char*)section, (char*)key); else return NULL; }
int getConfigDouble (struct configFile *cfg, char *section, char *key) { char *configString; if ( (configString=getConfigString(cfg, section, key))==NULL) { return 0; } return atof (configString); }
Object::ptr RhrController::getConfigObject() const { auto conf = getConfigString(); CERR << "creating config object: " << conf << std::endl; Points::ptr points(new Points(Index(0))); points->addAttribute("_rhr_config", conf); points->addAttribute("_plugin", "RhrClient"); return points; }
static bool getConfigBool(const std::string &key, bool defaultValue) { std::string value = getConfigString(key, defaultValue ? "true" : "false"); const char *cvalue = value.c_str(); if (!strcasecmp(cvalue, "true")) return true; if (!strcasecmp(cvalue, "false")) return false; return defaultValue; }
bool mql4j::config::getConfigBool(const string key, const bool dflt) { string str = getConfigString(key, dflt ? "true" : "false"); transform(str.begin(), str.end(), str.begin(), ::toupper); if(str.compare("TRUE") == 0) { return true; } else if(str.compare("FALSE") == 0) { return false; } else { LOG_WARN << "Configuration '" + key + "' (" + str + ") is invalid. Set to true or false"; return false; } }
static SynceInfo* synce_info_from_file(const char* filename) { SynceInfo* result = calloc(1, sizeof(SynceInfo)); bool success = false; char* connection_filename; struct configFile* config = NULL; if (filename) connection_filename = strdup(filename); else synce_get_connection_filename(&connection_filename); config = readConfigFile(connection_filename); if (!config) { synce_error("unable to open file: %s", connection_filename); goto exit; } result->dccm_pid = getConfigInt(config, "dccm", "pid"); result->key = getConfigInt(config, "device", "key"); result->os_version = getConfigInt(config, "device", "os_version"); result->build_number = getConfigInt(config, "device", "build_number"); result->processor_type = getConfigInt(config, "device", "processor_type"); result->partner_id_1 = getConfigInt(config, "device", "partner_id_1"); result->partner_id_2 = getConfigInt(config, "device", "partner_id_2"); result->ip = STRDUP(getConfigString(config, "device", "ip")); result->password = STRDUP(getConfigString(config, "device", "password")); result->name = STRDUP(getConfigString(config, "device", "name")); result->os_name = STRDUP(getConfigString(config, "device", "os_name")); result->model = STRDUP(getConfigString(config, "device", "model")); result->transport = STRDUP(getConfigString(config, "connection", "transport")); success = true; exit: FREE(connection_filename); if (config) unloadConfigFile(config); if (success) return result; else { synce_info_destroy(result); return NULL; } }
int initConfig(char* configFile) { t_config* _config; int failure = 0; int getConfigInt(char *property) { if (config_has_property(_config, property)) { return config_get_int_value(_config, property); } failure = 1; log_error(logger, "Config not found for key %s", property); return -1; } char* getConfigString(char *property) { if (config_has_property(_config, property)) { return config_get_string_value(_config, property); } failure = 1; log_error(logger, "Config not found for key %s", property); return ""; } _config = config_create(configFile); cfgMaRTA = malloc(sizeof(t_configMaRTA)); log_info(logger, "Loading config..."); cfgMaRTA->listenPort = getConfigInt("PUERTO_LISTEN"); cfgMaRTA->fsIP = strdup(getConfigString("IP_FILE_SYSTEM")); cfgMaRTA->fsPort = getConfigInt("PUERTO_FILE_SYSTEM"); if (!failure) { log_info(logger, "Port to listen: %d", cfgMaRTA->listenPort); log_info(logger, "FileSystem IP: %s", cfgMaRTA->fsIP); log_info(logger, "FileSystem Port: %d", cfgMaRTA->fsPort); } config_destroy(_config); return !failure; }
void bsodFatal(const char *component) { /* show no more than one bsod while shutting down/crashing */ if (bsodhandled) return; bsodhandled = true; if (!component) component = "Enigma2"; /* Retrieve current ringbuffer state */ const char* logp1; unsigned int logs1; const char* logp2; unsigned int logs2; retrieveLogBuffer(&logp1, &logs1, &logp2, &logs2); FILE *f; std::string crashlog_name; std::ostringstream os; time_t t = time(0); struct tm tm; char tm_str[32]; localtime_r(&t, &tm); strftime(tm_str, sizeof(tm_str), "%Y-%m-%d_%H-%M-%S", &tm); os << getConfigString("config.crash.debug_path", "/home/root/logs/"); os << "enigma2_crash_"; os << tm_str; os << ".log"; crashlog_name = os.str(); f = fopen(crashlog_name.c_str(), "wb"); if (f == NULL) { /* No hardisk. If there is a crash log in /home/root, leave it * alone because we may be in a crash loop and writing this file * all night long may damage the flash. Also, usually the first * crash log is the most interesting one. */ crashlog_name = "/home/root/logs/enigma2_crash.log"; if ((access(crashlog_name.c_str(), F_OK) == 0) || ((f = fopen(crashlog_name.c_str(), "wb")) == NULL)) { /* Re-write the same file in /tmp/ because it's expected to * be in RAM. So the first crash log will end up in /home * and the last in /tmp */ crashlog_name = "/tmp/enigma2_crash.log"; f = fopen(crashlog_name.c_str(), "wb"); } } if (f) { time_t t = time(0); struct tm tm; char tm_str[32]; localtime_r(&t, &tm); strftime(tm_str, sizeof(tm_str), "%a %b %_d %T %Y", &tm); fprintf(f, "OpenBh Enigma2 Crashlog\n\n" "Crashdate = %s\n\n" "%s\n" "Compiled = %s\n" "Skin = %s\n" "Component = %s\n\n" "Kernel CMDline = %s\n" "Nim Sockets = %s\n", tm_str, stringFromFile("/etc/image-version").c_str(), __DATE__, getConfigString("config.skin.primary_skin", "Default Skin").c_str(), component, stringFromFile("/proc/cmdline").c_str(), stringFromFile("/proc/bus/nim_sockets").c_str() ); /* dump the log ringbuffer */ fprintf(f, "\n\n"); if (logp1) fwrite(logp1, 1, logs1, f); if (logp2) fwrite(logp2, 1, logs2, f); fclose(f); } ePtr<gMainDC> my_dc; gMainDC::getInstance(my_dc); gPainter p(my_dc); p.resetOffset(); p.resetClip(eRect(ePoint(0, 0), my_dc->size())); p.setBackgroundColor(gRGB(0x010000)); p.setForegroundColor(gRGB(0xFFFFFF)); int hd = my_dc->size().width() == 1920; ePtr<gFont> font = new gFont("Regular", hd ? 30 : 20); p.setFont(font); p.clear(); eRect usable_area = eRect(hd ? 30 : 100, hd ? 30 : 70, my_dc->size().width() - (hd ? 60 : 150), hd ? 150 : 100); os.str(""); os.clear(); os << "We are really sorry. Your receiver encountered " "a software problem, and needs to be restarted.\n" "Please upload the crash log " << crashlog_name << " to www.vuplus-community.net\n" "Your STB will restart in 10 seconds!\n" "Component: " << component; p.renderText(usable_area, os.str().c_str(), gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT); std::string logtail; int lines = 20; if (logp2) { unsigned int size = logs2; while (size) { const char* r = (const char*)memrchr(logp2, '\n', size); if (r) { size = r - logp2; --lines; if (!lines) { logtail = std::string(r, logs2 - size); break; } } else { logtail = std::string(logp2, logs2); break; } } } if (lines && logp1) { unsigned int size = logs1; while (size) { const char* r = (const char*)memrchr(logp1, '\n', size); if (r) { --lines; size = r - logp1; if (!lines) { logtail += std::string(r, logs1 - size); break; } } else { logtail += std::string(logp1, logs1); break; } } } if (!logtail.empty()) { font = new gFont("Regular", hd ? 21 : 14); p.setFont(font); usable_area = eRect(hd ? 30 : 100, hd ? 180 : 170, my_dc->size().width() - (hd ? 60 : 180), my_dc->size().height() - (hd ? 30 : 20)); p.renderText(usable_area, logtail, gPainter::RT_HALIGN_LEFT); } sleep(10); /* * When 'component' is NULL, we are called because of a python exception. * In that case, we'd prefer to to a clean shutdown of the C++ objects, * and this should be safe, because the crash did not occur in the * C++ part. * However, when we got here for some other reason, a segfault probably, * we prefer to stop immediately instead of performing a clean shutdown. * We'd risk destroying things with every additional instruction we're * executing here. */ if (component) raise(SIGKILL); }
void bsodFatal(const char *component) { /* show no more than one bsod while shutting down/crashing */ if (bsodhandled) return; bsodhandled = true; std::string lines = getLogBuffer(); /* find python-tracebacks, and extract " File "-strings */ size_t start = 0; std::string crash_emailaddr = CRASH_EMAILADDR; std::string crash_component = "enigma2"; if (component) crash_component = component; else { while ((start = lines.find("\n File \"", start)) != std::string::npos) { start += 9; size_t end = lines.find("\"", start); if (end == std::string::npos) break; end = lines.rfind("/", end); /* skip a potential prefix to the path */ unsigned int path_prefix = lines.find("/usr/", start); if (path_prefix != std::string::npos && path_prefix < end) start = path_prefix; if (end == std::string::npos) break; std::string filename(lines.substr(start, end - start) + INFOFILE); std::ifstream in(filename.c_str()); if (in.good()) { std::getline(in, crash_emailaddr) && std::getline(in, crash_component); in.close(); } } } FILE *f; std::string crashlog_name; std::ostringstream os; os << "/media/hdd/enigma2_crash_"; os << time(0); os << ".log"; crashlog_name = os.str(); f = fopen(crashlog_name.c_str(), "wb"); if (f == NULL) { /* No hardisk. If there is a crash log in /home/root, leave it * alone because we may be in a crash loop and writing this file * all night long may damage the flash. Also, usually the first * crash log is the most interesting one. */ crashlog_name = "/home/root/enigma2_crash.log"; if ((access(crashlog_name.c_str(), F_OK) == 0) || ((f = fopen(crashlog_name.c_str(), "wb")) == NULL)) { /* Re-write the same file in /tmp/ because it's expected to * be in RAM. So the first crash log will end up in /home * and the last in /tmp */ crashlog_name = "/tmp/enigma2_crash.log"; f = fopen(crashlog_name.c_str(), "wb"); } } if (f) { time_t t = time(0); struct tm tm; char tm_str[32]; localtime_r(&t, &tm); strftime(tm_str, sizeof(tm_str), "%a %b %_d %T %Y", &tm); XmlGenerator xml(f); xml.open("openpli"); xml.open("enigma2"); xml.string("crashdate", tm_str); xml.string("compiledate", __DATE__); xml.string("contactemail", crash_emailaddr); xml.comment("Please email this crashlog to above address"); xml.string("skin", getConfigString("config.skin.primary_skin", "Default Skin")); xml.string("sourcedate", enigma2_date); xml.string("branch", enigma2_branch); xml.string("rev", enigma2_rev); xml.string("version", PACKAGE_VERSION); xml.close(); xml.open("image"); if(access("/proc/stb/info/boxtype", F_OK) != -1) { xml.stringFromFile("stbmodel", "/proc/stb/info/boxtype"); } else if (access("/proc/stb/info/vumodel", F_OK) != -1) { xml.stringFromFile("stbmodel", "/proc/stb/info/vumodel"); } else if (access("/proc/stb/info/model", F_OK) != -1) { xml.stringFromFile("stbmodel", "/proc/stb/info/model"); } xml.cDataFromCmd("kernelversion", "uname -a"); xml.stringFromFile("kernelcmdline", "/proc/cmdline"); xml.stringFromFile("nimsockets", "/proc/bus/nim_sockets"); xml.cDataFromFile("imageversion", "/etc/image-version"); xml.cDataFromFile("imageissue", "/etc/issue.net"); xml.close(); xml.open("crashlogs"); xml.cDataFromString("enigma2crashlog", getLogBuffer()); xml.close(); xml.close(); fclose(f); } ePtr<gMainDC> my_dc; gMainDC::getInstance(my_dc); gPainter p(my_dc); p.resetOffset(); p.resetClip(eRect(ePoint(0, 0), my_dc->size())); p.setBackgroundColor(gRGB(0x008000)); p.setForegroundColor(gRGB(0xFFFFFF)); int hd = my_dc->size().width() == 1920; ePtr<gFont> font = new gFont("Regular", hd ? 30 : 20); p.setFont(font); p.clear(); eRect usable_area = eRect(hd ? 30 : 100, hd ? 30 : 70, my_dc->size().width() - (hd ? 60 : 150), hd ? 150 : 100); os.str(""); os.clear(); os << "We are really sorry. Your STB encountered " "a software problem, and needs to be restarted.\n" "Please send the logfile " << crashlog_name << " to " << crash_emailaddr << ".\n" "Your STB restarts in 10 seconds!\n" "Component: " << crash_component; p.renderText(usable_area, os.str().c_str(), gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT); usable_area = eRect(hd ? 30 : 100, hd ? 180 : 170, my_dc->size().width() - (hd ? 60 : 180), my_dc->size().height() - (hd ? 30 : 20)); int i; start = std::string::npos + 1; for (i=0; i<20; ++i) { start = lines.rfind('\n', start - 1); if (start == std::string::npos) { start = 0; break; } } font = new gFont("Regular", hd ? 21 : 14); p.setFont(font); p.renderText(usable_area, lines.substr(start), gPainter::RT_HALIGN_LEFT); sleep(10); /* * When 'component' is NULL, we are called because of a python exception. * In that case, we'd prefer to to a clean shutdown of the C++ objects, * and this should be safe, because the crash did not occur in the * C++ part. * However, when we got here for some other reason, a segfault probably, * we prefer to stop immediately instead of performing a clean shutdown. * We'd risk destroying things with every additional instruction we're * executing here. */ if (component) raise(SIGKILL); }
void DirectoryList::initialize(bool simple_mode) { if (mode != NotInitialized) return; clear(); PathName val = getConfigString(); if (simple_mode) { mode = SimpleList; } else { if (keyword(None, val, "None", "") || keyword(Full, val, "Full", "")) { return; } if (! keyword(Restrict, val, "Restrict", " \t")) { gds__log("DirectoryList: unknown parameter '%s', defaulting to None", val.c_str()); mode = None; return; } } size_t last = 0; PathName root = Config::getRootDirectory(); size_t i; for (i = 0; i < val.length(); i++) { if (val[i] == ';') { PathName dir = ""; if (i > last) { dir = val.substr(last, i - last); dir.trim(); } if (PathUtils::isRelative(dir)) { PathName newdir; PathUtils::concatPath(newdir, root, dir); dir = newdir; } add(ParsedPath(dir)); last = i + 1; } } PathName dir = ""; if (i > last) { dir = val.substr(last, i - last); dir.trim(); } if (PathUtils::isRelative(dir)) { PathName newdir; PathUtils::concatPath(newdir, root, dir); dir = newdir; } add(ParsedPath(dir)); }
void bsodFatal(const char *component) { /* show no more than one bsod while shutting down/crashing */ if (bsodhandled) return; bsodhandled = true; std::ostringstream os; os << getConfigString("config.crash.debug_path", "/home/root/logs/"); os << "enigma2_crash_"; os << time(0); os << ".log"; FILE *f = fopen(os.str().c_str(), "wb"); std::string lines = getLogBuffer(); /* find python-tracebacks, and extract " File "-strings */ size_t start = 0; std::string crash_emailaddr = CRASH_EMAILADDR; std::string crash_component = "enigma2"; if (component) crash_component = component; else { while ((start = lines.find("\n File \"", start)) != std::string::npos) { start += 9; size_t end = lines.find("\"", start); if (end == std::string::npos) break; end = lines.rfind("/", end); /* skip a potential prefix to the path */ unsigned int path_prefix = lines.find("/usr/", start); if (path_prefix != std::string::npos && path_prefix < end) start = path_prefix; if (end == std::string::npos) break; std::string filename(lines.substr(start, end - start) + INFOFILE); std::ifstream in(filename.c_str()); if (in.good()) { std::getline(in, crash_emailaddr) && std::getline(in, crash_component); in.close(); } } } if (f) { time_t t = time(0); struct tm tm; char tm_str[32]; bool detailedCrash = getConfigBool("config.crash.details", true); localtime_r(&t, &tm); strftime(tm_str, sizeof(tm_str), "%a %b %_d %T %Y", &tm); XmlGenerator xml(f); xml.open("openvix"); xml.open("enigma2"); xml.string("crashdate", tm_str); xml.string("compiledate", __DATE__); xml.string("contactemail", crash_emailaddr); xml.comment("Please email this crashlog to above address"); xml.string("skin", getConfigString("config.skin.primary_skin", "Default Skin")); xml.string("sourcedate", enigma2_date); xml.string("version", PACKAGE_VERSION); xml.close(); xml.open("image"); if(access("/proc/stb/info/boxtype", F_OK) != -1) { xml.stringFromFile("stbmodel", "/proc/stb/info/boxtype"); } else if (access("/proc/stb/info/vumodel", F_OK) != -1) { xml.stringFromFile("stbmodel", "/proc/stb/info/vumodel"); } else if (access("/proc/stb/info/model", F_OK) != -1) { xml.stringFromFile("stbmodel", "/proc/stb/info/model"); } xml.cDataFromCmd("kernelversion", "uname -a"); xml.stringFromFile("kernelcmdline", "/proc/cmdline"); xml.stringFromFile("nimsockets", "/proc/bus/nim_sockets"); if (!getConfigBool("config.plugins.crashlogautosubmit.sendAnonCrashlog", true)) { xml.cDataFromFile("stbca", "/proc/stb/info/ca"); xml.cDataFromFile("enigma2settings", eEnv::resolve("${sysconfdir}/enigma2/settings"), ".password="******"config.plugins.crashlogautosubmit.addNetwork", false)) { xml.cDataFromFile("networkinterfaces", "/etc/network/interfaces"); xml.cDataFromFile("dns", "/etc/resolv.conf"); xml.cDataFromFile("defaultgateway", "/etc/default_gw"); } if (getConfigBool("config.plugins.crashlogautosubmit.addWlan", false)) xml.cDataFromFile("wpasupplicant", "/etc/wpa_supplicant.conf"); xml.cDataFromFile("imageversion", "/etc/image-version"); xml.cDataFromFile("imageissue", "/etc/issue.net"); xml.close(); if (detailedCrash) { xml.open("software"); xml.cDataFromCmd("enigma2software", "opkg list-installed 'enigma2*'"); if(access("/proc/stb/info/boxtype", F_OK) != -1) { xml.cDataFromCmd("xtrendsoftware", "opkg list-installed 'et-*'"); } else if (access("/proc/stb/info/vumodel", F_OK) != -1) { xml.cDataFromCmd("vuplussoftware", "opkg list-installed 'vuplus*'"); } else if (access("/proc/stb/info/model", F_OK) != -1) { xml.cDataFromCmd("dreamboxsoftware", "opkg list-installed 'dream*'"); } xml.cDataFromCmd("gstreamersoftware", "opkg list-installed 'gst*'"); xml.close(); } xml.open("crashlogs"); xml.cDataFromString("enigma2crashlog", getLogBuffer()); xml.close(); xml.close(); fclose(f); } ePtr<gMainDC> my_dc; gMainDC::getInstance(my_dc); gPainter p(my_dc); p.resetOffset(); p.resetClip(eRect(ePoint(0, 0), my_dc->size())); p.setBackgroundColor(gRGB(0x010000)); p.setForegroundColor(gRGB(0xFFFFFF)); ePtr<gFont> font = new gFont("Regular", 20); p.setFont(font); p.clear(); eRect usable_area = eRect(100, 70, my_dc->size().width() - 150, 100); std::string text("We are really sorry. Your receiver encountered " "a software problem, and needs to be restarted. " "Please send the logfile created in /hdd/ to " + crash_emailaddr + ".\n" "Your receiver restarts in 10 seconds!\n" "Component: " + crash_component); p.renderText(usable_area, text.c_str(), gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT); usable_area = eRect(100, 170, my_dc->size().width() - 180, my_dc->size().height() - 20); int i; start = std::string::npos + 1; for (i=0; i<20; ++i) { start = lines.rfind('\n', start - 1); if (start == std::string::npos) { start = 0; break; } } font = new gFont("Regular", 14); p.setFont(font); p.renderText(usable_area, lines.substr(start), gPainter::RT_HALIGN_LEFT); sleep(10); /* * When 'component' is NULL, we are called because of a python exception. * In that case, we'd prefer to to a clean shutdown of the C++ objects, * and this should be safe, because the crash did not occur in the * C++ part. * However, when we got here for some other reason, a segfault probably, * we prefer to stop immediately instead of performing a clean shutdown. * We'd risk destroying things with every additional instruction we're * executing here. */ if (component) raise(SIGKILL); }
string mql4j::config::getLogLevel() { return getConfigString("logLevel", MQL4J_CONFIG_DEFAULT_LOGLEVEL); }
string mql4j::config::getLogfile() { return getConfigString("logfile", MQL4J_CONFIG_DEFAULT_LOGFILE); }
string mql4j::config::getJavaMaxMem() { return getConfigString("javaMaxMem", MQL4J_CONFIG_DEFAULT_JAVA_MAX_MEM); }
string mql4j::config::getHomeDir() { return getConfigString("homeDir", MQL4J_CONFIG_DEFAULT_HOME_DIR); }
static int getConfigInt(const std::string &key) { std::string value = getConfigString(key, "0"); return atoi(value.c_str()); }