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