12#ifndef ROC_FEC_PARSER_H_
13#define ROC_FEC_PARSER_H_
24template <
class PayloadID, PayloadID_Type Type, PayloadID_Pos Pos>
32 : inner_parser_(inner_parser) {
37 if (buffer.
size() <
sizeof(PayloadID)) {
39 (
int)
sizeof(PayloadID));
43 const PayloadID* payload_id;
45 payload_id = (
const PayloadID*)buffer.
data();
48 (
const PayloadID*)(buffer.
data() + buffer.
size() -
sizeof(PayloadID));
59 fec.fec_scheme = PayloadID::fec_scheme();
60 fec.encoding_symbol_id = payload_id->esi();
62 fec.source_block_length = payload_id->k();
63 fec.block_length = payload_id->n();
72 return inner_parser_->parse(
packet,
fec.payload);
Base class for non-copyable objects.
Slice subslice(size_t from, size_t to) const
Construct a slice pointing to a part of this slice.
T * data() const
Get slice data.
size_t size() const
Get number of elements in slice.
virtual bool parse(packet::Packet &packet, const core::Slice< uint8_t > &buffer)
Parse packet from buffer.
Parser(packet::IParser *inner_parser)
Initialization.
@ FlagRepair
Packet contains repair FEC symbols.
@ FlagFEC
Packet contains FEC header.
#define roc_log(level,...)
Print message to log.
@ Header
PayloadID comes before payload.
@ Repair
Source packet header of footer.
Network packets and packet processing.
uint16_t blknum_t
FEC packet block number.
@ LogDebug
Regular debug message.