From 00d7e70e2d3fd0c80d17df44d4e0601b88a0edcd Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 26 Jan 2007 20:39:45 +0000 Subject: [PATCH] fix cause code passthrough git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4061 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/include/switch_types.h | 2 +- src/mod/endpoints/mod_sofia/mod_sofia.c | 3 +-- src/switch_channel.c | 4 ++-- src/switch_ivr.c | 21 +++++++++++---------- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/include/switch_types.h b/src/include/switch_types.h index 4262f90b77..0215a53ba7 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -779,7 +779,7 @@ typedef enum { } switch_input_type_t; typedef enum { - SWITCH_CAUSE_UNALLOCATED = 1, + SWITCH_CAUSE_UNALLOCATED = 0, SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET = 2, SWITCH_CAUSE_NO_ROUTE_DESTINATION = 3, SWITCH_CAUSE_CHANNEL_UNACCEPTABLE = 6, diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 56647111bb..3971141a38 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -1175,7 +1175,6 @@ static switch_status_t sofia_on_execute(switch_core_session_t *session) // map QSIG cause codes to SIP from RFC4497 section 8.4.1 static int hangup_cause_to_sip(switch_call_cause_t cause) { switch (cause) { - case SWITCH_CAUSE_UNALLOCATED: case SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET: case SWITCH_CAUSE_NO_ROUTE_DESTINATION: return 404; @@ -2334,7 +2333,7 @@ static switch_call_cause_t sip_cause_to_freeswitch(int status) { case 404: case 485: case 604: - return SWITCH_CAUSE_UNALLOCATED; + return SWITCH_CAUSE_NO_ROUTE_DESTINATION; case 408: case 504: return SWITCH_CAUSE_RECOVERY_ON_TIMER_EXPIRE; diff --git a/src/switch_channel.c b/src/switch_channel.c index 82c080719b..c69cd810e7 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -120,7 +120,7 @@ struct switch_channel { SWITCH_DECLARE(char *) switch_channel_cause2str(switch_call_cause_t cause) { uint8_t x; - char *str = "UNALLOCATED"; + char *str = "UNKNOWN"; for(x = 0; CAUSE_CHART[x].name; x++) { if (CAUSE_CHART[x].cause == cause) { @@ -620,7 +620,7 @@ SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_set_state(switch_c channel->state = state; switch_mutex_unlock(channel->flag_mutex); - if (state == CS_HANGUP && channel->hangup_cause == SWITCH_CAUSE_UNALLOCATED) { + if (state == CS_HANGUP && !channel->hangup_cause) { channel->hangup_cause = SWITCH_CAUSE_NORMAL_CLEARING; } if (state < CS_HANGUP) { diff --git a/src/switch_ivr.c b/src/switch_ivr.c index d243166cb3..7774042b45 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -2881,8 +2881,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess } done: - *cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER; - + *cause = SWITCH_CAUSE_UNALLOCATED; + if (var_event) { switch_event_destroy(&var_event); } @@ -2900,18 +2900,19 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess if (!peer_channels[i]) { continue; } - - *cause = switch_channel_get_cause(peer_channels[i]); + *cause = switch_channel_get_cause(peer_channels[i]); break; } } - if (reason != SWITCH_CAUSE_UNALLOCATED) { - *cause = reason; - } else if (caller_channel) { - *cause = switch_channel_get_cause(caller_channel); - } else { - *cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER; + if (!*cause) { + if (reason) { + *cause = reason; + } else if (caller_channel) { + *cause = switch_channel_get_cause(caller_channel); + } else { + *cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER; + } } if (idx == IDX_CANCEL) {