diff options
author | Mauro Sardara <msardara@cisco.com> | 2021-02-04 12:20:30 +0100 |
---|---|---|
committer | Mauro Sardara <msardara@cisco.com> | 2021-02-05 09:54:15 +0100 |
commit | 8d08f8dd79ac12874ba0da6b26973f5a33163131 (patch) | |
tree | 554993ddd190183a0722112ace984f6077e0aa8e /libtransport/src/core | |
parent | f77f2a01fb49b52f02d6493e926d0ccc41abf4d0 (diff) |
[HICN-679] Do not throw exception when receiving corrupted/not-hicn packet from network layer
Signed-off-by: Mauro Sardara <msardara@cisco.com>
Change-Id: I082e3c1b5fc9f535089114cfe14940f094947b66
Signed-off-by: Mauro Sardara <msardara@cisco.com>
Diffstat (limited to 'libtransport/src/core')
-rw-r--r-- | libtransport/src/core/packet.cc | 9 | ||||
-rw-r--r-- | libtransport/src/core/portal.h | 13 | ||||
-rw-r--r-- | libtransport/src/core/tcp_socket_connector.cc | 9 |
3 files changed, 18 insertions, 13 deletions
diff --git a/libtransport/src/core/packet.cc b/libtransport/src/core/packet.cc index 6815868f0..cd2c5aa69 100644 --- a/libtransport/src/core/packet.cc +++ b/libtransport/src/core/packet.cc @@ -50,7 +50,8 @@ Packet::Packet(MemBufPtr &&buffer) packet_start_(reinterpret_cast<hicn_header_t *>(packet_->writableData())), header_head_(packet_.get()), payload_head_(nullptr), - format_(getFormatFromBuffer(packet_->writableData())) {} + format_(getFormatFromBuffer(packet_->writableData(), packet_->length())) { +} Packet::Packet(const uint8_t *buffer, std::size_t size) : Packet(MemBufPtr(utils::MemBuf::copyBuffer(buffer, size).release())) {} @@ -210,13 +211,13 @@ const std::shared_ptr<utils::MemBuf> Packet::acquireMemBufReference() const { void Packet::dump() const { const_cast<Packet *>(this)->separateHeaderPayload(); - std::cout << "HEADER -- Length: " << headerSize() << std::endl; + TRANSPORT_LOGI("HEADER -- Length: %zu", headerSize()); hicn_packet_dump((uint8_t *)header_head_->data(), headerSize()); - std::cout << std::endl << "PAYLOAD -- Length: " << payloadSize() << std::endl; + TRANSPORT_LOGI("PAYLOAD -- Length: %zu", payloadSize()); for (utils::MemBuf *current = payload_head_; current && current != header_head_; current = current->next()) { - std::cout << "MemBuf Length: " << current->length() << std::endl; + TRANSPORT_LOGI("MemBuf Length: %zu", current->length()); hicn_packet_dump((uint8_t *)current->data(), current->length()); } } diff --git a/libtransport/src/core/portal.h b/libtransport/src/core/portal.h index 364a36577..b63eab3af 100644 --- a/libtransport/src/core/portal.h +++ b/libtransport/src/core/portal.h @@ -96,13 +96,13 @@ class HandlerAllocator { HandlerAllocator(const HandlerAllocator<U> &other) noexcept : memory_(other.memory_) {} - TRANSPORT_ALWAYS_INLINE bool operator==(const HandlerAllocator &other) const - noexcept { + TRANSPORT_ALWAYS_INLINE bool operator==( + const HandlerAllocator &other) const noexcept { return &memory_ == &other.memory_; } - TRANSPORT_ALWAYS_INLINE bool operator!=(const HandlerAllocator &other) const - noexcept { + TRANSPORT_ALWAYS_INLINE bool operator!=( + const HandlerAllocator &other) const noexcept { return &memory_ != &other.memory_; } @@ -139,7 +139,7 @@ class CustomAllocatorHandler { } template <typename... Args> - void operator()(Args &&... args) { + void operator()(Args &&...args) { handler_(std::forward<Args>(args)...); } @@ -548,7 +548,8 @@ class Portal { return; } - Packet::Format format = Packet::getFormatFromBuffer(packet_buffer->data()); + Packet::Format format = Packet::getFormatFromBuffer( + packet_buffer->data(), packet_buffer->length()); if (TRANSPORT_EXPECT_TRUE(_is_tcp(format))) { if (!Packet::isInterest(packet_buffer->data())) { diff --git a/libtransport/src/core/tcp_socket_connector.cc b/libtransport/src/core/tcp_socket_connector.cc index 20b3d6ce6..fa029c6fc 100644 --- a/libtransport/src/core/tcp_socket_connector.cc +++ b/libtransport/src/core/tcp_socket_connector.cc @@ -33,6 +33,8 @@ namespace { class NetworkMessage { public: static constexpr std::size_t fixed_header_length = 10; + static constexpr std::uint8_t ccnx_flag = 102; + static constexpr std::size_t ccnx_packet_length = 44; static std::size_t decodeHeader(const uint8_t *packet) { // General checks @@ -40,11 +42,12 @@ class NetworkMessage { uint8_t first_byte = packet[0]; uint8_t ip_format = (packet[0] & 0xf0) >> 4; - if (TRANSPORT_EXPECT_FALSE(first_byte == 102)) { + if (TRANSPORT_EXPECT_FALSE(first_byte == ccnx_flag)) { // Get packet length - return 44; + return ccnx_packet_length; } else if (TRANSPORT_EXPECT_TRUE(ip_format == 6 || ip_format == 4)) { - Packet::Format format = Packet::getFormatFromBuffer(packet); + Packet::Format format = + Packet::getFormatFromBuffer(packet, fixed_header_length); return Packet::getHeaderSizeFromBuffer(format, packet) + Packet::getPayloadSizeFromBuffer(format, packet); } |