aboutsummaryrefslogtreecommitdiffstats
path: root/libtransport/src/hicn/transport/core/packet.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libtransport/src/hicn/transport/core/packet.cc')
-rw-r--r--libtransport/src/hicn/transport/core/packet.cc30
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 {