ignore CANCEL request after having already received final response to INVITE

RFC 3261 section 9 states that a CANCEL has no effect on a
request to a UAS that has already given a final response.  This
patch checks to make sure there is a pending invite before
allowing a CANCEL request to be processed, otherwise it responds
to the CANCEL with a "481 Call/Transaction Does Not Exist".

Review: https://reviewboard.asterisk.org/r/697/



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@271977 65c4cc65-6c06-0410-ace0-fbb531ad65f3
certified/1.8.6
David Vossel 16 years ago
parent 3a875d8524
commit 1509737580

@ -23079,7 +23079,14 @@ static int handle_incoming(struct sip_pvt *p, struct sip_request *req, struct so
req->ignore = 1;
ast_debug(3, "Ignoring SIP message because of retransmit (%s Seqno %d, ours %d)\n", sip_methods[p->method].text, p->icseq, seqno);
}
/* RFC 3261 section 9. "CANCEL has no effect on a request to which a UAS has
* already given a final response." */
if (!p->pendinginvite && (req->method == SIP_CANCEL)) {
transmit_response(p, "481 Call/Transaction Does Not Exist", req);
return res;
}
if (seqno >= p->icseq)
/* Next should follow monotonically (but not necessarily
incrementally -- thanks again to the genius authors of SIP --

Loading…
Cancel
Save