Module twist::server [] [src]

Server API

Decode PING Base Frame from client


use twist::server::{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();
    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 frames from client 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);
    }
}

Structs

BaseFrame

Represents the parts of a base frame.

BaseFrameCodec

Codec for encoding/decoding websocket base frames.

HandshakeCodec

Codec for decoding/encoding websocket server handshake frames.

HandshakeRequestFrame

Client handshake request data received by server.

HandshakeResponseFrame

Data needed to construct a server response to a client request.

TwistCodec

Codec for use with the WebSocketProtocol. Used when decoding/encoding of both websocket handshakes and websocket base frames.

WebSocketFrame

A twist websocket frame. Note a websocket frame is either a client handshake frame, a server handshake frame, or a base frame. They are mutually exclusive.

WebSocketProtocol

The protocol that can bu use to run on a tokio-proto TcpServer to handle websocket handshake and base frames.

Enums

OpCode

Operation codes defined in RFC6455.