增加根据Host和URI拼接URL的功能

This commit is contained in:
Lu Qiuwen
2018-09-23 20:01:11 +08:00
parent 2798783641
commit e128dba934
3 changed files with 16 additions and 5 deletions

View File

@@ -51,6 +51,7 @@ struct http_half_private
short minor;
struct evbuffer * evbuf_uri;
char * url_storage;
struct evbuffer * evbuf_header_field;
struct evbuffer * evbuf_header_value;

View File

@@ -131,11 +131,21 @@ void __hf_public_req_fill_from_private(struct http_half_private * hf_private, st
/* uri is stored in underlay evbuffer, we need to append a terminal zero */
static const char __zero = 0;
evbuffer_add(hf_private->evbuf_uri, &__zero, sizeof(__zero));
hf_req_spec->uri = (char *) evbuffer_pullup(hf_private->evbuf_uri, evbuffer_get_length(hf_private->evbuf_uri));
/* TODO: URL
* url is more complex. need to review RFC */
hf_req_spec->url = hf_req_spec->uri;
/* TODO: url is more complex. need to review RFC */
if (hf_req_spec->uri[0] != '\0' && hf_req_spec->uri[0] != '/')
{
asprintf(&hf_private->url_storage, "%s/%s", hf_req_spec->host, hf_req_spec->uri);
}
else
{
asprintf(&hf_private->url_storage, "%s%s", hf_req_spec->host, hf_req_spec->uri);
}
hf_req_spec->url = hf_private->url_storage;
assert(hf_req_spec->url != NULL);
}
void __hf_public_resp_fill_from_private(struct http_half_private * hf_private, struct http_parser * parser)

View File

@@ -62,7 +62,7 @@ void __get_http_request_header_verify_helper(struct http_half_private * hf_priva
/* PUBLIC FIELD */
EXPECT_EQ(hf_public_request->method, TFE_HTTP_GET);
EXPECT_STREQ(hf_public_request->uri, "/gfwlist/gfwlist/master/gfwlist.txt");
EXPECT_STREQ(hf_public_request->url, "/gfwlist/gfwlist/master/gfwlist.txt");
EXPECT_STREQ(hf_public_request->url, "raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt");
EXPECT_STREQ(hf_public_request->host, "raw.githubusercontent.com");
/* Header Field */
@@ -319,7 +319,7 @@ void __http_post_header_verify_helper(struct http_half_private * hf_private)
/* PUBLIC FIELD */
EXPECT_EQ(hf_public_request->method, TFE_HTTP_POST);
EXPECT_STREQ(hf_public_request->uri, "/");
EXPECT_STREQ(hf_public_request->url, "/");
EXPECT_STREQ(hf_public_request->url, "qbwup.imtt.qq.com/");
EXPECT_STREQ(hf_public_request->host, "qbwup.imtt.qq.com");
/* Header Field */