From e700d334e0d9e52a4f37f2f6a32d44d1154a91cb Mon Sep 17 00:00:00 2001 From: "dmytro.bogovych" Date: Tue, 31 Mar 2020 08:52:07 +0300 Subject: [PATCH] - support loopback .pcap --- src/engine/helper/HL_NetworkFrame.cpp | 29 +++++++++++++++++++++++++++ src/engine/helper/HL_NetworkFrame.h | 1 + 2 files changed, 30 insertions(+) diff --git a/src/engine/helper/HL_NetworkFrame.cpp b/src/engine/helper/HL_NetworkFrame.cpp index 6542e0f3..c7cdc1e5 100644 --- a/src/engine/helper/HL_NetworkFrame.cpp +++ b/src/engine/helper/HL_NetworkFrame.cpp @@ -98,6 +98,35 @@ NetworkFrame::PacketData NetworkFrame::GetUdpPayloadForSLL(NetworkFrame::PacketD } } +NetworkFrame::PacketData NetworkFrame::GetUdpPayloadForLoopback(NetworkFrame::PacketData& packet, InternetAddress& source, InternetAddress& destination) +{ + PacketData result(packet); + + if (packet.mLength < 16) + return PacketData(); + + struct LoopbackHeader + { + uint32_t mProtocolType; + }; + + const LoopbackHeader* lh = reinterpret_cast(packet.mData); + + packet.mData += sizeof(LoopbackHeader); + packet.mLength -= sizeof(LoopbackHeader); + + switch (lh->mProtocolType) + { + case AF_INET: + return GetUdpPayloadForIp4(packet, source, destination); + + case AF_INET6: + return GetUdpPayloadForIp6(packet, source, destination); + + default: + return PacketData(); + } +} NetworkFrame::PacketData NetworkFrame::GetUdpPayloadForIp4(NetworkFrame::PacketData& packet, InternetAddress& source, InternetAddress& destination) { diff --git a/src/engine/helper/HL_NetworkFrame.h b/src/engine/helper/HL_NetworkFrame.h index e044a753..76069931 100644 --- a/src/engine/helper/HL_NetworkFrame.h +++ b/src/engine/helper/HL_NetworkFrame.h @@ -25,6 +25,7 @@ public: static PacketData GetUdpPayloadForIp4(PacketData& packet, InternetAddress& source, InternetAddress& destination); static PacketData GetUdpPayloadForIp6(PacketData& packet, InternetAddress& source, InternetAddress& destination); static PacketData GetUdpPayloadForSLL(PacketData& packet, InternetAddress& source, InternetAddress& destination); + static PacketData GetUdpPayloadForLoopback(PacketData& packet, InternetAddress& source, InternetAddress& destination); struct EthernetHeader {