summaryrefslogtreecommitdiff
path: root/src/HTTP_Message_Region.c
diff options
context:
space:
mode:
authorlishu <[email protected]>2019-01-28 18:22:58 +0800
committerlishu <[email protected]>2019-01-28 18:22:58 +0800
commitd46db5643ed4981ae03f42689deb1ba1390f3e60 (patch)
tree5076da6aad2e57d27ad5f906187ce72695106c9f /src/HTTP_Message_Region.c
parent45ff1450cd33ecb44f1787fab4fa878cc3cd8c9b (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.c20
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);