diff --git a/src/shrpx_config.cc b/src/shrpx_config.cc index a5d89d8d..104c97b6 100644 --- a/src/shrpx_config.cc +++ b/src/shrpx_config.cc @@ -54,9 +54,7 @@ #include "shrpx_log.h" #include "shrpx_ssl.h" #include "shrpx_http.h" -#include "http2.h" #include "util.h" -#include "template.h" #include "base64.h" namespace shrpx { @@ -279,7 +277,7 @@ std::string read_passwd_from_file(const char *filename) { return line; } -std::pair parse_header(const char *optarg) { +Headers::value_type parse_header(const char *optarg) { const auto *colon = strchr(optarg, ':'); if (colon == nullptr || colon == optarg) { @@ -290,16 +288,15 @@ std::pair parse_header(const char *optarg) { for (; *value == '\t' || *value == ' '; ++value) ; - auto p = std::make_pair(std::string(optarg, colon), - std::string(value, strlen(value))); - util::inp_strlower(p.first); + auto p = + Header(std::string(optarg, colon), std::string(value, strlen(value))); + util::inp_strlower(p.name); if (!nghttp2_check_header_name( - reinterpret_cast(p.first.c_str()), p.first.size()) || + reinterpret_cast(p.name.c_str()), p.name.size()) || !nghttp2_check_header_value( - reinterpret_cast(p.second.c_str()), - p.second.size())) { - return {"", ""}; + reinterpret_cast(p.value.c_str()), p.value.size())) { + return Header(); } return p; @@ -2028,7 +2025,7 @@ int parse_config(const char *opt, const char *optarg, case SHRPX_OPTID_ADD_REQUEST_HEADER: case SHRPX_OPTID_ADD_RESPONSE_HEADER: { auto p = parse_header(optarg); - if (p.first.empty()) { + if (p.name.empty()) { LOG(ERROR) << opt << ": invalid header field: " << optarg; return -1; } diff --git a/src/shrpx_config.h b/src/shrpx_config.h index d7b62513..ebc97f8a 100644 --- a/src/shrpx_config.h +++ b/src/shrpx_config.h @@ -52,6 +52,7 @@ #include "shrpx_router.h" #include "template.h" +#include "http2.h" using namespace nghttp2; @@ -461,8 +462,8 @@ struct HttpConfig { bool strip_incoming; } xff; std::vector altsvcs; - std::vector> add_request_headers; - std::vector> add_response_headers; + Headers add_request_headers; + Headers add_response_headers; StringRef server_name; size_t request_header_field_buffer; size_t max_request_header_fields; @@ -633,7 +634,7 @@ std::string read_passwd_from_file(const char *filename); // like "NAME: VALUE". We require that NAME is non empty string. ":" // is allowed at the start of the NAME, but NAME == ":" is not // allowed. This function returns pair of NAME and VALUE. -std::pair parse_header(const char *optarg); +Headers::value_type parse_header(const char *optarg); std::vector parse_log_format(const char *optarg); diff --git a/src/shrpx_config_test.cc b/src/shrpx_config_test.cc index 1ac82589..eda67e85 100644 --- a/src/shrpx_config_test.cc +++ b/src/shrpx_config_test.cc @@ -38,32 +38,32 @@ namespace shrpx { void test_shrpx_config_parse_header(void) { auto p = parse_header("a: b"); - CU_ASSERT("a" == p.first); - CU_ASSERT("b" == p.second); + CU_ASSERT("a" == p.name); + CU_ASSERT("b" == p.value); p = parse_header("a: b"); - CU_ASSERT("a" == p.first); - CU_ASSERT("b" == p.second); + CU_ASSERT("a" == p.name); + CU_ASSERT("b" == p.value); p = parse_header(":a: b"); - CU_ASSERT(p.first.empty()); + CU_ASSERT(p.name.empty()); p = parse_header("a: :b"); - CU_ASSERT("a" == p.first); - CU_ASSERT(":b" == p.second); + CU_ASSERT("a" == p.name); + CU_ASSERT(":b" == p.value); p = parse_header(": b"); - CU_ASSERT(p.first.empty()); + CU_ASSERT(p.name.empty()); p = parse_header("alpha: bravo charlie"); - CU_ASSERT("alpha" == p.first); - CU_ASSERT("bravo charlie" == p.second); + CU_ASSERT("alpha" == p.name); + CU_ASSERT("bravo charlie" == p.value); p = parse_header("a,: b"); - CU_ASSERT(p.first.empty()); + CU_ASSERT(p.name.empty()); p = parse_header("a: b\x0a"); - CU_ASSERT(p.first.empty()); + CU_ASSERT(p.name.empty()); } void test_shrpx_config_parse_log_format(void) { diff --git a/src/shrpx_http2_downstream_connection.cc b/src/shrpx_http2_downstream_connection.cc index 663599af..02982b8a 100644 --- a/src/shrpx_http2_downstream_connection.cc +++ b/src/shrpx_http2_downstream_connection.cc @@ -422,7 +422,7 @@ int Http2DownstreamConnection::push_request_headers() { } for (auto &p : httpconf.add_request_headers) { - nva.push_back(http2::make_nv_nocopy(p.first, p.second)); + nva.push_back(http2::make_nv_nocopy(p.name, p.value)); } if (LOG_ENABLED(INFO)) { diff --git a/src/shrpx_http2_upstream.cc b/src/shrpx_http2_upstream.cc index a08fc588..434873ac 100644 --- a/src/shrpx_http2_upstream.cc +++ b/src/shrpx_http2_upstream.cc @@ -1436,7 +1436,7 @@ int Http2Upstream::on_downstream_header_complete(Downstream *downstream) { } for (auto &p : httpconf.add_response_headers) { - nva.push_back(http2::make_nv_nocopy(p.first, p.second)); + nva.push_back(http2::make_nv_nocopy(p.name, p.value)); } if (downstream->get_stream_id() % 2 == 0) { diff --git a/src/shrpx_http_downstream_connection.cc b/src/shrpx_http_downstream_connection.cc index 40c5753d..8e2796a6 100644 --- a/src/shrpx_http_downstream_connection.cc +++ b/src/shrpx_http_downstream_connection.cc @@ -418,9 +418,9 @@ int HttpDownstreamConnection::push_request_headers() { } for (auto &p : httpconf.add_request_headers) { - buf->append(p.first); + buf->append(p.name); buf->append(": "); - buf->append(p.second); + buf->append(p.value); buf->append("\r\n"); } diff --git a/src/shrpx_https_upstream.cc b/src/shrpx_https_upstream.cc index 1794b94c..cc72e8f5 100644 --- a/src/shrpx_https_upstream.cc +++ b/src/shrpx_https_upstream.cc @@ -1022,9 +1022,9 @@ int HttpsUpstream::on_downstream_header_complete(Downstream *downstream) { } for (auto &p : httpconf.add_response_headers) { - buf->append(p.first); + buf->append(p.name); buf->append(": "); - buf->append(p.second); + buf->append(p.value); buf->append("\r\n"); } diff --git a/src/shrpx_spdy_upstream.cc b/src/shrpx_spdy_upstream.cc index 2a9ed64d..a44f2a46 100644 --- a/src/shrpx_spdy_upstream.cc +++ b/src/shrpx_spdy_upstream.cc @@ -1064,8 +1064,8 @@ int SpdyUpstream::on_downstream_header_complete(Downstream *downstream) { } for (auto &p : httpconf.add_response_headers) { - nv[hdidx++] = p.first.c_str(); - nv[hdidx++] = p.second.c_str(); + nv[hdidx++] = p.name.c_str(); + nv[hdidx++] = p.value.c_str(); } nv[hdidx++] = 0;