\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
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;
/* 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);