blob: fa866bf1f5e994488adc39ab200f9b88e59e7083 [file] [log] [blame]
// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_HUDDLY_HPK_HLINK_BUFFER_H_
#define SRC_HUDDLY_HPK_HLINK_BUFFER_H_
#include <cstdint>
#include <string>
#include <vector>
namespace huddly {
struct __attribute__((packed)) HLinkHeader {
uint32_t req_id = 0;
uint32_t res_id = 0;
uint16_t flags = 0;
uint16_t msg_name_size = 0;
uint32_t payload_size = 0;
size_t HeaderSize() const { return sizeof(HLinkHeader) + msg_name_size; }
size_t TotalSize() const {
return sizeof(HLinkHeader) + msg_name_size + payload_size;
}
};
static_assert(sizeof(HLinkHeader) == 16, "HLinkHeader should be 16 bytes");
class HLinkBuffer {
public:
HLinkBuffer() {}
HLinkBuffer(const std::string& msg_name,
const uint8_t* payload,
const int payload_size);
static bool FromRawBuffer(const std::vector<uint8_t>& raw_buffer,
HLinkBuffer* hlink_buffer,
std::string* err_msg);
std::string GetMessageName() const;
const std::vector<uint8_t>& GetPayload() const;
std::vector<uint8_t> CreatePacket() const;
private:
HLinkHeader header_;
std::string msg_name_;
std::vector<uint8_t> payload_;
};
} // namespace huddly
#endif // SRC_HUDDLY_HPK_HLINK_BUFFER_H_