int shutdown; char *mongo_host; uint32_t mongo_port; char *mongo_namespace; mongo mongo_conn[1]; switch_mutex_t *mongo_mutex; switch_bool_t log_b; } globals; static switch_xml_config_item_t config_settings[] = { /* key, flags, ptr, default_value, syntax, helptext */ SWITCH_CONFIG_ITEM_STRING_STRDUP("host", CONFIG_REQUIRED, &globals.mongo_host, "127.0.0.1", NULL, "MongoDB server host address"), SWITCH_CONFIG_ITEM_STRING_STRDUP("namespace", CONFIG_REQUIRED, &globals.mongo_namespace, NULL, "database.collection", "MongoDB namespace"), /* key, type, flags, ptr, default_value, data, syntax, helptext */ SWITCH_CONFIG_ITEM("port", SWITCH_CONFIG_INT, CONFIG_REQUIRED, &globals.mongo_port, 27017, NULL, NULL, "MongoDB server TCP port"), SWITCH_CONFIG_ITEM("log-b-leg", SWITCH_CONFIG_BOOL, CONFIG_RELOADABLE, &globals.log_b, SWITCH_TRUE, NULL, NULL, "Log B-leg in addition to A-leg"), SWITCH_CONFIG_ITEM_END() }; SWITCH_MODULE_LOAD_FUNCTION(mod_cdr_mongodb_load); SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_cdr_mongodb_shutdown); SWITCH_MODULE_DEFINITION(mod_cdr_mongodb, mod_cdr_mongodb_load, mod_cdr_mongodb_shutdown, NULL); static void set_bson_profile_data(bson *b, switch_caller_profile_t *caller_profile) { bson_append_string(b, "username", caller_profile->username); bson_append_string(b, "dialplan", caller_profile->dialplan); bson_append_string(b, "caller_id_name", caller_profile->caller_id_name);
switch_goto_status(SWITCH_STATUS_SUCCESS, done); done: switch_cache_db_release_db_handle(&dbh); return status; } static switch_xml_config_string_options_t config_opt_dsn = { NULL, 0, NULL }; /* anything is ok here */ static switch_xml_config_item_t instructions[] = { /* parameter name type reloadable pointer default value options structure */ SWITCH_CONFIG_ITEM_STRING_STRDUP("url", CONFIG_RELOAD, &globals.url, NULL, "http://server.example.com/app?number=${caller_id_number}", "URL for the CID lookup service"), SWITCH_CONFIG_ITEM_STRING_STRDUP("whitepages-apikey", CONFIG_RELOAD, &globals.whitepages_apikey, NULL, "api key for whitepages.com", "api key for whitepages.com"), SWITCH_CONFIG_ITEM("cache", SWITCH_CONFIG_BOOL, CONFIG_RELOAD, &globals.cache, SWITCH_FALSE, NULL, "true|false", "whether to cache via cidlookup"), SWITCH_CONFIG_ITEM("cache-expire", SWITCH_CONFIG_INT, CONFIG_RELOAD, &globals.cache_expire, (void *) 300, NULL, "expire", "seconds to preserve num->name cache"), SWITCH_CONFIG_ITEM("curl-timeout", SWITCH_CONFIG_INT, CONFIG_RELOAD, &globals.curl_timeout, (void *) 2000, NULL, "timeout for curl", "milliseconds to timeout"), SWITCH_CONFIG_ITEM("curl-warning-duration", SWITCH_CONFIG_INT, CONFIG_RELOAD, &globals.curl_warnduration, (void *) 1000, NULL, "warning when curl queries are longer than specified time", "milliseconds"), SWITCH_CONFIG_ITEM_STRING_STRDUP("sql", CONFIG_RELOAD, &globals.sql, NULL, "sql whre number=${caller_id_number}", "SQL to run if overriding CID"), SWITCH_CONFIG_ITEM_STRING_STRDUP("citystate-sql", CONFIG_RELOAD, &globals.citystate_sql, NULL, "sql to look up city/state info", "SQL to run if overriding CID"), SWITCH_CONFIG_ITEM_CALLBACK("odbc-dsn", SWITCH_CONFIG_STRING, CONFIG_RELOAD, &globals.odbc_dsn, "", config_callback_dsn, &config_opt_dsn, "db:user:passwd", "Database to use."), SWITCH_CONFIG_ITEM_END() }; static switch_status_t do_config(switch_bool_t reload)
uint32_t initial_silence; uint32_t greeting; uint32_t after_greeting_silence; uint32_t total_analysis_time; uint32_t minimum_word_length; uint32_t between_words_silence; uint32_t maximum_number_of_words; uint32_t silence_threshold; uint32_t maximum_word_length; } globals; static switch_xml_config_item_t instructions[] = { SWITCH_CONFIG_ITEM( "initial_silence", SWITCH_CONFIG_INT, CONFIG_RELOADABLE, &globals.initial_silence, (void *) 2500, NULL, NULL, NULL), SWITCH_CONFIG_ITEM( "greeting", SWITCH_CONFIG_INT, CONFIG_RELOADABLE, &globals.greeting, (void *) 1500, NULL, NULL, NULL), SWITCH_CONFIG_ITEM( "after_greeting_silence", SWITCH_CONFIG_INT,
static switch_status_t config_validate_spool_dir(switch_xml_config_item_t *item, const char *newvalue, switch_config_callback_type_t callback_type, switch_bool_t changed) { if ((callback_type == CONFIG_LOAD || callback_type == CONFIG_RELOAD)) { if (zstr(newvalue)) { globals.spool_dir = switch_core_sprintf(globals.pool, "%s%scdr-pg-csv", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR); } } return SWITCH_STATUS_SUCCESS; } static switch_xml_config_item_t config_settings[] = { /* key, type, flags, ptr, default_value, data, syntax, helptext */ SWITCH_CONFIG_ITEM_STRING_STRDUP("db-info", CONFIG_RELOADABLE, &globals.db_info, "dbname=cdr", NULL, NULL), SWITCH_CONFIG_ITEM_STRING_STRDUP("db-table", CONFIG_RELOADABLE, &globals.db_table, "cdr", NULL, NULL), SWITCH_CONFIG_ITEM("legs", SWITCH_CONFIG_ENUM, CONFIG_RELOADABLE, &globals.legs, (void *) CDR_LEG_A, &config_opt_cdr_leg_enum, "a|b|ab", NULL), SWITCH_CONFIG_ITEM("spool-format", SWITCH_CONFIG_ENUM, CONFIG_RELOADABLE, &globals.spool_format, (void *) SPOOL_FORMAT_CSV, &config_opt_spool_format_enum, "csv|sql", "Disk spool format to use if SQL insert fails."), SWITCH_CONFIG_ITEM("rotate-on-hup", SWITCH_CONFIG_BOOL, CONFIG_RELOADABLE, &globals.rotate, SWITCH_FALSE, NULL, NULL, NULL), SWITCH_CONFIG_ITEM("debug", SWITCH_CONFIG_BOOL, CONFIG_RELOADABLE, &globals.debug, SWITCH_FALSE, NULL, NULL, NULL), /* key, type, flags, ptr, defaultvalue, function, functiondata, syntax, helptext */ SWITCH_CONFIG_ITEM_CALLBACK("spool-dir", SWITCH_CONFIG_STRING, CONFIG_RELOADABLE, &globals.spool_dir, NULL, config_validate_spool_dir, NULL, NULL, NULL), SWITCH_CONFIG_ITEM_END() }; static off_t fd_size(int fd) { struct stat s = { 0 }; fstat(fd, &s); return s.st_size;
#include "credis.h" SWITCH_MODULE_LOAD_FUNCTION(mod_redis_load); SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_redis_shutdown); SWITCH_MODULE_DEFINITION(mod_redis, mod_redis_load, mod_redis_shutdown, NULL); static struct{ char *host; int port; int timeout; } globals; static switch_xml_config_item_t instructions[] = { /* parameter name type reloadable pointer default value options structure */ SWITCH_CONFIG_ITEM_STRING_STRDUP("host", CONFIG_RELOAD, &globals.host, NULL, "localhost", "Hostname for redis server"), SWITCH_CONFIG_ITEM("port", SWITCH_CONFIG_INT, CONFIG_RELOADABLE, &globals.port, (void *) 6379, NULL,NULL, NULL), SWITCH_CONFIG_ITEM("timeout", SWITCH_CONFIG_INT, CONFIG_RELOADABLE, &globals.timeout, (void *) 10000, NULL,NULL, NULL), SWITCH_CONFIG_ITEM_END() }; /* HASH STUFF */ typedef struct { switch_hash_t *hash; switch_mutex_t *mutex; } limit_redis_private_t; static switch_status_t redis_factory(REDIS *redis) { if (!((*redis) = credis_connect(globals.host, globals.port, globals.timeout))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't connect to redis server at %s:%d timeout:%d\n", globals.host, globals.port, globals.timeout); return SWITCH_STATUS_FALSE;
char *ret = NULL; char *sql = NULL; sql = switch_mprintf("select count(hostname) from limit_data where hostname='%q'", globals.hostname); limit_execute_sql2str(sql, count, sizeof(count)); switch_safe_free(sql); ret = switch_mprintf("Tracking %s resources for hostname %s.", count, globals.hostname); return ret; } /* INIT / Config */ static switch_xml_config_string_options_t limit_config_dsn = { NULL, 0, "[^:]+:[^:]+:.+" }; static switch_xml_config_item_t config_settings[] = { SWITCH_CONFIG_ITEM("odbc-dsn", SWITCH_CONFIG_STRING, 0, &globals.odbc_dsn, NULL, &limit_config_dsn, "dsn:username:password", "If set, the ODBC DSN used by the limit and db applications"), SWITCH_CONFIG_ITEM_END() }; static switch_status_t do_config() { switch_cache_db_handle_t *dbh = NULL; switch_status_t status = SWITCH_STATUS_SUCCESS; char *sql = NULL; limit_config_dsn.pool = globals.pool; if (switch_xml_config_parse_module_settings("db.conf", SWITCH_FALSE, config_settings) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "No config file found, defaulting to sqlite\n"); }