From cc9adee697851ad47dc8c0487327e92b15e8d342 Mon Sep 17 00:00:00 2001 From: erititan <elemer.lelik@ericsson.com> Date: Tue, 4 Jul 2017 12:42:11 +0200 Subject: [PATCH] Message length calculation corrected --- doc/HTTP_CNL113796_PRI.doc | Bin 67072 -> 69120 bytes src/HTTP_EncDec.cc | 2 +- src/HTTP_MessageLen.ttcn | 6 +- src/HTTP_MessageLen_Function.cc | 268 +++++++++++++++++++------------- src/HTTP_Types.ttcn | 4 +- src/HTTP_parse.h | 2 +- src/HTTP_parse.l | 2 +- src/HTTP_parse.y | 2 +- src/HTTP_parse_.tab.c | 2 +- src/lex.HTTP_parse_.c | 2 +- 10 files changed, 175 insertions(+), 115 deletions(-) diff --git a/doc/HTTP_CNL113796_PRI.doc b/doc/HTTP_CNL113796_PRI.doc index ea6ebe8b5c2633e7652a5be21631a4985a1568b6..60a78a3294fffc1449c8ed33b46c62376be391de 100644 GIT binary patch delta 14353 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 delta 12944 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 diff --git a/src/HTTP_EncDec.cc b/src/HTTP_EncDec.cc index f385420..7de835b 100644 --- a/src/HTTP_EncDec.cc +++ b/src/HTTP_EncDec.cc @@ -9,7 +9,7 @@ ******************************************************************************/ // // File: HTTP_EncDec.cc -// Rev: R1C +// Rev: R1D // Prodnr: CNL113796 // Contact: http://ttcn.ericsson.se // Reference: RFC7230 - RFC7235 diff --git a/src/HTTP_MessageLen.ttcn b/src/HTTP_MessageLen.ttcn index c983c7a..088f357 100644 --- a/src/HTTP_MessageLen.ttcn +++ b/src/HTTP_MessageLen.ttcn @@ -6,14 +6,18 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: +* Eduard Czimbalmos * Eszter Susanszky ******************************************************************************/ // // File: HTTP_MessageLen.ttcn -// Rev: R1C +// Rev: R1D // Prodnr: CNL113796 // Contact: http://ttcn.ericsson.se module HTTP_MessageLen { external function ef_HTTPMessage_len(in octetstring pl_stream) return integer + external function ef_HTTPMessage_len_forConnectResp(in octetstring pl_stream) return integer + external function ef_HTTPMessage_len_forHeadResp(in octetstring pl_stream) return integer + external function ef_HTTPMessage_len_forConnClosed(in octetstring pl_stream) return integer } diff --git a/src/HTTP_MessageLen_Function.cc b/src/HTTP_MessageLen_Function.cc index 0921f06..2e6d252 100644 --- a/src/HTTP_MessageLen_Function.cc +++ b/src/HTTP_MessageLen_Function.cc @@ -1,148 +1,204 @@ /****************************************************************************** -* Copyright (c) 2015 Ericsson AB +* Copyright (c) 2016 Ericsson AB * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: +* Eduard Czimbalmos * Eszter Susanszky ******************************************************************************/ // // File: HTTP_MessageLen_Function.cc -// Rev: R1C +// Rev: R1D // Prodnr: CNL113796 // Contact: http://ttcn.ericsson.se #include "HTTP_Types.hh" #include "HTTP_MessageLen.hh" -//#include <stdlib.h> +#include <string> +#include <stdio.h> +#include <strings.h> +#include <ctype.h> + using namespace HTTP__Types; namespace HTTP__MessageLen { - + enum ReqResp {request, response, def}; enum Transfer_Encoding {chunked, notchunked, none}; + + // return the length of the first line in the buffer including the \r\n + // So 2 is returned for empty line + // -1 if there is no \r\n in the buffer + // handles the line folding if needed + + int get_http_line(const char *buff, int length, bool folding=false){ + int ret_val=0; // store the length of the line + bool end_found=false; // is the line ending found? + while(length>0){ + ret_val++; + length--; + if(*buff == '\n'){ + if( !folding || !((length>0) && (buff[1] == ' ' || buff[1] == '\t')) ){ // not line folding. ie the \n is not followed with space or tab + end_found=true; // this is the end of the line + break; + } + } + buff++; + } + return end_found?ret_val:-1; + } - INTEGER ef__HTTPMessage__len(const OCTETSTRING& pl__stream) + INTEGER f_HTTPMessage_len_common( + const OCTETSTRING& pl__stream, + const boolean connClosed, + const boolean head_req, + const boolean connect_req) { int stream_length = pl__stream.lengthof(); - if(stream_length < 0) return -1; - - int content_length = 0; - int end_of_startline = 0; - int end_of_headers = 0; - int end_of_te = 0; - int end_of_msg = 0; - int end_of_chunklngth = 0; - - ReqResp reqresp = def; - Transfer_Encoding te = none; + if(stream_length < 16) return -1; + // The smallest syntatically correct HTTP message is: + // A / HTTP/0.0\r\n\r\n + // Which is 16 octet - const unsigned char* streamptr = pl__stream; - const unsigned char* ptr = pl__stream; - const CHARSTRING crlf = "\r\n"; - const CHARSTRING crlfcrlf = "\r\n\r\n"; + const char *stream=(const char *)(const unsigned char *)pl__stream; + int line_length=-1; + int resp_code=0; + bool is_request=false; + bool is_chunked=false; + int content_length=-1; - // go to the end of stream, stop if end of startline found - while(ptr-streamptr + 2 <= stream_length && end_of_startline == 0) - { - if(memcmp(ptr, (const char*)crlf, 2) == 0) end_of_startline = 1; - else ptr++; + // skeep leading /r/n + // there should'n be any but be conservative + while((line_length=get_http_line(stream,stream_length))==2){ + stream+=line_length; + stream_length-=line_length; } - - // startline hasn't arrived - if(end_of_startline == 0) return -1; - else ptr += 2; - - //check if request or response - if(memcmp(streamptr, "HTTP/", 5) == 0 ) reqresp = response; else reqresp = request; - - // \r\n\r\n -> empty header list, return -1 - if(memcmp(ptr, (const char*)crlf, 2) == 0 ) return -1; - - while(ptr-streamptr + 4 <= stream_length && end_of_headers == 0) + if(line_length==-1){ // there is no whole line in the buffer + return -1; + } + // parse the header line { - if(memcmp(ptr, (const char*)crlfcrlf, 4) == 0 ) {end_of_headers = 1;} - else - { - if(ptr-streamptr + 15 <= stream_length && strncasecmp((const char*)ptr, "Content-Length:", 15) == 0) - { - ptr+= 15; - content_length = (int)strtol((const char*)ptr, NULL, 10); - } else if(ptr-streamptr + 18 <= stream_length && strncasecmp((const char*)ptr, "Transfer-Encoding:", 18) == 0) - { - te = notchunked; - ptr += 18; - - while(end_of_te == 0) - { - if(ptr-streamptr + 2 <= stream_length && memcmp(ptr, (const char*)crlf, 2) == 0 ) {end_of_te = 1; ptr += 2;} - else if(ptr-streamptr + 9 <= stream_length && !strncasecmp((const char*)ptr, "chunked\r\n", 9)) {te = chunked; end_of_te = 1; ptr += 9;} //chunked/r/n (last encoding is chunked) - else { ptr++; } - } - - if(end_of_te == 0) return -1; - } else ptr++; + std::string str(stream,line_length); + if(sscanf(str.c_str(),"HTTP/%*d.%*d %d ",&resp_code)==1){ + // response received + is_request=false; + } else { + // it should be a request + is_request=true; } } + stream+=line_length; + stream_length-=line_length; + + // search for the end of the headers + while((line_length=get_http_line(stream,stream_length,true))!=2){ + if(line_length==-1){ // there is no whole line in the buffer + return -1; + } + // check for specific headers + // Content-Length + if((line_length>17) && (strncasecmp(stream, "Content-Length:", 15) == 0) ){ // the minimum length of the Content-Length is 18: 15 (Content-Length:) + at least 1 digit + crlf + content_length = (int)strtol(stream+15, NULL, 10); + } + if((line_length>26) && (strncasecmp(stream, "Transfer-Encoding:", 18) == 0) ){ // the minimum length 27: 18 (Transfer-Encoding:) + 7 (chunked) + crlf + std::string str(stream+18,line_length-18); // just the data part + if(str.find("chunked")!=std::string::npos){ + is_chunked=true; + } + } + stream+=line_length; + stream_length-=line_length; + } - if(end_of_headers == 0) return -1; - else ptr += 4; - - if( te == none) { - - if(content_length > 0) return ptr-streamptr + content_length; - else if( reqresp == request ) return ptr-streamptr; - else if( reqresp == response ) return -1; - - } else if(te == notchunked) { + // skip the empty line + stream+=line_length; + stream_length-=line_length; - if( reqresp == request ) return ptr-streamptr; - else return -1; - - } else if(te == chunked) { - - const unsigned char* chunksize_ptr = ptr; - while(ptr-streamptr + 2 <= stream_length && end_of_chunklngth == 0) - { - if(memcmp(ptr, (const char*)crlf, 2) == 0) end_of_chunklngth = 1; - else ptr++; + // See RFC7230 3.3.3 + if( !is_request && ( head_req || (resp_code==204) || (resp_code==304) || (resp_code>=100 && resp_code<=199))){ // See RFC7230 3.3.3 1. + // no body + const char *stream_begin=(const char *)(const unsigned char *)pl__stream; + return stream-stream_begin; + } else if(!is_request && connect_req && (resp_code>=200 && resp_code<=299)){ // See RFC7230 3.3.3 2. + // no body + const char *stream_begin=(const char *)(const unsigned char *)pl__stream; + return stream-stream_begin; + } else if(is_chunked){ // See RFC7230 3.3.3 3. + int chunk_length=-1; + if((line_length=get_http_line(stream,stream_length))==-1){ + return -1; } - if(end_of_chunklngth == 0) return 0; - - int chunk_length = (int)strtol((const char*)chunksize_ptr, NULL, 16); - - while(chunk_length != 0 && ptr-streamptr <= stream_length) - { - end_of_chunklngth = 0; - - // chunksize + \r\n + next char - ptr += chunk_length + 2 + 1; - - chunksize_ptr = ptr; - while(ptr-streamptr + 2 <= stream_length && end_of_chunklngth == 0) - { - if(memcmp(ptr, (const char*)crlf, 2) == 0) end_of_chunklngth = 1; - else ptr++; + chunk_length=(int)strtol(stream, NULL, 16); + stream+=line_length; + stream_length-=line_length; + while(chunk_length>0){ + if(chunk_length<=stream_length){ // skip the chunk data + stream+=chunk_length; + stream_length-=chunk_length; + } + // read the CRLF + if((line_length=get_http_line(stream,stream_length))!=2){ + return -1; + } + stream+=line_length; + stream_length-=line_length; + // read the next chunk size + if((line_length=get_http_line(stream,stream_length))==-1){ + return -1; } - if(end_of_chunklngth == 0) return -1; - else chunk_length = (int)strtol((const char*)chunksize_ptr, NULL, 16); + chunk_length=(int)strtol(stream, NULL, 16); + stream+=line_length; + stream_length-=line_length; } - if(chunk_length > 0) return -1; - - //find \r\n\r\n - while(ptr-streamptr + 4 <= stream_length && end_of_msg == 0) - { - if( memcmp(ptr, (const char*)crlfcrlf, 4) == 0) end_of_msg = 1; - else ptr++; + // skip trailers + while((line_length=get_http_line(stream,stream_length))!=2){ + if(line_length==-1){ // there is no whole line in the buffer + return -1; + } + stream+=line_length; + stream_length-=line_length; } - if(end_of_msg == 0) return -1; - - return ptr+4-streamptr; + // skip the final CRLF + stream+=line_length; + stream_length-=line_length; + const char *stream_begin=(const char *)(const unsigned char *)pl__stream; + return stream-stream_begin; + } else if(content_length>=0){ // See RFC7230 3.3.3 5. + const char *stream_begin=(const char *)(const unsigned char *)pl__stream; + return stream-stream_begin+content_length; + } else if(is_request){ // See RFC7230 3.3.3 6. + const char *stream_begin=(const char *)(const unsigned char *)pl__stream; + return stream-stream_begin; + } else if(connClosed){ // See RFC7230 3.3.3 7. + return pl__stream.lengthof(); } return -1; + + } + + INTEGER ef__HTTPMessage__len(const OCTETSTRING& pl__stream) + { + return(f_HTTPMessage_len_common(pl__stream, false,false,false)); + } + + INTEGER ef__HTTPMessage__len__forConnectResp(const OCTETSTRING& pl__stream) + { + return(f_HTTPMessage_len_common(pl__stream, false,false,true)); } + + INTEGER ef__HTTPMessage__len__forHeadResp(const OCTETSTRING& pl__stream) + { + return(f_HTTPMessage_len_common(pl__stream, false,true,false)); + } + + INTEGER ef__HTTPMessage__len__forConnClosed(const OCTETSTRING& pl__stream) + { + return(f_HTTPMessage_len_common(pl__stream, true,false,false)); + } + } diff --git a/src/HTTP_Types.ttcn b/src/HTTP_Types.ttcn index 793f5f3..803999a 100644 --- a/src/HTTP_Types.ttcn +++ b/src/HTTP_Types.ttcn @@ -9,7 +9,7 @@ ******************************************************************************/ // // File: HTTP_Types.ttcn -// Rev: R1C +// Rev: R1D // Prodnr: CNL113796 // Contact: http://ttcn.ericsson.se // Reference: RFC7230 - RFC7235 @@ -165,4 +165,4 @@ module HTTP_Types charstring raw_message } -}with {extension "version R1C"} +}with {extension "version R1D"} diff --git a/src/HTTP_parse.h b/src/HTTP_parse.h index 8ecc1ac..913e4b8 100644 --- a/src/HTTP_parse.h +++ b/src/HTTP_parse.h @@ -9,7 +9,7 @@ ******************************************************************************/ // // File: HTTP.y -// Rev: R1C +// Rev: R1D // Prodnr: CNL113 // Updated: 2014-10-10 // Contact: http://ttcn.ericsson.se diff --git a/src/HTTP_parse.l b/src/HTTP_parse.l index a025018..dbf76a5 100644 --- a/src/HTTP_parse.l +++ b/src/HTTP_parse.l @@ -12,7 +12,7 @@ ******************************************************************************/ // // File: HTTP.l -// Rev: R1C +// Rev: R1D // Prodnr: CNL113796 // Contact: http://ttcn.ericsson.se // Reference: RFC7230 - RFC7235 diff --git a/src/HTTP_parse.y b/src/HTTP_parse.y index f2b8982..02603bc 100644 --- a/src/HTTP_parse.y +++ b/src/HTTP_parse.y @@ -11,7 +11,7 @@ ******************************************************************************/ // // File: HTTP_parse.y -// Rev: R1C +// Rev: R1D // Prodnr: CNL113796 // Contact: http://ttcn.ericsson.se // Reference: RFC7230 - RFC7235 diff --git a/src/HTTP_parse_.tab.c b/src/HTTP_parse_.tab.c index ad48af8..859eacc 100644 --- a/src/HTTP_parse_.tab.c +++ b/src/HTTP_parse_.tab.c @@ -88,7 +88,7 @@ ******************************************************************************/ // // File: HTTP_parse.y -// Rev: R1C +// Rev: R1D // Prodnr: CNL113796 // Contact: http://ttcn.ericsson.se // Reference: RFC7230 - RFC7235 diff --git a/src/lex.HTTP_parse_.c b/src/lex.HTTP_parse_.c index 4766465..74cbd06 100644 --- a/src/lex.HTTP_parse_.c +++ b/src/lex.HTTP_parse_.c @@ -2984,7 +2984,7 @@ char *HTTP_parse_text; ******************************************************************************/ // // File: HTTP.l -// Rev: R1C +// Rev: R1D // Prodnr: CNL113796 // Contact: http://ttcn.ericsson.se // Reference: RFC7230 - RFC7235 -- GitLab