expand variables in originate strings

This commit is contained in:
Anthony Minessale 2014-01-10 03:01:07 +05:00
parent dc9415a8c3
commit c46296f319

View File

@ -1379,12 +1379,14 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void
struct call_helper *h = cbh->rows[i]; struct call_helper *h = cbh->rows[i];
char *parsed = NULL; char *parsed = NULL;
int use_ent = 0; int use_ent = 0;
char *expanded_originate_string = switch_event_expand_headers(ovars, h->originate_string);
if (strstr(h->originate_string, "user/")) {
switch_event_create_brackets(h->originate_string, '<', '>', ',', &ovars, &parsed, SWITCH_TRUE); if (strstr(expanded_originate_string, "user/")) {
switch_event_create_brackets(expanded_originate_string, '<', '>', ',', &ovars, &parsed, SWITCH_TRUE);
use_ent = 1; use_ent = 1;
} else { } else {
switch_event_create_brackets(h->originate_string, '{', '}', ',', &ovars, &parsed, SWITCH_TRUE); switch_event_create_brackets(expanded_originate_string, '{', '}', ',', &ovars, &parsed, SWITCH_TRUE);
} }
switch_event_del_header(ovars, "fifo_outbound_uuid"); switch_event_del_header(ovars, "fifo_outbound_uuid");
@ -1395,15 +1397,19 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void
if (use_ent) { if (use_ent) {
stream.write_function(&stream, "{ignore_early_media=true,outbound_redirect_fatal=true,leg_timeout=%d,fifo_outbound_uuid=%s,fifo_name=%s}%s%s", stream.write_function(&stream, "{ignore_early_media=true,outbound_redirect_fatal=true,leg_timeout=%d,fifo_outbound_uuid=%s,fifo_name=%s}%s%s",
h->timeout, h->uuid, node->name, h->timeout, h->uuid, node->name,
parsed ? parsed : h->originate_string, (i == cbh->rowcount - 1) ? "" : SWITCH_ENT_ORIGINATE_DELIM); parsed ? parsed : expanded_originate_string, (i == cbh->rowcount - 1) ? "" : SWITCH_ENT_ORIGINATE_DELIM);
} else { } else {
stream.write_function(&stream, "[leg_timeout=%d,fifo_outbound_uuid=%s,fifo_name=%s]%s,", stream.write_function(&stream, "[leg_timeout=%d,fifo_outbound_uuid=%s,fifo_name=%s]%s,",
h->timeout, h->uuid, node->name, parsed ? parsed : h->originate_string); h->timeout, h->uuid, node->name, parsed ? parsed : expanded_originate_string);
} }
stream2.write_function(&stream2, "%s,", h->uuid); stream2.write_function(&stream2, "%s,", h->uuid);
switch_safe_free(parsed); switch_safe_free(parsed);
if (expanded_originate_string && expanded_originate_string != h->originate_string) {
switch_safe_free(expanded_originate_string);
}
} }
originate_string = (char *) stream.data; originate_string = (char *) stream.data;
@ -1664,6 +1670,7 @@ static void *SWITCH_THREAD_FUNC o_thread_run(switch_thread_t *thread, void *obj)
switch_status_t status = SWITCH_STATUS_FALSE; switch_status_t status = SWITCH_STATUS_FALSE;
switch_event_t *event = NULL; switch_event_t *event = NULL;
char *sql = NULL; char *sql = NULL;
char *expanded_originate_string = NULL;
if (!globals.running) return NULL; if (!globals.running) return NULL;
@ -1688,18 +1695,20 @@ static void *SWITCH_THREAD_FUNC o_thread_run(switch_thread_t *thread, void *obj)
switch_assert(ovars); switch_assert(ovars);
switch_event_add_header(ovars, SWITCH_STACK_BOTTOM, "originate_timeout", "%d", h->timeout); switch_event_add_header(ovars, SWITCH_STACK_BOTTOM, "originate_timeout", "%d", h->timeout);
if (switch_stristr("origination_caller", h->originate_string)) { expanded_originate_string = switch_event_expand_headers(ovars, h->originate_string);
if (switch_stristr("origination_caller", expanded_originate_string)) {
originate_string = switch_mprintf("{execute_on_answer='unset fifo_hangup_check',fifo_name='%q',fifo_hangup_check='%q'}%s", originate_string = switch_mprintf("{execute_on_answer='unset fifo_hangup_check',fifo_name='%q',fifo_hangup_check='%q'}%s",
node->name, node->name, h->originate_string); node->name, node->name, expanded_originate_string);
} else { } else {
if (!zstr(node->outbound_name)) { if (!zstr(node->outbound_name)) {
originate_string = switch_mprintf("{execute_on_answer='unset fifo_hangup_check',fifo_name='%q',fifo_hangup_check='%q'," originate_string = switch_mprintf("{execute_on_answer='unset fifo_hangup_check',fifo_name='%q',fifo_hangup_check='%q',"
"origination_caller_id_name=Queue,origination_caller_id_number='Queue: %q'}%s", "origination_caller_id_name=Queue,origination_caller_id_number='Queue: %q'}%s",
node->name, node->name, node->outbound_name, h->originate_string); node->name, node->name, node->outbound_name, expanded_originate_string);
} else { } else {
originate_string = switch_mprintf("{execute_on_answer='unset fifo_hangup_check',fifo_name='%q',fifo_hangup_check='%q'," originate_string = switch_mprintf("{execute_on_answer='unset fifo_hangup_check',fifo_name='%q',fifo_hangup_check='%q',"
"origination_caller_id_name=Queue,origination_caller_id_number='Queue: %q'}%s", "origination_caller_id_name=Queue,origination_caller_id_number='Queue: %q'}%s",
node->name, node->name, node->name, h->originate_string); node->name, node->name, node->name, expanded_originate_string);
} }
} }
@ -1778,6 +1787,10 @@ static void *SWITCH_THREAD_FUNC o_thread_run(switch_thread_t *thread, void *obj)
switch_safe_free(originate_string); switch_safe_free(originate_string);
} }
if (expanded_originate_string && expanded_originate_string != h->originate_string) {
switch_safe_free(expanded_originate_string);
}
switch_event_destroy(&ovars); switch_event_destroy(&ovars);
if (node) { if (node) {
switch_mutex_lock(node->update_mutex); switch_mutex_lock(node->update_mutex);