Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

config_pvt.h File Reference

#include <asterisk/config.h>

Go to the source code of this file.

Defines

#define CONFIG_KEYWORD_STRLEN   128
#define CONFIG_KEYWORD_ARRAYLEN   512
#define MAX_INCLUDE_LEVEL   10

Functions

int ast_config_register (struct ast_config_reg *new)
int ast_config_deregister (struct ast_config_reg *del)
void ast_cust_config_on (void)
void ast_cust_config_off (void)
int ast_cust_config_active (void)
ast_config_regget_config_registrations (void)
ast_config_regget_ast_cust_config (char *name)
ast_config_regget_ast_cust_config_keyword (char *name)
void ast_config_destroy_all (void)
int ast_category_delete (struct ast_config *cfg, char *category)
int ast_variable_delete (struct ast_config *cfg, char *category, char *variable, char *value)
int ast_save (char *filename, struct ast_config *cfg, char *generator)
ast_configast_new_config (void)
ast_categoryast_new_category (char *name)
ast_variableast_new_variable (char *name, char *value)
int ast_cust_config_register (struct ast_config_reg *new)
int ast_cust_config_deregister (struct ast_config_reg *new)
int register_config_cli (void)
int read_ast_cust_config (void)


Define Documentation

#define CONFIG_KEYWORD_ARRAYLEN   512
 

Definition at line 8 of file config_pvt.h.

Referenced by read_ast_cust_config().

#define CONFIG_KEYWORD_STRLEN   128
 

Definition at line 7 of file config_pvt.h.

#define MAX_INCLUDE_LEVEL   10
 

Definition at line 11 of file config_pvt.h.


Function Documentation

int ast_category_delete struct ast_config cfg,
char *  category
 

int ast_config_deregister struct ast_config_reg del  ) 
 

Definition at line 892 of file config.c.

References ast_mutex_lock, ast_mutex_unlock, and ast_config_reg::next.

Referenced by ast_config_destroy_all(), and ast_cust_config_deregister().

00893 {
00894    struct ast_config_reg *ptr=NULL,*last=NULL;
00895    ast_mutex_lock(&ast_cust_config_lock);
00896    for (ptr=ast_cust_config_list;ptr;ptr=ptr->next) {
00897       if (ptr == del) {
00898          if (last && ptr->next) {
00899             last->next = ptr->next;
00900          } else if (last && ! ptr->next) {
00901             last->next = NULL;
00902          } else if (!last && ptr->next) {
00903             ast_cust_config_list = ptr->next;
00904          } else if (!last && !ptr->next) {
00905             ast_cust_config_list = NULL;
00906          }
00907       }
00908       last = ptr;
00909    }
00910    ast_mutex_unlock(&ast_cust_config_lock);
00911    return 0;
00912 }

void ast_config_destroy_all void   ) 
 

Definition at line 860 of file config.c.

References ast_config_deregister(), ast_mutex_lock, ast_mutex_unlock, key(), and ast_config_reg::next.

00861 {
00862    struct ast_config_reg *key;
00863    ast_mutex_lock(&ast_cust_config_lock);
00864    for (key=ast_cust_config_list;key;key=key->next) {
00865       ast_config_deregister(key);
00866    }
00867    ast_cust_config_list = NULL;
00868    ast_mutex_unlock(&ast_cust_config_lock);
00869 }

int ast_config_register struct ast_config_reg new  ) 
 

Definition at line 876 of file config.c.

References ast_log(), ast_mutex_lock, ast_mutex_unlock, LOG_NOTICE, ast_config_reg::name, and ast_config_reg::next.

Referenced by ast_cust_config_register().

00877 {
00878    struct ast_config_reg *ptr;
00879    ast_mutex_lock(&ast_cust_config_lock);
00880    new->keycount = 0;
00881    if (!ast_cust_config_list) {
00882       ast_cust_config_list = new;
00883    } else {
00884       for(ptr=ast_cust_config_list;ptr->next;ptr=ptr->next);
00885          ptr->next = new;
00886    }
00887    ast_mutex_unlock(&ast_cust_config_lock);
00888    ast_log(LOG_NOTICE,"Registered Config Engine %s\n",new->name);
00889    return 1;
00890 }

int ast_cust_config_active void   ) 
 

Definition at line 914 of file config.c.

00914                                  {
00915    return (ast_cust_config >0) ? 1 : 0;
00916 }

int ast_cust_config_deregister struct ast_config_reg new  ) 
 

Definition at line 1024 of file config.c.

References ast_config_deregister(), and read_ast_cust_config().

01025 {
01026    ast_config_deregister(new);
01027    read_ast_cust_config();
01028    return 1;
01029 }

void ast_cust_config_off void   ) 
 

void ast_cust_config_on void   ) 
 

int ast_cust_config_register struct ast_config_reg new  ) 
 

Definition at line 1018 of file config.c.

References ast_config_register(), and read_ast_cust_config().

01019 {
01020    ast_config_register(new);
01021    read_ast_cust_config();
01022    return 1;
01023 }

struct ast_category* ast_new_category char *  name  ) 
 

Definition at line 979 of file config.c.

References malloc.

00980 {
00981    struct ast_category *category;
00982    category = malloc(sizeof(struct ast_category));
00983    if (category) {
00984       memset(category,0,sizeof(struct ast_category));
00985       strncpy(category->name,name,sizeof(category->name) - 1);
00986    }
00987    return category;
00988 }

struct ast_config* ast_new_config void   ) 
 

Definition at line 969 of file config.c.

References malloc.

00970 {
00971    struct ast_config *config;
00972    config = malloc(sizeof(struct ast_config));
00973    memset(config,0,sizeof(struct ast_config));
00974    return config;
00975 }

struct ast_variable* ast_new_variable char *  name,
char *  value
 

Definition at line 991 of file config.c.

References free, malloc, and ast_variable::value.

00992 {
00993    struct ast_variable *variable;
00994    variable = malloc(sizeof(struct ast_variable));
00995    if (variable) {
00996       memset(variable,0,sizeof(struct ast_variable));
00997       variable->object=0;
00998       variable->name = malloc(strlen(name)+1);
00999       if (variable->name) {
01000          strcpy(variable->name,name);
01001          variable->value = malloc(strlen(value)+1);
01002          if (variable->value) {
01003             strcpy(variable->value,value);
01004          } else {
01005             free(variable->name);
01006             variable->name = NULL;
01007          }
01008       }
01009    }
01010    if (!variable->value) {
01011       free(variable);
01012       variable = NULL;
01013    }
01014       
01015    return variable;
01016 }

int ast_save char *  filename,
struct ast_config cfg,
char *  generator
 

Definition at line 653 of file config.c.

References AST_CONFIG_DIR, ast_verbose(), ast_variable::blanklines, ast_comment::cmt, ast_variable::name, ast_category::name, ast_category::next, ast_variable::next, ast_variable::object, option_debug, option_verbose, ast_variable::precomments, ast_category::root, ast_config::root, ast_variable::sameline, ast_variable::value, and VERBOSE_PREFIX_2.

00654 {
00655    FILE *f;
00656    char fn[256];
00657    char date[256]="";
00658    time_t t;
00659    struct ast_variable *var;
00660    struct ast_category *cat;
00661    int blanklines = 0;
00662    if (configfile[0] == '/') {
00663       strncpy(fn, configfile, sizeof(fn)-1);
00664    } else {
00665       snprintf(fn, sizeof(fn), "%s/%s", AST_CONFIG_DIR, configfile);
00666    }
00667    time(&t);
00668    strncpy(date, ctime(&t), sizeof(date) - 1);
00669    if ((f = fopen(fn, "w"))) {
00670       if ((option_verbose > 1) && !option_debug)
00671          ast_verbose(  VERBOSE_PREFIX_2 "Saving '%s': ", fn);
00672       fprintf(f, ";!\n");
00673       fprintf(f, ";! Automatically generated configuration file\n");
00674       fprintf(f, ";! Filename: %s (%s)\n", configfile, fn);
00675       fprintf(f, ";! Generator: %s\n", generator);
00676       fprintf(f, ";! Creation Date: %s", date);
00677       fprintf(f, ";!\n");
00678       cat = cfg->root;
00679       while(cat) {
00680 #ifdef PRESERVE_COMMENTS
00681          /* Dump any precomments */
00682          dump_comments(f, cat->precomments);
00683 #endif
00684          /* Dump section with any appropriate comment */
00685 #ifdef PRESERVE_COMMENTS
00686          if (cat->sameline) 
00687             fprintf(f, "[%s]  ; %s\n", cat->name, cat->sameline->cmt);
00688          else
00689 #endif
00690             fprintf(f, "[%s]\n", cat->name);
00691          var = cat->root;
00692          while(var) {
00693 #ifdef PRESERVE_COMMENTS
00694             dump_comments(f, var->precomments);
00695 #endif            
00696             if (var->sameline) 
00697                fprintf(f, "%s %s %s  ; %s\n", var->name, (var->object ? "=>" : "="), var->value, var->sameline->cmt);
00698             else  
00699                fprintf(f, "%s %s %s\n", var->name, (var->object ? "=>" : "="), var->value);
00700             if (var->blanklines) {
00701                blanklines = var->blanklines;
00702                while (blanklines) {
00703                   fprintf(f, "\n");
00704                   blanklines--;
00705                }
00706             }
00707                
00708             var = var->next;
00709          }
00710 #if 0
00711          /* Put an empty line */
00712          fprintf(f, "\n");
00713 #endif
00714          cat = cat->next;
00715       }
00716 #ifdef PRESERVE_COMMENTS
00717       dump_comments(f, cfg->trailingcomments);
00718 #endif      
00719    } else {
00720       if (option_debug)
00721          printf("Unable to open for writing: %s\n", fn);
00722       else if (option_verbose > 1)
00723          printf( "Unable to write (%s)", strerror(errno));
00724       return -1;
00725    }
00726    fclose(f);
00727    return 0;
00728 }

int ast_variable_delete struct ast_config cfg,
char *  category,
char *  variable,
char *  value
 

struct ast_config_reg* get_ast_cust_config char *  name  ) 
 

Definition at line 848 of file config.c.

References ast_mutex_lock, ast_mutex_unlock, ast_config_reg::name, and ast_config_reg::next.

Referenced by read_ast_cust_config().

00849 {
00850    struct ast_config_reg *ptr=NULL;
00851    ast_mutex_lock(&ast_cust_config_lock);
00852    for (ptr=ast_cust_config_list;ptr;ptr=ptr->next) {
00853       if (!strcmp(name,ptr->name))
00854          break;
00855    }
00856    ast_mutex_unlock(&ast_cust_config_lock);
00857    return ptr;
00858 }

struct ast_config_reg* get_ast_cust_config_keyword char *  name  ) 
 

Definition at line 833 of file config.c.

References ast_mutex_lock, ast_mutex_unlock, ast_config_reg::keycount, ast_config_reg::keywords, and ast_config_reg::next.

Referenced by read_ast_cust_config().

00834 {
00835    struct ast_config_reg *reg,*ret=NULL;
00836    int x=0;
00837    ast_mutex_lock(&ast_cust_config_lock);
00838    for (reg=ast_cust_config_list;reg && !ret;reg=reg->next) {
00839       for (x=0;x<reg->keycount && !ret ;x++) {
00840          if (!strcmp(reg->keywords[x],name))
00841             ret=reg;
00842       }
00843    }
00844    ast_mutex_unlock(&ast_cust_config_lock);
00845    return ret;
00846 }

struct ast_config_reg* get_config_registrations void   ) 
 

Definition at line 871 of file config.c.

00872 {
00873    return ast_cust_config_list;
00874 }

int read_ast_cust_config void   ) 
 

Definition at line 1072 of file config.c.

References ast_destroy(), ast_load(), ast_log(), ast_variable_browse(), CONFIG_KEYWORD_ARRAYLEN, get_ast_cust_config(), get_ast_cust_config_keyword(), ast_config_reg::keycount, ast_config_reg::keywords, LOG_NOTICE, LOG_WARNING, ast_variable::name, ast_variable::next, and ast_variable::value.

Referenced by ast_cust_config_deregister(), ast_cust_config_register(), ast_module_reload(), and main().

01073 {
01074    char *cfg = config_conf_file;
01075    struct ast_config *config;
01076    struct ast_variable *v;
01077    struct ast_config_reg *ptr;
01078    struct ast_config_reg *test = NULL;
01079 
01080    clear_cust_keywords();
01081    config = ast_load(cfg);
01082    if (config) {
01083       for (v = ast_variable_browse(config,"settings");v;v=v->next) {
01084          
01085          ptr = get_ast_cust_config(v->value);
01086          if (ptr) {
01087             if (ptr->keycount >= CONFIG_KEYWORD_ARRAYLEN) {
01088                ast_log(LOG_WARNING,"Max Number of Bindings exceeded for %s->%s %d/%d\n",v->name,v->value,ptr->keycount,CONFIG_KEYWORD_ARRAYLEN);
01089             } else {
01090                if (strcmp(v->name,config_conf_file) && strcmp(v->name,"asterisk.conf")) {
01091                   if (!(test = get_ast_cust_config_keyword(v->name))) {
01092                      ast_log(LOG_NOTICE,"Binding: %s to %s\n",v->name,v->value);
01093                      strncpy(ptr->keywords[ptr->keycount],v->name,sizeof(ptr->keywords[ptr->keycount]) - 1);
01094                      ptr->keywords[ptr->keycount][sizeof(ptr->keywords[ptr->keycount])-1] = '\0';
01095                      ptr->keycount++;
01096                   }
01097                } else {
01098                   ast_log(LOG_WARNING,"Cannot bind %s, Permission Denied\n",v->name);
01099                }
01100             }
01101          }
01102       }
01103       
01104       ast_destroy(config);
01105    }
01106 
01107    return 0;
01108 }

int register_config_cli void   ) 
 

Definition at line 1067 of file config.c.

References ast_cli_register().

Referenced by main().

01068 {
01069    return ast_cli_register(&config_command_struct);
01070 }


Generated on Sat Nov 25 19:10:02 2006 for Asterisk by  doxygen 1.4.2