diff options
Diffstat (limited to 'libtransport/src/hicn/transport/core/packet.cc')
-rw-r--r-- | libtransport/src/hicn/transport/core/packet.cc | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/libtransport/src/hicn/transport/core/packet.cc b/libtransport/src/hicn/transport/core/packet.cc index dd150d723..3872510ec 100644 --- a/libtransport/src/hicn/transport/core/packet.cc +++ b/libtransport/src/hicn/transport/core/packet.cc @@ -32,7 +32,7 @@ namespace core { const core::Name Packet::base_name("0::0|0"); Packet::Packet(Format format) - : packet_(utils::MemBuf::create(getHeaderSizeFromFormat(format)).release()), + : packet_(utils::MemBuf::create(getHeaderSizeFromFormat(format, 256)).release()), packet_start_(packet_->writableData()), header_head_(packet_.get()), payload_head_(nullptr), @@ -50,28 +50,22 @@ Packet::Packet(MemBufPtr &&buffer) header_head_(packet_.get()), payload_head_(nullptr), format_(getFormatFromBuffer(packet_start_)) { - auto header_size = getHeaderSizeFromFormat(format_); - int signature_size = 0; + int signature_size = 0; if (_is_ah(format_)) { signature_size = getSignatureSize(); } + auto header_size = getHeaderSizeFromFormat(format_, signature_size); + auto payload_length = packet_->length() - header_size - signature_size; - if (!payload_length && !signature_size) { + if (!payload_length) { return; } packet_->trimEnd(packet_->length()); - if (signature_size) { - auto sig = packet_->cloneOne(); - sig->advance(header_size); - sig->append(signature_size); - packet_->appendChain(std::move(sig)); - } - if (payload_length) { auto payload = packet_->cloneOne(); payload_head_ = payload.get(); @@ -285,6 +279,20 @@ void Packet::setSignatureSize(std::size_t size_bytes) { if (ret < 0) { throw errors::RuntimeException("Packet without Authentication Header."); } + + packet_->append(size_bytes); +} + +uint8_t * Packet::getSignature() const { + uint8_t * signature; + int ret = hicn_packet_get_signature( + format_, (hicn_header_t *)packet_start_, &signature); + + if (ret < 0) { + throw errors::RuntimeException("Packet without Authentication Header."); + } + + return signature; } std::size_t Packet::getSignatureSize() const { |