diff options
| author | luwenpeng <[email protected]> | 2019-09-16 11:37:18 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2019-09-16 14:27:11 +0800 |
| commit | de16d2da87d8c7d141527c06985bdc6eeaf11b84 (patch) | |
| tree | 1a4de92d057548a747f3c36d67e365d0b5f21fff /plugin/protocol/http2/src/http2_stream.cpp | |
| parent | 4b0235d1999e200437939688e0490d575a3da5cc (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.cpp | 56 |
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; |
