Skip to content

not handle websocket close status code #86

@315567599

Description

@315567599

void WebSocket::PrepareSendFrame(uint8_t opcode, bool mask, const void* buffer, size_t size, int status)
{
// Clear the previous WebSocket send buffer
_ws_send_buffer.clear();

// Append WebSocket frame opcode
_ws_send_buffer.push_back(opcode);

// Append WebSocket frame size
if (size <= 125)
    _ws_send_buffer.push_back((size & 0xFF) | (mask ? 0x80 : 0));
else if (size <= 65535)
{
    _ws_send_buffer.push_back(126 | (mask ? 0x80 : 0));
    _ws_send_buffer.push_back((size >> 8) & 0xFF);
    _ws_send_buffer.push_back(size & 0xFF);
}
else
{
    _ws_send_buffer.push_back(127 | (mask ? 0x80 : 0));
    for (int i = 7; i >= 0; --i)
        _ws_send_buffer.push_back((size >> (8 * i)) & 0xFF);
}

if (mask)
{
    // Append WebSocket frame mask
    _ws_send_buffer.push_back(_ws_send_mask[0]);
    _ws_send_buffer.push_back(_ws_send_mask[1]);
    _ws_send_buffer.push_back(_ws_send_mask[2]);
    _ws_send_buffer.push_back(_ws_send_mask[3]);
}

// Resize WebSocket frame buffer
size_t offset = _ws_send_buffer.size();
_ws_send_buffer.resize(offset + size);

// Mask WebSocket frame content
const uint8_t* data = (const uint8_t*)buffer;
for (size_t i = 0; i < size; ++i)
    _ws_send_buffer[offset + i] = data[i] ^ _ws_send_mask[i % 4];

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions