summaryrefslogtreecommitdiff
path: root/chromium/net/quic/quic_session.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/quic/quic_session.h')
-rw-r--r--chromium/net/quic/quic_session.h57
1 files changed, 34 insertions, 23 deletions
diff --git a/chromium/net/quic/quic_session.h b/chromium/net/quic/quic_session.h
index b58feb27426..083990b55f6 100644
--- a/chromium/net/quic/quic_session.h
+++ b/chromium/net/quic/quic_session.h
@@ -15,6 +15,7 @@
#include "net/base/linked_hash_map.h"
#include "net/quic/quic_connection.h"
#include "net/quic/quic_crypto_stream.h"
+#include "net/quic/quic_data_stream.h"
#include "net/quic/quic_packet_creator.h"
#include "net/quic/quic_protocol.h"
#include "net/quic/quic_spdy_compressor.h"
@@ -53,8 +54,7 @@ class NET_EXPORT_PRIVATE QuicSession : public QuicConnectionVisitorInterface {
};
QuicSession(QuicConnection* connection,
- const QuicConfig& config,
- bool is_server);
+ const QuicConfig& config);
virtual ~QuicSession();
@@ -63,9 +63,10 @@ class NET_EXPORT_PRIVATE QuicSession : public QuicConnectionVisitorInterface {
const std::vector<QuicStreamFrame>& frames) OVERRIDE;
virtual void OnRstStream(const QuicRstStreamFrame& frame) OVERRIDE;
virtual void OnGoAway(const QuicGoAwayFrame& frame) OVERRIDE;
- virtual void ConnectionClose(QuicErrorCode error, bool from_peer) OVERRIDE;
+ virtual void OnConnectionClosed(QuicErrorCode error, bool from_peer) OVERRIDE;
virtual void OnSuccessfulVersionNegotiation(
- const QuicVersion& version) OVERRIDE{}
+ const QuicVersion& version) OVERRIDE {}
+ virtual void OnConfigNegotiated() OVERRIDE;
// Not needed for HTTP.
virtual bool OnCanWrite() OVERRIDE;
virtual bool HasPendingHandshake() const OVERRIDE;
@@ -75,11 +76,16 @@ class NET_EXPORT_PRIVATE QuicSession : public QuicConnectionVisitorInterface {
// indicating if the fin bit was consumed. This does not indicate the data
// has been sent on the wire: it may have been turned into a packet and queued
// if the socket was unexpectedly blocked.
- virtual QuicConsumedData WritevData(QuicStreamId id,
- const struct iovec* iov,
- int iov_count,
- QuicStreamOffset offset,
- bool fin);
+ // If provided, |ack_notifier_delegate| will be registered to be notified when
+ // we have seen ACKs for all packets resulting from this call. Not owned by
+ // this class.
+ virtual QuicConsumedData WritevData(
+ QuicStreamId id,
+ const struct iovec* iov,
+ int iov_count,
+ QuicStreamOffset offset,
+ bool fin,
+ QuicAckNotifier::DelegateInterface* ack_notifier_delegate);
// Called by streams when they want to close the stream in both directions.
virtual void SendRstStream(QuicStreamId id, QuicRstStreamErrorCode error);
@@ -141,6 +147,10 @@ class NET_EXPORT_PRIVATE QuicSession : public QuicConnectionVisitorInterface {
void MarkWriteBlocked(QuicStreamId id, QuicPriority priority);
+ // Returns true if the session has data to be sent, either queued in the
+ // connection, or in a write-blocked stream.
+ bool HasQueuedData() const;
+
// Marks that |stream_id| is blocked waiting to decompress the
// headers identified by |decompression_id|.
void MarkDecompressionBlocked(QuicHeaderId decompression_id,
@@ -162,26 +172,32 @@ class NET_EXPORT_PRIVATE QuicSession : public QuicConnectionVisitorInterface {
QuicErrorCode error() const { return error_; }
+ bool is_server() const { return connection_->is_server(); }
+
protected:
+ typedef base::hash_map<QuicStreamId, QuicDataStream*> DataStreamMap;
+
// Creates a new stream, owned by the caller, to handle a peer-initiated
// stream. Returns NULL and does error handling if the stream can not be
// created.
- virtual ReliableQuicStream* CreateIncomingReliableStream(QuicStreamId id) = 0;
+ virtual QuicDataStream* CreateIncomingDataStream(QuicStreamId id) = 0;
// Create a new stream, owned by the caller, to handle a locally-initiated
// stream. Returns NULL if max streams have already been opened.
- virtual ReliableQuicStream* CreateOutgoingReliableStream() = 0;
+ virtual QuicDataStream* CreateOutgoingDataStream() = 0;
// Return the reserved crypto stream.
virtual QuicCryptoStream* GetCryptoStream() = 0;
// Adds 'stream' to the active stream map.
- virtual void ActivateStream(ReliableQuicStream* stream);
+ virtual void ActivateStream(QuicDataStream* stream);
// Returns the stream id for a new stream.
QuicStreamId GetNextStreamId();
- ReliableQuicStream* GetIncomingReliableStream(QuicStreamId stream_id);
+ QuicDataStream* GetIncomingReliableStream(QuicStreamId stream_id);
+
+ QuicDataStream* GetDataStream(const QuicStreamId stream_id);
ReliableQuicStream* GetStream(const QuicStreamId stream_id);
@@ -191,17 +207,15 @@ class NET_EXPORT_PRIVATE QuicSession : public QuicConnectionVisitorInterface {
// operations are being done on the streams at this time)
virtual void PostProcessAfterData();
- base::hash_map<QuicStreamId, ReliableQuicStream*>* streams() {
+ base::hash_map<QuicStreamId, QuicDataStream*>* streams() {
return &stream_map_;
}
- const base::hash_map<QuicStreamId, ReliableQuicStream*>* streams() const {
+ const base::hash_map<QuicStreamId, QuicDataStream*>* streams() const {
return &stream_map_;
}
- std::vector<ReliableQuicStream*>* closed_streams() {
- return &closed_streams_;
- }
+ std::vector<QuicDataStream*>* closed_streams() { return &closed_streams_; }
size_t get_max_open_streams() const {
return max_open_streams_;
@@ -211,8 +225,6 @@ class NET_EXPORT_PRIVATE QuicSession : public QuicConnectionVisitorInterface {
friend class test::QuicSessionPeer;
friend class VisitorShim;
- typedef base::hash_map<QuicStreamId, ReliableQuicStream*> ReliableStreamMap;
-
// Performs the work required to close |stream_id|. If |locally_reset|
// then the stream has been reset by this endpoint, not by the peer. This
// means the stream may become a zombie stream which needs to stay
@@ -248,7 +260,7 @@ class NET_EXPORT_PRIVATE QuicSession : public QuicConnectionVisitorInterface {
// deletions.
scoped_ptr<VisitorShim> visitor_shim_;
- std::vector<ReliableQuicStream*> closed_streams_;
+ std::vector<QuicDataStream*> closed_streams_;
QuicSpdyDecompressor decompressor_;
QuicSpdyCompressor compressor_;
@@ -259,9 +271,8 @@ class NET_EXPORT_PRIVATE QuicSession : public QuicConnectionVisitorInterface {
size_t max_open_streams_;
// Map from StreamId to pointers to streams that are owned by the caller.
- ReliableStreamMap stream_map_;
+ DataStreamMap stream_map_;
QuicStreamId next_stream_id_;
- bool is_server_;
// Set of stream ids that have been "implicitly created" by receipt
// of a stream id larger than the next expected stream id.