call wisp v2 extension packet handlers

This commit is contained in:
Toshit Chawda 2024-04-12 17:18:56 -07:00
parent ef5ed52e71
commit b0d1038a3c
No known key found for this signature in database
GPG key ID: 91480ED99E2B3D9D
12 changed files with 974 additions and 141 deletions

View file

@ -1,6 +1,6 @@
use crate::{
extensions::{AnyProtocolExtension, ProtocolExtensionBuilder},
ws::{self, Frame, OpCode},
ws::{self, Frame, LockedWebSocketWrite, OpCode, WebSocketRead},
Role, WispError, WISP_VERSION,
};
use bytes::{Buf, BufMut, Bytes, BytesMut};
@ -388,6 +388,34 @@ impl Packet {
}
}
pub(crate) async fn maybe_handle_extension(
frame: Frame,
extensions: &mut [AnyProtocolExtension],
read: &mut (dyn WebSocketRead + Send),
write: &LockedWebSocketWrite,
) -> Result<Option<Self>, WispError> {
if !frame.finished {
return Err(WispError::WsFrameNotFinished);
}
if frame.opcode != OpCode::Binary {
return Err(WispError::WsFrameInvalidType);
}
let mut bytes = frame.payload;
if bytes.remaining() < 1 {
return Err(WispError::PacketTooSmall);
}
let packet_type = bytes.get_u8();
if let Some(extension) = extensions
.iter_mut()
.find(|x| x.get_supported_packets().iter().any(|x| *x == packet_type))
{
extension.handle_packet(bytes, read, write).await?;
Ok(None)
} else {
Ok(Some(Self::parse_packet(packet_type, bytes)?))
}
}
fn parse_info(
mut bytes: Bytes,
role: Role,