| // Copyright 2024 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/moq_chat.h" |
| |
| #include <optional> |
| |
| #include "absl/strings/str_cat.h" |
| #include "absl/strings/string_view.h" |
| #include "absl/time/clock.h" |
| #include "absl/time/time.h" |
| #include "quiche/quic/moqt/moqt_messages.h" |
| #include "quiche/common/platform/api/quiche_logging.h" |
| |
| namespace moqt::moq_chat { |
| |
| bool IsValidPath(absl::string_view path) { return path == kWebtransPath; } |
| |
| bool IsValidNamespace(const FullTrackName& track_namespace) { |
| return track_namespace.tuple().size() == kFullPathLength - 1 && |
| track_namespace.tuple()[0] == kBasePath; |
| } |
| |
| bool IsValidChatNamespace(const FullTrackName& track_namespace) { |
| return track_namespace.tuple().size() == 2 && |
| track_namespace.tuple()[0] == kBasePath; |
| } |
| |
| FullTrackName ConstructTrackName(absl::string_view chat_id, |
| absl::string_view username, |
| absl::string_view device_id) { |
| return FullTrackName{kBasePath, |
| chat_id, |
| username, |
| device_id, |
| absl::StrCat(ToUnixSeconds(::absl::Now())), |
| kNameField}; |
| } |
| |
| std::optional<FullTrackName> ConstructTrackNameFromNamespace( |
| const FullTrackName& track_namespace, absl::string_view chat_id) { |
| if (track_namespace.tuple().size() != kFullPathLength - 1) { |
| return std::nullopt; |
| } |
| if (track_namespace.tuple()[0] != kBasePath || |
| track_namespace.tuple()[1] != chat_id) { |
| return std::nullopt; |
| } |
| FullTrackName track_name = track_namespace; |
| track_name.AddElement(kNameField); |
| return track_name; |
| } |
| |
| absl::string_view GetUsername(const FullTrackName& track_name) { |
| QUICHE_DCHECK(track_name.tuple().size() > 2); |
| return track_name.tuple()[2]; |
| } |
| |
| absl::string_view GetChatId(const FullTrackName& track_name) { |
| QUICHE_DCHECK(track_name.tuple().size() > 1); |
| return track_name.tuple()[1]; |
| } |
| |
| FullTrackName GetUserNamespace(const FullTrackName& track_name) { |
| QUICHE_DCHECK(track_name.tuple().size() == kFullPathLength); |
| FullTrackName track_namespace = track_name; |
| track_namespace.NameToNamespace(); |
| return track_namespace; |
| } |
| |
| FullTrackName GetChatNamespace(const FullTrackName& track_name) { |
| return FullTrackName{track_name.tuple()[0], track_name.tuple()[1]}; |
| } |
| |
| } // namespace moqt::moq_chat |