xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/moqt/tools/moqt_server.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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)23 quic::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)45 MoqtServer::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