---
name: "Protocol::WebSocket::Frame"
section: "3pm"
platform: "linux"
package: "libprotocol-websocket-perl"
version: "0.26-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Protocol::WebSocket::Frame"
---

# Protocol::WebSocket::Frame(3pm)

WebSocket Frame

## 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.
