Author: anthm Date: Wed Apr 16 17:29:57 2008 New Revision: 8120 Modified: freeswitch/trunk/src/switch_ivr_originate.c Log: fix originate timeout issue Modified: freeswitch/trunk/src/switch_ivr_originate.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_originate.c (original) +++ freeswitch/trunk/src/switch_ivr_originate.c Wed Apr 16 17:29:57 2008 @@ -68,6 +68,7 @@ }; typedef enum { + IDX_TIMEOUT = -3, IDX_CANCEL = -2, IDX_NADA = -1 } abort_t; @@ -919,7 +920,7 @@ if ((switch_timestamp(NULL) - start) > (time_t) timelimit_sec) { to++; - idx = IDX_CANCEL; + idx = IDX_TIMEOUT; goto notready; } @@ -1039,7 +1040,7 @@ // When the AND operator is being used, and fail_on_single_reject is set, a hangup indicates that the call should fail. if ((to = (uint8_t) ((switch_timestamp(NULL) - start) >= (time_t) timelimit_sec)) || (fail_on_single_reject && hups)) { - idx = IDX_CANCEL; + idx = IDX_TIMEOUT; goto notready; } @@ -1120,7 +1121,7 @@ switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA)))) { switch_core_session_reset(session, SWITCH_FALSE); } - + for (i = 0; i < and_argc; i++) { if (!peer_channels[i]) { continue; @@ -1135,20 +1136,18 @@ if (i != idx) { const char *holding = NULL; - - if (idx == IDX_CANCEL) { - if (to) { - reason = SWITCH_CAUSE_NO_ANSWER; - } else { - reason = SWITCH_CAUSE_ORIGINATOR_CANCEL; - } + + if (idx == IDX_TIMEOUT || to) { + reason = SWITCH_CAUSE_NO_ANSWER; } else { - if (to) { - reason = SWITCH_CAUSE_NO_ANSWER; - } else if (and_argc > 1) { - reason = SWITCH_CAUSE_LOSE_RACE; + if (idx == IDX_CANCEL) { + reason = SWITCH_CAUSE_ORIGINATOR_CANCEL; } else { - reason = SWITCH_CAUSE_NO_ANSWER; + if (and_argc > 1) { + reason = SWITCH_CAUSE_LOSE_RACE; + } else { + reason = SWITCH_CAUSE_NO_ANSWER; + } } }
participants (1)
-
Freeswitch SVN