summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorOlle Johansson <oej@edvina.net>2008-07-05 19:27:42 +0000
committerOlle Johansson <oej@edvina.net>2008-07-05 19:27:42 +0000
commit0a52297cf009170d6a8fa49617c0eb4ccab7a38f (patch)
tree66d5eda276da7f3e74e3e261874de6bef7f35b91 /main
parent509fd1aff7106a9e855f9e76d40f0731bc257e4f (diff)
Add new SIP cli command "sip show channelstats" that displays some QoS data (if we have RTCP reports
and not use the p2p rtp bridge). I could not find a way to detect us using the p2p bridge, which would be nice. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@128197 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main')
-rw-r--r--main/rtp.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/main/rtp.c b/main/rtp.c
index 146e8c093..4a8bf2b7b 100644
--- a/main/rtp.c
+++ b/main/rtp.c
@@ -2626,6 +2626,37 @@ void ast_rtp_reset(struct ast_rtp *rtp)
rtp->rxseqno = 0;
}
+/*! Get QoS values from RTP and RTCP data (used in "sip show channelstats") */
+unsigned int ast_rtp_get_qosvalue(struct ast_rtp *rtp, enum ast_rtp_qos_vars value)
+{
+ if (rtp == NULL) {
+ if (option_debug > 1)
+ ast_log(LOG_DEBUG, "NO RTP Structure? Kidding me? \n");
+ return 0;
+ }
+ if (option_debug > 1 && rtp->rtcp == NULL) {
+ ast_log(LOG_DEBUG, "NO RTCP structure. Maybe in RTP p2p bridging mode? \n");
+ }
+
+ switch (value) {
+ case AST_RTP_TXCOUNT:
+ return (unsigned int) rtp->txcount;
+ case AST_RTP_RXCOUNT:
+ return (unsigned int) rtp->rxcount;
+ case AST_RTP_TXJITTER:
+ return (unsigned int) (rtp->rxjitter * 100.0);
+ case AST_RTP_RXJITTER:
+ return (unsigned int) rtp->rtcp ? (rtp->rtcp->reported_jitter / (unsigned int) 65536.0) : 0;
+ case AST_RTP_RXPLOSS:
+ return rtp->rtcp ? (rtp->rtcp->expected_prior - rtp->rtcp->received_prior) : 0;
+ case AST_RTP_TXPLOSS:
+ return rtp->rtcp ? rtp->rtcp->reported_lost : 0;
+ case AST_RTP_RTT:
+ return (unsigned int) rtp->rtcp ? rtp->rtcp->rtt * 100 : 0;
+ }
+ return 0; /* To make the compiler happy */
+}
+
static double __ast_rtp_get_qos(struct ast_rtp *rtp, const char *qos, int *found)
{
*found = 1;