From 621afead4bfa0d47e02b855ed2726451b104ffec Mon Sep 17 00:00:00 2001 From: Dmytro Bogovych Date: Thu, 5 May 2022 13:34:17 +0300 Subject: [PATCH] - support nested VLANs + fix few clang warnings --- src/engine/helper/HL_NetworkFrame.cpp | 13 ++++++++---- src/engine/helper/HL_Rtp.cpp | 11 ++++++++++ src/engine/helper/HL_Rtp.h | 1 + src/libs/ice/ICEAddress.cpp | 29 ++++++++++++++++++--------- src/libs/ice/ICEAddress.h | 4 +++- 5 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/engine/helper/HL_NetworkFrame.cpp b/src/engine/helper/HL_NetworkFrame.cpp index c7cdc1e5..fc410d66 100644 --- a/src/engine/helper/HL_NetworkFrame.cpp +++ b/src/engine/helper/HL_NetworkFrame.cpp @@ -25,10 +25,15 @@ NetworkFrame::PacketData NetworkFrame::GetUdpPayloadForEthernet(NetworkFrame::Pa uint16_t proto = 0; if (ethernet->mEtherType == 129) { - const VlanHeader* vlan = reinterpret_cast(packet.mData); - packet.mData += sizeof(VlanHeader); - packet.mLength -= sizeof(VlanHeader); - proto = ntohs(vlan->mData); + // Skip 1 or more VLAN headers + do + { + const VlanHeader* vlan = reinterpret_cast(packet.mData); + packet.mData += sizeof(VlanHeader); + packet.mLength -= sizeof(VlanHeader); + proto = ntohs(vlan->mData); + } + while (proto == 0x8100); } // Skip MPLS headers diff --git a/src/engine/helper/HL_Rtp.cpp b/src/engine/helper/HL_Rtp.cpp index b7594daf..ec09814c 100644 --- a/src/engine/helper/HL_Rtp.cpp +++ b/src/engine/helper/HL_Rtp.cpp @@ -245,6 +245,17 @@ std::string MediaStreamId::getFinishDescription() const return oss.str(); } +MediaStreamId& MediaStreamId::operator = (const MediaStreamId& src) +{ + this->mDestination = src.mDestination; + this->mSource = src.mSource; + this->mLinkId = src.mLinkId; + this->mSSRC = src.mSSRC; + this->mSsrcIsId = src.mSsrcIsId; + + return *this; +} + std::ostream& operator << (std::ostream& output, const MediaStreamId& id) { return (output << id.toString()); diff --git a/src/engine/helper/HL_Rtp.h b/src/engine/helper/HL_Rtp.h index 9d6c81d9..8df1f3b5 100644 --- a/src/engine/helper/HL_Rtp.h +++ b/src/engine/helper/HL_Rtp.h @@ -85,6 +85,7 @@ struct MediaStreamId std::string toString() const; std::string getDetectDescription() const; std::string getFinishDescription() const; + MediaStreamId& operator = (const MediaStreamId& src); }; std::ostream& operator << (std::ostream& output, const MediaStreamId& id); diff --git a/src/libs/ice/ICEAddress.cpp b/src/libs/ice/ICEAddress.cpp index f8633f69..e27d837b 100644 --- a/src/libs/ice/ICEAddress.cpp +++ b/src/libs/ice/ICEAddress.cpp @@ -24,7 +24,7 @@ # include #else # include - + # if /*defined(TARGET_LINUX) || */ defined(TARGET_ANDROID) # include # endif @@ -465,15 +465,15 @@ unsigned char* NetworkAddress::ipBytes() const #endif case AF_INET6: #ifdef TARGET_WIN - return (unsigned char*)mAddr6.sin6_addr.u.Byte; -#elif defined(TARGET_OSX) || defined(TARGET_IOS) - return (unsigned char*)&mAddr6.sin6_addr.__u6_addr.__u6_addr8; -#elif defined(TARGET_OPENWRT) || defined(TARGET_MUSL) - return (unsigned char*)&mAddr6.sin6_addr.__in6_union.__s6_addr; -#elif defined(TARGET_LINUX) - return (unsigned char*)&mAddr6.sin6_addr.__in6_u.__u6_addr8; -#elif defined(TARGET_ANDROID) - return (unsigned char*)&mAddr6.sin6_addr.in6_u.u6_addr8; + return (unsigned char*)mAddr6.sin6_addr.u.Byte; +#elif defined(TARGET_OSX) || defined(TARGET_IOS) + return (unsigned char*)&mAddr6.sin6_addr.__u6_addr.__u6_addr8; +#elif defined(TARGET_OPENWRT) || defined(TARGET_MUSL) + return (unsigned char*)&mAddr6.sin6_addr.__in6_union.__s6_addr; +#elif defined(TARGET_LINUX) + return (unsigned char*)&mAddr6.sin6_addr.__in6_u.__u6_addr8; +#elif defined(TARGET_ANDROID) + return (unsigned char*)&mAddr6.sin6_addr.in6_u.u6_addr8; #endif } assert(0); @@ -783,3 +783,12 @@ bool NetworkAddress::isSame(const NetworkAddress& a1, const NetworkAddress& a2) } return false; } + +NetworkAddress& NetworkAddress::operator = (const NetworkAddress& src) +{ + this->mInitialized = src.mInitialized; + this->mRelayed = src.mRelayed; + this->mAddr6 = src.mAddr6; + + return *this; +} diff --git a/src/libs/ice/ICEAddress.h b/src/libs/ice/ICEAddress.h index 6d8e346c..2bd524de 100644 --- a/src/libs/ice/ICEAddress.h +++ b/src/libs/ice/ICEAddress.h @@ -75,7 +75,9 @@ namespace ice static bool isSameHost(const NetworkAddress& a1, const NetworkAddress& a2); static bool isSame(const NetworkAddress& a1, const NetworkAddress& a2); - + + NetworkAddress& operator = (const NetworkAddress& src); + bool operator == (const NetworkAddress& rhs) const; bool operator != (const NetworkAddress& rhs) const; bool operator < (const NetworkAddress& rhs) const;