summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuigi Rizzo <rizzo@icir.org>2006-05-11 14:55:34 +0000
committerLuigi Rizzo <rizzo@icir.org>2006-05-11 14:55:34 +0000
commit87e909476d8b2dfbc92c85b78ae854d275604571 (patch)
tree0f095bf02931ceaf3e66cbe63781aa72045479a6
parentf3e6fa56ab7e88dafe7ec1ba180c91db7b532482 (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.c51
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;
}