]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add group_recurse_variables and user_recurse_variables to {} vars (default is true...
authorAnthony Minessale <anthony.minessale@gmail.com>
Wed, 6 May 2009 15:13:51 +0000 (15:13 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Wed, 6 May 2009 15:13:51 +0000 (15:13 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@13241 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/applications/mod_dptools/mod_dptools.c
src/switch_ivr_originate.c

index 31c4dfd5e33ebdb432249f8249406b13672e7f35..ae02bc568d12c3abf4a4dcd7ea9101dd828c87b7 100644 (file)
@@ -2187,11 +2187,11 @@ static switch_call_cause_t group_outgoing_channel(switch_core_session_t *session
        switch_originate_flag_t myflags = SOF_NONE;
        char *cid_name_override = NULL;
        char *cid_num_override = NULL;
-       const char *var;
+       const char *var, *skip = NULL;
        unsigned int timelimit = 60;
        char *domain = NULL;
        switch_channel_t *new_channel = NULL;
-
+       
        group = strdup(outbound_profile->destination_number);
 
        if (!group) goto done;
@@ -2206,17 +2206,35 @@ static switch_call_cause_t group_outgoing_channel(switch_core_session_t *session
                goto done;
        }
 
+
+       if (var_event && (skip=switch_event_get_header(var_event, "group_recurse_variables")) && switch_false(skip)) {
+               if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE)) || 
+                       (var = switch_event_get_header(var_event, "leg_timeout"))) {
+                       timelimit = atoi(var);
+               }
+               var_event = NULL;
+       }
+
+
+
        template = switch_mprintf("${group_call(%s@%s)}", group, domain);
        
        if (session) {
                switch_channel_t *channel = switch_core_session_get_channel(session);
                dest = switch_channel_expand_variables(channel, template);
-               if ((var = switch_channel_get_variable(channel, SWITCH_CALL_TIMEOUT_VARIABLE))) {
+               if ((var = switch_channel_get_variable(channel, SWITCH_CALL_TIMEOUT_VARIABLE)) ||
+                       (var = switch_event_get_header(var_event, "leg_timeout"))) {
                        timelimit = atoi(var);
                }
        } else if (var_event) {
                dest = switch_event_expand_headers(var_event, template);
+       } else {
+               switch_event_t *event = NULL;
+               switch_event_create(&event, SWITCH_EVENT_REQUEST_PARAMS);
+               dest = switch_event_expand_headers(event, template);
+               switch_event_destroy(&event);
        }
+
        if (!dest) {
                goto done;
        }
@@ -2224,7 +2242,8 @@ static switch_call_cause_t group_outgoing_channel(switch_core_session_t *session
        if (var_event) {
                cid_name_override = switch_event_get_header(var_event, "origination_caller_id_name");
                cid_num_override = switch_event_get_header(var_event, "origination_caller_id_number");
-               if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE))) {
+               if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE)) ||
+                       (var = switch_event_get_header(var_event, "leg_timeout"))) {
                        timelimit = atoi(var);
                }
        }
@@ -2290,6 +2309,7 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
        switch_channel_t *new_channel = NULL;
        switch_event_t *params = NULL;
        char stupid[128] = "";
+       const char *skip = NULL, *var = NULL;
 
        if (switch_strlen_zero(outbound_profile->destination_number)) {
                goto done;
@@ -2310,6 +2330,16 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
        }
        
 
+       if (var_event && (skip=switch_event_get_header(var_event, "user_recurse_variables")) && switch_false(skip)) {
+               if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE)) || 
+                       (var = switch_event_get_header(var_event, "leg_timeout"))) {
+                       timelimit = atoi(var);
+               }
+               var_event = NULL;
+       }
+
+
+
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(params);
        switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "as_channel", "true");
@@ -2374,7 +2404,8 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
 
                if (session) {
                        channel = switch_core_session_get_channel(session);
-                       if ((var = switch_channel_get_variable(channel, SWITCH_CALL_TIMEOUT_VARIABLE))) {
+                       if ((var = switch_channel_get_variable(channel, SWITCH_CALL_TIMEOUT_VARIABLE))
+                               || (var = switch_event_get_header(var_event, "leg_timeout"))) {
                                timelimit = atoi(var);
                        }
 
@@ -2388,22 +2419,20 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
 
                        if (var_event) {
                                switch_event_dup(&event, var_event);
-                               switch_event_del_header(event, "dialer_user");
-                               switch_event_del_header(event, "dialer_domain");
-                               if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE))) {
+                               switch_event_del_header(event, "dialed_user");
+                               switch_event_del_header(event, "dialed_domain");
+                               if ((var = switch_event_get_header(var_event, SWITCH_CALL_TIMEOUT_VARIABLE)) || 
+                                       (var = switch_event_get_header(var_event, "leg_timeout"))) {
                                        timelimit = atoi(var);
                                }
                        } else {
                                switch_event_create(&event, SWITCH_EVENT_REQUEST_PARAMS);
                                switch_assert(event);
-                       }
-                       switch_assert(var_event);
-
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_user", user);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
-                       d_dest = switch_event_expand_headers(event, dest);
-
-                       switch_event_destroy(&event);
+                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_user", user);
+                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
+                               d_dest = switch_event_expand_headers(event, dest);
+                               switch_event_destroy(&event);
+                       }                       
                }
 
                if ((flags & SOF_FORKED_DIAL)) {
index 6c15d6f01c23e83463150694393cf9b44a5e28bb..7a31537c96551c5d41af05744efa037a383ab772 100644 (file)
@@ -1545,7 +1545,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
 
                                if (originate_status[i].peer_channel) {
                                        const char *vvar;
-
+                                       
                                        if ((vvar = switch_channel_get_variable(originate_status[i].peer_channel, "leg_timeout"))) {
                                                int val = atoi(vvar);
                                                if (val > 0) {