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 #include "quiche/quic/moqt/tools/moqt_server.h" 6 7 #include <memory> 8 #include <utility> 9 10 #include "absl/status/statusor.h" 11 #include "absl/strings/string_view.h" 12 #include "quiche/quic/core/crypto/proof_source.h" 13 #include "quiche/quic/core/quic_types.h" 14 #include "quiche/quic/moqt/moqt_messages.h" 15 #include "quiche/quic/moqt/moqt_session.h" 16 #include "quiche/quic/tools/quic_server.h" 17 #include "quiche/quic/tools/web_transport_only_backend.h" 18 #include "quiche/web_transport/web_transport.h" 19 20 namespace moqt { 21 22 namespace { CreateWebTransportCallback(MoqtIncomingSessionCallback callback)23quic::WebTransportRequestCallback CreateWebTransportCallback( 24 MoqtIncomingSessionCallback callback) { 25 return [callback = std::move(callback)](absl::string_view path, 26 webtransport::Session* session) 27 -> absl::StatusOr<std::unique_ptr<webtransport::SessionVisitor>> { 28 absl::StatusOr<MoqtConfigureSessionCallback> configurator = callback(path); 29 if (!configurator.ok()) { 30 return configurator.status(); 31 } 32 MoqtSessionParameters parameters; 33 parameters.perspective = quic::Perspective::IS_SERVER; 34 parameters.path = path; 35 parameters.using_webtrans = true; 36 parameters.version = MoqtVersion::kDraft03; 37 parameters.deliver_partial_objects = false; 38 auto moqt_session = std::make_unique<MoqtSession>(session, parameters); 39 std::move (*configurator)(moqt_session.get()); 40 return moqt_session; 41 }; 42 } 43 } // namespace 44 MoqtServer(std::unique_ptr<quic::ProofSource> proof_source,MoqtIncomingSessionCallback callback)45MoqtServer::MoqtServer(std::unique_ptr<quic::ProofSource> proof_source, 46 MoqtIncomingSessionCallback callback) 47 : backend_(CreateWebTransportCallback(std::move(callback))), 48 server_(std::move(proof_source), &backend_) {} 49 50 } // namespace moqt 51