Index: net/quic/quic_http_stream.cc |
diff --git a/net/quic/quic_http_stream.cc b/net/quic/quic_http_stream.cc |
index 0d10207e183f7a912f844032e49082e9fd22e5f9..8df900e5d3d3757d38456495c1937fae7481befa 100644 |
--- a/net/quic/quic_http_stream.cc |
+++ b/net/quic/quic_http_stream.cc |
@@ -22,8 +22,7 @@ namespace net { |
static const size_t kHeaderBufInitialSize = 4096; |
-QuicHttpStream::QuicHttpStream(QuicReliableClientStream* stream, |
- bool use_spdy) |
+QuicHttpStream::QuicHttpStream(QuicReliableClientStream* stream) |
: io_state_(STATE_NONE), |
stream_(stream), |
request_info_(NULL), |
@@ -31,7 +30,6 @@ QuicHttpStream::QuicHttpStream(QuicReliableClientStream* stream, |
response_info_(NULL), |
response_status_(OK), |
response_headers_received_(false), |
- use_spdy_(use_spdy), |
read_buf_(new GrowableIOBuffer()), |
user_buffer_len_(0), |
ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
@@ -64,42 +62,22 @@ int QuicHttpStream::SendRequest(const HttpRequestHeaders& request_headers, |
CHECK(response); |
// Store the serialized request headers. |
- if (use_spdy_) { |
- SpdyHeaderBlock headers; |
- CreateSpdyHeadersFromHttpRequest(*request_info_, request_headers, |
- &headers, 3, /*direct=*/true); |
- size_t len = SpdyFramer::GetSerializedLength(3, &headers); |
- SpdyFrameBuilder builder(len); |
- SpdyFramer::WriteHeaderBlock(&builder, 3, &headers); |
- scoped_ptr<SpdyFrame> frame(builder.take()); |
- request_ = std::string(frame->data(), len); |
- // Log the actual request with the URL Request's net log. |
- stream_net_log_.AddEvent( |
- NetLog::TYPE_HTTP_TRANSACTION_SPDY_SEND_REQUEST_HEADERS, |
- base::Bind(&SpdyHeaderBlockNetLogCallback, &headers)); |
- // Also log to the QuicSession's net log. |
- stream_->net_log().AddEvent( |
- NetLog::TYPE_QUIC_HTTP_STREAM_SEND_REQUEST_HEADERS, |
- base::Bind(&SpdyHeaderBlockNetLogCallback, &headers)); |
- } else { |
- std::string path = HttpUtil::PathForRequest(request_info_->url); |
- std::string first_line = base::StringPrintf("%s %s HTTP/1.1\r\n", |
- request_info_->method.c_str(), |
- path.c_str()); |
- request_ = first_line + request_headers.ToString(); |
- // Log the actual request with the URL Request's net log. |
- stream_net_log_.AddEvent( |
- NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST_HEADERS, |
- base::Bind(&HttpRequestHeaders::NetLogCallback, |
- base::Unretained(&request_headers), |
- &first_line)); |
- // Also log to the QuicSession's net log. |
- stream_->net_log().AddEvent( |
- NetLog::TYPE_QUIC_HTTP_STREAM_SEND_REQUEST_HEADERS, |
- base::Bind(&HttpRequestHeaders::NetLogCallback, |
- base::Unretained(&request_headers), |
- &first_line)); |
- } |
+ SpdyHeaderBlock headers; |
+ CreateSpdyHeadersFromHttpRequest(*request_info_, request_headers, |
+ &headers, 3, /*direct=*/true); |
+ size_t len = SpdyFramer::GetSerializedLength(3, &headers); |
+ SpdyFrameBuilder builder(len); |
+ SpdyFramer::WriteHeaderBlock(&builder, 3, &headers); |
+ scoped_ptr<SpdyFrame> frame(builder.take()); |
+ request_ = std::string(frame->data(), len); |
+ // Log the actual request with the URL Request's net log. |
+ stream_net_log_.AddEvent( |
+ NetLog::TYPE_HTTP_TRANSACTION_SPDY_SEND_REQUEST_HEADERS, |
+ base::Bind(&SpdyHeaderBlockNetLogCallback, &headers)); |
+ // Also log to the QuicSession's net log. |
+ stream_->net_log().AddEvent( |
+ NetLog::TYPE_QUIC_HTTP_STREAM_SEND_REQUEST_HEADERS, |
+ base::Bind(&SpdyHeaderBlockNetLogCallback, &headers)); |
// Store the request body. |
request_body_stream_ = request_info_->upload_data_stream; |
@@ -462,74 +440,38 @@ int QuicHttpStream::DoSendBodyComplete(int rv) { |
} |
int QuicHttpStream::ParseResponseHeaders() { |
- if (use_spdy_) { |
- size_t read_buf_len = static_cast<size_t>(read_buf_->offset()); |
- SpdyFramer framer(3); |
- SpdyHeaderBlock headers; |
- char* data = read_buf_->StartOfBuffer(); |
- size_t len = framer.ParseHeaderBlockInBuffer(data, read_buf_->offset(), |
- &headers); |
- |
- if (len == 0) { |
- return ERR_IO_PENDING; |
- } |
- |
- // Save the remaining received data. |
- size_t delta = read_buf_len - len; |
- if (delta > 0) { |
- BufferResponseBody(data + len, delta); |
- } |
- |
- // The URLRequest logs these headers, so only log to the QuicSession's |
- // net log. |
- stream_->net_log().AddEvent( |
- NetLog::TYPE_QUIC_HTTP_STREAM_READ_RESPONSE_HEADERS, |
- base::Bind(&SpdyHeaderBlockNetLogCallback, &headers)); |
- |
- if (!SpdyHeadersToHttpResponse(headers, 3, response_info_)) { |
- DLOG(WARNING) << "Invalid headers"; |
- return ERR_QUIC_PROTOCOL_ERROR; |
- } |
- // Put the peer's IP address and port into the response. |
- IPEndPoint address = stream_->GetPeerAddress(); |
- response_info_->socket_address = HostPortPair::FromIPEndPoint(address); |
- response_info_->vary_data.Init(*request_info_, *response_info_->headers); |
- response_headers_received_ = true; |
- |
- return OK; |
- } |
- int end_offset = HttpUtil::LocateEndOfHeaders(read_buf_->StartOfBuffer(), |
- read_buf_->offset(), 0); |
- |
- if (end_offset == -1) { |
+ size_t read_buf_len = static_cast<size_t>(read_buf_->offset()); |
+ SpdyFramer framer(3); |
+ SpdyHeaderBlock headers; |
+ char* data = read_buf_->StartOfBuffer(); |
+ size_t len = framer.ParseHeaderBlockInBuffer(data, read_buf_->offset(), |
+ &headers); |
+ |
+ if (len == 0) { |
return ERR_IO_PENDING; |
} |
- if (!stream_) |
- return ERR_UNEXPECTED; |
- |
- scoped_refptr<HttpResponseHeaders> headers = new HttpResponseHeaders( |
- HttpUtil::AssembleRawHeaders(read_buf_->StartOfBuffer(), end_offset)); |
- |
- // Put the peer's IP address and port into the response. |
- IPEndPoint address = stream_->GetPeerAddress(); |
- response_info_->socket_address = HostPortPair::FromIPEndPoint(address); |
- response_info_->headers = headers; |
- response_info_->vary_data.Init(*request_info_, *response_info_->headers); |
- response_headers_received_ = true; |
+ // Save the remaining received data. |
+ size_t delta = read_buf_len - len; |
+ if (delta > 0) { |
+ BufferResponseBody(data + len, delta); |
+ } |
// The URLRequest logs these headers, so only log to the QuicSession's |
// net log. |
stream_->net_log().AddEvent( |
NetLog::TYPE_QUIC_HTTP_STREAM_READ_RESPONSE_HEADERS, |
- base::Bind(&HttpResponseHeaders::NetLogCallback, |
- response_info_->headers)); |
+ base::Bind(&SpdyHeaderBlockNetLogCallback, &headers)); |
- // Save the remaining received data. |
- int delta = read_buf_->offset() - end_offset; |
- if (delta > 0) { |
- BufferResponseBody(read_buf_->data(), delta); |
+ if (!SpdyHeadersToHttpResponse(headers, 3, response_info_)) { |
+ DLOG(WARNING) << "Invalid headers"; |
+ return ERR_QUIC_PROTOCOL_ERROR; |
} |
+ // Put the peer's IP address and port into the response. |
+ IPEndPoint address = stream_->GetPeerAddress(); |
+ response_info_->socket_address = HostPortPair::FromIPEndPoint(address); |
+ response_info_->vary_data.Init(*request_info_, *response_info_->headers); |
+ response_headers_received_ = true; |
return OK; |
} |