xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/masque/masque_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_CLIENT_H_
6 #define QUICHE_QUIC_MASQUE_MASQUE_CLIENT_H_
7 
8 #include <memory>
9 #include <string>
10 
11 #include "quiche/quic/core/crypto/proof_verifier.h"
12 #include "quiche/quic/core/io/quic_event_loop.h"
13 #include "quiche/quic/core/quic_connection.h"
14 #include "quiche/quic/core/quic_connection_id.h"
15 #include "quiche/quic/core/quic_session.h"
16 #include "quiche/quic/core/quic_versions.h"
17 #include "quiche/quic/masque/masque_client_session.h"
18 #include "quiche/quic/masque/masque_utils.h"
19 #include "quiche/quic/platform/api/quic_export.h"
20 #include "quiche/quic/platform/api/quic_socket_address.h"
21 #include "quiche/quic/tools/quic_default_client.h"
22 
23 namespace quic {
24 
25 // QUIC client that implements MASQUE.
26 class QUIC_NO_EXPORT MasqueClient : public QuicDefaultClient,
27                                     public MasqueClientSession::Owner {
28  public:
29   // Constructs a MasqueClient, performs a synchronous DNS lookup.
30   static std::unique_ptr<MasqueClient> Create(
31       const std::string& uri_template, MasqueMode masque_mode,
32       QuicEventLoop* event_loop, std::unique_ptr<ProofVerifier> proof_verifier);
33 
34   // From QuicClient.
35   std::unique_ptr<QuicSession> CreateQuicClientSession(
36       const ParsedQuicVersionVector& supported_versions,
37       QuicConnection* connection) override;
38 
39   // Client session for this client.
40   MasqueClientSession* masque_client_session();
41 
42   // Convenience accessor for the underlying connection ID.
43   QuicConnectionId connection_id();
44 
45   // From MasqueClientSession::Owner.
46   void OnSettingsReceived() override;
47 
masque_mode()48   MasqueMode masque_mode() const { return masque_mode_; }
49 
50  private:
51   // Constructor is private, use Create() instead.
52   MasqueClient(QuicSocketAddress server_address, const QuicServerId& server_id,
53                MasqueMode masque_mode, QuicEventLoop* event_loop,
54                std::unique_ptr<ProofVerifier> proof_verifier,
55                const std::string& uri_template);
56 
57   // Wait synchronously until we receive the peer's settings. Returns whether
58   // they were received.
59   bool WaitUntilSettingsReceived();
60 
61   std::string authority() const;
62 
63   // Disallow copy and assign.
64   MasqueClient(const MasqueClient&) = delete;
65   MasqueClient& operator=(const MasqueClient&) = delete;
66 
67   MasqueMode masque_mode_;
68   std::string uri_template_;
69   bool settings_received_ = false;
70 };
71 
72 }  // namespace quic
73 
74 #endif  // QUICHE_QUIC_MASQUE_MASQUE_CLIENT_H_
75