diff options
Diffstat (limited to 'net/spdy/spdy_http_stream.cc')
-rw-r--r-- | net/spdy/spdy_http_stream.cc | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/net/spdy/spdy_http_stream.cc b/net/spdy/spdy_http_stream.cc index 274fe47..504ac1a 100644 --- a/net/spdy/spdy_http_stream.cc +++ b/net/spdy/spdy_http_stream.cc @@ -31,7 +31,7 @@ SpdyHttpStream::SpdyHttpStream(SpdySession* spdy_session, stream_(NULL), spdy_session_(spdy_session), request_info_(NULL), - request_body_stream_(NULL), + has_upload_data_(false), response_info_(NULL), download_finished_(false), response_headers_received_(false), @@ -79,11 +79,11 @@ const HttpResponseInfo* SpdyHttpStream::GetResponseInfo() const { } UploadProgress SpdyHttpStream::GetUploadProgress() const { - if (!request_body_stream_) + if (!request_info_->upload_data_stream) return UploadProgress(); - return UploadProgress(request_body_stream_->position(), - request_body_stream_->size()); + return UploadProgress(request_info_->upload_data_stream->position(), + request_info_->upload_data_stream->size()); } int SpdyHttpStream::ReadResponseHeaders(const CompletionCallback& callback) { @@ -186,7 +186,6 @@ bool SpdyHttpStream::IsConnectionReusable() const { } int SpdyHttpStream::SendRequest(const HttpRequestHeaders& request_headers, - UploadDataStream* request_body, HttpResponseInfo* response, const CompletionCallback& callback) { base::Time request_time = base::Time::Now(); @@ -210,16 +209,16 @@ int SpdyHttpStream::SendRequest(const HttpRequestHeaders& request_headers, if (response_info_) response_info_->request_time = request_time; - CHECK(!request_body_stream_); - if (request_body != NULL) { - if (request_body->size() || request_body->is_chunked()) { - request_body_stream_ = request_body; - // Use kMaxSpdyFrameChunkSize as the buffer size, since the request - // body data is written with this size at a time. - raw_request_body_buf_ = new IOBufferWithSize(kMaxSpdyFrameChunkSize); - // The request body buffer is empty at first. - request_body_buf_ = new DrainableIOBuffer(raw_request_body_buf_, 0); - } + CHECK(!has_upload_data_); + has_upload_data_ = request_info_->upload_data_stream && + (request_info_->upload_data_stream->size() || + request_info_->upload_data_stream->is_chunked()); + if (has_upload_data_) { + // Use kMaxSpdyFrameChunkSize as the buffer size, since the request + // body data is written with this size at a time. + raw_request_body_buf_ = new IOBufferWithSize(kMaxSpdyFrameChunkSize); + // The request body buffer is empty at first. + request_body_buf_ = new DrainableIOBuffer(raw_request_body_buf_, 0); } CHECK(!callback.is_null()); @@ -255,8 +254,7 @@ int SpdyHttpStream::SendRequest(const HttpRequestHeaders& request_headers, return result; response_info_->socket_address = HostPortPair::FromIPEndPoint(address); - bool has_upload_data = request_body_stream_ != NULL; - result = stream_->SendRequest(has_upload_data); + result = stream_->SendRequest(has_upload_data_); if (result == ERR_IO_PENDING) { CHECK(callback_.is_null()); callback_ = callback; @@ -273,11 +271,11 @@ void SpdyHttpStream::Cancel() { } int SpdyHttpStream::SendData() { - CHECK(request_body_stream_); + CHECK(request_info_->upload_data_stream); CHECK_EQ(0, request_body_buf_->BytesRemaining()); // Read the data from the request body stream. - const int bytes_read = request_body_stream_->Read( + const int bytes_read = request_info_->upload_data_stream->Read( raw_request_body_buf_, raw_request_body_buf_->size(), base::Bind( base::IgnoreResult(&SpdyHttpStream::OnRequestBodyReadCompleted), @@ -293,12 +291,12 @@ int SpdyHttpStream::SendData() { bool SpdyHttpStream::OnSendHeadersComplete(int status) { if (!callback_.is_null()) DoCallback(status); - return request_body_stream_ == NULL; + return !has_upload_data_; } int SpdyHttpStream::OnSendBody() { - CHECK(request_body_stream_); - const bool eof = request_body_stream_->IsEOF(); + CHECK(request_info_->upload_data_stream); + const bool eof = request_info_->upload_data_stream->IsEOF(); if (request_body_buf_->BytesRemaining() > 0) { return stream_->WriteStreamData( request_body_buf_, @@ -315,7 +313,7 @@ int SpdyHttpStream::OnSendBody() { int SpdyHttpStream::OnSendBodyComplete(int status, bool* eof) { // |status| is the number of bytes written to the SPDY stream. - CHECK(request_body_stream_); + CHECK(request_info_->upload_data_stream); *eof = false; if (status > 0) { @@ -327,7 +325,7 @@ int SpdyHttpStream::OnSendBodyComplete(int status, bool* eof) { } // Check if the entire body data has been sent. - *eof = (request_body_stream_->IsEOF() && + *eof = (request_info_->upload_data_stream->IsEOF() && !request_body_buf_->BytesRemaining()); return OK; } @@ -505,7 +503,7 @@ int SpdyHttpStream::OnRequestBodyReadCompleted(int status) { request_body_buf_ = new DrainableIOBuffer(raw_request_body_buf_, status); - const bool eof = request_body_stream_->IsEOF(); + const bool eof = request_info_->upload_data_stream->IsEOF(); return stream_->WriteStreamData(request_body_buf_, request_body_buf_->BytesRemaining(), eof ? DATA_FLAG_FIN : DATA_FLAG_NONE); |