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. When creating a text frame (the default behaviour if type is not specified) the string data is encoded into UTF-8 bytes; for other frame types it is assumed to already be in 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.