Skip to content

Commit

Permalink
core: add support for parsing http/2 replies parsing
Browse files Browse the repository at this point in the history
(cherry picked from commit 17be361)
(cherry picked from commit 18444d6)
  • Loading branch information
grumvalski authored and miconda committed Jan 28, 2020
1 parent 2879e88 commit 3cb40a5
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 16 deletions.
7 changes: 5 additions & 2 deletions src/core/parser/msg_parser.h
Expand Up @@ -137,9 +137,12 @@ if ( (*tmp==(firstchar) || *tmp==((firstchar) | 32)) && \
SIP_VERSION, SIP_VERSION_LEN))

#define IS_HTTP_REPLY(rpl) \
((rpl)->first_line.u.reply.version.len >= HTTP_VERSION_LEN && \
(((rpl)->first_line.u.reply.version.len >= HTTP_VERSION_LEN && \
!strncasecmp((rpl)->first_line.u.reply.version.s, \
HTTP_VERSION, HTTP_VERSION_LEN))
HTTP_VERSION, HTTP_VERSION_LEN)) || \
((rpl)->first_line.u.reply.version.len >= HTTP2_VERSION_LEN && \
!strncasecmp((rpl)->first_line.u.reply.version.s, \
HTTP2_VERSION, HTTP2_VERSION_LEN)))

#define IS_SIP_REPLY(rpl) \
((rpl)->first_line.u.reply.version.len >= SIP_VERSION_LEN && \
Expand Down
35 changes: 21 additions & 14 deletions src/core/parser/parse_fline.c
Expand Up @@ -96,21 +96,28 @@ char* parse_first_line(char* buffer, unsigned int len, struct msg_start* fl)
fl->flags|=FLINE_FLAG_PROTO_SIP;
fl->u.reply.version.len=SIP_VERSION_LEN;
tmp=buffer+SIP_VERSION_LEN;
} else if (http_reply_parse != 0 &&
(*tmp=='H' || *tmp=='h') &&
} else if (http_reply_parse != 0 && (*tmp=='H' || *tmp=='h')) {
/* 'HTTP/1.' */
strncasecmp( tmp+1, HTTP_VERSION+1, HTTP_VERSION_LEN-1)==0 &&
/* [0|1] */
((*(tmp+HTTP_VERSION_LEN)=='0') || (*(tmp+HTTP_VERSION_LEN)=='1')) &&
(*(tmp+HTTP_VERSION_LEN+1)==' ') ){
/* ugly hack to be able to route http replies
* Note: - the http reply must have a via
* - the message is marked as SIP_REPLY (ugly)
*/
fl->type=SIP_REPLY;
fl->flags|=FLINE_FLAG_PROTO_HTTP;
fl->u.reply.version.len=HTTP_VERSION_LEN+1 /*include last digit*/;
tmp=buffer+HTTP_VERSION_LEN+1 /* last digit */;
if (strncasecmp( tmp+1, HTTP_VERSION+1, HTTP_VERSION_LEN-1)==0 &&
/* [0|1] */
((*(tmp+HTTP_VERSION_LEN)=='0') || (*(tmp+HTTP_VERSION_LEN)=='1')) &&
(*(tmp+HTTP_VERSION_LEN+1)==' ') ){
/* ugly hack to be able to route http replies
* Note: - the http reply must have a via
* - the message is marked as SIP_REPLY (ugly)
*/
fl->type=SIP_REPLY;
fl->flags|=FLINE_FLAG_PROTO_HTTP;
fl->u.reply.version.len=HTTP_VERSION_LEN+1 /*include last digit*/;
tmp=buffer+HTTP_VERSION_LEN+1 /* last digit */;
/* 'HTTP/2' */
} else if (strncasecmp( tmp+1, HTTP2_VERSION+1, HTTP2_VERSION_LEN-1)==0 &&
(*(tmp+HTTP2_VERSION_LEN)==' ')) {
fl->type=SIP_REPLY;
fl->flags|=FLINE_FLAG_PROTO_HTTP;
fl->u.reply.version.len=HTTP2_VERSION_LEN;
tmp=buffer+HTTP2_VERSION_LEN;
}
} else IFISMETHOD( INVITE, 'I' )
else IFISMETHOD( CANCEL, 'C')
else IFISMETHOD( ACK, 'A' )
Expand Down
3 changes: 3 additions & 0 deletions src/core/parser/parse_fline.h
Expand Up @@ -49,6 +49,9 @@
#define HTTP_VERSION "HTTP/1."
#define HTTP_VERSION_LEN (sizeof(HTTP_VERSION)-1)

#define HTTP2_VERSION "HTTP/2"
#define HTTP2_VERSION_LEN (sizeof(HTTP2_VERSION)-1)

#define CANCEL "CANCEL"
#define ACK "ACK"
#define INVITE "INVITE"
Expand Down

0 comments on commit 3cb40a5

Please sign in to comment.