From 503fc9458a32dec7189eca7c68d3bf08ad8da732 Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Mon, 4 Jun 2012 21:56:05 +0000 Subject: [PATCH] Relay proper SIP responses on calling side. Revision 351130 broke corect HANGUPCAUSE setting for the 404 case in chan_sip. Other cases were also potentially broken. This patch fixes the relaying of causes to be what they used to be. (closes issue ASTERISK-19914) Reported by Pavel Troller Tested by Walter Doekes (via a reviewboard test to be committed later) Patches: chan_sip.diff uploaded by Pavel Troller (license #6302) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@368498 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 5195fcd784..30cb839af2 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -20368,7 +20368,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest 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; @@ -20376,7 +20376,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest 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; @@ -20386,7 +20386,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest 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; @@ -20401,7 +20401,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest 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; @@ -20434,7 +20434,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest } 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; @@ -20442,7 +20442,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest 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 @@ -20466,7 +20466,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest 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; } @@ -21330,7 +21330,7 @@ static void handle_response(struct sip_pvt *p, int resp, const char *rest, struc default: /* Send hangup */ if (owner && sipmethod != SIP_BYE) - ast_queue_hangup_with_cause(p->owner, AST_CAUSE_PROTOCOL_ERROR); + ast_queue_hangup_with_cause(p->owner, hangup_sip2cause(resp)); break; } /* ACK on invite */ -- 2.47.2