Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / net / tools / quic / quic_spdy_client_stream.h
blob7bbdee6b494ce1972e3bb85d0d2b15b207f83155
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.
5 #ifndef NET_TOOLS_QUIC_QUIC_SPDY_CLIENT_STREAM_H_
6 #define NET_TOOLS_QUIC_QUIC_SPDY_CLIENT_STREAM_H_
8 #include <sys/types.h>
9 #include <string>
11 #include "base/basictypes.h"
12 #include "base/strings/string_piece.h"
13 #include "net/base/io_buffer.h"
14 #include "net/quic/quic_data_stream.h"
15 #include "net/quic/quic_protocol.h"
16 #include "net/tools/balsa/balsa_frame.h"
17 #include "net/tools/balsa/balsa_headers.h"
19 namespace net {
21 namespace tools {
23 class QuicClientSession;
25 // All this does right now is send an SPDY request, and aggregate the
26 // SPDY response.
27 class QuicSpdyClientStream : public QuicDataStream {
28 public:
29 QuicSpdyClientStream(QuicStreamId id, QuicClientSession* session);
30 virtual ~QuicSpdyClientStream();
32 // Override the base class to close the write side as soon as we get a
33 // response.
34 // SPDY/HTTP does not support bidirectional streaming.
35 virtual void OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE;
37 // Override the base class to store the size of the headers.
38 virtual void OnStreamHeadersComplete(bool fin, size_t frame_len) OVERRIDE;
40 // ReliableQuicStream implementation called by the session when there's
41 // data for us.
42 virtual uint32 ProcessData(const char* data, uint32 data_len) OVERRIDE;
44 virtual void OnFinRead() OVERRIDE;
46 // Serializes the headers and body, sends it to the server, and
47 // returns the number of bytes sent.
48 ssize_t SendRequest(const BalsaHeaders& headers,
49 base::StringPiece body,
50 bool fin);
52 // Sends body data to the server, or buffers if it can't be sent immediately.
53 void SendBody(const std::string& data, bool fin);
55 // Returns the response data.
56 const std::string& data() { return data_; }
58 // Returns whatever headers have been received for this stream.
59 const BalsaHeaders& headers() { return headers_; }
61 size_t header_bytes_read() const { return header_bytes_read_; }
63 size_t header_bytes_written() const { return header_bytes_written_; }
65 // While the server's set_priority shouldn't be called externally, the creator
66 // of client-side streams should be able to set the priority.
67 using QuicDataStream::set_priority;
69 private:
70 int ParseResponseHeaders();
72 BalsaHeaders headers_;
73 std::string data_;
75 scoped_refptr<GrowableIOBuffer> read_buf_;
76 bool response_headers_received_;
77 size_t header_bytes_read_;
78 size_t header_bytes_written_;
80 DISALLOW_COPY_AND_ASSIGN(QuicSpdyClientStream);
83 } // namespace tools
84 } // namespace net
86 #endif // NET_TOOLS_QUIC_QUIC_SPDY_CLIENT_STREAM_H_