mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-11-03 20:38:59 +00:00 
			
		
		
		
	Merge "res_rtp_asterisk: Fix packet stats on bridged connection" into 13
This commit is contained in:
		@@ -228,6 +228,10 @@ enum ast_rtp_instance_stat {
 | 
			
		||||
	AST_RTP_INSTANCE_STAT_REMOTE_SSRC,
 | 
			
		||||
	/*! Retrieve channel unique ID */
 | 
			
		||||
	AST_RTP_INSTANCE_STAT_CHANNEL_UNIQUEID,
 | 
			
		||||
	/*! Retrieve number of octets transmitted */
 | 
			
		||||
	AST_RTP_INSTANCE_STAT_TXOCTETCOUNT,
 | 
			
		||||
	/*! Retrieve number of octets received */
 | 
			
		||||
	AST_RTP_INSTANCE_STAT_RXOCTETCOUNT,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Codes for RTP-specific data - not defined by our AST_FORMAT codes */
 | 
			
		||||
@@ -355,6 +359,10 @@ struct ast_rtp_instance_stats {
 | 
			
		||||
	unsigned int remote_ssrc;
 | 
			
		||||
	/*! The Asterisk channel's unique ID that owns this instance */
 | 
			
		||||
	char channel_uniqueid[MAX_CHANNEL_ID];
 | 
			
		||||
	/*! Number of octets transmitted */
 | 
			
		||||
	unsigned int txoctetcount;
 | 
			
		||||
	/*! Number of octets received */
 | 
			
		||||
	unsigned int rxoctetcount;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define AST_RTP_STAT_SET(current_stat, combined, placement, value) \
 | 
			
		||||
 
 | 
			
		||||
@@ -2252,6 +2252,7 @@ static int __rtp_sendto(struct ast_rtp_instance *instance, void *buf, size_t siz
 | 
			
		||||
	struct ast_rtp *rtp = ast_rtp_instance_get_data(instance);
 | 
			
		||||
	struct ast_srtp *srtp = ast_rtp_instance_get_srtp(instance);
 | 
			
		||||
	int res;
 | 
			
		||||
	int hdrlen = 12;
 | 
			
		||||
 | 
			
		||||
	*ice = 0;
 | 
			
		||||
 | 
			
		||||
@@ -2259,6 +2260,9 @@ static int __rtp_sendto(struct ast_rtp_instance *instance, void *buf, size_t siz
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rtp->txcount++;
 | 
			
		||||
	rtp->txoctetcount += (len - hdrlen);
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_PJPROJECT
 | 
			
		||||
	if (rtp->ice) {
 | 
			
		||||
		pj_thread_register_check();
 | 
			
		||||
@@ -2274,6 +2278,7 @@ static int __rtp_sendto(struct ast_rtp_instance *instance, void *buf, size_t siz
 | 
			
		||||
	if (res > 0) {
 | 
			
		||||
		ast_rtp_instance_set_last_tx(instance, time(NULL));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -3352,9 +3357,6 @@ static int ast_rtp_raw_write(struct ast_rtp_instance *instance, struct ast_frame
 | 
			
		||||
				ast_set_flag(rtp, FLAG_NAT_INACTIVE_NOWARN);
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			rtp->txcount++;
 | 
			
		||||
			rtp->txoctetcount += (res - hdrlen);
 | 
			
		||||
 | 
			
		||||
			if (rtp->rtcp && rtp->rtcp->schedid < 0) {
 | 
			
		||||
				ast_debug(1, "Starting RTCP transmission on RTP instance '%p'\n", instance);
 | 
			
		||||
				ao2_ref(instance, +1);
 | 
			
		||||
@@ -4288,6 +4290,9 @@ static int bridge_p2p_rtp_write(struct ast_rtp_instance *instance, unsigned int
 | 
			
		||||
		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");
 | 
			
		||||
@@ -4518,6 +4523,7 @@ static struct ast_frame *ast_rtp_read(struct ast_rtp_instance *instance, int rtc
 | 
			
		||||
 | 
			
		||||
		rtp->seedrxseqno = 0;
 | 
			
		||||
		rtp->rxcount = 0;
 | 
			
		||||
		rtp->rxoctetcount = 0;
 | 
			
		||||
		rtp->cycles = 0;
 | 
			
		||||
		rtp->lastrxseqno = 0;
 | 
			
		||||
		rtp->last_seqno = 0;
 | 
			
		||||
@@ -4561,6 +4567,7 @@ static struct ast_frame *ast_rtp_read(struct ast_rtp_instance *instance, int rtc
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rtp->rxcount++;
 | 
			
		||||
	rtp->rxoctetcount += (res - hdrlen);
 | 
			
		||||
	if (rtp->rxcount == 1) {
 | 
			
		||||
		rtp->seedrxseqno = seqno;
 | 
			
		||||
	}
 | 
			
		||||
@@ -4962,6 +4969,8 @@ static int ast_rtp_get_stat(struct ast_rtp_instance *instance, struct ast_rtp_in
 | 
			
		||||
 | 
			
		||||
	AST_RTP_STAT_SET(AST_RTP_INSTANCE_STAT_TXCOUNT, -1, stats->txcount, rtp->txcount);
 | 
			
		||||
	AST_RTP_STAT_SET(AST_RTP_INSTANCE_STAT_RXCOUNT, -1, stats->rxcount, rtp->rxcount);
 | 
			
		||||
	AST_RTP_STAT_SET(AST_RTP_INSTANCE_STAT_TXOCTETCOUNT, -1, stats->txoctetcount, rtp->txoctetcount);
 | 
			
		||||
	AST_RTP_STAT_SET(AST_RTP_INSTANCE_STAT_RXOCTETCOUNT, -1, stats->rxoctetcount, rtp->rxoctetcount);
 | 
			
		||||
 | 
			
		||||
	AST_RTP_STAT_SET(AST_RTP_INSTANCE_STAT_TXPLOSS, AST_RTP_INSTANCE_STAT_COMBINED_LOSS, stats->txploss, rtp->rtcp->reported_lost);
 | 
			
		||||
	AST_RTP_STAT_SET(AST_RTP_INSTANCE_STAT_RXPLOSS, AST_RTP_INSTANCE_STAT_COMBINED_LOSS, stats->rxploss, rtp->rtcp->expected_prior - rtp->rtcp->received_prior);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user