diff --git a/rpxy-bin/Cargo.toml b/rpxy-bin/Cargo.toml index 5e07d0e..dfff39f 100644 --- a/rpxy-bin/Cargo.toml +++ b/rpxy-bin/Cargo.toml @@ -13,8 +13,8 @@ publish.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [features] -default = ["http3-quinn", "cache", "rustls-backend", "acme", "post-quantum"] -# default = ["http3-s2n", "cache", "rustls-backend", "acme", "post-quantum"] +default = ["http3-quinn", "cache", "rustls-backend", "sticky-cookie", "acme", "post-quantum"] +# default = ["http3-s2n", "cache", "rustls-backend", "sticky-cookie", "acme", "post-quantum"] http3-quinn = ["rpxy-lib/http3-quinn"] http3-s2n = ["rpxy-lib/http3-s2n"] native-tls-backend = ["rpxy-lib/native-tls-backend"] @@ -23,11 +23,10 @@ webpki-roots = ["rpxy-lib/webpki-roots"] cache = ["rpxy-lib/cache"] acme = ["rpxy-lib/acme", "rpxy-acme"] post-quantum = ["rpxy-lib/post-quantum"] +sticky-cookie = ["rpxy-lib/sticky-cookie"] [dependencies] -rpxy-lib = { path = "../rpxy-lib/", default-features = false, features = [ - "sticky-cookie", -] } +rpxy-lib = { path = "../rpxy-lib/", default-features = false } # TODO: pin mimalloc due to compilation failure by musl mimalloc = { version = "=0.1.44", default-features = false } diff --git a/rpxy-lib/src/backend/load_balance/load_balance_main.rs b/rpxy-lib/src/backend/load_balance/load_balance_main.rs index 6d14572..78371fc 100644 --- a/rpxy-lib/src/backend/load_balance/load_balance_main.rs +++ b/rpxy-lib/src/backend/load_balance/load_balance_main.rs @@ -131,6 +131,4 @@ impl LoadBalance { pub struct LoadBalanceContext { #[cfg(feature = "sticky-cookie")] pub sticky_cookie: StickyCookie, - #[cfg(not(feature = "sticky-cookie"))] - pub sticky_cookie: (), } diff --git a/rpxy-lib/src/backend/load_balance/mod.rs b/rpxy-lib/src/backend/load_balance/mod.rs index b77f72c..28e7f20 100644 --- a/rpxy-lib/src/backend/load_balance/mod.rs +++ b/rpxy-lib/src/backend/load_balance/mod.rs @@ -4,6 +4,7 @@ mod load_balance_sticky; #[cfg(feature = "sticky-cookie")] mod sticky_cookie; +#[cfg(feature = "sticky-cookie")] use super::upstream::Upstream; use thiserror::Error; @@ -16,6 +17,7 @@ pub use load_balance_sticky::LoadBalanceStickyBuilder; pub use sticky_cookie::{StickyCookie, StickyCookieValue}; /// Result type for load balancing +#[cfg(feature = "sticky-cookie")] type LoadBalanceResult = std::result::Result; /// Describes things that can go wrong in the Load Balance #[derive(Debug, Error)] diff --git a/rpxy-lib/src/message_handler/handler_main.rs b/rpxy-lib/src/message_handler/handler_main.rs index 920e55c..1b3663e 100644 --- a/rpxy-lib/src/message_handler/handler_main.rs +++ b/rpxy-lib/src/message_handler/handler_main.rs @@ -6,7 +6,7 @@ use super::{ utils_request::InspectParseHost, }; use crate::{ - backend::{BackendAppManager, LoadBalanceContext}, + backend::BackendAppManager, error::*, forwarder::{ForwardRequest, Forwarder}, globals::Globals, @@ -25,7 +25,7 @@ use tokio::io::copy_bidirectional; /// Context object to handle sticky cookies at HTTP message handler pub(super) struct HandlerContext { #[cfg(feature = "sticky-cookie")] - pub(super) context_lb: Option, + pub(super) context_lb: Option, #[cfg(not(feature = "sticky-cookie"))] pub(super) context_lb: Option<()>, } diff --git a/rpxy-lib/src/message_handler/utils_headers.rs b/rpxy-lib/src/message_handler/utils_headers.rs index cab6e01..354fa6e 100644 --- a/rpxy-lib/src/message_handler/utils_headers.rs +++ b/rpxy-lib/src/message_handler/utils_headers.rs @@ -22,6 +22,8 @@ pub(super) fn takeout_sticky_cookie_lb_context( headers: &mut HeaderMap, expected_cookie_name: &str, ) -> Result> { + use anyhow::ensure; + let mut headers_clone = headers.clone(); match headers_clone.entry(header::COOKIE) {