• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/http/http_pipelined_stream.h"
6 
7 #include "base/logging.h"
8 #include "base/strings/stringprintf.h"
9 #include "net/base/net_errors.h"
10 #include "net/http/http_pipelined_connection_impl.h"
11 #include "net/http/http_request_headers.h"
12 #include "net/http/http_request_info.h"
13 #include "net/http/http_util.h"
14 
15 namespace net {
16 
HttpPipelinedStream(HttpPipelinedConnectionImpl * pipeline,int pipeline_id)17 HttpPipelinedStream::HttpPipelinedStream(HttpPipelinedConnectionImpl* pipeline,
18                                          int pipeline_id)
19     : pipeline_(pipeline),
20       pipeline_id_(pipeline_id),
21       request_info_(NULL) {
22 }
23 
~HttpPipelinedStream()24 HttpPipelinedStream::~HttpPipelinedStream() {
25   pipeline_->OnStreamDeleted(pipeline_id_);
26 }
27 
InitializeStream(const HttpRequestInfo * request_info,RequestPriority priority,const BoundNetLog & net_log,const CompletionCallback & callback)28 int HttpPipelinedStream::InitializeStream(
29     const HttpRequestInfo* request_info,
30     RequestPriority priority,
31     const BoundNetLog& net_log,
32     const CompletionCallback& callback) {
33   request_info_ = request_info;
34   pipeline_->InitializeParser(pipeline_id_, request_info, net_log);
35   return OK;
36 }
37 
38 
SendRequest(const HttpRequestHeaders & headers,HttpResponseInfo * response,const CompletionCallback & callback)39 int HttpPipelinedStream::SendRequest(const HttpRequestHeaders& headers,
40                                      HttpResponseInfo* response,
41                                      const CompletionCallback& callback) {
42   CHECK(pipeline_id_);
43   CHECK(request_info_);
44   // TODO(simonjam): Proxy support will be needed here.
45   const std::string path = HttpUtil::PathForRequest(request_info_->url);
46   std::string request_line_ = base::StringPrintf("%s %s HTTP/1.1\r\n",
47                                                  request_info_->method.c_str(),
48                                                  path.c_str());
49   return pipeline_->SendRequest(pipeline_id_, request_line_, headers, response,
50                                 callback);
51 }
52 
GetUploadProgress() const53 UploadProgress HttpPipelinedStream::GetUploadProgress() const {
54   return pipeline_->GetUploadProgress(pipeline_id_);
55 }
56 
ReadResponseHeaders(const CompletionCallback & callback)57 int HttpPipelinedStream::ReadResponseHeaders(
58     const CompletionCallback& callback) {
59   return pipeline_->ReadResponseHeaders(pipeline_id_, callback);
60 }
61 
GetResponseInfo() const62 const HttpResponseInfo* HttpPipelinedStream::GetResponseInfo() const {
63   return pipeline_->GetResponseInfo(pipeline_id_);
64 }
65 
ReadResponseBody(IOBuffer * buf,int buf_len,const CompletionCallback & callback)66 int HttpPipelinedStream::ReadResponseBody(IOBuffer* buf, int buf_len,
67                                           const CompletionCallback& callback) {
68   return pipeline_->ReadResponseBody(pipeline_id_, buf, buf_len, callback);
69 }
70 
Close(bool not_reusable)71 void HttpPipelinedStream::Close(bool not_reusable) {
72   pipeline_->Close(pipeline_id_, not_reusable);
73 }
74 
RenewStreamForAuth()75 HttpStream* HttpPipelinedStream::RenewStreamForAuth() {
76   if (pipeline_->usable()) {
77     return pipeline_->CreateNewStream();
78   }
79   return NULL;
80 }
81 
IsResponseBodyComplete() const82 bool HttpPipelinedStream::IsResponseBodyComplete() const {
83   return pipeline_->IsResponseBodyComplete(pipeline_id_);
84 }
85 
CanFindEndOfResponse() const86 bool HttpPipelinedStream::CanFindEndOfResponse() const {
87   return pipeline_->CanFindEndOfResponse(pipeline_id_);
88 }
89 
IsConnectionReused() const90 bool HttpPipelinedStream::IsConnectionReused() const {
91   return pipeline_->IsConnectionReused(pipeline_id_);
92 }
93 
SetConnectionReused()94 void HttpPipelinedStream::SetConnectionReused() {
95   pipeline_->SetConnectionReused(pipeline_id_);
96 }
97 
IsConnectionReusable() const98 bool HttpPipelinedStream::IsConnectionReusable() const {
99   return pipeline_->usable();
100 }
101 
GetTotalReceivedBytes() const102 int64 HttpPipelinedStream::GetTotalReceivedBytes() const {
103   return pipeline_->GetTotalReceivedBytes(pipeline_id_);
104 }
105 
GetLoadTimingInfo(LoadTimingInfo * load_timing_info) const106 bool HttpPipelinedStream::GetLoadTimingInfo(
107     LoadTimingInfo* load_timing_info) const {
108   return pipeline_->GetLoadTimingInfo(pipeline_id_, load_timing_info);
109 }
110 
GetSSLInfo(SSLInfo * ssl_info)111 void HttpPipelinedStream::GetSSLInfo(SSLInfo* ssl_info) {
112   pipeline_->GetSSLInfo(pipeline_id_, ssl_info);
113 }
114 
GetSSLCertRequestInfo(SSLCertRequestInfo * cert_request_info)115 void HttpPipelinedStream::GetSSLCertRequestInfo(
116     SSLCertRequestInfo* cert_request_info) {
117   pipeline_->GetSSLCertRequestInfo(pipeline_id_, cert_request_info);
118 }
119 
IsSpdyHttpStream() const120 bool HttpPipelinedStream::IsSpdyHttpStream() const {
121   return false;
122 }
123 
Drain(HttpNetworkSession * session)124 void HttpPipelinedStream::Drain(HttpNetworkSession* session) {
125   pipeline_->Drain(this, session);
126 }
127 
SetPriority(RequestPriority priority)128 void HttpPipelinedStream::SetPriority(RequestPriority priority) {
129   // TODO(akalin): Plumb this through to |pipeline_| and its
130   // underlying ClientSocketHandle.
131 }
132 
used_ssl_config() const133 const SSLConfig& HttpPipelinedStream::used_ssl_config() const {
134   return pipeline_->used_ssl_config();
135 }
136 
used_proxy_info() const137 const ProxyInfo& HttpPipelinedStream::used_proxy_info() const {
138   return pipeline_->used_proxy_info();
139 }
140 
net_log() const141 const BoundNetLog& HttpPipelinedStream::net_log() const {
142   return pipeline_->net_log();
143 }
144 
was_npn_negotiated() const145 bool HttpPipelinedStream::was_npn_negotiated() const {
146   return pipeline_->was_npn_negotiated();
147 }
148 
protocol_negotiated() const149 NextProto HttpPipelinedStream::protocol_negotiated() const {
150   return pipeline_->protocol_negotiated();
151 }
152 
153 }  // namespace net
154