} 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,
// 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;
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;
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) {
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) {
}
done:
- *cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
-
+ *cause = SWITCH_CAUSE_UNALLOCATED;
+
if (var_event) {
switch_event_destroy(&var_event);
}
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) {