summaryrefslogtreecommitdiff
path: root/plugin/protocol/http2/src/http2_stream.cpp
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2019-09-16 11:37:18 +0800
committerluwenpeng <[email protected]>2019-09-16 14:27:11 +0800
commitde16d2da87d8c7d141527c06985bdc6eeaf11b84 (patch)
tree1a4de92d057548a747f3c36d67e365d0b5f21fff /plugin/protocol/http2/src/http2_stream.cpp
parent4b0235d1999e200437939688e0490d575a3da5cc (diff)
整理 http/http2 公共的 header 字段,存储到 tfe_http.cpp 文件中
Diffstat (limited to 'plugin/protocol/http2/src/http2_stream.cpp')
-rw-r--r--plugin/protocol/http2/src/http2_stream.cpp56
1 files changed, 10 insertions, 46 deletions
diff --git a/plugin/protocol/http2/src/http2_stream.cpp b/plugin/protocol/http2/src/http2_stream.cpp
index 6c68c0c..d09d135 100644
--- a/plugin/protocol/http2/src/http2_stream.cpp
+++ b/plugin/protocol/http2/src/http2_stream.cpp
@@ -51,42 +51,6 @@ static const struct value_string method_vals[] =
{NGHTTP2_METHOD_UNKNOWN, "unknown"},
};
-static const struct value_string header_vals[] =
-{
- {TFE_HTTP_UNKNOWN_FIELD, "unkown"},
- {TFE_HTTP_HOST, ":authority"},
- {TFE_HTTP_REFERER, "referer"},
- {TFE_HTTP_USER_AGENT, "user-agent"},
- {TFE_HTTP_COOKIE, "cookie"},
- {TFE_HTTP_SET_COOKIE, "set-cookie"},
- {TFE_HTTP_PROXY_AUTHORIZATION, "proxy-authorization"},
- {TFE_HTTP_AUTHORIZATION, "authorization"},
- {TFE_HTTP_LOCATION, "location"},
- {TFE_HTTP_SERVER, "server"},
- {TFE_HTTP_ETAG, "etag"},
- {TFE_HTTP_DATE, "date"},
- {TFE_HTTP_TRAILER, "Trailer"},
- {TFE_HTTP_TRANSFER_ENCODING, "transfer-encoding"},
- {TFE_HTTP_VIA, "via"},
- {TFE_HTTP_PRAGMA, "pragma"},
- {TFE_HTTP_CONNECTION, "connection"},
- {TFE_HTTP_CONT_ENCODING, "content-encoding"},
- {TFE_HTTP_CONT_LANGUAGE, "content-language"},
- {TFE_HTTP_CONT_LOCATION, "content-location"},
- {TFE_HTTP_CONT_RANGE, "content-range"},
- {TFE_HTTP_CONT_LENGTH, "content-length"},
- {TFE_HTTP_CONT_TYPE, "content-type"},
- {TFE_HTTP_CONT_DISPOSITION, "content-disposition"},
- {TFE_HTTP_EXPIRES, "expires"},
- {TFE_HTTP_ACCEPT_ENCODING, "accept-encoding"},
- {TFE_HTTP_CACHE_CONTROL, "cache-control"},
- {TFE_HTTP_IF_MATCH, "if-match"},
- {TFE_HTTP_IF_NONE_MATCH, "if-none-match"},
- {TFE_HTTP_IF_MODIFIED_SINCE, "if-modified-since"},
- {TFE_HTTP_IF_UNMODIFIED_SINCE, "if-unmodified-since"},
- {TFE_HTTP_LAST_MODIFIED, "last-modified"},
-};
-
typedef enum {
NGHTTP2_USER_SEND = 0x0b,
NGHTTP2_USER_COLSE = 0x0c,
@@ -125,7 +89,7 @@ tfe_h2_header_add_field(struct tfe_h2_header *h2_header, const struct http_field
peer_h2_field->nv.namelen = strlen(peer_h2_field->field->field_name);
}else
{
- const char *std_name = val_to_str(field->field_id, header_vals);
+ const char *std_name = http2_header_val_to_str(field->field_id, __str_std_header_field_map, __str_std_header_field_map_size);
peer_h2_field->nv.name = (uint8_t *)tfe_strdup((const char *)std_name);
peer_h2_field->nv.namelen = strlen(std_name);
}
@@ -1498,19 +1462,19 @@ fill_resp_spec_from_handle(struct tfe_h2_half_private *half_private)
struct tfe_http_resp_spec *resp_spec = &(half_private->half_public.resp_spec);
TAILQ_FOREACH_SAFE(h2_field, &header->h2_field_list, next, peer_h2_field){
- if (!strncmp((char *)(h2_field->nv.name), ":status", strlen(":status"))){
+ if (!strncasecmp((char *)(h2_field->nv.name), ":status", strlen(":status"))){
resp_spec->resp_code = atoi((const char *)h2_field->nv.value);
continue;
}
- if (!strncmp((char *)(h2_field->nv.name), "content-type", strlen("content-type"))){
+ if (!strncasecmp((char *)(h2_field->nv.name), "content-type", strlen("content-type"))){
resp_spec->content_type = tfe_strdup((const char *)(h2_field->nv.value));;
continue;
}
- if (!strncmp((char *)(h2_field->nv.name), "content-encoding", strlen("content-encoding"))){
+ if (!strncasecmp((char *)(h2_field->nv.name), "content-encoding", strlen("content-encoding"))){
resp_spec->content_encoding = tfe_strdup((const char *)(h2_field->nv.value));;
continue;
}
- if (!strncmp((char *)(h2_field->nv.name), "content-length", strlen("content-length"))){
+ if (!strncasecmp((char *)(h2_field->nv.name), "content-length", strlen("content-length"))){
resp_spec->content_length = tfe_strdup((const char *)(h2_field->nv.value));;
continue;
}
@@ -1697,16 +1661,16 @@ static void fill_req_spec_from_handle(struct tfe_h2_half_private *half_private)
struct tfe_http_req_spec *req_spec = &(half_private->half_public.req_spec);
TAILQ_FOREACH_SAFE(h2_field, &header->h2_field_list, next, peer_h2_field){
- if (!strncmp((char *)(h2_field->nv.name), ":method", strlen(":method"))){
+ if (!strncasecmp((char *)(h2_field->nv.name), ":method", strlen(":method"))){
req_spec->method = (enum tfe_http_std_method)str_to_val((const char *)(h2_field->nv.value), method_vals);
continue;
}
- if (!strncmp((char *)(h2_field->nv.name), ":authority", strlen(":authority"))){
+ if (!strncasecmp((char *)(h2_field->nv.name), ":authority", strlen(":authority"))){
req_spec->host = tfe_strdup((const char *)(h2_field->nv.value));
urllen += h2_field->nv.valuelen;
continue;
}
- if (!strncmp((char *)(h2_field->nv.name), ":path", strlen(":path"))){
+ if (!strncasecmp((char *)(h2_field->nv.name), ":path", strlen(":path"))){
req_spec->uri = tfe_strdup((const char*)(h2_field->nv.value));
urllen += h2_field->nv.valuelen;
continue;
@@ -1916,7 +1880,7 @@ nghttp2_fill_up_header(nghttp2_session *ngh2_session, const nghttp2_frame *frame
struct tfe_h2_half_private *half = (dir == CONN_DIR_UPSTREAM) ? h2_session->resp : h2_session->req;
struct http_field_name field;
- field.field_id = (enum tfe_http_std_field)str_to_val((const char *)name, header_vals);
+ field.field_id = (enum tfe_http_std_field)http2_header_str_to_val((const char *)name, __str_std_header_field_map, __str_std_header_field_map_size);
if (field.field_id == TFE_HTTP_UNKNOWN_FIELD)
{
field.field_name = (const char *)name;
@@ -1950,7 +1914,7 @@ nghttp2_fill_up_promise(nghttp2_session *ngh2_session, const nghttp2_frame *fram
}
resp = h2_session->resp;
struct http_field_name field;
- field.field_id = (enum tfe_http_std_field)str_to_val((const char *)name, header_vals);
+ field.field_id = (enum tfe_http_std_field)http2_header_str_to_val((const char *)name, __str_std_header_field_map, __str_std_header_field_map_size);
if (field.field_id == TFE_HTTP_UNKNOWN_FIELD)
{
field.field_name = (const char *)name;