void WebSocket::updateBufferedAmountAfterClose(unsigned long payloadSize) { m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, payloadSize); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, getFramingOverhead(payloadSize)); logError("WebSocket is already in CLOSING or CLOSED state."); }
void WebSocket::send(Blob* binaryData, ExceptionCode& ec) { LOG(Network, "WebSocket %p send() Sending Blob '%s'", this, binaryData->url().stringCenterEllipsizedToLength().utf8().data()); if (m_state == CONNECTING) { ec = INVALID_STATE_ERR; return; } if (m_state == CLOSING || m_state == CLOSED) { unsigned long payloadSize = static_cast<unsigned long>(binaryData->size()); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, payloadSize); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, getFramingOverhead(payloadSize)); return; } ASSERT(m_channel); m_channel->send(*binaryData); }
void WebSocket::send(ArrayBuffer* binaryData, ExceptionCode& ec) { LOG(Network, "WebSocket %p send() Sending ArrayBuffer %p", this, binaryData); ASSERT(binaryData); if (m_state == CONNECTING) { ec = INVALID_STATE_ERR; return; } if (m_state == CLOSING || m_state == CLOSED) { unsigned payloadSize = binaryData->byteLength(); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, payloadSize); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, getFramingOverhead(payloadSize)); return; } ASSERT(m_channel); m_channel->send(*binaryData, 0, binaryData->byteLength()); }
bool WebSocket::send(ArrayBuffer* binaryData, ExceptionCode& ec) { LOG(Network, "WebSocket %p send arraybuffer %p", this, binaryData); ASSERT(binaryData); if (m_useHixie76Protocol) return send("[object ArrayBuffer]", ec); if (m_state == CONNECTING) { ec = INVALID_STATE_ERR; return false; } if (m_state == CLOSING || m_state == CLOSED) { m_bufferedAmountAfterClose += binaryData->byteLength() + getFramingOverhead(binaryData->byteLength()); return false; } ASSERT(m_channel); return m_channel->send(*binaryData); }
bool WebSocket::send(const String& message, ExceptionCode& ec) { LOG(Network, "WebSocket %p send %s", this, message.utf8().data()); if (m_state == CONNECTING) { ec = INVALID_STATE_ERR; return false; } // No exception is raised if the connection was once established but has subsequently been closed. if (m_state == CLOSING || m_state == CLOSED) { size_t payloadSize = message.utf8().length(); m_bufferedAmountAfterClose += payloadSize + getFramingOverhead(payloadSize); return false; } // FIXME: check message is valid utf8. ASSERT(m_channel); return m_channel->send(message); }
bool WebSocket::send(Blob* binaryData, ExceptionCode& ec) { LOG(Network, "WebSocket %p send() Sending Blob '%s'", this, binaryData->url().elidedString().utf8().data()); ASSERT(binaryData); if (m_state == CONNECTING) { ec = INVALID_STATE_ERR; return false; } if (m_state == CLOSING || m_state == CLOSED) { unsigned long payloadSize = static_cast<unsigned long>(binaryData->size()); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, payloadSize); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, getFramingOverhead(payloadSize)); return false; } ASSERT(m_channel); return m_channel->send(*binaryData) == WebSocketChannel::SendSuccess; }
void WebSocket::send(ArrayBufferView* arrayBufferView, ExceptionCode& ec) { LOG(Network, "WebSocket %p send() Sending ArrayBufferView %p", this, arrayBufferView); ASSERT(arrayBufferView); if (m_state == CONNECTING) { ec = INVALID_STATE_ERR; return; } if (m_state == CLOSING || m_state == CLOSED) { unsigned payloadSize = arrayBufferView->byteLength(); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, payloadSize); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, getFramingOverhead(payloadSize)); return; } ASSERT(m_channel); RefPtr<ArrayBuffer> arrayBuffer(arrayBufferView->buffer()); m_channel->send(*arrayBuffer, arrayBufferView->byteOffset(), arrayBufferView->byteLength()); }
bool WebSocket::send(Blob* binaryData, ExceptionCode& ec) { LOG(Network, "WebSocket %p send blob %s", this, binaryData->url().string().utf8().data()); ASSERT(binaryData); if (m_useHixie76Protocol) return send("[object Blob]", ec); if (m_state == CONNECTING) { ec = INVALID_STATE_ERR; return false; } if (m_state == CLOSING || m_state == CLOSED) { unsigned long payloadSize = static_cast<unsigned long>(binaryData->size()); m_bufferedAmountAfterClose += payloadSize + getFramingOverhead(payloadSize); return false; } ASSERT(m_channel); return m_channel->send(*binaryData); }
bool WebSocket::send(ArrayBuffer* binaryData, ExceptionCode& ec) { LOG(Network, "WebSocket %p send arraybuffer %p", this, binaryData); ASSERT(binaryData); if (m_useHixie76Protocol) return send("[object ArrayBuffer]", ec); if (m_state == CONNECTING) { ec = INVALID_STATE_ERR; return false; } if (m_state == CLOSING || m_state == CLOSED) { unsigned payloadSize = binaryData->byteLength(); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, payloadSize); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, getFramingOverhead(payloadSize)); return false; } ASSERT(m_channel); return m_channel->send(*binaryData) == ThreadableWebSocketChannel::SendSuccess; }
void WebSocket::send(const String& message, ExceptionCode& ec) { LOG(Network, "WebSocket %p send() Sending String '%s'", this, message.utf8().data()); if (m_state == CONNECTING) { ec = INVALID_STATE_ERR; return; } // No exception is raised if the connection was once established but has subsequently been closed. if (m_state == CLOSING || m_state == CLOSED) { size_t payloadSize = message.utf8().length(); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, payloadSize); m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, getFramingOverhead(payloadSize)); return; } ASSERT(m_channel); ThreadableWebSocketChannel::SendResult result = m_channel->send(message); if (result == ThreadableWebSocketChannel::InvalidMessage) { scriptExecutionContext()->addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral("Websocket message contains invalid character(s).")); ec = SYNTAX_ERR; return; } }