[asterisk-commits] may: trunk r369092 - in /trunk: ./ addons/chan_ooh323.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Jun 19 18:36:47 CDT 2012


Author: may
Date: Tue Jun 19 18:36:43 2012
New Revision: 369092

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=369092
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
........

Merged revisions 369091 from http://svn.asterisk.org/svn/asterisk/branches/10

Modified:
    trunk/   (props changed)
    trunk/addons/chan_ooh323.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-10-merged' - no diff available.

Modified: trunk/addons/chan_ooh323.c
URL: http://svnview.digium.com/svn/asterisk/trunk/addons/chan_ooh323.c?view=diff&rev=369092&r1=369091&r2=369092
==============================================================================
--- trunk/addons/chan_ooh323.c (original)
+++ trunk/addons/chan_ooh323.c Tue Jun 19 18:36:43 2012
@@ -1151,6 +1151,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",
@@ -3735,6 +3737,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) {
@@ -4610,12 +4630,14 @@
 	switch (ast_channel_fdno(ast)) {
 	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 */
@@ -4626,6 +4648,7 @@
 			 ast_debug(1, "Got UDPTL %d/%d len %d for %s\n",
 				f->frametype, f->subclass.integer, f->datalen, ast_channel_name(ast));
 		}
+		p->lastrtprx = time(NULL);
 		break;
 
 	default:




More information about the asterisk-commits mailing list