Compare commits

...

2 Commits

Author SHA1 Message Date
Alex Bakon
865cb16dc4 Merge latest upstream/master
Some checks failed
CI / Format (push) Has been cancelled
CI / Clippy (push) Has been cancelled
CI / Test (stable) (push) Has been cancelled
CI / Test MSRV (1.63.0) (push) Has been cancelled
CI / Autobahn tests (beta) (push) Has been cancelled
CI / Autobahn tests (nightly) (push) Has been cancelled
CI / Autobahn tests (stable) (push) Has been cancelled
2025-09-22 14:11:11 -04:00
Daniel Abramov
c0a099e3d1 refactor: simplify processing incoming data frames 2025-09-14 18:32:33 +02:00
2 changed files with 14 additions and 19 deletions

View File

@ -95,13 +95,11 @@ enum IncompleteMessageCollector {
impl IncompleteMessage {
/// Create new.
pub fn new(message_type: IncompleteMessageType) -> Self {
pub fn new(message_type: MessageType) -> Self {
IncompleteMessage {
collector: match message_type {
IncompleteMessageType::Binary => IncompleteMessageCollector::Binary(Vec::new()),
IncompleteMessageType::Text => {
IncompleteMessageCollector::Text(StringCollector::new())
}
MessageType::Binary => IncompleteMessageCollector::Binary(Vec::new()),
MessageType::Text => IncompleteMessageCollector::Text(StringCollector::new()),
},
#[cfg(feature = "deflate")]
compressed: false,
@ -110,13 +108,11 @@ impl IncompleteMessage {
/// Create new instance that will hold compressed data.
#[cfg(feature = "deflate")]
pub fn new_compressed(message_type: IncompleteMessageType) -> Self {
pub fn new_compressed(message_type: MessageType) -> Self {
IncompleteMessage {
collector: match message_type {
IncompleteMessageType::Binary => IncompleteMessageCollector::Binary(Vec::new()),
IncompleteMessageType::Text => {
IncompleteMessageCollector::Text(StringCollector::new())
}
MessageType::Binary => IncompleteMessageCollector::Binary(Vec::new()),
MessageType::Text => IncompleteMessageCollector::Text(StringCollector::new()),
},
compressed: true,
}
@ -174,7 +170,7 @@ impl IncompleteMessage {
}
/// The type of incomplete message.
pub enum IncompleteMessageType {
pub enum MessageType {
Text,
Binary,
}

View File

@ -11,7 +11,7 @@ use self::{
coding::{CloseCode, Control as OpCtl, Data as OpData, OpCode},
Frame, FrameCodec,
},
message::{IncompleteMessage, IncompleteMessageType},
message::{IncompleteMessage, MessageType},
};
use crate::{
error::{CapacityError, Error, ProtocolError, Result},
@ -829,7 +829,7 @@ impl WebSocketContext {
// received with compression disabled, but the
// initial frame of the message was received
// with compression *enabled* and RSV1 set.
//
//
// The only way to get here is to manually
// disable compression for a stream after it's
// been established, which is arguably operator
@ -858,20 +858,19 @@ impl WebSocketContext {
Ok(None)
}
(_, Some(_)) => Err(ProtocolError::ExpectedFragment(data)),
(OpData::Text, _) => Ok(Some((payload, IncompleteMessageType::Text))),
(OpData::Binary, _) => Ok(Some((payload, IncompleteMessageType::Binary))),
(OpData::Text, _) => Ok(Some((payload, MessageType::Text))),
(OpData::Binary, _) => Ok(Some((payload, MessageType::Binary))),
(OpData::Reserved(i), _) => Err(ProtocolError::UnknownDataFrameType(i)),
}?;
match (payload, fin) {
(None, true) => Ok(Some(self.incomplete.take().unwrap().complete()?)),
(None, false) => Ok(None),
(Some((payload, t)), true) => {
check_max_size(payload.len(), self.config.max_message_size)?;
match t {
IncompleteMessageType::Text => {
Ok(Some(Message::Text(payload.try_into()?)))
}
IncompleteMessageType::Binary => Ok(Some(Message::Binary(payload))),
MessageType::Text => Ok(Some(Message::Text(payload.try_into()?))),
MessageType::Binary => Ok(Some(Message::Binary(payload))),
}
}
(Some((payload, t)), false) => {