diff --git a/autobahn/fuzzingclient.json b/autobahn/fuzzingclient.json index 5cc1933..a265c37 100644 --- a/autobahn/fuzzingclient.json +++ b/autobahn/fuzzingclient.json @@ -6,7 +6,7 @@ "url": "ws://127.0.0.1:9002" } ], - "cases": ["13.7.11"], + "cases": ["*"], "exclude-cases": [], "exclude-agent-cases": {} } diff --git a/src/extensions/compression/deflate.rs b/src/extensions/compression/deflate.rs index 1b08fb9..dfdcbd8 100644 --- a/src/extensions/compression/deflate.rs +++ b/src/extensions/compression/deflate.rs @@ -256,8 +256,8 @@ pub struct DeflateExt { } impl DeflateExt { - /// Creates a `DeflateExt` instance using the provided configuration. - pub fn new(config: DeflateConfig) -> DeflateExt { + /// Creates a `DeflateExt` instance for a client using the provided configuration. + pub fn client(config: DeflateConfig) -> DeflateExt { DeflateExt { config, fragment_buffer: FragmentBuffer::new(config.max_message_size), @@ -266,9 +266,20 @@ impl DeflateExt { uncompressed_extension: UncompressedExt::new(config.max_message_size()), } } + + /// Creates a `DeflateExt` instance for a server using the provided configuration. + pub fn server(config: DeflateConfig) -> DeflateExt { + DeflateExt { + config, + fragment_buffer: FragmentBuffer::new(config.max_message_size), + inflator: Inflator::new(config.client_max_window_bits), + deflator: Deflator::new(config.compression_level, config.server_max_window_bits), + uncompressed_extension: UncompressedExt::new(config.max_message_size()), + } + } } -fn parse_window_parameter<'a>( +fn parse_window_parameter( window_param: &str, max_window_bits: u8, ) -> Result, DeflateExtensionError> { @@ -674,12 +685,6 @@ impl From for DeflateExtensionError { } } -impl Default for DeflateExt { - fn default() -> Self { - DeflateExt::new(Default::default()) - } -} - impl WebSocketExtension for DeflateExt { fn on_send_frame(&mut self, mut frame: Frame) -> Result { if let OpCode::Data(_) = frame.header().opcode { diff --git a/src/extensions/compression/mod.rs b/src/extensions/compression/mod.rs index 7027d5a..1b3a666 100644 --- a/src/extensions/compression/mod.rs +++ b/src/extensions/compression/mod.rs @@ -9,7 +9,7 @@ use crate::extensions::compression::uncompressed::UncompressedExt; use crate::extensions::WebSocketExtension; use crate::protocol::frame::coding::Data; use crate::protocol::frame::{ExtensionHeaders, Frame}; -use crate::protocol::WebSocketConfig; +use crate::protocol::{Role, WebSocketConfig}; use crate::Message; use http::{Request, Response}; use std::borrow::Cow; @@ -43,15 +43,20 @@ pub enum CompressionSwitcher { } impl CompressionSwitcher { - /// Builds a new `CompressionSwitcher` from the provided compression level. - pub fn from_config(config: WsCompression) -> CompressionSwitcher { + /// Builds a new `CompressionSwitcher` from the provided compression level and role. + pub fn from_config(config: WsCompression, _role: Role) -> CompressionSwitcher { match config { WsCompression::None(size) => { CompressionSwitcher::Uncompressed(UncompressedExt::new(size)) } #[cfg(feature = "deflate")] WsCompression::Deflate(config) => { - CompressionSwitcher::Compressed(DeflateExt::new(config)) + let ext = match _role { + Role::Client => DeflateExt::client(config), + Role::Server => DeflateExt::server(config), + }; + + CompressionSwitcher::Compressed(ext) } } } diff --git a/src/protocol/mod.rs b/src/protocol/mod.rs index 91c9860..c5fe629 100644 --- a/src/protocol/mod.rs +++ b/src/protocol/mod.rs @@ -244,7 +244,7 @@ impl WebSocketContext { /// Create a WebSocket context that manages a post-handshake stream. pub fn new(role: Role, config: Option) -> Self { let config = config.unwrap_or_else(Default::default); - let decoder = CompressionSwitcher::from_config(config.compression); + let decoder = CompressionSwitcher::from_config(config.compression, role); WebSocketContext { role,