@ -4149,10 +4149,15 @@ static inline int srtp_decrypt(struct re_crypto_context *c,
return c - > cipher - > decrypt ( c , s , r , pkt_idx ) ;
return c - > cipher - > decrypt ( c , s , r , pkt_idx ) ;
}
}
static inline int is_muxed_rtcp ( struct rtp_parsed * r ) {
if ( r - > header - > m_pt < 194 )
static inline int is_muxed_rtcp ( struct sk_buff * skb ) {
/ / XXX shared code
unsigned char m_pt ;
if ( skb - > len < 8 ) / / minimum RTCP size
return 0 ;
m_pt = skb - > data [ 1 ] ;
if ( m_pt < 194 )
return 0 ;
return 0 ;
if ( r - > header - > m_pt > 223 )
if ( m_pt > 223 )
return 0 ;
return 0 ;
return 1 ;
return 1 ;
}
}
@ -4423,6 +4428,9 @@ src_check_ok:
if ( ! g - > target . rtp )
if ( ! g - > target . rtp )
goto not_rtp ;
goto not_rtp ;
if ( g - > target . rtcp_mux & & is_muxed_rtcp ( skb ) )
goto skip1 ;
parse_rtp ( & rtp , skb ) ;
parse_rtp ( & rtp , skb ) ;
if ( ! rtp . ok ) {
if ( ! rtp . ok ) {
if ( g - > target . rtp_only )
if ( g - > target . rtp_only )
@ -4430,9 +4438,6 @@ src_check_ok:
goto not_rtp ;
goto not_rtp ;
}
}
if ( g - > target . rtcp_mux & & is_muxed_rtcp ( & rtp ) )
goto skip1 ;
rtp_pt_idx = rtp_payload_type ( rtp . header , & g - > target ) ;
rtp_pt_idx = rtp_payload_type ( rtp . header , & g - > target ) ;
/ / Pass to userspace if SSRC has changed .
/ / Pass to userspace if SSRC has changed .