diff options
author | zuul <zuul@gerrit.asterisk.org> | 2016-03-29 14:28:36 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2016-03-29 14:28:36 -0500 |
commit | e595f02f83137cf92dd2a7f2567a73d6a88a2ff2 (patch) | |
tree | 8be1186191a1820aa51c933dff42326f23bb998e /res | |
parent | 7b7e3909e492df29d5d51e885f9328a23e61cb6a (diff) | |
parent | 1bce690ccb36a4744a327c07af23a9a3a0fa20cd (diff) |
Merge "res_rtp_asterisk: Fix packet stats on bridged connection" into 13
Diffstat (limited to 'res')
-rw-r--r-- | res/res_rtp_asterisk.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index 611920e80..4c6ee185f 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -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); |