1*3f982cf4SFabien Sanglard // Copyright 2019 The Chromium Authors. All rights reserved. 2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be 3*3f982cf4SFabien Sanglard // found in the LICENSE file. 4*3f982cf4SFabien Sanglard 5*3f982cf4SFabien Sanglard #ifndef CAST_COMMON_CHANNEL_MESSAGE_FRAMER_H_ 6*3f982cf4SFabien Sanglard #define CAST_COMMON_CHANNEL_MESSAGE_FRAMER_H_ 7*3f982cf4SFabien Sanglard 8*3f982cf4SFabien Sanglard #include <stddef.h> 9*3f982cf4SFabien Sanglard #include <stdint.h> 10*3f982cf4SFabien Sanglard 11*3f982cf4SFabien Sanglard #include <memory> 12*3f982cf4SFabien Sanglard #include <vector> 13*3f982cf4SFabien Sanglard 14*3f982cf4SFabien Sanglard #include "absl/types/span.h" 15*3f982cf4SFabien Sanglard #include "cast/common/channel/proto/cast_channel.pb.h" 16*3f982cf4SFabien Sanglard #include "platform/base/error.h" 17*3f982cf4SFabien Sanglard 18*3f982cf4SFabien Sanglard namespace openscreen { 19*3f982cf4SFabien Sanglard namespace cast { 20*3f982cf4SFabien Sanglard namespace message_serialization { 21*3f982cf4SFabien Sanglard 22*3f982cf4SFabien Sanglard // Serializes |message_proto| into |message_data|. 23*3f982cf4SFabien Sanglard // Returns true if the message was serialized successfully, false otherwise. 24*3f982cf4SFabien Sanglard ErrorOr<std::vector<uint8_t>> Serialize( 25*3f982cf4SFabien Sanglard const ::cast::channel::CastMessage& message); 26*3f982cf4SFabien Sanglard 27*3f982cf4SFabien Sanglard struct DeserializeResult { 28*3f982cf4SFabien Sanglard ::cast::channel::CastMessage message; 29*3f982cf4SFabien Sanglard size_t length; 30*3f982cf4SFabien Sanglard }; 31*3f982cf4SFabien Sanglard 32*3f982cf4SFabien Sanglard // Reads bytes from |input| and returns a new CastMessage if one is fully 33*3f982cf4SFabien Sanglard // read. Returns a parsed CastMessage if a message was received in its 34*3f982cf4SFabien Sanglard // entirety, and an error otherwise. The result also contains the number of 35*3f982cf4SFabien Sanglard // bytes consumed from |input| when a parse succeeds. 36*3f982cf4SFabien Sanglard ErrorOr<DeserializeResult> TryDeserialize(absl::Span<const uint8_t> input); 37*3f982cf4SFabien Sanglard 38*3f982cf4SFabien Sanglard } // namespace message_serialization 39*3f982cf4SFabien Sanglard } // namespace cast 40*3f982cf4SFabien Sanglard } // namespace openscreen 41*3f982cf4SFabien Sanglard 42*3f982cf4SFabien Sanglard #endif // CAST_COMMON_CHANNEL_MESSAGE_FRAMER_H_ 43