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; }
64 void present(AKIpUptaneMes_PR present) {
msg_.present = present; }
66 #define ASN1_MESSAGE_DEFINE_ACCESSOR(MessageType, FieldName) \
67 SubPtr<MessageType> FieldName() { \
68 return Asn1Sub<MessageType>(this, &msg_.choice.FieldName); \
71 ASN1_MESSAGE_DEFINE_ACCESSOR(AKGetInfoReqMes_t, getInfoReq);
72 ASN1_MESSAGE_DEFINE_ACCESSOR(AKGetInfoRespMes_t, getInfoResp);
73 ASN1_MESSAGE_DEFINE_ACCESSOR(AKManifestReqMes_t, manifestReq);
74 ASN1_MESSAGE_DEFINE_ACCESSOR(AKManifestRespMes_t, manifestResp);
75 ASN1_MESSAGE_DEFINE_ACCESSOR(AKPutMetaReqMes_t, putMetaReq);
76 ASN1_MESSAGE_DEFINE_ACCESSOR(AKPutMetaRespMes_t, putMetaResp);
77 ASN1_MESSAGE_DEFINE_ACCESSOR(AKSendFirmwareReqMes_t, sendFirmwareReq);
78 ASN1_MESSAGE_DEFINE_ACCESSOR(AKSendFirmwareRespMes_t, sendFirmwareResp);
79 ASN1_MESSAGE_DEFINE_ACCESSOR(AKInstallReqMes_t, installReq);
80 ASN1_MESSAGE_DEFINE_ACCESSOR(AKInstallRespMes_t, installResp);
95 if (msg !=
nullptr && *msg !=
nullptr) {
96 memmove(&
msg_, *msg,
sizeof(AKIpUptaneMes_t));
106 int Asn1StringAppendCallback(
const void* buffer,
size_t size,
void* priv);
112 int Asn1SocketWriteCallback(
const void* buffer,
size_t size,
void* priv);
117 std::string ToString(
const OCTET_STRING_t& octet_str);
119 void SetString(OCTET_STRING_t* dest,
const std::string& str);
125 Asn1Message::Ptr Asn1Rpc(
const Asn1Message::Ptr& tx,
int con_fd);
126 Asn1Message::Ptr Asn1Rpc(
const Asn1Message::Ptr& tx,
const std::pair<std::string, uint16_t>& addr);
127 #endif // ASN1_MESSAGE_H_