Fixes from bkw_. Formatting in app_db.c and handle start right in cdr_pgsql.c

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3415 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
James Golovich
2004-07-09 16:19:00 +00:00
parent f107562f75
commit 9e0e3799bf
2 changed files with 175 additions and 238 deletions

View File

@@ -30,21 +30,21 @@
static char *tdesc = "Database access functions for Asterisk extension logic"; static char *tdesc = "Database access functions for Asterisk extension logic";
static char *g_descrip = static char *g_descrip =
" DBget(varname=family/key): Retrieves a value from the Asterisk\n" " DBget(varname=family/key): Retrieves a value from the Asterisk\n"
"database and stores it in the given variable. Always returns 0. If the\n" "database and stores it in the given variable. Always returns 0. If the\n"
"requested key is not found, jumps to priority n+101 if available.\n"; "requested key is not found, jumps to priority n+101 if available.\n";
static char *p_descrip = static char *p_descrip =
" DBput(family/key=value): Stores the given value in the Asterisk\n" " DBput(family/key=value): Stores the given value in the Asterisk\n"
"database. Always returns 0.\n"; "database. Always returns 0.\n";
static char *d_descrip = static char *d_descrip =
" DBdel(family/key): Deletes a key from the Asterisk database. Always\n" " DBdel(family/key): Deletes a key from the Asterisk database. Always\n"
"returns 0.\n"; "returns 0.\n";
static char *dt_descrip = static char *dt_descrip =
" DBdeltree(family[/keytree]): Deletes a family or keytree from the Asterisk\n" " DBdeltree(family[/keytree]): Deletes a family or keytree from the Asterisk\n"
"database. Always returns 0.\n"; "database. Always returns 0.\n";
static char *g_app = "DBget"; static char *g_app = "DBget";
static char *p_app = "DBput"; static char *p_app = "DBput";
@@ -60,255 +60,196 @@ STANDARD_LOCAL_USER;
LOCAL_USER_DECL; LOCAL_USER_DECL;
static int deltree_exec (struct ast_channel *chan, void *data)
static int
deltree_exec (struct ast_channel *chan, void *data)
{ {
int arglen; int arglen;
char *argv, *family, *keytree; char *argv, *family, *keytree;
arglen = strlen (data); arglen = strlen (data);
argv = alloca (arglen + 1); argv = alloca (arglen + 1);
if (!argv) /* Why would this fail? */ if (!argv) { /* Why would this fail? */
{ ast_log (LOG_DEBUG, "Memory allocation failed\n");
ast_log (LOG_DEBUG, "Memory allocation failed\n"); return 0;
return 0;
}
memcpy (argv, data, arglen + 1);
if (strchr (argv, '/')) {
{
family = strsep (&argv, "/");
keytree = strsep (&argv, "\0");
if (!family || !keytree)
{
ast_log (LOG_DEBUG, "Ignoring; Syntax error in argument\n");
return 0;
} }
if (!strlen (keytree)) memcpy (argv, data, arglen + 1);
keytree = 0;
}
} else
{
family = argv;
keytree = 0;
}
if (option_verbose > 2) if (strchr (argv, '/')) {
{ family = strsep (&argv, "/");
if (keytree) keytree = strsep (&argv, "\0");
ast_verbose (VERBOSE_PREFIX_3 "DBdeltree: family=%s, keytree=%s\n", if (!family || !keytree) {
family, keytree); ast_log (LOG_DEBUG, "Ignoring; Syntax error in argument\n");
else return 0;
ast_verbose (VERBOSE_PREFIX_3 "DBdeltree: family=%s\n", family); }
} if (!strlen (keytree))
keytree = 0;
if (ast_db_deltree (family, keytree)) } else {
{ family = argv;
if (option_verbose > 2) keytree = 0;
ast_verbose (VERBOSE_PREFIX_3
"DBdeltree: Error deleting key from database.\n");
}
return 0;
}
static int
del_exec (struct ast_channel *chan, void *data)
{
int arglen;
char *argv, *family, *key;
arglen = strlen (data);
argv = alloca (arglen + 1);
if (!argv) /* Why would this fail? */
{
ast_log (LOG_DEBUG, "Memory allocation failed\n");
return 0;
}
memcpy (argv, data, arglen + 1);
if (strchr (argv, '/'))
{
family = strsep (&argv, "/");
key = strsep (&argv, "\0");
if (!family || !key)
{
ast_log (LOG_DEBUG, "Ignoring; Syntax error in argument\n");
return 0;
}
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3
"DBdel: family=%s, key=%s\n", family, key);
if (ast_db_del (family, key))
{
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3
"DBdel: Error deleting key from database.\n");
}
}
else
{
ast_log (LOG_DEBUG, "Ignoring, no parameters\n");
}
return 0;
}
static int
put_exec (struct ast_channel *chan, void *data)
{
int arglen;
char *argv, *value, *family, *key;
arglen = strlen (data);
argv = alloca (arglen + 1);
if (!argv) /* Why would this fail? */
{
ast_log (LOG_DEBUG, "Memory allocation failed\n");
return 0;
}
memcpy (argv, data, arglen + 1);
if (strchr (argv, '/') && strchr (argv, '='))
{
family = strsep (&argv, "/");
key = strsep (&argv, "=");
value = strsep (&argv, "\0");
if (!value || !family || !key)
{
ast_log (LOG_DEBUG, "Ignoring; Syntax error in argument\n");
return 0;
}
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3
"DBput: family=%s, key=%s, value=%s\n", family, key,
value);
if (ast_db_put (family, key, value))
{
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3
"DBput: Error writing value to database.\n");
} }
} if (option_verbose > 2) {
else if (keytree)
{ ast_verbose (VERBOSE_PREFIX_3 "DBdeltree: family=%s, keytree=%s\n", family, keytree);
ast_log (LOG_DEBUG, "Ignoring, no parameters\n"); else
} ast_verbose (VERBOSE_PREFIX_3 "DBdeltree: family=%s\n", family);
return 0;
}
static int
get_exec (struct ast_channel *chan, void *data)
{
int arglen;
char *argv, *varname, *family, *key;
char dbresult[256];
arglen = strlen (data);
argv = alloca (arglen + 1);
if (!argv) /* Why would this fail? */
{
ast_log (LOG_DEBUG, "Memory allocation failed\n");
return 0;
}
memcpy (argv, data, arglen + 1);
if (strchr (argv, '=') && strchr (argv, '/'))
{
varname = strsep (&argv, "=");
family = strsep (&argv, "/");
key = strsep (&argv, "\0");
if (!varname || !family || !key)
{
ast_log (LOG_DEBUG, "Ignoring; Syntax error in argument\n");
return 0;
}
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3
"DBget: varname=%s, family=%s, key=%s\n", varname,
family, key);
if (!ast_db_get (family, key, dbresult, sizeof (dbresult) - 1))
{
pbx_builtin_setvar_helper (chan, varname, dbresult);
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3
"DBget: set variable %s to %s\n", varname, dbresult);
}
else
{
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3
"DBget: Value not found in database.\n");
/* Send the call to n+101 priority, where n is the current priority */
if (ast_exists_extension
(chan, chan->context, chan->exten, chan->priority + 101,
chan->callerid))
chan->priority += 100;
} }
} if (ast_db_deltree (family, keytree)) {
else if (option_verbose > 2)
{ ast_verbose (VERBOSE_PREFIX_3 "DBdeltree: Error deleting key from database.\n");
ast_log (LOG_DEBUG, "Ignoring, no parameters\n"); }
}
return 0; return 0;
} }
int static int del_exec (struct ast_channel *chan, void *data)
unload_module (void)
{ {
int retval; int arglen;
char *argv, *family, *key;
STANDARD_HANGUP_LOCALUSERS; arglen = strlen (data);
retval = ast_unregister_application (dt_app); argv = alloca (arglen + 1);
retval |= ast_unregister_application (d_app); if (!argv) { /* Why would this fail? */
retval |= ast_unregister_application (p_app); ast_log (LOG_DEBUG, "Memory allocation failed\n");
retval |= ast_unregister_application (g_app); return 0;
}
memcpy (argv, data, arglen + 1);
return retval; if (strchr (argv, '/')) {
family = strsep (&argv, "/");
key = strsep (&argv, "\0");
if (!family || !key) {
ast_log (LOG_DEBUG, "Ignoring; Syntax error in argument\n");
return 0;
}
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "DBdel: family=%s, key=%s\n", family, key);
if (ast_db_del (family, key)) {
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "DBdel: Error deleting key from database.\n");
}
} else {
ast_log (LOG_DEBUG, "Ignoring, no parameters\n");
}
return 0;
} }
int static int put_exec (struct ast_channel *chan, void *data)
load_module (void)
{ {
int retval; int arglen;
char *argv, *value, *family, *key;
retval = ast_register_application (g_app, get_exec, g_synopsis, g_descrip); arglen = strlen (data);
if (!retval) argv = alloca (arglen + 1);
retval = if (!argv) { /* Why would this fail? */
ast_register_application (p_app, put_exec, p_synopsis, p_descrip); ast_log (LOG_DEBUG, "Memory allocation failed\n");
if (!retval) return 0;
retval = }
ast_register_application (d_app, del_exec, d_synopsis, d_descrip); memcpy (argv, data, arglen + 1);
if (!retval)
retval =
ast_register_application (dt_app, deltree_exec, dt_synopsis,
dt_descrip);
return retval; if (strchr (argv, '/') && strchr (argv, '=')) {
family = strsep (&argv, "/");
key = strsep (&argv, "=");
value = strsep (&argv, "\0");
if (!value || !family || !key) {
ast_log (LOG_DEBUG, "Ignoring; Syntax error in argument\n");
return 0;
}
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "DBput: family=%s, key=%s, value=%s\n", family, key, value);
if (ast_db_put (family, key, value)) {
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "DBput: Error writing value to database.\n");
}
} else {
ast_log (LOG_DEBUG, "Ignoring, no parameters\n");
}
return 0;
} }
char * static int get_exec (struct ast_channel *chan, void *data)
description (void)
{ {
return tdesc; int arglen;
char *argv, *varname, *family, *key;
char dbresult[256];
arglen = strlen (data);
argv = alloca (arglen + 1);
if (!argv) { /* Why would this fail? */
ast_log (LOG_DEBUG, "Memory allocation failed\n");
return 0;
}
memcpy (argv, data, arglen + 1);
if (strchr (argv, '=') && strchr (argv, '/')) {
varname = strsep (&argv, "=");
family = strsep (&argv, "/");
key = strsep (&argv, "\0");
if (!varname || !family || !key) {
ast_log (LOG_DEBUG, "Ignoring; Syntax error in argument\n");
return 0;
}
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "DBget: varname=%s, family=%s, key=%s\n", varname, family, key);
if (!ast_db_get (family, key, dbresult, sizeof (dbresult) - 1)) {
pbx_builtin_setvar_helper (chan, varname, dbresult);
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "DBget: set variable %s to %s\n", varname, dbresult);
} else {
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "DBget: Value not found in database.\n");
/* Send the call to n+101 priority, where n is the current priority */
if (ast_exists_extension (chan, chan->context, chan->exten, chan->priority + 101, chan->callerid))
chan->priority += 100;
}
} else {
ast_log (LOG_DEBUG, "Ignoring, no parameters\n");
}
return 0;
} }
int int unload_module (void)
usecount (void)
{ {
int res; int retval;
STANDARD_USECOUNT (res);
return res; STANDARD_HANGUP_LOCALUSERS;
retval = ast_unregister_application (dt_app);
retval |= ast_unregister_application (d_app);
retval |= ast_unregister_application (p_app);
retval |= ast_unregister_application (g_app);
return retval;
} }
char * int load_module (void)
key ()
{ {
return ASTERISK_GPL_KEY; int retval;
retval = ast_register_application (g_app, get_exec, g_synopsis, g_descrip);
if (!retval)
retval = ast_register_application (p_app, put_exec, p_synopsis, p_descrip);
if (!retval)
retval = ast_register_application (d_app, del_exec, d_synopsis, d_descrip);
if (!retval)
retval = ast_register_application (dt_app, deltree_exec, dt_synopsis, dt_descrip);
return retval;
}
char *description (void)
{
return tdesc;
}
int usecount (void)
{
int res;
STANDARD_USECOUNT (res);
return res;
}
char *key ()
{
return ASTERISK_GPL_KEY;
} }

View File

@@ -49,18 +49,14 @@ PGresult *result;
static int pgsql_log(struct ast_cdr *cdr) static int pgsql_log(struct ast_cdr *cdr)
{ {
struct tm tm; struct tm tm;
struct timeval tv;
char sqlcmd[2048], timestr[128]; char sqlcmd[2048], timestr[128];
time_t t; char *pgerror;
char *pgerror;
ast_mutex_lock(&pgsql_lock); ast_mutex_lock(&pgsql_lock);
memset(sqlcmd,0,2048); memset(sqlcmd,0,2048);
gettimeofday(&tv,NULL); localtime_r(&cdr->start.tv_sec,&tm);
t = tv.tv_sec;
localtime_r(&t,&tm);
strftime(timestr,128,DATE_FORMAT,&tm); strftime(timestr,128,DATE_FORMAT,&tm);
if ((!connected) && pghostname && pgdbuser && pgpassword && pgdbname) { if ((!connected) && pghostname && pgdbuser && pgpassword && pgdbname) {