From 0721731e93eb315ab19418b95fad8690417b8994 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@f38db490-d61c-443f-a65b-d21fe96a405b> Date: Mon, 21 Nov 2005 16:53:51 +0000 Subject: This commit was manufactured by cvs2svn to create tag 'v1-0-10'. git-svn-id: http://svn.digium.com/svn/asterisk/tags/v1-0-10@7178 f38db490-d61c-443f-a65b-d21fe96a405b --- res/res_odbc.c | 112 ++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 76 insertions(+), 36 deletions(-) (limited to 'res/res_odbc.c') diff --git a/res/res_odbc.c b/res/res_odbc.c index c8efb0620..9c237ddd6 100755 --- a/res/res_odbc.c +++ b/res/res_odbc.c @@ -99,10 +99,12 @@ static int load_odbc_config(void) if (!strcmp(cat, "ENV")) { for (v = ast_variable_browse(config, cat); v; v = v->next) { env_var = malloc(strlen(v->name) + strlen(v->value) + 2); - sprintf(env_var, "%s=%s", v->name, v->value); - ast_log(LOG_NOTICE, "Adding ENV var: %s=%s\n", v->name, v->value); - putenv(env_var); - free(env_var); + if (env_var) { + sprintf(env_var, "%s=%s", v->name, v->value); + ast_log(LOG_NOTICE, "Adding ENV var: %s=%s\n", v->name, v->value); + putenv(env_var); + free(env_var); + } } cat = ast_category_browse(config, cat); @@ -145,39 +147,27 @@ static int load_odbc_config(void) int odbc_dump_fd(int fd, odbc_obj * obj) { - ast_cli(fd, "\n\nName: %s\nDSN: %s\nConnected: %s\n\n", obj->name, obj->dsn, obj->up ? "yes" : "no"); + ast_cli(fd, "Name: %s\nDSN: %s\nConnected: %s\n", obj->name, obj->dsn, obj->up ? "yes" : "no"); + return 0; +} + +static int odbc_connect_usage(int fd) +{ + ast_cli(fd, "usage odbc connect \n"); return 0; } -static int odbc_usage(int fd) +static int odbc_disconnect_usage(int fd) { - ast_cli(fd, "\n\nusage odbc .. \n\n"); + ast_cli(fd, "usage odbc disconnect \n"); return 0; } -static int odbc_command(int fd, int argc, char **argv) +static int odbc_show_command(int fd, int argc, char **argv) { odbc_obj *obj; int x = 0; - if (!argv[1]) - return odbc_usage(fd); - - ast_cli(fd, "\n\n"); - - if (!strcmp(argv[1], "connect") || !strcmp(argv[1], "disconnect")) { - if (!argv[2]) - return odbc_usage(fd); - - obj = odbc_read(ODBC_REGISTRY, argv[2]); - if (obj) { - if (!strcmp(argv[1], "connect")) - odbc_obj_connect(obj); - - if (!strcmp(argv[1], "disconnect")) - odbc_obj_disconnect(obj); - } - - } else if (!strcmp(argv[1], "show")) { + if (!strcmp(argv[1], "show")) { if (!argv[2] || (argv[2] && !strcmp(argv[2], "all"))) { for (x = 0; x < MAX_ODBC_HANDLES; x++) { if (!ODBC_REGISTRY[x].used) @@ -190,18 +180,62 @@ static int odbc_command(int fd, int argc, char **argv) if (obj) odbc_dump_fd(fd, obj); } + } + return 0; +} - } else { - return odbc_usage(fd); +static int odbc_disconnect_command(int fd, int argc, char **argv){ + odbc_obj *obj; + if (!strcmp(argv[1], "disconnect")) { + if (!argv[2]) + return odbc_disconnect_usage(fd); + + obj = odbc_read(ODBC_REGISTRY, argv[2]); + if (obj) { + odbc_obj_disconnect(obj); + } } - ast_cli(fd, "\n"); return 0; } -static struct ast_cli_entry odbc_command_struct = { - {"odbc", NULL}, odbc_command, - "Execute ODBC Command", "obdc .. ", NULL -}; +static int odbc_connect_command(int fd, int argc, char **argv){ + odbc_obj *obj; + if (!argv[1]) + return odbc_connect_usage(fd); + + if (!strcmp(argv[1], "connect") || !strcmp(argv[1], "disconnect")) { + if (!argv[2]) + return odbc_connect_usage(fd); + + obj = odbc_read(ODBC_REGISTRY, argv[2]); + if (obj) { + odbc_obj_connect(obj); + } + } + return 0; +} + +static char connect_usage[] = +"Usage: odbc connect \n" +" Connect to ODBC DSN\n"; + +static char disconnect_usage[] = +"Usage: odbc connect \n" +" Disconnect from ODBC DSN\n"; + +static char show_usage[] = +"Usage: odbc show {DSN}\n" +" Show ODBC {DSN}\n" +" Specifying DSN will show that DSN else, all DSNs are shown\n"; + +static struct ast_cli_entry odbc_connect_struct = + { { "odbc", "connect", NULL }, odbc_connect_command, "Connect to ODBC DSN", connect_usage }; + +static struct ast_cli_entry odbc_disconnect_struct = + { { "odbc", "disconnect", NULL }, odbc_disconnect_command, "Disconnect from ODBC DSN", disconnect_usage }; + +static struct ast_cli_entry odbc_show_struct = + { { "odbc", "show", NULL }, odbc_show_command, "Show ODBC DSN(s)", show_usage }; /* api calls */ @@ -222,6 +256,8 @@ odbc_obj *new_odbc_obj(char *name, char *dsn, char *username, char *password) static odbc_obj *new; new = malloc(sizeof(odbc_obj)); + if (!new) + return NULL; memset(new, 0, sizeof(odbc_obj)); new->env = SQL_NULL_HANDLE; @@ -362,7 +398,9 @@ int unload_module(void) { STANDARD_HANGUP_LOCALUSERS; odbc_destroy(); - ast_cli_unregister(&odbc_command_struct); + ast_cli_unregister(&odbc_disconnect_struct); + ast_cli_unregister(&odbc_connect_struct); + ast_cli_unregister(&odbc_show_struct); ast_log(LOG_NOTICE, "res_odbc unloaded.\n"); return 0; } @@ -371,7 +409,9 @@ int load_module(void) { odbc_init(); load_odbc_config(); - ast_cli_register(&odbc_command_struct); + ast_cli_register(&odbc_disconnect_struct); + ast_cli_register(&odbc_connect_struct); + ast_cli_register(&odbc_show_struct); ast_log(LOG_NOTICE, "res_odbc loaded.\n"); return 0; } -- cgit v1.2.3