[asterisk-commits] may: branch 10 r369091 - /branches/10/addons/chan_ooh323.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Jun 19 18:32:09 CDT 2012
Author: may
Date: Tue Jun 19 18:32:06 2012
New Revision: 369091
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=369091
Log:
check rtptimeouts in ooh323 channels as per config file
(rtp voice, video, udptl except rtcp)
(closes issue ASTERISK-19179)
Reported by: TSAREGORODTSEV Yury
Patches:
19179-ooh323-ast10.patch
Modified:
branches/10/addons/chan_ooh323.c
Modified: branches/10/addons/chan_ooh323.c
URL: http://svnview.digium.com/svn/asterisk/branches/10/addons/chan_ooh323.c?view=diff&rev=369091&r1=369090&r2=369091
==============================================================================
--- branches/10/addons/chan_ooh323.c (original)
+++ branches/10/addons/chan_ooh323.c Tue Jun 19 18:32:06 2012
@@ -1140,6 +1140,8 @@
if (p) {
ast_mutex_lock(&p->lock);
+
+ p->lastrtptx = time(NULL);
if (f->frametype == AST_FRAME_MODEM) {
ast_debug(1, "Send UDPTL %d/%d len %d for %s\n",
@@ -3700,6 +3702,24 @@
h323_next = h323->next;
/* TODO: Need to add rtptimeout keepalive support */
+
+ if (h323->rtp && h323->rtptimeout && h323->lastrtptx &&
+ h323->lastrtptx + h323->rtptimeout < t) {
+ ast_rtp_instance_sendcng(h323->rtp, 0);
+ h323->lastrtptx = time(NULL);
+ }
+
+ if (h323->rtp && h323->owner && h323->rtptimeout &&
+ h323->lastrtprx &&
+ h323->lastrtprx + h323->rtptimeout < t) {
+ if (!ast_channel_trylock(h323->owner)) {
+ ast_softhangup_nolock(h323->owner, AST_SOFTHANGUP_DEV);
+ ast_log(LOG_NOTICE, "Disconnecting call '%s' for lack of RTP activity in %ld seconds\n", h323->owner->name, (long) (t - h323->lastrtprx));
+ ast_channel_unlock(h323->owner);
+ }
+
+ }
+
if (ast_test_flag(h323, H323_NEEDDESTROY)) {
ooh323_destroy (h323);
} /* else if (ast_test_flag(h323, H323_NEEDSTART) && h323->owner) {
@@ -4568,12 +4588,14 @@
switch (ast->fdno) {
case 0:
f = ast_rtp_instance_read(p->rtp, 0); /* RTP Audio */
+ p->lastrtprx = time(NULL);
break;
case 1:
f = ast_rtp_instance_read(p->rtp, 1); /* RTCP Control Channel */
break;
case 2:
f = ast_rtp_instance_read(p->vrtp, 0); /* RTP Video */
+ p->lastrtprx = time(NULL);
break;
case 3:
f = ast_rtp_instance_read(p->vrtp, 1); /* RTCP Control Channel for video */
@@ -4584,6 +4606,7 @@
ast_debug(1, "Got UDPTL %d/%d len %d for %s\n",
f->frametype, f->subclass.integer, f->datalen, ast->name);
}
+ p->lastrtprx = time(NULL);
break;
default:
More information about the asterisk-commits
mailing list