diff options
Diffstat (limited to 'net/http/http_basic_stream.cc')
| -rw-r--r-- | net/http/http_basic_stream.cc | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/net/http/http_basic_stream.cc b/net/http/http_basic_stream.cc index ecd692b..433b08e 100644 --- a/net/http/http_basic_stream.cc +++ b/net/http/http_basic_stream.cc @@ -4,33 +4,48 @@ #include "net/http/http_basic_stream.h" +#include "base/stringprintf.h" #include "net/base/io_buffer.h" #include "net/base/net_errors.h" +#include "net/http/http_request_headers.h" +#include "net/http/http_request_info.h" #include "net/http/http_stream_parser.h" +#include "net/http/http_util.h" #include "net/socket/client_socket_handle.h" namespace net { -HttpBasicStream::HttpBasicStream(ClientSocketHandle* connection) +HttpBasicStream::HttpBasicStream(ClientSocketHandle* connection, + bool using_proxy) : read_buf_(new GrowableIOBuffer()), - connection_(connection) { + connection_(connection), + using_proxy_(using_proxy), + request_info_(NULL) { } int HttpBasicStream::InitializeStream(const HttpRequestInfo* request_info, const BoundNetLog& net_log, CompletionCallback* callback) { + request_info_ = request_info; parser_.reset(new HttpStreamParser(connection_.get(), request_info, read_buf_, net_log)); return OK; } -int HttpBasicStream::SendRequest(const std::string& headers, +int HttpBasicStream::SendRequest(const HttpRequestHeaders& headers, UploadDataStream* request_body, HttpResponseInfo* response, CompletionCallback* callback) { DCHECK(parser_.get()); - return parser_->SendRequest(headers, request_body, response, callback); + const std::string path = using_proxy_ ? + HttpUtil::SpecForRequest(request_info_->url) : + HttpUtil::PathForRequest(request_info_->url); + request_line_ = base::StringPrintf("%s %s HTTP/1.1\r\n", + request_info_->method.c_str(), + path.c_str()) + headers.ToString(); + + return parser_->SendRequest(request_line_, request_body, response, callback); } HttpBasicStream::~HttpBasicStream() {} @@ -60,7 +75,7 @@ HttpStream* HttpBasicStream::RenewStreamForAuth() { DCHECK(IsResponseBodyComplete()); DCHECK(!IsMoreDataBuffered()); parser_.reset(); - return new HttpBasicStream(connection_.release()); + return new HttpBasicStream(connection_.release(), using_proxy_); } bool HttpBasicStream::IsResponseBodyComplete() const { |
