| // 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_ENCAPSULATED_CLIENT_SESSION_H_ | |
| #define QUICHE_QUIC_MASQUE_MASQUE_ENCAPSULATED_CLIENT_SESSION_H_ | |
| #include "net/third_party/quiche/src/quic/core/http/quic_spdy_client_session.h" | |
| #include "net/third_party/quiche/src/quic/masque/masque_client_session.h" | |
| #include "net/third_party/quiche/src/quic/platform/api/quic_export.h" | |
| namespace quic { | |
| // QUIC client session for QUIC encapsulated in MASQUE. This client session is | |
| // maintained end-to-end between the client and the web-server (the MASQUE | |
| // session does not have access to the cryptographic keys for the end-to-end | |
| // session), but its packets are sent encapsulated inside DATAGRAM frames in a | |
| // MASQUE session, as opposed to regular QUIC packets. Multiple encapsulated | |
| // sessions can coexist inside a MASQUE session. | |
| class QUIC_NO_EXPORT MasqueEncapsulatedClientSession | |
| : public QuicSpdyClientSession, | |
| public MasqueClientSession::EncapsulatedClientSession { | |
| public: | |
| // Takes ownership of |connection|, but not of |crypto_config| or | |
| // |push_promise_index| or |masque_client_session|. All pointers must be | |
| // non-null. Caller must ensure that |push_promise_index| and | |
| // |masque_client_session| stay valid for the lifetime of the newly created | |
| // MasqueEncapsulatedClientSession. | |
| MasqueEncapsulatedClientSession( | |
| const QuicConfig& config, | |
| const ParsedQuicVersionVector& supported_versions, | |
| QuicConnection* connection, | |
| const QuicServerId& server_id, | |
| QuicCryptoClientConfig* crypto_config, | |
| QuicClientPushPromiseIndex* push_promise_index, | |
| MasqueClientSession* masque_client_session); | |
| // Disallow copy and assign. | |
| MasqueEncapsulatedClientSession(const MasqueEncapsulatedClientSession&) = | |
| delete; | |
| MasqueEncapsulatedClientSession& operator=( | |
| const MasqueEncapsulatedClientSession&) = delete; | |
| // From MasqueClientSession::EncapsulatedClientSession. | |
| void ProcessPacket(quiche::QuicheStringPiece packet, | |
| QuicSocketAddress server_address) override; | |
| // From QuicSession. | |
| void OnConnectionClosed(const QuicConnectionCloseFrame& frame, | |
| ConnectionCloseSource source) override; | |
| private: | |
| MasqueClientSession* masque_client_session_; // Unowned. | |
| }; | |
| } // namespace quic | |
| #endif // QUICHE_QUIC_MASQUE_MASQUE_ENCAPSULATED_CLIENT_SESSION_H_ |