Splits client and server deflate config

pull/144/head
SirCipher 5 years ago
parent 31d05fbd96
commit e0cadce7af
  1. 2
      autobahn/fuzzingclient.json
  2. 23
      src/extensions/compression/deflate.rs
  3. 13
      src/extensions/compression/mod.rs
  4. 2
      src/protocol/mod.rs

@ -6,7 +6,7 @@
"url": "ws://127.0.0.1:9002"
}
],
"cases": ["13.7.11"],
"cases": ["*"],
"exclude-cases": [],
"exclude-agent-cases": {}
}

@ -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<Option<u8>, DeflateExtensionError> {
@ -674,12 +685,6 @@ impl From<InvalidHeaderValue> 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<Frame, crate::Error> {
if let OpCode::Data(_) = frame.header().opcode {

@ -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)
}
}
}

@ -244,7 +244,7 @@ impl WebSocketContext {
/// Create a WebSocket context that manages a post-handshake stream.
pub fn new(role: Role, config: Option<WebSocketConfig>) -> 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,

Loading…
Cancel
Save