mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 18:55:19 +00:00 
			
		
		
		
	res_rtp_asterisk: Fix packet stats on bridged connection
rxcount, txcount, rxoctetcount and txoctetcount weren't being calculated for bridged streams because the calulations were being done after the bridged short-circuit. Actually, rxoctetcount wasn't ever being calculated. Moved the calculations so they occur for all valid received packets and all transmitted packets. Also added rxoctetcount and txoctetcount to ast_rtp_instance_stat. Change-Id: I08fb06011a82d38c3b4068867a615068fbe59cbb
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 */ | ||||
| @@ -359,6 +363,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); | ||||
| @@ -4287,6 +4289,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"); | ||||
| @@ -4517,6 +4522,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; | ||||
| @@ -4560,6 +4566,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; | ||||
| 	} | ||||
| @@ -4961,6 +4968,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