diff options
author | Luigi Rizzo <rizzo@icir.org> | 2006-05-11 14:55:34 +0000 |
---|---|---|
committer | Luigi Rizzo <rizzo@icir.org> | 2006-05-11 14:55:34 +0000 |
commit | 87e909476d8b2dfbc92c85b78ae854d275604571 (patch) | |
tree | 0f095bf02931ceaf3e66cbe63781aa72045479a6 | |
parent | f3e6fa56ab7e88dafe7ec1ba180c91db7b532482 (diff) |
simplify determine_firstline_parts
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@26919 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r-- | channels/chan_sip.c | 51 |
1 files changed, 21 insertions, 30 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 56760838f..974da481c 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -4970,51 +4970,42 @@ static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_r } /*! \brief Parse first line of incoming SIP request */ -static int determine_firstline_parts( struct sip_request *req ) +static int determine_firstline_parts(struct sip_request *req) { - char *e, *cmd; - int len; - - cmd = ast_skip_blanks(req->header[0]); - if (!*cmd) + char *e = ast_skip_blanks(req->header[0]); /* there shouldn't be any */ + + if (!*e) return -1; - req->rlPart1 = cmd; - e = ast_skip_nonblanks(cmd); - /* Get the command */ + req->rlPart1 = e; /* method or protocol */ + e = ast_skip_nonblanks(e); if (*e) *e++ = '\0'; + /* Get URI or status code */ e = ast_skip_blanks(e); if ( !*e ) return -1; + ast_trim_blanks(e); - if ( !strcasecmp(cmd, "SIP/2.0") ) { - /* We have a response */ - req->rlPart2 = e; - len = strlen( req->rlPart2 ); - if ( len < 2 ) { + if (!strcasecmp(req->rlPart1, "SIP/2.0") ) { /* We have a response */ + if (strlen(e) < 3) /* status code is 3 digits */ return -1; - } - ast_trim_blanks(e); - } else { - /* We have a request */ - if ( *e == '<' ) { + req->rlPart2 = e; + } else { /* We have a request */ + if ( *e == '<' ) { /* XXX the spec says it must not be in <> ! */ + ast_log(LOG_WARNING, "bogus uri in <> %s\n", e); e++; - if ( !*e ) { + if (!*e) return -1; - } } req->rlPart2 = e; /* URI */ - if ( ( e= strrchr( req->rlPart2, 'S' ) ) == NULL ) { + e = ast_skip_nonblanks(e); + if (*e) + *e++ = '\0'; + e = ast_skip_blanks(e); + if (strcasecmp(e, "SIP/2.0") ) { + ast_log(LOG_WARNING, "Bad request protocol %s\n", e); return -1; } - /* XXX maybe trim_blanks() ? */ - while( isspace( *(--e) ) ) - ; - if ( *e == '>' ) { - *e = '\0'; - } else { - *(++e)= '\0'; - } } return 1; } |