--- asterisk-1.8.13.0.o/channels/chan_sip.c 2012-05-30 16:23:36.000000000 +0200 +++ asterisk-1.8.13.0/channels/chan_sip.c 2012-08-07 21:23:36.652249965 +0200 @@ -20285,7 +20285,7 @@ ast_log(LOG_WARNING, "Received response: \"Forbidden\" from '%s'\n", get_header(&p->initreq, "From")); if (!req->ignore && p->owner) { ast_set_hangupsource(p->owner, p->owner->name, 0); - ast_queue_hangup_with_cause(p->owner, AST_CAUSE_CONGESTION); + ast_queue_hangup_with_cause(p->owner, hangup_sip2cause(resp)); } break; @@ -20293,7 +20293,7 @@ xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE); if (p->owner && !req->ignore) { ast_set_hangupsource(p->owner, p->owner->name, 0); - ast_queue_hangup_with_cause(p->owner, AST_CAUSE_CONGESTION); + ast_queue_hangup_with_cause(p->owner, hangup_sip2cause(resp)); } break; @@ -20303,7 +20303,7 @@ ast_log(LOG_WARNING, "Re-invite to non-existing call leg on other UA. SIP dialog '%s'. Giving up.\n", p->callid); xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE); if (p->owner) { - ast_queue_hangup_with_cause(p->owner, AST_CAUSE_CONGESTION); + ast_queue_hangup_with_cause(p->owner, hangup_sip2cause(resp)); } break; @@ -20318,7 +20318,7 @@ append_history(p, "Identity", "SIP identity is required. Not supported by Asterisk."); ast_log(LOG_WARNING, "SIP identity required by proxy. SIP dialog '%s'. Giving up.\n", p->callid); if (p->owner && !req->ignore) { - ast_queue_hangup_with_cause(p->owner, AST_CAUSE_CONGESTION); + ast_queue_hangup_with_cause(p->owner, hangup_sip2cause(resp)); } break; @@ -20351,7 +20351,7 @@ } else { /* We can't set up this call, so give up */ if (p->owner && !req->ignore) { - ast_queue_hangup_with_cause(p->owner, AST_CAUSE_CONGESTION); + ast_queue_hangup_with_cause(p->owner, hangup_sip2cause(resp)); } } break; @@ -20359,7 +20359,7 @@ xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE); if (p->owner && !req->ignore) { if (p->owner->_state != AST_STATE_UP) { - ast_queue_hangup_with_cause(p->owner, AST_CAUSE_CONGESTION); + ast_queue_hangup_with_cause(p->owner, hangup_sip2cause(resp)); } else { /* This is a re-invite that failed. */ /* Reset the flag after a while @@ -20383,7 +20383,7 @@ case 501: /* Not implemented */ xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE); if (p->owner) { - ast_queue_hangup_with_cause(p->owner, AST_CAUSE_CONGESTION); + ast_queue_hangup_with_cause(p->owner, hangup_sip2cause(resp)); } break; }