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

NAME

WebSocket::Frame - WebSocket Frame

SYNOPSIS

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

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

VERSION

    v0.1.0

DESCRIPTION

Construct or parse a WebSocket frame.

CONSTRUCTOR

new

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

Create a new 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

The payload of the frame. It can also be provided as the first argument of the "new" method.

fin

Boolean default to 1. Indicate whether this frame is the last frame of the entire message body

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

masked

Boolean default to 0.

If set to true, the frame will be masked.

opcode

Default to 1. Operation bit, which defines the type of this frame

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

rsv

Reserved bit, must be 0, if it is not 0, it is marked as connection failure

type

Default to text

The type of the frame. Accepted values are: continuation, text, binary, ping, pong, close

version

String. Default to draft-ietf-hybi-17

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

METHODS

append

    $frame->append( $chunk );

Append a frame chunk.

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

fin

Indicate whether this frame is the last frame of the entire message body

fragments

is_binary

Returns true if frame is of binary type, false otherwise.

is_close

Returns true if frame is of close type, false otherwise.

is_continuation

Returns true if frame is of continuation type, false otherwise.

is_ping

Returns true if frame is a ping request, false otherwise.

is_pong

Returns true if frame is a pong response, false otherwise.

is_text

Returns true if frame is of text type, false otherwise.

mask

Indicate whether the carried content needs to be XORed with a mask

masked

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

Get or set masking of the frame.

max_fragments_amount

The maximum fragments allowed.

max_payload_size

The maximum size of the payload. You may set this to 0 (but not undef) to disable checking the payload size.

next

    $frame->append( $some_data );

    $frame->next; # next message

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

next_bytes

Return the next message as is.

opcode

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

Get or set opcode of the frame. Operation bit, which defines the type of this frame.

rsv

Reserved bit, must be 0, if it is not 0, it is marked as connection failure

supported_types

Provided a type and this returns true if it is supported, false otherwise. This is case insensitive.

Without any argument, this returns an array object of supported frame types.

to_bytes

Construct a WebSocket message.

CREDITS

Viacheslav Tykhanovskyi for code borrowed.

AUTHOR

Jacques Deguest <jack@deguest.jp>

SEE ALSO

perl

COPYRIGHT & LICENSE

Copyright(c) 2021 DEGUEST Pte. Ltd. DEGUEST Pte. Ltd.

You can use, copy, modify and redistribute this package and associated files under the same terms as Perl itself.