xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/masque/masque_encapsulated_client.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2019 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.
4 
5 #ifndef QUICHE_QUIC_MASQUE_MASQUE_ENCAPSULATED_CLIENT_H_
6 #define QUICHE_QUIC_MASQUE_MASQUE_ENCAPSULATED_CLIENT_H_
7 
8 #include <memory>
9 
10 #include "quiche/quic/core/crypto/proof_verifier.h"
11 #include "quiche/quic/core/io/quic_event_loop.h"
12 #include "quiche/quic/core/quic_connection.h"
13 #include "quiche/quic/core/quic_session.h"
14 #include "quiche/quic/core/quic_versions.h"
15 #include "quiche/quic/masque/masque_client.h"
16 #include "quiche/quic/masque/masque_encapsulated_client_session.h"
17 #include "quiche/quic/platform/api/quic_export.h"
18 #include "quiche/quic/platform/api/quic_socket_address.h"
19 #include "quiche/quic/tools/quic_default_client.h"
20 
21 namespace quic {
22 
23 // QUIC client for QUIC encapsulated in MASQUE.
24 class QUIC_NO_EXPORT MasqueEncapsulatedClient : public QuicDefaultClient {
25  public:
26   MasqueEncapsulatedClient(QuicSocketAddress server_address,
27                            const QuicServerId& server_id,
28                            QuicEventLoop* event_loop,
29                            std::unique_ptr<ProofVerifier> proof_verifier,
30                            MasqueClient* masque_client);
31   ~MasqueEncapsulatedClient() override;
32 
33   // Disallow copy and assign.
34   MasqueEncapsulatedClient(const MasqueEncapsulatedClient&) = delete;
35   MasqueEncapsulatedClient& operator=(const MasqueEncapsulatedClient&) = delete;
36 
37   // From QuicClient.
38   std::unique_ptr<QuicSession> CreateQuicClientSession(
39       const ParsedQuicVersionVector& supported_versions,
40       QuicConnection* connection) override;
41 
42   // MASQUE client that this client is encapsulated in.
masque_client()43   MasqueClient* masque_client() { return masque_client_; }
44 
45   // Client session for this client.
46   MasqueEncapsulatedClientSession* masque_encapsulated_client_session();
47 
48  private:
49   MasqueClient* masque_client_;  // Unowned.
50 };
51 
52 }  // namespace quic
53 
54 #endif  // QUICHE_QUIC_MASQUE_MASQUE_ENCAPSULATED_CLIENT_H_
55