Poco::Net

class WebSocketImpl

Library: Net
Package: WebSocket
Header: Poco/Net/WebSocketImpl.h

Description

This class implements a WebSocket, according to the WebSocket protocol described in RFC 6455.

Inheritance

Direct Base Classes: StreamSocketImpl

All Base Classes: SocketImpl, StreamSocketImpl, Poco::RefCountedObject

Member Summary

Member Functions: acceptConnection, available, bind, bind6, close, connect, connectNB, frameFlags, getBlocking, getMaxPayloadSize, getReceiveBufferSize, getReceiveTimeout, getSendBufferSize, getSendTimeout, incompleteHeader, listen, mustMaskPayload, peekHeader, peekSomeBytes, receiveBytes, receiveFrom, receiveNBytes, receivePayload, receiveSomeBytes, secure, sendBytes, sendTo, sendUrgent, setBlocking, setMaxPayloadSize, setReceiveBufferSize, setReceiveTimeout, setSendBufferSize, setSendTimeout, shutdown, shutdownReceive, shutdownSend, skipHeader

Inherited Functions: acceptConnection, address, available, bind, bind6, checkBrokenTimeout, close, connect, connectNB, duplicate, error, fcntl, getBlocking, getBroadcast, getError, getKeepAlive, getLinger, getNoDelay, getOOBInline, getOption, getRawOption, getReceiveBufferSize, getReceiveTimeout, getReuseAddress, getReusePort, getSendBufferSize, getSendTimeout, init, initSocket, initialized, ioctl, lastError, listen, peerAddress, poll, receiveBytes, receiveFrom, referenceCount, release, reset, secure, sendBytes, sendFile, sendFileBlockwise, sendFileNative, sendTo, sendUrgent, setBlocking, setBroadcast, setKeepAlive, setLinger, setNoDelay, setOOBInline, setOption, setRawOption, setReceiveBufferSize, setReceiveTimeout, setReuseAddress, setReusePort, setSendBufferSize, setSendTimeout, shutdown, shutdownReceive, shutdownSend, socketError, sockfd, type, useFileDescriptor

Nested Classes

struct ReceiveState protected

 more...

struct SendState protected

 more...

Enumerations

Anonymous protected

FRAME_FLAG_MASK = 0x80

MAX_HEADER_LENGTH = 14

MASK_LENGTH = 4

Constructors

WebSocketImpl

WebSocketImpl(
    StreamSocketImpl * pStreamSocketImpl,
    HTTPSession & session,
    bool mustMaskPayload
);

Creates a WebSocketImpl.

Destructor

~WebSocketImpl protected virtual

virtual ~WebSocketImpl();

Member Functions

acceptConnection virtual

virtual SocketImpl * acceptConnection(
    SocketAddress & clientAddr
);

available virtual

virtual int available();

bind virtual

virtual void bind(
    const SocketAddress & address,
    bool reuseAddress = false
);

bind virtual

virtual void bind(
    const SocketAddress & address,
    bool reuseAddress,
    bool reusePort
);

bind6 virtual

virtual void bind6(
    const SocketAddress & address,
    bool reuseAddress = false,
    bool ipV6Only = false
);

bind6 virtual

virtual void bind6(
    const SocketAddress & address,
    bool reuseAddress,
    bool reusePort,
    bool ipV6Only
);

close virtual

virtual void close();

connect virtual

virtual void connect(
    const SocketAddress & address
);

connect virtual

virtual void connect(
    const SocketAddress & address,
    const Poco::Timespan & timeout
);

connectNB virtual

virtual void connectNB(
    const SocketAddress & address
);

frameFlags inline

int frameFlags() const;

Returns the frame flags of the most recently received frame.

getBlocking virtual

virtual bool getBlocking() const;

getMaxPayloadSize inline

int getMaxPayloadSize() const;

Returns the maximum payload size for receiveFrame().

The default is std::numeric_limits<int>::max().

getReceiveBufferSize virtual

virtual int getReceiveBufferSize();

getReceiveTimeout virtual

virtual Poco::Timespan getReceiveTimeout();

getSendBufferSize virtual

virtual int getSendBufferSize();

getSendTimeout virtual

virtual Poco::Timespan getSendTimeout();

listen virtual

virtual void listen(
    int backlog = 64
);

mustMaskPayload inline

bool mustMaskPayload() const;

Returns true if the payload must be masked.

receiveBytes virtual

virtual int receiveBytes(
    void * buffer,
    int length,
    int flags
);

Receives a WebSocket protocol frame.

See WebSocket::receiveFrame() for more information, including behavior if set to non-blocking.

receiveBytes virtual

virtual int receiveBytes(
    Poco::Buffer < char > & buffer,
    int flags = 0,
    const Poco::Timespan & span = 0
);

Receives a WebSocket protocol frame.

See WebSocket::receiveFrame() for more information, including behavior if set to non-blocking.

receiveFrom virtual

virtual int receiveFrom(
    void * buffer,
    int length,
    SocketAddress & address,
    int flags = 0
);

secure virtual

virtual bool secure() const;

sendBytes virtual

virtual int sendBytes(
    const void * buffer,
    int length,
    int flags
);

Sends a WebSocket protocol frame.

See WebSocket::sendFrame() for more information, including behavior if set to non-blocking.

sendTo virtual

virtual int sendTo(
    const void * buffer,
    int length,
    const SocketAddress & address,
    int flags = 0
);

sendUrgent virtual

virtual void sendUrgent(
    unsigned char data
);

setBlocking virtual

virtual void setBlocking(
    bool flag
);

setMaxPayloadSize

void setMaxPayloadSize(
    int maxPayloadSize
);

Sets the maximum payload size for receiveFrame().

The default is std::numeric_limits<int>::max().

setReceiveBufferSize virtual

virtual void setReceiveBufferSize(
    int size
);

setReceiveTimeout virtual

virtual void setReceiveTimeout(
    const Poco::Timespan & timeout
);

setSendBufferSize virtual

virtual void setSendBufferSize(
    int size
);

setSendTimeout virtual

virtual void setSendTimeout(
    const Poco::Timespan & timeout
);

shutdown virtual

virtual int shutdown();

shutdownReceive virtual

virtual void shutdownReceive();

shutdownSend virtual

virtual int shutdownSend();

incompleteHeader protected

int incompleteHeader(
    ReceiveState & receiveState
);

Called by peekHeader() when the bytes available do not make a complete frame header. Returns 0 if the peer has closed the connection, so that the caller reports the close, and -1 otherwise, so that the caller waits for the rest of the header.

Clears the frame flags, which the caller may already have taken from the part of the header it did receive.

peekHeader protected

int peekHeader(
    ReceiveState & receiveState
);

peekSomeBytes protected

int peekSomeBytes(
    char * buffer,
    int length
);

receiveNBytes protected

int receiveNBytes(
    void * buffer,
    int length
);

receivePayload protected

int receivePayload(
    char * buffer,
    int payloadLength,
    char mask[MASK_LENGTH],
    bool useMask,
    int maskOffset
);

receiveSomeBytes protected

int receiveSomeBytes(
    char * buffer,
    int length
);

skipHeader protected

void skipHeader(
    int headerLength
);