#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 1328 of file config.c.
References find_engine().
Referenced by _sip_show_peer(), _sip_show_peers(), and sip_show_settings().
01329 { 01330 struct ast_config_engine *eng; 01331 01332 eng = find_engine(family, NULL, 0, NULL, 0); 01333 if (eng) 01334 return 1; 01335 return 0; 01336 01337 }
| 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(), process_text_line(), read_agent_config(), read_config_maps(), realtime_directory(), 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 1177 of file config.c.
References ast_mutex_lock(), ast_mutex_unlock(), config_engine_list, last, and ast_config_engine::next.
Referenced by unload_module().
01178 { 01179 struct ast_config_engine *ptr, *last=NULL; 01180 01181 ast_mutex_lock(&config_lock); 01182 01183 for (ptr = config_engine_list; ptr; ptr=ptr->next) { 01184 if (ptr == del) { 01185 if (last) 01186 last->next = ptr->next; 01187 else 01188 config_engine_list = ptr->next; 01189 break; 01190 } 01191 last = ptr; 01192 } 01193 01194 ast_mutex_unlock(&config_lock); 01195 01196 return 0; 01197 }
| int ast_config_engine_register | ( | struct ast_config_engine * | newconfig | ) |
Register config engine.
Definition at line 1158 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().
01159 { 01160 struct ast_config_engine *ptr; 01161 01162 ast_mutex_lock(&config_lock); 01163 01164 if (!config_engine_list) { 01165 config_engine_list = new; 01166 } else { 01167 for (ptr = config_engine_list; ptr->next; ptr=ptr->next); 01168 ptr->next = new; 01169 } 01170 01171 ast_mutex_unlock(&config_lock); 01172 ast_log(LOG_NOTICE,"Registered Config Engine %s\n", new->name); 01173 01174 return 1; 01175 }
| 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 1239 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().
01240 { 01241 char db[256]; 01242 char table[256]; 01243 struct ast_config_engine *loader = &text_file_engine; 01244 struct ast_config *result; 01245 01246 if (cfg->include_level == cfg->max_include_level) { 01247 ast_log(LOG_WARNING, "Maximum Include level (%d) exceeded\n", cfg->max_include_level); 01248 return NULL; 01249 } 01250 01251 cfg->include_level++; 01252 01253 if (strcmp(filename, extconfig_conf) && strcmp(filename, "asterisk.conf") && config_engine_list) { 01254 struct ast_config_engine *eng; 01255 01256 eng = find_engine(filename, db, sizeof(db), table, sizeof(table)); 01257 01258 01259 if (eng && eng->load_func) { 01260 loader = eng; 01261 } else { 01262 eng = find_engine("global", db, sizeof(db), table, sizeof(table)); 01263 if (eng && eng->load_func) 01264 loader = eng; 01265 } 01266 } 01267 01268 result = loader->load_func(db, table, filename, cfg, withcomments); 01269 01270 if (result) 01271 result->include_level--; 01272 else 01273 cfg->include_level--; 01274 01275 return result; 01276 }
| 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 1278 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().
01279 { 01280 struct ast_config *cfg; 01281 struct ast_config *result; 01282 01283 cfg = ast_config_new(); 01284 if (!cfg) 01285 return NULL; 01286 01287 result = ast_config_internal_load(filename, cfg, 0); 01288 if (!result) 01289 ast_config_destroy(cfg); 01290 01291 return result; 01292 }
| struct ast_config* ast_config_load_with_comments | ( | const char * | filename | ) |
Definition at line 1294 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().
01295 { 01296 struct ast_config *cfg; 01297 struct ast_config *result; 01298 01299 cfg = ast_config_new(); 01300 if (!cfg) 01301 return NULL; 01302 01303 result = ast_config_internal_load(filename, cfg, 1); 01304 if (!result) 01305 ast_config_destroy(cfg); 01306 01307 return result; 01308 }
| 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 1310 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().
01311 { 01312 struct ast_config_engine *eng; 01313 char db[256]=""; 01314 char table[256]=""; 01315 struct ast_variable *res=NULL; 01316 va_list ap; 01317 01318 va_start(ap, family); 01319 eng = find_engine(family, db, sizeof(db), table, sizeof(table)); 01320 if (eng && eng->realtime_func) 01321 res = eng->realtime_func(db, table, ap); 01322 va_end(ap); 01323 01324 return res; 01325 }
| 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 1339 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().
01340 { 01341 struct ast_config_engine *eng; 01342 char db[256]=""; 01343 char table[256]=""; 01344 struct ast_config *res=NULL; 01345 va_list ap; 01346 01347 va_start(ap, family); 01348 eng = find_engine(family, db, sizeof(db), table, sizeof(table)); 01349 if (eng && eng->realtime_multi_func) 01350 res = eng->realtime_multi_func(db, table, ap); 01351 va_end(ap); 01352 01353 return res; 01354 }
| 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 1356 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().
01357 { 01358 struct ast_config_engine *eng; 01359 int res = -1; 01360 char db[256]=""; 01361 char table[256]=""; 01362 va_list ap; 01363 01364 va_start(ap, lookup); 01365 eng = find_engine(family, db, sizeof(db), table, sizeof(table)); 01366 if (eng && eng->update_func) 01367 res = eng->update_func(db, table, keyfield, lookup, ap); 01368 va_end(ap); 01369 01370 return res; 01371 }
| 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 951 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().
00952 { 00953 FILE *f; 00954 char fn[256]; 00955 char date[256]=""; 00956 time_t t; 00957 struct ast_variable *var; 00958 struct ast_category *cat; 00959 struct ast_comment *cmt; 00960 int blanklines = 0; 00961 00962 if (configfile[0] == '/') { 00963 ast_copy_string(fn, configfile, sizeof(fn)); 00964 } else { 00965 snprintf(fn, sizeof(fn), "%s/%s", ast_config_AST_CONFIG_DIR, configfile); 00966 } 00967 time(&t); 00968 ast_copy_string(date, ctime(&t), sizeof(date)); 00969 #ifdef __CYGWIN__ 00970 if ((f = fopen(fn, "w+"))) { 00971 #else 00972 if ((f = fopen(fn, "w"))) { 00973 #endif 00974 if (option_verbose > 1) 00975 ast_verbose(VERBOSE_PREFIX_2 "Saving '%s': ", fn); 00976 fprintf(f, ";!\n"); 00977 fprintf(f, ";! Automatically generated configuration file\n"); 00978 if (strcmp(configfile, fn)) 00979 fprintf(f, ";! Filename: %s (%s)\n", configfile, fn); 00980 else 00981 fprintf(f, ";! Filename: %s\n", configfile); 00982 fprintf(f, ";! Generator: %s\n", generator); 00983 fprintf(f, ";! Creation Date: %s", date); 00984 fprintf(f, ";!\n"); 00985 cat = cfg->root; 00986 while(cat) { 00987 /* Dump section with any appropriate comment */ 00988 for (cmt = cat->precomments; cmt; cmt=cmt->next) 00989 { 00990 if (cmt->cmt[0] != ';' || cmt->cmt[1] != '!') 00991 fprintf(f,"%s", cmt->cmt); 00992 } 00993 if (!cat->precomments) 00994 fprintf(f,"\n"); 00995 fprintf(f, "[%s]", cat->name); 00996 for(cmt = cat->sameline; cmt; cmt=cmt->next) 00997 { 00998 fprintf(f,"%s", cmt->cmt); 00999 } 01000 if (!cat->sameline) 01001 fprintf(f,"\n"); 01002 var = cat->root; 01003 while(var) { 01004 for (cmt = var->precomments; cmt; cmt=cmt->next) 01005 { 01006 if (cmt->cmt[0] != ';' || cmt->cmt[1] != '!') 01007 fprintf(f,"%s", cmt->cmt); 01008 } 01009 if (var->sameline) 01010 fprintf(f, "%s %s %s %s", var->name, (var->object ? "=>" : "="), var->value, var->sameline->cmt); 01011 else 01012 fprintf(f, "%s %s %s\n", var->name, (var->object ? "=>" : "="), var->value); 01013 if (var->blanklines) { 01014 blanklines = var->blanklines; 01015 while (blanklines--) 01016 fprintf(f, "\n"); 01017 } 01018 01019 var = var->next; 01020 } 01021 #if 0 01022 /* Put an empty line */ 01023 fprintf(f, "\n"); 01024 #endif 01025 cat = cat->next; 01026 } 01027 if ((option_verbose > 1) && !option_debug) 01028 ast_verbose("Saved\n"); 01029 } else { 01030 if (option_debug) 01031 ast_log(LOG_DEBUG, "Unable to open for writing: %s\n", fn); 01032 if (option_verbose > 1) 01033 ast_verbose(VERBOSE_PREFIX_2 "Unable to write (%s)", strerror(errno)); 01034 return -1; 01035 } 01036 fclose(f); 01037 return 0; 01038 }
| int read_config_maps | ( | void | ) |
Definition at line 1090 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().
01091 { 01092 struct ast_config *config, *configtmp; 01093 struct ast_variable *v; 01094 char *driver, *table, *database, *stringp, *tmp; 01095 01096 clear_config_maps(); 01097 01098 configtmp = ast_config_new(); 01099 configtmp->max_include_level = 1; 01100 config = ast_config_internal_load(extconfig_conf, configtmp, 0); 01101 if (!config) { 01102 ast_config_destroy(configtmp); 01103 return 0; 01104 } 01105 01106 for (v = ast_variable_browse(config, "settings"); v; v = v->next) { 01107 stringp = v->value; 01108 driver = strsep(&stringp, ","); 01109 01110 if ((tmp = strchr(stringp, '\"'))) 01111 stringp = tmp; 01112 01113 /* check if the database text starts with a double quote */ 01114 if (*stringp == '"') { 01115 stringp++; 01116 database = strsep(&stringp, "\""); 01117 strsep(&stringp, ","); 01118 } else { 01119 /* apparently this text has no quotes */ 01120 database = strsep(&stringp, ","); 01121 } 01122 01123 table = strsep(&stringp, ","); 01124 01125 if (!strcmp(v->name, extconfig_conf)) { 01126 ast_log(LOG_WARNING, "Cannot bind '%s'!\n", extconfig_conf); 01127 continue; 01128 } 01129 01130 if (!strcmp(v->name, "asterisk.conf")) { 01131 ast_log(LOG_WARNING, "Cannot bind 'asterisk.conf'!\n"); 01132 continue; 01133 } 01134 01135 if (!strcmp(v->name, "logger.conf")) { 01136 ast_log(LOG_WARNING, "Cannot bind 'logger.conf'!\n"); 01137 continue; 01138 } 01139 01140 if (!driver || !database) 01141 continue; 01142 if (!strcasecmp(v->name, "sipfriends")) { 01143 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"); 01144 append_mapping("sipusers", driver, database, table ? table : "sipfriends"); 01145 append_mapping("sippeers", driver, database, table ? table : "sipfriends"); 01146 } else if (!strcasecmp(v->name, "iaxfriends")) { 01147 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"); 01148 append_mapping("iaxusers", driver, database, table ? table : "iaxfriends"); 01149 append_mapping("iaxpeers", driver, database, table ? table : "iaxfriends"); 01150 } else 01151 append_mapping(v->name, driver, database, table); 01152 } 01153 01154 ast_config_destroy(config); 01155 return 0; 01156 }
| int register_config_cli | ( | void | ) |
Definition at line 1411 of file config.c.
References ast_cli_register_multiple(), and cli_config.
Referenced by main().
01412 { 01413 ast_cli_register_multiple(cli_config, sizeof(cli_config) / sizeof(struct ast_cli_entry)); 01414 return 0; 01415 }
1.5.1