mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-17 01:02:12 +00:00
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;
|
} switch_input_type_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SWITCH_CAUSE_UNALLOCATED = 1,
|
SWITCH_CAUSE_UNALLOCATED = 0,
|
||||||
SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET = 2,
|
SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET = 2,
|
||||||
SWITCH_CAUSE_NO_ROUTE_DESTINATION = 3,
|
SWITCH_CAUSE_NO_ROUTE_DESTINATION = 3,
|
||||||
SWITCH_CAUSE_CHANNEL_UNACCEPTABLE = 6,
|
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
|
// map QSIG cause codes to SIP from RFC4497 section 8.4.1
|
||||||
static int hangup_cause_to_sip(switch_call_cause_t cause) {
|
static int hangup_cause_to_sip(switch_call_cause_t cause) {
|
||||||
switch (cause) {
|
switch (cause) {
|
||||||
case SWITCH_CAUSE_UNALLOCATED:
|
|
||||||
case SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET:
|
case SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET:
|
||||||
case SWITCH_CAUSE_NO_ROUTE_DESTINATION:
|
case SWITCH_CAUSE_NO_ROUTE_DESTINATION:
|
||||||
return 404;
|
return 404;
|
||||||
@ -2334,7 +2333,7 @@ static switch_call_cause_t sip_cause_to_freeswitch(int status) {
|
|||||||
case 404:
|
case 404:
|
||||||
case 485:
|
case 485:
|
||||||
case 604:
|
case 604:
|
||||||
return SWITCH_CAUSE_UNALLOCATED;
|
return SWITCH_CAUSE_NO_ROUTE_DESTINATION;
|
||||||
case 408:
|
case 408:
|
||||||
case 504:
|
case 504:
|
||||||
return SWITCH_CAUSE_RECOVERY_ON_TIMER_EXPIRE;
|
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)
|
SWITCH_DECLARE(char *) switch_channel_cause2str(switch_call_cause_t cause)
|
||||||
{
|
{
|
||||||
uint8_t x;
|
uint8_t x;
|
||||||
char *str = "UNALLOCATED";
|
char *str = "UNKNOWN";
|
||||||
|
|
||||||
for(x = 0; CAUSE_CHART[x].name; x++) {
|
for(x = 0; CAUSE_CHART[x].name; x++) {
|
||||||
if (CAUSE_CHART[x].cause == cause) {
|
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;
|
channel->state = state;
|
||||||
switch_mutex_unlock(channel->flag_mutex);
|
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;
|
channel->hangup_cause = SWITCH_CAUSE_NORMAL_CLEARING;
|
||||||
}
|
}
|
||||||
if (state < CS_HANGUP) {
|
if (state < CS_HANGUP) {
|
||||||
|
@ -2881,7 +2881,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
|
|||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
*cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
|
*cause = SWITCH_CAUSE_UNALLOCATED;
|
||||||
|
|
||||||
if (var_event) {
|
if (var_event) {
|
||||||
switch_event_destroy(&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]) {
|
if (!peer_channels[i]) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
*cause = switch_channel_get_cause(peer_channels[i]);
|
||||||
*cause = switch_channel_get_cause(peer_channels[i]);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reason != SWITCH_CAUSE_UNALLOCATED) {
|
if (!*cause) {
|
||||||
*cause = reason;
|
if (reason) {
|
||||||
} else if (caller_channel) {
|
*cause = reason;
|
||||||
*cause = switch_channel_get_cause(caller_channel);
|
} else if (caller_channel) {
|
||||||
} else {
|
*cause = switch_channel_get_cause(caller_channel);
|
||||||
*cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
|
} else {
|
||||||
|
*cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx == IDX_CANCEL) {
|
if (idx == IDX_CANCEL) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user