Merged revisions 369091 via svnmerge from

file:///srv/subversion/repos/asterisk/branches/10

........
  r369091 | may | 2012-06-19 18:32:06 -0500 (Tue, 19 Jun 2012) | 9 lines
  
  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
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10-digiumphones@369107 65c4cc65-6c06-0410-ace0-fbb531ad65f3
10-digiumphones
Automerge script 14 years ago
parent 9c05926dca
commit a67c5aa48e

@ -1141,6 +1141,8 @@ static int ooh323_write(struct ast_channel *ast, struct ast_frame *f)
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",
f->frametype, f->subclass.integer, f->datalen, ast->name);
@ -3700,6 +3702,24 @@ static void *do_monitor(void *data)
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 @@ struct ast_frame *ooh323_rtp_read(struct ast_channel *ast, struct ooh323_pvt *p)
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 @@ struct ast_frame *ooh323_rtp_read(struct ast_channel *ast, struct ooh323_pvt *p)
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:

Loading…
Cancel
Save