@ -52,16 +52,17 @@ static uint64_t packet_index(struct ssrc_ctx *ssrc_ctx, struct rtp_header *rtp)
crypto_debug_printf ( " SSRC % " PRIx32 " , seq % " PRIu16 , ssrc_ctx - > parent - > h . ssrc , seq ) ;
/* rfc 3711 section 3.3.1 */
if ( G_UNLIKELY ( ! ssrc_ctx - > srtp_index ) )
ssrc_ctx - > srtp_index = seq ;
unsigned int srtp_index = atomic_get_na ( & ssrc_ctx - > stats - > ext_seq ) ;
if ( G_UNLIKELY ( ! srtp_index ) )
atomic_set_na ( & ssrc_ctx - > stats - > ext_seq , srtp_index = seq ) ;
/* rfc 3711 appendix A, modified, and sections 3.3 and 3.3.1 */
uint16_t s_l = ( ssrc_ctx - > s rtp_index & 0x00000000ffffULL ) ;
uint32_t roc = ( ssrc_ctx - > s rtp_index & 0xffffffff0000ULL ) > > 16 ;
uint16_t s_l = ( srtp_index & 0x00000000ffffULL ) ;
uint32_t roc = ( srtp_index & 0xffffffff0000ULL ) > > 16 ;
uint32_t v = 0 ;
crypto_debug_printf ( " , prev seq % " PRI u64 " , s_l % " PRIu16 " , ROC % " PRIu32 ,
ssrc_ctx - > s rtp_index , s_l , roc ) ;
crypto_debug_printf ( " , prev seq %u, s_l % " PRIu16 " , ROC % " PRIu32 ,
srtp_index , s_l , roc ) ;
if ( s_l < 0x8000 ) {
if ( ( ( seq - s_l ) > 0x8000 ) & & roc > 0 )
@ -75,11 +76,12 @@ static uint64_t packet_index(struct ssrc_ctx *ssrc_ctx, struct rtp_header *rtp)
v = roc ;
}
ssrc_ctx - > srtp_index = ( uint64_t ) ( ( ( v < < 16 ) | seq ) & 0xffffffffffffULL ) ;
srtp_index = ( uint64_t ) ( ( ( v < < 16 ) | seq ) & 0xffffffffffffULL ) ;
atomic_set_na ( & ssrc_ctx - > stats - > ext_seq , srtp_index ) ;
crypto_debug_printf ( " , v % " PRIu32 " , ext seq % " PRIu64 , v , ssrc_ctx - > srtp_index ) ;
crypto_debug_printf ( " , v % " PRIu32 " , ext seq %u " , v , srtp_index ) ;
return ssrc_ctx - > s rtp_index ;
return srtp_index ;
}
void rtp_append_mki ( str * s , struct crypto_context * c ) {
@ -143,7 +145,7 @@ int rtp_avp2savp(str *s, struct crypto_context *c, struct ssrc_ctx *ssrc_ctx) {
/* rfc 3711, section 3.3 */
int rtp_savp2avp ( str * s , struct crypto_context * c , struct ssrc_ctx * ssrc_ctx ) {
struct rtp_header * rtp ;
uint64_ t index ;
unsigned in t index ;
str payload , to_auth , to_decrypt , auth_tag ;
char hmac [ 20 ] ;
@ -211,9 +213,9 @@ int rtp_savp2avp(str *s, struct crypto_context *c, struct ssrc_ctx *ssrc_ctx) {
goto error ;
decrypt_idx :
ilog ( LOG_DEBUG , " Detected unexpected SRTP ROC reset (from % " PRI u64 " to % " PRI u64 " ) " ,
ssrc_ctx - > srtp_index , index ) ;
ssrc_ctx - > srtp_index = index ;
ilog ( LOG_DEBUG , " Detected unexpected SRTP ROC reset (from %u to %u) " ,
atomic_get_na ( & ssrc_ctx - > stats - > ext_seq ) , index ) ;
atomic_set_na ( & ssrc_ctx - > stats - > ext_seq , index ) ;
decrypt : ;
int prev_len = to_decrypt . len ;
if ( c - > params . session_params . unencrypted_srtp )
@ -247,9 +249,9 @@ decrypt:;
return - 1 ;
}
if ( guess ! = 0 ) {
ilog ( LOG_DEBUG , " Detected unexpected SRTP ROC reset (from % " PRI u64 " to % " PRI u64 " ) " ,
ssrc_ctx - > srtp_index , index ) ;
ssrc_ctx - > srtp_index = index ;
ilog ( LOG_DEBUG , " Detected unexpected SRTP ROC reset (from %u to %u) " ,
atomic_get_na ( & ssrc_ctx - > stats - > ext_seq ) , index ) ;
atomic_set_na ( & ssrc_ctx - > stats - > ext_seq , index ) ;
}
}