Module: kamailio Branch: master Commit: 17be36102e3a1c286c69a5da193dd8405000ab62 URL: https://github.com/kamailio/kamailio/commit/17be36102e3a1c286c69a5da193dd8405000ab62
Author: Federico Cabiddu <federico.cabi...@gmail.com> Committer: Federico Cabiddu <federico.cabi...@gmail.com> Date: 2019-11-16T16:33:04+01:00 core: add support for parsing http/2 replies parsing --- Modified: src/core/parser/msg_parser.h Modified: src/core/parser/parse_fline.c Modified: src/core/parser/parse_fline.h --- Diff: https://github.com/kamailio/kamailio/commit/17be36102e3a1c286c69a5da193dd8405000ab62.diff Patch: https://github.com/kamailio/kamailio/commit/17be36102e3a1c286c69a5da193dd8405000ab62.patch --- diff --git a/src/core/parser/msg_parser.h b/src/core/parser/msg_parser.h index 160a7eb21d..0b0f5044ed 100644 --- a/src/core/parser/msg_parser.h +++ b/src/core/parser/msg_parser.h @@ -146,9 +146,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 && \ diff --git a/src/core/parser/parse_fline.c b/src/core/parser/parse_fline.c index 6d46f2192a..c535b49a4c 100644 --- a/src/core/parser/parse_fline.c +++ b/src/core/parser/parse_fline.c @@ -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' ) diff --git a/src/core/parser/parse_fline.h b/src/core/parser/parse_fline.h index 2add9b0efb..63f74ececf 100644 --- a/src/core/parser/parse_fline.h +++ b/src/core/parser/parse_fline.h @@ -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" _______________________________________________ Kamailio (SER) - Development Mailing List sr-dev@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev