9 #ifndef CLUON_ENVELOPE_HPP 10 #define CLUON_ENVELOPE_HPP 14 #include "cluon/cluonDataStructures.hpp" 33 std::string dataToSend;
35 std::stringstream sstr;
38 envelope.accept(protoEncoder);
41 uint32_t length{
static_cast<uint32_t
>(tmp.size())};
43 length = htole32(length);
46 constexpr
unsigned char OD4_HEADER_BYTE0 = 0x0D;
47 constexpr
unsigned char OD4_HEADER_BYTE1 = 0xA4;
48 sstr.put(static_cast<char>(OD4_HEADER_BYTE0));
49 auto posByte1 = sstr.tellp();
50 sstr.write(reinterpret_cast<char *>(&length), static_cast<std::streamsize>(
sizeof(uint32_t)));
51 auto posByte5 = sstr.tellp();
53 sstr.put(static_cast<char>(OD4_HEADER_BYTE1));
57 sstr.write(tmp.data(),
static_cast<std::streamsize
>(tmp.size()));
59 dataToSend = sstr.str();
75 inline std::pair<bool, cluon::data::Envelope>
extractEnvelope(std::istream &in) noexcept {
77 cluon::data::Envelope env;
79 constexpr uint8_t OD4_HEADER_SIZE{5};
80 std::vector<char> buffer;
81 buffer.reserve(OD4_HEADER_SIZE);
82 #ifdef WIN32 // LCOV_EXCL_LINE 85 for (uint8_t i{0}; i < OD4_HEADER_SIZE; i++) {
92 #else // LCOV_EXCL_LINE 93 in.read(&buffer[0], OD4_HEADER_SIZE);
94 if (OD4_HEADER_SIZE == in.gcount()) {
96 if ((0x0D == static_cast<uint8_t>(buffer[0])) && (0xA4 ==
static_cast<uint8_t
>(buffer[1]))) {
97 const uint32_t LENGTH{le32toh(*reinterpret_cast<uint32_t *>(&buffer[1])) >> 8};
98 buffer.reserve(LENGTH);
99 #ifdef WIN32 // LCOV_EXCL_LINE 101 for (uint32_t i{0}; i < LENGTH; i++) {
107 #else // LCOV_EXCL_LINE 108 in.read(&buffer[0], static_cast<std::streamsize>(LENGTH));
109 retVal =
static_cast<int32_t
>(LENGTH) == in.gcount();
112 std::stringstream sstr(std::string(buffer.begin(), buffer.begin() +
static_cast<std::streamsize
>(LENGTH)));
119 return std::make_pair(
retVal, env);
125 template <
typename T>
129 std::stringstream sstr(envelope.serializedData());
Definition: FromProtoVisitor.hpp:28
std::string serializeEnvelope(cluon::data::Envelope &&envelope) noexcept
Definition: Envelope.hpp:32
void decodeFrom(std::istream &in) noexcept
Definition: FromProtoVisitor.cpp:35
std::pair< bool, cluon::data::Envelope > extractEnvelope(std::istream &in) noexcept
Definition: Envelope.hpp:75
std::string encodedData() const noexcept
Definition: ToProtoVisitor.cpp:15
T extractMessage(cluon::data::Envelope &&envelope) noexcept
Definition: Envelope.hpp:126
std::pair< std::vector< MetaMessage >, MessageParserErrorCodes > retVal
Definition: MessageParser.cpp:291
Definition: ToProtoVisitor.hpp:23