1 // Copyright 2023 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_MOQT_TOOLS_MOQT_CLIENT_H_ 6 #define QUICHE_QUIC_MOQT_TOOLS_MOQT_CLIENT_H_ 7 8 #include <memory> 9 #include <string> 10 11 #include "absl/status/status.h" 12 #include "quiche/quic/core/crypto/proof_verifier.h" 13 #include "quiche/quic/core/http/quic_spdy_client_session.h" 14 #include "quiche/quic/core/io/quic_event_loop.h" 15 #include "quiche/quic/moqt/moqt_session.h" 16 #include "quiche/quic/platform/api/quic_socket_address.h" 17 #include "quiche/quic/tools/quic_default_client.h" 18 #include "quiche/common/platform/api/quiche_export.h" 19 20 namespace moqt { 21 22 // A synchronous MoQT client based on QuicDefaultClient. 23 class QUICHE_EXPORT MoqtClient { 24 public: 25 MoqtClient(quic::QuicSocketAddress peer_address, 26 const quic::QuicServerId& server_id, 27 std::unique_ptr<quic::ProofVerifier> proof_verifier, 28 quic::QuicEventLoop* event_loop); 29 30 // Establishes the connection to the specified endpoint. The errors are 31 // returned via the session termination callback. 32 void Connect(std::string path, MoqtSessionCallbacks callbacks); 33 session()34 MoqtSession* session() { return session_; } 35 36 private: 37 absl::Status ConnectInner(std::string path, MoqtSessionCallbacks& callbacks); 38 39 quic::QuicDefaultClient spdy_client_; 40 MoqtSession* session_ = nullptr; 41 }; 42 43 } // namespace moqt 44 45 #endif // QUICHE_QUIC_MOQT_TOOLS_MOQT_CLIENT_H_ 46