修正HTTP解析层处理HTTP-Header的错误流程

* 原流程在解析同一个Field-Value对时,无法正确处理Header多次调用拼成完整字符串的情况,现修正;
* 原流程在处理Field-Value底层Buffer时计算长度有误,导致清空buffer时剩余最后的'\0',现修正。
This commit is contained in:
Lu Qiuwen
2018-09-18 18:50:25 +08:00
parent 8dee003483
commit 9ccc3d329e
3 changed files with 38 additions and 22 deletions

View File

@@ -51,8 +51,12 @@ struct http_half_private
short minor;
struct evbuffer * evbuf_uri;
struct evbuffer * evbuf_header_field;
struct evbuffer * evbuf_header_value;
bool is_evbuf_header_field_set;
bool is_evbuf_header_value_set;
struct evbuffer * evbuf_body;
enum hf_private_status body_status;
@@ -64,6 +68,7 @@ struct http_half_private
};
struct http_half_private * hf_private_create(tfe_http_direction ht_dir, short major, short minor);
void hf_private_destory(struct http_half_private * hf_private);
/** Parse the raw tcp input for HTTP half structure
@@ -83,5 +88,7 @@ int hf_private_parse(struct http_half_private * hf_private, const unsigned char
void hf_private_set_callback(struct http_half_private * hf_private, hf_private_cb * cb,
void * user, void (* fn_user_deleter)(void *));
void hf_private_set_session(struct http_half_private * hf_private, struct http_session_private * hs_private);
struct http_session_private * hs_private_create(struct http_connection_private * hc_private,
struct http_half_private * hf_private_req, struct http_half_private * hf_private_resp);