summaryrefslogtreecommitdiffstats
path: root/net/websockets/websocket_job.cc
diff options
context:
space:
mode:
authortoyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-02 10:15:50 +0000
committertoyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-02 10:15:50 +0000
commita53cfc534ef3633acb4eb0f32011f5886c4a6ec0 (patch)
tree48973789f8f31cccd27db42de0a389d1b1ea84cc /net/websockets/websocket_job.cc
parent022a0e299a8978f0fb8171fe223e6993bc64e9dc (diff)
downloadchromium_src-a53cfc534ef3633acb4eb0f32011f5886c4a6ec0.zip
chromium_src-a53cfc534ef3633acb4eb0f32011f5886c4a6ec0.tar.gz
chromium_src-a53cfc534ef3633acb4eb0f32011f5886c4a6ec0.tar.bz2
Add invalid data send check on CONNECTING state
Handshake data should be sent at once. WebSocketJob should reject any other subsequent data sending until the handshake is done and connection is opened. BUG=84422 TEST=net_unittest --gtest_filter=WebSocket\* Review URL: http://codereview.chromium.org/7075027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@87597 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/websockets/websocket_job.cc')
-rw-r--r--net/websockets/websocket_job.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/net/websockets/websocket_job.cc b/net/websockets/websocket_job.cc
index 10b351a..fc67f9a 100644
--- a/net/websockets/websocket_job.cc
+++ b/net/websockets/websocket_job.cc
@@ -72,6 +72,7 @@ WebSocketJob::WebSocketJob(SocketStream::Delegate* delegate)
callback_(NULL),
handshake_request_(new WebSocketHandshakeRequestHandler),
handshake_response_(new WebSocketHandshakeResponseHandler),
+ started_to_send_handshake_request_(false),
handshake_request_sent_(0),
response_cookies_save_index_(0),
send_frame_handler_(new WebSocketFrameHandler),
@@ -273,6 +274,8 @@ void WebSocketJob::OnError(const SocketStream* socket, int error) {
bool WebSocketJob::SendHandshakeRequest(const char* data, int len) {
DCHECK_EQ(state_, CONNECTING);
+ if (started_to_send_handshake_request_)
+ return false;
if (!handshake_request_->ParseRequest(data, len))
return false;
@@ -281,6 +284,7 @@ bool WebSocketJob::SendHandshakeRequest(const char* data, int len) {
handshake_request_->protocol_version());
AddCookieHeaderAndSend();
// Just buffered in |handshake_request_|.
+ started_to_send_handshake_request_ = true;
return true;
}