1 #ifndef ASN1_MESSAGE_H_ 2 #define ASN1_MESSAGE_H_ 3 #include <boost/intrusive_ptr.hpp> 5 #include "AKIpUptaneMes.h" 6 #include "AKTlsConfig.h" 13 Asn1Sub(boost::intrusive_ptr<Asn1Message> root, T* me) : root_(std::move(root)), me_(me) {}
15 T& operator*()
const {
16 assert(me_ !=
nullptr);
20 T* operator->()
const {
21 assert(me_ !=
nullptr);
26 boost::intrusive_ptr<Asn1Message> root_;
36 using Ptr = boost::intrusive_ptr<Asn1Message>;
55 ~
Asn1Message() { ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_AKIpUptaneMes, &msg_); }
56 friend void intrusive_ptr_add_ref(
Asn1Message* m) { m->ref_count_++; }
58 if (--m->ref_count_ == 0) {
63 AKIpUptaneMes_PR present()
const {
return msg_.present; }
65 msg_.present = present;
69 #define ASN1_MESSAGE_DEFINE_ACCESSOR(MessageType, FieldName) \ 70 SubPtr<MessageType> FieldName() { \ 71 return Asn1Sub<MessageType>(this, &msg_.choice.FieldName); \ 74 ASN1_MESSAGE_DEFINE_ACCESSOR(AKGetInfoReqMes_t, getInfoReq);
75 ASN1_MESSAGE_DEFINE_ACCESSOR(AKGetInfoRespMes_t, getInfoResp);
76 ASN1_MESSAGE_DEFINE_ACCESSOR(AKManifestReqMes_t, manifestReq);
77 ASN1_MESSAGE_DEFINE_ACCESSOR(AKManifestRespMes_t, manifestResp);
78 ASN1_MESSAGE_DEFINE_ACCESSOR(AKPutMetaReqMes_t, putMetaReq);
79 ASN1_MESSAGE_DEFINE_ACCESSOR(AKPutMetaRespMes_t, putMetaResp);
80 ASN1_MESSAGE_DEFINE_ACCESSOR(AKSendFirmwareReqMes_t, sendFirmwareReq);
81 ASN1_MESSAGE_DEFINE_ACCESSOR(AKSendFirmwareRespMes_t, sendFirmwareResp);
82 ASN1_MESSAGE_DEFINE_ACCESSOR(AKInstallReqMes_t, installReq);
83 ASN1_MESSAGE_DEFINE_ACCESSOR(AKInstallRespMes_t, installResp);
85 #define ASN1_MESSAGE_DEFINE_STR_NAME(MessageID) \ 92 ASN1_MESSAGE_DEFINE_STR_NAME(AKIpUptaneMes_PR_NOTHING);
93 ASN1_MESSAGE_DEFINE_STR_NAME(AKIpUptaneMes_PR_getInfoReq);
94 ASN1_MESSAGE_DEFINE_STR_NAME(AKIpUptaneMes_PR_getInfoResp);
95 ASN1_MESSAGE_DEFINE_STR_NAME(AKIpUptaneMes_PR_manifestReq);
96 ASN1_MESSAGE_DEFINE_STR_NAME(AKIpUptaneMes_PR_manifestResp);
97 ASN1_MESSAGE_DEFINE_STR_NAME(AKIpUptaneMes_PR_putMetaReq);
98 ASN1_MESSAGE_DEFINE_STR_NAME(AKIpUptaneMes_PR_putMetaResp);
99 ASN1_MESSAGE_DEFINE_STR_NAME(AKIpUptaneMes_PR_sendFirmwareReq);
100 ASN1_MESSAGE_DEFINE_STR_NAME(AKIpUptaneMes_PR_sendFirmwareResp);
101 ASN1_MESSAGE_DEFINE_STR_NAME(AKIpUptaneMes_PR_installReq);
102 ASN1_MESSAGE_DEFINE_STR_NAME(AKIpUptaneMes_PR_installResp);
112 AKIpUptaneMes_t msg_{};
120 if (msg !=
nullptr && *msg !=
nullptr) {
121 memmove(&msg_, *msg,
sizeof(AKIpUptaneMes_t));
131 int Asn1StringAppendCallback(
const void* buffer,
size_t size,
void* priv);
137 int Asn1SocketWriteCallback(
const void* buffer,
size_t size,
void* priv);
142 std::string ToString(
const OCTET_STRING_t& octet_str);
144 void SetString(OCTET_STRING_t* dest,
const std::string& str);
150 Asn1Message::Ptr Asn1Rpc(
const Asn1Message::Ptr& tx,
int con_fd);
151 Asn1Message::Ptr Asn1Rpc(
const Asn1Message::Ptr& tx,
const std::pair<std::string, uint16_t>& addr);
152 #endif // ASN1_MESSAGE_H_ static Asn1Message::Ptr FromRaw(AKIpUptaneMes_t **msg)
Destructively copy from a raw msg pointer created by parsing an incomming message.
static Asn1Message::Ptr Empty()
Create a new Asn1Message, in order to fill it with data and send it.
Reference counted holder for the top-level ASN1 message structure.