diff options
-rwxr-xr-x | cdr.c | 1 | ||||
-rwxr-xr-x | cli.c | 5 | ||||
-rwxr-xr-x | include/asterisk/cdr.h | 1 | ||||
-rwxr-xr-x | include/asterisk/pbx.h | 1 | ||||
-rwxr-xr-x | pbx.c | 22 |
5 files changed, 30 insertions, 0 deletions
@@ -290,6 +290,7 @@ int ast_cdr_init(struct ast_cdr *cdr, struct ast_channel *c) if (!ast_strlen_zero(cdr->channel)) ast_log(LOG_WARNING, "CDR already initialized on '%s'\n", chan); strncpy(cdr->channel, c->name, sizeof(cdr->channel) - 1); + cdr->chan = c; /* Grab source from ANI or normal Caller*ID */ if (c->cid.cid_ani) num = c->cid.cid_ani; @@ -17,6 +17,7 @@ #include <asterisk/options.h> #include <asterisk/cli.h> #include <asterisk/module.h> +#include <asterisk/pbx.h> #include <asterisk/channel.h> #include <asterisk/channel_pvt.h> #include <asterisk/manager.h> @@ -597,6 +598,7 @@ static int handle_showchan(int fd, int argc, char *argv[]) { struct ast_channel *c=NULL; struct timeval now; + char buf[1024]; long elapsed_seconds=0; int hour=0, min=0, sec=0; if (argc != 3) @@ -649,6 +651,9 @@ static int handle_showchan(int fd, int argc, char *argv[]) c->context, c->exten, c->priority, c->callgroup, c->pickupgroup, ( c->appl ? c->appl : "(N/A)" ), ( c-> data ? (!ast_strlen_zero(c->data) ? c->data : "(Empty)") : "(None)"), c->stack, (c->blocking ? c->blockproc : "(Not Blocking)")); + if(pbx_builtin_serialize_variables(c,buf,sizeof(buf))) + ast_cli(fd,"Variables:\n%s\n",buf); + ast_mutex_unlock(&c->lock); break; } diff --git a/include/asterisk/cdr.h b/include/asterisk/cdr.h index 807ad6419..6c0d12319 100755 --- a/include/asterisk/cdr.h +++ b/include/asterisk/cdr.h @@ -78,6 +78,7 @@ struct ast_cdr { char uniqueid[32]; /* User field */ char userfield[AST_MAX_USER_FIELD]; + struct ast_channel *chan; struct ast_cdr *next; }; diff --git a/include/asterisk/pbx.h b/include/asterisk/pbx.h index 1a8b7e502..96e3de71c 100755 --- a/include/asterisk/pbx.h +++ b/include/asterisk/pbx.h @@ -542,6 +542,7 @@ struct ast_ignorepat *ast_walk_context_ignorepats(struct ast_context *con, struct ast_ignorepat *ip); struct ast_sw *ast_walk_context_switches(struct ast_context *con, struct ast_sw *sw); +int pbx_builtin_serialize_variables(struct ast_channel *chan, char *buf, size_t size); extern char *pbx_builtin_getvar_helper(struct ast_channel *chan, char *name); extern void pbx_builtin_setvar_helper(struct ast_channel *chan, char *name, char *value); extern void pbx_builtin_clear_globals(void); @@ -4903,6 +4903,28 @@ static int pbx_builtin_goto(struct ast_channel *chan, void *data) return 0; } +int pbx_builtin_serialize_variables(struct ast_channel *chan, char *buf, size_t size) +{ + struct ast_var_t *variables; + struct varshead *headp; + int total = 0; + + memset(buf,0,size); + if (chan) { + headp=&chan->varshead; + AST_LIST_TRAVERSE(headp,variables,entries) { + snprintf(buf + strlen(buf), size - strlen(buf), "%s=%s\n", ast_var_name(variables), ast_var_value(variables)); + if(strlen(buf) >= size) { + ast_log(LOG_ERROR,"Data Buffer Size Exceeded!\n"); + break; + } + total++; + } + } + + return total; +} + char *pbx_builtin_getvar_helper(struct ast_channel *chan, char *name) { struct ast_var_t *variables; |