http_basic_stream.h revision ddb351dbec246cf1fab5ec20d2d5520909041de1
1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// HttpBasicStream is a simple implementation of HttpStream. It assumes it is 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// not sharing a sharing with any other HttpStreams, therefore it just reads and 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// writes directly to the Http Stream. 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_HTTP_HTTP_BASIC_STREAM_H_ 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_HTTP_HTTP_BASIC_STREAM_H_ 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <string> 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/basictypes.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/http/http_stream.h" 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net { 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BoundNetLog; 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass ClientSocketHandle; 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass GrowableIOBuffer; 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass HttpResponseInfo; 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstruct HttpRequestInfo; 26513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass HttpRequestHeaders; 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass HttpStreamParser; 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass IOBuffer; 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass UploadDataStream; 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass HttpBasicStream : public HttpStream { 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Constructs a new HttpBasicStream. If |parser| is NULL, then 3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // InitializeStream should be called to initialize it correctly. If 3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // |parser| is non-null, then InitializeStream should not be called, 3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // as the stream is already initialized. 3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen HttpBasicStream(ClientSocketHandle* connection, 3821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen HttpStreamParser* parser, 3921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool using_proxy); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~HttpBasicStream(); 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // HttpStream methods: 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual int InitializeStream(const HttpRequestInfo* request_info, 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const BoundNetLog& net_log, 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompletionCallback* callback) OVERRIDE; 463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 47513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual int SendRequest(const HttpRequestHeaders& headers, 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott UploadDataStream* request_body, 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott HttpResponseInfo* response, 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompletionCallback* callback) OVERRIDE; 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual uint64 GetUploadProgress() const OVERRIDE; 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual int ReadResponseHeaders(CompletionCallback* callback) OVERRIDE; 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual const HttpResponseInfo* GetResponseInfo() const OVERRIDE; 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual int ReadResponseBody(IOBuffer* buf, int buf_len, 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompletionCallback* callback) OVERRIDE; 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Close(bool not_reusable) OVERRIDE; 623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual HttpStream* RenewStreamForAuth() OVERRIDE; 64731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool IsResponseBodyComplete() const OVERRIDE; 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool CanFindEndOfResponse() const OVERRIDE; 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool IsMoreDataBuffered() const OVERRIDE; 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool IsConnectionReused() const OVERRIDE; 723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetConnectionReused() OVERRIDE; 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool IsConnectionReusable() const OVERRIDE; 763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void GetSSLInfo(SSLInfo* ssl_info) OVERRIDE; 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void GetSSLCertRequestInfo( 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SSLCertRequestInfo* cert_request_info) OVERRIDE; 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool IsSpdyHttpStream() const OVERRIDE; 833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott scoped_refptr<GrowableIOBuffer> read_buf_; 86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott scoped_ptr<HttpStreamParser> parser_; 88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_ptr<ClientSocketHandle> connection_; 903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 91513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool using_proxy_; 92513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 93513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string request_line_; 94513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 95513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const HttpRequestInfo* request_info_; 96513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DISALLOW_COPY_AND_ASSIGN(HttpBasicStream); 98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace net 101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // NET_HTTP_HTTP_BASIC_STREAM_H_ 103