mirror of
https://github.com/nghttp2/nghttp2.git
synced 2026-03-29 09:19:18 +08:00
Merge pull request #2159 from nghttp2/stringref-literal
Add StringRef literal operator and remove StringRef::from_lit
This commit is contained in:
@@ -94,8 +94,8 @@ void start_element_func(void *user_data, const xmlChar *src_name,
|
||||
++parser_data->inside_head;
|
||||
}
|
||||
if (util::strieq_l("link", name)) {
|
||||
auto rel_attr = get_attr(attrs, StringRef::from_lit("rel"));
|
||||
auto href_attr = get_attr(attrs, StringRef::from_lit("href"));
|
||||
auto rel_attr = get_attr(attrs, "rel"_sr);
|
||||
auto href_attr = get_attr(attrs, "href"_sr);
|
||||
if (rel_attr.empty() || href_attr.empty()) {
|
||||
return;
|
||||
}
|
||||
@@ -104,7 +104,7 @@ void start_element_func(void *user_data, const xmlChar *src_name,
|
||||
} else if (util::strieq_l("stylesheet", rel_attr)) {
|
||||
add_link(parser_data, href_attr, REQ_CSS);
|
||||
} else if (util::strieq_l("preload", rel_attr)) {
|
||||
auto as_attr = get_attr(attrs, StringRef::from_lit("as"));
|
||||
auto as_attr = get_attr(attrs, "as"_sr);
|
||||
if (as_attr.empty()) {
|
||||
return;
|
||||
}
|
||||
@@ -112,13 +112,13 @@ void start_element_func(void *user_data, const xmlChar *src_name,
|
||||
get_resource_type_for_preload_as(as_attr));
|
||||
}
|
||||
} else if (util::strieq_l("img", name)) {
|
||||
auto src_attr = get_attr(attrs, StringRef::from_lit("src"));
|
||||
auto src_attr = get_attr(attrs, "src"_sr);
|
||||
if (src_attr.empty()) {
|
||||
return;
|
||||
}
|
||||
add_link(parser_data, src_attr, REQ_IMG);
|
||||
} else if (util::strieq_l("script", name)) {
|
||||
auto src_attr = get_attr(attrs, StringRef::from_lit("src"));
|
||||
auto src_attr = get_attr(attrs, "src"_sr);
|
||||
if (src_attr.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -78,9 +78,8 @@ namespace nghttp2 {
|
||||
|
||||
namespace {
|
||||
// TODO could be constexpr
|
||||
constexpr auto DEFAULT_HTML = StringRef::from_lit("index.html");
|
||||
constexpr auto NGHTTPD_SERVER =
|
||||
StringRef::from_lit("nghttpd nghttp2/" NGHTTP2_VERSION);
|
||||
constexpr auto DEFAULT_HTML = "index.html"_sr;
|
||||
constexpr auto NGHTTPD_SERVER = "nghttpd nghttp2/" NGHTTP2_VERSION ""_sr;
|
||||
} // namespace
|
||||
|
||||
namespace {
|
||||
@@ -1012,8 +1011,7 @@ int Http2Handler::submit_push_promise(Stream *stream,
|
||||
authority = stream->header.host;
|
||||
}
|
||||
|
||||
auto scheme = get_config()->no_tls ? StringRef::from_lit("http")
|
||||
: StringRef::from_lit("https");
|
||||
auto scheme = get_config()->no_tls ? "http"_sr : "https"_sr;
|
||||
|
||||
auto nva = std::to_array({http2::make_nv_ll(":method", "GET"),
|
||||
http2::make_nv_ls_nocopy(":path", push_path),
|
||||
@@ -1031,7 +1029,7 @@ int Http2Handler::submit_push_promise(Stream *stream,
|
||||
auto promised_stream = std::make_unique<Stream>(this, promised_stream_id);
|
||||
|
||||
auto &promised_header = promised_stream->header;
|
||||
promised_header.method = StringRef::from_lit("GET");
|
||||
promised_header.method = "GET"_sr;
|
||||
promised_header.path = push_path;
|
||||
promised_header.scheme = scheme;
|
||||
promised_header.authority =
|
||||
@@ -1142,10 +1140,9 @@ void prepare_status_response(Stream *stream, Http2Handler *hd, int status) {
|
||||
|
||||
HeaderRefs headers;
|
||||
headers.reserve(2);
|
||||
headers.emplace_back(StringRef::from_lit("content-type"),
|
||||
StringRef::from_lit("text/html; charset=UTF-8"));
|
||||
headers.emplace_back("content-type"_sr, "text/html; charset=UTF-8"_sr);
|
||||
headers.emplace_back(
|
||||
StringRef::from_lit("content-length"),
|
||||
"content-length"_sr,
|
||||
util::make_string_ref_uint(stream->balloc, file_ent->length));
|
||||
hd->submit_response(StringRef{status_page->status}, stream->stream_id,
|
||||
headers, &data_prd);
|
||||
@@ -1169,15 +1166,13 @@ void prepare_echo_response(Stream *stream, Http2Handler *hd) {
|
||||
data_prd.read_callback = file_read_callback;
|
||||
|
||||
HeaderRefs headers;
|
||||
headers.emplace_back(StringRef::from_lit("nghttpd-response"),
|
||||
StringRef::from_lit("echo"));
|
||||
headers.emplace_back("nghttpd-response"_sr, "echo"_sr);
|
||||
if (!hd->get_config()->no_content_length) {
|
||||
headers.emplace_back(StringRef::from_lit("content-length"),
|
||||
headers.emplace_back("content-length"_sr,
|
||||
util::make_string_ref_uint(stream->balloc, length));
|
||||
}
|
||||
|
||||
hd->submit_response(StringRef::from_lit("200"), stream->stream_id, headers,
|
||||
&data_prd);
|
||||
hd->submit_response("200"_sr, stream->stream_id, headers, &data_prd);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
@@ -1211,10 +1206,10 @@ void prepare_redirect_response(Stream *stream, Http2Handler *hd,
|
||||
authority = stream->header.host;
|
||||
}
|
||||
|
||||
auto location = concat_string_ref(
|
||||
stream->balloc, scheme, StringRef::from_lit("://"), authority, path);
|
||||
auto location =
|
||||
concat_string_ref(stream->balloc, scheme, "://"_sr, authority, path);
|
||||
|
||||
auto headers = HeaderRefs{{StringRef::from_lit("location"), location}};
|
||||
auto headers = HeaderRefs{{"location"_sr, location}};
|
||||
|
||||
auto sessions = hd->get_sessions();
|
||||
auto status_page = sessions->get_server()->get_status_page(status);
|
||||
@@ -1341,8 +1336,8 @@ void prepare_response(Stream *stream, Http2Handler *hd,
|
||||
if (buf.st_mode & S_IFDIR) {
|
||||
close(file);
|
||||
|
||||
auto reqpath = concat_string_ref(stream->balloc, raw_path,
|
||||
StringRef::from_lit("/"), raw_query);
|
||||
auto reqpath =
|
||||
concat_string_ref(stream->balloc, raw_path, "/"_sr, raw_query);
|
||||
|
||||
prepare_redirect_response(stream, hd, reqpath, 301);
|
||||
|
||||
@@ -1372,16 +1367,15 @@ void prepare_response(Stream *stream, Http2Handler *hd,
|
||||
stream->file_ent = file_ent;
|
||||
|
||||
if (last_mod_found && file_ent->mtime <= last_mod) {
|
||||
hd->submit_response(StringRef::from_lit("304"), stream->stream_id, nullptr);
|
||||
hd->submit_response("304"_sr, stream->stream_id, nullptr);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
auto method = stream->header.method;
|
||||
if (method == StringRef::from_lit("HEAD")) {
|
||||
hd->submit_file_response(StringRef::from_lit("200"), stream,
|
||||
file_ent->mtime, file_ent->length,
|
||||
file_ent->content_type, nullptr);
|
||||
if (method == "HEAD"_sr) {
|
||||
hd->submit_file_response("200"_sr, stream, file_ent->mtime,
|
||||
file_ent->length, file_ent->content_type, nullptr);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1392,8 +1386,8 @@ void prepare_response(Stream *stream, Http2Handler *hd,
|
||||
data_prd.source.fd = file_ent->fd;
|
||||
data_prd.read_callback = file_read_callback;
|
||||
|
||||
hd->submit_file_response(StringRef::from_lit("200"), stream, file_ent->mtime,
|
||||
file_ent->length, file_ent->content_type, &data_prd);
|
||||
hd->submit_file_response("200"_sr, stream, file_ent->mtime, file_ent->length,
|
||||
file_ent->content_type, &data_prd);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
@@ -1536,8 +1530,7 @@ int hd_on_frame_recv_callback(nghttp2_session *session,
|
||||
|
||||
auto method = stream->header.method;
|
||||
if (hd->get_config()->echo_upload &&
|
||||
(method == StringRef::from_lit("POST") ||
|
||||
method == StringRef::from_lit("PUT"))) {
|
||||
(method == "POST"_sr || method == "PUT"_sr)) {
|
||||
if (!prepare_upload_temp_store(stream, hd)) {
|
||||
hd->submit_rst_stream(stream, NGHTTP2_INTERNAL_ERROR);
|
||||
return 0;
|
||||
@@ -2131,7 +2124,8 @@ int HttpServer::run() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (SSL_CTX_set_cipher_list(ssl_ctx, tls::DEFAULT_CIPHER_LIST) == 0) {
|
||||
if (SSL_CTX_set_cipher_list(ssl_ctx, tls::DEFAULT_CIPHER_LIST.data()) ==
|
||||
0) {
|
||||
std::cerr << ERR_error_string(ERR_get_error(), nullptr) << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -2087,7 +2087,7 @@ benchmarking tool for HTTP/2 server)"
|
||||
} // namespace
|
||||
|
||||
namespace {
|
||||
constexpr char DEFAULT_ALPN_LIST[] = "h2,h2-16,h2-14,http/1.1";
|
||||
constexpr auto DEFAULT_ALPN_LIST = "h2,h2-16,h2-14,http/1.1"_sr;
|
||||
} // namespace
|
||||
|
||||
namespace {
|
||||
@@ -2482,8 +2482,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 'p': {
|
||||
auto proto = StringRef{optarg};
|
||||
if (util::strieq(StringRef::from_lit(NGHTTP2_CLEARTEXT_PROTO_VERSION_ID),
|
||||
proto)) {
|
||||
if (util::strieq(NGHTTP2_CLEARTEXT_PROTO_VERSION_ID ""_sr, proto)) {
|
||||
config.no_tls_proto = Config::PROTO_HTTP2;
|
||||
} else if (util::strieq(NGHTTP2_H1_1, proto)) {
|
||||
config.no_tls_proto = Config::PROTO_HTTP1_1;
|
||||
@@ -2608,8 +2607,7 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
case 6:
|
||||
// --h1
|
||||
config.alpn_list =
|
||||
util::parse_config_str_list(StringRef::from_lit("http/1.1"));
|
||||
config.alpn_list = util::parse_config_str_list("http/1.1"_sr);
|
||||
config.no_tls_proto = Config::PROTO_HTTP1_1;
|
||||
break;
|
||||
case 7:
|
||||
@@ -2735,8 +2733,7 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
|
||||
if (config.alpn_list.empty()) {
|
||||
config.alpn_list =
|
||||
util::parse_config_str_list(StringRef::from_lit(DEFAULT_ALPN_LIST));
|
||||
config.alpn_list = util::parse_config_str_list(DEFAULT_ALPN_LIST);
|
||||
}
|
||||
|
||||
// serialize the APLN tokens
|
||||
@@ -3078,8 +3075,8 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
|
||||
if (!content_length_str.empty()) {
|
||||
nva.push_back(http2::make_nv(StringRef::from_lit("content-length"),
|
||||
StringRef{content_length_str}));
|
||||
nva.push_back(
|
||||
http2::make_nv("content-length"_sr, StringRef{content_length_str}));
|
||||
}
|
||||
|
||||
config.nva.push_back(std::move(nva));
|
||||
|
||||
208
src/http2.cc
208
src/http2.cc
@@ -35,107 +35,107 @@ namespace http2 {
|
||||
StringRef get_reason_phrase(unsigned int status_code) {
|
||||
switch (status_code) {
|
||||
case 100:
|
||||
return StringRef::from_lit("Continue");
|
||||
return "Continue"_sr;
|
||||
case 101:
|
||||
return StringRef::from_lit("Switching Protocols");
|
||||
return "Switching Protocols"_sr;
|
||||
case 103:
|
||||
return StringRef::from_lit("Early Hints");
|
||||
return "Early Hints"_sr;
|
||||
case 200:
|
||||
return StringRef::from_lit("OK");
|
||||
return "OK"_sr;
|
||||
case 201:
|
||||
return StringRef::from_lit("Created");
|
||||
return "Created"_sr;
|
||||
case 202:
|
||||
return StringRef::from_lit("Accepted");
|
||||
return "Accepted"_sr;
|
||||
case 203:
|
||||
return StringRef::from_lit("Non-Authoritative Information");
|
||||
return "Non-Authoritative Information"_sr;
|
||||
case 204:
|
||||
return StringRef::from_lit("No Content");
|
||||
return "No Content"_sr;
|
||||
case 205:
|
||||
return StringRef::from_lit("Reset Content");
|
||||
return "Reset Content"_sr;
|
||||
case 206:
|
||||
return StringRef::from_lit("Partial Content");
|
||||
return "Partial Content"_sr;
|
||||
case 300:
|
||||
return StringRef::from_lit("Multiple Choices");
|
||||
return "Multiple Choices"_sr;
|
||||
case 301:
|
||||
return StringRef::from_lit("Moved Permanently");
|
||||
return "Moved Permanently"_sr;
|
||||
case 302:
|
||||
return StringRef::from_lit("Found");
|
||||
return "Found"_sr;
|
||||
case 303:
|
||||
return StringRef::from_lit("See Other");
|
||||
return "See Other"_sr;
|
||||
case 304:
|
||||
return StringRef::from_lit("Not Modified");
|
||||
return "Not Modified"_sr;
|
||||
case 305:
|
||||
return StringRef::from_lit("Use Proxy");
|
||||
// case 306: return StringRef::from_lit("(Unused)");
|
||||
return "Use Proxy"_sr;
|
||||
// case 306: return "(Unused)"_sr;
|
||||
case 307:
|
||||
return StringRef::from_lit("Temporary Redirect");
|
||||
return "Temporary Redirect"_sr;
|
||||
case 308:
|
||||
return StringRef::from_lit("Permanent Redirect");
|
||||
return "Permanent Redirect"_sr;
|
||||
case 400:
|
||||
return StringRef::from_lit("Bad Request");
|
||||
return "Bad Request"_sr;
|
||||
case 401:
|
||||
return StringRef::from_lit("Unauthorized");
|
||||
return "Unauthorized"_sr;
|
||||
case 402:
|
||||
return StringRef::from_lit("Payment Required");
|
||||
return "Payment Required"_sr;
|
||||
case 403:
|
||||
return StringRef::from_lit("Forbidden");
|
||||
return "Forbidden"_sr;
|
||||
case 404:
|
||||
return StringRef::from_lit("Not Found");
|
||||
return "Not Found"_sr;
|
||||
case 405:
|
||||
return StringRef::from_lit("Method Not Allowed");
|
||||
return "Method Not Allowed"_sr;
|
||||
case 406:
|
||||
return StringRef::from_lit("Not Acceptable");
|
||||
return "Not Acceptable"_sr;
|
||||
case 407:
|
||||
return StringRef::from_lit("Proxy Authentication Required");
|
||||
return "Proxy Authentication Required"_sr;
|
||||
case 408:
|
||||
return StringRef::from_lit("Request Timeout");
|
||||
return "Request Timeout"_sr;
|
||||
case 409:
|
||||
return StringRef::from_lit("Conflict");
|
||||
return "Conflict"_sr;
|
||||
case 410:
|
||||
return StringRef::from_lit("Gone");
|
||||
return "Gone"_sr;
|
||||
case 411:
|
||||
return StringRef::from_lit("Length Required");
|
||||
return "Length Required"_sr;
|
||||
case 412:
|
||||
return StringRef::from_lit("Precondition Failed");
|
||||
return "Precondition Failed"_sr;
|
||||
case 413:
|
||||
return StringRef::from_lit("Payload Too Large");
|
||||
return "Payload Too Large"_sr;
|
||||
case 414:
|
||||
return StringRef::from_lit("URI Too Long");
|
||||
return "URI Too Long"_sr;
|
||||
case 415:
|
||||
return StringRef::from_lit("Unsupported Media Type");
|
||||
return "Unsupported Media Type"_sr;
|
||||
case 416:
|
||||
return StringRef::from_lit("Requested Range Not Satisfiable");
|
||||
return "Requested Range Not Satisfiable"_sr;
|
||||
case 417:
|
||||
return StringRef::from_lit("Expectation Failed");
|
||||
return "Expectation Failed"_sr;
|
||||
case 421:
|
||||
return StringRef::from_lit("Misdirected Request");
|
||||
return "Misdirected Request"_sr;
|
||||
case 425:
|
||||
// https://tools.ietf.org/html/rfc8470
|
||||
return StringRef::from_lit("Too Early");
|
||||
return "Too Early"_sr;
|
||||
case 426:
|
||||
return StringRef::from_lit("Upgrade Required");
|
||||
return "Upgrade Required"_sr;
|
||||
case 428:
|
||||
return StringRef::from_lit("Precondition Required");
|
||||
return "Precondition Required"_sr;
|
||||
case 429:
|
||||
return StringRef::from_lit("Too Many Requests");
|
||||
return "Too Many Requests"_sr;
|
||||
case 431:
|
||||
return StringRef::from_lit("Request Header Fields Too Large");
|
||||
return "Request Header Fields Too Large"_sr;
|
||||
case 451:
|
||||
return StringRef::from_lit("Unavailable For Legal Reasons");
|
||||
return "Unavailable For Legal Reasons"_sr;
|
||||
case 500:
|
||||
return StringRef::from_lit("Internal Server Error");
|
||||
return "Internal Server Error"_sr;
|
||||
case 501:
|
||||
return StringRef::from_lit("Not Implemented");
|
||||
return "Not Implemented"_sr;
|
||||
case 502:
|
||||
return StringRef::from_lit("Bad Gateway");
|
||||
return "Bad Gateway"_sr;
|
||||
case 503:
|
||||
return StringRef::from_lit("Service Unavailable");
|
||||
return "Service Unavailable"_sr;
|
||||
case 504:
|
||||
return StringRef::from_lit("Gateway Timeout");
|
||||
return "Gateway Timeout"_sr;
|
||||
case 505:
|
||||
return StringRef::from_lit("HTTP Version Not Supported");
|
||||
return "HTTP Version Not Supported"_sr;
|
||||
case 511:
|
||||
return StringRef::from_lit("Network Authentication Required");
|
||||
return "Network Authentication Required"_sr;
|
||||
default:
|
||||
return StringRef{};
|
||||
}
|
||||
@@ -144,104 +144,104 @@ StringRef get_reason_phrase(unsigned int status_code) {
|
||||
StringRef stringify_status(BlockAllocator &balloc, unsigned int status_code) {
|
||||
switch (status_code) {
|
||||
case 100:
|
||||
return StringRef::from_lit("100");
|
||||
return "100"_sr;
|
||||
case 101:
|
||||
return StringRef::from_lit("101");
|
||||
return "101"_sr;
|
||||
case 103:
|
||||
return StringRef::from_lit("103");
|
||||
return "103"_sr;
|
||||
case 200:
|
||||
return StringRef::from_lit("200");
|
||||
return "200"_sr;
|
||||
case 201:
|
||||
return StringRef::from_lit("201");
|
||||
return "201"_sr;
|
||||
case 202:
|
||||
return StringRef::from_lit("202");
|
||||
return "202"_sr;
|
||||
case 203:
|
||||
return StringRef::from_lit("203");
|
||||
return "203"_sr;
|
||||
case 204:
|
||||
return StringRef::from_lit("204");
|
||||
return "204"_sr;
|
||||
case 205:
|
||||
return StringRef::from_lit("205");
|
||||
return "205"_sr;
|
||||
case 206:
|
||||
return StringRef::from_lit("206");
|
||||
return "206"_sr;
|
||||
case 300:
|
||||
return StringRef::from_lit("300");
|
||||
return "300"_sr;
|
||||
case 301:
|
||||
return StringRef::from_lit("301");
|
||||
return "301"_sr;
|
||||
case 302:
|
||||
return StringRef::from_lit("302");
|
||||
return "302"_sr;
|
||||
case 303:
|
||||
return StringRef::from_lit("303");
|
||||
return "303"_sr;
|
||||
case 304:
|
||||
return StringRef::from_lit("304");
|
||||
return "304"_sr;
|
||||
case 305:
|
||||
return StringRef::from_lit("305");
|
||||
// case 306: return StringRef::from_lit("306");
|
||||
return "305"_sr;
|
||||
// case 306: return "306"_sr;
|
||||
case 307:
|
||||
return StringRef::from_lit("307");
|
||||
return "307"_sr;
|
||||
case 308:
|
||||
return StringRef::from_lit("308");
|
||||
return "308"_sr;
|
||||
case 400:
|
||||
return StringRef::from_lit("400");
|
||||
return "400"_sr;
|
||||
case 401:
|
||||
return StringRef::from_lit("401");
|
||||
return "401"_sr;
|
||||
case 402:
|
||||
return StringRef::from_lit("402");
|
||||
return "402"_sr;
|
||||
case 403:
|
||||
return StringRef::from_lit("403");
|
||||
return "403"_sr;
|
||||
case 404:
|
||||
return StringRef::from_lit("404");
|
||||
return "404"_sr;
|
||||
case 405:
|
||||
return StringRef::from_lit("405");
|
||||
return "405"_sr;
|
||||
case 406:
|
||||
return StringRef::from_lit("406");
|
||||
return "406"_sr;
|
||||
case 407:
|
||||
return StringRef::from_lit("407");
|
||||
return "407"_sr;
|
||||
case 408:
|
||||
return StringRef::from_lit("408");
|
||||
return "408"_sr;
|
||||
case 409:
|
||||
return StringRef::from_lit("409");
|
||||
return "409"_sr;
|
||||
case 410:
|
||||
return StringRef::from_lit("410");
|
||||
return "410"_sr;
|
||||
case 411:
|
||||
return StringRef::from_lit("411");
|
||||
return "411"_sr;
|
||||
case 412:
|
||||
return StringRef::from_lit("412");
|
||||
return "412"_sr;
|
||||
case 413:
|
||||
return StringRef::from_lit("413");
|
||||
return "413"_sr;
|
||||
case 414:
|
||||
return StringRef::from_lit("414");
|
||||
return "414"_sr;
|
||||
case 415:
|
||||
return StringRef::from_lit("415");
|
||||
return "415"_sr;
|
||||
case 416:
|
||||
return StringRef::from_lit("416");
|
||||
return "416"_sr;
|
||||
case 417:
|
||||
return StringRef::from_lit("417");
|
||||
return "417"_sr;
|
||||
case 421:
|
||||
return StringRef::from_lit("421");
|
||||
return "421"_sr;
|
||||
case 426:
|
||||
return StringRef::from_lit("426");
|
||||
return "426"_sr;
|
||||
case 428:
|
||||
return StringRef::from_lit("428");
|
||||
return "428"_sr;
|
||||
case 429:
|
||||
return StringRef::from_lit("429");
|
||||
return "429"_sr;
|
||||
case 431:
|
||||
return StringRef::from_lit("431");
|
||||
return "431"_sr;
|
||||
case 451:
|
||||
return StringRef::from_lit("451");
|
||||
return "451"_sr;
|
||||
case 500:
|
||||
return StringRef::from_lit("500");
|
||||
return "500"_sr;
|
||||
case 501:
|
||||
return StringRef::from_lit("501");
|
||||
return "501"_sr;
|
||||
case 502:
|
||||
return StringRef::from_lit("502");
|
||||
return "502"_sr;
|
||||
case 503:
|
||||
return StringRef::from_lit("503");
|
||||
return "503"_sr;
|
||||
case 504:
|
||||
return StringRef::from_lit("504");
|
||||
return "504"_sr;
|
||||
case 505:
|
||||
return StringRef::from_lit("505");
|
||||
return "505"_sr;
|
||||
case 511:
|
||||
return StringRef::from_lit("511");
|
||||
return "511"_sr;
|
||||
default:
|
||||
return util::make_string_ref_uint(balloc, status_code);
|
||||
}
|
||||
@@ -1621,7 +1621,7 @@ StringRef get_pure_path_component(const StringRef &uri) {
|
||||
return StringRef{uri.data() + f.off, f.len};
|
||||
}
|
||||
|
||||
return StringRef::from_lit("/");
|
||||
return "/"_sr;
|
||||
}
|
||||
|
||||
int construct_push_component(BlockAllocator &balloc, StringRef &scheme,
|
||||
@@ -1679,7 +1679,7 @@ int construct_push_component(BlockAllocator &balloc, StringRef &scheme,
|
||||
auto &f = u.field_data[UF_PATH];
|
||||
rel = StringRef{uri.data() + f.off, f.len};
|
||||
} else {
|
||||
rel = StringRef::from_lit("/");
|
||||
rel = "/"_sr;
|
||||
}
|
||||
|
||||
if (u.field_set & (1 << UF_QUERY)) {
|
||||
@@ -1946,7 +1946,7 @@ StringRef copy_lower(BlockAllocator &balloc, const StringRef &src) {
|
||||
}
|
||||
|
||||
bool contains_trailers(const StringRef &s) {
|
||||
constexpr auto trailers = StringRef::from_lit("trailers");
|
||||
constexpr auto trailers = "trailers"_sr;
|
||||
|
||||
for (auto p = std::begin(s), end = std::end(s);; ++p) {
|
||||
p = std::find_if(p, end, [](char c) { return c != ' ' && c != '\t'; });
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2282,7 +2282,8 @@ int communicate(
|
||||
goto fin;
|
||||
}
|
||||
|
||||
if (SSL_CTX_set_cipher_list(ssl_ctx, tls::DEFAULT_CIPHER_LIST) == 0) {
|
||||
if (SSL_CTX_set_cipher_list(ssl_ctx, tls::DEFAULT_CIPHER_LIST.data()) ==
|
||||
0) {
|
||||
std::cerr << "[ERROR] " << ERR_error_string(ERR_get_error(), nullptr)
|
||||
<< std::endl;
|
||||
result = -1;
|
||||
|
||||
214
src/shrpx.cc
214
src/shrpx.cc
@@ -113,19 +113,19 @@ namespace shrpx {
|
||||
|
||||
// Deprecated: Environment variables to tell new binary the listening
|
||||
// socket's file descriptors. They are not close-on-exec.
|
||||
constexpr auto ENV_LISTENER4_FD = StringRef::from_lit("NGHTTPX_LISTENER4_FD");
|
||||
constexpr auto ENV_LISTENER6_FD = StringRef::from_lit("NGHTTPX_LISTENER6_FD");
|
||||
constexpr auto ENV_LISTENER4_FD = "NGHTTPX_LISTENER4_FD"_sr;
|
||||
constexpr auto ENV_LISTENER6_FD = "NGHTTPX_LISTENER6_FD"_sr;
|
||||
|
||||
// Deprecated: Environment variable to tell new binary the port number
|
||||
// the current binary is listening to.
|
||||
constexpr auto ENV_PORT = StringRef::from_lit("NGHTTPX_PORT");
|
||||
constexpr auto ENV_PORT = "NGHTTPX_PORT"_sr;
|
||||
|
||||
// Deprecated: Environment variable to tell new binary the listening
|
||||
// socket's file descriptor if frontend listens UNIX domain socket.
|
||||
constexpr auto ENV_UNIX_FD = StringRef::from_lit("NGHTTP2_UNIX_FD");
|
||||
constexpr auto ENV_UNIX_FD = "NGHTTP2_UNIX_FD"_sr;
|
||||
// Deprecated: Environment variable to tell new binary the UNIX domain
|
||||
// socket path.
|
||||
constexpr auto ENV_UNIX_PATH = StringRef::from_lit("NGHTTP2_UNIX_PATH");
|
||||
constexpr auto ENV_UNIX_PATH = "NGHTTP2_UNIX_PATH"_sr;
|
||||
|
||||
// Prefix of environment variables to tell new binary the listening
|
||||
// socket's file descriptor. They are not close-on-exec. For TCP
|
||||
@@ -133,13 +133,13 @@ constexpr auto ENV_UNIX_PATH = StringRef::from_lit("NGHTTP2_UNIX_PATH");
|
||||
// <FD> is file descriptor. For UNIX domain socket, the value must be
|
||||
// comma separated 3 parameters: unix,<FD>,<PATH>. <FD> is file
|
||||
// descriptor. <PATH> is a path to UNIX domain socket.
|
||||
constexpr auto ENV_ACCEPT_PREFIX = StringRef::from_lit("NGHTTPX_ACCEPT_");
|
||||
constexpr auto ENV_ACCEPT_PREFIX = "NGHTTPX_ACCEPT_"_sr;
|
||||
|
||||
// This environment variable contains PID of the original main
|
||||
// process, assuming that it created this main process as a result of
|
||||
// SIGUSR2. The new main process is expected to send QUIT signal to
|
||||
// the original main process to shut it down gracefully.
|
||||
constexpr auto ENV_ORIG_PID = StringRef::from_lit("NGHTTPX_ORIG_PID");
|
||||
constexpr auto ENV_ORIG_PID = "NGHTTPX_ORIG_PID"_sr;
|
||||
|
||||
// Prefix of environment variables to tell new binary the QUIC IPC
|
||||
// file descriptor and Worker ID of the lingering worker process. The
|
||||
@@ -150,7 +150,7 @@ constexpr auto ENV_ORIG_PID = StringRef::from_lit("NGHTTPX_ORIG_PID");
|
||||
// <FD> is the file descriptor. <WORKER_ID_I> is the I-th Worker ID
|
||||
// in hex encoded string.
|
||||
constexpr auto ENV_QUIC_WORKER_PROCESS_PREFIX =
|
||||
StringRef::from_lit("NGHTTPX_QUIC_WORKER_PROCESS_");
|
||||
"NGHTTPX_QUIC_WORKER_PROCESS_"_sr;
|
||||
|
||||
#ifndef _KERNEL_FASTOPEN
|
||||
# define _KERNEL_FASTOPEN
|
||||
@@ -399,7 +399,7 @@ int save_pid() {
|
||||
std::array<char, STRERROR_BUFSIZE> errbuf;
|
||||
auto config = get_config();
|
||||
|
||||
constexpr auto SUFFIX = StringRef::from_lit(".XXXXXX");
|
||||
constexpr auto SUFFIX = ".XXXXXX"_sr;
|
||||
auto &pid_file = config->pid_file;
|
||||
|
||||
auto len = config->pid_file.size() + SUFFIX.size();
|
||||
@@ -741,7 +741,7 @@ int create_unix_domain_server_socket(UpstreamAddr &faddr,
|
||||
<< (faddr.tls ? ", tls" : "");
|
||||
(*found).used = true;
|
||||
faddr.fd = (*found).fd;
|
||||
faddr.hostport = StringRef::from_lit("localhost");
|
||||
faddr.hostport = "localhost"_sr;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -810,7 +810,7 @@ int create_unix_domain_server_socket(UpstreamAddr &faddr,
|
||||
<< (faddr.tls ? ", tls" : "");
|
||||
|
||||
faddr.fd = fd;
|
||||
faddr.hostport = StringRef::from_lit("localhost");
|
||||
faddr.hostport = "localhost"_sr;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -834,8 +834,7 @@ int create_tcp_server_socket(UpstreamAddr &faddr,
|
||||
hints.ai_flags |= AI_ADDRCONFIG;
|
||||
#endif // AI_ADDRCONFIG
|
||||
|
||||
auto node =
|
||||
faddr.host == StringRef::from_lit("*") ? nullptr : faddr.host.data();
|
||||
auto node = faddr.host == "*"_sr ? nullptr : faddr.host.data();
|
||||
|
||||
addrinfo *res, *rp;
|
||||
rv = getaddrinfo(node, service.c_str(), &hints, &res);
|
||||
@@ -1104,7 +1103,7 @@ std::vector<InheritedAddr> get_inherited_addr_from_env(Config *config) {
|
||||
auto type = StringRef(env, end_type);
|
||||
auto value = end_type + 1;
|
||||
|
||||
if (type == StringRef::from_lit("unix")) {
|
||||
if (type == "unix"_sr) {
|
||||
auto endfd = strchr(value, ',');
|
||||
if (!endfd) {
|
||||
continue;
|
||||
@@ -1135,7 +1134,7 @@ std::vector<InheritedAddr> get_inherited_addr_from_env(Config *config) {
|
||||
iaddrs.push_back(std::move(addr));
|
||||
}
|
||||
|
||||
if (type == StringRef::from_lit("tcp")) {
|
||||
if (type == "tcp"_sr) {
|
||||
auto fd = util::parse_uint(value);
|
||||
if (!fd) {
|
||||
LOG(WARN) << "Could not parse file descriptor from " << value;
|
||||
@@ -1926,30 +1925,29 @@ bool conf_exists(const char *path) {
|
||||
} // namespace
|
||||
|
||||
namespace {
|
||||
constexpr auto DEFAULT_ALPN_LIST =
|
||||
StringRef::from_lit("h2,h2-16,h2-14,http/1.1");
|
||||
constexpr auto DEFAULT_ALPN_LIST = "h2,h2-16,h2-14,http/1.1"_sr;
|
||||
} // namespace
|
||||
|
||||
namespace {
|
||||
constexpr auto DEFAULT_TLS_MIN_PROTO_VERSION = StringRef::from_lit("TLSv1.2");
|
||||
constexpr auto DEFAULT_TLS_MIN_PROTO_VERSION = "TLSv1.2"_sr;
|
||||
#ifdef TLS1_3_VERSION
|
||||
constexpr auto DEFAULT_TLS_MAX_PROTO_VERSION = StringRef::from_lit("TLSv1.3");
|
||||
constexpr auto DEFAULT_TLS_MAX_PROTO_VERSION = "TLSv1.3"_sr;
|
||||
#else // !TLS1_3_VERSION
|
||||
constexpr auto DEFAULT_TLS_MAX_PROTO_VERSION = StringRef::from_lit("TLSv1.2");
|
||||
constexpr auto DEFAULT_TLS_MAX_PROTO_VERSION = "TLSv1.2"_sr;
|
||||
#endif // !TLS1_3_VERSION
|
||||
} // namespace
|
||||
|
||||
namespace {
|
||||
constexpr auto DEFAULT_ACCESSLOG_FORMAT =
|
||||
StringRef::from_lit(R"($remote_addr - - [$time_local] )"
|
||||
R"("$request" $status $body_bytes_sent )"
|
||||
R"("$http_referer" "$http_user_agent")");
|
||||
R"($remote_addr - - [$time_local] )"
|
||||
R"("$request" $status $body_bytes_sent )"
|
||||
R"("$http_referer" "$http_user_agent")"_sr;
|
||||
} // namespace
|
||||
|
||||
namespace {
|
||||
void fill_default_config(Config *config) {
|
||||
config->num_worker = 1;
|
||||
config->conf_path = StringRef::from_lit("/etc/nghttpx/nghttpx.conf");
|
||||
config->conf_path = "/etc/nghttpx/nghttpx.conf"_sr;
|
||||
config->pid = getpid();
|
||||
|
||||
#ifdef NOTHREADS
|
||||
@@ -1984,8 +1982,7 @@ void fill_default_config(Config *config) {
|
||||
auto &ocspconf = tlsconf.ocsp;
|
||||
// ocsp update interval = 14400 secs = 4 hours, borrowed from h2o
|
||||
ocspconf.update_interval = 4_h;
|
||||
ocspconf.fetch_ocsp_response_file =
|
||||
StringRef::from_lit(PKGDATADIR "/fetch-ocsp-response");
|
||||
ocspconf.fetch_ocsp_response_file = PKGDATADIR "/fetch-ocsp-response"_sr;
|
||||
}
|
||||
|
||||
{
|
||||
@@ -1995,28 +1992,26 @@ void fill_default_config(Config *config) {
|
||||
}
|
||||
|
||||
tlsconf.session_timeout = std::chrono::hours(12);
|
||||
tlsconf.ciphers = StringRef::from_lit(nghttp2::tls::DEFAULT_CIPHER_LIST);
|
||||
tlsconf.tls13_ciphers =
|
||||
StringRef::from_lit(nghttp2::tls::DEFAULT_TLS13_CIPHER_LIST);
|
||||
tlsconf.client.ciphers =
|
||||
StringRef::from_lit(nghttp2::tls::DEFAULT_CIPHER_LIST);
|
||||
tlsconf.ciphers = StringRef{nghttp2::tls::DEFAULT_CIPHER_LIST};
|
||||
tlsconf.tls13_ciphers = StringRef{nghttp2::tls::DEFAULT_TLS13_CIPHER_LIST};
|
||||
tlsconf.client.ciphers = StringRef{nghttp2::tls::DEFAULT_CIPHER_LIST};
|
||||
tlsconf.client.tls13_ciphers =
|
||||
StringRef::from_lit(nghttp2::tls::DEFAULT_TLS13_CIPHER_LIST);
|
||||
StringRef{nghttp2::tls::DEFAULT_TLS13_CIPHER_LIST};
|
||||
tlsconf.min_proto_version =
|
||||
tls::proto_version_from_string(DEFAULT_TLS_MIN_PROTO_VERSION);
|
||||
tlsconf.max_proto_version =
|
||||
tls::proto_version_from_string(DEFAULT_TLS_MAX_PROTO_VERSION);
|
||||
tlsconf.max_early_data = 16_k;
|
||||
tlsconf.ecdh_curves = StringRef::from_lit("X25519:P-256:P-384:P-521");
|
||||
tlsconf.ecdh_curves = "X25519:P-256:P-384:P-521"_sr;
|
||||
|
||||
auto &httpconf = config->http;
|
||||
httpconf.server_name = StringRef::from_lit("nghttpx");
|
||||
httpconf.server_name = "nghttpx"_sr;
|
||||
httpconf.no_host_rewrite = true;
|
||||
httpconf.request_header_field_buffer = 64_k;
|
||||
httpconf.max_request_header_fields = 100;
|
||||
httpconf.response_header_field_buffer = 64_k;
|
||||
httpconf.max_response_header_fields = 500;
|
||||
httpconf.redirect_https_port = StringRef::from_lit("443");
|
||||
httpconf.redirect_https_port = "443"_sr;
|
||||
httpconf.max_requests = std::numeric_limits<size_t>::max();
|
||||
httpconf.xfp.add = true;
|
||||
httpconf.xfp.strip_incoming = true;
|
||||
@@ -2096,7 +2091,7 @@ void fill_default_config(Config *config) {
|
||||
}
|
||||
|
||||
auto &bpfconf = quicconf.bpf;
|
||||
bpfconf.prog_file = StringRef::from_lit(PKGLIBDIR "/reuseport_kern.o");
|
||||
bpfconf.prog_file = PKGLIBDIR "/reuseport_kern.o"_sr;
|
||||
|
||||
upstreamconf.congestion_controller = NGTCP2_CC_ALGO_CUBIC;
|
||||
|
||||
@@ -2129,7 +2124,7 @@ void fill_default_config(Config *config) {
|
||||
parse_log_format(config->balloc, DEFAULT_ACCESSLOG_FORMAT);
|
||||
|
||||
auto &errorconf = loggingconf.error;
|
||||
errorconf.file = StringRef::from_lit("/dev/stderr");
|
||||
errorconf.file = "/dev/stderr"_sr;
|
||||
}
|
||||
|
||||
loggingconf.syslog_facility = LOG_DAEMON;
|
||||
@@ -3798,7 +3793,7 @@ int process_options(Config *config,
|
||||
|
||||
if (listenerconf.addrs.empty()) {
|
||||
UpstreamAddr addr{};
|
||||
addr.host = StringRef::from_lit("*");
|
||||
addr.host = "*"_sr;
|
||||
addr.port = 3000;
|
||||
addr.tls = true;
|
||||
addr.family = AF_INET;
|
||||
@@ -4410,7 +4405,7 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
switch (c) {
|
||||
case 'D':
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_DAEMON, StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_DAEMON, "yes"_sr);
|
||||
break;
|
||||
case 'L':
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_LOG_LEVEL, StringRef{optarg});
|
||||
@@ -4429,20 +4424,19 @@ int main(int argc, char **argv) {
|
||||
print_help(std::cout);
|
||||
exit(EXIT_SUCCESS);
|
||||
case 'k':
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_INSECURE, StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_INSECURE, "yes"_sr);
|
||||
break;
|
||||
case 'n':
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_WORKERS, StringRef{optarg});
|
||||
break;
|
||||
case 'o':
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_FRONTEND_FRAME_DEBUG,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_FRONTEND_FRAME_DEBUG, "yes"_sr);
|
||||
break;
|
||||
case 'p':
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_CLIENT_PROXY, StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_CLIENT_PROXY, "yes"_sr);
|
||||
break;
|
||||
case 's':
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_HTTP2_PROXY, StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_HTTP2_PROXY, "yes"_sr);
|
||||
break;
|
||||
case 'v':
|
||||
print_version(std::cout);
|
||||
@@ -4454,8 +4448,7 @@ int main(int argc, char **argv) {
|
||||
switch (flag) {
|
||||
case 1:
|
||||
// --add-x-forwarded-for
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_ADD_X_FORWARDED_FOR,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_ADD_X_FORWARDED_FOR, "yes"_sr);
|
||||
break;
|
||||
case 2:
|
||||
// --frontend-http2-read-timeout
|
||||
@@ -4519,7 +4512,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 17:
|
||||
// --client
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_CLIENT, StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_CLIENT, "yes"_sr);
|
||||
break;
|
||||
case 18:
|
||||
// --backend-http2-window-bits
|
||||
@@ -4532,13 +4525,11 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 20:
|
||||
// --backend-ipv4
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_BACKEND_IPV4,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_BACKEND_IPV4, "yes"_sr);
|
||||
break;
|
||||
case 21:
|
||||
// --backend-ipv6
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_BACKEND_IPV6,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_BACKEND_IPV6, "yes"_sr);
|
||||
break;
|
||||
case 22:
|
||||
// --private-key-passwd-file
|
||||
@@ -4547,7 +4538,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 23:
|
||||
// --no-via
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_VIA, StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_VIA, "yes"_sr);
|
||||
break;
|
||||
case 24:
|
||||
// --subcert
|
||||
@@ -4555,8 +4546,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 25:
|
||||
// --http2-bridge
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_HTTP2_BRIDGE,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_HTTP2_BRIDGE, "yes"_sr);
|
||||
break;
|
||||
case 26:
|
||||
// --backend-http-proxy-uri
|
||||
@@ -4565,23 +4555,19 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 27:
|
||||
// --backend-no-tls
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_BACKEND_NO_TLS,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_BACKEND_NO_TLS, "yes"_sr);
|
||||
break;
|
||||
case 28:
|
||||
// --ocsp-startup
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_OCSP_STARTUP,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_OCSP_STARTUP, "yes"_sr);
|
||||
break;
|
||||
case 29:
|
||||
// --frontend-no-tls
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_FRONTEND_NO_TLS,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_FRONTEND_NO_TLS, "yes"_sr);
|
||||
break;
|
||||
case 30:
|
||||
// --no-verify-ocsp
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_VERIFY_OCSP,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_VERIFY_OCSP, "yes"_sr);
|
||||
break;
|
||||
case 31:
|
||||
// --backend-tls-sni-field
|
||||
@@ -4614,8 +4600,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 39:
|
||||
// --verify-client
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_VERIFY_CLIENT,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_VERIFY_CLIENT, "yes"_sr);
|
||||
break;
|
||||
case 40:
|
||||
// --verify-client-cacert
|
||||
@@ -4642,8 +4627,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 45:
|
||||
// --http2-no-cookie-crumbling
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_HTTP2_NO_COOKIE_CRUMBLING,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_HTTP2_NO_COOKIE_CRUMBLING, "yes"_sr);
|
||||
break;
|
||||
case 46:
|
||||
// --frontend-http2-connection-window-bits
|
||||
@@ -4694,8 +4678,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 57:
|
||||
// --accesslog-syslog
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_ACCESSLOG_SYSLOG,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_ACCESSLOG_SYSLOG, "yes"_sr);
|
||||
break;
|
||||
case 58:
|
||||
// --errorlog-file
|
||||
@@ -4703,8 +4686,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 59:
|
||||
// --errorlog-syslog
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_ERRORLOG_SYSLOG,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_ERRORLOG_SYSLOG, "yes"_sr);
|
||||
break;
|
||||
case 60:
|
||||
// --stream-read-timeout
|
||||
@@ -4716,8 +4698,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 62:
|
||||
// --no-location-rewrite
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_LOCATION_REWRITE,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_LOCATION_REWRITE, "yes"_sr);
|
||||
break;
|
||||
case 63:
|
||||
// --backend-http1-connections-per-host
|
||||
@@ -4732,7 +4713,7 @@ int main(int argc, char **argv) {
|
||||
case 65:
|
||||
// --strip-incoming-x-forwarded-for
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_STRIP_INCOMING_X_FORWARDED_FOR,
|
||||
StringRef::from_lit("yes"));
|
||||
"yes"_sr);
|
||||
break;
|
||||
case 66:
|
||||
// --accesslog-format
|
||||
@@ -4763,13 +4744,11 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 73:
|
||||
// --no-host-rewrite
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_HOST_REWRITE,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_HOST_REWRITE, "yes"_sr);
|
||||
break;
|
||||
case 74:
|
||||
// --no-server-push
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_SERVER_PUSH,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_SERVER_PUSH, "yes"_sr);
|
||||
break;
|
||||
case 76:
|
||||
// --backend-http2-connections-per-worker
|
||||
@@ -4787,7 +4766,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 79:
|
||||
// --no-ocsp
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_OCSP, StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_OCSP, "yes"_sr);
|
||||
break;
|
||||
case 80:
|
||||
// --header-field-buffer
|
||||
@@ -4812,8 +4791,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 85:
|
||||
// --host-rewrite
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_HOST_REWRITE,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_HOST_REWRITE, "yes"_sr);
|
||||
break;
|
||||
case 86:
|
||||
// --tls-session-cache-memcached
|
||||
@@ -4846,8 +4824,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 93:
|
||||
// --accept-proxy-protocol
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_ACCEPT_PROXY_PROTOCOL,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_ACCEPT_PROXY_PROTOCOL, "yes"_sr);
|
||||
break;
|
||||
case 94:
|
||||
// --fastopen
|
||||
@@ -4869,8 +4846,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 98:
|
||||
// --strip-incoming-forwarded
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_STRIP_INCOMING_FORWARDED,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_STRIP_INCOMING_FORWARDED, "yes"_sr);
|
||||
break;
|
||||
case 99:
|
||||
// --forwarded-by
|
||||
@@ -4892,8 +4868,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 103:
|
||||
// --no-http2-cipher-black-list
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_HTTP2_CIPHER_BLACK_LIST,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_HTTP2_CIPHER_BLACK_LIST, "yes"_sr);
|
||||
break;
|
||||
case 104:
|
||||
// --request-header-field-buffer
|
||||
@@ -4907,13 +4882,12 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 106:
|
||||
// --backend-http1-tls
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_BACKEND_HTTP1_TLS,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_BACKEND_HTTP1_TLS, "yes"_sr);
|
||||
break;
|
||||
case 108:
|
||||
// --tls-session-cache-memcached-tls
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_TLS_SESSION_CACHE_MEMCACHED_TLS,
|
||||
StringRef::from_lit("yes"));
|
||||
"yes"_sr);
|
||||
break;
|
||||
case 109:
|
||||
// --tls-session-cache-memcached-cert-file
|
||||
@@ -4928,8 +4902,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 111:
|
||||
// --tls-ticket-key-memcached-tls
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_TLS_TICKET_KEY_MEMCACHED_TLS,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_TLS_TICKET_KEY_MEMCACHED_TLS, "yes"_sr);
|
||||
break;
|
||||
case 112:
|
||||
// --tls-ticket-key-memcached-cert-file
|
||||
@@ -4975,7 +4948,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 120:
|
||||
// --backend-tls
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_BACKEND_TLS, StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_BACKEND_TLS, "yes"_sr);
|
||||
break;
|
||||
case 121:
|
||||
// --backend-connections-per-host
|
||||
@@ -4988,7 +4961,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 123:
|
||||
// --no-kqueue
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_KQUEUE, StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_KQUEUE, "yes"_sr);
|
||||
break;
|
||||
case 124:
|
||||
// --frontend-http2-settings-timeout
|
||||
@@ -5014,19 +4987,17 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 129:
|
||||
// --no-server-rewrite
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_SERVER_REWRITE,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_SERVER_REWRITE, "yes"_sr);
|
||||
break;
|
||||
case 130:
|
||||
// --frontend-http2-optimize-write-buffer-size
|
||||
cmdcfgs.emplace_back(
|
||||
SHRPX_OPT_FRONTEND_HTTP2_OPTIMIZE_WRITE_BUFFER_SIZE,
|
||||
StringRef::from_lit("yes"));
|
||||
SHRPX_OPT_FRONTEND_HTTP2_OPTIMIZE_WRITE_BUFFER_SIZE, "yes"_sr);
|
||||
break;
|
||||
case 131:
|
||||
// --frontend-http2-optimize-window-size
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_FRONTEND_HTTP2_OPTIMIZE_WINDOW_SIZE,
|
||||
StringRef::from_lit("yes"));
|
||||
"yes"_sr);
|
||||
break;
|
||||
case 132:
|
||||
// --frontend-http2-window-size
|
||||
@@ -5111,7 +5082,7 @@ int main(int argc, char **argv) {
|
||||
case 149:
|
||||
// --client-no-http2-cipher-black-list
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_CLIENT_NO_HTTP2_CIPHER_BLACK_LIST,
|
||||
StringRef::from_lit("yes"));
|
||||
"yes"_sr);
|
||||
break;
|
||||
case 150:
|
||||
// --client-ciphers
|
||||
@@ -5119,8 +5090,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 151:
|
||||
// --accesslog-write-early
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_ACCESSLOG_WRITE_EARLY,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_ACCESSLOG_WRITE_EARLY, "yes"_sr);
|
||||
break;
|
||||
case 152:
|
||||
// --tls-min-proto-version
|
||||
@@ -5143,38 +5113,34 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 156:
|
||||
// --single-thread
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_SINGLE_THREAD,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_SINGLE_THREAD, "yes"_sr);
|
||||
break;
|
||||
case 157:
|
||||
// --no-add-x-forwarded-proto
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_ADD_X_FORWARDED_PROTO,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_ADD_X_FORWARDED_PROTO, "yes"_sr);
|
||||
break;
|
||||
case 158:
|
||||
// --no-strip-incoming-x-forwarded-proto
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_STRIP_INCOMING_X_FORWARDED_PROTO,
|
||||
StringRef::from_lit("yes"));
|
||||
"yes"_sr);
|
||||
break;
|
||||
case 159:
|
||||
// --single-process
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_SINGLE_PROCESS,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_SINGLE_PROCESS, "yes"_sr);
|
||||
break;
|
||||
case 160:
|
||||
// --verify-client-tolerate-expired
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_VERIFY_CLIENT_TOLERATE_EXPIRED,
|
||||
StringRef::from_lit("yes"));
|
||||
"yes"_sr);
|
||||
break;
|
||||
case 161:
|
||||
// --ignore-per-pattern-mruby-error
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_IGNORE_PER_PATTERN_MRUBY_ERROR,
|
||||
StringRef::from_lit("yes"));
|
||||
"yes"_sr);
|
||||
break;
|
||||
case 162:
|
||||
// --tls-no-postpone-early-data
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_TLS_NO_POSTPONE_EARLY_DATA,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_TLS_NO_POSTPONE_EARLY_DATA, "yes"_sr);
|
||||
break;
|
||||
case 163:
|
||||
// --tls-max-early-data
|
||||
@@ -5190,18 +5156,16 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 166:
|
||||
// --no-strip-incoming-early-data
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_STRIP_INCOMING_EARLY_DATA,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_STRIP_INCOMING_EARLY_DATA, "yes"_sr);
|
||||
break;
|
||||
case 167:
|
||||
// --no-http2-cipher-block-list
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_HTTP2_CIPHER_BLOCK_LIST,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_HTTP2_CIPHER_BLOCK_LIST, "yes"_sr);
|
||||
break;
|
||||
case 168:
|
||||
// --client-no-http2-cipher-block-list
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_CLIENT_NO_HTTP2_CIPHER_BLOCK_LIST,
|
||||
StringRef::from_lit("yes"));
|
||||
"yes"_sr);
|
||||
break;
|
||||
case 169:
|
||||
// --quic-bpf-program-file
|
||||
@@ -5210,7 +5174,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 170:
|
||||
// --no-quic-bpf
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_QUIC_BPF, StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_NO_QUIC_BPF, "yes"_sr);
|
||||
break;
|
||||
case 171:
|
||||
// --http2-altsvc
|
||||
@@ -5228,8 +5192,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 174:
|
||||
// --frontend-quic-debug-log
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_FRONTEND_QUIC_DEBUG_LOG,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_FRONTEND_QUIC_DEBUG_LOG, "yes"_sr);
|
||||
break;
|
||||
case 175:
|
||||
// --frontend-http3-window-size
|
||||
@@ -5259,8 +5222,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 180:
|
||||
// --frontend-quic-early-data
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_FRONTEND_QUIC_EARLY_DATA,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_FRONTEND_QUIC_EARLY_DATA, "yes"_sr);
|
||||
break;
|
||||
case 181:
|
||||
// --frontend-quic-qlog-dir
|
||||
@@ -5269,8 +5231,7 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 182:
|
||||
// --frontend-quic-require-token
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_FRONTEND_QUIC_REQUIRE_TOKEN,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_FRONTEND_QUIC_REQUIRE_TOKEN, "yes"_sr);
|
||||
break;
|
||||
case 183:
|
||||
// --frontend-quic-congestion-controller
|
||||
@@ -5306,12 +5267,11 @@ int main(int argc, char **argv) {
|
||||
break;
|
||||
case 191:
|
||||
// --require-http-scheme
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_REQUIRE_HTTP_SCHEME,
|
||||
StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_REQUIRE_HTTP_SCHEME, "yes"_sr);
|
||||
break;
|
||||
case 192:
|
||||
// --tls-ktls
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_TLS_KTLS, StringRef::from_lit("yes"));
|
||||
cmdcfgs.emplace_back(SHRPX_OPT_TLS_KTLS, "yes"_sr);
|
||||
break;
|
||||
case 193:
|
||||
// --alpn-list
|
||||
|
||||
@@ -40,14 +40,14 @@ namespace shrpx {
|
||||
|
||||
namespace {
|
||||
const auto backendconfig_endpoint = APIEndpoint{
|
||||
StringRef::from_lit("/api/v1beta1/backendconfig"),
|
||||
"/api/v1beta1/backendconfig"_sr,
|
||||
true,
|
||||
(1 << API_METHOD_POST) | (1 << API_METHOD_PUT),
|
||||
&APIDownstreamConnection::handle_backendconfig,
|
||||
};
|
||||
|
||||
const auto configrevision_endpoint = APIEndpoint{
|
||||
StringRef::from_lit("/api/v1beta1/configrevision"),
|
||||
"/api/v1beta1/configrevision"_sr,
|
||||
true,
|
||||
(1 << API_METHOD_GET),
|
||||
&APIDownstreamConnection::handle_configrevision,
|
||||
@@ -57,9 +57,9 @@ const auto configrevision_endpoint = APIEndpoint{
|
||||
namespace {
|
||||
// The method string. This must be same order of APIMethod.
|
||||
constexpr StringRef API_METHOD_STRING[] = {
|
||||
StringRef::from_lit("GET"),
|
||||
StringRef::from_lit("POST"),
|
||||
StringRef::from_lit("PUT"),
|
||||
"GET"_sr,
|
||||
"POST"_sr,
|
||||
"PUT"_sr,
|
||||
};
|
||||
} // namespace
|
||||
|
||||
@@ -106,18 +106,18 @@ int APIDownstreamConnection::send_reply(unsigned int http_status,
|
||||
|
||||
switch (api_status) {
|
||||
case APIStatusCode::SUCCESS:
|
||||
api_status_str = StringRef::from_lit("Success");
|
||||
api_status_str = "Success"_sr;
|
||||
break;
|
||||
case APIStatusCode::FAILURE:
|
||||
api_status_str = StringRef::from_lit("Failure");
|
||||
api_status_str = "Failure"_sr;
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
|
||||
constexpr auto M1 = StringRef::from_lit("{\"status\":\"");
|
||||
constexpr auto M2 = StringRef::from_lit("\",\"code\":");
|
||||
constexpr auto M3 = StringRef::from_lit("}");
|
||||
constexpr auto M1 = "{\"status\":\""_sr;
|
||||
constexpr auto M2 = "\",\"code\":"_sr;
|
||||
constexpr auto M3 = "}"_sr;
|
||||
|
||||
// 3 is the number of digits in http_status, assuming it is 3 digits
|
||||
// number.
|
||||
@@ -138,15 +138,14 @@ int APIDownstreamConnection::send_reply(unsigned int http_status,
|
||||
|
||||
auto content_length = util::make_string_ref_uint(balloc, buf.size());
|
||||
|
||||
resp.fs.add_header_token(StringRef::from_lit("content-length"),
|
||||
content_length, false, http2::HD_CONTENT_LENGTH);
|
||||
resp.fs.add_header_token("content-length"_sr, content_length, false,
|
||||
http2::HD_CONTENT_LENGTH);
|
||||
|
||||
switch (http_status) {
|
||||
case 400:
|
||||
case 405:
|
||||
case 413:
|
||||
resp.fs.add_header_token(StringRef::from_lit("connection"),
|
||||
StringRef::from_lit("close"), false,
|
||||
resp.fs.add_header_token("connection"_sr, "close"_sr, false,
|
||||
http2::HD_CONNECTION);
|
||||
break;
|
||||
}
|
||||
@@ -289,8 +288,8 @@ int APIDownstreamConnection::error_method_not_allowed() {
|
||||
p -= 2;
|
||||
*p = '\0';
|
||||
|
||||
resp.fs.add_header_token(StringRef::from_lit("allow"),
|
||||
StringRef{std::span{std::begin(iov), p}}, false, -1);
|
||||
resp.fs.add_header_token("allow"_sr, StringRef{std::span{std::begin(iov), p}},
|
||||
false, -1);
|
||||
return send_reply(405, APIStatusCode::FAILURE);
|
||||
}
|
||||
|
||||
@@ -436,9 +435,8 @@ int APIDownstreamConnection::handle_configrevision() {
|
||||
// "configRevision": N
|
||||
// }
|
||||
auto data = concat_string_ref(
|
||||
balloc, StringRef::from_lit(R"(,"data":{"configRevision":)"),
|
||||
util::make_string_ref_uint(balloc, config->config_revision),
|
||||
StringRef::from_lit("}"));
|
||||
balloc, R"(,"data":{"configRevision":)"_sr,
|
||||
util::make_string_ref_uint(balloc, config->config_revision), "}"_sr);
|
||||
|
||||
send_reply(200, APIStatusCode::SUCCESS, data);
|
||||
|
||||
|
||||
@@ -535,7 +535,7 @@ void ClientHandler::setup_upstream_io_callback() {
|
||||
// upgraded to HTTP/2 through HTTP Upgrade or direct HTTP/2
|
||||
// connection.
|
||||
upstream_ = std::make_unique<HttpsUpstream>(this);
|
||||
alpn_ = StringRef::from_lit("http/1.1");
|
||||
alpn_ = "http/1.1"_sr;
|
||||
read_ = &ClientHandler::read_clear;
|
||||
write_ = &ClientHandler::write_clear;
|
||||
on_read_ = &ClientHandler::upstream_http1_connhd_read;
|
||||
@@ -629,7 +629,7 @@ int ClientHandler::validate_next_proto() {
|
||||
CLOG(INFO, this) << "No protocol negotiated. Fallback to HTTP/1.1";
|
||||
}
|
||||
|
||||
proto = StringRef::from_lit("http/1.1");
|
||||
proto = "http/1.1"_sr;
|
||||
}
|
||||
|
||||
if (!tls::in_proto_list(get_config()->tls.alpn_list, proto)) {
|
||||
@@ -657,9 +657,9 @@ int ClientHandler::validate_next_proto() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (proto == StringRef::from_lit("http/1.1")) {
|
||||
if (proto == "http/1.1"_sr) {
|
||||
upstream_ = std::make_unique<HttpsUpstream>(this);
|
||||
alpn_ = StringRef::from_lit("http/1.1");
|
||||
alpn_ = "http/1.1"_sr;
|
||||
|
||||
// At this point, input buffer is already filled with some bytes.
|
||||
// The read callback is not called until new data come. So consume
|
||||
@@ -1146,7 +1146,7 @@ SSL *ClientHandler::get_ssl() const { return conn_.tls.ssl; }
|
||||
|
||||
void ClientHandler::direct_http2_upgrade() {
|
||||
upstream_ = std::make_unique<Http2Upstream>(this);
|
||||
alpn_ = StringRef::from_lit(NGHTTP2_CLEARTEXT_PROTO_VERSION_ID);
|
||||
alpn_ = NGHTTP2_CLEARTEXT_PROTO_VERSION_ID ""_sr;
|
||||
on_read_ = &ClientHandler::upstream_read;
|
||||
write_ = &ClientHandler::write_clear;
|
||||
}
|
||||
@@ -1171,17 +1171,16 @@ int ClientHandler::perform_http2_upgrade(HttpsUpstream *http) {
|
||||
upstream_.release();
|
||||
// TODO We might get other version id in HTTP2-settings, if we
|
||||
// support aliasing for h2, but we just use library default for now.
|
||||
alpn_ = StringRef::from_lit(NGHTTP2_CLEARTEXT_PROTO_VERSION_ID);
|
||||
alpn_ = NGHTTP2_CLEARTEXT_PROTO_VERSION_ID ""_sr;
|
||||
on_read_ = &ClientHandler::upstream_http2_connhd_read;
|
||||
write_ = &ClientHandler::write_clear;
|
||||
|
||||
input->remove(*output, input->rleft());
|
||||
|
||||
constexpr auto res =
|
||||
StringRef::from_lit("HTTP/1.1 101 Switching Protocols\r\n"
|
||||
"Connection: Upgrade\r\n"
|
||||
"Upgrade: " NGHTTP2_CLEARTEXT_PROTO_VERSION_ID "\r\n"
|
||||
"\r\n");
|
||||
constexpr auto res = "HTTP/1.1 101 Switching Protocols\r\n"
|
||||
"Connection: Upgrade\r\n"
|
||||
"Upgrade: " NGHTTP2_CLEARTEXT_PROTO_VERSION_ID "\r\n"
|
||||
"\r\n"_sr;
|
||||
|
||||
output->append(res);
|
||||
upstream_ = std::move(upstream);
|
||||
@@ -1194,9 +1193,9 @@ bool ClientHandler::get_http2_upgrade_allowed() const { return !conn_.tls.ssl; }
|
||||
|
||||
StringRef ClientHandler::get_upstream_scheme() const {
|
||||
if (conn_.tls.ssl) {
|
||||
return StringRef::from_lit("https");
|
||||
return "https"_sr;
|
||||
} else {
|
||||
return StringRef::from_lit("http");
|
||||
return "http"_sr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1340,7 +1339,7 @@ int ClientHandler::proxy_protocol_read() {
|
||||
|
||||
--end;
|
||||
|
||||
constexpr auto HEADER = StringRef::from_lit("PROXY ");
|
||||
constexpr auto HEADER = "PROXY "_sr;
|
||||
|
||||
if (static_cast<size_t>(end - rb_.pos()) < HEADER.size()) {
|
||||
if (LOG_ENABLED(INFO)) {
|
||||
|
||||
@@ -76,7 +76,7 @@ namespace {
|
||||
Config *config;
|
||||
} // namespace
|
||||
|
||||
constexpr auto SHRPX_UNIX_PATH_PREFIX = StringRef::from_lit("unix:");
|
||||
constexpr auto SHRPX_UNIX_PATH_PREFIX = "unix:"_sr;
|
||||
|
||||
const Config *get_config() { return config; }
|
||||
|
||||
@@ -1103,13 +1103,13 @@ int parse_downstream_params(DownstreamParams &out,
|
||||
out.mruby = valstr;
|
||||
} else if (util::istarts_with_l(param, "read-timeout=")) {
|
||||
if (parse_downstream_param_duration(
|
||||
out.read_timeout, StringRef::from_lit("read-timeout"),
|
||||
out.read_timeout, "read-timeout"_sr,
|
||||
StringRef{first + str_size("read-timeout="), end}) == -1) {
|
||||
return -1;
|
||||
}
|
||||
} else if (util::istarts_with_l(param, "write-timeout=")) {
|
||||
if (parse_downstream_param_duration(
|
||||
out.write_timeout, StringRef::from_lit("write-timeout"),
|
||||
out.write_timeout, "write-timeout"_sr,
|
||||
StringRef{first + str_size("write-timeout="), end}) == -1) {
|
||||
return -1;
|
||||
}
|
||||
@@ -1444,7 +1444,7 @@ int parse_error_page(std::vector<ErrorPage> &error_pages, const StringRef &opt,
|
||||
auto codestr = StringRef{std::begin(optarg), eq};
|
||||
unsigned int code;
|
||||
|
||||
if (codestr == StringRef::from_lit("*")) {
|
||||
if (codestr == "*"_sr) {
|
||||
code = 0;
|
||||
} else {
|
||||
auto n = util::parse_uint(codestr);
|
||||
@@ -3738,7 +3738,7 @@ int parse_config(Config *config, int optid, const StringRef &opt,
|
||||
if (optarg[0] == '_') {
|
||||
fwdconf.by_obfuscated = make_string_ref(config->balloc, optarg);
|
||||
} else {
|
||||
fwdconf.by_obfuscated = StringRef::from_lit("");
|
||||
fwdconf.by_obfuscated = ""_sr;
|
||||
}
|
||||
break;
|
||||
case SHRPX_OPTID_FORWARDED_FOR:
|
||||
@@ -4262,49 +4262,49 @@ int load_config(Config *config, const char *filename,
|
||||
StringRef str_syslog_facility(int facility) {
|
||||
switch (facility) {
|
||||
case (LOG_AUTH):
|
||||
return StringRef::from_lit("auth");
|
||||
return "auth"_sr;
|
||||
#ifdef LOG_AUTHPRIV
|
||||
case (LOG_AUTHPRIV):
|
||||
return StringRef::from_lit("authpriv");
|
||||
return "authpriv"_sr;
|
||||
#endif // LOG_AUTHPRIV
|
||||
case (LOG_CRON):
|
||||
return StringRef::from_lit("cron");
|
||||
return "cron"_sr;
|
||||
case (LOG_DAEMON):
|
||||
return StringRef::from_lit("daemon");
|
||||
return "daemon"_sr;
|
||||
#ifdef LOG_FTP
|
||||
case (LOG_FTP):
|
||||
return StringRef::from_lit("ftp");
|
||||
return "ftp"_sr;
|
||||
#endif // LOG_FTP
|
||||
case (LOG_KERN):
|
||||
return StringRef::from_lit("kern");
|
||||
return "kern"_sr;
|
||||
case (LOG_LOCAL0):
|
||||
return StringRef::from_lit("local0");
|
||||
return "local0"_sr;
|
||||
case (LOG_LOCAL1):
|
||||
return StringRef::from_lit("local1");
|
||||
return "local1"_sr;
|
||||
case (LOG_LOCAL2):
|
||||
return StringRef::from_lit("local2");
|
||||
return "local2"_sr;
|
||||
case (LOG_LOCAL3):
|
||||
return StringRef::from_lit("local3");
|
||||
return "local3"_sr;
|
||||
case (LOG_LOCAL4):
|
||||
return StringRef::from_lit("local4");
|
||||
return "local4"_sr;
|
||||
case (LOG_LOCAL5):
|
||||
return StringRef::from_lit("local5");
|
||||
return "local5"_sr;
|
||||
case (LOG_LOCAL6):
|
||||
return StringRef::from_lit("local6");
|
||||
return "local6"_sr;
|
||||
case (LOG_LOCAL7):
|
||||
return StringRef::from_lit("local7");
|
||||
return "local7"_sr;
|
||||
case (LOG_LPR):
|
||||
return StringRef::from_lit("lpr");
|
||||
return "lpr"_sr;
|
||||
case (LOG_MAIL):
|
||||
return StringRef::from_lit("mail");
|
||||
return "mail"_sr;
|
||||
case (LOG_SYSLOG):
|
||||
return StringRef::from_lit("syslog");
|
||||
return "syslog"_sr;
|
||||
case (LOG_USER):
|
||||
return StringRef::from_lit("user");
|
||||
return "user"_sr;
|
||||
case (LOG_UUCP):
|
||||
return StringRef::from_lit("uucp");
|
||||
return "uucp"_sr;
|
||||
default:
|
||||
return StringRef::from_lit("(unknown)");
|
||||
return "(unknown)"_sr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4399,15 +4399,15 @@ int int_syslog_facility(const StringRef &strfacility) {
|
||||
StringRef strproto(Proto proto) {
|
||||
switch (proto) {
|
||||
case Proto::NONE:
|
||||
return StringRef::from_lit("none");
|
||||
return "none"_sr;
|
||||
case Proto::HTTP1:
|
||||
return StringRef::from_lit("http/1.1");
|
||||
return "http/1.1"_sr;
|
||||
case Proto::HTTP2:
|
||||
return StringRef::from_lit("h2");
|
||||
return "h2"_sr;
|
||||
case Proto::HTTP3:
|
||||
return StringRef::from_lit("h3");
|
||||
return "h3"_sr;
|
||||
case Proto::MEMCACHED:
|
||||
return StringRef::from_lit("memcached");
|
||||
return "memcached"_sr;
|
||||
}
|
||||
|
||||
// gcc needs this.
|
||||
@@ -4467,13 +4467,13 @@ int configure_downstream_group(Config *config, bool http2_proxy,
|
||||
|
||||
if (addr_groups.empty()) {
|
||||
DownstreamAddrConfig addr{};
|
||||
addr.host = StringRef::from_lit(DEFAULT_DOWNSTREAM_HOST);
|
||||
addr.host = DEFAULT_DOWNSTREAM_HOST;
|
||||
addr.port = DEFAULT_DOWNSTREAM_PORT;
|
||||
addr.proto = Proto::HTTP1;
|
||||
addr.weight = 1;
|
||||
addr.group_weight = 1;
|
||||
|
||||
DownstreamAddrGroupConfig g(StringRef::from_lit("/"));
|
||||
DownstreamAddrGroupConfig g("/"_sr);
|
||||
g.addrs.push_back(std::move(addr));
|
||||
router.add_route(g.pattern, addr_groups.size());
|
||||
addr_groups.push_back(std::move(g));
|
||||
@@ -4497,7 +4497,7 @@ int configure_downstream_group(Config *config, bool http2_proxy,
|
||||
ssize_t catch_all_group = -1;
|
||||
for (size_t i = 0; i < addr_groups.size(); ++i) {
|
||||
auto &g = addr_groups[i];
|
||||
if (g.pattern == StringRef::from_lit("/")) {
|
||||
if (g.pattern == "/"_sr) {
|
||||
catch_all_group = i;
|
||||
}
|
||||
if (LOG_ENABLED(INFO)) {
|
||||
@@ -4569,7 +4569,7 @@ int configure_downstream_group(Config *config, bool http2_proxy,
|
||||
// for AF_UNIX socket, we use "localhost" as host for backend
|
||||
// hostport. This is used as Host header field to backend and
|
||||
// not going to be passed to any syscalls.
|
||||
addr.hostport = StringRef::from_lit("localhost");
|
||||
addr.hostport = "localhost"_sr;
|
||||
|
||||
auto path = addr.host.data();
|
||||
auto pathlen = addr.host.size();
|
||||
|
||||
@@ -75,348 +75,289 @@ class CertLookupTree;
|
||||
|
||||
} // namespace tls
|
||||
|
||||
constexpr auto SHRPX_OPT_PRIVATE_KEY_FILE =
|
||||
StringRef::from_lit("private-key-file");
|
||||
constexpr auto SHRPX_OPT_PRIVATE_KEY_PASSWD_FILE =
|
||||
StringRef::from_lit("private-key-passwd-file");
|
||||
constexpr auto SHRPX_OPT_CERTIFICATE_FILE =
|
||||
StringRef::from_lit("certificate-file");
|
||||
constexpr auto SHRPX_OPT_DH_PARAM_FILE = StringRef::from_lit("dh-param-file");
|
||||
constexpr auto SHRPX_OPT_SUBCERT = StringRef::from_lit("subcert");
|
||||
constexpr auto SHRPX_OPT_BACKEND = StringRef::from_lit("backend");
|
||||
constexpr auto SHRPX_OPT_FRONTEND = StringRef::from_lit("frontend");
|
||||
constexpr auto SHRPX_OPT_WORKERS = StringRef::from_lit("workers");
|
||||
constexpr auto SHRPX_OPT_PRIVATE_KEY_FILE = "private-key-file"_sr;
|
||||
constexpr auto SHRPX_OPT_PRIVATE_KEY_PASSWD_FILE = "private-key-passwd-file"_sr;
|
||||
constexpr auto SHRPX_OPT_CERTIFICATE_FILE = "certificate-file"_sr;
|
||||
constexpr auto SHRPX_OPT_DH_PARAM_FILE = "dh-param-file"_sr;
|
||||
constexpr auto SHRPX_OPT_SUBCERT = "subcert"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND = "backend"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND = "frontend"_sr;
|
||||
constexpr auto SHRPX_OPT_WORKERS = "workers"_sr;
|
||||
constexpr auto SHRPX_OPT_HTTP2_MAX_CONCURRENT_STREAMS =
|
||||
StringRef::from_lit("http2-max-concurrent-streams");
|
||||
constexpr auto SHRPX_OPT_LOG_LEVEL = StringRef::from_lit("log-level");
|
||||
constexpr auto SHRPX_OPT_DAEMON = StringRef::from_lit("daemon");
|
||||
constexpr auto SHRPX_OPT_HTTP2_PROXY = StringRef::from_lit("http2-proxy");
|
||||
constexpr auto SHRPX_OPT_HTTP2_BRIDGE = StringRef::from_lit("http2-bridge");
|
||||
constexpr auto SHRPX_OPT_CLIENT_PROXY = StringRef::from_lit("client-proxy");
|
||||
constexpr auto SHRPX_OPT_ADD_X_FORWARDED_FOR =
|
||||
StringRef::from_lit("add-x-forwarded-for");
|
||||
"http2-max-concurrent-streams"_sr;
|
||||
constexpr auto SHRPX_OPT_LOG_LEVEL = "log-level"_sr;
|
||||
constexpr auto SHRPX_OPT_DAEMON = "daemon"_sr;
|
||||
constexpr auto SHRPX_OPT_HTTP2_PROXY = "http2-proxy"_sr;
|
||||
constexpr auto SHRPX_OPT_HTTP2_BRIDGE = "http2-bridge"_sr;
|
||||
constexpr auto SHRPX_OPT_CLIENT_PROXY = "client-proxy"_sr;
|
||||
constexpr auto SHRPX_OPT_ADD_X_FORWARDED_FOR = "add-x-forwarded-for"_sr;
|
||||
constexpr auto SHRPX_OPT_STRIP_INCOMING_X_FORWARDED_FOR =
|
||||
StringRef::from_lit("strip-incoming-x-forwarded-for");
|
||||
constexpr auto SHRPX_OPT_NO_VIA = StringRef::from_lit("no-via");
|
||||
"strip-incoming-x-forwarded-for"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_VIA = "no-via"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_READ_TIMEOUT =
|
||||
StringRef::from_lit("frontend-http2-read-timeout");
|
||||
constexpr auto SHRPX_OPT_FRONTEND_READ_TIMEOUT =
|
||||
StringRef::from_lit("frontend-read-timeout");
|
||||
constexpr auto SHRPX_OPT_FRONTEND_WRITE_TIMEOUT =
|
||||
StringRef::from_lit("frontend-write-timeout");
|
||||
constexpr auto SHRPX_OPT_BACKEND_READ_TIMEOUT =
|
||||
StringRef::from_lit("backend-read-timeout");
|
||||
constexpr auto SHRPX_OPT_BACKEND_WRITE_TIMEOUT =
|
||||
StringRef::from_lit("backend-write-timeout");
|
||||
constexpr auto SHRPX_OPT_STREAM_READ_TIMEOUT =
|
||||
StringRef::from_lit("stream-read-timeout");
|
||||
constexpr auto SHRPX_OPT_STREAM_WRITE_TIMEOUT =
|
||||
StringRef::from_lit("stream-write-timeout");
|
||||
constexpr auto SHRPX_OPT_ACCESSLOG_FILE = StringRef::from_lit("accesslog-file");
|
||||
constexpr auto SHRPX_OPT_ACCESSLOG_SYSLOG =
|
||||
StringRef::from_lit("accesslog-syslog");
|
||||
constexpr auto SHRPX_OPT_ACCESSLOG_FORMAT =
|
||||
StringRef::from_lit("accesslog-format");
|
||||
constexpr auto SHRPX_OPT_ERRORLOG_FILE = StringRef::from_lit("errorlog-file");
|
||||
constexpr auto SHRPX_OPT_ERRORLOG_SYSLOG =
|
||||
StringRef::from_lit("errorlog-syslog");
|
||||
"frontend-http2-read-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_READ_TIMEOUT = "frontend-read-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_WRITE_TIMEOUT = "frontend-write-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_READ_TIMEOUT = "backend-read-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_WRITE_TIMEOUT = "backend-write-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_STREAM_READ_TIMEOUT = "stream-read-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_STREAM_WRITE_TIMEOUT = "stream-write-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_ACCESSLOG_FILE = "accesslog-file"_sr;
|
||||
constexpr auto SHRPX_OPT_ACCESSLOG_SYSLOG = "accesslog-syslog"_sr;
|
||||
constexpr auto SHRPX_OPT_ACCESSLOG_FORMAT = "accesslog-format"_sr;
|
||||
constexpr auto SHRPX_OPT_ERRORLOG_FILE = "errorlog-file"_sr;
|
||||
constexpr auto SHRPX_OPT_ERRORLOG_SYSLOG = "errorlog-syslog"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_KEEP_ALIVE_TIMEOUT =
|
||||
StringRef::from_lit("backend-keep-alive-timeout");
|
||||
"backend-keep-alive-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_WINDOW_BITS =
|
||||
StringRef::from_lit("frontend-http2-window-bits");
|
||||
"frontend-http2-window-bits"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP2_WINDOW_BITS =
|
||||
StringRef::from_lit("backend-http2-window-bits");
|
||||
"backend-http2-window-bits"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_CONNECTION_WINDOW_BITS =
|
||||
StringRef::from_lit("frontend-http2-connection-window-bits");
|
||||
"frontend-http2-connection-window-bits"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP2_CONNECTION_WINDOW_BITS =
|
||||
StringRef::from_lit("backend-http2-connection-window-bits");
|
||||
constexpr auto SHRPX_OPT_FRONTEND_NO_TLS =
|
||||
StringRef::from_lit("frontend-no-tls");
|
||||
constexpr auto SHRPX_OPT_BACKEND_NO_TLS = StringRef::from_lit("backend-no-tls");
|
||||
constexpr auto SHRPX_OPT_BACKEND_TLS_SNI_FIELD =
|
||||
StringRef::from_lit("backend-tls-sni-field");
|
||||
constexpr auto SHRPX_OPT_PID_FILE = StringRef::from_lit("pid-file");
|
||||
constexpr auto SHRPX_OPT_USER = StringRef::from_lit("user");
|
||||
constexpr auto SHRPX_OPT_SYSLOG_FACILITY =
|
||||
StringRef::from_lit("syslog-facility");
|
||||
constexpr auto SHRPX_OPT_BACKLOG = StringRef::from_lit("backlog");
|
||||
constexpr auto SHRPX_OPT_CIPHERS = StringRef::from_lit("ciphers");
|
||||
constexpr auto SHRPX_OPT_CLIENT = StringRef::from_lit("client");
|
||||
constexpr auto SHRPX_OPT_INSECURE = StringRef::from_lit("insecure");
|
||||
constexpr auto SHRPX_OPT_CACERT = StringRef::from_lit("cacert");
|
||||
constexpr auto SHRPX_OPT_BACKEND_IPV4 = StringRef::from_lit("backend-ipv4");
|
||||
constexpr auto SHRPX_OPT_BACKEND_IPV6 = StringRef::from_lit("backend-ipv6");
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP_PROXY_URI =
|
||||
StringRef::from_lit("backend-http-proxy-uri");
|
||||
constexpr auto SHRPX_OPT_READ_RATE = StringRef::from_lit("read-rate");
|
||||
constexpr auto SHRPX_OPT_READ_BURST = StringRef::from_lit("read-burst");
|
||||
constexpr auto SHRPX_OPT_WRITE_RATE = StringRef::from_lit("write-rate");
|
||||
constexpr auto SHRPX_OPT_WRITE_BURST = StringRef::from_lit("write-burst");
|
||||
constexpr auto SHRPX_OPT_WORKER_READ_RATE =
|
||||
StringRef::from_lit("worker-read-rate");
|
||||
constexpr auto SHRPX_OPT_WORKER_READ_BURST =
|
||||
StringRef::from_lit("worker-read-burst");
|
||||
constexpr auto SHRPX_OPT_WORKER_WRITE_RATE =
|
||||
StringRef::from_lit("worker-write-rate");
|
||||
constexpr auto SHRPX_OPT_WORKER_WRITE_BURST =
|
||||
StringRef::from_lit("worker-write-burst");
|
||||
constexpr auto SHRPX_OPT_NPN_LIST = StringRef::from_lit("npn-list");
|
||||
constexpr auto SHRPX_OPT_TLS_PROTO_LIST = StringRef::from_lit("tls-proto-list");
|
||||
constexpr auto SHRPX_OPT_VERIFY_CLIENT = StringRef::from_lit("verify-client");
|
||||
constexpr auto SHRPX_OPT_VERIFY_CLIENT_CACERT =
|
||||
StringRef::from_lit("verify-client-cacert");
|
||||
constexpr auto SHRPX_OPT_CLIENT_PRIVATE_KEY_FILE =
|
||||
StringRef::from_lit("client-private-key-file");
|
||||
constexpr auto SHRPX_OPT_CLIENT_CERT_FILE =
|
||||
StringRef::from_lit("client-cert-file");
|
||||
"backend-http2-connection-window-bits"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_NO_TLS = "frontend-no-tls"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_NO_TLS = "backend-no-tls"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_TLS_SNI_FIELD = "backend-tls-sni-field"_sr;
|
||||
constexpr auto SHRPX_OPT_PID_FILE = "pid-file"_sr;
|
||||
constexpr auto SHRPX_OPT_USER = "user"_sr;
|
||||
constexpr auto SHRPX_OPT_SYSLOG_FACILITY = "syslog-facility"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKLOG = "backlog"_sr;
|
||||
constexpr auto SHRPX_OPT_CIPHERS = "ciphers"_sr;
|
||||
constexpr auto SHRPX_OPT_CLIENT = "client"_sr;
|
||||
constexpr auto SHRPX_OPT_INSECURE = "insecure"_sr;
|
||||
constexpr auto SHRPX_OPT_CACERT = "cacert"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_IPV4 = "backend-ipv4"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_IPV6 = "backend-ipv6"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP_PROXY_URI = "backend-http-proxy-uri"_sr;
|
||||
constexpr auto SHRPX_OPT_READ_RATE = "read-rate"_sr;
|
||||
constexpr auto SHRPX_OPT_READ_BURST = "read-burst"_sr;
|
||||
constexpr auto SHRPX_OPT_WRITE_RATE = "write-rate"_sr;
|
||||
constexpr auto SHRPX_OPT_WRITE_BURST = "write-burst"_sr;
|
||||
constexpr auto SHRPX_OPT_WORKER_READ_RATE = "worker-read-rate"_sr;
|
||||
constexpr auto SHRPX_OPT_WORKER_READ_BURST = "worker-read-burst"_sr;
|
||||
constexpr auto SHRPX_OPT_WORKER_WRITE_RATE = "worker-write-rate"_sr;
|
||||
constexpr auto SHRPX_OPT_WORKER_WRITE_BURST = "worker-write-burst"_sr;
|
||||
constexpr auto SHRPX_OPT_NPN_LIST = "npn-list"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_PROTO_LIST = "tls-proto-list"_sr;
|
||||
constexpr auto SHRPX_OPT_VERIFY_CLIENT = "verify-client"_sr;
|
||||
constexpr auto SHRPX_OPT_VERIFY_CLIENT_CACERT = "verify-client-cacert"_sr;
|
||||
constexpr auto SHRPX_OPT_CLIENT_PRIVATE_KEY_FILE = "client-private-key-file"_sr;
|
||||
constexpr auto SHRPX_OPT_CLIENT_CERT_FILE = "client-cert-file"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_DUMP_REQUEST_HEADER =
|
||||
StringRef::from_lit("frontend-http2-dump-request-header");
|
||||
"frontend-http2-dump-request-header"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_DUMP_RESPONSE_HEADER =
|
||||
StringRef::from_lit("frontend-http2-dump-response-header");
|
||||
"frontend-http2-dump-response-header"_sr;
|
||||
constexpr auto SHRPX_OPT_HTTP2_NO_COOKIE_CRUMBLING =
|
||||
StringRef::from_lit("http2-no-cookie-crumbling");
|
||||
constexpr auto SHRPX_OPT_FRONTEND_FRAME_DEBUG =
|
||||
StringRef::from_lit("frontend-frame-debug");
|
||||
constexpr auto SHRPX_OPT_PADDING = StringRef::from_lit("padding");
|
||||
constexpr auto SHRPX_OPT_ALTSVC = StringRef::from_lit("altsvc");
|
||||
constexpr auto SHRPX_OPT_ADD_REQUEST_HEADER =
|
||||
StringRef::from_lit("add-request-header");
|
||||
constexpr auto SHRPX_OPT_ADD_RESPONSE_HEADER =
|
||||
StringRef::from_lit("add-response-header");
|
||||
"http2-no-cookie-crumbling"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_FRAME_DEBUG = "frontend-frame-debug"_sr;
|
||||
constexpr auto SHRPX_OPT_PADDING = "padding"_sr;
|
||||
constexpr auto SHRPX_OPT_ALTSVC = "altsvc"_sr;
|
||||
constexpr auto SHRPX_OPT_ADD_REQUEST_HEADER = "add-request-header"_sr;
|
||||
constexpr auto SHRPX_OPT_ADD_RESPONSE_HEADER = "add-response-header"_sr;
|
||||
constexpr auto SHRPX_OPT_WORKER_FRONTEND_CONNECTIONS =
|
||||
StringRef::from_lit("worker-frontend-connections");
|
||||
constexpr auto SHRPX_OPT_NO_LOCATION_REWRITE =
|
||||
StringRef::from_lit("no-location-rewrite");
|
||||
constexpr auto SHRPX_OPT_NO_HOST_REWRITE =
|
||||
StringRef::from_lit("no-host-rewrite");
|
||||
"worker-frontend-connections"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_LOCATION_REWRITE = "no-location-rewrite"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_HOST_REWRITE = "no-host-rewrite"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP1_CONNECTIONS_PER_HOST =
|
||||
StringRef::from_lit("backend-http1-connections-per-host");
|
||||
"backend-http1-connections-per-host"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP1_CONNECTIONS_PER_FRONTEND =
|
||||
StringRef::from_lit("backend-http1-connections-per-frontend");
|
||||
"backend-http1-connections-per-frontend"_sr;
|
||||
constexpr auto SHRPX_OPT_LISTENER_DISABLE_TIMEOUT =
|
||||
StringRef::from_lit("listener-disable-timeout");
|
||||
constexpr auto SHRPX_OPT_TLS_TICKET_KEY_FILE =
|
||||
StringRef::from_lit("tls-ticket-key-file");
|
||||
constexpr auto SHRPX_OPT_RLIMIT_NOFILE = StringRef::from_lit("rlimit-nofile");
|
||||
constexpr auto SHRPX_OPT_BACKEND_REQUEST_BUFFER =
|
||||
StringRef::from_lit("backend-request-buffer");
|
||||
constexpr auto SHRPX_OPT_BACKEND_RESPONSE_BUFFER =
|
||||
StringRef::from_lit("backend-response-buffer");
|
||||
constexpr auto SHRPX_OPT_NO_SERVER_PUSH = StringRef::from_lit("no-server-push");
|
||||
"listener-disable-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_TICKET_KEY_FILE = "tls-ticket-key-file"_sr;
|
||||
constexpr auto SHRPX_OPT_RLIMIT_NOFILE = "rlimit-nofile"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_REQUEST_BUFFER = "backend-request-buffer"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_RESPONSE_BUFFER = "backend-response-buffer"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_SERVER_PUSH = "no-server-push"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP2_CONNECTIONS_PER_WORKER =
|
||||
StringRef::from_lit("backend-http2-connections-per-worker");
|
||||
"backend-http2-connections-per-worker"_sr;
|
||||
constexpr auto SHRPX_OPT_FETCH_OCSP_RESPONSE_FILE =
|
||||
StringRef::from_lit("fetch-ocsp-response-file");
|
||||
constexpr auto SHRPX_OPT_OCSP_UPDATE_INTERVAL =
|
||||
StringRef::from_lit("ocsp-update-interval");
|
||||
constexpr auto SHRPX_OPT_NO_OCSP = StringRef::from_lit("no-ocsp");
|
||||
constexpr auto SHRPX_OPT_HEADER_FIELD_BUFFER =
|
||||
StringRef::from_lit("header-field-buffer");
|
||||
constexpr auto SHRPX_OPT_MAX_HEADER_FIELDS =
|
||||
StringRef::from_lit("max-header-fields");
|
||||
constexpr auto SHRPX_OPT_INCLUDE = StringRef::from_lit("include");
|
||||
constexpr auto SHRPX_OPT_TLS_TICKET_KEY_CIPHER =
|
||||
StringRef::from_lit("tls-ticket-key-cipher");
|
||||
constexpr auto SHRPX_OPT_HOST_REWRITE = StringRef::from_lit("host-rewrite");
|
||||
"fetch-ocsp-response-file"_sr;
|
||||
constexpr auto SHRPX_OPT_OCSP_UPDATE_INTERVAL = "ocsp-update-interval"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_OCSP = "no-ocsp"_sr;
|
||||
constexpr auto SHRPX_OPT_HEADER_FIELD_BUFFER = "header-field-buffer"_sr;
|
||||
constexpr auto SHRPX_OPT_MAX_HEADER_FIELDS = "max-header-fields"_sr;
|
||||
constexpr auto SHRPX_OPT_INCLUDE = "include"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_TICKET_KEY_CIPHER = "tls-ticket-key-cipher"_sr;
|
||||
constexpr auto SHRPX_OPT_HOST_REWRITE = "host-rewrite"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_SESSION_CACHE_MEMCACHED =
|
||||
StringRef::from_lit("tls-session-cache-memcached");
|
||||
"tls-session-cache-memcached"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_TICKET_KEY_MEMCACHED =
|
||||
StringRef::from_lit("tls-ticket-key-memcached");
|
||||
"tls-ticket-key-memcached"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_TICKET_KEY_MEMCACHED_INTERVAL =
|
||||
StringRef::from_lit("tls-ticket-key-memcached-interval");
|
||||
"tls-ticket-key-memcached-interval"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_TICKET_KEY_MEMCACHED_MAX_RETRY =
|
||||
StringRef::from_lit("tls-ticket-key-memcached-max-retry");
|
||||
"tls-ticket-key-memcached-max-retry"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_TICKET_KEY_MEMCACHED_MAX_FAIL =
|
||||
StringRef::from_lit("tls-ticket-key-memcached-max-fail");
|
||||
constexpr auto SHRPX_OPT_MRUBY_FILE = StringRef::from_lit("mruby-file");
|
||||
constexpr auto SHRPX_OPT_ACCEPT_PROXY_PROTOCOL =
|
||||
StringRef::from_lit("accept-proxy-protocol");
|
||||
constexpr auto SHRPX_OPT_FASTOPEN = StringRef::from_lit("fastopen");
|
||||
"tls-ticket-key-memcached-max-fail"_sr;
|
||||
constexpr auto SHRPX_OPT_MRUBY_FILE = "mruby-file"_sr;
|
||||
constexpr auto SHRPX_OPT_ACCEPT_PROXY_PROTOCOL = "accept-proxy-protocol"_sr;
|
||||
constexpr auto SHRPX_OPT_FASTOPEN = "fastopen"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_DYN_REC_WARMUP_THRESHOLD =
|
||||
StringRef::from_lit("tls-dyn-rec-warmup-threshold");
|
||||
"tls-dyn-rec-warmup-threshold"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_DYN_REC_IDLE_TIMEOUT =
|
||||
StringRef::from_lit("tls-dyn-rec-idle-timeout");
|
||||
constexpr auto SHRPX_OPT_ADD_FORWARDED = StringRef::from_lit("add-forwarded");
|
||||
"tls-dyn-rec-idle-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_ADD_FORWARDED = "add-forwarded"_sr;
|
||||
constexpr auto SHRPX_OPT_STRIP_INCOMING_FORWARDED =
|
||||
StringRef::from_lit("strip-incoming-forwarded");
|
||||
constexpr auto SHRPX_OPT_FORWARDED_BY = StringRef::from_lit("forwarded-by");
|
||||
constexpr auto SHRPX_OPT_FORWARDED_FOR = StringRef::from_lit("forwarded-for");
|
||||
"strip-incoming-forwarded"_sr;
|
||||
constexpr auto SHRPX_OPT_FORWARDED_BY = "forwarded-by"_sr;
|
||||
constexpr auto SHRPX_OPT_FORWARDED_FOR = "forwarded-for"_sr;
|
||||
constexpr auto SHRPX_OPT_REQUEST_HEADER_FIELD_BUFFER =
|
||||
StringRef::from_lit("request-header-field-buffer");
|
||||
"request-header-field-buffer"_sr;
|
||||
constexpr auto SHRPX_OPT_MAX_REQUEST_HEADER_FIELDS =
|
||||
StringRef::from_lit("max-request-header-fields");
|
||||
"max-request-header-fields"_sr;
|
||||
constexpr auto SHRPX_OPT_RESPONSE_HEADER_FIELD_BUFFER =
|
||||
StringRef::from_lit("response-header-field-buffer");
|
||||
"response-header-field-buffer"_sr;
|
||||
constexpr auto SHRPX_OPT_MAX_RESPONSE_HEADER_FIELDS =
|
||||
StringRef::from_lit("max-response-header-fields");
|
||||
"max-response-header-fields"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_HTTP2_CIPHER_BLOCK_LIST =
|
||||
StringRef::from_lit("no-http2-cipher-block-list");
|
||||
"no-http2-cipher-block-list"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_HTTP2_CIPHER_BLACK_LIST =
|
||||
StringRef::from_lit("no-http2-cipher-black-list");
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP1_TLS =
|
||||
StringRef::from_lit("backend-http1-tls");
|
||||
"no-http2-cipher-black-list"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP1_TLS = "backend-http1-tls"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_SESSION_CACHE_MEMCACHED_TLS =
|
||||
StringRef::from_lit("tls-session-cache-memcached-tls");
|
||||
"tls-session-cache-memcached-tls"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_SESSION_CACHE_MEMCACHED_CERT_FILE =
|
||||
StringRef::from_lit("tls-session-cache-memcached-cert-file");
|
||||
"tls-session-cache-memcached-cert-file"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_SESSION_CACHE_MEMCACHED_PRIVATE_KEY_FILE =
|
||||
StringRef::from_lit("tls-session-cache-memcached-private-key-file");
|
||||
"tls-session-cache-memcached-private-key-file"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_SESSION_CACHE_MEMCACHED_ADDRESS_FAMILY =
|
||||
StringRef::from_lit("tls-session-cache-memcached-address-family");
|
||||
"tls-session-cache-memcached-address-family"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_TICKET_KEY_MEMCACHED_TLS =
|
||||
StringRef::from_lit("tls-ticket-key-memcached-tls");
|
||||
"tls-ticket-key-memcached-tls"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_TICKET_KEY_MEMCACHED_CERT_FILE =
|
||||
StringRef::from_lit("tls-ticket-key-memcached-cert-file");
|
||||
"tls-ticket-key-memcached-cert-file"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_TICKET_KEY_MEMCACHED_PRIVATE_KEY_FILE =
|
||||
StringRef::from_lit("tls-ticket-key-memcached-private-key-file");
|
||||
"tls-ticket-key-memcached-private-key-file"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_TICKET_KEY_MEMCACHED_ADDRESS_FAMILY =
|
||||
StringRef::from_lit("tls-ticket-key-memcached-address-family");
|
||||
constexpr auto SHRPX_OPT_BACKEND_ADDRESS_FAMILY =
|
||||
StringRef::from_lit("backend-address-family");
|
||||
"tls-ticket-key-memcached-address-family"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_ADDRESS_FAMILY = "backend-address-family"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_MAX_CONCURRENT_STREAMS =
|
||||
StringRef::from_lit("frontend-http2-max-concurrent-streams");
|
||||
"frontend-http2-max-concurrent-streams"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP2_MAX_CONCURRENT_STREAMS =
|
||||
StringRef::from_lit("backend-http2-max-concurrent-streams");
|
||||
"backend-http2-max-concurrent-streams"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_CONNECTIONS_PER_FRONTEND =
|
||||
StringRef::from_lit("backend-connections-per-frontend");
|
||||
constexpr auto SHRPX_OPT_BACKEND_TLS = StringRef::from_lit("backend-tls");
|
||||
"backend-connections-per-frontend"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_TLS = "backend-tls"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_CONNECTIONS_PER_HOST =
|
||||
StringRef::from_lit("backend-connections-per-host");
|
||||
constexpr auto SHRPX_OPT_ERROR_PAGE = StringRef::from_lit("error-page");
|
||||
constexpr auto SHRPX_OPT_NO_KQUEUE = StringRef::from_lit("no-kqueue");
|
||||
"backend-connections-per-host"_sr;
|
||||
constexpr auto SHRPX_OPT_ERROR_PAGE = "error-page"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_KQUEUE = "no-kqueue"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_SETTINGS_TIMEOUT =
|
||||
StringRef::from_lit("frontend-http2-settings-timeout");
|
||||
"frontend-http2-settings-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP2_SETTINGS_TIMEOUT =
|
||||
StringRef::from_lit("backend-http2-settings-timeout");
|
||||
constexpr auto SHRPX_OPT_API_MAX_REQUEST_BODY =
|
||||
StringRef::from_lit("api-max-request-body");
|
||||
constexpr auto SHRPX_OPT_BACKEND_MAX_BACKOFF =
|
||||
StringRef::from_lit("backend-max-backoff");
|
||||
constexpr auto SHRPX_OPT_SERVER_NAME = StringRef::from_lit("server-name");
|
||||
constexpr auto SHRPX_OPT_NO_SERVER_REWRITE =
|
||||
StringRef::from_lit("no-server-rewrite");
|
||||
"backend-http2-settings-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_API_MAX_REQUEST_BODY = "api-max-request-body"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_MAX_BACKOFF = "backend-max-backoff"_sr;
|
||||
constexpr auto SHRPX_OPT_SERVER_NAME = "server-name"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_SERVER_REWRITE = "no-server-rewrite"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_OPTIMIZE_WRITE_BUFFER_SIZE =
|
||||
StringRef::from_lit("frontend-http2-optimize-write-buffer-size");
|
||||
"frontend-http2-optimize-write-buffer-size"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_OPTIMIZE_WINDOW_SIZE =
|
||||
StringRef::from_lit("frontend-http2-optimize-window-size");
|
||||
"frontend-http2-optimize-window-size"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_WINDOW_SIZE =
|
||||
StringRef::from_lit("frontend-http2-window-size");
|
||||
"frontend-http2-window-size"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_CONNECTION_WINDOW_SIZE =
|
||||
StringRef::from_lit("frontend-http2-connection-window-size");
|
||||
"frontend-http2-connection-window-size"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP2_WINDOW_SIZE =
|
||||
StringRef::from_lit("backend-http2-window-size");
|
||||
"backend-http2-window-size"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP2_CONNECTION_WINDOW_SIZE =
|
||||
StringRef::from_lit("backend-http2-connection-window-size");
|
||||
"backend-http2-connection-window-size"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_ENCODER_DYNAMIC_TABLE_SIZE =
|
||||
StringRef::from_lit("frontend-http2-encoder-dynamic-table-size");
|
||||
"frontend-http2-encoder-dynamic-table-size"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_DECODER_DYNAMIC_TABLE_SIZE =
|
||||
StringRef::from_lit("frontend-http2-decoder-dynamic-table-size");
|
||||
"frontend-http2-decoder-dynamic-table-size"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP2_ENCODER_DYNAMIC_TABLE_SIZE =
|
||||
StringRef::from_lit("backend-http2-encoder-dynamic-table-size");
|
||||
"backend-http2-encoder-dynamic-table-size"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_HTTP2_DECODER_DYNAMIC_TABLE_SIZE =
|
||||
StringRef::from_lit("backend-http2-decoder-dynamic-table-size");
|
||||
constexpr auto SHRPX_OPT_ECDH_CURVES = StringRef::from_lit("ecdh-curves");
|
||||
constexpr auto SHRPX_OPT_TLS_SCT_DIR = StringRef::from_lit("tls-sct-dir");
|
||||
constexpr auto SHRPX_OPT_BACKEND_CONNECT_TIMEOUT =
|
||||
StringRef::from_lit("backend-connect-timeout");
|
||||
constexpr auto SHRPX_OPT_DNS_CACHE_TIMEOUT =
|
||||
StringRef::from_lit("dns-cache-timeout");
|
||||
constexpr auto SHRPX_OPT_DNS_LOOKUP_TIMEOUT =
|
||||
StringRef::from_lit("dns-lookup-timeout");
|
||||
constexpr auto SHRPX_OPT_DNS_MAX_TRY = StringRef::from_lit("dns-max-try");
|
||||
"backend-http2-decoder-dynamic-table-size"_sr;
|
||||
constexpr auto SHRPX_OPT_ECDH_CURVES = "ecdh-curves"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_SCT_DIR = "tls-sct-dir"_sr;
|
||||
constexpr auto SHRPX_OPT_BACKEND_CONNECT_TIMEOUT = "backend-connect-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_DNS_CACHE_TIMEOUT = "dns-cache-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_DNS_LOOKUP_TIMEOUT = "dns-lookup-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_DNS_MAX_TRY = "dns-max-try"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_KEEP_ALIVE_TIMEOUT =
|
||||
StringRef::from_lit("frontend-keep-alive-timeout");
|
||||
constexpr auto SHRPX_OPT_PSK_SECRETS = StringRef::from_lit("psk-secrets");
|
||||
constexpr auto SHRPX_OPT_CLIENT_PSK_SECRETS =
|
||||
StringRef::from_lit("client-psk-secrets");
|
||||
"frontend-keep-alive-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_PSK_SECRETS = "psk-secrets"_sr;
|
||||
constexpr auto SHRPX_OPT_CLIENT_PSK_SECRETS = "client-psk-secrets"_sr;
|
||||
constexpr auto SHRPX_OPT_CLIENT_NO_HTTP2_CIPHER_BLOCK_LIST =
|
||||
StringRef::from_lit("client-no-http2-cipher-block-list");
|
||||
"client-no-http2-cipher-block-list"_sr;
|
||||
constexpr auto SHRPX_OPT_CLIENT_NO_HTTP2_CIPHER_BLACK_LIST =
|
||||
StringRef::from_lit("client-no-http2-cipher-black-list");
|
||||
constexpr auto SHRPX_OPT_CLIENT_CIPHERS = StringRef::from_lit("client-ciphers");
|
||||
constexpr auto SHRPX_OPT_ACCESSLOG_WRITE_EARLY =
|
||||
StringRef::from_lit("accesslog-write-early");
|
||||
constexpr auto SHRPX_OPT_TLS_MIN_PROTO_VERSION =
|
||||
StringRef::from_lit("tls-min-proto-version");
|
||||
constexpr auto SHRPX_OPT_TLS_MAX_PROTO_VERSION =
|
||||
StringRef::from_lit("tls-max-proto-version");
|
||||
constexpr auto SHRPX_OPT_REDIRECT_HTTPS_PORT =
|
||||
StringRef::from_lit("redirect-https-port");
|
||||
constexpr auto SHRPX_OPT_FRONTEND_MAX_REQUESTS =
|
||||
StringRef::from_lit("frontend-max-requests");
|
||||
constexpr auto SHRPX_OPT_SINGLE_THREAD = StringRef::from_lit("single-thread");
|
||||
constexpr auto SHRPX_OPT_SINGLE_PROCESS = StringRef::from_lit("single-process");
|
||||
"client-no-http2-cipher-black-list"_sr;
|
||||
constexpr auto SHRPX_OPT_CLIENT_CIPHERS = "client-ciphers"_sr;
|
||||
constexpr auto SHRPX_OPT_ACCESSLOG_WRITE_EARLY = "accesslog-write-early"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_MIN_PROTO_VERSION = "tls-min-proto-version"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_MAX_PROTO_VERSION = "tls-max-proto-version"_sr;
|
||||
constexpr auto SHRPX_OPT_REDIRECT_HTTPS_PORT = "redirect-https-port"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_MAX_REQUESTS = "frontend-max-requests"_sr;
|
||||
constexpr auto SHRPX_OPT_SINGLE_THREAD = "single-thread"_sr;
|
||||
constexpr auto SHRPX_OPT_SINGLE_PROCESS = "single-process"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_ADD_X_FORWARDED_PROTO =
|
||||
StringRef::from_lit("no-add-x-forwarded-proto");
|
||||
"no-add-x-forwarded-proto"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_STRIP_INCOMING_X_FORWARDED_PROTO =
|
||||
StringRef::from_lit("no-strip-incoming-x-forwarded-proto");
|
||||
constexpr auto SHRPX_OPT_OCSP_STARTUP = StringRef::from_lit("ocsp-startup");
|
||||
constexpr auto SHRPX_OPT_NO_VERIFY_OCSP = StringRef::from_lit("no-verify-ocsp");
|
||||
"no-strip-incoming-x-forwarded-proto"_sr;
|
||||
constexpr auto SHRPX_OPT_OCSP_STARTUP = "ocsp-startup"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_VERIFY_OCSP = "no-verify-ocsp"_sr;
|
||||
constexpr auto SHRPX_OPT_VERIFY_CLIENT_TOLERATE_EXPIRED =
|
||||
StringRef::from_lit("verify-client-tolerate-expired");
|
||||
"verify-client-tolerate-expired"_sr;
|
||||
constexpr auto SHRPX_OPT_IGNORE_PER_PATTERN_MRUBY_ERROR =
|
||||
StringRef::from_lit("ignore-per-pattern-mruby-error");
|
||||
"ignore-per-pattern-mruby-error"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_NO_POSTPONE_EARLY_DATA =
|
||||
StringRef::from_lit("tls-no-postpone-early-data");
|
||||
constexpr auto SHRPX_OPT_TLS_MAX_EARLY_DATA =
|
||||
StringRef::from_lit("tls-max-early-data");
|
||||
constexpr auto SHRPX_OPT_TLS13_CIPHERS = StringRef::from_lit("tls13-ciphers");
|
||||
constexpr auto SHRPX_OPT_TLS13_CLIENT_CIPHERS =
|
||||
StringRef::from_lit("tls13-client-ciphers");
|
||||
"tls-no-postpone-early-data"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_MAX_EARLY_DATA = "tls-max-early-data"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS13_CIPHERS = "tls13-ciphers"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS13_CLIENT_CIPHERS = "tls13-client-ciphers"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_STRIP_INCOMING_EARLY_DATA =
|
||||
StringRef::from_lit("no-strip-incoming-early-data");
|
||||
constexpr auto SHRPX_OPT_QUIC_BPF_PROGRAM_FILE =
|
||||
StringRef::from_lit("quic-bpf-program-file");
|
||||
constexpr auto SHRPX_OPT_NO_QUIC_BPF = StringRef::from_lit("no-quic-bpf");
|
||||
constexpr auto SHRPX_OPT_HTTP2_ALTSVC = StringRef::from_lit("http2-altsvc");
|
||||
"no-strip-incoming-early-data"_sr;
|
||||
constexpr auto SHRPX_OPT_QUIC_BPF_PROGRAM_FILE = "quic-bpf-program-file"_sr;
|
||||
constexpr auto SHRPX_OPT_NO_QUIC_BPF = "no-quic-bpf"_sr;
|
||||
constexpr auto SHRPX_OPT_HTTP2_ALTSVC = "http2-altsvc"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP3_READ_TIMEOUT =
|
||||
StringRef::from_lit("frontend-http3-read-timeout");
|
||||
"frontend-http3-read-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_QUIC_IDLE_TIMEOUT =
|
||||
StringRef::from_lit("frontend-quic-idle-timeout");
|
||||
constexpr auto SHRPX_OPT_FRONTEND_QUIC_DEBUG_LOG =
|
||||
StringRef::from_lit("frontend-quic-debug-log");
|
||||
"frontend-quic-idle-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_QUIC_DEBUG_LOG = "frontend-quic-debug-log"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP3_WINDOW_SIZE =
|
||||
StringRef::from_lit("frontend-http3-window-size");
|
||||
"frontend-http3-window-size"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP3_CONNECTION_WINDOW_SIZE =
|
||||
StringRef::from_lit("frontend-http3-connection-window-size");
|
||||
"frontend-http3-connection-window-size"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP3_MAX_WINDOW_SIZE =
|
||||
StringRef::from_lit("frontend-http3-max-window-size");
|
||||
"frontend-http3-max-window-size"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP3_MAX_CONNECTION_WINDOW_SIZE =
|
||||
StringRef::from_lit("frontend-http3-max-connection-window-size");
|
||||
"frontend-http3-max-connection-window-size"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP3_MAX_CONCURRENT_STREAMS =
|
||||
StringRef::from_lit("frontend-http3-max-concurrent-streams");
|
||||
"frontend-http3-max-concurrent-streams"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_QUIC_EARLY_DATA =
|
||||
StringRef::from_lit("frontend-quic-early-data");
|
||||
constexpr auto SHRPX_OPT_FRONTEND_QUIC_QLOG_DIR =
|
||||
StringRef::from_lit("frontend-quic-qlog-dir");
|
||||
"frontend-quic-early-data"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_QUIC_QLOG_DIR = "frontend-quic-qlog-dir"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_QUIC_REQUIRE_TOKEN =
|
||||
StringRef::from_lit("frontend-quic-require-token");
|
||||
"frontend-quic-require-token"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_QUIC_CONGESTION_CONTROLLER =
|
||||
StringRef::from_lit("frontend-quic-congestion-controller");
|
||||
constexpr auto SHRPX_OPT_QUIC_SERVER_ID = StringRef::from_lit("quic-server-id");
|
||||
"frontend-quic-congestion-controller"_sr;
|
||||
constexpr auto SHRPX_OPT_QUIC_SERVER_ID = "quic-server-id"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_QUIC_SECRET_FILE =
|
||||
StringRef::from_lit("frontend-quic-secret-file");
|
||||
constexpr auto SHRPX_OPT_RLIMIT_MEMLOCK = StringRef::from_lit("rlimit-memlock");
|
||||
constexpr auto SHRPX_OPT_MAX_WORKER_PROCESSES =
|
||||
StringRef::from_lit("max-worker-processes");
|
||||
"frontend-quic-secret-file"_sr;
|
||||
constexpr auto SHRPX_OPT_RLIMIT_MEMLOCK = "rlimit-memlock"_sr;
|
||||
constexpr auto SHRPX_OPT_MAX_WORKER_PROCESSES = "max-worker-processes"_sr;
|
||||
constexpr auto SHRPX_OPT_WORKER_PROCESS_GRACE_SHUTDOWN_PERIOD =
|
||||
StringRef::from_lit("worker-process-grace-shutdown-period");
|
||||
"worker-process-grace-shutdown-period"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_QUIC_INITIAL_RTT =
|
||||
StringRef::from_lit("frontend-quic-initial-rtt");
|
||||
constexpr auto SHRPX_OPT_REQUIRE_HTTP_SCHEME =
|
||||
StringRef::from_lit("require-http-scheme");
|
||||
constexpr auto SHRPX_OPT_TLS_KTLS = StringRef::from_lit("tls-ktls");
|
||||
constexpr auto SHRPX_OPT_ALPN_LIST = StringRef::from_lit("alpn-list");
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HEADER_TIMEOUT =
|
||||
StringRef::from_lit("frontend-header-timeout");
|
||||
"frontend-quic-initial-rtt"_sr;
|
||||
constexpr auto SHRPX_OPT_REQUIRE_HTTP_SCHEME = "require-http-scheme"_sr;
|
||||
constexpr auto SHRPX_OPT_TLS_KTLS = "tls-ktls"_sr;
|
||||
constexpr auto SHRPX_OPT_ALPN_LIST = "alpn-list"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HEADER_TIMEOUT = "frontend-header-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP2_IDLE_TIMEOUT =
|
||||
StringRef::from_lit("frontend-http2-idle-timeout");
|
||||
"frontend-http2-idle-timeout"_sr;
|
||||
constexpr auto SHRPX_OPT_FRONTEND_HTTP3_IDLE_TIMEOUT =
|
||||
StringRef::from_lit("frontend-http3-idle-timeout");
|
||||
"frontend-http3-idle-timeout"_sr;
|
||||
|
||||
constexpr size_t SHRPX_OBFUSCATED_NODE_LENGTH = 8;
|
||||
|
||||
constexpr char DEFAULT_DOWNSTREAM_HOST[] = "127.0.0.1";
|
||||
constexpr auto DEFAULT_DOWNSTREAM_HOST = "127.0.0.1"_sr;
|
||||
constexpr int16_t DEFAULT_DOWNSTREAM_PORT = 80;
|
||||
|
||||
enum class Proto {
|
||||
|
||||
@@ -56,32 +56,32 @@ const MunitSuite config_suite{
|
||||
void test_shrpx_config_parse_header(void) {
|
||||
BlockAllocator balloc(4096, 4096);
|
||||
|
||||
auto p = parse_header(balloc, StringRef::from_lit("a: b"));
|
||||
auto p = parse_header(balloc, "a: b"_sr);
|
||||
assert_stdsv_equal("a"sv, p.name);
|
||||
assert_stdsv_equal("b"sv, p.value);
|
||||
|
||||
p = parse_header(balloc, StringRef::from_lit("a: b"));
|
||||
p = parse_header(balloc, "a: b"_sr);
|
||||
assert_stdsv_equal("a"sv, p.name);
|
||||
assert_stdsv_equal("b"sv, p.value);
|
||||
|
||||
p = parse_header(balloc, StringRef::from_lit(":a: b"));
|
||||
p = parse_header(balloc, ":a: b"_sr);
|
||||
assert_true(p.name.empty());
|
||||
|
||||
p = parse_header(balloc, StringRef::from_lit("a: :b"));
|
||||
p = parse_header(balloc, "a: :b"_sr);
|
||||
assert_stdsv_equal("a"sv, p.name);
|
||||
assert_stdsv_equal(":b"sv, p.value);
|
||||
|
||||
p = parse_header(balloc, StringRef::from_lit(": b"));
|
||||
p = parse_header(balloc, ": b"_sr);
|
||||
assert_true(p.name.empty());
|
||||
|
||||
p = parse_header(balloc, StringRef::from_lit("alpha: bravo charlie"));
|
||||
p = parse_header(balloc, "alpha: bravo charlie"_sr);
|
||||
assert_stdsv_equal("alpha", p.name);
|
||||
assert_stdsv_equal("bravo charlie", p.value);
|
||||
|
||||
p = parse_header(balloc, StringRef::from_lit("a,: b"));
|
||||
p = parse_header(balloc, "a,: b"_sr);
|
||||
assert_true(p.name.empty());
|
||||
|
||||
p = parse_header(balloc, StringRef::from_lit("a: b\x0a"));
|
||||
p = parse_header(balloc, "a: b\x0a"_sr);
|
||||
assert_true(p.name.empty());
|
||||
}
|
||||
|
||||
@@ -89,10 +89,9 @@ void test_shrpx_config_parse_log_format(void) {
|
||||
BlockAllocator balloc(4096, 4096);
|
||||
|
||||
auto res = parse_log_format(
|
||||
balloc, StringRef::from_lit(
|
||||
R"($remote_addr - $remote_user [$time_local] )"
|
||||
R"("$request" $status $body_bytes_sent )"
|
||||
R"("${http_referer}" $http_host "$http_user_agent")"));
|
||||
balloc, R"($remote_addr - $remote_user [$time_local] )"
|
||||
R"("$request" $status $body_bytes_sent )"
|
||||
R"("${http_referer}" $http_host "$http_user_agent")"_sr);
|
||||
assert_size(16, ==, res.size());
|
||||
|
||||
assert_enum_class(LogFragmentType::REMOTE_ADDR, ==, res[0].type);
|
||||
@@ -137,35 +136,35 @@ void test_shrpx_config_parse_log_format(void) {
|
||||
assert_enum_class(LogFragmentType::LITERAL, ==, res[15].type);
|
||||
assert_stdsv_equal("\""sv, res[15].value);
|
||||
|
||||
res = parse_log_format(balloc, StringRef::from_lit("$"));
|
||||
res = parse_log_format(balloc, "$"_sr);
|
||||
|
||||
assert_size(1, ==, res.size());
|
||||
|
||||
assert_enum_class(LogFragmentType::LITERAL, ==, res[0].type);
|
||||
assert_stdsv_equal("$"sv, res[0].value);
|
||||
|
||||
res = parse_log_format(balloc, StringRef::from_lit("${"));
|
||||
res = parse_log_format(balloc, "${"_sr);
|
||||
|
||||
assert_size(1, ==, res.size());
|
||||
|
||||
assert_enum_class(LogFragmentType::LITERAL, ==, res[0].type);
|
||||
assert_stdsv_equal("${"sv, res[0].value);
|
||||
|
||||
res = parse_log_format(balloc, StringRef::from_lit("${a"));
|
||||
res = parse_log_format(balloc, "${a"_sr);
|
||||
|
||||
assert_size(1, ==, res.size());
|
||||
|
||||
assert_enum_class(LogFragmentType::LITERAL, ==, res[0].type);
|
||||
assert_stdsv_equal("${a"sv, res[0].value);
|
||||
|
||||
res = parse_log_format(balloc, StringRef::from_lit("${a "));
|
||||
res = parse_log_format(balloc, "${a "_sr);
|
||||
|
||||
assert_size(1, ==, res.size());
|
||||
|
||||
assert_enum_class(LogFragmentType::LITERAL, ==, res[0].type);
|
||||
assert_stdsv_equal("${a "sv, res[0].value);
|
||||
|
||||
res = parse_log_format(balloc, StringRef::from_lit("$$remote_addr"));
|
||||
res = parse_log_format(balloc, "$$remote_addr"_sr);
|
||||
|
||||
assert_size(2, ==, res.size());
|
||||
|
||||
|
||||
@@ -891,8 +891,7 @@ void Downstream::inspect_http1_request() {
|
||||
|
||||
auto expect = req_.fs.header(http2::HD_EXPECT);
|
||||
expect_100_continue_ =
|
||||
expect &&
|
||||
util::strieq(expect->value, StringRef::from_lit("100-continue"));
|
||||
expect && util::strieq(expect->value, "100-continue"_sr);
|
||||
}
|
||||
|
||||
void Downstream::inspect_http1_response() {
|
||||
|
||||
@@ -54,40 +54,35 @@ const MunitSuite downstream_suite{
|
||||
void test_downstream_field_store_append_last_header(void) {
|
||||
BlockAllocator balloc(16, 16);
|
||||
FieldStore fs(balloc, 0);
|
||||
fs.alloc_add_header_name(StringRef::from_lit("alpha"));
|
||||
auto bravo = StringRef::from_lit("BRAVO");
|
||||
fs.alloc_add_header_name("alpha"_sr);
|
||||
auto bravo = "BRAVO"_sr;
|
||||
fs.append_last_header_key(bravo.data(), bravo.size());
|
||||
// Add more characters so that relloc occurs
|
||||
auto golf = StringRef::from_lit("golF0123456789");
|
||||
auto golf = "golF0123456789"_sr;
|
||||
fs.append_last_header_key(golf.data(), golf.size());
|
||||
|
||||
auto charlie = StringRef::from_lit("Charlie");
|
||||
auto charlie = "Charlie"_sr;
|
||||
fs.append_last_header_value(charlie.data(), charlie.size());
|
||||
auto delta = StringRef::from_lit("deltA");
|
||||
auto delta = "deltA"_sr;
|
||||
fs.append_last_header_value(delta.data(), delta.size());
|
||||
// Add more characters so that relloc occurs
|
||||
auto echo = StringRef::from_lit("echo0123456789");
|
||||
auto echo = "echo0123456789"_sr;
|
||||
fs.append_last_header_value(echo.data(), echo.size());
|
||||
|
||||
fs.add_header_token(StringRef::from_lit("echo"),
|
||||
StringRef::from_lit("foxtrot"), false, -1);
|
||||
fs.add_header_token("echo"_sr, "foxtrot"_sr, false, -1);
|
||||
|
||||
auto ans =
|
||||
HeaderRefs{{StringRef::from_lit("alphabravogolf0123456789"),
|
||||
StringRef::from_lit("CharliedeltAecho0123456789")},
|
||||
{StringRef::from_lit("echo"), StringRef::from_lit("foxtrot")}};
|
||||
auto ans = HeaderRefs{
|
||||
{"alphabravogolf0123456789"_sr, "CharliedeltAecho0123456789"_sr},
|
||||
{"echo"_sr, "foxtrot"_sr}};
|
||||
assert_true(ans == fs.headers());
|
||||
}
|
||||
|
||||
void test_downstream_field_store_header(void) {
|
||||
BlockAllocator balloc(16, 16);
|
||||
FieldStore fs(balloc, 0);
|
||||
fs.add_header_token(StringRef::from_lit("alpha"), StringRef::from_lit("0"),
|
||||
false, -1);
|
||||
fs.add_header_token(StringRef::from_lit(":authority"),
|
||||
StringRef::from_lit("1"), false, http2::HD__AUTHORITY);
|
||||
fs.add_header_token(StringRef::from_lit("content-length"),
|
||||
StringRef::from_lit("2"), false,
|
||||
fs.add_header_token("alpha"_sr, "0"_sr, false, -1);
|
||||
fs.add_header_token(":authority"_sr, "1"_sr, false, http2::HD__AUTHORITY);
|
||||
fs.add_header_token("content-length"_sr, "2"_sr, false,
|
||||
http2::HD_CONTENT_LENGTH);
|
||||
|
||||
// By token
|
||||
@@ -97,25 +92,19 @@ void test_downstream_field_store_header(void) {
|
||||
|
||||
// By name
|
||||
assert_true(HeaderRef(StringRef{"alpha"}, StringRef{"0"}) ==
|
||||
*fs.header(StringRef::from_lit("alpha")));
|
||||
assert_null(fs.header(StringRef::from_lit("bravo")));
|
||||
*fs.header("alpha"_sr));
|
||||
assert_null(fs.header("bravo"_sr));
|
||||
}
|
||||
|
||||
void test_downstream_crumble_request_cookie(void) {
|
||||
Downstream d(nullptr, nullptr, 0);
|
||||
auto &req = d.request();
|
||||
req.fs.add_header_token(StringRef::from_lit(":method"),
|
||||
StringRef::from_lit("get"), false, -1);
|
||||
req.fs.add_header_token(StringRef::from_lit(":path"),
|
||||
StringRef::from_lit("/"), false, -1);
|
||||
req.fs.add_header_token(StringRef::from_lit("cookie"),
|
||||
StringRef::from_lit("alpha; bravo; ; ;; charlie;;"),
|
||||
true, http2::HD_COOKIE);
|
||||
req.fs.add_header_token(StringRef::from_lit("cookie"),
|
||||
StringRef::from_lit(";delta"), false,
|
||||
req.fs.add_header_token(":method"_sr, "get"_sr, false, -1);
|
||||
req.fs.add_header_token(":path"_sr, "/"_sr, false, -1);
|
||||
req.fs.add_header_token("cookie"_sr, "alpha; bravo; ; ;; charlie;;"_sr, true,
|
||||
http2::HD_COOKIE);
|
||||
req.fs.add_header_token(StringRef::from_lit("cookie"),
|
||||
StringRef::from_lit("echo"), false, http2::HD_COOKIE);
|
||||
req.fs.add_header_token("cookie"_sr, ";delta"_sr, false, http2::HD_COOKIE);
|
||||
req.fs.add_header_token("cookie"_sr, "echo"_sr, false, http2::HD_COOKIE);
|
||||
|
||||
std::vector<nghttp2_nv> nva;
|
||||
d.crumble_request_cookie(nva);
|
||||
@@ -133,12 +122,11 @@ void test_downstream_crumble_request_cookie(void) {
|
||||
nv.flags & NGHTTP2_NV_FLAG_NO_INDEX);
|
||||
});
|
||||
|
||||
HeaderRefs ans = {
|
||||
{StringRef::from_lit("cookie"), StringRef::from_lit("alpha")},
|
||||
{StringRef::from_lit("cookie"), StringRef::from_lit("bravo")},
|
||||
{StringRef::from_lit("cookie"), StringRef::from_lit("charlie")},
|
||||
{StringRef::from_lit("cookie"), StringRef::from_lit("delta")},
|
||||
{StringRef::from_lit("cookie"), StringRef::from_lit("echo")}};
|
||||
HeaderRefs ans = {{"cookie"_sr, "alpha"_sr},
|
||||
{"cookie"_sr, "bravo"_sr},
|
||||
{"cookie"_sr, "charlie"_sr},
|
||||
{"cookie"_sr, "delta"_sr},
|
||||
{"cookie"_sr, "echo"_sr}};
|
||||
|
||||
assert_true(ans == cookies);
|
||||
assert_true(cookies[0].no_index);
|
||||
@@ -150,22 +138,12 @@ void test_downstream_assemble_request_cookie(void) {
|
||||
Downstream d(nullptr, nullptr, 0);
|
||||
auto &req = d.request();
|
||||
|
||||
req.fs.add_header_token(StringRef::from_lit(":method"),
|
||||
StringRef::from_lit("get"), false, -1);
|
||||
req.fs.add_header_token(StringRef::from_lit(":path"),
|
||||
StringRef::from_lit("/"), false, -1);
|
||||
req.fs.add_header_token(StringRef::from_lit("cookie"),
|
||||
StringRef::from_lit("alpha"), false,
|
||||
http2::HD_COOKIE);
|
||||
req.fs.add_header_token(StringRef::from_lit("cookie"),
|
||||
StringRef::from_lit("bravo;"), false,
|
||||
http2::HD_COOKIE);
|
||||
req.fs.add_header_token(StringRef::from_lit("cookie"),
|
||||
StringRef::from_lit("charlie; "), false,
|
||||
http2::HD_COOKIE);
|
||||
req.fs.add_header_token(StringRef::from_lit("cookie"),
|
||||
StringRef::from_lit("delta;;"), false,
|
||||
http2::HD_COOKIE);
|
||||
req.fs.add_header_token(":method"_sr, "get"_sr, false, -1);
|
||||
req.fs.add_header_token(":path"_sr, "/"_sr, false, -1);
|
||||
req.fs.add_header_token("cookie"_sr, "alpha"_sr, false, http2::HD_COOKIE);
|
||||
req.fs.add_header_token("cookie"_sr, "bravo;"_sr, false, http2::HD_COOKIE);
|
||||
req.fs.add_header_token("cookie"_sr, "charlie; "_sr, false, http2::HD_COOKIE);
|
||||
req.fs.add_header_token("cookie"_sr, "delta;;"_sr, false, http2::HD_COOKIE);
|
||||
assert_stdsv_equal("alpha; bravo; charlie; delta"sv,
|
||||
d.assemble_request_cookie());
|
||||
}
|
||||
@@ -174,12 +152,11 @@ void test_downstream_rewrite_location_response_header(void) {
|
||||
Downstream d(nullptr, nullptr, 0);
|
||||
auto &req = d.request();
|
||||
auto &resp = d.response();
|
||||
d.set_request_downstream_host(StringRef::from_lit("localhost2"));
|
||||
req.authority = StringRef::from_lit("localhost:8443");
|
||||
resp.fs.add_header_token(StringRef::from_lit("location"),
|
||||
StringRef::from_lit("http://localhost2:3000/"),
|
||||
false, http2::HD_LOCATION);
|
||||
d.rewrite_location_response_header(StringRef::from_lit("https"));
|
||||
d.set_request_downstream_host("localhost2"_sr);
|
||||
req.authority = "localhost:8443"_sr;
|
||||
resp.fs.add_header_token("location"_sr, "http://localhost2:3000/"_sr, false,
|
||||
http2::HD_LOCATION);
|
||||
d.rewrite_location_response_header("https"_sr);
|
||||
auto location = resp.fs.header(http2::HD_LOCATION);
|
||||
assert_stdsv_equal("https://localhost:8443/"sv, (*location).value);
|
||||
}
|
||||
@@ -218,32 +195,26 @@ void test_downstream_find_affinity_cookie(void) {
|
||||
Downstream d(nullptr, nullptr, 0);
|
||||
|
||||
auto &req = d.request();
|
||||
req.fs.add_header_token(StringRef::from_lit("cookie"), StringRef{}, false,
|
||||
http2::HD_COOKIE);
|
||||
req.fs.add_header_token(StringRef::from_lit("cookie"),
|
||||
StringRef::from_lit("a=b;;c=d"), false,
|
||||
http2::HD_COOKIE);
|
||||
req.fs.add_header_token(StringRef::from_lit("content-length"),
|
||||
StringRef::from_lit("599"), false,
|
||||
req.fs.add_header_token("cookie"_sr, StringRef{}, false, http2::HD_COOKIE);
|
||||
req.fs.add_header_token("cookie"_sr, "a=b;;c=d"_sr, false, http2::HD_COOKIE);
|
||||
req.fs.add_header_token("content-length"_sr, "599"_sr, false,
|
||||
http2::HD_CONTENT_LENGTH);
|
||||
req.fs.add_header_token(StringRef::from_lit("cookie"),
|
||||
StringRef::from_lit("lb=deadbeef;LB=f1f2f3f4"), false,
|
||||
req.fs.add_header_token("cookie"_sr, "lb=deadbeef;LB=f1f2f3f4"_sr, false,
|
||||
http2::HD_COOKIE);
|
||||
req.fs.add_header_token(StringRef::from_lit("cookie"),
|
||||
StringRef::from_lit("short=e1e2e3e"), false,
|
||||
req.fs.add_header_token("cookie"_sr, "short=e1e2e3e"_sr, false,
|
||||
http2::HD_COOKIE);
|
||||
|
||||
uint32_t aff;
|
||||
|
||||
aff = d.find_affinity_cookie(StringRef::from_lit("lb"));
|
||||
aff = d.find_affinity_cookie("lb"_sr);
|
||||
|
||||
assert_uint32(0xdeadbeef, ==, aff);
|
||||
|
||||
aff = d.find_affinity_cookie(StringRef::from_lit("LB"));
|
||||
aff = d.find_affinity_cookie("LB"_sr);
|
||||
|
||||
assert_uint32(0xf1f2f3f4, ==, aff);
|
||||
|
||||
aff = d.find_affinity_cookie(StringRef::from_lit("short"));
|
||||
aff = d.find_affinity_cookie("short"_sr);
|
||||
|
||||
assert_uint32(0, ==, aff);
|
||||
}
|
||||
|
||||
@@ -74,8 +74,7 @@ int HealthMonitorDownstreamConnection::end_upload_data() {
|
||||
|
||||
resp.http_status = 200;
|
||||
|
||||
resp.fs.add_header_token(StringRef::from_lit("content-length"),
|
||||
StringRef::from_lit("0"), false,
|
||||
resp.fs.add_header_token("content-length"_sr, "0"_sr, false,
|
||||
http2::HD_CONTENT_LENGTH);
|
||||
|
||||
if (upstream->send_reply(downstream_, nullptr, 0) != 0) {
|
||||
|
||||
@@ -49,12 +49,10 @@ StringRef create_error_html(BlockAllocator &balloc, unsigned int http_status) {
|
||||
auto reason_phrase = http2::get_reason_phrase(http_status);
|
||||
|
||||
return concat_string_ref(
|
||||
balloc, StringRef::from_lit(R"(<!DOCTYPE html><html lang="en"><title>)"),
|
||||
status_string, StringRef::from_lit(" "), reason_phrase,
|
||||
StringRef::from_lit("</title><body><h1>"), status_string,
|
||||
StringRef::from_lit(" "), reason_phrase,
|
||||
StringRef::from_lit("</h1><footer>"), httpconf.server_name,
|
||||
StringRef::from_lit("</footer></body></html>"));
|
||||
balloc, R"(<!DOCTYPE html><html lang="en"><title>)"_sr, status_string,
|
||||
" "_sr, reason_phrase, "</title><body><h1>"_sr, status_string, " "_sr,
|
||||
reason_phrase, "</h1><footer>"_sr, httpconf.server_name,
|
||||
"</footer></body></html>"_sr);
|
||||
}
|
||||
|
||||
StringRef create_forwarded(BlockAllocator &balloc, int params,
|
||||
@@ -176,8 +174,8 @@ nghttp2_ssize select_padding_callback(nghttp2_session *session,
|
||||
StringRef create_affinity_cookie(BlockAllocator &balloc, const StringRef &name,
|
||||
uint32_t affinity_cookie,
|
||||
const StringRef &path, bool secure) {
|
||||
static constexpr auto PATH_PREFIX = StringRef::from_lit("; Path=");
|
||||
static constexpr auto SECURE = StringRef::from_lit("; Secure");
|
||||
static constexpr auto PATH_PREFIX = "; Path="_sr;
|
||||
static constexpr auto SECURE = "; Secure"_sr;
|
||||
// <name>=<value>[; Path=<path>][; Secure]
|
||||
size_t len = name.size() + 1 + 8;
|
||||
|
||||
|
||||
@@ -377,8 +377,7 @@ int Http2DownstreamConnection::push_request_headers() {
|
||||
if (value.empty()) {
|
||||
value = fwd->value;
|
||||
} else {
|
||||
value = concat_string_ref(balloc, fwd->value,
|
||||
StringRef::from_lit(", "), value);
|
||||
value = concat_string_ref(balloc, fwd->value, ", "_sr, value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -395,8 +394,7 @@ int Http2DownstreamConnection::push_request_headers() {
|
||||
StringRef xff_value;
|
||||
const auto &addr = upstream->get_client_handler()->get_ipaddr();
|
||||
if (xff) {
|
||||
xff_value = concat_string_ref(balloc, xff->value,
|
||||
StringRef::from_lit(", "), addr);
|
||||
xff_value = concat_string_ref(balloc, xff->value, ", "_sr, addr);
|
||||
} else {
|
||||
xff_value = addr;
|
||||
}
|
||||
@@ -414,8 +412,7 @@ int Http2DownstreamConnection::push_request_headers() {
|
||||
StringRef xfp_value;
|
||||
// We use same protocol with :scheme header field
|
||||
if (xfp) {
|
||||
xfp_value = concat_string_ref(balloc, xfp->value,
|
||||
StringRef::from_lit(", "), req.scheme);
|
||||
xfp_value = concat_string_ref(balloc, xfp->value, ", "_sr, req.scheme);
|
||||
} else {
|
||||
xfp_value = req.scheme;
|
||||
}
|
||||
|
||||
@@ -1185,8 +1185,7 @@ int on_response_headers(Http2Session *http2session, Downstream *downstream,
|
||||
// Otherwise, use chunked encoding to keep upstream connection
|
||||
// open. In HTTP2, we are supposed not to receive
|
||||
// transfer-encoding.
|
||||
resp.fs.add_header_token(StringRef::from_lit("transfer-encoding"),
|
||||
StringRef::from_lit("chunked"), false,
|
||||
resp.fs.add_header_token("transfer-encoding"_sr, "chunked"_sr, false,
|
||||
http2::HD_TRANSFER_ENCODING);
|
||||
downstream->set_chunked_response(true);
|
||||
}
|
||||
|
||||
@@ -386,8 +386,7 @@ int Http2Upstream::on_request_headers(Downstream *downstream,
|
||||
}
|
||||
|
||||
if (path) {
|
||||
if (method_token == HTTP_OPTIONS &&
|
||||
path->value == StringRef::from_lit("*")) {
|
||||
if (method_token == HTTP_OPTIONS && path->value == "*"_sr) {
|
||||
// Server-wide OPTIONS request. Path is empty.
|
||||
} else if (config->http2_proxy &&
|
||||
faddr->alt_mode == UpstreamAltMode::NONE) {
|
||||
@@ -2020,19 +2019,16 @@ int Http2Upstream::redirect_to_https(Downstream *downstream) {
|
||||
auto &httpconf = config->http;
|
||||
|
||||
StringRef loc;
|
||||
if (httpconf.redirect_https_port == StringRef::from_lit("443")) {
|
||||
loc = concat_string_ref(balloc, StringRef::from_lit("https://"), authority,
|
||||
req.path);
|
||||
if (httpconf.redirect_https_port == "443"_sr) {
|
||||
loc = concat_string_ref(balloc, "https://"_sr, authority, req.path);
|
||||
} else {
|
||||
loc = concat_string_ref(balloc, StringRef::from_lit("https://"), authority,
|
||||
StringRef::from_lit(":"),
|
||||
loc = concat_string_ref(balloc, "https://"_sr, authority, ":"_sr,
|
||||
httpconf.redirect_https_port, req.path);
|
||||
}
|
||||
|
||||
auto &resp = downstream->response();
|
||||
resp.http_status = 308;
|
||||
resp.fs.add_header_token(StringRef::from_lit("location"), loc, false,
|
||||
http2::HD_LOCATION);
|
||||
resp.fs.add_header_token("location"_sr, loc, false, http2::HD_LOCATION);
|
||||
|
||||
return send_reply(downstream, nullptr, 0);
|
||||
}
|
||||
|
||||
@@ -2302,8 +2302,7 @@ int Http3Upstream::http_end_request_headers(Downstream *downstream, int fin) {
|
||||
}
|
||||
|
||||
if (path) {
|
||||
if (method_token == HTTP_OPTIONS &&
|
||||
path->value == StringRef::from_lit("*")) {
|
||||
if (method_token == HTTP_OPTIONS && path->value == "*"_sr) {
|
||||
// Server-wide OPTIONS request. Path is empty.
|
||||
} else if (config->http2_proxy &&
|
||||
faddr->alt_mode == UpstreamAltMode::NONE) {
|
||||
|
||||
@@ -64,37 +64,28 @@ void test_shrpx_http_create_forwarded(void) {
|
||||
http::create_forwarded(
|
||||
balloc,
|
||||
FORWARDED_BY | FORWARDED_FOR | FORWARDED_HOST | FORWARDED_PROTO,
|
||||
StringRef::from_lit("example.com:3000"), StringRef::from_lit("[::1]"),
|
||||
StringRef::from_lit("www.example.com"),
|
||||
StringRef::from_lit("https")));
|
||||
"example.com:3000"_sr, "[::1]"_sr, "www.example.com"_sr, "https"_sr));
|
||||
|
||||
assert_stdsv_equal("for=192.168.0.1"sv,
|
||||
http::create_forwarded(balloc, FORWARDED_FOR,
|
||||
StringRef::from_lit("alpha"),
|
||||
StringRef::from_lit("192.168.0.1"),
|
||||
StringRef::from_lit("bravo"),
|
||||
StringRef::from_lit("charlie")));
|
||||
http::create_forwarded(balloc, FORWARDED_FOR, "alpha"_sr,
|
||||
"192.168.0.1"_sr, "bravo"_sr,
|
||||
"charlie"_sr));
|
||||
|
||||
assert_stdsv_equal(
|
||||
"by=_hidden;for=\"[::1]\""sv,
|
||||
http::create_forwarded(balloc, FORWARDED_BY | FORWARDED_FOR,
|
||||
StringRef::from_lit("_hidden"),
|
||||
StringRef::from_lit("[::1]"),
|
||||
StringRef::from_lit(""), StringRef::from_lit("")));
|
||||
http::create_forwarded(balloc, FORWARDED_BY | FORWARDED_FOR, "_hidden"_sr,
|
||||
"[::1]"_sr, ""_sr, ""_sr));
|
||||
|
||||
assert_stdsv_equal(
|
||||
"by=\"[::1]\";for=_hidden"sv,
|
||||
http::create_forwarded(balloc, FORWARDED_BY | FORWARDED_FOR,
|
||||
StringRef::from_lit("[::1]"),
|
||||
StringRef::from_lit("_hidden"),
|
||||
StringRef::from_lit(""), StringRef::from_lit("")));
|
||||
http::create_forwarded(balloc, FORWARDED_BY | FORWARDED_FOR, "[::1]"_sr,
|
||||
"_hidden"_sr, ""_sr, ""_sr));
|
||||
|
||||
assert_stdsv_equal(
|
||||
""sv, http::create_forwarded(
|
||||
balloc,
|
||||
FORWARDED_BY | FORWARDED_FOR | FORWARDED_HOST | FORWARDED_PROTO,
|
||||
StringRef::from_lit(""), StringRef::from_lit(""),
|
||||
StringRef::from_lit(""), StringRef::from_lit("")));
|
||||
assert_stdsv_equal(""sv, http::create_forwarded(balloc,
|
||||
FORWARDED_BY | FORWARDED_FOR |
|
||||
FORWARDED_HOST |
|
||||
FORWARDED_PROTO,
|
||||
""_sr, ""_sr, ""_sr, ""_sr));
|
||||
}
|
||||
|
||||
void test_shrpx_http_create_via_header_value(void) {
|
||||
@@ -115,24 +106,22 @@ void test_shrpx_http_create_affinity_cookie(void) {
|
||||
BlockAllocator balloc(1024, 1024);
|
||||
StringRef c;
|
||||
|
||||
c = http::create_affinity_cookie(balloc, StringRef::from_lit("cookie-val"),
|
||||
0xf1e2d3c4u, StringRef{}, false);
|
||||
c = http::create_affinity_cookie(balloc, "cookie-val"_sr, 0xf1e2d3c4u,
|
||||
StringRef{}, false);
|
||||
|
||||
assert_stdsv_equal("cookie-val=f1e2d3c4"sv, c);
|
||||
|
||||
c = http::create_affinity_cookie(balloc, StringRef::from_lit("alpha"),
|
||||
0x00000000u, StringRef{}, true);
|
||||
c = http::create_affinity_cookie(balloc, "alpha"_sr, 0x00000000u, StringRef{},
|
||||
true);
|
||||
|
||||
assert_stdsv_equal("alpha=00000000; Secure"sv, c);
|
||||
|
||||
c = http::create_affinity_cookie(balloc, StringRef::from_lit("bravo"),
|
||||
0x01111111u, StringRef::from_lit("bar"),
|
||||
c = http::create_affinity_cookie(balloc, "bravo"_sr, 0x01111111u, "bar"_sr,
|
||||
false);
|
||||
|
||||
assert_stdsv_equal("bravo=01111111; Path=bar"sv, c);
|
||||
|
||||
c = http::create_affinity_cookie(balloc, StringRef::from_lit("charlie"),
|
||||
0x01111111u, StringRef::from_lit("bar"),
|
||||
c = http::create_affinity_cookie(balloc, "charlie"_sr, 0x01111111u, "bar"_sr,
|
||||
true);
|
||||
|
||||
assert_stdsv_equal("charlie=01111111; Path=bar; Secure"sv, c);
|
||||
@@ -143,10 +132,10 @@ void test_shrpx_http_create_altsvc_header_value(void) {
|
||||
BlockAllocator balloc(1024, 1024);
|
||||
std::vector<AltSvc> altsvcs{
|
||||
AltSvc{
|
||||
.protocol_id = StringRef::from_lit("h3"),
|
||||
.host = StringRef::from_lit("127.0.0.1"),
|
||||
.service = StringRef::from_lit("443"),
|
||||
.params = StringRef::from_lit("ma=3600"),
|
||||
.protocol_id = "h3"_sr,
|
||||
.host = "127.0.0.1"_sr,
|
||||
.service = "443"_sr,
|
||||
.params = "ma=3600"_sr,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -158,14 +147,14 @@ void test_shrpx_http_create_altsvc_header_value(void) {
|
||||
BlockAllocator balloc(1024, 1024);
|
||||
std::vector<AltSvc> altsvcs{
|
||||
AltSvc{
|
||||
.protocol_id = StringRef::from_lit("h3"),
|
||||
.service = StringRef::from_lit("443"),
|
||||
.params = StringRef::from_lit("ma=3600"),
|
||||
.protocol_id = "h3"_sr,
|
||||
.service = "443"_sr,
|
||||
.params = "ma=3600"_sr,
|
||||
},
|
||||
AltSvc{
|
||||
.protocol_id = StringRef::from_lit("h3%"),
|
||||
.host = StringRef::from_lit("\"foo\""),
|
||||
.service = StringRef::from_lit("4433"),
|
||||
.protocol_id = "h3%"_sr,
|
||||
.host = "\"foo\""_sr,
|
||||
.service = "4433"_sr,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -175,12 +164,12 @@ void test_shrpx_http_create_altsvc_header_value(void) {
|
||||
}
|
||||
|
||||
void test_shrpx_http_check_http_scheme(void) {
|
||||
assert_true(http::check_http_scheme(StringRef::from_lit("https"), true));
|
||||
assert_false(http::check_http_scheme(StringRef::from_lit("https"), false));
|
||||
assert_false(http::check_http_scheme(StringRef::from_lit("http"), true));
|
||||
assert_true(http::check_http_scheme(StringRef::from_lit("http"), false));
|
||||
assert_false(http::check_http_scheme(StringRef::from_lit("foo"), true));
|
||||
assert_false(http::check_http_scheme(StringRef::from_lit("foo"), false));
|
||||
assert_true(http::check_http_scheme("https"_sr, true));
|
||||
assert_false(http::check_http_scheme("https"_sr, false));
|
||||
assert_false(http::check_http_scheme("http"_sr, true));
|
||||
assert_true(http::check_http_scheme("http"_sr, false));
|
||||
assert_false(http::check_http_scheme("foo"_sr, true));
|
||||
assert_false(http::check_http_scheme("foo"_sr, false));
|
||||
assert_false(http::check_http_scheme(StringRef{}, true));
|
||||
assert_false(http::check_http_scheme(StringRef{}, false));
|
||||
}
|
||||
|
||||
@@ -303,11 +303,11 @@ void rewrite_request_host_path_from_uri(BlockAllocator &balloc, Request &req,
|
||||
//
|
||||
// Notice that no slash after authority. See
|
||||
// http://tools.ietf.org/html/rfc7230#section-5.3.4
|
||||
req.path = StringRef::from_lit("");
|
||||
req.path = ""_sr;
|
||||
// we ignore query component here
|
||||
return;
|
||||
} else {
|
||||
path = StringRef::from_lit("/");
|
||||
path = "/"_sr;
|
||||
}
|
||||
|
||||
if (u.field_set & (1 << UF_QUERY)) {
|
||||
@@ -317,7 +317,7 @@ void rewrite_request_host_path_from_uri(BlockAllocator &balloc, Request &req,
|
||||
auto q = util::get_uri_field(uri.data(), u, UF_QUERY);
|
||||
path = StringRef{std::begin(path), std::end(q)};
|
||||
} else {
|
||||
path = concat_string_ref(balloc, path, StringRef::from_lit("?"),
|
||||
path = concat_string_ref(balloc, path, "?"_sr,
|
||||
StringRef{&uri[fdata.off], fdata.len});
|
||||
}
|
||||
}
|
||||
@@ -440,7 +440,7 @@ int htp_hdrs_completecb(llhttp_t *htp) {
|
||||
if (!(u.field_set & (1 << UF_SCHEMA)) || !(u.field_set & (1 << UF_HOST))) {
|
||||
req.no_authority = true;
|
||||
|
||||
if (method == HTTP_OPTIONS && req.path == StringRef::from_lit("*")) {
|
||||
if (method == HTTP_OPTIONS && req.path == "*"_sr) {
|
||||
req.path = StringRef{};
|
||||
} else {
|
||||
req.path = http2::rewrite_clean_path(balloc, req.path);
|
||||
@@ -451,9 +451,9 @@ int htp_hdrs_completecb(llhttp_t *htp) {
|
||||
}
|
||||
|
||||
if (handler->get_ssl()) {
|
||||
req.scheme = StringRef::from_lit("https");
|
||||
req.scheme = "https"_sr;
|
||||
} else {
|
||||
req.scheme = StringRef::from_lit("http");
|
||||
req.scheme = "http"_sr;
|
||||
}
|
||||
} else {
|
||||
rewrite_request_host_path_from_uri(balloc, req, req.path, u);
|
||||
@@ -544,7 +544,7 @@ int htp_hdrs_completecb(llhttp_t *htp) {
|
||||
// Continue here to make the client happy.
|
||||
if (downstream->get_expect_100_continue()) {
|
||||
auto output = downstream->get_response_buf();
|
||||
constexpr auto res = StringRef::from_lit("HTTP/1.1 100 Continue\r\n\r\n");
|
||||
constexpr auto res = "HTTP/1.1 100 Continue\r\n\r\n"_sr;
|
||||
output->append(res);
|
||||
handler->signal_write();
|
||||
}
|
||||
@@ -982,8 +982,7 @@ int HttpsUpstream::send_reply(Downstream *downstream, const uint8_t *body,
|
||||
|
||||
if (httpconf.max_requests <= num_requests_ ||
|
||||
worker->get_graceful_shutdown()) {
|
||||
resp.fs.add_header_token(StringRef::from_lit("connection"),
|
||||
StringRef::from_lit("close"), false,
|
||||
resp.fs.add_header_token("connection"_sr, "close"_sr, false,
|
||||
http2::HD_CONNECTION);
|
||||
connection_close = true;
|
||||
} else if (req.http_major <= 0 ||
|
||||
@@ -1429,21 +1428,17 @@ int HttpsUpstream::redirect_to_https(Downstream *downstream) {
|
||||
auto &httpconf = config->http;
|
||||
|
||||
StringRef loc;
|
||||
if (httpconf.redirect_https_port == StringRef::from_lit("443")) {
|
||||
loc = concat_string_ref(balloc, StringRef::from_lit("https://"), authority,
|
||||
req.path);
|
||||
if (httpconf.redirect_https_port == "443"_sr) {
|
||||
loc = concat_string_ref(balloc, "https://"_sr, authority, req.path);
|
||||
} else {
|
||||
loc = concat_string_ref(balloc, StringRef::from_lit("https://"), authority,
|
||||
StringRef::from_lit(":"),
|
||||
loc = concat_string_ref(balloc, "https://"_sr, authority, ":"_sr,
|
||||
httpconf.redirect_https_port, req.path);
|
||||
}
|
||||
|
||||
auto &resp = downstream->response();
|
||||
resp.http_status = 308;
|
||||
resp.fs.add_header_token(StringRef::from_lit("location"), loc, false,
|
||||
http2::HD_LOCATION);
|
||||
resp.fs.add_header_token(StringRef::from_lit("connection"),
|
||||
StringRef::from_lit("close"), false,
|
||||
resp.fs.add_header_token("location"_sr, loc, false, http2::HD_LOCATION);
|
||||
resp.fs.add_header_token("connection"_sr, "close"_sr, false,
|
||||
http2::HD_CONNECTION);
|
||||
|
||||
return send_reply(downstream, nullptr, 0);
|
||||
|
||||
@@ -411,7 +411,7 @@ int LiveCheck::tls_handshake() {
|
||||
|
||||
switch (addr_->proto) {
|
||||
case Proto::HTTP1:
|
||||
if (proto.empty() || proto == StringRef::from_lit("http/1.1")) {
|
||||
if (proto.empty() || proto == "http/1.1"_sr) {
|
||||
break;
|
||||
}
|
||||
return -1;
|
||||
|
||||
@@ -58,10 +58,8 @@ using namespace nghttp2;
|
||||
namespace shrpx {
|
||||
|
||||
namespace {
|
||||
constexpr StringRef SEVERITY_STR[] = {
|
||||
StringRef::from_lit("INFO"), StringRef::from_lit("NOTICE"),
|
||||
StringRef::from_lit("WARN"), StringRef::from_lit("ERROR"),
|
||||
StringRef::from_lit("FATAL")};
|
||||
constexpr StringRef SEVERITY_STR[] = {"INFO"_sr, "NOTICE"_sr, "WARN"_sr,
|
||||
"ERROR"_sr, "FATAL"_sr};
|
||||
} // namespace
|
||||
|
||||
namespace {
|
||||
@@ -592,14 +590,13 @@ void upstream_accesslog(const std::vector<LogFragment> &lfv,
|
||||
auto &balloc = downstream->get_block_allocator();
|
||||
|
||||
auto downstream_addr = downstream->get_addr();
|
||||
auto method = req.method == -1 ? StringRef::from_lit("<unknown>")
|
||||
: http2::to_method_string(req.method);
|
||||
auto path =
|
||||
req.method == HTTP_CONNECT ? req.authority
|
||||
: config->http2_proxy ? construct_absolute_request_uri(balloc, req)
|
||||
: req.path.empty() ? req.method == HTTP_OPTIONS ? StringRef::from_lit("*")
|
||||
: StringRef::from_lit("-")
|
||||
: req.path;
|
||||
auto method =
|
||||
req.method == -1 ? "<unknown>"_sr : http2::to_method_string(req.method);
|
||||
auto path = req.method == HTTP_CONNECT ? req.authority
|
||||
: config->http2_proxy
|
||||
? construct_absolute_request_uri(balloc, req)
|
||||
: req.path.empty() ? req.method == HTTP_OPTIONS ? "*"_sr : "-"_sr
|
||||
: req.path;
|
||||
auto path_without_query =
|
||||
req.method == HTTP_CONNECT
|
||||
? path
|
||||
|
||||
@@ -266,7 +266,7 @@ enum class LogFragmentType {
|
||||
};
|
||||
|
||||
struct LogFragment {
|
||||
LogFragment(LogFragmentType type, StringRef value = StringRef::from_lit(""))
|
||||
LogFragment(LogFragmentType type, StringRef value = ""_sr)
|
||||
: type(type), value(std::move(value)) {}
|
||||
LogFragmentType type;
|
||||
StringRef value;
|
||||
|
||||
@@ -245,8 +245,8 @@ mrb_value response_return(mrb_state *mrb, mrb_value self) {
|
||||
if (cl) {
|
||||
cl->value = content_length;
|
||||
} else {
|
||||
resp.fs.add_header_token(StringRef::from_lit("content-length"),
|
||||
content_length, false, http2::HD_CONTENT_LENGTH);
|
||||
resp.fs.add_header_token("content-length"_sr, content_length, false,
|
||||
http2::HD_CONTENT_LENGTH);
|
||||
}
|
||||
|
||||
resp.fs.content_length = vallen;
|
||||
@@ -256,7 +256,7 @@ mrb_value response_return(mrb_state *mrb, mrb_value self) {
|
||||
if (!date) {
|
||||
auto lgconf = log_config();
|
||||
lgconf->update_tstamp(std::chrono::system_clock::now());
|
||||
resp.fs.add_header_token(StringRef::from_lit("date"),
|
||||
resp.fs.add_header_token("date"_sr,
|
||||
make_string_ref(balloc, lgconf->tstamp->time_http),
|
||||
false, http2::HD_DATE);
|
||||
}
|
||||
|
||||
@@ -51,16 +51,16 @@ struct Pattern {
|
||||
|
||||
void test_shrpx_router_match(void) {
|
||||
auto patterns = std::vector<Pattern>{
|
||||
{StringRef::from_lit("nghttp2.org/"), 0},
|
||||
{StringRef::from_lit("nghttp2.org/alpha"), 1},
|
||||
{StringRef::from_lit("nghttp2.org/alpha/"), 2},
|
||||
{StringRef::from_lit("nghttp2.org/alpha/bravo/"), 3},
|
||||
{StringRef::from_lit("www.nghttp2.org/alpha/"), 4},
|
||||
{StringRef::from_lit("/alpha"), 5},
|
||||
{StringRef::from_lit("example.com/alpha/"), 6},
|
||||
{StringRef::from_lit("nghttp2.org/alpha/bravo2/"), 7},
|
||||
{StringRef::from_lit("www2.nghttp2.org/alpha/"), 8},
|
||||
{StringRef::from_lit("www2.nghttp2.org/alpha2/"), 9},
|
||||
{"nghttp2.org/"_sr, 0},
|
||||
{"nghttp2.org/alpha"_sr, 1},
|
||||
{"nghttp2.org/alpha/"_sr, 2},
|
||||
{"nghttp2.org/alpha/bravo/"_sr, 3},
|
||||
{"www.nghttp2.org/alpha/"_sr, 4},
|
||||
{"/alpha"_sr, 5},
|
||||
{"example.com/alpha/"_sr, 6},
|
||||
{"nghttp2.org/alpha/bravo2/"_sr, 7},
|
||||
{"www2.nghttp2.org/alpha/"_sr, 8},
|
||||
{"www2.nghttp2.org/alpha2/"_sr, 9},
|
||||
};
|
||||
|
||||
Router router;
|
||||
@@ -71,55 +71,48 @@ void test_shrpx_router_match(void) {
|
||||
|
||||
ssize_t idx;
|
||||
|
||||
idx = router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/"));
|
||||
idx = router.match("nghttp2.org"_sr, "/"_sr);
|
||||
|
||||
assert_ssize(0, ==, idx);
|
||||
|
||||
idx = router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha"));
|
||||
idx = router.match("nghttp2.org"_sr, "/alpha"_sr);
|
||||
|
||||
assert_ssize(1, ==, idx);
|
||||
|
||||
idx = router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/"));
|
||||
idx = router.match("nghttp2.org"_sr, "/alpha/"_sr);
|
||||
|
||||
assert_ssize(2, ==, idx);
|
||||
|
||||
idx = router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/charlie"));
|
||||
idx = router.match("nghttp2.org"_sr, "/alpha/charlie"_sr);
|
||||
|
||||
assert_ssize(2, ==, idx);
|
||||
|
||||
idx = router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/bravo/"));
|
||||
idx = router.match("nghttp2.org"_sr, "/alpha/bravo/"_sr);
|
||||
|
||||
assert_ssize(3, ==, idx);
|
||||
|
||||
// matches pattern when last '/' is missing in path
|
||||
idx = router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/bravo"));
|
||||
idx = router.match("nghttp2.org"_sr, "/alpha/bravo"_sr);
|
||||
|
||||
assert_ssize(3, ==, idx);
|
||||
|
||||
idx = router.match(StringRef::from_lit("www2.nghttp2.org"),
|
||||
StringRef::from_lit("/alpha"));
|
||||
idx = router.match("www2.nghttp2.org"_sr, "/alpha"_sr);
|
||||
|
||||
assert_ssize(8, ==, idx);
|
||||
|
||||
idx = router.match(StringRef{}, StringRef::from_lit("/alpha"));
|
||||
idx = router.match(StringRef{}, "/alpha"_sr);
|
||||
|
||||
assert_ssize(5, ==, idx);
|
||||
}
|
||||
|
||||
void test_shrpx_router_match_wildcard(void) {
|
||||
constexpr auto patterns = std::to_array<Pattern>({
|
||||
{StringRef::from_lit("nghttp2.org/"), 0},
|
||||
{StringRef::from_lit("nghttp2.org/"), 1, true},
|
||||
{StringRef::from_lit("nghttp2.org/alpha/"), 2},
|
||||
{StringRef::from_lit("nghttp2.org/alpha/"), 3, true},
|
||||
{StringRef::from_lit("nghttp2.org/bravo"), 4},
|
||||
{StringRef::from_lit("nghttp2.org/bravo"), 5, true},
|
||||
{"nghttp2.org/"_sr, 0},
|
||||
{"nghttp2.org/"_sr, 1, true},
|
||||
{"nghttp2.org/alpha/"_sr, 2},
|
||||
{"nghttp2.org/alpha/"_sr, 3, true},
|
||||
{"nghttp2.org/bravo"_sr, 4},
|
||||
{"nghttp2.org/bravo"_sr, 5, true},
|
||||
});
|
||||
|
||||
Router router;
|
||||
@@ -128,49 +121,31 @@ void test_shrpx_router_match_wildcard(void) {
|
||||
router.add_route(p.pattern, p.idx, p.wildcard);
|
||||
}
|
||||
|
||||
assert_ssize(0, ==,
|
||||
router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/")));
|
||||
assert_ssize(0, ==, router.match("nghttp2.org"_sr, "/"_sr));
|
||||
|
||||
assert_ssize(1, ==,
|
||||
router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/a")));
|
||||
assert_ssize(1, ==, router.match("nghttp2.org"_sr, "/a"_sr));
|
||||
|
||||
assert_ssize(1, ==,
|
||||
router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/charlie")));
|
||||
assert_ssize(1, ==, router.match("nghttp2.org"_sr, "/charlie"_sr));
|
||||
|
||||
assert_ssize(2, ==,
|
||||
router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha")));
|
||||
assert_ssize(2, ==, router.match("nghttp2.org"_sr, "/alpha"_sr));
|
||||
|
||||
assert_ssize(2, ==,
|
||||
router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/")));
|
||||
assert_ssize(2, ==, router.match("nghttp2.org"_sr, "/alpha/"_sr));
|
||||
|
||||
assert_ssize(3, ==,
|
||||
router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/b")));
|
||||
assert_ssize(3, ==, router.match("nghttp2.org"_sr, "/alpha/b"_sr));
|
||||
|
||||
assert_ssize(4, ==,
|
||||
router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/bravo")));
|
||||
assert_ssize(4, ==, router.match("nghttp2.org"_sr, "/bravo"_sr));
|
||||
|
||||
assert_ssize(5, ==,
|
||||
router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/bravocharlie")));
|
||||
assert_ssize(5, ==, router.match("nghttp2.org"_sr, "/bravocharlie"_sr));
|
||||
|
||||
assert_ssize(5, ==,
|
||||
router.match(StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/bravo/")));
|
||||
assert_ssize(5, ==, router.match("nghttp2.org"_sr, "/bravo/"_sr));
|
||||
}
|
||||
|
||||
void test_shrpx_router_match_prefix(void) {
|
||||
auto patterns = std::vector<Pattern>{
|
||||
{StringRef::from_lit("gro.2ptthgn."), 0},
|
||||
{StringRef::from_lit("gro.2ptthgn.www."), 1},
|
||||
{StringRef::from_lit("gro.2ptthgn.gmi."), 2},
|
||||
{StringRef::from_lit("gro.2ptthgn.gmi.ahpla."), 3},
|
||||
{"gro.2ptthgn."_sr, 0},
|
||||
{"gro.2ptthgn.www."_sr, 1},
|
||||
{"gro.2ptthgn.gmi."_sr, 2},
|
||||
{"gro.2ptthgn.gmi.ahpla."_sr, 3},
|
||||
};
|
||||
|
||||
Router router;
|
||||
@@ -185,19 +160,17 @@ void test_shrpx_router_match_prefix(void) {
|
||||
|
||||
node = nullptr;
|
||||
|
||||
idx = router.match_prefix(&nread, &node,
|
||||
StringRef::from_lit("gro.2ptthgn.gmi.ahpla.ovarb"));
|
||||
idx = router.match_prefix(&nread, &node, "gro.2ptthgn.gmi.ahpla.ovarb"_sr);
|
||||
|
||||
assert_ssize(0, ==, idx);
|
||||
assert_size(12, ==, nread);
|
||||
|
||||
idx = router.match_prefix(&nread, &node,
|
||||
StringRef::from_lit("gmi.ahpla.ovarb"));
|
||||
idx = router.match_prefix(&nread, &node, "gmi.ahpla.ovarb"_sr);
|
||||
|
||||
assert_ssize(2, ==, idx);
|
||||
assert_size(4, ==, nread);
|
||||
|
||||
idx = router.match_prefix(&nread, &node, StringRef::from_lit("ahpla.ovarb"));
|
||||
idx = router.match_prefix(&nread, &node, "ahpla.ovarb"_sr);
|
||||
|
||||
assert_ssize(3, ==, idx);
|
||||
assert_ssize(6, ==, nread);
|
||||
|
||||
@@ -365,7 +365,7 @@ int ocsp_resp_cb(SSL *ssl, void *arg) {
|
||||
#endif // NGHTTP2_OPENSSL_IS_BORINGSSL
|
||||
|
||||
constexpr auto MEMCACHED_SESSION_CACHE_KEY_PREFIX =
|
||||
StringRef::from_lit("nghttpx:tls-session-cache:");
|
||||
"nghttpx:tls-session-cache:"_sr;
|
||||
|
||||
namespace {
|
||||
int tls_session_client_new_cb(SSL *ssl, SSL_SESSION *session) {
|
||||
@@ -699,8 +699,8 @@ int quic_alpn_select_proto_cb(SSL *ssl, const unsigned char **out,
|
||||
unsigned char *outlen, const unsigned char *in,
|
||||
unsigned int inlen, void *arg) {
|
||||
constexpr StringRef alpnlist[] = {
|
||||
StringRef::from_lit("h3"),
|
||||
StringRef::from_lit("h3-29"),
|
||||
"h3"_sr,
|
||||
"h3-29"_sr,
|
||||
};
|
||||
|
||||
for (auto &alpn : alpnlist) {
|
||||
@@ -930,9 +930,9 @@ struct TLSProtocol {
|
||||
};
|
||||
|
||||
constexpr TLSProtocol TLS_PROTOS[] = {
|
||||
TLSProtocol{StringRef::from_lit("TLSv1.2"), SSL_OP_NO_TLSv1_2},
|
||||
TLSProtocol{StringRef::from_lit("TLSv1.1"), SSL_OP_NO_TLSv1_1},
|
||||
TLSProtocol{StringRef::from_lit("TLSv1.0"), SSL_OP_NO_TLSv1}};
|
||||
TLSProtocol{"TLSv1.2"_sr, SSL_OP_NO_TLSv1_2},
|
||||
TLSProtocol{"TLSv1.1"_sr, SSL_OP_NO_TLSv1_1},
|
||||
TLSProtocol{"TLSv1.0"_sr, SSL_OP_NO_TLSv1}};
|
||||
|
||||
long int create_tls_proto_mask(const std::vector<StringRef> &tls_proto_list) {
|
||||
long int res = 0;
|
||||
|
||||
@@ -54,16 +54,16 @@ void test_shrpx_tls_create_lookup_tree(void) {
|
||||
auto tree = std::make_unique<tls::CertLookupTree>();
|
||||
|
||||
constexpr StringRef hostnames[] = {
|
||||
StringRef::from_lit("example.com"), // 0
|
||||
StringRef::from_lit("www.example.org"), // 1
|
||||
StringRef::from_lit("*www.example.org"), // 2
|
||||
StringRef::from_lit("xy*.host.domain"), // 3
|
||||
StringRef::from_lit("*yy.host.domain"), // 4
|
||||
StringRef::from_lit("nghttp2.sourceforge.net"), // 5
|
||||
StringRef::from_lit("sourceforge.net"), // 6
|
||||
StringRef::from_lit("sourceforge.net"), // 7, duplicate
|
||||
StringRef::from_lit("*.foo.bar"), // 8, oo.bar is suffix of *.foo.bar
|
||||
StringRef::from_lit("oo.bar") // 9
|
||||
"example.com"_sr, // 0
|
||||
"www.example.org"_sr, // 1
|
||||
"*www.example.org"_sr, // 2
|
||||
"xy*.host.domain"_sr, // 3
|
||||
"*yy.host.domain"_sr, // 4
|
||||
"nghttp2.sourceforge.net"_sr, // 5
|
||||
"sourceforge.net"_sr, // 6
|
||||
"sourceforge.net"_sr, // 7, duplicate
|
||||
"*.foo.bar"_sr, // 8, oo.bar is suffix of *.foo.bar
|
||||
"oo.bar"_sr // 9
|
||||
};
|
||||
auto num = array_size(hostnames);
|
||||
|
||||
@@ -75,13 +75,13 @@ void test_shrpx_tls_create_lookup_tree(void) {
|
||||
|
||||
assert_ssize(0, ==, tree->lookup(hostnames[0]));
|
||||
assert_ssize(1, ==, tree->lookup(hostnames[1]));
|
||||
assert_ssize(2, ==, tree->lookup(StringRef::from_lit("2www.example.org")));
|
||||
assert_ssize(-1, ==, tree->lookup(StringRef::from_lit("www2.example.org")));
|
||||
assert_ssize(3, ==, tree->lookup(StringRef::from_lit("xy1.host.domain")));
|
||||
assert_ssize(2, ==, tree->lookup("2www.example.org"_sr));
|
||||
assert_ssize(-1, ==, tree->lookup("www2.example.org"_sr));
|
||||
assert_ssize(3, ==, tree->lookup("xy1.host.domain"_sr));
|
||||
// Does not match *yy.host.domain, because * must match at least 1
|
||||
// character.
|
||||
assert_ssize(-1, ==, tree->lookup(StringRef::from_lit("yy.host.domain")));
|
||||
assert_ssize(4, ==, tree->lookup(StringRef::from_lit("xyy.host.domain")));
|
||||
assert_ssize(-1, ==, tree->lookup("yy.host.domain"_sr));
|
||||
assert_ssize(4, ==, tree->lookup("xyy.host.domain"_sr));
|
||||
assert_ssize(-1, ==, tree->lookup(StringRef{}));
|
||||
assert_ssize(5, ==, tree->lookup(hostnames[5]));
|
||||
assert_ssize(6, ==, tree->lookup(hostnames[6]));
|
||||
@@ -89,14 +89,14 @@ void test_shrpx_tls_create_lookup_tree(void) {
|
||||
for (int i = 0; i < 7; ++i) {
|
||||
assert_ssize(-1, ==, tree->lookup(StringRef{h6 + i, str_size(h6) - i}));
|
||||
}
|
||||
assert_ssize(8, ==, tree->lookup(StringRef::from_lit("x.foo.bar")));
|
||||
assert_ssize(8, ==, tree->lookup("x.foo.bar"_sr));
|
||||
assert_ssize(9, ==, tree->lookup(hostnames[9]));
|
||||
|
||||
constexpr StringRef names[] = {
|
||||
StringRef::from_lit("rab"), // 1
|
||||
StringRef::from_lit("zab"), // 2
|
||||
StringRef::from_lit("zzub"), // 3
|
||||
StringRef::from_lit("ab") // 4
|
||||
"rab"_sr, // 1
|
||||
"zab"_sr, // 2
|
||||
"zzub"_sr, // 3
|
||||
"ab"_sr // 4
|
||||
};
|
||||
num = array_size(names);
|
||||
|
||||
@@ -169,12 +169,11 @@ void test_shrpx_tls_cert_lookup_tree_add_ssl_ctx(void) {
|
||||
|
||||
assert_int(0, ==, rv);
|
||||
|
||||
assert_ssize(-1, ==,
|
||||
tree.lookup(StringRef::from_lit("not-used.nghttp2.org")));
|
||||
assert_ssize(0, ==, tree.lookup(StringRef::from_lit("test.nghttp2.org")));
|
||||
assert_ssize(1, ==, tree.lookup(StringRef::from_lit("w.test.nghttp2.org")));
|
||||
assert_ssize(2, ==, tree.lookup(StringRef::from_lit("www.test.nghttp2.org")));
|
||||
assert_ssize(3, ==, tree.lookup(StringRef::from_lit("test.example.com")));
|
||||
assert_ssize(-1, ==, tree.lookup("not-used.nghttp2.org"_sr));
|
||||
assert_ssize(0, ==, tree.lookup("test.nghttp2.org"_sr));
|
||||
assert_ssize(1, ==, tree.lookup("w.test.nghttp2.org"_sr));
|
||||
assert_ssize(2, ==, tree.lookup("www.test.nghttp2.org"_sr));
|
||||
assert_ssize(3, ==, tree.lookup("test.example.com"_sr));
|
||||
}
|
||||
|
||||
template <size_t N, size_t M>
|
||||
@@ -249,11 +248,10 @@ static Address parse_addr(const char *ipaddr) {
|
||||
void test_shrpx_tls_verify_numeric_hostname(void) {
|
||||
{
|
||||
// Successful IPv4 address match in SAN
|
||||
static constexpr char ipaddr[] = "127.0.0.1";
|
||||
static constexpr auto ipaddr = "127.0.0.1"_sr;
|
||||
auto cert = load_cert(NGHTTP2_SRC_DIR "/testdata/verify_hostname.crt");
|
||||
auto addr = parse_addr(ipaddr);
|
||||
auto rv =
|
||||
tls::verify_numeric_hostname(cert, StringRef::from_lit(ipaddr), &addr);
|
||||
auto addr = parse_addr(ipaddr.data());
|
||||
auto rv = tls::verify_numeric_hostname(cert, ipaddr, &addr);
|
||||
|
||||
assert_int(0, ==, rv);
|
||||
|
||||
@@ -262,11 +260,10 @@ void test_shrpx_tls_verify_numeric_hostname(void) {
|
||||
|
||||
{
|
||||
// Successful IPv6 address match in SAN
|
||||
static constexpr char ipaddr[] = "::1";
|
||||
static constexpr auto ipaddr = "::1"_sr;
|
||||
auto cert = load_cert(NGHTTP2_SRC_DIR "/testdata/verify_hostname.crt");
|
||||
auto addr = parse_addr(ipaddr);
|
||||
auto rv =
|
||||
tls::verify_numeric_hostname(cert, StringRef::from_lit(ipaddr), &addr);
|
||||
auto addr = parse_addr(ipaddr.data());
|
||||
auto rv = tls::verify_numeric_hostname(cert, ipaddr, &addr);
|
||||
|
||||
assert_int(0, ==, rv);
|
||||
|
||||
@@ -275,11 +272,10 @@ void test_shrpx_tls_verify_numeric_hostname(void) {
|
||||
|
||||
{
|
||||
// Unsuccessful IPv4 address match in SAN
|
||||
static constexpr char ipaddr[] = "192.168.0.127";
|
||||
static constexpr auto ipaddr = "192.168.0.127"_sr;
|
||||
auto cert = load_cert(NGHTTP2_SRC_DIR "/testdata/verify_hostname.crt");
|
||||
auto addr = parse_addr(ipaddr);
|
||||
auto rv =
|
||||
tls::verify_numeric_hostname(cert, StringRef::from_lit(ipaddr), &addr);
|
||||
auto addr = parse_addr(ipaddr.data());
|
||||
auto rv = tls::verify_numeric_hostname(cert, ipaddr, &addr);
|
||||
|
||||
assert_int(-1, ==, rv);
|
||||
|
||||
@@ -288,11 +284,10 @@ void test_shrpx_tls_verify_numeric_hostname(void) {
|
||||
|
||||
{
|
||||
// CommonName is not used if SAN is available
|
||||
static constexpr char ipaddr[] = "192.168.0.1";
|
||||
static constexpr auto ipaddr = "192.168.0.1"_sr;
|
||||
auto cert = load_cert(NGHTTP2_SRC_DIR "/testdata/ipaddr.crt");
|
||||
auto addr = parse_addr(ipaddr);
|
||||
auto rv =
|
||||
tls::verify_numeric_hostname(cert, StringRef::from_lit(ipaddr), &addr);
|
||||
auto addr = parse_addr(ipaddr.data());
|
||||
auto rv = tls::verify_numeric_hostname(cert, ipaddr, &addr);
|
||||
|
||||
assert_int(-1, ==, rv);
|
||||
|
||||
@@ -301,11 +296,10 @@ void test_shrpx_tls_verify_numeric_hostname(void) {
|
||||
|
||||
{
|
||||
// Successful IPv4 address match in CommonName
|
||||
static constexpr char ipaddr[] = "127.0.0.1";
|
||||
static constexpr auto ipaddr = "127.0.0.1"_sr;
|
||||
auto cert = load_cert(NGHTTP2_SRC_DIR "/testdata/nosan_ip.crt");
|
||||
auto addr = parse_addr(ipaddr);
|
||||
auto rv =
|
||||
tls::verify_numeric_hostname(cert, StringRef::from_lit(ipaddr), &addr);
|
||||
auto addr = parse_addr(ipaddr.data());
|
||||
auto rv = tls::verify_numeric_hostname(cert, ipaddr, &addr);
|
||||
|
||||
assert_int(0, ==, rv);
|
||||
|
||||
@@ -317,8 +311,7 @@ void test_shrpx_tls_verify_dns_hostname(void) {
|
||||
{
|
||||
// Successful exact DNS name match in SAN
|
||||
auto cert = load_cert(NGHTTP2_SRC_DIR "/testdata/verify_hostname.crt");
|
||||
auto rv = tls::verify_dns_hostname(
|
||||
cert, StringRef::from_lit("nghttp2.example.com"));
|
||||
auto rv = tls::verify_dns_hostname(cert, "nghttp2.example.com"_sr);
|
||||
|
||||
assert_int(0, ==, rv);
|
||||
|
||||
@@ -328,8 +321,7 @@ void test_shrpx_tls_verify_dns_hostname(void) {
|
||||
{
|
||||
// Successful wildcard DNS name match in SAN
|
||||
auto cert = load_cert(NGHTTP2_SRC_DIR "/testdata/verify_hostname.crt");
|
||||
auto rv = tls::verify_dns_hostname(
|
||||
cert, StringRef::from_lit("www.nghttp2.example.com"));
|
||||
auto rv = tls::verify_dns_hostname(cert, "www.nghttp2.example.com"_sr);
|
||||
|
||||
assert_int(0, ==, rv);
|
||||
|
||||
@@ -339,7 +331,7 @@ void test_shrpx_tls_verify_dns_hostname(void) {
|
||||
{
|
||||
// CommonName is not used if SAN is available.
|
||||
auto cert = load_cert(NGHTTP2_SRC_DIR "/testdata/verify_hostname.crt");
|
||||
auto rv = tls::verify_dns_hostname(cert, StringRef::from_lit("localhost"));
|
||||
auto rv = tls::verify_dns_hostname(cert, "localhost"_sr);
|
||||
|
||||
assert_int(-1, ==, rv);
|
||||
|
||||
@@ -349,7 +341,7 @@ void test_shrpx_tls_verify_dns_hostname(void) {
|
||||
{
|
||||
// Successful DNS name match in CommonName
|
||||
auto cert = load_cert(NGHTTP2_SRC_DIR "/testdata/nosan.crt");
|
||||
auto rv = tls::verify_dns_hostname(cert, StringRef::from_lit("localhost"));
|
||||
auto rv = tls::verify_dns_hostname(cert, "localhost"_sr);
|
||||
|
||||
assert_int(0, ==, rv);
|
||||
|
||||
|
||||
@@ -854,8 +854,7 @@ int Worker::create_quic_server_socket(UpstreamAddr &faddr) {
|
||||
hints.ai_flags |= AI_ADDRCONFIG;
|
||||
# endif // AI_ADDRCONFIG
|
||||
|
||||
auto node =
|
||||
faddr.host == StringRef::from_lit("*") ? nullptr : faddr.host.data();
|
||||
auto node = faddr.host == "*"_sr ? nullptr : faddr.host.data();
|
||||
|
||||
addrinfo *res, *rp;
|
||||
rv = getaddrinfo(node, service.c_str(), &hints, &res);
|
||||
@@ -1230,13 +1229,13 @@ const UpstreamAddr *Worker::find_quic_upstream_addr(const Address &local_addr) {
|
||||
if (faddr.port == 443 || faddr.port == 80) {
|
||||
switch (faddr.family) {
|
||||
case AF_INET:
|
||||
if (util::streq(faddr.hostport, StringRef::from_lit("0.0.0.0"))) {
|
||||
if (util::streq(faddr.hostport, "0.0.0.0"_sr)) {
|
||||
fallback_faddr = &faddr;
|
||||
}
|
||||
|
||||
break;
|
||||
case AF_INET6:
|
||||
if (util::streq(faddr.hostport, StringRef::from_lit("[::]"))) {
|
||||
if (util::streq(faddr.hostport, "[::]"_sr)) {
|
||||
fallback_faddr = &faddr;
|
||||
}
|
||||
|
||||
@@ -1247,14 +1246,13 @@ const UpstreamAddr *Worker::find_quic_upstream_addr(const Address &local_addr) {
|
||||
} else {
|
||||
switch (faddr.family) {
|
||||
case AF_INET:
|
||||
if (util::starts_with(faddr.hostport,
|
||||
StringRef::from_lit("0.0.0.0:"))) {
|
||||
if (util::starts_with(faddr.hostport, "0.0.0.0:"_sr)) {
|
||||
fallback_faddr = &faddr;
|
||||
}
|
||||
|
||||
break;
|
||||
case AF_INET6:
|
||||
if (util::starts_with(faddr.hostport, StringRef::from_lit("[::]:"))) {
|
||||
if (util::starts_with(faddr.hostport, "[::]:"_sr)) {
|
||||
fallback_faddr = &faddr;
|
||||
}
|
||||
|
||||
@@ -1333,7 +1331,7 @@ size_t match_downstream_addr_group_host(
|
||||
}
|
||||
}
|
||||
|
||||
group = router.match(StringRef::from_lit(""), path);
|
||||
group = router.match(""_sr, path);
|
||||
if (group != -1) {
|
||||
if (LOG_ENABLED(INFO)) {
|
||||
LOG(INFO) << "Found pattern with query " << path
|
||||
@@ -1366,7 +1364,7 @@ size_t match_downstream_addr_group(
|
||||
auto path = StringRef{std::begin(raw_path), query};
|
||||
|
||||
if (path.empty() || path[0] != '/') {
|
||||
path = StringRef::from_lit("/");
|
||||
path = "/"_sr;
|
||||
}
|
||||
|
||||
if (hostport.empty()) {
|
||||
|
||||
@@ -74,154 +74,134 @@ void test_shrpx_worker_match_downstream_addr_group(void) {
|
||||
}
|
||||
|
||||
assert_size(0, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "nghttp2.org"_sr, "/"_sr,
|
||||
groups, 255, balloc));
|
||||
|
||||
// port is removed
|
||||
assert_size(0, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("nghttp2.org:8080"),
|
||||
StringRef::from_lit("/"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "nghttp2.org:8080"_sr,
|
||||
"/"_sr, groups, 255, balloc));
|
||||
|
||||
// host is case-insensitive
|
||||
assert_size(4, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("WWW.nghttp2.org"),
|
||||
StringRef::from_lit("/alpha"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "WWW.nghttp2.org"_sr,
|
||||
"/alpha"_sr, groups, 255, balloc));
|
||||
|
||||
assert_size(1, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/bravo/"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "nghttp2.org"_sr,
|
||||
"/alpha/bravo/"_sr, groups, 255,
|
||||
balloc));
|
||||
|
||||
// /alpha/bravo also matches /alpha/bravo/
|
||||
assert_size(1, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/bravo"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "nghttp2.org"_sr,
|
||||
"/alpha/bravo"_sr, groups, 255,
|
||||
balloc));
|
||||
|
||||
// path part is case-sensitive
|
||||
assert_size(0, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/Alpha/bravo"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "nghttp2.org"_sr,
|
||||
"/Alpha/bravo"_sr, groups, 255,
|
||||
balloc));
|
||||
|
||||
assert_size(1, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/bravo/charlie"), groups, 255,
|
||||
balloc));
|
||||
match_downstream_addr_group(routerconf, "nghttp2.org"_sr,
|
||||
"/alpha/bravo/charlie"_sr, groups,
|
||||
255, balloc));
|
||||
|
||||
assert_size(2, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/charlie"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "nghttp2.org"_sr,
|
||||
"/alpha/charlie"_sr, groups, 255,
|
||||
balloc));
|
||||
|
||||
// pattern which does not end with '/' must match its entirely. So
|
||||
// this matches to group 0, not group 2.
|
||||
assert_size(0, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/charlie/"), groups, 255, balloc));
|
||||
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("example.org"),
|
||||
StringRef::from_lit("/"), groups, 255, balloc));
|
||||
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(routerconf, StringRef::from_lit(""),
|
||||
StringRef::from_lit("/"), groups, 255,
|
||||
match_downstream_addr_group(routerconf, "nghttp2.org"_sr,
|
||||
"/alpha/charlie/"_sr, groups, 255,
|
||||
balloc));
|
||||
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(routerconf, StringRef::from_lit(""),
|
||||
StringRef::from_lit("alpha"), groups,
|
||||
match_downstream_addr_group(routerconf, "example.org"_sr, "/"_sr,
|
||||
groups, 255, balloc));
|
||||
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(routerconf, ""_sr, "/"_sr, groups,
|
||||
255, balloc));
|
||||
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("foo/bar"),
|
||||
StringRef::from_lit("/"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, ""_sr, "alpha"_sr, groups,
|
||||
255, balloc));
|
||||
|
||||
// If path is StringRef::from_lit("*", only match with host + "/").
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(routerconf, "foo/bar"_sr, "/"_sr,
|
||||
groups, 255, balloc));
|
||||
|
||||
// If path is "*", only match with host + "/").
|
||||
assert_size(0, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("*"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "nghttp2.org"_sr, "*"_sr,
|
||||
groups, 255, balloc));
|
||||
|
||||
assert_size(5, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("[::1]"),
|
||||
StringRef::from_lit("/"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "[::1]"_sr, "/"_sr,
|
||||
groups, 255, balloc));
|
||||
assert_size(5, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("[::1]:8080"),
|
||||
StringRef::from_lit("/"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "[::1]:8080"_sr, "/"_sr,
|
||||
groups, 255, balloc));
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("[::1"),
|
||||
StringRef::from_lit("/"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "[::1"_sr, "/"_sr, groups,
|
||||
255, balloc));
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("[::1]8000"),
|
||||
StringRef::from_lit("/"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "[::1]8000"_sr, "/"_sr,
|
||||
groups, 255, balloc));
|
||||
|
||||
// Check the case where adding route extends tree
|
||||
assert_size(6, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/bravo/delta"), groups, 255,
|
||||
balloc));
|
||||
match_downstream_addr_group(routerconf, "nghttp2.org"_sr,
|
||||
"/alpha/bravo/delta"_sr, groups, 255,
|
||||
balloc));
|
||||
|
||||
assert_size(1, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/alpha/bravo/delta/"), groups, 255,
|
||||
balloc));
|
||||
match_downstream_addr_group(routerconf, "nghttp2.org"_sr,
|
||||
"/alpha/bravo/delta/"_sr, groups, 255,
|
||||
balloc));
|
||||
|
||||
// Check the case where query is done in a single node
|
||||
assert_size(7, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("example.com"),
|
||||
StringRef::from_lit("/alpha/bravo"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "example.com"_sr,
|
||||
"/alpha/bravo"_sr, groups, 255,
|
||||
balloc));
|
||||
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("example.com"),
|
||||
StringRef::from_lit("/alpha/bravo/"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "example.com"_sr,
|
||||
"/alpha/bravo/"_sr, groups, 255,
|
||||
balloc));
|
||||
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("example.com"),
|
||||
StringRef::from_lit("/alpha"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "example.com"_sr,
|
||||
"/alpha"_sr, groups, 255, balloc));
|
||||
|
||||
// Check the case where quey is done in a single node
|
||||
assert_size(8, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("192.168.0.1"),
|
||||
StringRef::from_lit("/alpha"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "192.168.0.1"_sr,
|
||||
"/alpha"_sr, groups, 255, balloc));
|
||||
|
||||
assert_size(8, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("192.168.0.1"),
|
||||
StringRef::from_lit("/alpha/"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "192.168.0.1"_sr,
|
||||
"/alpha/"_sr, groups, 255, balloc));
|
||||
|
||||
assert_size(8, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("192.168.0.1"),
|
||||
StringRef::from_lit("/alpha/bravo"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "192.168.0.1"_sr,
|
||||
"/alpha/bravo"_sr, groups, 255,
|
||||
balloc));
|
||||
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("192.168.0.1"),
|
||||
StringRef::from_lit("/alph"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "192.168.0.1"_sr,
|
||||
"/alph"_sr, groups, 255, balloc));
|
||||
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("192.168.0.1"),
|
||||
StringRef::from_lit("/"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "192.168.0.1"_sr, "/"_sr,
|
||||
groups, 255, balloc));
|
||||
|
||||
// Test for wildcard hosts
|
||||
auto g1 = std::make_shared<DownstreamAddrGroup>();
|
||||
@@ -236,52 +216,46 @@ void test_shrpx_worker_match_downstream_addr_group(void) {
|
||||
g3->pattern = ImmutableString::from_lit(".local");
|
||||
groups.push_back(std::move(g3));
|
||||
|
||||
wp.emplace_back(StringRef::from_lit("git.nghttp2.org"));
|
||||
wcrouter.add_route(StringRef::from_lit("gro.2ptthgn.tig"), 0);
|
||||
wp.back().router.add_route(StringRef::from_lit("/echo/"), 10);
|
||||
wp.emplace_back("git.nghttp2.org"_sr);
|
||||
wcrouter.add_route("gro.2ptthgn.tig"_sr, 0);
|
||||
wp.back().router.add_route("/echo/"_sr, 10);
|
||||
|
||||
wp.emplace_back(StringRef::from_lit(".nghttp2.org"));
|
||||
wcrouter.add_route(StringRef::from_lit("gro.2ptthgn."), 1);
|
||||
wp.back().router.add_route(StringRef::from_lit("/echo/"), 11);
|
||||
wp.back().router.add_route(StringRef::from_lit("/echo/foxtrot"), 12);
|
||||
wp.emplace_back(".nghttp2.org"_sr);
|
||||
wcrouter.add_route("gro.2ptthgn."_sr, 1);
|
||||
wp.back().router.add_route("/echo/"_sr, 11);
|
||||
wp.back().router.add_route("/echo/foxtrot"_sr, 12);
|
||||
|
||||
wp.emplace_back(StringRef::from_lit(".local"));
|
||||
wcrouter.add_route(StringRef::from_lit("lacol."), 2);
|
||||
wp.back().router.add_route(StringRef::from_lit("/"), 13);
|
||||
wp.emplace_back(".local"_sr);
|
||||
wcrouter.add_route("lacol."_sr, 2);
|
||||
wp.back().router.add_route("/"_sr, 13);
|
||||
|
||||
assert_size(11, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("git.nghttp2.org"),
|
||||
StringRef::from_lit("/echo"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "git.nghttp2.org"_sr,
|
||||
"/echo"_sr, groups, 255, balloc));
|
||||
|
||||
assert_size(10, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("0git.nghttp2.org"),
|
||||
StringRef::from_lit("/echo"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "0git.nghttp2.org"_sr,
|
||||
"/echo"_sr, groups, 255, balloc));
|
||||
|
||||
assert_size(11, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("it.nghttp2.org"),
|
||||
StringRef::from_lit("/echo"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "it.nghttp2.org"_sr,
|
||||
"/echo"_sr, groups, 255, balloc));
|
||||
|
||||
assert_size(255, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit(".nghttp2.org"),
|
||||
StringRef::from_lit("/echo/foxtrot"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, ".nghttp2.org"_sr,
|
||||
"/echo/foxtrot"_sr, groups, 255,
|
||||
balloc));
|
||||
|
||||
assert_size(9, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("alpha.nghttp2.org"),
|
||||
StringRef::from_lit("/golf"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "alpha.nghttp2.org"_sr,
|
||||
"/golf"_sr, groups, 255, balloc));
|
||||
|
||||
assert_size(0, ==,
|
||||
match_downstream_addr_group(
|
||||
routerconf, StringRef::from_lit("nghttp2.org"),
|
||||
StringRef::from_lit("/echo"), groups, 255, balloc));
|
||||
match_downstream_addr_group(routerconf, "nghttp2.org"_sr,
|
||||
"/echo"_sr, groups, 255, balloc));
|
||||
|
||||
assert_size(13, ==,
|
||||
match_downstream_addr_group(routerconf,
|
||||
StringRef::from_lit("test.local"),
|
||||
match_downstream_addr_group(routerconf, "test.local"_sr,
|
||||
StringRef{}, groups, 255, balloc));
|
||||
}
|
||||
|
||||
|
||||
@@ -380,6 +380,8 @@ public:
|
||||
constexpr StringRef(std::nullptr_t) = delete;
|
||||
constexpr explicit StringRef(const std::string &s)
|
||||
: base(s.c_str()), len(s.size()) {}
|
||||
constexpr explicit StringRef(const std::string_view &s)
|
||||
: base(s.data()), len(s.size()) {}
|
||||
constexpr explicit StringRef(const ImmutableString &s)
|
||||
: base(s.c_str()), len(s.size()) {}
|
||||
constexpr StringRef(const char *s) : base(s), len(traits_type::length(s)) {}
|
||||
@@ -395,9 +397,6 @@ public:
|
||||
: base(s.data()), len(s.size_bytes()) {}
|
||||
explicit StringRef(std::span<const uint8_t> s)
|
||||
: base(reinterpret_cast<const char *>(s.data())), len(s.size_bytes()) {}
|
||||
template <size_t N> static constexpr StringRef from_lit(const char (&s)[N]) {
|
||||
return StringRef{s, N - 1};
|
||||
}
|
||||
static constexpr StringRef from_maybe_nullptr(const char *s) noexcept {
|
||||
if (s == nullptr) {
|
||||
return StringRef();
|
||||
@@ -499,6 +498,10 @@ inline std::string &operator+=(std::string &lhs, const StringRef &rhs) {
|
||||
return lhs;
|
||||
}
|
||||
|
||||
constexpr StringRef operator""_sr(const char *str, size_t len) noexcept {
|
||||
return {str, len};
|
||||
}
|
||||
|
||||
template <typename T, std::size_t N>
|
||||
[[nodiscard]] std::span<const uint8_t, N == std::dynamic_extent
|
||||
? std::dynamic_extent
|
||||
|
||||
@@ -165,7 +165,7 @@ void test_template_string_ref(void) {
|
||||
assert_size(5, ==, ref.size());
|
||||
|
||||
// from string literal
|
||||
auto from_lit = StringRef::from_lit("alpha");
|
||||
auto from_lit = "alpha"_sr;
|
||||
|
||||
assert_stdsv_equal("alpha"sv, from_lit);
|
||||
assert_size(5, ==, from_lit.size());
|
||||
|
||||
12
src/tls.h
12
src/tls.h
@@ -28,11 +28,14 @@
|
||||
#include "nghttp2_config.h"
|
||||
|
||||
#include <cinttypes>
|
||||
#include <string_view>
|
||||
|
||||
#include <openssl/ssl.h>
|
||||
|
||||
#include "ssl_compat.h"
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
namespace nghttp2 {
|
||||
|
||||
namespace tls {
|
||||
@@ -41,19 +44,20 @@ namespace tls {
|
||||
// suites for TLSv1.2 by mozilla.
|
||||
//
|
||||
// https://wiki.mozilla.org/Security/Server_Side_TLS
|
||||
constexpr char DEFAULT_CIPHER_LIST[] =
|
||||
constexpr auto DEFAULT_CIPHER_LIST =
|
||||
"ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-"
|
||||
"AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-"
|
||||
"POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-"
|
||||
"AES256-GCM-SHA384";
|
||||
"AES256-GCM-SHA384"sv;
|
||||
|
||||
// Recommended general purpose "Modern compatibility" cipher suites
|
||||
// for TLSv1.3 by mozilla.
|
||||
//
|
||||
// https://wiki.mozilla.org/Security/Server_Side_TLS
|
||||
constexpr char DEFAULT_TLS13_CIPHER_LIST[] =
|
||||
constexpr auto DEFAULT_TLS13_CIPHER_LIST =
|
||||
#if defined(NGHTTP2_GENUINE_OPENSSL) || defined(NGHTTP2_OPENSSL_IS_LIBRESSL)
|
||||
"TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256"
|
||||
"TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:"
|
||||
"TLS_CHACHA20_POLY1305_SHA256"sv
|
||||
#else // !NGHTTP2_GENUINE_OPENSSL && !NGHTTP2_OPENSSL_IS_LIBRESSL
|
||||
""
|
||||
#endif // !NGHTTP2_GENUINE_OPENSSL && !NGHTTP2_OPENSSL_IS_LIBRESSL
|
||||
|
||||
16
src/util.h
16
src/util.h
@@ -60,20 +60,20 @@
|
||||
|
||||
namespace nghttp2 {
|
||||
|
||||
constexpr auto NGHTTP2_H2_ALPN = StringRef::from_lit("\x2h2");
|
||||
constexpr auto NGHTTP2_H2 = StringRef::from_lit("h2");
|
||||
constexpr auto NGHTTP2_H2_ALPN = "\x2h2"_sr;
|
||||
constexpr auto NGHTTP2_H2 = "h2"_sr;
|
||||
|
||||
// The additional HTTP/2 protocol ALPN protocol identifier we also
|
||||
// supports for our applications to make smooth migration into final
|
||||
// h2 ALPN ID.
|
||||
constexpr auto NGHTTP2_H2_16_ALPN = StringRef::from_lit("\x5h2-16");
|
||||
constexpr auto NGHTTP2_H2_16 = StringRef::from_lit("h2-16");
|
||||
constexpr auto NGHTTP2_H2_16_ALPN = "\x5h2-16"_sr;
|
||||
constexpr auto NGHTTP2_H2_16 = "h2-16"_sr;
|
||||
|
||||
constexpr auto NGHTTP2_H2_14_ALPN = StringRef::from_lit("\x5h2-14");
|
||||
constexpr auto NGHTTP2_H2_14 = StringRef::from_lit("h2-14");
|
||||
constexpr auto NGHTTP2_H2_14_ALPN = "\x5h2-14"_sr;
|
||||
constexpr auto NGHTTP2_H2_14 = "h2-14"_sr;
|
||||
|
||||
constexpr auto NGHTTP2_H1_1_ALPN = StringRef::from_lit("\x8http/1.1");
|
||||
constexpr auto NGHTTP2_H1_1 = StringRef::from_lit("http/1.1");
|
||||
constexpr auto NGHTTP2_H1_1_ALPN = "\x8http/1.1"_sr;
|
||||
constexpr auto NGHTTP2_H1_1 = "http/1.1"_sr;
|
||||
|
||||
constexpr size_t NGHTTP2_MAX_UINT64_DIGITS = str_size("18446744073709551615");
|
||||
|
||||
|
||||
328
src/util_test.cc
328
src/util_test.cc
@@ -89,24 +89,17 @@ const MunitSuite util_suite{
|
||||
};
|
||||
|
||||
void test_util_streq(void) {
|
||||
assert_true(
|
||||
util::streq(StringRef::from_lit("alpha"), StringRef::from_lit("alpha")));
|
||||
assert_false(util::streq(StringRef::from_lit("alpha"),
|
||||
StringRef::from_lit("alphabravo")));
|
||||
assert_false(util::streq(StringRef::from_lit("alphabravo"),
|
||||
StringRef::from_lit("alpha")));
|
||||
assert_false(
|
||||
util::streq(StringRef::from_lit("alpha"), StringRef::from_lit("alphA")));
|
||||
assert_false(util::streq(StringRef{}, StringRef::from_lit("a")));
|
||||
assert_true(util::streq("alpha"_sr, "alpha"_sr));
|
||||
assert_false(util::streq("alpha"_sr, "alphabravo"_sr));
|
||||
assert_false(util::streq("alphabravo"_sr, "alpha"_sr));
|
||||
assert_false(util::streq("alpha"_sr, "alphA"_sr));
|
||||
assert_false(util::streq(StringRef{}, "a"_sr));
|
||||
assert_true(util::streq(StringRef{}, StringRef{}));
|
||||
assert_false(util::streq(StringRef::from_lit("alpha"), StringRef{}));
|
||||
assert_false(util::streq("alpha"_sr, StringRef{}));
|
||||
|
||||
assert_false(
|
||||
util::streq(StringRef::from_lit("alph"), StringRef::from_lit("alpha")));
|
||||
assert_false(
|
||||
util::streq(StringRef::from_lit("alpha"), StringRef::from_lit("alph")));
|
||||
assert_false(
|
||||
util::streq(StringRef::from_lit("alpha"), StringRef::from_lit("alphA")));
|
||||
assert_false(util::streq("alph"_sr, "alpha"_sr));
|
||||
assert_false(util::streq("alpha"_sr, "alph"_sr));
|
||||
assert_false(util::streq("alpha"_sr, "alphA"_sr));
|
||||
|
||||
assert_true(util::streq_l("alpha", "alpha", 5));
|
||||
assert_true(util::streq_l("alpha", "alphabravo", 5));
|
||||
@@ -125,15 +118,11 @@ void test_util_strieq(void) {
|
||||
assert_false(util::strieq(std::string("alpha"), std::string("AlPhA ")));
|
||||
assert_false(util::strieq(std::string(), std::string("AlPhA ")));
|
||||
|
||||
assert_true(
|
||||
util::strieq(StringRef::from_lit("alpha"), StringRef::from_lit("alpha")));
|
||||
assert_true(
|
||||
util::strieq(StringRef::from_lit("alpha"), StringRef::from_lit("AlPhA")));
|
||||
assert_true(util::strieq("alpha"_sr, "alpha"_sr));
|
||||
assert_true(util::strieq("alpha"_sr, "AlPhA"_sr));
|
||||
assert_true(util::strieq(StringRef{}, StringRef{}));
|
||||
assert_false(util::strieq(StringRef::from_lit("alpha"),
|
||||
StringRef::from_lit("AlPhA ")));
|
||||
assert_false(
|
||||
util::strieq(StringRef::from_lit(""), StringRef::from_lit("AlPhA ")));
|
||||
assert_false(util::strieq("alpha"_sr, "AlPhA "_sr));
|
||||
assert_false(util::strieq(""_sr, "AlPhA "_sr));
|
||||
|
||||
assert_true(util::strieq_l("alpha", "alpha", 5));
|
||||
assert_true(util::strieq_l("alpha", "AlPhA", 5));
|
||||
@@ -141,11 +130,11 @@ void test_util_strieq(void) {
|
||||
assert_false(util::strieq_l("alpha", "AlPhA ", 6));
|
||||
assert_false(util::strieq_l("", "AlPhA ", 6));
|
||||
|
||||
assert_true(util::strieq_l("alpha", StringRef::from_lit("alpha")));
|
||||
assert_true(util::strieq_l("alpha", StringRef::from_lit("AlPhA")));
|
||||
assert_true(util::strieq_l("alpha", "alpha"_sr));
|
||||
assert_true(util::strieq_l("alpha", "AlPhA"_sr));
|
||||
assert_true(util::strieq_l("", StringRef{}));
|
||||
assert_false(util::strieq_l("alpha", StringRef::from_lit("AlPhA ")));
|
||||
assert_false(util::strieq_l("", StringRef::from_lit("AlPhA ")));
|
||||
assert_false(util::strieq_l("alpha", "AlPhA "_sr));
|
||||
assert_false(util::strieq_l("", "AlPhA "_sr));
|
||||
}
|
||||
|
||||
void test_util_inp_strlower(void) {
|
||||
@@ -165,10 +154,8 @@ void test_util_inp_strlower(void) {
|
||||
void test_util_to_base64(void) {
|
||||
BlockAllocator balloc(4096, 4096);
|
||||
|
||||
assert_stdsv_equal("AAA++B/="sv,
|
||||
util::to_base64(balloc, StringRef::from_lit("AAA--B_")));
|
||||
assert_stdsv_equal("AAA++B/B"sv,
|
||||
util::to_base64(balloc, StringRef::from_lit("AAA--B_B")));
|
||||
assert_stdsv_equal("AAA++B/="sv, util::to_base64(balloc, "AAA--B_"_sr));
|
||||
assert_stdsv_equal("AAA++B/B"sv, util::to_base64(balloc, "AAA--B_B"_sr));
|
||||
}
|
||||
|
||||
void test_util_to_token68(void) {
|
||||
@@ -183,14 +170,11 @@ void test_util_to_token68(void) {
|
||||
|
||||
void test_util_percent_encode_token(void) {
|
||||
BlockAllocator balloc(4096, 4096);
|
||||
assert_stdsv_equal(
|
||||
"h2"sv, util::percent_encode_token(balloc, StringRef::from_lit("h2")));
|
||||
assert_stdsv_equal(
|
||||
"h3~"sv, util::percent_encode_token(balloc, StringRef::from_lit("h3~")));
|
||||
assert_stdsv_equal("100%25"sv, util::percent_encode_token(
|
||||
balloc, StringRef::from_lit("100%")));
|
||||
assert_stdsv_equal("http%202"sv, util::percent_encode_token(
|
||||
balloc, StringRef::from_lit("http 2")));
|
||||
assert_stdsv_equal("h2"sv, util::percent_encode_token(balloc, "h2"_sr));
|
||||
assert_stdsv_equal("h3~"sv, util::percent_encode_token(balloc, "h3~"_sr));
|
||||
assert_stdsv_equal("100%25"sv, util::percent_encode_token(balloc, "100%"_sr));
|
||||
assert_stdsv_equal("http%202"sv,
|
||||
util::percent_encode_token(balloc, "http 2"_sr));
|
||||
}
|
||||
|
||||
void test_util_percent_decode(void) {
|
||||
@@ -211,25 +195,20 @@ void test_util_percent_decode(void) {
|
||||
}
|
||||
BlockAllocator balloc(1024, 1024);
|
||||
|
||||
assert_stdsv_equal(
|
||||
"foobar"sv,
|
||||
util::percent_decode(balloc, StringRef::from_lit("%66%6F%6f%62%61%72")));
|
||||
assert_stdsv_equal("foobar"sv,
|
||||
util::percent_decode(balloc, "%66%6F%6f%62%61%72"_sr));
|
||||
|
||||
assert_stdsv_equal(
|
||||
"f%6"sv, util::percent_decode(balloc, StringRef::from_lit("%66%6")));
|
||||
assert_stdsv_equal("f%6"sv, util::percent_decode(balloc, "%66%6"_sr));
|
||||
|
||||
assert_stdsv_equal("f%"sv,
|
||||
util::percent_decode(balloc, StringRef::from_lit("%66%")));
|
||||
assert_stdsv_equal("f%"sv, util::percent_decode(balloc, "%66%"_sr));
|
||||
}
|
||||
|
||||
void test_util_quote_string(void) {
|
||||
BlockAllocator balloc(4096, 4096);
|
||||
assert_stdsv_equal("alpha"sv,
|
||||
util::quote_string(balloc, StringRef::from_lit("alpha")));
|
||||
assert_stdsv_equal(""sv, util::quote_string(balloc, StringRef::from_lit("")));
|
||||
assert_stdsv_equal(
|
||||
"\\\"alpha\\\""sv,
|
||||
util::quote_string(balloc, StringRef::from_lit("\"alpha\"")));
|
||||
assert_stdsv_equal("alpha"sv, util::quote_string(balloc, "alpha"_sr));
|
||||
assert_stdsv_equal(""sv, util::quote_string(balloc, ""_sr));
|
||||
assert_stdsv_equal("\\\"alpha\\\""sv,
|
||||
util::quote_string(balloc, "\"alpha\""_sr));
|
||||
}
|
||||
|
||||
void test_util_utox(void) {
|
||||
@@ -464,51 +443,38 @@ void test_util_format_duration(void) {
|
||||
}
|
||||
|
||||
void test_util_starts_with(void) {
|
||||
assert_true(util::starts_with(StringRef::from_lit("foo"),
|
||||
StringRef::from_lit("foo")));
|
||||
assert_true(util::starts_with(StringRef::from_lit("fooo"),
|
||||
StringRef::from_lit("foo")));
|
||||
assert_true(util::starts_with(StringRef::from_lit("ofoo"), StringRef{}));
|
||||
assert_false(util::starts_with(StringRef::from_lit("ofoo"),
|
||||
StringRef::from_lit("foo")));
|
||||
assert_true(util::starts_with("foo"_sr, "foo"_sr));
|
||||
assert_true(util::starts_with("fooo"_sr, "foo"_sr));
|
||||
assert_true(util::starts_with("ofoo"_sr, StringRef{}));
|
||||
assert_false(util::starts_with("ofoo"_sr, "foo"_sr));
|
||||
|
||||
assert_true(util::istarts_with(StringRef::from_lit("FOO"),
|
||||
StringRef::from_lit("fOO")));
|
||||
assert_true(util::istarts_with(StringRef::from_lit("ofoo"), StringRef{}));
|
||||
assert_true(util::istarts_with(StringRef::from_lit("fOOo"),
|
||||
StringRef::from_lit("Foo")));
|
||||
assert_false(util::istarts_with(StringRef::from_lit("ofoo"),
|
||||
StringRef::from_lit("foo")));
|
||||
assert_true(util::istarts_with("FOO"_sr, "fOO"_sr));
|
||||
assert_true(util::istarts_with("ofoo"_sr, StringRef{}));
|
||||
assert_true(util::istarts_with("fOOo"_sr, "Foo"_sr));
|
||||
assert_false(util::istarts_with("ofoo"_sr, "foo"_sr));
|
||||
|
||||
assert_true(util::istarts_with_l(StringRef::from_lit("fOOo"), "Foo"));
|
||||
assert_false(util::istarts_with_l(StringRef::from_lit("ofoo"), "foo"));
|
||||
assert_true(util::istarts_with_l("fOOo"_sr, "Foo"));
|
||||
assert_false(util::istarts_with_l("ofoo"_sr, "foo"));
|
||||
}
|
||||
|
||||
void test_util_ends_with(void) {
|
||||
assert_true(
|
||||
util::ends_with(StringRef::from_lit("foo"), StringRef::from_lit("foo")));
|
||||
assert_true(util::ends_with(StringRef::from_lit("foo"), StringRef{}));
|
||||
assert_true(
|
||||
util::ends_with(StringRef::from_lit("ofoo"), StringRef::from_lit("foo")));
|
||||
assert_false(
|
||||
util::ends_with(StringRef::from_lit("ofoo"), StringRef::from_lit("fo")));
|
||||
assert_true(util::ends_with("foo"_sr, "foo"_sr));
|
||||
assert_true(util::ends_with("foo"_sr, StringRef{}));
|
||||
assert_true(util::ends_with("ofoo"_sr, "foo"_sr));
|
||||
assert_false(util::ends_with("ofoo"_sr, "fo"_sr));
|
||||
|
||||
assert_true(
|
||||
util::iends_with(StringRef::from_lit("fOo"), StringRef::from_lit("Foo")));
|
||||
assert_true(util::iends_with(StringRef::from_lit("foo"), StringRef{}));
|
||||
assert_true(util::iends_with(StringRef::from_lit("oFoo"),
|
||||
StringRef::from_lit("fOO")));
|
||||
assert_false(
|
||||
util::iends_with(StringRef::from_lit("ofoo"), StringRef::from_lit("fo")));
|
||||
assert_true(util::iends_with("fOo"_sr, "Foo"_sr));
|
||||
assert_true(util::iends_with("foo"_sr, StringRef{}));
|
||||
assert_true(util::iends_with("oFoo"_sr, "fOO"_sr));
|
||||
assert_false(util::iends_with("ofoo"_sr, "fo"_sr));
|
||||
|
||||
assert_true(util::iends_with_l(StringRef::from_lit("oFoo"), "fOO"));
|
||||
assert_false(util::iends_with_l(StringRef::from_lit("ofoo"), "fo"));
|
||||
assert_true(util::iends_with_l("oFoo"_sr, "fOO"));
|
||||
assert_false(util::iends_with_l("ofoo"_sr, "fo"));
|
||||
}
|
||||
|
||||
void test_util_parse_http_date(void) {
|
||||
assert_int64(1001939696, ==,
|
||||
util::parse_http_date(
|
||||
StringRef::from_lit("Mon, 1 Oct 2001 12:34:56 GMT")));
|
||||
util::parse_http_date("Mon, 1 Oct 2001 12:34:56 GMT"_sr));
|
||||
}
|
||||
|
||||
void test_util_localtime_date(void) {
|
||||
@@ -573,16 +539,16 @@ void test_util_get_uint64(void) {
|
||||
}
|
||||
|
||||
void test_util_parse_config_str_list(void) {
|
||||
auto res = util::parse_config_str_list(StringRef::from_lit("a"));
|
||||
auto res = util::parse_config_str_list("a"_sr);
|
||||
assert_size(1, ==, res.size());
|
||||
assert_stdstring_equal("a", res[0]);
|
||||
|
||||
res = util::parse_config_str_list(StringRef::from_lit("a,"));
|
||||
res = util::parse_config_str_list("a,"_sr);
|
||||
assert_size(2, ==, res.size());
|
||||
assert_stdstring_equal("a", res[0]);
|
||||
assert_stdstring_equal("", res[1]);
|
||||
|
||||
res = util::parse_config_str_list(StringRef::from_lit(":a::"), ':');
|
||||
res = util::parse_config_str_list(":a::"_sr, ':');
|
||||
assert_size(4, ==, res.size());
|
||||
assert_stdstring_equal("", res[0]);
|
||||
assert_stdstring_equal("a", res[1]);
|
||||
@@ -593,7 +559,7 @@ void test_util_parse_config_str_list(void) {
|
||||
assert_size(1, ==, res.size());
|
||||
assert_stdstring_equal("", res[0]);
|
||||
|
||||
res = util::parse_config_str_list(StringRef::from_lit("alpha,bravo,charlie"));
|
||||
res = util::parse_config_str_list("alpha,bravo,charlie"_sr);
|
||||
assert_size(3, ==, res.size());
|
||||
assert_stdstring_equal("alpha", res[0]);
|
||||
assert_stdstring_equal("bravo", res[1]);
|
||||
@@ -603,51 +569,42 @@ void test_util_parse_config_str_list(void) {
|
||||
void test_util_make_http_hostport(void) {
|
||||
BlockAllocator balloc(4096, 4096);
|
||||
|
||||
assert_stdsv_equal(
|
||||
"localhost"sv,
|
||||
util::make_http_hostport(balloc, StringRef::from_lit("localhost"), 80));
|
||||
assert_stdsv_equal("[::1]"sv, util::make_http_hostport(
|
||||
balloc, StringRef::from_lit("::1"), 443));
|
||||
assert_stdsv_equal(
|
||||
"localhost:3000"sv,
|
||||
util::make_http_hostport(balloc, StringRef::from_lit("localhost"), 3000));
|
||||
assert_stdsv_equal("localhost"sv,
|
||||
util::make_http_hostport(balloc, "localhost"_sr, 80));
|
||||
assert_stdsv_equal("[::1]"sv,
|
||||
util::make_http_hostport(balloc, "::1"_sr, 443));
|
||||
assert_stdsv_equal("localhost:3000"sv,
|
||||
util::make_http_hostport(balloc, "localhost"_sr, 3000));
|
||||
}
|
||||
|
||||
void test_util_make_hostport(void) {
|
||||
std::array<char, util::max_hostport> hostport_buf;
|
||||
assert_stdsv_equal("localhost:80"sv,
|
||||
util::make_hostport(std::begin(hostport_buf),
|
||||
StringRef::from_lit("localhost"), 80));
|
||||
assert_stdsv_equal("[::1]:443"sv,
|
||||
util::make_hostport(std::begin(hostport_buf),
|
||||
StringRef::from_lit("::1"), 443));
|
||||
|
||||
BlockAllocator balloc(4096, 4096);
|
||||
assert_stdsv_equal(
|
||||
"localhost:80"sv,
|
||||
util::make_hostport(balloc, StringRef::from_lit("localhost"), 80));
|
||||
util::make_hostport(std::begin(hostport_buf), "localhost"_sr, 80));
|
||||
assert_stdsv_equal(
|
||||
"[::1]:443"sv,
|
||||
util::make_hostport(balloc, StringRef::from_lit("::1"), 443));
|
||||
util::make_hostport(std::begin(hostport_buf), "::1"_sr, 443));
|
||||
|
||||
BlockAllocator balloc(4096, 4096);
|
||||
assert_stdsv_equal("localhost:80"sv,
|
||||
util::make_hostport(balloc, "localhost"_sr, 80));
|
||||
assert_stdsv_equal("[::1]:443"sv, util::make_hostport(balloc, "::1"_sr, 443));
|
||||
}
|
||||
|
||||
void test_util_strifind(void) {
|
||||
assert_true(util::strifind(StringRef::from_lit("gzip, deflate, bzip2"),
|
||||
StringRef::from_lit("gzip")));
|
||||
assert_true(util::strifind("gzip, deflate, bzip2"_sr, "gzip"_sr));
|
||||
|
||||
assert_true(util::strifind(StringRef::from_lit("gzip, deflate, bzip2"),
|
||||
StringRef::from_lit("dEflate")));
|
||||
assert_true(util::strifind("gzip, deflate, bzip2"_sr, "dEflate"_sr));
|
||||
|
||||
assert_true(util::strifind(StringRef::from_lit("gzip, deflate, bzip2"),
|
||||
StringRef::from_lit("BZIP2")));
|
||||
assert_true(util::strifind("gzip, deflate, bzip2"_sr, "BZIP2"_sr));
|
||||
|
||||
assert_true(util::strifind(StringRef::from_lit("nghttp2"), StringRef{}));
|
||||
assert_true(util::strifind("nghttp2"_sr, StringRef{}));
|
||||
|
||||
// Be aware this fact
|
||||
assert_false(util::strifind(StringRef{}, StringRef{}));
|
||||
|
||||
assert_false(util::strifind(StringRef::from_lit("nghttp2"),
|
||||
StringRef::from_lit("http1")));
|
||||
assert_false(util::strifind("nghttp2"_sr, "http1"_sr));
|
||||
}
|
||||
|
||||
void test_util_random_alpha_digit(void) {
|
||||
@@ -668,9 +625,8 @@ void test_util_random_alpha_digit(void) {
|
||||
void test_util_format_hex(void) {
|
||||
BlockAllocator balloc(4096, 4096);
|
||||
|
||||
assert_stdsv_equal(
|
||||
"0ff0"sv,
|
||||
util::format_hex(balloc, std::span{StringRef::from_lit("\x0f\xf0")}));
|
||||
assert_stdsv_equal("0ff0"sv,
|
||||
util::format_hex(balloc, std::span{"\x0f\xf0"_sr}));
|
||||
assert_stdsv_equal(""sv,
|
||||
util::format_hex(balloc, std::span<const uint8_t>{}));
|
||||
|
||||
@@ -701,111 +657,89 @@ void test_util_format_hex(void) {
|
||||
|
||||
void test_util_is_hex_string(void) {
|
||||
assert_true(util::is_hex_string(StringRef{}));
|
||||
assert_true(util::is_hex_string(StringRef::from_lit("0123456789abcdef")));
|
||||
assert_true(util::is_hex_string(StringRef::from_lit("0123456789ABCDEF")));
|
||||
assert_false(util::is_hex_string(StringRef::from_lit("000")));
|
||||
assert_false(util::is_hex_string(StringRef::from_lit("XX")));
|
||||
assert_true(util::is_hex_string("0123456789abcdef"_sr));
|
||||
assert_true(util::is_hex_string("0123456789ABCDEF"_sr));
|
||||
assert_false(util::is_hex_string("000"_sr));
|
||||
assert_false(util::is_hex_string("XX"_sr));
|
||||
}
|
||||
|
||||
void test_util_decode_hex(void) {
|
||||
BlockAllocator balloc(4096, 4096);
|
||||
|
||||
assert_stdsv_equal("\x0f\xf0"sv, StringRef{util::decode_hex(
|
||||
balloc, StringRef::from_lit("0ff0"))});
|
||||
assert_stdsv_equal("\x0f\xf0"sv,
|
||||
StringRef{util::decode_hex(balloc, "0ff0"_sr)});
|
||||
assert_stdsv_equal(""sv, StringRef{util::decode_hex(balloc, StringRef{})});
|
||||
}
|
||||
|
||||
void test_util_extract_host(void) {
|
||||
assert_stdsv_equal("foo"sv, util::extract_host(StringRef::from_lit("foo")));
|
||||
assert_stdsv_equal("foo"sv, util::extract_host(StringRef::from_lit("foo:")));
|
||||
assert_stdsv_equal("foo"sv, util::extract_host(StringRef::from_lit("foo:0")));
|
||||
assert_stdsv_equal("[::1]"sv,
|
||||
util::extract_host(StringRef::from_lit("[::1]")));
|
||||
assert_stdsv_equal("[::1]"sv,
|
||||
util::extract_host(StringRef::from_lit("[::1]:")));
|
||||
assert_stdsv_equal("foo"sv, util::extract_host("foo"_sr));
|
||||
assert_stdsv_equal("foo"sv, util::extract_host("foo:"_sr));
|
||||
assert_stdsv_equal("foo"sv, util::extract_host("foo:0"_sr));
|
||||
assert_stdsv_equal("[::1]"sv, util::extract_host("[::1]"_sr));
|
||||
assert_stdsv_equal("[::1]"sv, util::extract_host("[::1]:"_sr));
|
||||
|
||||
assert_true(util::extract_host(StringRef::from_lit(":foo")).empty());
|
||||
assert_true(util::extract_host(StringRef::from_lit("[::1")).empty());
|
||||
assert_true(util::extract_host(StringRef::from_lit("[::1]0")).empty());
|
||||
assert_true(util::extract_host(":foo"_sr).empty());
|
||||
assert_true(util::extract_host("[::1"_sr).empty());
|
||||
assert_true(util::extract_host("[::1]0"_sr).empty());
|
||||
assert_true(util::extract_host(StringRef{}).empty());
|
||||
}
|
||||
|
||||
void test_util_split_hostport(void) {
|
||||
assert_true(std::make_pair(StringRef::from_lit("foo"), StringRef{}) ==
|
||||
util::split_hostport(StringRef::from_lit("foo")));
|
||||
assert_true(
|
||||
std::make_pair(StringRef::from_lit("foo"), StringRef::from_lit("80")) ==
|
||||
util::split_hostport(StringRef::from_lit("foo:80")));
|
||||
assert_true(
|
||||
std::make_pair(StringRef::from_lit("::1"), StringRef::from_lit("80")) ==
|
||||
util::split_hostport(StringRef::from_lit("[::1]:80")));
|
||||
assert_true(std::make_pair(StringRef::from_lit("::1"), StringRef{}) ==
|
||||
util::split_hostport(StringRef::from_lit("[::1]")));
|
||||
assert_true(std::make_pair("foo"_sr, StringRef{}) ==
|
||||
util::split_hostport("foo"_sr));
|
||||
assert_true(std::make_pair("foo"_sr, "80"_sr) ==
|
||||
util::split_hostport("foo:80"_sr));
|
||||
assert_true(std::make_pair("::1"_sr, "80"_sr) ==
|
||||
util::split_hostport("[::1]:80"_sr));
|
||||
assert_true(std::make_pair("::1"_sr, StringRef{}) ==
|
||||
util::split_hostport("[::1]"_sr));
|
||||
|
||||
assert_true(std::make_pair(StringRef{}, StringRef{}) ==
|
||||
util::split_hostport(StringRef{}));
|
||||
assert_true(std::make_pair(StringRef{}, StringRef{}) ==
|
||||
util::split_hostport(StringRef::from_lit("[::1]:")));
|
||||
util::split_hostport("[::1]:"_sr));
|
||||
assert_true(std::make_pair(StringRef{}, StringRef{}) ==
|
||||
util::split_hostport(StringRef::from_lit("foo:")));
|
||||
util::split_hostport("foo:"_sr));
|
||||
assert_true(std::make_pair(StringRef{}, StringRef{}) ==
|
||||
util::split_hostport(StringRef::from_lit("[::1:")));
|
||||
util::split_hostport("[::1:"_sr));
|
||||
assert_true(std::make_pair(StringRef{}, StringRef{}) ==
|
||||
util::split_hostport(StringRef::from_lit("[::1]80")));
|
||||
util::split_hostport("[::1]80"_sr));
|
||||
}
|
||||
|
||||
void test_util_split_str(void) {
|
||||
assert_true(std::vector<StringRef>{StringRef::from_lit("")} ==
|
||||
util::split_str(StringRef::from_lit(""), ','));
|
||||
assert_true(std::vector<StringRef>{StringRef::from_lit("alpha")} ==
|
||||
util::split_str(StringRef::from_lit("alpha"), ','));
|
||||
assert_true((std::vector<StringRef>{StringRef::from_lit("alpha"),
|
||||
StringRef::from_lit("")}) ==
|
||||
util::split_str(StringRef::from_lit("alpha,"), ','));
|
||||
assert_true((std::vector<StringRef>{StringRef::from_lit("alpha"),
|
||||
StringRef::from_lit("bravo")}) ==
|
||||
util::split_str(StringRef::from_lit("alpha,bravo"), ','));
|
||||
assert_true((std::vector<StringRef>{StringRef::from_lit("alpha"),
|
||||
StringRef::from_lit("bravo"),
|
||||
StringRef::from_lit("charlie")}) ==
|
||||
util::split_str(StringRef::from_lit("alpha,bravo,charlie"), ','));
|
||||
assert_true(
|
||||
(std::vector<StringRef>{StringRef::from_lit("alpha"),
|
||||
StringRef::from_lit("bravo"),
|
||||
StringRef::from_lit("charlie")}) ==
|
||||
util::split_str(StringRef::from_lit("alpha,bravo,charlie"), ',', 0));
|
||||
assert_true(std::vector<StringRef>{StringRef::from_lit("")} ==
|
||||
util::split_str(StringRef::from_lit(""), ',', 1));
|
||||
assert_true(std::vector<StringRef>{StringRef::from_lit("")} ==
|
||||
util::split_str(StringRef::from_lit(""), ',', 2));
|
||||
assert_true(
|
||||
(std::vector<StringRef>{StringRef::from_lit("alpha"),
|
||||
StringRef::from_lit("bravo,charlie")}) ==
|
||||
util::split_str(StringRef::from_lit("alpha,bravo,charlie"), ',', 2));
|
||||
assert_true(std::vector<StringRef>{StringRef::from_lit("alpha")} ==
|
||||
util::split_str(StringRef::from_lit("alpha"), ',', 2));
|
||||
assert_true((std::vector<StringRef>{StringRef::from_lit("alpha"),
|
||||
StringRef::from_lit("")}) ==
|
||||
util::split_str(StringRef::from_lit("alpha,"), ',', 2));
|
||||
assert_true(std::vector<StringRef>{StringRef::from_lit("alpha")} ==
|
||||
util::split_str(StringRef::from_lit("alpha"), ',', 0));
|
||||
assert_true(
|
||||
std::vector<StringRef>{StringRef::from_lit("alpha,bravo,charlie")} ==
|
||||
util::split_str(StringRef::from_lit("alpha,bravo,charlie"), ',', 1));
|
||||
assert_true(std::vector<StringRef>{""_sr} == util::split_str(""_sr, ','));
|
||||
assert_true(std::vector<StringRef>{"alpha"_sr} ==
|
||||
util::split_str("alpha"_sr, ','));
|
||||
assert_true((std::vector<StringRef>{"alpha"_sr, ""_sr}) ==
|
||||
util::split_str("alpha,"_sr, ','));
|
||||
assert_true((std::vector<StringRef>{"alpha"_sr, "bravo"_sr}) ==
|
||||
util::split_str("alpha,bravo"_sr, ','));
|
||||
assert_true((std::vector<StringRef>{"alpha"_sr, "bravo"_sr, "charlie"_sr}) ==
|
||||
util::split_str("alpha,bravo,charlie"_sr, ','));
|
||||
assert_true((std::vector<StringRef>{"alpha"_sr, "bravo"_sr, "charlie"_sr}) ==
|
||||
util::split_str("alpha,bravo,charlie"_sr, ',', 0));
|
||||
assert_true(std::vector<StringRef>{""_sr} == util::split_str(""_sr, ',', 1));
|
||||
assert_true(std::vector<StringRef>{""_sr} == util::split_str(""_sr, ',', 2));
|
||||
assert_true((std::vector<StringRef>{"alpha"_sr, "bravo,charlie"_sr}) ==
|
||||
util::split_str("alpha,bravo,charlie"_sr, ',', 2));
|
||||
assert_true(std::vector<StringRef>{"alpha"_sr} ==
|
||||
util::split_str("alpha"_sr, ',', 2));
|
||||
assert_true((std::vector<StringRef>{"alpha"_sr, ""_sr}) ==
|
||||
util::split_str("alpha,"_sr, ',', 2));
|
||||
assert_true(std::vector<StringRef>{"alpha"_sr} ==
|
||||
util::split_str("alpha"_sr, ',', 0));
|
||||
assert_true(std::vector<StringRef>{"alpha,bravo,charlie"_sr} ==
|
||||
util::split_str("alpha,bravo,charlie"_sr, ',', 1));
|
||||
}
|
||||
|
||||
void test_util_rstrip(void) {
|
||||
BlockAllocator balloc(4096, 4096);
|
||||
|
||||
assert_stdsv_equal("alpha"sv,
|
||||
util::rstrip(balloc, StringRef::from_lit("alpha")));
|
||||
assert_stdsv_equal("alpha"sv,
|
||||
util::rstrip(balloc, StringRef::from_lit("alpha ")));
|
||||
assert_stdsv_equal("alpha"sv,
|
||||
util::rstrip(balloc, StringRef::from_lit("alpha \t")));
|
||||
assert_stdsv_equal(""sv, util::rstrip(balloc, StringRef::from_lit("")));
|
||||
assert_stdsv_equal(""sv,
|
||||
util::rstrip(balloc, StringRef::from_lit("\t\t\t ")));
|
||||
assert_stdsv_equal("alpha"sv, util::rstrip(balloc, "alpha"_sr));
|
||||
assert_stdsv_equal("alpha"sv, util::rstrip(balloc, "alpha "_sr));
|
||||
assert_stdsv_equal("alpha"sv, util::rstrip(balloc, "alpha \t"_sr));
|
||||
assert_stdsv_equal(""sv, util::rstrip(balloc, ""_sr));
|
||||
assert_stdsv_equal(""sv, util::rstrip(balloc, "\t\t\t "_sr));
|
||||
}
|
||||
|
||||
} // namespace shrpx
|
||||
|
||||
Reference in New Issue
Block a user