| // Copyright (c) 2013 Google Inc. 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/shell/http_stream_shell.h" | |
| #include "base/stringprintf.h" | |
| #include "net/base/net_errors.h" | |
| #include "net/http/http_util.h" | |
| #include "net/http/shell/http_stream_shell_loader.h" | |
| namespace net { | |
| HttpStreamShell::HttpStreamShell(HttpStreamShellLoader* loader) | |
| : loader_(loader), | |
| request_info_(NULL), | |
| response_(NULL) { | |
| } | |
| HttpStreamShell::~HttpStreamShell() { | |
| // make sure close is called. | |
| Close(true); | |
| } | |
| int HttpStreamShell::InitializeStream(const HttpRequestInfo* request_info, | |
| const BoundNetLog& net_log, | |
| const CompletionCallback& callback) { | |
| // Loader object is received in constructor, not other steps left for | |
| // this function. | |
| DCHECK(loader_); | |
| loader_->Open(request_info, net_log); | |
| request_info_ = request_info; | |
| return OK; | |
| } | |
| int HttpStreamShell::SendRequest(const HttpRequestHeaders& request_headers, | |
| HttpResponseInfo* response, | |
| const CompletionCallback& callback) { | |
| DCHECK(loader_); | |
| DCHECK(request_info_); | |
| const std::string path = HttpUtil::PathForRequest(request_info_->url); | |
| // Force http 1.1 | |
| request_line_ = base::StringPrintf("%s %s HTTP/1.1\r\n", | |
| request_info_->method.c_str(), | |
| path.c_str()); | |
| return loader_->SendRequest(request_line_, request_headers, | |
| response, callback); | |
| } | |
| int HttpStreamShell::ReadResponseHeaders(const CompletionCallback& callback) { | |
| return loader_->ReadResponseHeaders(callback); | |
| } | |
| const HttpResponseInfo* HttpStreamShell::GetResponseInfo() const { | |
| return response_; | |
| } | |
| int HttpStreamShell::ReadResponseBody(IOBuffer* buf, int buf_len, | |
| const CompletionCallback& callback) { | |
| return loader_->ReadResponseBody(buf, buf_len, callback); | |
| } | |
| void HttpStreamShell::Close(bool not_reusable) { | |
| loader_->Close(not_reusable); | |
| } | |
| bool HttpStreamShell::IsResponseBodyComplete() const { | |
| return loader_->IsResponseBodyComplete(); | |
| } | |
| // Set proxy information | |
| void HttpStreamShell::SetProxy(const ProxyInfo* info) { | |
| loader_->SetProxy(info); | |
| } | |
| } // namespace net |