From cac0f67c402d107cdb10971b95719e2ff9c7c76b Mon Sep 17 00:00:00 2001 From: Steve Block Date: Thu, 5 Nov 2009 09:23:40 +0000 Subject: Merge webkit.org at r50258 : Initial merge by git. Change-Id: I1a9e1dc4ed654b69174ad52a4f031a07240f37b0 --- WebCore/websockets/WebSocketChannel.cpp | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) (limited to 'WebCore/websockets/WebSocketChannel.cpp') diff --git a/WebCore/websockets/WebSocketChannel.cpp b/WebCore/websockets/WebSocketChannel.cpp index 145cd34..be388b4 100644 --- a/WebCore/websockets/WebSocketChannel.cpp +++ b/WebCore/websockets/WebSocketChannel.cpp @@ -71,6 +71,7 @@ void WebSocketChannel::connect() LOG(Network, "WebSocketChannel %p connect", this); ASSERT(!m_handle.get()); m_handshake.reset(); + ref(); m_handle = SocketStreamHandle::create(m_handshake.url(), this); } @@ -103,6 +104,14 @@ void WebSocketChannel::close() m_handle->close(); // will call didClose() } +void WebSocketChannel::disconnect() +{ + LOG(Network, "WebSocketChannel %p disconnect", this); + m_client = 0; + if (m_handle.get()) + m_handle->close(); +} + void WebSocketChannel::willOpenStream(SocketStreamHandle*, const KURL&) { } @@ -126,13 +135,15 @@ void WebSocketChannel::didClose(SocketStreamHandle* handle) { LOG(Network, "WebSocketChannel %p didClose", this); ASSERT(handle == m_handle.get() || !m_handle.get()); - if (!m_handle.get()) - return; - m_unhandledBufferSize = handle->bufferedAmount(); - WebSocketChannelClient* client = m_client; - m_client = 0; - m_handle = 0; - client->didClose(); + if (m_handle.get()) { + m_unhandledBufferSize = handle->bufferedAmount(); + WebSocketChannelClient* client = m_client; + m_client = 0; + m_handle = 0; + if (client) + client->didClose(); + } + deref(); } void WebSocketChannel::didReceiveData(SocketStreamHandle* handle, const char* data, int len) @@ -143,6 +154,10 @@ void WebSocketChannel::didReceiveData(SocketStreamHandle* handle, const char* da handle->close(); return; } + if (!m_client) { + handle->close(); + return; + } if (m_handshake.mode() != WebSocketHandshake::Connected) { int headerLength = m_handshake.readServerHandshake(m_buffer, m_bufferSize); if (headerLength <= 0) @@ -184,7 +199,7 @@ void WebSocketChannel::didReceiveData(SocketStreamHandle* handle, const char* da handle->close(); return; } - length = length * 128 + *p & 0x7f; + length = length * 128 + (*p & 0x7f); ++p; } if (p + length < end) { -- cgit v1.1