]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
update
authorAnthony Minessale <anthony.minessale@gmail.com>
Wed, 19 Nov 2008 22:24:17 +0000 (22:24 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Wed, 19 Nov 2008 22:24:17 +0000 (22:24 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10468 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/include/switch_types.h
src/switch_core_state_machine.c

index bc8a8d1273be35b679a2f8ae1fff8d78ca0805df..2f41b02636578db4c58979ccb471a95258dafbbd 100644 (file)
@@ -122,6 +122,7 @@ SWITCH_BEGIN_EXTERN_C
 #define SWITCH_HOLDING_UUID_VARIABLE "holding_uuid"
 #define SWITCH_API_BRIDGE_END_VARIABLE "api_after_bridge"
 #define SWITCH_API_HANGUP_HOOK_VARIABLE "api_hangup_hook"
+#define SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE "session_in_hangup_hook"
 #define SWITCH_PROCESS_CDR_VARIABLE "process_cdr"
 #define SWITCH_BRIDGE_CHANNEL_VARIABLE "bridge_channel"
 #define SWITCH_CHANNEL_NAME_VARIABLE "channel_name"
index ac5094984200435a9e50e1a9216947864a808e07..a864a3bf624a8faca6816d821c4926f2529d1dd1 100644 (file)
@@ -385,7 +385,8 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session)
                                {
                                        const char *var = switch_channel_get_variable(session->channel, SWITCH_PROCESS_CDR_VARIABLE);
                                        const char *hook_var;
-
+                                       switch_core_session_t *use_session = NULL;
+                                       
                                        if (!switch_strlen_zero(var)) {
                                                if (!strcasecmp(var, "a_only")) {
                                                        if (switch_channel_get_originator_caller_profile(session->channel)) {
@@ -401,21 +402,31 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session)
                                        }
                                        
                                        STATE_MACRO(hangup, "HANGUP");
-
+                                       
                                        hook_var = switch_channel_get_variable(session->channel, SWITCH_API_HANGUP_HOOK_VARIABLE);
+                                       if (switch_true(switch_channel_get_variable(session->channel, SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE))) {
+                                               use_session = session;
+                                       }
 
                                        if (!switch_strlen_zero(hook_var)) {
                                                switch_stream_handle_t stream = { 0 };
                                                char *cmd = switch_core_session_strdup(session, hook_var);
                                                char *arg = NULL;
+                                               char *expanded = NULL;
+                                               
                                                if ((arg = strchr(cmd, ' '))) {
                                                        *arg++ = '\0';
                                                }
                                                SWITCH_STANDARD_STREAM(stream);
                                                switch_channel_get_variables(session->channel, &stream.param_event);
-                                               switch_api_execute(cmd, arg, session, &stream);
-                                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Hangup Command %s(%s):\n%s\n", cmd, arg,
+                                               expanded = switch_channel_expand_variables(session->channel, arg);
+                                               
+                                               switch_api_execute(cmd, expanded, use_session, &stream);
+                                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Hangup Command %s(%s):\n%s\n", cmd, expanded,
                                                                                  switch_str_nil((char *) stream.data));
+                                               if (expanded != arg) {
+                                                       switch_safe_free(expanded);
+                                               }
                                                switch_safe_free(stream.data);
                                        }
                                }