mirror of
https://github.com/asterisk/asterisk.git
synced 2026-06-25 18:06:40 -07:00
Issue #8258 - fix handling of 487 being retransmitted to Asterisk
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@48326 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
+15
-7
@@ -11748,7 +11748,16 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru
|
||||
ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
|
||||
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
|
||||
break;
|
||||
|
||||
case 487: /* Cancelled transaction */
|
||||
/* We have sent CANCEL on an outbound INVITE
|
||||
This transaction is already scheduled to be killed by sip_hangup().
|
||||
*/
|
||||
transmit_request(p, SIP_ACK, seqno, 0, 0);
|
||||
if (p->owner && !ast_test_flag(req, SIP_PKT_IGNORE))
|
||||
ast_queue_hangup(p->owner);
|
||||
else if (!ast_test_flag(req, SIP_PKT_IGNORE))
|
||||
update_call_counter(p, DEC_CALL_LIMIT);
|
||||
break;
|
||||
case 491: /* Pending */
|
||||
/* we really should have to wait a while, then retransmit */
|
||||
/* We should support the retry-after at some point */
|
||||
@@ -11760,6 +11769,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru
|
||||
break;
|
||||
|
||||
case 501: /* Not implemented */
|
||||
transmit_request(p, SIP_ACK, seqno, 0, 0);
|
||||
if (p->owner)
|
||||
ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
|
||||
break;
|
||||
@@ -12166,6 +12176,10 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
|
||||
/* Guessing that this is not an important request */
|
||||
}
|
||||
break;
|
||||
case 487:
|
||||
if (sipmethod == SIP_INVITE)
|
||||
handle_response_invite(p, resp, rest, req, seqno);
|
||||
break;
|
||||
case 491: /* Pending */
|
||||
if (sipmethod == SIP_INVITE)
|
||||
handle_response_invite(p, resp, rest, req, seqno);
|
||||
@@ -12211,12 +12225,6 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
|
||||
if (p->owner)
|
||||
ast_queue_control(p->owner, AST_CONTROL_BUSY);
|
||||
break;
|
||||
case 487: /* Response on INVITE that has been CANCELled */
|
||||
/* channel now destroyed - dec the inUse counter */
|
||||
if (owner)
|
||||
ast_queue_hangup(p->owner);
|
||||
update_call_counter(p, DEC_CALL_LIMIT);
|
||||
break;
|
||||
case 482: /*
|
||||
\note SIP is incapable of performing a hairpin call, which
|
||||
is yet another failure of not having a layer 2 (again, YAY
|
||||
|
||||
Reference in New Issue
Block a user