aboutsummaryrefslogtreecommitdiff
path: root/cast/sender/channel/cast_framer.cc
diff options
context:
space:
mode:
authorbtolsch <btolsch@chromium.org>2019-10-01 11:39:33 -0700
committerCommit Bot <commit-bot@chromium.org>2019-10-01 20:24:53 +0000
commit9dd4cf87c1214381e72be6b9e1c4af33417e8f99 (patch)
tree9769ab2c497ed03ff6dac98bec5bfc77434fd36e /cast/sender/channel/cast_framer.cc
parent5dc91624a6d9d1369769eab8b603399744cdd63c (diff)
downloadopenscreen-9dd4cf87c1214381e72be6b9e1c4af33417e8f99.tar.gz
Add CastSocket and implementation
This change adds a CastSocket interface to handle sending and receiving CastMessage structures along with an implementation that uses the platform TlsConnection for transport. Bug: openscreen:59 Change-Id: I92dc29b45efb2b1657a2ff6d962f1ed670311370 Reviewed-on: https://chromium-review.googlesource.com/c/openscreen/+/1825511 Commit-Queue: Brandon Tolsch <btolsch@chromium.org> Reviewed-by: Ryan Keane <rwkeane@google.com>
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