Commit ccaf2333 authored by Tatsuhiro Tsujikawa's avatar Tatsuhiro Tsujikawa

nghttpx: Enable websocket over h3

parent 0066bf8e
......@@ -896,7 +896,8 @@ bool Downstream::get_non_final_response() const {
}
bool Downstream::supports_non_final_response() const {
return req_.http_major == 2 || (req_.http_major == 1 && req_.http_minor == 1);
return req_.http_major == 3 || req_.http_major == 2 ||
(req_.http_major == 1 && req_.http_minor == 1);
}
bool Downstream::get_upgraded() const { return upgraded_; }
......@@ -947,7 +948,8 @@ bool Downstream::expect_response_trailer() const {
// In HTTP/2, if final response HEADERS does not bear END_STREAM it
// is possible trailer fields might come, regardless of request
// method or status code.
return !resp_.headers_only && resp_.http_major == 2;
return !resp_.headers_only &&
(resp_.http_major == 3 || resp_.http_major == 2);
}
namespace {
......
......@@ -168,6 +168,11 @@ void test_downstream_supports_non_final_response(void) {
Downstream d(nullptr, nullptr, 0);
auto &req = d.request();
req.http_major = 3;
req.http_minor = 0;
CU_ASSERT(d.supports_non_final_response());
req.http_major = 2;
req.http_minor = 0;
......
......@@ -2312,10 +2312,16 @@ int Http3Upstream::setup_httpconn() {
shrpx::http_reset_stream,
};
auto config = get_config();
nghttp3_settings settings;
nghttp3_settings_default(&settings);
settings.qpack_max_table_capacity = 4_k;
if (!config->http2_proxy) {
settings.enable_connect_protocol = 1;
}
auto mem = nghttp3_mem_default();
rv = nghttp3_conn_server_new(&httpconn_, &callbacks, &settings, mem, this);
......
......@@ -523,7 +523,9 @@ int HttpDownstreamConnection::push_request_headers() {
(xffconf.strip_incoming ? http2::HDOP_STRIP_X_FORWARDED_FOR : 0) |
(xfpconf.strip_incoming ? http2::HDOP_STRIP_X_FORWARDED_PROTO : 0) |
(earlydataconf.strip_incoming ? http2::HDOP_STRIP_EARLY_DATA : 0) |
(req.http_major == 2 ? http2::HDOP_STRIP_SEC_WEBSOCKET_KEY : 0);
((req.http_major == 3 || req.http_major == 2)
? http2::HDOP_STRIP_SEC_WEBSOCKET_KEY
: 0);
http2::build_http1_headers_from_headers(buf, req.fs.headers(), build_flags);
......@@ -543,7 +545,7 @@ int HttpDownstreamConnection::push_request_headers() {
}
if (req.connect_proto == ConnectProto::WEBSOCKET) {
if (req.http_major == 2) {
if (req.http_major == 3 || req.http_major == 2) {
std::array<uint8_t, 16> nonce;
if (RAND_bytes(nonce.data(), nonce.size()) != 1) {
return -1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment