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