blob: dbcc2e615a2bfaeea621eee8b1cf8311c59f06d3 [file] [log] [blame]
Alex Perry5f474f22020-02-01 12:14:24 -08001#include "aos/network/web_proxy_utils.h"
2
3namespace aos {
4namespace web_proxy {
5
6// Recommended max size is 64KiB for compatibility reasons. 256KiB theoretically
7// works on chrome but seemed to have some consistency issues. Picked a size in
8// the middle which seems to work.
9constexpr size_t kPacketSize = 125000;
10
11int GetPacketCount(const Context &context) {
12 return context.size / kPacketSize + 1;
13}
14
15flatbuffers::Offset<MessageHeader> PackMessage(
16 flatbuffers::FlatBufferBuilder *fbb, const Context &context,
17 int channel_index, int packet_index) {
18 int packet_count = GetPacketCount(context);
19 flatbuffers::Offset<flatbuffers::Vector<uint8_t>> data_offset;
20 if (kPacketSize * (packet_index + 1) < context.size) {
21 data_offset = fbb->CreateVector(
22 static_cast<uint8_t *>(context.data) + kPacketSize * packet_index,
23 kPacketSize);
24 } else {
25 int prefix_size = kPacketSize * packet_index;
26 data_offset =
27 fbb->CreateVector(static_cast<uint8_t *>(context.data) + prefix_size,
28 context.size - prefix_size);
29 }
30
31 MessageHeader::Builder message_header_builder(*fbb);
32 message_header_builder.add_channel_index(channel_index);
33 message_header_builder.add_queue_index(context.queue_index);
34 message_header_builder.add_packet_count(packet_count);
35 message_header_builder.add_packet_index(packet_index);
36 message_header_builder.add_data(data_offset);
37 message_header_builder.add_length(context.size);
38
39 return message_header_builder.Finish();
40}
41
42} // namespace web_proxy
43} // namespace aos