aboutsummaryrefslogtreecommitdiff
path: root/cast/sender/channel/cast_framer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cast/sender/channel/cast_framer.cc')
-rw-r--r--cast/sender/channel/cast_framer.cc94
1 files changed, 0 insertions, 94 deletions
diff --git a/cast/sender/channel/cast_framer.cc b/cast/sender/channel/cast_framer.cc
deleted file mode 100644
index b5a8acb1..00000000
--- a/cast/sender/channel/cast_framer.cc
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2019 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 "cast/sender/channel/cast_framer.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <limits>
-
-#include "cast/sender/channel/proto/cast_channel.pb.h"
-#include "platform/api/logging.h"
-#include "util/big_endian.h"
-#include "util/std_util.h"
-
-namespace cast {
-namespace channel {
-
-using ChannelError = openscreen::Error::Code;
-
-namespace {
-
-static constexpr size_t kHeaderSize = sizeof(uint32_t);
-
-// Cast specifies a max message body size of 64 KiB.
-static constexpr size_t kMaxBodySize = 65536;
-
-} // namespace
-
-MessageFramer::MessageFramer(absl::Span<uint8_t> input_buffer)
- : input_buffer_(input_buffer) {}
-
-MessageFramer::~MessageFramer() = default;
-
-// static
-ErrorOr<std::string> MessageFramer::Serialize(const CastMessage& message) {
- const size_t message_size = message.ByteSizeLong();
- if (message_size > kMaxBodySize || message_size == 0) {
- return ChannelError::kCastV2InvalidMessage;
- }
- std::string out(message_size + kHeaderSize, 0);
- openscreen::WriteBigEndian<uint32_t>(message_size, openscreen::data(out));
- if (!message.SerializeToArray(&out[kHeaderSize], message_size)) {
- return ChannelError::kCastV2InvalidMessage;
- }
- return out;
-}
-
-ErrorOr<size_t> MessageFramer::BytesRequested() const {
- if (message_bytes_received_ < kHeaderSize) {
- return kHeaderSize - message_bytes_received_;
- }
-
- const uint32_t message_size =
- openscreen::ReadBigEndian<uint32_t>(input_buffer_.data());
- if (message_size > kMaxBodySize) {
- return ChannelError::kCastV2InvalidMessage;
- }
- return (kHeaderSize + message_size) - message_bytes_received_;
-}
-
-ErrorOr<CastMessage> MessageFramer::TryDeserialize(size_t byte_count) {
- message_bytes_received_ += byte_count;
- if (message_bytes_received_ > input_buffer_.size()) {
- return ChannelError::kCastV2InvalidMessage;
- }
-
- if (message_bytes_received_ < kHeaderSize) {
- return ChannelError::kInsufficientBuffer;
- }
-
- const uint32_t message_size =
- openscreen::ReadBigEndian<uint32_t>(input_buffer_.data());
- if (message_size > kMaxBodySize) {
- return ChannelError::kCastV2InvalidMessage;
- }
-
- if (message_bytes_received_ < (kHeaderSize + message_size)) {
- return ChannelError::kInsufficientBuffer;
- }
-
- CastMessage parsed_message;
- if (!parsed_message.ParseFromArray(input_buffer_.data() + kHeaderSize,
- message_size)) {
- return ChannelError::kCastV2InvalidMessage;
- }
-
- message_bytes_received_ = 0;
- return parsed_message;
-}
-
-} // namespace channel
-} // namespace cast