Symbian platform (C++)
SDK native APIs, runtime and tooling
Loading...
Searching...
No Matches
frame.h
Go to the documentation of this file.
1// Copyright 2026 The Symbian SDK Authors.
2// Licensed under the Apache License, Version 2.0.
3
4#ifndef SYMBIAN_AGENT_FRAME_H_
5#define SYMBIAN_AGENT_FRAME_H_
6
7#include <cstddef>
8#include <cstdint>
9#include <deque>
10#include <optional>
11#include <span>
12#include <string>
13
14#include "absl/status/statusor.h"
15
16namespace symbian::agent {
17
19inline constexpr std::size_t kMaximumFrameBytes = 64 * 1024;
20
22inline constexpr std::size_t kMaximumQueuedBytes = 256 * 1024;
23
25inline constexpr std::size_t kMaximumQueuedFrames = 4;
26
28struct Frame {
29 std::string payload;
30};
31
33absl::StatusOr<std::size_t> DecodeFrameLength(
34 std::span<const std::uint8_t> prefix,
35 std::size_t maximum_frame_bytes = kMaximumFrameBytes);
36
46 public:
47 explicit FrameDecoder(std::size_t maximum_frame_bytes = kMaximumFrameBytes);
48
50 std::size_t buffered_bytes() const { return payload_.size(); }
51
53 void Reset();
54
62 absl::StatusOr<std::size_t> Consume(std::span<const std::uint8_t> bytes,
63 std::optional<Frame>* completed);
64
65 private:
66 std::size_t maximum_frame_bytes_;
67 std::uint8_t prefix_[4] = {};
68 std::size_t prefix_size_ = 0;
69 std::size_t expected_size_ = 0;
70 std::string payload_;
71 bool failed_ = false;
72};
73
78absl::StatusOr<std::string> EncodeFrame(
79 std::span<const std::uint8_t> payload,
80 std::size_t maximum_frame_bytes = kMaximumFrameBytes);
81
90 public:
92 absl::Status Push(Frame frame);
93
95 std::optional<Frame> Pop();
96
97 std::size_t queued_bytes() const { return queued_bytes_; }
98
99 std::size_t size() const { return frames_.size(); }
100
102 void Clear();
103
104 private:
105 std::deque<Frame> frames_;
106 std::size_t queued_bytes_ = 0;
107};
108
109} // namespace symbian::agent
110
111#endif // SYMBIAN_AGENT_FRAME_H_
Incrementally reads one network-order, 32-bit length-prefixed frame.
Definition frame.h:45
std::size_t buffered_bytes() const
Number of payload bytes already buffered for the current frame.
Definition frame.h:50
void Reset()
Clear an incomplete frame after disconnect or cancellation.
Definition frame.cc:30
absl::StatusOr< std::size_t > Consume(std::span< const std::uint8_t > bytes, std::optional< Frame > *completed)
Consume at most one frame from bytes.
Definition frame.cc:37
Completed inbound frames awaiting schema dispatch.
Definition frame.h:89
std::optional< Frame > Pop()
Remove the oldest frame, if any.
Definition frame.cc:109
void Clear()
Release all queued payloads after disconnect.
Definition frame.cc:119
absl::Status Push(Frame frame)
Admit a completed frame or return ResourceExhausted.
Definition frame.cc:96
std::size_t size() const
Definition frame.h:99
std::size_t queued_bytes() const
Definition frame.h:97
Definition control.cc:11
absl::StatusOr< std::string > EncodeFrame(std::span< const std::uint8_t > payload, std::size_t maximum_frame_bytes)
Encode one already validated MessagePack payload for an authenticated transport.
Definition frame.cc:79
constexpr std::size_t kMaximumFrameBytes
Maximum encoded MessagePack payload accepted by the phone profile.
Definition frame.h:19
constexpr std::size_t kMaximumQueuedBytes
Maximum encoded bytes queued across inbound phone messages.
Definition frame.h:22
constexpr std::size_t kMaximumQueuedFrames
Maximum number of completed inbound phone messages.
Definition frame.h:25
absl::StatusOr< std::size_t > DecodeFrameLength(std::span< const std::uint8_t > prefix, std::size_t maximum_frame_bytes)
Validate a complete four-byte network-order prefix before allocation.
Definition frame.cc:12
std::string_view bytes
Definition exports.cc:74
std::string_view payload
Definition sis.cc:139
One length-prefixed MessagePack payload, without a parsed schema.
Definition frame.h:28
std::string payload
Definition frame.h:29