| // Copyright 2023 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "quiche/quic/moqt/tools/moqt_server.h" |
| |
| #include <memory> |
| #include <utility> |
| |
| #include "absl/status/statusor.h" |
| #include "absl/strings/string_view.h" |
| #include "quiche/quic/core/crypto/proof_source.h" |
| #include "quiche/quic/core/quic_types.h" |
| #include "quiche/quic/moqt/moqt_messages.h" |
| #include "quiche/quic/moqt/moqt_session.h" |
| #include "quiche/quic/tools/quic_server.h" |
| #include "quiche/quic/tools/web_transport_only_backend.h" |
| #include "quiche/web_transport/web_transport.h" |
| |
| namespace moqt { |
| |
| namespace { |
| quic::WebTransportRequestCallback CreateWebTransportCallback( |
| MoqtIncomingSessionCallback callback) { |
| return [callback = std::move(callback)](absl::string_view path, |
| webtransport::Session* session) |
| -> absl::StatusOr<std::unique_ptr<webtransport::SessionVisitor>> { |
| absl::StatusOr<MoqtSessionCallbacks> callbacks = callback(path); |
| if (!callbacks.ok()) { |
| return callbacks.status(); |
| } |
| MoqtSessionParameters parameters; |
| parameters.perspective = quic::Perspective::IS_SERVER; |
| parameters.path = path; |
| parameters.using_webtrans = true; |
| parameters.version = MoqtVersion::kDraft02; |
| parameters.deliver_partial_objects = false; |
| return std::make_unique<MoqtSession>(session, parameters, |
| *std::move(callbacks)); |
| }; |
| } |
| } // namespace |
| |
| MoqtServer::MoqtServer(std::unique_ptr<quic::ProofSource> proof_source, |
| MoqtIncomingSessionCallback callback) |
| : backend_(CreateWebTransportCallback(std::move(callback))), |
| server_(std::move(proof_source), &backend_) {} |
| |
| } // namespace moqt |