From efe70a0857f9f31cf651b1765af6ff277efee862 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 5 Dec 2007 22:35:37 +0000 Subject: [PATCH] fix transfer git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6526 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/include/switch_ivr.h | 2 +- src/switch_ivr.c | 41 ++++++++++++++++++++++++---------------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/include/switch_ivr.h b/src/include/switch_ivr.h index b019a4fc7a..08b7be6b0b 100644 --- a/src/include/switch_ivr.h +++ b/src/include/switch_ivr.h @@ -395,7 +395,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_signal_bridge(switch_core_session_t * \param dialplan the new dialplan (OPTIONAL, may be NULL) \param context the new context (OPTIONAL, may be NULL) */ -SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_t *session, const char *extension, char *dialplan, char *context); +SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_t *session, const char *extension, const char *dialplan, const char *context); /*! \brief Transfer an existing session to another location in the future diff --git a/src/switch_ivr.c b/src/switch_ivr.c index b6aeb4d8ca..b9c1458c15 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -846,7 +846,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_nomedia(const char *uuid, switch_medi return status; } -SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_t *session, const char *extension, char *dialplan, char *context) +SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_t *session, const char *extension, const char *dialplan, const char *context) { switch_channel_t *channel; switch_caller_profile_t *profile, *new_profile; @@ -864,24 +864,33 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_ /* clear all state handlers */ switch_channel_clear_state_handler(channel, NULL); - if (switch_strlen_zero(dialplan)) { - dialplan = "XML"; - } - - if (switch_strlen_zero(context)) { - context = "default"; - } - - if (switch_strlen_zero(extension)) { - extension = "service"; - } - if ((profile = switch_channel_get_caller_profile(channel))) { + + if (switch_strlen_zero(dialplan)) { + dialplan = profile->dialplan; + } + + if (switch_strlen_zero(context)) { + context = profile->context; + } + + if (switch_strlen_zero(dialplan)) { + dialplan = "XML"; + } + + if (switch_strlen_zero(context)) { + context = "default"; + } + + if (switch_strlen_zero(extension)) { + extension = "service"; + } + new_profile = switch_caller_profile_clone(session, profile); - new_profile->dialplan = switch_core_session_strdup(session, dialplan); - new_profile->context = switch_core_session_strdup(session, context); - new_profile->destination_number = switch_core_session_strdup(session, extension); + new_profile->dialplan = switch_core_strdup(profile->pool, dialplan); + new_profile->context = switch_core_strdup(profile->pool, context); + new_profile->destination_number = switch_core_strdup(profile->pool, extension); switch_channel_set_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE, NULL);