1// Copyright 2014 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#ifndef NET_QUIC_QUIC_SPDY_SERVER_STREAM_H_
6#define NET_QUIC_QUIC_SPDY_SERVER_STREAM_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "net/base/io_buffer.h"
12#include "net/quic/quic_data_stream.h"
13#include "net/quic/quic_protocol.h"
14#include "net/tools/balsa/balsa_headers.h"
15
16namespace net {
17
18class QuicSession;
19
20namespace test {
21class QuicSpdyServerStreamPeer;
22}  // namespace test
23
24// All this does right now is aggregate data, and on fin, send an HTTP
25// response.
26class QuicSpdyServerStream : public QuicDataStream {
27 public:
28  QuicSpdyServerStream(QuicStreamId id, QuicSession* session);
29  virtual ~QuicSpdyServerStream();
30
31  // ReliableQuicStream implementation called by the session when there's
32  // data for us.
33  virtual uint32 ProcessData(const char* data, uint32 data_len) OVERRIDE;
34  virtual void OnFinRead() OVERRIDE;
35
36  int ParseRequestHeaders();
37
38 private:
39  friend class test::QuicSpdyServerStreamPeer;
40
41  // Sends a basic 200 response using SendHeaders for the headers and WriteData
42  // for the body.
43  void SendResponse();
44
45  // Sends a basic 500 response using SendHeaders for the headers and WriteData
46  // for the body
47  void SendErrorResponse();
48
49  void SendHeadersAndBody(const BalsaHeaders& response_headers,
50                          base::StringPiece body);
51
52  BalsaHeaders headers_;
53  string body_;
54
55  // Buffer into which response header data is read.
56  scoped_refptr<GrowableIOBuffer> read_buf_;
57  bool request_headers_received_;
58
59  DISALLOW_COPY_AND_ASSIGN(QuicSpdyServerStream);
60};
61
62}  // namespace net
63
64#endif  // NET_QUIC_QUIC_SPDY_SERVER_STREAM_H_
65