The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Protocol::WebSocket::Frame - WebSocket Frame

SYNOPSIS

    # Create frame
    my $frame = Protocol::WebSocket::Frame->new('123');
    $frame->to_bytes;

    # Parse frames
    my $frame = Protocol::WebSocket::Frame->new;
    $frame->append(...);
    $f->next; # get next message
    $f->next; # get another next message

DESCRIPTION

Construct or parse a WebSocket frame.

RANDOM MASK GENERATION

By default built-in rand is used, this is not secure, so when Math::Random::Secure is installed it is used instead.

METHODS

new

    Protocol::WebSocket::Frame->new('data');   # same as (buffer => 'data')
    Protocol::WebSocket::Frame->new(buffer => 'data', type => 'close');

Create a new Protocol::WebSocket::Frame instance. Automatically detect if the passed data is a Perl string (UTF-8 flag) or bytes.

When called with more than one arguments, it takes the following named arguments (all of them are optional).

buffer => STR (default: "")

The payload of the frame.

type => TYPE_STR (default: "text")

The type of the frame. Accepted values are:

    continuation
    text
    binary
    ping
    pong
    close
opcode => INT (default: 1)

The opcode of the frame. If type field is set to a valid string, this field is ignored.

fin => BOOL (default: 1)

"fin" flag of the frame. "fin" flag must be 1 in the ending frame of fragments.

masked => BOOL (default: 0)

If set to true, the frame will be masked.

version => VERSION_STR (default: 'draft-ietf-hybi-17')

WebSocket protocol version string. See Protocol::WebSocket for valid version strings.

is_continuation

Check if frame is of continuation type.

is_text

Check if frame is of text type.

is_binary

Check if frame is of binary type.

is_ping

Check if frame is a ping request.

is_pong

Check if frame is a pong response.

is_close

Check if frame is of close type.

opcode

    $opcode = $frame->opcode;
    $frame->opcode(8);

Get/set opcode of the frame.

masked

    $masked = $frame->masked;
    $frame->masked(1);

Get/set masking of the frame.

append

    $frame->append($chunk);

Append a frame chunk.

Beware that this method is destructive. It makes $chunk empty unless $chunk is read-only.

next

    $frame->append(...);

    $frame->next; # next message

Return the next message as a Perl string (UTF-8 decoded).

next_bytes

Return the next message as is.

to_bytes

Construct a WebSocket message.

max_payload_size

The maximum size of the payload. You may set this to 0 or undef to disable checking the payload size.