17 #ifndef CONNECTMESSAGE_HPP_
18 #define CONNECTMESSAGE_HPP_
23 #include <botan/botan.h>
24 #include <arpa/inet.h>
31 template<
class T,
class U,
class V>
33 std::uint32_t nextProtocolId,
36 const V& payload) : message_(0)
45 std::copy(reinterpret_cast<const std::uint8_t *>(header),
46 reinterpret_cast<const std::uint8_t *>(header + size),
49 auto messageIt = message_.begin() + size;
52 std::copy(reinterpret_cast<std::uint8_t *>(&nameLengthNetworkOrder), reinterpret_cast<std::uint8_t *>(&nameLengthNetworkOrder) + 2, messageIt);
53 messageIt +=
sizeof(std::uint16_t);
60 *(messageIt++) = 0x02;
62 std::uint32_t nextProtocolIdNetworkOrder = htonl(nextProtocolId);
63 std::copy(reinterpret_cast<std::uint8_t *>(&nextProtocolIdNetworkOrder), reinterpret_cast<std::uint8_t *>(&nextProtocolIdNetworkOrder) + 4, messageIt);
64 messageIt +=
sizeof(std::uint32_t);
69 std::uint16_t timerNetworkOrder = htons(timer);
70 std::copy(reinterpret_cast<std::uint8_t *>(&timerNetworkOrder), reinterpret_cast<std::uint8_t *>(&timerNetworkOrder) + 2, messageIt);
71 messageIt +=
sizeof(std::uint16_t);
73 std::copy(sessionKey.begin(), sessionKey.end(), messageIt);
74 messageIt += sessionKey.size();
76 std::copy(signature.begin(), signature.end(), messageIt);
77 messageIt += signature.size();
79 std::copy(payload.begin(), payload.end(), messageIt);
83 const std::vector<std::uint8_t>&
getRawMessage()
const {
return message_; }
86 std::vector<std::uint8_t> message_;
static const std::uint8_t KAA_CONNECT_SESSION_KEY_FLAGS
static const std::uint8_t KAA_CONNECT_HEADER_LENGTH
const std::vector< std::uint8_t > & getRawMessage() const
static const std::uint8_t KAA_CONNECT_SIGNATURE_FLAGS
ConnectMessage(std::uint16_t timer, std::uint32_t nextProtocolId, const T &signature, const U &sessionKey, const V &payload)
static const std::uint8_t PROTOCOL_VERSION
static const std::uint16_t KAA_TCP_NAME_LENGTH
static const char *const KAA_TCP_NAME
static std::uint8_t createBasicHeader(std::uint8_t messageType, std::uint32_t length, char *message)