From bf03207ca9b85232a2b3b2f7cc8311238ec5a2d6 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Mon, 17 Jul 2023 16:59:10 -0400 Subject: [PATCH] Add http2 optional feature (#3072) Co-authored-by: Rob Ede --- actix-multipart/Cargo.toml | 2 +- actix-web/CHANGES.md | 2 +- actix-web/Cargo.toml | 10 ++++++---- actix-web/src/rmap.rs | 2 +- actix-web/src/server.rs | 2 ++ 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/actix-multipart/Cargo.toml b/actix-multipart/Cargo.toml index 384c0e151..f186bf8d9 100644 --- a/actix-multipart/Cargo.toml +++ b/actix-multipart/Cargo.toml @@ -40,7 +40,7 @@ serde_json = "1" serde_plain = "1" # TODO(MSRV 1.60): replace with dep: prefix tempfile-dep = { package = "tempfile", version = "3.4", optional = true } -tokio = { version = "1.24.2", features = ["sync"] } +tokio = { version = "1.24.2", features = ["io-util", "sync"] } [dev-dependencies] actix-http = "3" diff --git a/actix-web/CHANGES.md b/actix-web/CHANGES.md index 417bb5a4c..6c83d129b 100644 --- a/actix-web/CHANGES.md +++ b/actix-web/CHANGES.md @@ -4,7 +4,7 @@ ### Added -- Add `HttpServer::{bind,listen}_auto_h2c()` method. +- Add `HttpServer::{bind, listen}_auto_h2c()` method behind new `http2` crate feature. - Add `Resource::{get, post, etc...}` methods for more concisely adding routes that don't need additional guards. ### Changed diff --git a/actix-web/Cargo.toml b/actix-web/Cargo.toml index 0091175be..4322fb871 100644 --- a/actix-web/Cargo.toml +++ b/actix-web/Cargo.toml @@ -28,7 +28,7 @@ name = "actix_web" path = "src/lib.rs" [features] -default = ["macros", "compress-brotli", "compress-gzip", "compress-zstd", "cookies"] +default = ["macros", "compress-brotli", "compress-gzip", "compress-zstd", "cookies", "http2"] # Brotli algorithm content-encoding support compress-brotli = ["actix-http/compress-brotli", "__compress"] @@ -46,11 +46,13 @@ cookies = ["cookie"] # Secure & signed cookies secure-cookies = ["cookies", "cookie/secure"] +http2 = ["actix-http/http2"] + # TLS via OpenSSL -openssl = ["actix-http/openssl", "actix-tls/accept", "actix-tls/openssl"] +openssl = ["http2", "actix-http/openssl", "actix-tls/accept", "actix-tls/openssl"] # TLS via Rustls -rustls = ["actix-http/rustls", "actix-tls/accept", "actix-tls/rustls"] +rustls = ["http2", "actix-http/rustls", "actix-tls/accept", "actix-tls/rustls"] # Internal (PRIVATE!) features used to aid testing and checking feature status. # Don't rely on these whatsoever. They may disappear at anytime. @@ -68,7 +70,7 @@ actix-service = "2" actix-utils = "3" actix-tls = { version = "3", default-features = false, optional = true } -actix-http = { version = "3.3", features = ["http2", "ws"] } +actix-http = { version = "3.3", features = ["ws"] } actix-router = "0.5" actix-web-codegen = { version = "4.2", optional = true } diff --git a/actix-web/src/rmap.rs b/actix-web/src/rmap.rs index 8a2ec3297..462f3b313 100644 --- a/actix-web/src/rmap.rs +++ b/actix-web/src/rmap.rs @@ -81,7 +81,7 @@ impl ResourceMap { "`pattern` and `nested` mismatch" ); // parents absorb references to the named resources of children - self.named.extend(new_node.named.clone().into_iter()); + self.named.extend(new_node.named.clone()); self.nodes.as_mut().unwrap().push(new_node); } else { let new_node = Rc::new(ResourceMap { diff --git a/actix-web/src/server.rs b/actix-web/src/server.rs index b96a84939..a540da7c8 100644 --- a/actix-web/src/server.rs +++ b/actix-web/src/server.rs @@ -356,6 +356,7 @@ where /// Resolves socket address(es) and binds server to created listener(s) for plaintext HTTP/1.x /// or HTTP/2 connections. + #[cfg(feature = "http2")] pub fn bind_auto_h2c(mut self, addrs: A) -> io::Result { let sockets = bind_addrs(addrs, self.backlog)?; @@ -453,6 +454,7 @@ where } /// Binds to existing listener for accepting incoming plaintext HTTP/1.x or HTTP/2 connections. + #[cfg(feature = "http2")] pub fn listen_auto_h2c(mut self, lst: net::TcpListener) -> io::Result { let cfg = self.config.clone(); let factory = self.factory.clone();