static void page_state_callback(struct ast_dial *dial) { struct ast_channel *chan; struct page_options *options; if (ast_dial_state(dial) != AST_DIAL_RESULT_ANSWERED || !(chan = ast_dial_answered(dial)) || !(options = ast_dial_get_user_data(dial))) { return; } ast_func_write(chan, "CONFBRIDGE(bridge,template)", "default_bridge"); if (ast_test_flag(&options->flags, PAGE_RECORD)) { ast_func_write(chan, "CONFBRIDGE(bridge,record_conference)", "yes"); } ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes"); ast_func_write(chan, "CONFBRIDGE(user,end_marked)", "yes"); if (!ast_test_flag(&options->flags, PAGE_DUPLEX)) { ast_func_write(chan, "CONFBRIDGE(user,startmuted)", "yes"); } if (ast_test_flag(&options->flags, PAGE_ANNOUNCE) && !ast_strlen_zero(options->opts[OPT_ARG_ANNOUNCE])) { ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]); } }
static void page_state_callback(struct ast_dial *dial) { struct ast_channel *chan; struct page_options *options; if (ast_dial_state(dial) != AST_DIAL_RESULT_ANSWERED || !(chan = ast_dial_answered(dial)) || !(options = ast_dial_get_user_data(dial))) { return; } setup_profile_bridge(chan, options); setup_profile_paged(chan, options); }
/*! \brief Thread which dials and executes upon answer */ static void *ari_originate_dial(void *data) { struct ast_dial *dial = data; struct ari_origination *origination = ast_dial_get_user_data(dial); enum ast_dial_result res; res = ast_dial_run(dial, NULL, 0); if (res != AST_DIAL_RESULT_ANSWERED) { goto end; } if (!ast_strlen_zero(origination->appdata)) { struct ast_app *app = pbx_findapp("Stasis"); if (app) { ast_verb(4, "Launching Stasis(%s) on %s\n", origination->appdata, ast_channel_name(ast_dial_answered(dial))); pbx_exec(ast_dial_answered(dial), app, origination->appdata); } else { ast_log(LOG_WARNING, "No such application 'Stasis'\n"); } } else { struct ast_channel *answered = ast_dial_answered(dial); if (!ast_strlen_zero(origination->context)) { ast_channel_context_set(answered, origination->context); } if (!ast_strlen_zero(origination->exten)) { ast_channel_exten_set(answered, origination->exten); } if (origination->priority > 0) { ast_channel_priority_set(answered, origination->priority); } if (ast_pbx_run(answered)) { ast_log(LOG_ERROR, "Failed to start PBX on %s\n", ast_channel_name(answered)); } else { /* PBX will have taken care of hanging up, so we steal the answered channel so dial doesn't do it */ ast_dial_answered_steal(dial); } } end: ast_dial_destroy(dial); ast_free(origination); return NULL; }