diff options
| author | lishu <[email protected]> | 2019-01-28 18:22:58 +0800 |
|---|---|---|
| committer | lishu <[email protected]> | 2019-01-28 18:22:58 +0800 |
| commit | d46db5643ed4981ae03f42689deb1ba1390f3e60 (patch) | |
| tree | 5076da6aad2e57d27ad5f906187ce72695106c9f /src/HTTP_Message_Region.c | |
| parent | 45ff1450cd33ecb44f1787fab4fa878cc3cd8c9b (diff) | |
1. 支持 Content-Range: bytes -154100106/154100107的解析
2. bug修复:http_doWithGzipData
3. 增加assert(session_info.buflen>=0);
Diffstat (limited to 'src/HTTP_Message_Region.c')
| -rw-r--r-- | src/HTTP_Message_Region.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/HTTP_Message_Region.c b/src/HTTP_Message_Region.c index 45b6f78..57c0440 100644 --- a/src/HTTP_Message_Region.c +++ b/src/HTTP_Message_Region.c @@ -249,6 +249,10 @@ uchar http_doWithContentLength(http_parser_t* a_http, http_stream *a_http_stream return OK; } +/* +example: +Content-Range: bytes -154100106/154100107 +*/ uchar http_doWithContentRange(http_parser_t* a_http, http_stream *a_http_stream, char* value, uint32 valuelen, struct streaminfo *a_tcp, int thread_seq, void *a_packet) { @@ -259,7 +263,7 @@ uchar http_doWithContentRange(http_parser_t* a_http, http_stream *a_http_stream, /*only get digit*/ for(i=0;i<valuelen;i++) { - if( *(value+i)>='0' && *(value+i)<='9' ) + if( *(value+i)>='0' && *(value+i)<='9' || *(value+i)=='-') { digit = value+i; break; @@ -272,10 +276,18 @@ uchar http_doWithContentRange(http_parser_t* a_http, http_stream *a_http_stream, return ERROR; } a_http->parser.cont_range = (cont_range_t*)dictator_malloc(thread_seq, sizeof(cont_range_t)); - //memset(cur_http_node->parser.cont_range, 0, sizeof(cur_http_node->parser.cont_range)); - memcpy(range, digit, MIN(HTTP_MAX_UINT64_LEN-1,valuelen)); + /*20190128 bytes -154100106/154100107*/ + if(*digit=='-') + { + range[0] = '0'; + memcpy(range+1, digit, MIN(HTTP_MAX_UINT64_LEN-1,valuelen)); + } + else + { + memcpy(range, digit, MIN(HTTP_MAX_UINT64_LEN-1,valuelen)); + } rec = sscanf(range, "%llu-%llu/%llu", &(a_http->parser.cont_range->start), &(a_http->parser.cont_range->end), &(a_http->parser.cont_range->len)); - if(rec==-1) + if(rec!=3) { MESA_handle_runtime_log(g_http_prog_para.http_log_handle, RLOG_LV_FATAL, HTTP_PLUGIN_NAME, "content range error. addr:%s, range:%s", printaddr(&a_tcp->addr, thread_seq), range); |
