mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-06-05 04:35:46 +00:00
add group_recurse_variables and user_recurse_variables to {} vars (default is true, set to false to not pass vars down to user or group channels)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@13241 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
3e03f43009
commit
e5e9524216
@ -2187,11 +2187,11 @@ static switch_call_cause_t group_outgoing_channel(switch_core_session_t *session
|
|||||||
switch_originate_flag_t myflags = SOF_NONE;
|
switch_originate_flag_t myflags = SOF_NONE;
|
||||||
char *cid_name_override = NULL;
|
char *cid_name_override = NULL;
|
||||||
char *cid_num_override = NULL;
|
char *cid_num_override = NULL;
|
||||||
const char *var;
|
const char *var, *skip = NULL;
|
||||||
unsigned int timelimit = 60;
|
unsigned int timelimit = 60;
|
||||||
char *domain = NULL;
|
char *domain = NULL;
|
||||||
switch_channel_t *new_channel = NULL;
|
switch_channel_t *new_channel = NULL;
|
||||||
|
|
||||||
group = strdup(outbound_profile->destination_number);
|
group = strdup(outbound_profile->destination_number);
|
||||||
|
|
||||||
if (!group) goto done;
|
if (!group) goto done;
|
||||||
@ -2206,17 +2206,35 @@ static switch_call_cause_t group_outgoing_channel(switch_core_session_t *session
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (var_event && (skip=switch_event_get_header(var_event, "group_recurse_variables")) && switch_false(skip)) {
|
||||||
|
if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE)) ||
|
||||||
|
(var = switch_event_get_header(var_event, "leg_timeout"))) {
|
||||||
|
timelimit = atoi(var);
|
||||||
|
}
|
||||||
|
var_event = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template = switch_mprintf("${group_call(%s@%s)}", group, domain);
|
template = switch_mprintf("${group_call(%s@%s)}", group, domain);
|
||||||
|
|
||||||
if (session) {
|
if (session) {
|
||||||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||||
dest = switch_channel_expand_variables(channel, template);
|
dest = switch_channel_expand_variables(channel, template);
|
||||||
if ((var = switch_channel_get_variable(channel, SWITCH_CALL_TIMEOUT_VARIABLE))) {
|
if ((var = switch_channel_get_variable(channel, SWITCH_CALL_TIMEOUT_VARIABLE)) ||
|
||||||
|
(var = switch_event_get_header(var_event, "leg_timeout"))) {
|
||||||
timelimit = atoi(var);
|
timelimit = atoi(var);
|
||||||
}
|
}
|
||||||
} else if (var_event) {
|
} else if (var_event) {
|
||||||
dest = switch_event_expand_headers(var_event, template);
|
dest = switch_event_expand_headers(var_event, template);
|
||||||
|
} else {
|
||||||
|
switch_event_t *event = NULL;
|
||||||
|
switch_event_create(&event, SWITCH_EVENT_REQUEST_PARAMS);
|
||||||
|
dest = switch_event_expand_headers(event, template);
|
||||||
|
switch_event_destroy(&event);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dest) {
|
if (!dest) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -2224,7 +2242,8 @@ static switch_call_cause_t group_outgoing_channel(switch_core_session_t *session
|
|||||||
if (var_event) {
|
if (var_event) {
|
||||||
cid_name_override = switch_event_get_header(var_event, "origination_caller_id_name");
|
cid_name_override = switch_event_get_header(var_event, "origination_caller_id_name");
|
||||||
cid_num_override = switch_event_get_header(var_event, "origination_caller_id_number");
|
cid_num_override = switch_event_get_header(var_event, "origination_caller_id_number");
|
||||||
if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE))) {
|
if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE)) ||
|
||||||
|
(var = switch_event_get_header(var_event, "leg_timeout"))) {
|
||||||
timelimit = atoi(var);
|
timelimit = atoi(var);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2290,6 +2309,7 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
|
|||||||
switch_channel_t *new_channel = NULL;
|
switch_channel_t *new_channel = NULL;
|
||||||
switch_event_t *params = NULL;
|
switch_event_t *params = NULL;
|
||||||
char stupid[128] = "";
|
char stupid[128] = "";
|
||||||
|
const char *skip = NULL, *var = NULL;
|
||||||
|
|
||||||
if (switch_strlen_zero(outbound_profile->destination_number)) {
|
if (switch_strlen_zero(outbound_profile->destination_number)) {
|
||||||
goto done;
|
goto done;
|
||||||
@ -2310,6 +2330,16 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (var_event && (skip=switch_event_get_header(var_event, "user_recurse_variables")) && switch_false(skip)) {
|
||||||
|
if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE)) ||
|
||||||
|
(var = switch_event_get_header(var_event, "leg_timeout"))) {
|
||||||
|
timelimit = atoi(var);
|
||||||
|
}
|
||||||
|
var_event = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
switch_event_create(¶ms, SWITCH_EVENT_REQUEST_PARAMS);
|
switch_event_create(¶ms, SWITCH_EVENT_REQUEST_PARAMS);
|
||||||
switch_assert(params);
|
switch_assert(params);
|
||||||
switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "as_channel", "true");
|
switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "as_channel", "true");
|
||||||
@ -2374,7 +2404,8 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
|
|||||||
|
|
||||||
if (session) {
|
if (session) {
|
||||||
channel = switch_core_session_get_channel(session);
|
channel = switch_core_session_get_channel(session);
|
||||||
if ((var = switch_channel_get_variable(channel, SWITCH_CALL_TIMEOUT_VARIABLE))) {
|
if ((var = switch_channel_get_variable(channel, SWITCH_CALL_TIMEOUT_VARIABLE))
|
||||||
|
|| (var = switch_event_get_header(var_event, "leg_timeout"))) {
|
||||||
timelimit = atoi(var);
|
timelimit = atoi(var);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2388,22 +2419,20 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
|
|||||||
|
|
||||||
if (var_event) {
|
if (var_event) {
|
||||||
switch_event_dup(&event, var_event);
|
switch_event_dup(&event, var_event);
|
||||||
switch_event_del_header(event, "dialer_user");
|
switch_event_del_header(event, "dialed_user");
|
||||||
switch_event_del_header(event, "dialer_domain");
|
switch_event_del_header(event, "dialed_domain");
|
||||||
if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE))) {
|
if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE)) ||
|
||||||
|
(var = switch_event_get_header(var_event, "leg_timeout"))) {
|
||||||
timelimit = atoi(var);
|
timelimit = atoi(var);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch_event_create(&event, SWITCH_EVENT_REQUEST_PARAMS);
|
switch_event_create(&event, SWITCH_EVENT_REQUEST_PARAMS);
|
||||||
switch_assert(event);
|
switch_assert(event);
|
||||||
}
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_user", user);
|
||||||
switch_assert(var_event);
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
|
||||||
|
d_dest = switch_event_expand_headers(event, dest);
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_user", user);
|
switch_event_destroy(&event);
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
|
}
|
||||||
d_dest = switch_event_expand_headers(event, dest);
|
|
||||||
|
|
||||||
switch_event_destroy(&event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((flags & SOF_FORKED_DIAL)) {
|
if ((flags & SOF_FORKED_DIAL)) {
|
||||||
|
@ -1545,7 +1545,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
|
|||||||
|
|
||||||
if (originate_status[i].peer_channel) {
|
if (originate_status[i].peer_channel) {
|
||||||
const char *vvar;
|
const char *vvar;
|
||||||
|
|
||||||
if ((vvar = switch_channel_get_variable(originate_status[i].peer_channel, "leg_timeout"))) {
|
if ((vvar = switch_channel_get_variable(originate_status[i].peer_channel, "leg_timeout"))) {
|
||||||
int val = atoi(vvar);
|
int val = atoi(vvar);
|
||||||
if (val > 0) {
|
if (val > 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user