aboutsummaryrefslogtreecommitdiffstats
path: root/libtransport/src/hicn/transport/core
diff options
context:
space:
mode:
authorAlberto Compagno <acompagn+fdio@cisco.com>2019-02-07 13:12:19 +0100
committerAlberto Compagno <acompagn+fdio@cisco.com>2019-02-07 13:15:40 +0000
commitdb1afad8749fce983636456c16c9df9c24d73af4 (patch)
treed78492674a1fbc5b923941991542d8115e11493d /libtransport/src/hicn/transport/core
parent216e35ba535efa00af39b7624f363ca832836e3f (diff)
[HICN-39] Added api that return a pointer to the signature hold in a packet
[HICN-40] Fixed signature calculation by allocating a contiguous portion of memory that holds the entire hICN header (IP+TCP+AH) Change-Id: I9d40bab0e3ecb82949b8b3a00e2cc1214457e4e3 Signed-off-by: Alberto Compagno <acompagn+fdio@cisco.com>
Diffstat (limited to 'libtransport/src/hicn/transport/core')
-rw-r--r--libtransport/src/hicn/transport/core/packet.cc30
-rw-r--r--libtransport/src/hicn/transport/core/packet.h2
2 files changed, 21 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 {
diff --git a/libtransport/src/hicn/transport/core/packet.h b/libtransport/src/hicn/transport/core/packet.h
index bc23588dc..038676540 100644
--- a/libtransport/src/hicn/transport/core/packet.h
+++ b/libtransport/src/hicn/transport/core/packet.h
@@ -133,6 +133,8 @@ class Packet : public std::enable_shared_from_this<Packet> {
std::size_t getSignatureSize() const;
+ uint8_t * getSignature() const;
+
void setSignatureTimestamp(const uint64_t &timestamp);
uint64_t getSignatureTimestamp() const;