diff options
author | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-12-20 04:32:59 +0000 |
---|---|---|
committer | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-12-20 04:32:59 +0000 |
commit | 06a67ffa4a6eaa3880bffdb38c02cb833c30b9e2 (patch) | |
tree | 291067750f4d0f13438432d5c10937c8f4bf89e0 /apps/app_page.c | |
parent | 6b788c5c2fa728b720cadd652f943f9d73f51d5c (diff) |
Clean up app_page
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@48639 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_page.c')
-rw-r--r-- | apps/app_page.c | 74 |
1 files changed, 41 insertions, 33 deletions
diff --git a/apps/app_page.c b/apps/app_page.c index bb27fde3b..dd4c9f2aa 100644 --- a/apps/app_page.c +++ b/apps/app_page.c @@ -88,9 +88,12 @@ struct calloutdata { 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, cd->variables, NULL, NULL); + free(cd); + return NULL; } @@ -102,42 +105,46 @@ static void launch_page(struct ast_channel *chan, const char *meetmeopts, const struct ast_var_t *varptr; pthread_t t; pthread_attr_t attr; - if ((cd = ast_calloc(1, sizeof(*cd)))) { - ast_copy_string(cd->cidnum, chan->cid.cid_num ? chan->cid.cid_num : "", sizeof(cd->cidnum)); - ast_copy_string(cd->cidname, chan->cid.cid_name ? chan->cid.cid_name : "", sizeof(cd->cidname)); - 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)) { - ast_log(LOG_WARNING, "Unable to create paging thread: %s\n", strerror(errno)); - free(cd); + if (!(cd = ast_calloc(1, sizeof(*cd)))) + return; + + /* Copy data from our page over */ + ast_copy_string(cd->cidnum, chan->cid.cid_num ? chan->cid.cid_num : "", sizeof(cd->cidnum)); + ast_copy_string(cd->cidname, chan->cid.cid_name ? chan->cid.cid_name : "", sizeof(cd->cidname)); + 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) { + struct ast_variable *newvar = NULL; + + if (!(varname = ast_var_full_name(varptr)) || (varname[0] != '_')) + continue; + + 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; } } + + /* Spawn thread to handle this page */ + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + if (ast_pthread_create(&t, &attr, page_thread, cd)) { + ast_log(LOG_WARNING, "Unable to create paging thread: %s\n", strerror(errno)); + free(cd); + } + + return; } static int page_exec(struct ast_channel *chan, void *data) @@ -197,6 +204,7 @@ static int page_exec(struct ast_channel *chan, void *data) if (!res) res = ast_waitstream(chan, ""); } + if (!res) { snprintf(meetmeopts, sizeof(meetmeopts), "%ud|A%s%sqxd", confid, (ast_test_flag(&flags, PAGE_DUPLEX) ? "" : "t"), (ast_test_flag(&flags, PAGE_RECORD) ? "r" : "") ); |