summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/webkit/WebCore/websockets/WebSocketChannel.cpp
diff options
context:
space:
mode:
authoraxis <qt-info@nokia.com>2009-11-04 14:07:39 (GMT)
committeraxis <qt-info@nokia.com>2009-11-04 14:07:39 (GMT)
commit9cda9fb4bb496a7c589767bdcead131dbcdeeb79 (patch)
tree2302096f06d4629ea62a85317429daa74ce6f02d /src/3rdparty/webkit/WebCore/websockets/WebSocketChannel.cpp
parentbe6357bfa96cdaffa5797fef99e95cac7121e5b3 (diff)
parent7905101fb5ef18c776be515b9287356b1efc5ceb (diff)
downloadQt-9cda9fb4bb496a7c589767bdcead131dbcdeeb79.zip
Qt-9cda9fb4bb496a7c589767bdcead131dbcdeeb79.tar.gz
Qt-9cda9fb4bb496a7c589767bdcead131dbcdeeb79.tar.bz2
Merge branch '4.6' of git@scm.dev.nokia.troll.no:qt/qt into 4.6-s60
Diffstat (limited to 'src/3rdparty/webkit/WebCore/websockets/WebSocketChannel.cpp')
-rw-r--r--src/3rdparty/webkit/WebCore/websockets/WebSocketChannel.cpp31
1 files changed, 23 insertions, 8 deletions
diff --git a/src/3rdparty/webkit/WebCore/websockets/WebSocketChannel.cpp b/src/3rdparty/webkit/WebCore/websockets/WebSocketChannel.cpp
index 145cd34..be388b4 100644
--- a/src/3rdparty/webkit/WebCore/websockets/WebSocketChannel.cpp
+++ b/src/3rdparty/webkit/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) {