Skip to content
Snippets Groups Projects
Commit db12b404 authored by Luigi Rizzo's avatar Luigi Rizzo
Browse files

comment and slightly restructure handle_request() in the part that handles

responses, so that there is a common exit point.
Mark two places where probably we could return -1 instead of 0 to report
an error to the caller.
(change triggered by investigations on how the 'SIP_PKT_IGNORE' field was used).

nothing to backport from this commit



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@76371 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent 88f18dc9
No related branches found
No related tags found
No related merge requests found
...@@ -15700,26 +15700,34 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc ...@@ -15700,26 +15700,34 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc
/* Find out SIP method for incoming request */ /* Find out SIP method for incoming request */
if (req->method == SIP_RESPONSE) { /* Response to our request */ if (req->method == SIP_RESPONSE) { /* Response to our request */
/* When we get here, we know this is a SIP dialog where we've sent /* When we get here, we know this is a SIP dialog where we've sent
a request and have a response, or at least get a response * a request and have a response, or at least get a response
within an existing dialog */ * within an existing dialog. Do some sanity checks, then
/* Response to our request -- Do some sanity checks */ * possibly process the request. In all cases, there function
* terminates at the end of this block
*/
int ret = 0;
if (p->ocseq < seqno) { if (p->ocseq < seqno) {
ast_debug(1, "Ignoring out of order response %d (expecting %d)\n", seqno, p->ocseq); ast_debug(1, "Ignoring out of order response %d (expecting %d)\n", seqno, p->ocseq);
return -1; ret = -1;
} else if (p->ocseq != seqno) { } else if (p->ocseq != seqno) {
/* ignore means "don't do anything with it" but still have to /* ignore means "don't do anything with it" but still have to
respond appropriately */ * respond appropriately.
* But in this case this is a response already, so we really
* have nothing to do with this message, and even setting the
* ignore flag is pointless.
*/
req->ignore = 1; req->ignore = 1;
append_history(p, "Ignore", "Ignoring this retransmit\n"); append_history(p, "Ignore", "Ignoring this retransmit\n");
} else if (e) { } else if (e) {
e = ast_skip_blanks(e); e = ast_skip_blanks(e);
if (sscanf(e, "%d %n", &respid, &len) != 1) { if (sscanf(e, "%d %n", &respid, &len) != 1) {
ast_log(LOG_WARNING, "Invalid response: '%s'\n", e); ast_log(LOG_WARNING, "Invalid response: '%s'\n", e);
} else { /* XXX maybe should do ret = -1; */
if (respid <= 0) { } else if (respid <= 0) {
ast_log(LOG_WARNING, "Invalid SIP response code: '%d'\n", respid); ast_log(LOG_WARNING, "Invalid SIP response code: '%d'\n", respid);
return 0; /* XXX maybe should do ret = -1; */
} } else { /* finally, something worth processing */
/* More SIP ridiculousness, we have to ignore bogus contacts in 100 etc responses */ /* More SIP ridiculousness, we have to ignore bogus contacts in 100 etc responses */
if ((respid == 200) || ((respid >= 300) && (respid <= 399))) if ((respid == 200) || ((respid >= 300) && (respid <= 399)))
extract_uri(p, req); extract_uri(p, req);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment