Crate twist [−] [src]
An implementation of the RFC6455 websocket protocol as
a set of tokio Codecs
and a tokio-proto pipeline ServerProto
Decode Client Base Frame
use twist::{BaseFrameCodec, OpCode}; use tokio_core::io::{Codec, EasyBuf}; const PING: [u8; 6] = [0x89, 0x80, 0x00, 0x00, 0x00, 0x01]; fn main() { let ping_vec = PING.to_vec(); let mut eb = EasyBuf::from(ping_vec); let mut fc: BaseFrameCodec = Default::default(); fc.set_client(true); let mut encoded = Vec::new(); if let Ok(Some(frame)) = fc.decode(&mut eb) { assert!(frame.fin()); assert!(!frame.rsv1()); assert!(!frame.rsv2()); assert!(!frame.rsv3()); // All client frames must be masked. assert!(frame.masked()); assert!(frame.opcode() == OpCode::Ping); assert!(frame.mask() == 1); assert!(frame.payload_length() == 0); assert!(frame.extension_data().is_none()); assert!(frame.application_data().is_none()); if fc.encode(frame, &mut encoded).is_ok() { for (a, b) in encoded.iter().zip(PING.to_vec().iter()) { assert!(a == b); } } } else { assert!(false); } }
Decode Server Base Frame
use twist::{BaseFrameCodec, OpCode}; use tokio_core::io::{Codec, EasyBuf}; const PONG: [u8; 2] = [0x8a, 0x00]; fn main() { let ping_vec = PONG.to_vec(); let mut eb = EasyBuf::from(ping_vec); let mut fc: BaseFrameCodec = Default::default(); let mut encoded = Vec::new(); if let Ok(Some(frame)) = fc.decode(&mut eb) { assert!(frame.fin()); assert!(!frame.rsv1()); assert!(!frame.rsv2()); assert!(!frame.rsv3()); // All server frames must not be masked. assert!(!frame.masked()); assert!(frame.opcode() == OpCode::Pong); assert!(frame.mask() == 0); assert!(frame.payload_length() == 0); assert!(frame.extension_data().is_none()); assert!(frame.application_data().is_none()); if fc.encode(frame, &mut encoded).is_ok() { for (a, b) in encoded.iter().zip(PONG.to_vec().iter()) { assert!(a == b); } } } else { assert!(false); } }
Structs
BaseFrame |
Represents the parts of a base frame. |
BaseFrameCodec |
Codec for dedoding/encoding websocket base frames. |
ClientHanshakeCodec |
Codec for decoding/encoding websocket client handshake frames. |
ServerHandshakeCodec |
Codec for decoding/encoding websocket server handshake frames. |
TwistCodec |
Codec for use with the |
WebSocketFrame |
A |
WebSocketProtocol |
The protocol that can bu use to run on a tokio-proto
|
Enums
OpCode |
Operation codes defined in RFC6455. |
Traits
FromHeader |
Extensions are built from the |
IntoResponse |
Server-side extensions should implement this to |
PerFrame |
A per-frame extension. |
PerMessage |
A per-message extension. |