static switch_status_t do_config(void) { char *cf = "xml_cdr.conf"; switch_xml_t cfg, xml, settings, param; if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf); return SWITCH_STATUS_TERM; } if ((settings = switch_xml_child(cfg, "settings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { char *var = (char *) switch_xml_attr_soft(param, "name"); char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcasecmp(var, "cred")) { globals.cred = val; } else if (!strcasecmp(var, "url")) { globals.url = val; } else if (!strcasecmp(var, "delay")) { globals.delay = (uint32_t) atoi(val); } else if (!strcasecmp(var, "retries")) { globals.retries = (uint32_t) atoi(val); } else if (!strcasecmp(var, "logDir")) { if (switch_strlen_zero(val)) { globals.logDir = SWITCH_GLOBAL_dirs.log_dir; } else { globals.logDir = val; } } else if (!strcasecmp(var, "errLogDir")) { globals.errLogDir = val; } } } if(globals.retries < 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "retries is negative, setting to 0\n"); globals.retries = 0; } if(globals.retries && globals.delay<=0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "retries set but delay 0 setting to 5000ms\n"); globals.delay = 5000; } if(!switch_strlen_zero(globals.url) && switch_strlen_zero(globals.errLogDir)) { if ((globals.errLogDir = switch_mprintf("%s/xml_cdr", SWITCH_GLOBAL_dirs.log_dir))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n"); return SWITCH_STATUS_FALSE; } } return SWITCH_STATUS_SUCCESS; }