Index: pbx.c =================================================================== RCS file: /usr/cvsroot/asterisk/pbx.c,v retrieving revision 1.307 diff -u -r1.307 pbx.c --- pbx.c 28 Nov 2005 02:55:56 -0000 1.307 +++ pbx.c 30 Nov 2005 00:57:42 -0000 @@ -5217,7 +5217,7 @@ goto outgoing_app_cleanup; } memset(as, 0, sizeof(struct async_stat)); - chan = ast_request_and_dial(type, format, data, timeout, reason, cid_num, cid_name); + chan = __ast_request_and_dial(type, format, data, timeout, reason, cid_num, cid_name, &oh); if (!chan) { free(as); res = -1; Index: apps/app_page.c =================================================================== RCS file: /usr/cvsroot/asterisk/apps/app_page.c,v retrieving revision 1.14 diff -u -r1.14 app_page.c --- apps/app_page.c 28 Nov 2005 02:55:56 -0000 1.14 +++ apps/app_page.c 30 Nov 2005 00:57:42 -0000 @@ -40,6 +40,7 @@ #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 @@ 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 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 @@ 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)) {