From: Anthony Minessale Date: Wed, 5 Dec 2007 22:35:37 +0000 (+0000) Subject: fix transfer X-Git-Tag: v1.0-rc1~1297 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=efe70a0857f9f31cf651b1765af6ff277efee862;p=thirdparty%2Ffreeswitch.git fix transfer git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6526 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- 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 ((profile = switch_channel_get_caller_profile(channel))) { + + if (switch_strlen_zero(dialplan)) { + dialplan = profile->dialplan; + } - if (switch_strlen_zero(context)) { - context = "default"; - } + if (switch_strlen_zero(context)) { + context = profile->context; + } - if (switch_strlen_zero(extension)) { - extension = "service"; - } + if (switch_strlen_zero(dialplan)) { + dialplan = "XML"; + } - if ((profile = switch_channel_get_caller_profile(channel))) { + 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);