diff options
Diffstat (limited to 'chromium/net/quic/quic_server_session.h')
-rw-r--r-- | chromium/net/quic/quic_server_session.h | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/chromium/net/quic/quic_server_session.h b/chromium/net/quic/quic_server_session.h new file mode 100644 index 00000000000..30ac08c80df --- /dev/null +++ b/chromium/net/quic/quic_server_session.h @@ -0,0 +1,87 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// A server specific QuicSession subclass. + +#ifndef NET_QUIC_QUIC_SERVER_SESSION_H_ +#define NET_QUIC_QUIC_SERVER_SESSION_H_ + +#include <set> +#include <vector> + +#include "base/basictypes.h" +#include "base/containers/hash_tables.h" +#include "base/memory/scoped_ptr.h" +#include "net/quic/quic_crypto_server_stream.h" +#include "net/quic/quic_protocol.h" +#include "net/quic/quic_session.h" + +namespace net { + +class QuicBlockedWriterInterface; +class QuicConfig; +class QuicConnection; +class QuicCryptoServerConfig; +class ReliableQuicStream; + +namespace test { +class QuicServerSessionPeer; +} // namespace test + +// An interface from the session to the entity owning the session. +// This lets the session notify its owner (the Dispatcher) when the connection +// is closed or blocked. +class QuicServerSessionVisitor { + public: + virtual ~QuicServerSessionVisitor() {} + + virtual void OnConnectionClosed(QuicConnectionId connection_id, + QuicErrorCode error) = 0; + virtual void OnWriteBlocked(QuicBlockedWriterInterface* writer) = 0; +}; + +class QuicServerSession : public QuicSession { + public: + QuicServerSession(const QuicConfig& config, + QuicConnection* connection, + QuicServerSessionVisitor* visitor); + + // Override the base class to notify the owner of the connection close. + virtual void OnConnectionClosed(QuicErrorCode error, bool from_peer) OVERRIDE; + virtual void OnWriteBlocked() OVERRIDE; + + virtual ~QuicServerSession(); + + virtual void InitializeSession(const QuicCryptoServerConfig& crypto_config); + + const QuicCryptoServerStream* crypto_stream() const { + return crypto_stream_.get(); + } + + protected: + // QuicSession methods: + virtual QuicDataStream* CreateIncomingDataStream(QuicStreamId id) OVERRIDE; + virtual QuicDataStream* CreateOutgoingDataStream() OVERRIDE; + virtual QuicCryptoServerStream* GetCryptoStream() OVERRIDE; + + // If we should create an incoming stream, returns true. Otherwise + // does error handling, including communicating the error to the client and + // possibly closing the connection, and returns false. + virtual bool ShouldCreateIncomingDataStream(QuicStreamId id); + + virtual QuicCryptoServerStream* CreateQuicCryptoServerStream( + const QuicCryptoServerConfig& crypto_config); + + private: + friend class test::QuicServerSessionPeer; + + scoped_ptr<QuicCryptoServerStream> crypto_stream_; + QuicServerSessionVisitor* visitor_; + + DISALLOW_COPY_AND_ASSIGN(QuicServerSession); +}; + +} // namespace net + +#endif // NET_QUIC_QUIC_SERVER_SESSION_H_ |