diff --git a/src/include/switch_types.h b/src/include/switch_types.h index d88d0539f7..351de2213f 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -132,6 +132,7 @@ SWITCH_BEGIN_EXTERN_C #define SWITCH_CURRENT_APPLICATION_VARIABLE "current_application" #define SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE "proto_specific_hangup_cause" #define SWITCH_TRANSFER_HISTORY_VARIABLE "transfer_history" +#define SWITCH_TRANSFER_SOURCE_VARIABLE "transfer_source" #define SWITCH_CHANNEL_EXECUTE_ON_ANSWER_VARIABLE "execute_on_answer" #define SWITCH_CHANNEL_EXECUTE_ON_PRE_ANSWER_VARIABLE "execute_on_pre_answer" diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 20b48f77b4..c71fedab5c 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -5267,7 +5267,8 @@ static void mark_transfer_record(switch_core_session_t *session, const char *br_ switch_channel_get_variable(br_a_channel, dvar2)); switch_channel_add_variable_var_check(br_a_channel, SWITCH_TRANSFER_HISTORY_VARIABLE, cp->transfer_source, SWITCH_FALSE, SWITCH_STACK_PUSH); - + switch_channel_set_variable(br_a_channel, SWITCH_TRANSFER_SOURCE_VARIABLE, cp->transfer_source); + switch_core_session_rwunlock(br_a_session); } diff --git a/src/switch_ivr.c b/src/switch_ivr.c index 4622f1f684..1429a108f3 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -1716,7 +1716,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_ (long) switch_epoch_time_now(NULL), new_profile->uuid_str, extension, use_context, use_dialplan); switch_channel_add_variable_var_check(channel, SWITCH_TRANSFER_HISTORY_VARIABLE, new_profile->transfer_source, SWITCH_FALSE, SWITCH_STACK_PUSH); - + switch_channel_set_variable(channel, SWITCH_TRANSFER_SOURCE_VARIABLE, new_profile->transfer_source); return SWITCH_STATUS_SUCCESS; } diff --git a/src/switch_ivr_bridge.c b/src/switch_ivr_bridge.c index bd245d2373..6fd926d6c5 100644 --- a/src/switch_ivr_bridge.c +++ b/src/switch_ivr_bridge.c @@ -1586,14 +1586,15 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_uuid_bridge(const char *originator_uu switch_core_session_get_uuid(originatee_session)); switch_channel_add_variable_var_check(originator_channel, SWITCH_TRANSFER_HISTORY_VARIABLE, originator_cp->transfer_source, SWITCH_FALSE, SWITCH_STACK_PUSH); + switch_channel_set_variable(originator_channel, SWITCH_TRANSFER_SOURCE_VARIABLE, originator_cp->transfer_source); - + originatee_cp->transfer_source = switch_core_sprintf(originatee_cp->pool, "%ld:%s:uuid_br:%s", (long)switch_epoch_time_now(NULL), originatee_cp->uuid_str, switch_core_session_get_uuid(originator_session)); switch_channel_add_variable_var_check(originatee_channel, SWITCH_TRANSFER_HISTORY_VARIABLE, originatee_cp->transfer_source, SWITCH_FALSE, SWITCH_STACK_PUSH); - + switch_channel_set_variable(originatee_channel, SWITCH_TRANSFER_SOURCE_VARIABLE, originatee_cp->transfer_source); /* change the states and let the chips fall where they may */