4#include <vanetza/security/exception.hpp>
5#include <vanetza/security/secured_message.hpp>
12Parser::Parser(ByteBuffer::const_iterator begin, ByteBuffer::const_iterator end) :
13 m_byte_buffer_source(begin, end),
14 m_stream(m_byte_buffer_source),
20Parser::Parser(boost::iterator_range<ByteBuffer::const_iterator> range) :
21 Parser(range.begin(), range.end())
27 std::size_t bytes = 0;
29 deserialize(basic, m_archive);
34 m_read_bytes += bytes;
40 std::size_t bytes = 0;
42 deserialize(common, m_archive);
47 m_read_bytes += bytes;
51std::size_t
Parser::parse_secured(security::SecuredMessage& secured)
53 std::size_t bytes = 0;
54 if (m_archive.is_good()) {
56 std::uint8_t sec_first_byte = m_archive.peek_byte();
57 if (sec_first_byte < 3) {
59 bytes = security::v2::deserialize(m_archive, msg);
60 secured = std::move(msg);
61 }
else if (sec_first_byte == 3) {
63 bytes = security::v3::deserialize(m_archive, msg);
64 secured = std::move(msg);
68 m_read_bytes += bytes;
74template<
typename EXTENDED>
75std::size_t deserialize_extended(
InputArchive& archive, HeaderVariant& extended)
78 deserialize(header, archive);
79 extended = std::move(header);
80 return EXTENDED::length_bytes;
83std::size_t
Parser::parse_extended(HeaderVariant& extended, HeaderType ht)
85 std::size_t bytes = 0;
89 case HeaderType::TSB_Single_Hop:
90 bytes = deserialize_extended<
ShbHeader>(m_archive, extended);
92 case HeaderType::TSB_Multi_Hop:
93 bytes = deserialize_extended<
TsbHeader>(m_archive, extended);
95 case HeaderType::GeoBroadcast_Circle:
96 case HeaderType::GeoBroadcast_Rect:
97 case HeaderType::GeoBroadcast_Elip:
100 case HeaderType::Beacon:
101 bytes = deserialize_extended<
BeaconHeader>(m_archive, extended);
103 case HeaderType::Any:
104 case HeaderType::GeoUnicast:
105 case HeaderType::GeoAnycast_Circle:
106 case HeaderType::GeoAnycast_Rect:
107 case HeaderType::GeoAnycast_Elip:
108 case HeaderType::LS_Request:
109 case HeaderType::LS_Reply:
119 m_read_bytes += bytes;
123std::size_t
Parser::parsed_bytes()
const
SecuredMessage as specified in TS 103 097 v1.2.1, section 5.1.