]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7780 add new channel variable max_session_transfers. If set, this variable is...
authorChris Rienzo <chris.rienzo@citrix.com>
Mon, 6 Jul 2015 19:26:56 +0000 (15:26 -0400)
committerChris Rienzo <chris.rienzo@citrix.com>
Mon, 6 Jul 2015 19:26:56 +0000 (15:26 -0400)
the number of session transfers allowed instead of the max_forwards variable.  If not set, the existing
behavior is preserved.

src/include/switch_types.h
src/switch_ivr.c

index 62fada24855ed2d8958fb14450b3d048b066d19e..2ee6346726421a16ec8dc337a70e07b88cfec97e 100644 (file)
@@ -1,6 +1,6 @@
 /* 
  * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
- * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
+ * Copyright (C) 2005-2015, Anthony Minessale II <anthm@freeswitch.org>
  *
  * Version: MPL 1.1
  *
@@ -219,6 +219,7 @@ SWITCH_BEGIN_EXTERN_C
 #define SWITCH_EXEC_AFTER_BRIDGE_APP_VARIABLE "exec_after_bridge_app"
 #define SWITCH_EXEC_AFTER_BRIDGE_ARG_VARIABLE "exec_after_bridge_arg"
 #define SWITCH_MAX_FORWARDS_VARIABLE "max_forwards"
+#define SWITCH_MAX_SESSION_TRANSFERS_VARIABLE "max_session_transfers"
 #define SWITCH_DISABLE_APP_LOG_VARIABLE "disable_app_log"
 #define SWITCH_SPEECH_KEY "speech"
 #define SWITCH_UUID_BRIDGE "uuid_bridge"
index b9c773d14c3b51dbb464694d514942f8597053f6..1bf876c44192cf1227b1837a81bedffcf47ec670 100644 (file)
@@ -1756,10 +1756,15 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_
        switch_channel_t *other_channel = NULL;
        const char *uuid = NULL;
        const char *max_forwards;
-       const char *forwardvar = switch_channel_get_variable(channel, SWITCH_MAX_FORWARDS_VARIABLE);
+       const char *forwardvar_name = SWITCH_MAX_SESSION_TRANSFERS_VARIABLE; /* max_session_transfers has first priority for setting maximum */
+       const char *forwardvar = switch_channel_get_variable(channel, forwardvar_name);
        int forwardval = 70;
        const char *use_dialplan = dialplan, *use_context = context;
 
+       if (zstr(forwardvar)) {
+               forwardvar_name = SWITCH_MAX_FORWARDS_VARIABLE; /* fall back to max_forwards variable for setting maximum */
+               forwardvar = switch_channel_get_variable(channel, forwardvar_name);
+       }
        if (!zstr(forwardvar)) {
                forwardval = atoi(forwardvar) - 1;
        }
@@ -1769,7 +1774,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_
        }
 
        max_forwards = switch_core_session_sprintf(session, "%d", forwardval);
-       switch_channel_set_variable(channel, SWITCH_MAX_FORWARDS_VARIABLE, max_forwards);
+       switch_channel_set_variable(channel, forwardvar_name, max_forwards);
 
        switch_core_session_reset(session, SWITCH_TRUE, SWITCH_TRUE);
        switch_channel_clear_flag(channel, CF_ORIGINATING);