@ -4853,9 +4853,6 @@ static int bridge_p2p_rtp_write(struct ast_rtp_instance *instance,
return - 1 ;
}
rtp - > rxcount + + ;
rtp - > rxoctetcount + = ( len - hdrlen ) ;
/* If the payload coming in is not one of the negotiated ones then send it to the core, this will cause formats to change and the bridge to break */
if ( ast_rtp_codecs_find_payload_code ( ast_rtp_instance_get_codecs ( instance1 ) , bridged_payload ) = = - 1 ) {
ast_debug ( 1 , " Unsupported payload type received \n " ) ;
@ -5091,13 +5088,6 @@ static struct ast_frame *ast_rtp_read(struct ast_rtp_instance *instance, int rtc
}
}
/* If we are directly bridged to another instance send the audio directly out */
instance1 = ast_rtp_instance_get_bridged ( instance ) ;
if ( instance1
& & ! bridge_p2p_rtp_write ( instance , instance1 , rtpheader , res , hdrlen ) ) {
return & ast_null_frame ;
}
/* If the version is not what we expected by this point then just drop the packet */
if ( version ! = 2 ) {
return & ast_null_frame ;
@ -5202,6 +5192,28 @@ static struct ast_frame *ast_rtp_read(struct ast_rtp_instance *instance, int rtc
rtp - > themssrc = ntohl ( rtpheader [ 2 ] ) ; /* Record their SSRC to put in future RR */
}
/* If we are directly bridged to another instance send the audio directly out,
* but only after updating core information about the received traffic so that
* outgoing RTCP reflects it .
*/
instance1 = ast_rtp_instance_get_bridged ( instance ) ;
if ( instance1
& & ! bridge_p2p_rtp_write ( instance , instance1 , rtpheader , res , hdrlen ) ) {
struct timeval rxtime ;
struct ast_frame * f ;
/* Update statistics for jitter so they are correct in RTCP */
calc_rxstamp ( & rxtime , rtp , timestamp , mark ) ;
/* When doing P2P we don't need to raise any frames about SSRC change to the core */
while ( ( f = AST_LIST_REMOVE_HEAD ( & frames , frame_list ) ) ! = NULL ) {
ast_frfree ( f ) ;
}
return & ast_null_frame ;
}
if ( rtp_debug_test_addr ( & addr ) ) {
ast_verbose ( " Got RTP packet from %s (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6d) \n " ,
ast_sockaddr_stringify ( & addr ) ,