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