| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net/http/http_pipelined_stream.h" |
| |
| #include "base/logging.h" |
| #include "base/stringprintf.h" |
| #include "net/base/net_errors.h" |
| #include "net/http/http_pipelined_connection_impl.h" |
| #include "net/http/http_request_headers.h" |
| #include "net/http/http_request_info.h" |
| #include "net/http/http_util.h" |
| |
| namespace net { |
| |
| HttpPipelinedStream::HttpPipelinedStream(HttpPipelinedConnectionImpl* pipeline, |
| int pipeline_id) |
| : pipeline_(pipeline), |
| pipeline_id_(pipeline_id), |
| request_info_(NULL) { |
| } |
| |
| HttpPipelinedStream::~HttpPipelinedStream() { |
| pipeline_->OnStreamDeleted(pipeline_id_); |
| } |
| |
| int HttpPipelinedStream::InitializeStream( |
| const HttpRequestInfo* request_info, |
| const BoundNetLog& net_log, |
| const CompletionCallback& callback) { |
| request_info_ = request_info; |
| pipeline_->InitializeParser(pipeline_id_, request_info, net_log); |
| return OK; |
| } |
| |
| |
| int HttpPipelinedStream::SendRequest(const HttpRequestHeaders& headers, |
| HttpResponseInfo* response, |
| const CompletionCallback& callback) { |
| CHECK(pipeline_id_); |
| CHECK(request_info_); |
| // TODO(simonjam): Proxy support will be needed here. |
| const std::string path = HttpUtil::PathForRequest(request_info_->url); |
| std::string request_line_ = base::StringPrintf("%s %s HTTP/1.1\r\n", |
| request_info_->method.c_str(), |
| path.c_str()); |
| return pipeline_->SendRequest(pipeline_id_, request_line_, headers, response, |
| callback); |
| } |
| |
| UploadProgress HttpPipelinedStream::GetUploadProgress() const { |
| return pipeline_->GetUploadProgress(pipeline_id_); |
| } |
| |
| int HttpPipelinedStream::ReadResponseHeaders( |
| const CompletionCallback& callback) { |
| return pipeline_->ReadResponseHeaders(pipeline_id_, callback); |
| } |
| |
| const HttpResponseInfo* HttpPipelinedStream::GetResponseInfo() const { |
| return pipeline_->GetResponseInfo(pipeline_id_); |
| } |
| |
| int HttpPipelinedStream::ReadResponseBody(IOBuffer* buf, int buf_len, |
| const CompletionCallback& callback) { |
| return pipeline_->ReadResponseBody(pipeline_id_, buf, buf_len, callback); |
| } |
| |
| void HttpPipelinedStream::Close(bool not_reusable) { |
| pipeline_->Close(pipeline_id_, not_reusable); |
| } |
| |
| HttpStream* HttpPipelinedStream::RenewStreamForAuth() { |
| if (pipeline_->usable()) { |
| return pipeline_->CreateNewStream(); |
| } |
| return NULL; |
| } |
| |
| bool HttpPipelinedStream::IsResponseBodyComplete() const { |
| return pipeline_->IsResponseBodyComplete(pipeline_id_); |
| } |
| |
| bool HttpPipelinedStream::CanFindEndOfResponse() const { |
| return pipeline_->CanFindEndOfResponse(pipeline_id_); |
| } |
| |
| bool HttpPipelinedStream::IsMoreDataBuffered() const { |
| return pipeline_->IsMoreDataBuffered(pipeline_id_); |
| } |
| |
| bool HttpPipelinedStream::IsConnectionReused() const { |
| return pipeline_->IsConnectionReused(pipeline_id_); |
| } |
| |
| void HttpPipelinedStream::SetConnectionReused() { |
| pipeline_->SetConnectionReused(pipeline_id_); |
| } |
| |
| bool HttpPipelinedStream::IsConnectionReusable() const { |
| return pipeline_->usable(); |
| } |
| |
| void HttpPipelinedStream::GetSSLInfo(SSLInfo* ssl_info) { |
| pipeline_->GetSSLInfo(pipeline_id_, ssl_info); |
| } |
| |
| void HttpPipelinedStream::GetSSLCertRequestInfo( |
| SSLCertRequestInfo* cert_request_info) { |
| pipeline_->GetSSLCertRequestInfo(pipeline_id_, cert_request_info); |
| } |
| |
| bool HttpPipelinedStream::IsSpdyHttpStream() const { |
| return false; |
| } |
| |
| void HttpPipelinedStream::LogNumRttVsBytesMetrics() const { |
| // TODO(simonjam): I don't want to copy & paste this from http_basic_stream. |
| } |
| |
| void HttpPipelinedStream::Drain(HttpNetworkSession* session) { |
| pipeline_->Drain(this, session); |
| } |
| |
| const SSLConfig& HttpPipelinedStream::used_ssl_config() const { |
| return pipeline_->used_ssl_config(); |
| } |
| |
| const ProxyInfo& HttpPipelinedStream::used_proxy_info() const { |
| return pipeline_->used_proxy_info(); |
| } |
| |
| const BoundNetLog& HttpPipelinedStream::net_log() const { |
| return pipeline_->net_log(); |
| } |
| |
| bool HttpPipelinedStream::was_npn_negotiated() const { |
| return pipeline_->was_npn_negotiated(); |
| } |
| |
| NextProto HttpPipelinedStream::protocol_negotiated() const { |
| return pipeline_->protocol_negotiated(); |
| } |
| |
| } // namespace net |