]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
move accidental new behaviour behind new param originate_continue_on_timeout=true
authorAnthony Minessale <anthony.minessale@gmail.com>
Thu, 8 Oct 2009 17:43:51 +0000 (17:43 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Thu, 8 Oct 2009 17:43:51 +0000 (17:43 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15121 d0543943-73ff-0310-b7d9-9358b9ac24b2

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

index 97dabe8e2237138cd76cfc40effaedc21d9e4f74..78733f872932db3fa11ba976d4cca7ab908aa006 100644 (file)
@@ -1595,12 +1595,10 @@ static switch_status_t hanguphook(switch_core_session_t *session)
 
 SWITCH_STANDARD_APP(att_xfer_function)
 {
-       const char *var;
        switch_core_session_t *peer_session = NULL;
        switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING;
        switch_channel_t *channel, *peer_channel = NULL;
        const char *bond = NULL;
-       int timelimit = 60;
        switch_core_session_t *b_session = NULL;
 
        channel = switch_core_session_get_channel(session);
@@ -1612,11 +1610,7 @@ SWITCH_STANDARD_APP(att_xfer_function)
        switch_channel_set_variable(channel, SWITCH_SOFT_HOLDING_UUID_VARIABLE, bond);
        switch_channel_set_flag(channel, CF_XFER_ZOMBIE);
 
-       if ((var = switch_channel_get_variable(channel, SWITCH_CALL_TIMEOUT_VARIABLE))) {
-               timelimit = atoi(var);
-       }
-
-       if (switch_ivr_originate(session, &peer_session, &cause, data, timelimit, NULL, NULL, NULL, NULL, NULL, SOF_NONE) 
+       if (switch_ivr_originate(session, &peer_session, &cause, data, 0, NULL, NULL, NULL, NULL, NULL, SOF_NONE) 
                != SWITCH_STATUS_SUCCESS || !peer_session) {
                goto end;
        }
@@ -2125,22 +2119,17 @@ SWITCH_STANDARD_APP(audio_bridge_function)
 {
        switch_channel_t *caller_channel = switch_core_session_get_channel(session);
        switch_core_session_t *peer_session = NULL;
-       unsigned int timelimit = 60;
-       const char *var, *continue_on_fail = NULL, *failure_causes = NULL;
+       const char *continue_on_fail = NULL, *failure_causes = NULL;
        switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING;
 
        if (switch_strlen_zero(data)) {
                return;
        }
 
-       if ((var = switch_channel_get_variable(caller_channel, SWITCH_CALL_TIMEOUT_VARIABLE))) {
-               timelimit = atoi(var);
-       }
-
        continue_on_fail = switch_channel_get_variable(caller_channel, "continue_on_fail");
        failure_causes = switch_channel_get_variable(caller_channel, "failure_causes");
 
-       if (switch_ivr_originate(session, &peer_session, &cause, data, timelimit, NULL, NULL, NULL, NULL, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS) {
+       if (switch_ivr_originate(session, &peer_session, &cause, data, 0, NULL, NULL, NULL, NULL, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS) {
                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "Originate Failed.  Cause: %s\n", switch_channel_cause2str(cause));
 
                /* 
@@ -2258,11 +2247,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, *skip = NULL;
-       unsigned int timelimit = 60;
        char *domain = NULL;
        switch_channel_t *new_channel = NULL;
-       
+       unsigned int timelimit = 60;
+       const char *skip, *var;
+
        group = strdup(outbound_profile->destination_number);
 
        if (!group) goto done;
index 2c54513d32eff1e1815ffabc5675cf9ac138cd96..d79b9e2cee5da4454a852befedb65d82dcbc929d 100644 (file)
@@ -113,6 +113,7 @@ typedef struct {
        int monitor_early_media_ring_count;
        int monitor_early_media_ring_total;
        int cancel_timeout;
+       int continue_on_timeout;
 } originate_global_t;
 
 
@@ -755,7 +756,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_wait_for_answer(switch_core_session_t
                                switch_core_session_set_read_codec(session, &write_codec);
                        }
                }
-                       
+               
                if (ringback_data) {
                        char *tmp_data = NULL;
 
@@ -1033,10 +1034,16 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
        switch_channel_state_t wait_state = 0;
 
        if (session) {
+               const char *to_var;
                caller_channel = switch_core_session_get_channel(session);
                switch_channel_set_flag(caller_channel, CF_ORIGINATOR);
                oglobals.session = session;
 
+
+               if ((to_var = switch_channel_get_variable(caller_channel, SWITCH_CALL_TIMEOUT_VARIABLE))) {
+                       timelimit_sec = atoi(to_var);
+               }
+
                if (switch_true(switch_channel_get_variable(caller_channel, SWITCH_PROXY_MEDIA_VARIABLE))) {
                        switch_channel_set_flag(caller_channel, CF_PROXY_MEDIA);
                }
@@ -1060,6 +1067,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                }
        }
 
+       if (timelimit_sec <= 0) {
+               timelimit_sec = 60;
+       }
+
        
        oglobals.idx = IDX_NADA;
        oglobals.early_ok = 1;
@@ -1193,6 +1204,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                                        ok = 1;
                                } else if (!strcasecmp((char *) hi->name, "ignore_early_media")) {
                                        ok = 1;
+                               } else if (!strcasecmp((char *) hi->name, "originate_continue_on_timeout")) {
+                                       ok = 1;
                                } else if (!strcasecmp((char *) hi->name, "ignore_ring_ready")) {
                                        ok = 1;
                                } else if (!strcasecmp((char *) hi->name, "monitor_early_media_ring")) {
@@ -1296,6 +1309,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                oglobals.ignore_early_media = 1;
        }
 
+       if ((var_val = switch_event_get_header(var_event, "originate_continue_on_timeout")) && switch_true(var_val)) {
+               oglobals.continue_on_timeout = 1;
+       }
+
        if ((var_val = switch_event_get_header(var_event, "ignore_ring_ready")) && switch_true(var_val)) {
                oglobals.ignore_ring_ready = 1;
        }
@@ -2145,7 +2162,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                                switch_core_session_reset(oglobals.session, SWITCH_FALSE, SWITCH_TRUE);
                        }
 
-                       if ((oglobals.idx == IDX_TIMEOUT || oglobals.idx == IDX_KEY_CANCEL) && switch_channel_ready(caller_channel)) {
+                       if ((oglobals.idx == IDX_TIMEOUT || oglobals.idx == IDX_KEY_CANCEL) && (caller_channel && switch_channel_ready(caller_channel))) {
                                holding = NULL;
                        }
 
@@ -2465,6 +2482,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                                if (ok) {
                                        goto outer_for;
                                }
+
+                               if (to && !oglobals.continue_on_timeout) {
+                                       goto outer_for;
+                               }
                        }
                }
        }