forked from Mirrors/freeswitch
fix cause code passthrough
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4061 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
28807552d0
commit
00d7e70e2d
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user