From c67ce332f6cf15fdbc3102a782c670718c18c40c Mon Sep 17 00:00:00 2001 From: dijunkun Date: Fri, 13 Sep 2024 00:33:07 +0800 Subject: [PATCH] [fix] add rtp header version checker --- src/ice/ice_agent.cpp | 5 +++++ src/transmission/ice_transmission.cpp | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/ice/ice_agent.cpp b/src/ice/ice_agent.cpp index fb57b65..51a3d3e 100644 --- a/src/ice/ice_agent.cpp +++ b/src/ice/ice_agent.cpp @@ -59,6 +59,11 @@ int IceAgent::CreateIceAgent(nice_cb_state_changed_t on_state_changed, : (enable_turn_ ? NICE_AGENT_OPTION_NONE : NICE_AGENT_OPTION_RELIABLE))); + LOG_INFO( + "Nice agent init with [trickle ice|{}], [reliable mode|{}], [turn " + "support|{}]]", + trickle_ice_, !enable_turn_, enable_turn_); + if (agent_ == nullptr) { LOG_ERROR("Failed to create agent_"); } diff --git a/src/transmission/ice_transmission.cpp b/src/transmission/ice_transmission.cpp index 282c4d1..9b40a55 100644 --- a/src/transmission/ice_transmission.cpp +++ b/src/transmission/ice_transmission.cpp @@ -325,6 +325,8 @@ int IceTransmission::InitIceTransmission( ice_transmission_obj->rtp_data_receiver_->InsertRtpPacket(packet); } else if (ice_transmission_obj->CheckIsRtcpPacket(buffer, size)) { // LOG_ERROR("Rtcp packet [{}]", (uint8_t)(buffer[1])); + } else { + LOG_ERROR("Unknown packet"); } } } @@ -469,6 +471,11 @@ uint8_t IceTransmission::CheckIsRtcpPacket(const char *buffer, size_t size) { return 0; } + uint8_t v = (buffer[0] >> 6) & 0x03; + if (2 != v) { + return 0; + } + uint8_t pt = buffer[1]; switch (pt) { @@ -498,6 +505,11 @@ uint8_t IceTransmission::CheckIsVideoPacket(const char *buffer, size_t size) { return 0; } + uint8_t v = (buffer[0] >> 6) & 0x03; + if (2 != v) { + return 0; + } + uint8_t pt = buffer[1] & 0x7F; if (RtpPacket::PAYLOAD_TYPE::H264 == pt || RtpPacket::PAYLOAD_TYPE::H264_FEC_SOURCE == pt || @@ -514,6 +526,11 @@ uint8_t IceTransmission::CheckIsAudioPacket(const char *buffer, size_t size) { return 0; } + uint8_t v = (buffer[0] >> 6) & 0x03; + if (2 != v) { + return 0; + } + uint8_t pt = buffer[1] & 0x7F; if (RtpPacket::PAYLOAD_TYPE::OPUS == pt) { return pt; @@ -527,6 +544,11 @@ uint8_t IceTransmission::CheckIsDataPacket(const char *buffer, size_t size) { return 0; } + uint8_t v = (buffer[0] >> 6) & 0x03; + if (2 != v) { + return 0; + } + uint8_t pt = buffer[1] & 0x7F; if (RtpPacket::PAYLOAD_TYPE::DATA == pt) { return pt;