Massive res_config_odbc.c formatting cleanups from bkw_. Thanks!!!
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@3405 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
679cc7f487
commit
5a0c2274bf
|
@ -9,7 +9,6 @@
|
|||
* Copyright (C) 2004 Anthony Minessale II <anthmct@yahoo.com>
|
||||
*/
|
||||
|
||||
|
||||
#include <asterisk/file.h>
|
||||
#include <asterisk/logger.h>
|
||||
#include <asterisk/channel.h>
|
||||
|
@ -23,231 +22,186 @@
|
|||
#include <string.h>
|
||||
#include <asterisk/res_odbc.h>
|
||||
|
||||
|
||||
|
||||
static char *tdesc = "Odbc Configuration";
|
||||
static char *tdesc = "ODBC Configuration";
|
||||
static struct ast_config_reg reg1;
|
||||
|
||||
|
||||
STANDARD_LOCAL_USER;
|
||||
|
||||
LOCAL_USER_DECL;
|
||||
|
||||
|
||||
static struct ast_config *config_odbc(char *file, struct ast_config *new_config_s,struct ast_category **new_cat_p,struct ast_variable **new_v_p,int recur
|
||||
static struct ast_config *config_odbc (char *file, struct ast_config *new_config_s, struct ast_category **new_cat_p, struct ast_variable **new_v_p, int recur
|
||||
#ifdef PRESERVE_COMMENTS
|
||||
,struct ast_comment_struct *acs
|
||||
, struct ast_comment_struct *acs
|
||||
#endif
|
||||
)
|
||||
{
|
||||
struct ast_config *config, *new;
|
||||
struct ast_variable *v, *cur_v, *new_v;
|
||||
struct ast_category *cur_cat, *new_cat;
|
||||
char table[128];
|
||||
char connection[128];
|
||||
int configured = 0, res = 0;
|
||||
odbc_obj *obj;
|
||||
SQLINTEGER err, commented, cat_metric, var_metric;
|
||||
SQLBIGINT id;
|
||||
char sql[255], filename[128], category[128], var_name[128], var_val[128];
|
||||
SQLSMALLINT rowcount;
|
||||
SQLHSTMT stmt;
|
||||
char last[80];
|
||||
int cat_started = 0;
|
||||
int var_started = 0;
|
||||
|
||||
) {
|
||||
if (new_config_s) {
|
||||
new = new_config_s;
|
||||
cat_started++;
|
||||
} else {
|
||||
new = ast_new_config ();
|
||||
}
|
||||
|
||||
last[0] = '\0';
|
||||
|
||||
if (!file || !strcmp (file, "res_config_odbc.conf"))
|
||||
return NULL; // cant configure myself with myself !
|
||||
|
||||
config = ast_load ("res_config_odbc.conf");
|
||||
|
||||
struct ast_config *config,*new;
|
||||
struct ast_variable *v,*cur_v,*new_v;
|
||||
struct ast_category *cur_cat,*new_cat;
|
||||
char table[128];
|
||||
char connection[128];
|
||||
int configured=0, res=0;
|
||||
odbc_obj *obj;
|
||||
SQLINTEGER err,commented,cat_metric,var_metric;
|
||||
SQLBIGINT id;
|
||||
char sql[255],filename[128],category[128],var_name[128],var_val[128];
|
||||
SQLSMALLINT rowcount;
|
||||
SQLHSTMT stmt;
|
||||
char last[80];
|
||||
int cat_started=0;
|
||||
int var_started=0;
|
||||
if (config) {
|
||||
for (v = ast_variable_browse (config, "settings"); v; v = v->next) {
|
||||
if (!strcmp (v->name, "table")) {
|
||||
strncpy (table, v->value, sizeof (table));
|
||||
configured++;
|
||||
} else if (!strcmp (v->name, "connection")) {
|
||||
strncpy (connection, v->value, sizeof (connection));
|
||||
configured++;
|
||||
}
|
||||
}
|
||||
ast_destroy (config);
|
||||
}
|
||||
|
||||
if (configured < 2)
|
||||
return NULL;
|
||||
|
||||
if(new_config_s) {
|
||||
new = new_config_s;
|
||||
cat_started++;
|
||||
}
|
||||
else
|
||||
new = ast_new_config();
|
||||
obj = fetch_odbc_obj (connection);
|
||||
if (!obj)
|
||||
return NULL;
|
||||
|
||||
last[0] = '\0';
|
||||
res = SQLAllocHandle (SQL_HANDLE_STMT, obj->con, &stmt);
|
||||
|
||||
if(!file || !strcmp(file,"res_config_odbc.conf"))
|
||||
return NULL; // cant configure myself with myself !
|
||||
SQLBindCol (stmt, 1, SQL_C_ULONG, &id, sizeof (id), &err);
|
||||
SQLBindCol (stmt, 2, SQL_C_ULONG, &cat_metric, sizeof (cat_metric), &err);
|
||||
SQLBindCol (stmt, 3, SQL_C_ULONG, &var_metric, sizeof (var_metric), &err);
|
||||
SQLBindCol (stmt, 4, SQL_C_ULONG, &commented, sizeof (commented), &err);
|
||||
SQLBindCol (stmt, 5, SQL_C_CHAR, &filename, sizeof (filename), &err);
|
||||
SQLBindCol (stmt, 6, SQL_C_CHAR, &category, sizeof (category), &err);
|
||||
SQLBindCol (stmt, 7, SQL_C_CHAR, &var_name, sizeof (var_name), &err);
|
||||
SQLBindCol (stmt, 8, SQL_C_CHAR, &var_val, sizeof (var_val), &err);
|
||||
|
||||
config = ast_load("res_config_odbc.conf");
|
||||
sprintf (sql, "select * from %s where filename='%s' and commented=0 order by filename,cat_metric desc,var_metric asc,id", table, file);
|
||||
res = SQLExecDirect (stmt, sql, SQL_NTS);
|
||||
|
||||
if(config) {
|
||||
for(v = ast_variable_browse(config,"settings");v;v=v->next) {
|
||||
if(!strcmp(v->name,"table")) {
|
||||
strncpy(table,v->value,sizeof(table));
|
||||
configured++;
|
||||
}
|
||||
else if(!strcmp(v->name,"connection")) {
|
||||
strncpy(connection,v->value,sizeof(connection));
|
||||
configured++;
|
||||
}
|
||||
}
|
||||
ast_destroy(config);
|
||||
}
|
||||
|
||||
if(configured < 2)
|
||||
return NULL;
|
||||
|
||||
obj = fetch_odbc_obj(connection);
|
||||
if(!obj)
|
||||
return NULL;
|
||||
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
|
||||
ast_log (LOG_WARNING, "SQL select error!\n[%s]\n\n", sql);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
res = SQLNumResultCols (stmt, &rowcount);
|
||||
|
||||
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
|
||||
ast_log (LOG_WARNING, "SQL select error!\n[%s]\n\n", sql);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (rowcount) {
|
||||
res = SQLFetch (stmt);
|
||||
cat_started = 0;
|
||||
|
||||
cur_cat = *new_cat_p;
|
||||
cur_v = *new_v_p;
|
||||
|
||||
res=SQLAllocHandle(SQL_HANDLE_STMT,obj->con, &stmt);
|
||||
if (cur_cat)
|
||||
cat_started = 1;
|
||||
if (cur_v)
|
||||
var_started = 1;
|
||||
|
||||
SQLBindCol(stmt,1,SQL_C_ULONG,&id,sizeof(id),&err);
|
||||
SQLBindCol(stmt,2,SQL_C_ULONG,&cat_metric,sizeof(cat_metric),&err);
|
||||
SQLBindCol(stmt,3,SQL_C_ULONG,&var_metric,sizeof(var_metric),&err);
|
||||
SQLBindCol(stmt,4,SQL_C_ULONG,&commented,sizeof(commented),&err);
|
||||
SQLBindCol(stmt,5,SQL_C_CHAR,&filename,sizeof(filename),&err);
|
||||
SQLBindCol(stmt,6,SQL_C_CHAR,&category,sizeof(category),&err);
|
||||
SQLBindCol(stmt,7,SQL_C_CHAR,&var_name,sizeof(var_name),&err);
|
||||
SQLBindCol(stmt,8,SQL_C_CHAR,&var_val,sizeof(var_val),&err);
|
||||
|
||||
sprintf(sql,"select * from %s where filename='%s' and commented=0 order by filename,cat_metric desc,var_metric asc,id",table,file);
|
||||
res = SQLExecDirect(stmt,sql,SQL_NTS);
|
||||
|
||||
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
|
||||
ast_log(LOG_WARNING,"SQL select error!\n[%s]\n\n",sql);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
res=SQLNumResultCols(stmt,&rowcount);
|
||||
|
||||
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
|
||||
ast_log(LOG_WARNING,"SQL select error!\n[%s]\n\n",sql);
|
||||
return NULL;
|
||||
}
|
||||
while (res != SQL_NO_DATA) {
|
||||
if (!strcmp (var_name, "#include") && recur < MAX_INCLUDE_LEVEL) {
|
||||
|
||||
|
||||
if(rowcount) {
|
||||
|
||||
res=SQLFetch(stmt);
|
||||
cat_started=0;
|
||||
|
||||
|
||||
|
||||
cur_cat = *new_cat_p;
|
||||
cur_v = *new_v_p;
|
||||
|
||||
if(cur_cat)
|
||||
cat_started=1;
|
||||
if(cur_v)
|
||||
var_started=1;
|
||||
|
||||
|
||||
|
||||
while(res != SQL_NO_DATA) {
|
||||
//ast_log(LOG_NOTICE,"found %s %s %s\n",filename,var_name,var_val);
|
||||
// build the config sql table probably needs to be improved!
|
||||
|
||||
if(!strcmp(var_name,"#include") && recur < MAX_INCLUDE_LEVEL) {
|
||||
|
||||
config_odbc(var_val,new,&cur_cat,&cur_v,recur + 1
|
||||
config_odbc (var_val, new, &cur_cat, &cur_v, recur + 1
|
||||
#ifdef PRESERVE_COMMENTS
|
||||
,acs
|
||||
, acs
|
||||
#endif
|
||||
);
|
||||
);
|
||||
} else {
|
||||
if (strcmp (last, category)) {
|
||||
strcpy (last, category);
|
||||
new_cat = (struct ast_category *) ast_new_category (category);
|
||||
|
||||
}
|
||||
else {
|
||||
if (!cat_started) {
|
||||
cat_started++;
|
||||
new->root = new_cat;
|
||||
cur_cat = new->root;
|
||||
} else {
|
||||
cur_cat->next = new_cat;
|
||||
cur_cat = cur_cat->next;
|
||||
}
|
||||
var_started = 0;
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(strcmp(last,category)) {
|
||||
strcpy(last,category);
|
||||
new_cat = (struct ast_category *) ast_new_category(category);
|
||||
|
||||
if(!cat_started) {
|
||||
cat_started++;
|
||||
new->root = new_cat;
|
||||
cur_cat=new->root;
|
||||
}
|
||||
else {
|
||||
cur_cat->next = new_cat;
|
||||
cur_cat = cur_cat->next;
|
||||
}
|
||||
var_started=0;
|
||||
|
||||
new_v = ast_new_variable (var_name, var_val);
|
||||
|
||||
if (!var_started) {
|
||||
var_started++;
|
||||
cur_cat->root = new_v;
|
||||
cur_v = cur_cat->root;
|
||||
} else {
|
||||
cur_v->next = new_v;
|
||||
cur_v = cur_v->next;
|
||||
}
|
||||
}
|
||||
|
||||
// next row
|
||||
res = SQLFetch (stmt);
|
||||
}
|
||||
|
||||
SQLFreeHandle (SQL_HANDLE_STMT, stmt);
|
||||
} else {
|
||||
ast_log (LOG_NOTICE, "found nothing\n");
|
||||
}
|
||||
return new;
|
||||
|
||||
new_v = ast_new_variable(var_name,var_val);
|
||||
|
||||
|
||||
if(!var_started) {
|
||||
var_started++;
|
||||
cur_cat->root = new_v;
|
||||
cur_v = cur_cat->root;
|
||||
}
|
||||
else {
|
||||
cur_v->next = new_v;
|
||||
cur_v = cur_v->next;
|
||||
}
|
||||
}
|
||||
|
||||
// next row
|
||||
res=SQLFetch(stmt);
|
||||
}
|
||||
|
||||
SQLFreeHandle(SQL_HANDLE_STMT,stmt);
|
||||
}
|
||||
else
|
||||
ast_log(LOG_NOTICE,"found nothing\n");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return new;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int unload_module(void)
|
||||
int unload_module (void)
|
||||
{
|
||||
ast_cust_config_deregister(®1);
|
||||
ast_log(LOG_NOTICE,"res_config_odbc unloaded.\n");
|
||||
ast_cust_config_deregister (®1);
|
||||
ast_log (LOG_NOTICE, "res_config_odbc unloaded.\n");
|
||||
STANDARD_HANGUP_LOCALUSERS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int load_module(void)
|
||||
int load_module (void)
|
||||
{
|
||||
|
||||
memset(®1,0,sizeof(struct ast_config_reg));
|
||||
strcpy(reg1.name,"odbc");
|
||||
memset (®1, 0, sizeof (struct ast_config_reg));
|
||||
strcpy (reg1.name, "odbc");
|
||||
reg1.func = config_odbc;
|
||||
ast_cust_config_register(®1);
|
||||
ast_log(LOG_NOTICE,"res_config_odbc loaded.\n");
|
||||
ast_cust_config_register (®1);
|
||||
ast_log (LOG_NOTICE, "res_config_odbc loaded.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *description(void)
|
||||
char *description (void)
|
||||
{
|
||||
return tdesc;
|
||||
return tdesc;
|
||||
}
|
||||
|
||||
int usecount(void)
|
||||
int usecount (void)
|
||||
{
|
||||
/* never unload a config module */
|
||||
return 1;
|
||||
}
|
||||
|
||||
char *key()
|
||||
char *key ()
|
||||
{
|
||||
return ASTERISK_GPL_KEY;
|
||||
return ASTERISK_GPL_KEY;
|
||||
}
|
||||
|
||||
|
||||
|
|
Reference in New Issue