diff options
Diffstat (limited to 'net/spdy/spdy_proxy_client_socket.cc')
-rw-r--r-- | net/spdy/spdy_proxy_client_socket.cc | 73 |
1 files changed, 11 insertions, 62 deletions
diff --git a/net/spdy/spdy_proxy_client_socket.cc b/net/spdy/spdy_proxy_client_socket.cc index 9dd5145..7b2c83b 100644 --- a/net/spdy/spdy_proxy_client_socket.cc +++ b/net/spdy/spdy_proxy_client_socket.cc @@ -34,7 +34,7 @@ SpdyProxyClientSocket::SpdyProxyClientSocket( next_state_(STATE_DISCONNECTED), spdy_stream_(spdy_stream), old_read_callback_(NULL), - old_write_callback_(NULL), + write_callback_(NULL), endpoint_(endpoint), auth_( new HttpAuthController(HttpAuth::AUTH_PROXY, @@ -126,8 +126,7 @@ void SpdyProxyClientSocket::Disconnect() { write_buffer_len_ = 0; write_bytes_outstanding_ = 0; - old_write_callback_ = NULL; - write_callback_.Reset(); + write_callback_ = NULL; next_state_ = STATE_DISCONNECTED; @@ -245,45 +244,7 @@ int SpdyProxyClientSocket::PopulateUserReadBuffer() { int SpdyProxyClientSocket::Write(IOBuffer* buf, int buf_len, OldCompletionCallback* callback) { - DCHECK(!old_write_callback_ && write_callback_.is_null()); - if (next_state_ != STATE_OPEN) - return ERR_SOCKET_NOT_CONNECTED; - - DCHECK(spdy_stream_); - write_bytes_outstanding_= buf_len; - if (buf_len <= kMaxSpdyFrameChunkSize) { - int rv = spdy_stream_->WriteStreamData(buf, buf_len, spdy::DATA_FLAG_NONE); - if (rv == ERR_IO_PENDING) { - old_write_callback_ = callback; - write_buffer_len_ = buf_len; - } - return rv; - } - - // Since a SPDY Data frame can only include kMaxSpdyFrameChunkSize bytes - // we need to send multiple data frames - for (int i = 0; i < buf_len; i += kMaxSpdyFrameChunkSize) { - int len = std::min(kMaxSpdyFrameChunkSize, buf_len - i); - scoped_refptr<DrainableIOBuffer> iobuf(new DrainableIOBuffer(buf, i + len)); - iobuf->SetOffset(i); - int rv = spdy_stream_->WriteStreamData(iobuf, len, spdy::DATA_FLAG_NONE); - if (rv > 0) { - write_bytes_outstanding_ -= rv; - } else if (rv != ERR_IO_PENDING) { - return rv; - } - } - if (write_bytes_outstanding_ > 0) { - old_write_callback_ = callback; - write_buffer_len_ = buf_len; - return ERR_IO_PENDING; - } else { - return buf_len; - } -} -int SpdyProxyClientSocket::Write(IOBuffer* buf, int buf_len, - const CompletionCallback& callback) { - DCHECK(!old_write_callback_ && write_callback_.is_null()); + DCHECK(!write_callback_); if (next_state_ != STATE_OPEN) return ERR_SOCKET_NOT_CONNECTED; @@ -571,7 +532,7 @@ void SpdyProxyClientSocket::OnDataReceived(const char* data, int length) { } void SpdyProxyClientSocket::OnDataSent(int length) { - DCHECK(old_write_callback_ || !write_callback_.is_null()); + DCHECK(write_callback_); write_bytes_outstanding_ -= length; @@ -581,15 +542,9 @@ void SpdyProxyClientSocket::OnDataSent(int length) { int rv = write_buffer_len_; write_buffer_len_ = 0; write_bytes_outstanding_ = 0; - if (old_write_callback_) { - OldCompletionCallback* c = old_write_callback_; - old_write_callback_ = NULL; - c->Run(rv); - } else { - CompletionCallback c = write_callback_; - write_callback_.Reset(); - c.Run(rv); - } + OldCompletionCallback* c = write_callback_; + write_callback_ = NULL; + c->Run(rv); } } @@ -606,10 +561,8 @@ void SpdyProxyClientSocket::OnClose(int status) { next_state_ = STATE_DISCONNECTED; base::WeakPtr<SpdyProxyClientSocket> weak_ptr = weak_factory_.GetWeakPtr(); - OldCompletionCallback* old_write_callback = old_write_callback_; - CompletionCallback write_callback = write_callback_; - old_write_callback_ = NULL; - write_callback_.Reset(); + OldCompletionCallback* write_callback = write_callback_; + write_callback_ = NULL; write_buffer_len_ = 0; write_bytes_outstanding_ = 0; @@ -631,12 +584,8 @@ void SpdyProxyClientSocket::OnClose(int status) { OnDataReceived(NULL, 0); } // This may have been deleted by read_callback_, so check first. - if (weak_ptr && (old_write_callback || !write_callback.is_null())) { - if (old_write_callback) - old_write_callback->Run(ERR_CONNECTION_CLOSED); - else - write_callback.Run(ERR_CONNECTION_CLOSED); - } + if (weak_ptr && write_callback) + write_callback->Run(ERR_CONNECTION_CLOSED); } void SpdyProxyClientSocket::set_chunk_callback(ChunkCallback* /*callback*/) { |