diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-12-02 00:51:15 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-12-02 00:51:15 +0000 |
commit | d7003c33ba1ba6674720ad1429f8bc147a6be70a (patch) | |
tree | 310fdf875507aea0f8437d8371ca4e69f768fc7c /apps/app_page.c | |
parent | f0aa8b727f711f33d029e1c110bb790f8ec38006 (diff) |
inherit channel variables into channels created by Page() application (issue #5888)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2@7274 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_page.c')
-rw-r--r-- | apps/app_page.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/apps/app_page.c b/apps/app_page.c index 441208fd9..39a0eb4bc 100644 --- a/apps/app_page.c +++ b/apps/app_page.c @@ -40,6 +40,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/module.h" #include "asterisk/file.h" #include "asterisk/app.h" +#include "asterisk/chanvars.h" static const char *tdesc = "Page Multiple Phones"; @@ -77,13 +78,14 @@ struct calloutdata { char tech[64]; char resource[256]; char meetmeopts[64]; + struct ast_variable *variables; }; static void *page_thread(void *data) { struct calloutdata *cd = data; ast_pbx_outgoing_app(cd->tech, AST_FORMAT_SLINEAR, cd->resource, 30000, - "MeetMe", cd->meetmeopts, NULL, 0, cd->cidnum, cd->cidname, NULL, NULL); + "MeetMe", cd->meetmeopts, NULL, 0, cd->cidnum, cd->cidname, cd->variables, NULL); free(cd); return NULL; } @@ -91,6 +93,9 @@ static void *page_thread(void *data) static void launch_page(struct ast_channel *chan, const char *meetmeopts, const char *tech, const char *resource) { struct calloutdata *cd; + const char *varname; + struct ast_variable *lastvar = NULL; + struct ast_var_t *varptr; pthread_t t; pthread_attr_t attr; cd = malloc(sizeof(struct calloutdata)); @@ -101,6 +106,29 @@ static void launch_page(struct ast_channel *chan, const char *meetmeopts, const ast_copy_string(cd->tech, tech, sizeof(cd->tech)); ast_copy_string(cd->resource, resource, sizeof(cd->resource)); ast_copy_string(cd->meetmeopts, meetmeopts, sizeof(cd->meetmeopts)); + + AST_LIST_TRAVERSE(&chan->varshead, varptr, entries) { + if (!(varname = ast_var_full_name(varptr))) + continue; + if (varname[0] == '_') { + struct ast_variable *newvar = NULL; + + if (varname[1] == '_') { + newvar = ast_variable_new(varname, ast_var_value(varptr)); + } else { + newvar = ast_variable_new(&varname[1], ast_var_value(varptr)); + } + + if (newvar) { + if (lastvar) + lastvar->next = newvar; + else + cd->variables = newvar; + lastvar = newvar; + } + } + } + pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (ast_pthread_create(&t, &attr, page_thread, cd)) { |