diff --git a/Cargo.lock b/Cargo.lock index 92bc452..3d24e38 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1466,9 +1466,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.5" +version = "0.102.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a6fccd794a42c2c105b513a2f62bc3fd8f3ba57a4593677ceb0bd035164d78" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" dependencies = [ "ring", "rustls-pki-types", @@ -2255,16 +2255,16 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374ec40a2d767a3c1b4972d9475ecd557356637be906f2cb3f7fe17a6eb5e22f" +checksum = "557404e450152cd6795bb558bca69e43c585055f4606e3bcae5894fc6dac9ba0" dependencies = [ "memchr", ] [[package]] name = "wisp-mux" -version = "5.0.0" +version = "5.0.1" dependencies = [ "async-trait", "bytes", diff --git a/wisp/Cargo.toml b/wisp/Cargo.toml index 875d448..26e4922 100644 --- a/wisp/Cargo.toml +++ b/wisp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wisp-mux" -version = "5.0.0" +version = "5.0.1" license = "LGPL-3.0-only" description = "A library for easily creating Wisp servers and clients." homepage = "https://github.com/MercuryWorkshop/epoxy-tls/tree/multiplexed/wisp" diff --git a/wisp/src/fastwebsockets.rs b/wisp/src/fastwebsockets.rs index b9529da..6f129af 100644 --- a/wisp/src/fastwebsockets.rs +++ b/wisp/src/fastwebsockets.rs @@ -26,6 +26,15 @@ fn match_payload_reverse(payload: crate::ws::Payload<'_>) -> Payload<'_> { } } +fn payload_to_bytesmut(payload: Payload<'_>) -> BytesMut { + match payload { + Payload::Borrowed(borrowed) => BytesMut::from(borrowed), + Payload::BorrowedMut(borrowed_mut) => BytesMut::from(&*borrowed_mut), + Payload::Owned(owned) => BytesMut::from(owned.as_slice()), + Payload::Bytes(b) => b, + } +} + impl From for crate::ws::OpCode { fn from(opcode: OpCode) -> Self { use OpCode::*; @@ -105,7 +114,7 @@ impl crate::ws::WebSocketRead for WebSocketRead ))); } - let mut buf = BytesMut::from(frame.payload); + let mut buf = payload_to_bytesmut(frame.payload); let opcode = frame.opcode; while !frame.fin { @@ -145,7 +154,7 @@ impl crate::ws::WebSocketRead for WebSocketRead ))); } - let mut buf = BytesMut::from(frame.payload); + let mut buf = payload_to_bytesmut(frame.payload); let opcode = frame.opcode; while !frame.fin { @@ -159,7 +168,7 @@ impl crate::ws::WebSocketRead for WebSocketRead ))); } if frame_cnt == 1 { - let payload = BytesMut::from(frame.payload); + let payload = payload_to_bytesmut(frame.payload); extra_frame = Some(crate::ws::Frame { opcode: opcode.into(), payload: crate::ws::Payload::Bytes(payload),