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: http://svn.digium.com/svn/asterisk/trunk@76371 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
a96340ce79
commit
70040480cf
1 changed files with 18 additions and 10 deletions
|
@ -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);
|
||||||
|
|
Reference in a new issue