Index: talk/session/media/bundlefilter.cc |
diff --git a/talk/session/media/bundlefilter.cc b/talk/session/media/bundlefilter.cc |
index b47d47fb27587b758338f41cf0b08d813b60f9c8..670befeb7d864ae9e94aa57ebb4ed56836817458 100755 |
--- a/talk/session/media/bundlefilter.cc |
+++ b/talk/session/media/bundlefilter.cc |
@@ -32,78 +32,29 @@ |
namespace cricket { |
-static const uint32_t kSsrc01 = 0x01; |
- |
BundleFilter::BundleFilter() { |
} |
BundleFilter::~BundleFilter() { |
} |
-bool BundleFilter::DemuxPacket(const char* data, size_t len, bool rtcp) { |
- // For rtp packets, we check whether the payload type can be found. |
- // For rtcp packets, we check whether the ssrc can be found or is the special |
- // value 1 except for SDES packets which always pass through. Plus, if |
- // |streams_| is empty, we will allow all rtcp packets pass through provided |
- // that they are valid rtcp packets in case that they are for early media. |
- if (!rtcp) { |
- // It may not be a RTP packet (e.g. SCTP). |
- if (!IsRtpPacket(data, len)) |
- return false; |
- |
- int payload_type = 0; |
- if (!GetRtpPayloadType(data, len, &payload_type)) { |
- return false; |
- } |
- return FindPayloadType(payload_type); |
+bool BundleFilter::DemuxPacket(const uint8_t* data, size_t len) { |
+ // For RTP packets, we check whether the payload type can be found. |
+ if (!IsRtpPacket(data, len)) { |
+ return false; |
} |
- // Rtcp packets using ssrc filter. |
- int pl_type = 0; |
- uint32_t ssrc = 0; |
- if (!GetRtcpType(data, len, &pl_type)) return false; |
- if (pl_type == kRtcpTypeSDES) { |
- // SDES packet parsing not supported. |
- LOG(LS_INFO) << "SDES packet received for demux."; |
- return true; |
- } else { |
- if (!GetRtcpSsrc(data, len, &ssrc)) return false; |
- if (ssrc == kSsrc01) { |
- // SSRC 1 has a special meaning and indicates generic feedback on |
- // some systems and should never be dropped. If it is forwarded |
- // incorrectly it will be ignored by lower layers anyway. |
- return true; |
- } |
+ int payload_type = 0; |
+ if (!GetRtpPayloadType(data, len, &payload_type)) { |
+ return false; |
} |
- // Pass through if |streams_| is empty to allow early rtcp packets in. |
- return !HasStreams() || FindStream(ssrc); |
+ return FindPayloadType(payload_type); |
} |
void BundleFilter::AddPayloadType(int payload_type) { |
payload_types_.insert(payload_type); |
} |
-bool BundleFilter::AddStream(const StreamParams& stream) { |
- if (GetStreamBySsrc(streams_, stream.first_ssrc())) { |
- LOG(LS_WARNING) << "Stream already added to filter"; |
- return false; |
- } |
- streams_.push_back(stream); |
- return true; |
-} |
- |
-bool BundleFilter::RemoveStream(uint32_t ssrc) { |
- return RemoveStreamBySsrc(&streams_, ssrc); |
-} |
- |
-bool BundleFilter::HasStreams() const { |
- return !streams_.empty(); |
-} |
- |
-bool BundleFilter::FindStream(uint32_t ssrc) const { |
- return ssrc == 0 ? false : GetStreamBySsrc(streams_, ssrc) != nullptr; |
-} |
- |
bool BundleFilter::FindPayloadType(int pl_type) const { |
return payload_types_.find(pl_type) != payload_types_.end(); |
} |