From b5380f0026d7f4f9eabc2cff20dad5c48025e83a Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Tue, 21 Dec 2021 22:54:00 +0100 Subject: [PATCH] Fixed IPv6 header parsing --- src/asyncudplistener.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/asyncudplistener.cpp b/src/asyncudplistener.cpp index b157705..9e628c9 100644 --- a/src/asyncudplistener.cpp +++ b/src/asyncudplistener.cpp @@ -95,6 +95,7 @@ UdpPacketWrapper makeUdpPacketWrapper(pbufUniquePtr &&_pb, const ip_addr_t *radd const eth_hdr *ethHdr{}; //memcpy(&_remoteIp, raddr, sizeof(ip_addr_t)); + ip_addr_t _localAddr { .type = raddr->type }; ip_addr_t _remoteAddr { .type = raddr->type }; switch (_remoteAddr.type) @@ -114,8 +115,10 @@ UdpPacketWrapper makeUdpPacketWrapper(pbufUniquePtr &&_pb, const ip_addr_t *radd ethHdr = reinterpret_cast(payload - UDP_HLEN - IP6_HLEN - SIZEOF_ETH_HDR); const ip6_hdr *ip6hdr = reinterpret_cast(payload - UDP_HLEN - IP6_HLEN); - std::copy(std::cbegin(ip6hdr->dest.addr), std::cend(ip6hdr->dest.addr), std::begin(_localAddr.u_addr.ip6.addr)); - std::copy(std::cbegin(ip6hdr->src.addr), std::cend(ip6hdr->src.addr), std::begin(_remoteAddr.u_addr.ip6.addr)); + memcpy(&_localAddr.u_addr.ip6.addr, (uint8_t *)ip6hdr->dest.addr, 16); + memcpy(&_remoteAddr.u_addr.ip6.addr, (uint8_t *)ip6hdr->src.addr, 16); +// std::copy(std::cbegin(ip6hdr->dest.addr), std::cend(ip6hdr->dest.addr), std::begin(_localAddr.u_addr.ip6.addr)); +// std::copy(std::cbegin(ip6hdr->src.addr), std::cend(ip6hdr->src.addr), std::begin(_remoteAddr.u_addr.ip6.addr)); break; }