1// Copyright 2013 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// A class that stores the common state between HttpBasicStream and
6// WebSocketBasicHandshakeStream.
7
8#ifndef NET_HTTP_HTTP_BASIC_STATE_H_
9#define NET_HTTP_HTTP_BASIC_STATE_H_
10
11#include <string>
12
13#include "base/basictypes.h"
14#include "base/memory/ref_counted.h"
15#include "base/memory/scoped_ptr.h"
16#include "net/base/completion_callback.h"
17#include "net/base/net_export.h"
18#include "net/base/request_priority.h"
19
20namespace net {
21
22class BoundNetLog;
23class ClientSocketHandle;
24class GrowableIOBuffer;
25class HttpStreamParser;
26struct HttpRequestInfo;
27
28class NET_EXPORT_PRIVATE HttpBasicState {
29 public:
30  HttpBasicState(ClientSocketHandle* connection, bool using_proxy);
31  ~HttpBasicState();
32
33  // Initialize() must be called before using any of the other methods.
34  int Initialize(const HttpRequestInfo* request_info,
35                 RequestPriority priority,
36                 const BoundNetLog& net_log,
37                 const CompletionCallback& callback);
38
39  HttpStreamParser* parser() const { return parser_.get(); }
40
41  bool using_proxy() const { return using_proxy_; }
42
43  // Deletes |parser_| and sets it to NULL.
44  void DeleteParser();
45
46  ClientSocketHandle* connection() const { return connection_.get(); }
47
48  scoped_ptr<ClientSocketHandle> ReleaseConnection();
49
50  scoped_refptr<GrowableIOBuffer> read_buf() const;
51
52  // Generates a string of the form "METHOD PATH HTTP/1.1\r\n", based on the
53  // values of request_info_ and using_proxy_.
54  std::string GenerateRequestLine() const;
55
56 private:
57  scoped_refptr<GrowableIOBuffer> read_buf_;
58
59  scoped_ptr<HttpStreamParser> parser_;
60
61  scoped_ptr<ClientSocketHandle> connection_;
62
63  const bool using_proxy_;
64
65  const HttpRequestInfo* request_info_;
66
67  DISALLOW_COPY_AND_ASSIGN(HttpBasicState);
68};
69
70}  // namespace net
71
72#endif  // NET_HTTP_HTTP_BASIC_STATE_H_
73