| // Copyright 2019 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. | |
| #ifndef QUICHE_QUIC_MASQUE_MASQUE_SERVER_SESSION_H_ | |
| #define QUICHE_QUIC_MASQUE_MASQUE_SERVER_SESSION_H_ | |
| #include "net/third_party/quiche/src/quic/masque/masque_compression_engine.h" | |
| #include "net/third_party/quiche/src/quic/masque/masque_server_backend.h" | |
| #include "net/third_party/quiche/src/quic/platform/api/quic_export.h" | |
| #include "net/third_party/quiche/src/quic/tools/quic_simple_server_session.h" | |
| namespace quic { | |
| // QUIC server session for connection to MASQUE proxy. | |
| class QUIC_NO_EXPORT MasqueServerSession | |
| : public QuicSimpleServerSession, | |
| public MasqueServerBackend::BackendClient { | |
| public: | |
| // Interface meant to be implemented by owner of this MasqueServerSession | |
| // instance. | |
| class QUIC_NO_EXPORT Visitor { | |
| public: | |
| virtual ~Visitor() {} | |
| // Register a client connection ID as being handled by this session. | |
| virtual void RegisterClientConnectionId( | |
| QuicConnectionId client_connection_id, | |
| MasqueServerSession* masque_server_session) = 0; | |
| // Unregister a client connection ID. | |
| virtual void UnregisterClientConnectionId( | |
| QuicConnectionId client_connection_id) = 0; | |
| }; | |
| explicit MasqueServerSession( | |
| const QuicConfig& config, | |
| const ParsedQuicVersionVector& supported_versions, | |
| QuicConnection* connection, | |
| QuicSession::Visitor* visitor, | |
| Visitor* owner, | |
| QuicCryptoServerStreamBase::Helper* helper, | |
| const QuicCryptoServerConfig* crypto_config, | |
| QuicCompressedCertsCache* compressed_certs_cache, | |
| MasqueServerBackend* masque_server_backend); | |
| // Disallow copy and assign. | |
| MasqueServerSession(const MasqueServerSession&) = delete; | |
| MasqueServerSession& operator=(const MasqueServerSession&) = delete; | |
| // From QuicSession. | |
| void OnMessageReceived(absl::string_view message) override; | |
| void OnMessageAcked(QuicMessageId message_id, | |
| QuicTime receive_timestamp) override; | |
| void OnMessageLost(QuicMessageId message_id) override; | |
| void OnConnectionClosed(const QuicConnectionCloseFrame& frame, | |
| ConnectionCloseSource source) override; | |
| // From MasqueServerBackend::BackendClient. | |
| std::unique_ptr<QuicBackendResponse> HandleMasqueRequest( | |
| const std::string& masque_path, | |
| const spdy::Http2HeaderBlock& request_headers, | |
| const std::string& request_body, | |
| QuicSimpleServerBackend::RequestHandler* request_handler) override; | |
| // Handle packet for client, meant to be called by MasqueDispatcher. | |
| void HandlePacketFromServer(const ReceivedPacketInfo& packet_info); | |
| private: | |
| MasqueServerBackend* masque_server_backend_; // Unowned. | |
| Visitor* owner_; // Unowned. | |
| MasqueCompressionEngine compression_engine_; | |
| bool masque_initialized_ = false; | |
| }; | |
| } // namespace quic | |
| #endif // QUICHE_QUIC_MASQUE_MASQUE_SERVER_SESSION_H_ |