#include <stdarg.h>
Include dependency graph for config.h:
This graph shows which files directly or indirectly include this file:
Go to the source code of this file.
Data Structures | |
struct | ast_config_engine |
struct | ast_variable |
Typedefs | |
typedef ast_config * | config_load_func (const char *database, const char *table, const char *configfile, struct ast_config *config, int withcomments) |
typedef ast_config * | realtime_multi_get (const char *database, const char *table, va_list ap) |
typedef int | realtime_update (const char *database, const char *table, const char *keyfield, const char *entity, va_list ap) |
typedef ast_variable * | realtime_var_get (const char *database, const char *table, va_list ap) |
Functions | |
void | ast_category_append (struct ast_config *config, struct ast_category *cat) |
char * | ast_category_browse (struct ast_config *config, const char *prev) |
Goes through categories. | |
int | ast_category_delete (struct ast_config *cfg, char *category) |
void | ast_category_destroy (struct ast_category *cat) |
ast_variable * | ast_category_detach_variables (struct ast_category *cat) |
int | ast_category_exist (const struct ast_config *config, const char *category_name) |
Check for category duplicates. | |
ast_category * | ast_category_get (const struct ast_config *config, const char *category_name) |
Retrieve a category if it exists. | |
ast_category * | ast_category_new (const char *name) |
void | ast_category_rename (struct ast_category *cat, const char *name) |
int | ast_check_realtime (const char *family) |
Check if realtime engine is configured for family returns 1 if family is configured in realtime and engine exists. | |
void | ast_config_destroy (struct ast_config *config) |
Destroys a config. | |
int | ast_config_engine_deregister (struct ast_config_engine *del) |
Deegister config engine. | |
int | ast_config_engine_register (struct ast_config_engine *newconfig) |
Register config engine. | |
ast_category * | ast_config_get_current_category (const struct ast_config *cfg) |
ast_config * | ast_config_internal_load (const char *configfile, struct ast_config *cfg, int withcomments) |
ast_config * | ast_config_load (const char *filename) |
Load a config file. | |
ast_config * | ast_config_load_with_comments (const char *filename) |
ast_config * | ast_config_new (void) |
const char * | ast_config_option (struct ast_config *cfg, const char *cat, const char *var) |
void | ast_config_set_current_category (struct ast_config *cfg, const struct ast_category *cat) |
ast_variable * | ast_load_realtime (const char *family,...) |
Retrieve realtime configuration. | |
ast_config * | ast_load_realtime_multientry (const char *family,...) |
Retrieve realtime configuration. | |
int | ast_update_realtime (const char *family, const char *keyfield, const char *lookup,...) |
Update realtime configuration. | |
void | ast_variable_append (struct ast_category *category, struct ast_variable *variable) |
ast_variable * | ast_variable_browse (const struct ast_config *config, const char *category) |
Goes through variables Somewhat similar in intent as the ast_category_browse. List variables of config file category. | |
int | ast_variable_delete (struct ast_category *category, char *variable, char *match) |
ast_variable * | ast_variable_new (const char *name, const char *value) |
const char * | ast_variable_retrieve (const struct ast_config *config, const char *category, const char *variable) |
Gets a variable. | |
int | ast_variable_update (struct ast_category *category, const char *variable, const char *value, const char *match, unsigned int object) |
void | ast_variables_destroy (struct ast_variable *var) |
Free variable list. | |
int | config_text_file_save (const char *filename, const struct ast_config *cfg, const char *generator) |
int | read_config_maps (void) |
int | register_config_cli (void) |
Definition in file config.h.
typedef struct ast_config* config_load_func(const char *database, const char *table, const char *configfile, struct ast_config *config, int withcomments) |
typedef struct ast_config* realtime_multi_get(const char *database, const char *table, va_list ap) |
typedef int realtime_update(const char *database, const char *table, const char *keyfield, const char *entity, va_list ap) |
typedef struct ast_variable* realtime_var_get(const char *database, const char *table, va_list ap) |
void ast_category_append | ( | struct ast_config * | config, | |
struct ast_category * | cat | |||
) |
Definition at line 332 of file config.c.
References config, and ast_category::include_level.
Referenced by config_mysql(), config_odbc(), config_pgsql(), handle_updates(), process_text_line(), realtime_directory(), realtime_multi_mysql(), realtime_multi_odbc(), and realtime_multi_pgsql().
00333 { 00334 if (config->last) 00335 config->last->next = category; 00336 else 00337 config->root = category; 00338 category->include_level = config->include_level; 00339 config->last = category; 00340 config->current = category; 00341 }
char* ast_category_browse | ( | struct ast_config * | config, | |
const char * | prev | |||
) |
Goes through categories.
config | Which config structure you wish to "browse" | |
prev | A pointer to a previous category. This funtion is kind of non-intuitive in it's use. To begin, one passes NULL as the second arguement. It will return a pointer to the string of the first category in the file. From here on after, one must then pass the previous usage's return value as the second pointer, and it will return a pointer to the category name afterwards. |
Definition at line 356 of file config.c.
References config, ast_category::name, ast_category::next, and next_available_category().
Referenced by action_getconfig(), aji_load_config(), authenticate(), complete_sipnotify(), do_directory(), gtalk_load_config(), iax_provision_reload(), ind_load_module(), init_manager(), load_config(), load_module(), load_moh_classes(), load_odbc_config(), loadconfigurationfile(), misdn_cfg_init(), osp_load(), pbx_load_config(), pbx_load_users(), read_agent_config(), realtime_directory(), realtime_switch_common(), reload(), reload_config(), reload_followme(), reload_queues(), rpt_master(), set_config(), setup_zap(), sla_load_config(), and vm_change_password().
00357 { 00358 struct ast_category *cat = NULL; 00359 00360 if (prev && config->last_browse && (config->last_browse->name == prev)) 00361 cat = config->last_browse->next; 00362 else if (!prev && config->root) 00363 cat = config->root; 00364 else if (prev) { 00365 for (cat = config->root; cat; cat = cat->next) { 00366 if (cat->name == prev) { 00367 cat = cat->next; 00368 break; 00369 } 00370 } 00371 if (!cat) { 00372 for (cat = config->root; cat; cat = cat->next) { 00373 if (!strcasecmp(cat->name, prev)) { 00374 cat = cat->next; 00375 break; 00376 } 00377 } 00378 } 00379 } 00380 00381 if (cat) 00382 cat = next_available_category(cat); 00383 00384 config->last_browse = cat; 00385 return (cat) ? cat->name : NULL; 00386 }
int ast_category_delete | ( | struct ast_config * | cfg, | |
char * | category | |||
) |
Definition at line 508 of file config.c.
References ast_variables_destroy(), free, ast_config::last, ast_category::next, and ast_config::root.
Referenced by handle_updates().
00509 { 00510 struct ast_category *prev=NULL, *cat; 00511 cat = cfg->root; 00512 while(cat) { 00513 if (cat->name == category) { 00514 ast_variables_destroy(cat->root); 00515 if (prev) { 00516 prev->next = cat->next; 00517 if (cat == cfg->last) 00518 cfg->last = prev; 00519 } else { 00520 cfg->root = cat->next; 00521 if (cat == cfg->last) 00522 cfg->last = NULL; 00523 } 00524 free(cat); 00525 return 0; 00526 } 00527 prev = cat; 00528 cat = cat->next; 00529 } 00530 00531 prev = NULL; 00532 cat = cfg->root; 00533 while(cat) { 00534 if (!strcasecmp(cat->name, category)) { 00535 ast_variables_destroy(cat->root); 00536 if (prev) { 00537 prev->next = cat->next; 00538 if (cat == cfg->last) 00539 cfg->last = prev; 00540 } else { 00541 cfg->root = cat->next; 00542 if (cat == cfg->last) 00543 cfg->last = NULL; 00544 } 00545 free(cat); 00546 return 0; 00547 } 00548 prev = cat; 00549 cat = cat->next; 00550 } 00551 return -1; 00552 }
void ast_category_destroy | ( | struct ast_category * | cat | ) |
Definition at line 343 of file config.c.
References ast_variables_destroy(), free, and ast_category::root.
Referenced by process_text_line(), and realtime_multi_odbc().
00344 { 00345 ast_variables_destroy(cat->root); 00346 free(cat); 00347 }
struct ast_variable* ast_category_detach_variables | ( | struct ast_category * | cat | ) |
Definition at line 388 of file config.c.
References ast_category::last, and ast_category::root.
Referenced by realtime_switch_common().
00389 { 00390 struct ast_variable *v; 00391 00392 v = cat->root; 00393 cat->root = NULL; 00394 cat->last = NULL; 00395 00396 return v; 00397 }
int ast_category_exist | ( | const struct ast_config * | config, | |
const char * | category_name | |||
) |
Check for category duplicates.
config | which config to use | |
category_name | name of the category you're looking for This will search through the categories within a given config file for a match. |
Definition at line 327 of file config.c.
References ast_category_get(), and config.
00328 { 00329 return !!ast_category_get(config, category_name); 00330 }
struct ast_category* ast_category_get | ( | const struct ast_config * | config, | |
const char * | category_name | |||
) |
Retrieve a category if it exists.
config | which config to use | |
category_name | name of the category you're looking for This will search through the categories within a given config file for a match. |
Definition at line 322 of file config.c.
References category_get(), and config.
Referenced by ast_category_exist(), ast_variable_browse(), handle_updates(), realtime_directory(), realtime_switch_common(), vm_change_password(), and vm_forwardoptions().
00323 { 00324 return category_get(config, category_name, 0); 00325 }
struct ast_category* ast_category_new | ( | const char * | name | ) |
Definition at line 295 of file config.c.
References ast_calloc.
Referenced by config_mysql(), config_odbc(), config_pgsql(), handle_updates(), process_text_line(), realtime_directory(), realtime_multi_mysql(), realtime_multi_odbc(), and realtime_multi_pgsql().
00296 { 00297 struct ast_category *category; 00298 00299 if ((category = ast_calloc(1, sizeof(*category)))) 00300 ast_copy_string(category->name, name, sizeof(category->name)); 00301 return category; 00302 }
void ast_category_rename | ( | struct ast_category * | cat, | |
const char * | name | |||
) |
Definition at line 399 of file config.c.
References ast_category::name.
Referenced by handle_updates(), realtime_multi_mysql(), realtime_multi_odbc(), and realtime_multi_pgsql().
int ast_check_realtime | ( | const char * | family | ) |
Check if realtime engine is configured for family returns 1 if family is configured in realtime and engine exists.
family | which family/config to be checked |
Definition at line 1327 of file config.c.
References find_engine().
Referenced by _sip_show_peer(), _sip_show_peers(), and sip_show_settings().
01328 { 01329 struct ast_config_engine *eng; 01330 01331 eng = find_engine(family, NULL, 0, NULL, 0); 01332 if (eng) 01333 return 1; 01334 return 0; 01335 01336 }
void ast_config_destroy | ( | struct ast_config * | config | ) |
Destroys a config.
config | pointer to config data structure Free memory associated with a given config |
Definition at line 554 of file config.c.
References ast_variables_destroy(), free, ast_category::next, ast_category::root, and ast_config::root.
Referenced by __ast_http_load(), action_getconfig(), action_updateconfig(), adsi_load(), advanced_options(), ast_config_load(), ast_config_load_with_comments(), ast_enum_init(), ast_rtp_reload(), ast_udptl_reload(), authenticate(), conf_exec(), directory_exec(), do_reload(), festival_exec(), find_conf(), handle_save_dialplan(), iax_provision_reload(), ind_load_module(), init_logger_chain(), init_manager(), load_config(), load_config_meetme(), load_module(), load_moh_classes(), load_realtime_queue(), load_rpt_vars(), loadconfigurationfile(), my_load_module(), odbc_load_module(), osp_load(), parse_config(), pbx_load_users(), play_message(), privacy_exec(), read_agent_config(), read_config_maps(), realtime_directory(), realtime_multi_mysql(), realtime_switch_common(), reload(), reload_config(), reload_followme(), rpt_master(), set_config(), setup_zap(), sla_load_config(), tds_load_module(), unload_module(), and vm_forwardoptions().
00555 { 00556 struct ast_category *cat, *catn; 00557 00558 if (!cfg) 00559 return; 00560 00561 cat = cfg->root; 00562 while(cat) { 00563 ast_variables_destroy(cat->root); 00564 catn = cat; 00565 cat = cat->next; 00566 free(catn); 00567 } 00568 free(cfg); 00569 }
int ast_config_engine_deregister | ( | struct ast_config_engine * | del | ) |
Deegister config engine.
Definition at line 1176 of file config.c.
References ast_mutex_lock(), ast_mutex_unlock(), config_engine_list, last, and ast_config_engine::next.
Referenced by unload_module().
01177 { 01178 struct ast_config_engine *ptr, *last=NULL; 01179 01180 ast_mutex_lock(&config_lock); 01181 01182 for (ptr = config_engine_list; ptr; ptr=ptr->next) { 01183 if (ptr == del) { 01184 if (last) 01185 last->next = ptr->next; 01186 else 01187 config_engine_list = ptr->next; 01188 break; 01189 } 01190 last = ptr; 01191 } 01192 01193 ast_mutex_unlock(&config_lock); 01194 01195 return 0; 01196 }
int ast_config_engine_register | ( | struct ast_config_engine * | newconfig | ) |
Register config engine.
Definition at line 1157 of file config.c.
References ast_log(), ast_mutex_lock(), ast_mutex_unlock(), config_engine_list, LOG_NOTICE, ast_config_engine::name, and ast_config_engine::next.
Referenced by load_module().
01158 { 01159 struct ast_config_engine *ptr; 01160 01161 ast_mutex_lock(&config_lock); 01162 01163 if (!config_engine_list) { 01164 config_engine_list = new; 01165 } else { 01166 for (ptr = config_engine_list; ptr->next; ptr=ptr->next); 01167 ptr->next = new; 01168 } 01169 01170 ast_mutex_unlock(&config_lock); 01171 ast_log(LOG_NOTICE,"Registered Config Engine %s\n", new->name); 01172 01173 return 1; 01174 }
struct ast_category* ast_config_get_current_category | ( | const struct ast_config * | cfg | ) |
Definition at line 571 of file config.c.
References ast_config::current.
Referenced by config_odbc(), and config_text_file_load().
00572 { 00573 return cfg->current; 00574 }
struct ast_config* ast_config_internal_load | ( | const char * | configfile, | |
struct ast_config * | cfg, | |||
int | withcomments | |||
) |
Definition at line 1238 of file config.c.
References ast_log(), config_engine_list, db, extconfig_conf, find_engine(), ast_config::include_level, ast_config_engine::load_func, LOG_WARNING, ast_config::max_include_level, result, table, and text_file_engine.
Referenced by ast_config_load(), ast_config_load_with_comments(), config_mysql(), config_odbc(), config_pgsql(), process_text_line(), and read_config_maps().
01239 { 01240 char db[256]; 01241 char table[256]; 01242 struct ast_config_engine *loader = &text_file_engine; 01243 struct ast_config *result; 01244 01245 if (cfg->include_level == cfg->max_include_level) { 01246 ast_log(LOG_WARNING, "Maximum Include level (%d) exceeded\n", cfg->max_include_level); 01247 return NULL; 01248 } 01249 01250 cfg->include_level++; 01251 01252 if (strcmp(filename, extconfig_conf) && strcmp(filename, "asterisk.conf") && config_engine_list) { 01253 struct ast_config_engine *eng; 01254 01255 eng = find_engine(filename, db, sizeof(db), table, sizeof(table)); 01256 01257 01258 if (eng && eng->load_func) { 01259 loader = eng; 01260 } else { 01261 eng = find_engine("global", db, sizeof(db), table, sizeof(table)); 01262 if (eng && eng->load_func) 01263 loader = eng; 01264 } 01265 } 01266 01267 result = loader->load_func(db, table, filename, cfg, withcomments); 01268 01269 if (result) 01270 result->include_level--; 01271 else 01272 cfg->include_level--; 01273 01274 return result; 01275 }
struct ast_config* ast_config_load | ( | const char * | filename | ) |
Load a config file.
filename | path of file to open. If no preceding '/' character, path is considered relative to AST_CONFIG_DIR Create a config structure from a given configuration file. |
Definition at line 1277 of file config.c.
References ast_config_destroy(), ast_config_internal_load(), ast_config_new(), and result.
Referenced by __ast_http_load(), __say_init(), adsi_load(), advanced_options(), aji_load_config(), ast_enum_init(), ast_readconfig(), ast_rtp_reload(), ast_udptl_reload(), authenticate(), conf_exec(), directory_exec(), do_reload(), festival_exec(), find_conf(), gtalk_load_config(), handle_save_dialplan(), iax_provision_reload(), ind_load_module(), init_logger_chain(), init_manager(), load_config(), load_config_meetme(), load_module(), load_modules(), load_moh_classes(), load_odbc_config(), load_rpt_vars(), loadconfigurationfile(), my_load_module(), odbc_load_module(), osp_load(), parse_config(), pbx_load_config(), pbx_load_users(), play_message(), privacy_exec(), read_agent_config(), realtime_directory(), reload(), reload_config(), reload_followme(), reload_queues(), set_config(), setup_zap(), sla_load_config(), smdi_load(), tds_load_module(), and vm_forwardoptions().
01278 { 01279 struct ast_config *cfg; 01280 struct ast_config *result; 01281 01282 cfg = ast_config_new(); 01283 if (!cfg) 01284 return NULL; 01285 01286 result = ast_config_internal_load(filename, cfg, 0); 01287 if (!result) 01288 ast_config_destroy(cfg); 01289 01290 return result; 01291 }
struct ast_config* ast_config_load_with_comments | ( | const char * | filename | ) |
Definition at line 1293 of file config.c.
References ast_config_destroy(), ast_config_internal_load(), ast_config_new(), and result.
Referenced by action_getconfig(), action_updateconfig(), and vm_change_password().
01294 { 01295 struct ast_config *cfg; 01296 struct ast_config *result; 01297 01298 cfg = ast_config_new(); 01299 if (!cfg) 01300 return NULL; 01301 01302 result = ast_config_internal_load(filename, cfg, 1); 01303 if (!result) 01304 ast_config_destroy(cfg); 01305 01306 return result; 01307 }
struct ast_config* ast_config_new | ( | void | ) |
Definition at line 412 of file config.c.
References ast_calloc, config, and MAX_INCLUDE_LEVEL.
Referenced by ast_config_load(), ast_config_load_with_comments(), read_config_maps(), realtime_multi_mysql(), realtime_multi_odbc(), and realtime_multi_pgsql().
00413 { 00414 struct ast_config *config; 00415 00416 if ((config = ast_calloc(1, sizeof(*config)))) 00417 config->max_include_level = MAX_INCLUDE_LEVEL; 00418 return config; 00419 }
const char* ast_config_option | ( | struct ast_config * | cfg, | |
const char * | cat, | |||
const char * | var | |||
) |
Definition at line 233 of file config.c.
References ast_variable_retrieve().
Referenced by do_directory(), load_config(), and pbx_load_users().
00234 { 00235 const char *tmp; 00236 tmp = ast_variable_retrieve(cfg, cat, var); 00237 if (!tmp) 00238 tmp = ast_variable_retrieve(cfg, "general", var); 00239 return tmp; 00240 }
void ast_config_set_current_category | ( | struct ast_config * | cfg, | |
const struct ast_category * | cat | |||
) |
Definition at line 576 of file config.c.
References ast_config::current.
00577 { 00578 /* cast below is just to silence compiler warning about dropping "const" */ 00579 cfg->current = (struct ast_category *) cat; 00580 }
struct ast_variable* ast_load_realtime | ( | const char * | family, | |
... | ||||
) |
Retrieve realtime configuration.
family | which family/config to lookup This will use builtin configuration backends to look up a particular entity in realtime and return a variable list of its parameters. Note that unlike the variables in ast_config, the resulting list of variables MUST be freed with ast_variables_destroy() as there is no container. |
Definition at line 1309 of file config.c.
References db, find_engine(), ast_config_engine::realtime_func, and table.
Referenced by cli_realtime_load(), find_conf_realtime(), find_user_realtime(), function_realtime_read(), load_realtime_queue(), realtime_alias(), realtime_exec(), realtime_peer(), realtime_switch_common(), and realtime_user().
01310 { 01311 struct ast_config_engine *eng; 01312 char db[256]=""; 01313 char table[256]=""; 01314 struct ast_variable *res=NULL; 01315 va_list ap; 01316 01317 va_start(ap, family); 01318 eng = find_engine(family, db, sizeof(db), table, sizeof(table)); 01319 if (eng && eng->realtime_func) 01320 res = eng->realtime_func(db, table, ap); 01321 va_end(ap); 01322 01323 return res; 01324 }
struct ast_config* ast_load_realtime_multientry | ( | const char * | family, | |
... | ||||
) |
Retrieve realtime configuration.
family | which family/config to lookup This will use builtin configuration backends to look up a particular entity in realtime and return a variable list of its parameters. Unlike the ast_load_realtime, this function can return more than one entry and is thus stored inside a taditional ast_config structure rather than just returning a linked list of variables. |
Definition at line 1338 of file config.c.
References db, find_engine(), ast_config_engine::realtime_multi_func, and table.
Referenced by load_realtime_queue(), realtime_directory(), and realtime_switch_common().
01339 { 01340 struct ast_config_engine *eng; 01341 char db[256]=""; 01342 char table[256]=""; 01343 struct ast_config *res=NULL; 01344 va_list ap; 01345 01346 va_start(ap, family); 01347 eng = find_engine(family, db, sizeof(db), table, sizeof(table)); 01348 if (eng && eng->realtime_multi_func) 01349 res = eng->realtime_multi_func(db, table, ap); 01350 va_end(ap); 01351 01352 return res; 01353 }
int ast_update_realtime | ( | const char * | family, | |
const char * | keyfield, | |||
const char * | lookup, | |||
... | ||||
) |
Update realtime configuration.
family | which family/config to be updated | |
keyfield | which field to use as the key | |
lookup | which value to look for in the key field to match the entry. This function is used to update a parameter in realtime configuration space. |
Definition at line 1355 of file config.c.
References db, find_engine(), table, and ast_config_engine::update_func.
Referenced by change_password_realtime(), cli_realtime_update(), conf_run(), destroy_association(), function_realtime_write(), realtime_update_exec(), and realtime_update_peer().
01356 { 01357 struct ast_config_engine *eng; 01358 int res = -1; 01359 char db[256]=""; 01360 char table[256]=""; 01361 va_list ap; 01362 01363 va_start(ap, lookup); 01364 eng = find_engine(family, db, sizeof(db), table, sizeof(table)); 01365 if (eng && eng->update_func) 01366 res = eng->update_func(db, table, keyfield, lookup, ap); 01367 va_end(ap); 01368 01369 return res; 01370 }
void ast_variable_append | ( | struct ast_category * | category, | |
struct ast_variable * | variable | |||
) |
Definition at line 197 of file config.c.
References ast_category::last, ast_variable::next, and ast_category::root.
Referenced by config_mysql(), config_odbc(), config_pgsql(), handle_updates(), inherit_category(), move_variables(), process_text_line(), realtime_directory(), realtime_multi_mysql(), realtime_multi_odbc(), realtime_multi_pgsql(), and vm_change_password().
00198 { 00199 if (!variable) 00200 return; 00201 if (category->last) 00202 category->last->next = variable; 00203 else 00204 category->root = variable; 00205 category->last = variable; 00206 while (category->last->next) 00207 category->last = category->last->next; 00208 }
struct ast_variable* ast_variable_browse | ( | const struct ast_config * | config, | |
const char * | category | |||
) |
Goes through variables Somewhat similar in intent as the ast_category_browse. List variables of config file category.
Returns ast_variable list on success, or NULL on failure
Definition at line 221 of file config.c.
References ast_category_get(), config, and ast_category::root.
Referenced by __ast_http_load(), action_getconfig(), adsi_load(), aji_load_config(), ast_enum_init(), ast_readconfig(), ast_variable_retrieve(), authenticate(), collect_function_digits(), conf_exec(), database_first_connect(), do_directory(), do_say(), find_conf(), gtalk_load_config(), handle_save_dialplan(), iax_template_parse(), ind_load_module(), init_logger_chain(), init_manager(), load_config(), load_module(), load_modules(), load_moh_classes(), load_odbc_config(), load_rpt_vars(), loadconfigurationfile(), misdn_cfg_init(), my_load_module(), odbc_load_module(), osp_create_provider(), parse_config(), pbx_load_config(), process_my_load_module(), read_agent_config(), read_config_maps(), reload(), reload_config(), reload_followme(), reload_queues(), set_config(), setup_zap(), sip_notify(), sla_build_station(), sla_build_trunk(), smdi_load(), store_config(), and tds_load_module().
00222 { 00223 struct ast_category *cat = NULL; 00224 00225 if (category && config->last_browse && (config->last_browse->name == category)) 00226 cat = config->last_browse; 00227 else 00228 cat = ast_category_get(config, category); 00229 00230 return (cat) ? cat->root : NULL; 00231 }
int ast_variable_delete | ( | struct ast_category * | category, | |
char * | variable, | |||
char * | match | |||
) |
Definition at line 421 of file config.c.
References ast_strlen_zero(), ast_variables_destroy(), ast_category::last, ast_variable::name, ast_variable::next, ast_category::root, and ast_variable::value.
Referenced by handle_updates().
00422 { 00423 struct ast_variable *cur, *prev=NULL, *curn; 00424 int res = -1; 00425 cur = category->root; 00426 while (cur) { 00427 if (cur->name == variable) { 00428 if (prev) { 00429 prev->next = cur->next; 00430 if (cur == category->last) 00431 category->last = prev; 00432 } else { 00433 category->root = cur->next; 00434 if (cur == category->last) 00435 category->last = NULL; 00436 } 00437 cur->next = NULL; 00438 ast_variables_destroy(cur); 00439 return 0; 00440 } 00441 prev = cur; 00442 cur = cur->next; 00443 } 00444 00445 prev = NULL; 00446 cur = category->root; 00447 while (cur) { 00448 curn = cur->next; 00449 if (!strcasecmp(cur->name, variable) && (ast_strlen_zero(match) || !strcasecmp(cur->value, match))) { 00450 if (prev) { 00451 prev->next = cur->next; 00452 if (cur == category->last) 00453 category->last = prev; 00454 } else { 00455 category->root = cur->next; 00456 if (cur == category->last) 00457 category->last = NULL; 00458 } 00459 cur->next = NULL; 00460 ast_variables_destroy(cur); 00461 res = 0; 00462 } else 00463 prev = cur; 00464 00465 cur = curn; 00466 } 00467 return res; 00468 }
struct ast_variable* ast_variable_new | ( | const char * | name, | |
const char * | value | |||
) |
Definition at line 182 of file config.c.
References ast_calloc, and ast_variable::name.
Referenced by apply_outgoing(), ast_channeltype_list(), ast_httpd_helper_thread(), ast_variable_update(), astman_get_variables(), build_peer(), build_user(), check_access(), check_user_full(), config_mysql(), config_odbc(), config_pgsql(), handle_updates(), handle_uri(), iax_parse_ies(), parkandannounce_exec(), process_text_line(), realtime_directory(), realtime_multi_mysql(), realtime_multi_odbc(), realtime_multi_pgsql(), realtime_mysql(), realtime_odbc(), realtime_pgsql(), variable_clone(), and vm_change_password().
00183 { 00184 struct ast_variable *variable; 00185 int name_len = strlen(name) + 1; 00186 00187 if ((variable = ast_calloc(1, name_len + strlen(value) + 1 + sizeof(*variable)))) { 00188 variable->name = variable->stuff; 00189 variable->value = variable->stuff + name_len; 00190 strcpy(variable->name,name); 00191 strcpy(variable->value,value); 00192 } 00193 00194 return variable; 00195 }
const char* ast_variable_retrieve | ( | const struct ast_config * | config, | |
const char * | category, | |||
const char * | variable | |||
) |
Gets a variable.
config | which (opened) config to use | |
category | category under which the variable lies | |
variable | which variable you wish to get the data for Goes through a given config file in the given category and searches for the given variable |
Definition at line 243 of file config.c.
References ast_variable_browse(), config, ast_variable::name, ast_category::next, ast_variable::next, ast_category::root, and ast_variable::value.
Referenced by advanced_options(), aji_load_config(), ast_config_option(), ast_rtp_reload(), ast_udptl_reload(), attempt_reconnect(), cdr_pgsql_read_config(), directory_exec(), do_directory(), do_reload(), festival_exec(), function_ilink(), function_macro(), function_remote(), get_wait_interval(), gtalk_load_config(), handle_save_dialplan(), iax_template_parse(), ind_load_module(), init_acf_query(), init_logger_chain(), init_manager(), load_config(), load_config_meetme(), load_module(), load_modules(), load_rpt_vars(), my_load_module(), odbc_load_module(), osp_load(), parse_config(), pbx_load_config(), pbx_load_users(), play_message(), privacy_exec(), process_my_load_module(), read_agent_config(), realtime_directory(), reload_config(), reload_followme(), reload_queues(), retrieve_astcfgint(), rpt(), rpt_exec(), rpt_master(), rpt_tele_thread(), set_config(), setup_zap(), sla_build_station(), sla_build_trunk(), sla_load_config(), tds_load_module(), telem_lookup(), vm_change_password(), and vm_forwardoptions().
00244 { 00245 struct ast_variable *v; 00246 00247 if (category) { 00248 for (v = ast_variable_browse(config, category); v; v = v->next) { 00249 if (!strcasecmp(variable, v->name)) 00250 return v->value; 00251 } 00252 } else { 00253 struct ast_category *cat; 00254 00255 for (cat = config->root; cat; cat = cat->next) 00256 for (v = cat->root; v; v = v->next) 00257 if (!strcasecmp(variable, v->name)) 00258 return v->value; 00259 } 00260 00261 return NULL; 00262 }
int ast_variable_update | ( | struct ast_category * | category, | |
const char * | variable, | |||
const char * | value, | |||
const char * | match, | |||
unsigned int | object | |||
) |
Definition at line 470 of file config.c.
References ast_strlen_zero(), ast_variable_new(), ast_variables_destroy(), ast_category::last, ast_variable::name, ast_variable::next, ast_variable::object, ast_category::root, and ast_variable::value.
Referenced by handle_updates(), vm_change_password(), and vm_forwardoptions().
00472 { 00473 struct ast_variable *cur, *prev=NULL, *newer; 00474 00475 if (!(newer = ast_variable_new(variable, value))) 00476 return -1; 00477 00478 newer->object = object; 00479 00480 for (cur = category->root; cur; prev = cur, cur = cur->next) { 00481 if (strcasecmp(cur->name, variable) || 00482 (!ast_strlen_zero(match) && strcasecmp(cur->value, match))) 00483 continue; 00484 00485 newer->next = cur->next; 00486 newer->object = cur->object || object; 00487 if (prev) 00488 prev->next = newer; 00489 else 00490 category->root = newer; 00491 if (category->last == cur) 00492 category->last = newer; 00493 00494 cur->next = NULL; 00495 ast_variables_destroy(cur); 00496 00497 return 0; 00498 } 00499 00500 if (prev) 00501 prev->next = newer; 00502 else 00503 category->root = newer; 00504 00505 return 0; 00506 }
void ast_variables_destroy | ( | struct ast_variable * | var | ) |
Free variable list.
var | the linked list of variables to free This function frees a list of variables. |
Definition at line 210 of file config.c.
References free, and ast_variable::next.
Referenced by ast_category_delete(), ast_category_destroy(), ast_config_destroy(), ast_httpd_helper_thread(), ast_pbx_outgoing_app(), ast_pbx_outgoing_exten(), ast_variable_delete(), ast_variable_update(), build_peer(), build_user(), destroy_user(), find_conf_realtime(), find_user_realtime(), handle_uri(), iax2_destroy(), load_realtime_queue(), realtime_alias(), realtime_canmatch(), realtime_exec(), realtime_exists(), realtime_matchmore(), realtime_odbc(), realtime_peer(), realtime_user(), sip_alloc(), sip_destroy_peer(), sip_destroy_user(), and socket_process().
00211 { 00212 struct ast_variable *vn; 00213 00214 while(v) { 00215 vn = v; 00216 v = v->next; 00217 free(vn); 00218 } 00219 }
int config_text_file_save | ( | const char * | filename, | |
const struct ast_config * | cfg, | |||
const char * | generator | |||
) |
Definition at line 950 of file config.c.
References ast_config_AST_CONFIG_DIR, ast_log(), ast_verbose(), ast_comment::cmt, f, LOG_DEBUG, ast_category::name, ast_category::next, option_debug, option_verbose, ast_category::precomments, ast_category::root, ast_config::root, ast_category::sameline, t, var, and VERBOSE_PREFIX_2.
Referenced by action_updateconfig(), vm_change_password(), and vm_forwardoptions().
00951 { 00952 FILE *f; 00953 char fn[256]; 00954 char date[256]=""; 00955 time_t t; 00956 struct ast_variable *var; 00957 struct ast_category *cat; 00958 struct ast_comment *cmt; 00959 int blanklines = 0; 00960 00961 if (configfile[0] == '/') { 00962 ast_copy_string(fn, configfile, sizeof(fn)); 00963 } else { 00964 snprintf(fn, sizeof(fn), "%s/%s", ast_config_AST_CONFIG_DIR, configfile); 00965 } 00966 time(&t); 00967 ast_copy_string(date, ctime(&t), sizeof(date)); 00968 #ifdef __CYGWIN__ 00969 if ((f = fopen(fn, "w+"))) { 00970 #else 00971 if ((f = fopen(fn, "w"))) { 00972 #endif 00973 if (option_verbose > 1) 00974 ast_verbose(VERBOSE_PREFIX_2 "Saving '%s': ", fn); 00975 fprintf(f, ";!\n"); 00976 fprintf(f, ";! Automatically generated configuration file\n"); 00977 if (strcmp(configfile, fn)) 00978 fprintf(f, ";! Filename: %s (%s)\n", configfile, fn); 00979 else 00980 fprintf(f, ";! Filename: %s\n", configfile); 00981 fprintf(f, ";! Generator: %s\n", generator); 00982 fprintf(f, ";! Creation Date: %s", date); 00983 fprintf(f, ";!\n"); 00984 cat = cfg->root; 00985 while(cat) { 00986 /* Dump section with any appropriate comment */ 00987 for (cmt = cat->precomments; cmt; cmt=cmt->next) 00988 { 00989 if (cmt->cmt[0] != ';' || cmt->cmt[1] != '!') 00990 fprintf(f,"%s", cmt->cmt); 00991 } 00992 if (!cat->precomments) 00993 fprintf(f,"\n"); 00994 fprintf(f, "[%s]", cat->name); 00995 for(cmt = cat->sameline; cmt; cmt=cmt->next) 00996 { 00997 fprintf(f,"%s", cmt->cmt); 00998 } 00999 if (!cat->sameline) 01000 fprintf(f,"\n"); 01001 var = cat->root; 01002 while(var) { 01003 for (cmt = var->precomments; cmt; cmt=cmt->next) 01004 { 01005 if (cmt->cmt[0] != ';' || cmt->cmt[1] != '!') 01006 fprintf(f,"%s", cmt->cmt); 01007 } 01008 if (var->sameline) 01009 fprintf(f, "%s %s %s %s", var->name, (var->object ? "=>" : "="), var->value, var->sameline->cmt); 01010 else 01011 fprintf(f, "%s %s %s\n", var->name, (var->object ? "=>" : "="), var->value); 01012 if (var->blanklines) { 01013 blanklines = var->blanklines; 01014 while (blanklines--) 01015 fprintf(f, "\n"); 01016 } 01017 01018 var = var->next; 01019 } 01020 #if 0 01021 /* Put an empty line */ 01022 fprintf(f, "\n"); 01023 #endif 01024 cat = cat->next; 01025 } 01026 if ((option_verbose > 1) && !option_debug) 01027 ast_verbose("Saved\n"); 01028 } else { 01029 if (option_debug) 01030 ast_log(LOG_DEBUG, "Unable to open for writing: %s\n", fn); 01031 if (option_verbose > 1) 01032 ast_verbose(VERBOSE_PREFIX_2 "Unable to write (%s)", strerror(errno)); 01033 return -1; 01034 } 01035 fclose(f); 01036 return 0; 01037 }
int read_config_maps | ( | void | ) |
Definition at line 1089 of file config.c.
References append_mapping(), ast_config_destroy(), ast_config_internal_load(), ast_config_new(), ast_log(), ast_variable_browse(), clear_config_maps(), config, extconfig_conf, LOG_WARNING, ast_config::max_include_level, ast_variable::name, ast_variable::next, strsep(), table, and ast_variable::value.
Referenced by main().
01090 { 01091 struct ast_config *config, *configtmp; 01092 struct ast_variable *v; 01093 char *driver, *table, *database, *stringp, *tmp; 01094 01095 clear_config_maps(); 01096 01097 configtmp = ast_config_new(); 01098 configtmp->max_include_level = 1; 01099 config = ast_config_internal_load(extconfig_conf, configtmp, 0); 01100 if (!config) { 01101 ast_config_destroy(configtmp); 01102 return 0; 01103 } 01104 01105 for (v = ast_variable_browse(config, "settings"); v; v = v->next) { 01106 stringp = v->value; 01107 driver = strsep(&stringp, ","); 01108 01109 if ((tmp = strchr(stringp, '\"'))) 01110 stringp = tmp; 01111 01112 /* check if the database text starts with a double quote */ 01113 if (*stringp == '"') { 01114 stringp++; 01115 database = strsep(&stringp, "\""); 01116 strsep(&stringp, ","); 01117 } else { 01118 /* apparently this text has no quotes */ 01119 database = strsep(&stringp, ","); 01120 } 01121 01122 table = strsep(&stringp, ","); 01123 01124 if (!strcmp(v->name, extconfig_conf)) { 01125 ast_log(LOG_WARNING, "Cannot bind '%s'!\n", extconfig_conf); 01126 continue; 01127 } 01128 01129 if (!strcmp(v->name, "asterisk.conf")) { 01130 ast_log(LOG_WARNING, "Cannot bind 'asterisk.conf'!\n"); 01131 continue; 01132 } 01133 01134 if (!strcmp(v->name, "logger.conf")) { 01135 ast_log(LOG_WARNING, "Cannot bind 'logger.conf'!\n"); 01136 continue; 01137 } 01138 01139 if (!driver || !database) 01140 continue; 01141 if (!strcasecmp(v->name, "sipfriends")) { 01142 ast_log(LOG_WARNING, "The 'sipfriends' table is obsolete, update your config to use sipusers and sippeers, though they can point to the same table.\n"); 01143 append_mapping("sipusers", driver, database, table ? table : "sipfriends"); 01144 append_mapping("sippeers", driver, database, table ? table : "sipfriends"); 01145 } else if (!strcasecmp(v->name, "iaxfriends")) { 01146 ast_log(LOG_WARNING, "The 'iaxfriends' table is obsolete, update your config to use iaxusers and iaxpeers, though they can point to the same table.\n"); 01147 append_mapping("iaxusers", driver, database, table ? table : "iaxfriends"); 01148 append_mapping("iaxpeers", driver, database, table ? table : "iaxfriends"); 01149 } else 01150 append_mapping(v->name, driver, database, table); 01151 } 01152 01153 ast_config_destroy(config); 01154 return 0; 01155 }
int register_config_cli | ( | void | ) |
Definition at line 1410 of file config.c.
References ast_cli_register_multiple(), and cli_config.
Referenced by main().
01411 { 01412 ast_cli_register_multiple(cli_config, sizeof(cli_config) / sizeof(struct ast_cli_entry)); 01413 return 0; 01414 }