fix originate timeout issue

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@8120 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale 2008-04-16 21:29:57 +00:00
parent 486fa9eb02
commit eaf6abfb78
1 changed files with 14 additions and 15 deletions

View File

@ -68,6 +68,7 @@ static const switch_state_handler_table_t originate_state_handlers = {
}; };
typedef enum { typedef enum {
IDX_TIMEOUT = -3,
IDX_CANCEL = -2, IDX_CANCEL = -2,
IDX_NADA = -1 IDX_NADA = -1
} abort_t; } abort_t;
@ -919,7 +920,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
if ((switch_timestamp(NULL) - start) > (time_t) timelimit_sec) { if ((switch_timestamp(NULL) - start) > (time_t) timelimit_sec) {
to++; to++;
idx = IDX_CANCEL; idx = IDX_TIMEOUT;
goto notready; goto notready;
} }
@ -1039,7 +1040,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
// When the AND operator is being used, and fail_on_single_reject is set, a hangup indicates that the call should fail. // 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)) if ((to = (uint8_t) ((switch_timestamp(NULL) - start) >= (time_t) timelimit_sec))
|| (fail_on_single_reject && hups)) { || (fail_on_single_reject && hups)) {
idx = IDX_CANCEL; idx = IDX_TIMEOUT;
goto notready; goto notready;
} }
@ -1120,7 +1121,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA)))) { switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA)))) {
switch_core_session_reset(session, SWITCH_FALSE); switch_core_session_reset(session, SWITCH_FALSE);
} }
for (i = 0; i < and_argc; i++) { for (i = 0; i < and_argc; i++) {
if (!peer_channels[i]) { if (!peer_channels[i]) {
continue; continue;
@ -1135,20 +1136,18 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
if (i != idx) { if (i != idx) {
const char *holding = NULL; const char *holding = NULL;
if (idx == IDX_CANCEL) { if (idx == IDX_TIMEOUT || to) {
if (to) { reason = SWITCH_CAUSE_NO_ANSWER;
reason = SWITCH_CAUSE_NO_ANSWER;
} else {
reason = SWITCH_CAUSE_ORIGINATOR_CANCEL;
}
} else { } else {
if (to) { if (idx == IDX_CANCEL) {
reason = SWITCH_CAUSE_NO_ANSWER; reason = SWITCH_CAUSE_ORIGINATOR_CANCEL;
} else if (and_argc > 1) {
reason = SWITCH_CAUSE_LOSE_RACE;
} else { } else {
reason = SWITCH_CAUSE_NO_ANSWER; if (and_argc > 1) {
reason = SWITCH_CAUSE_LOSE_RACE;
} else {
reason = SWITCH_CAUSE_NO_ANSWER;
}
} }
} }