From 012e99016cf9c902ad1eb730c7c4da86b4c06b6d Mon Sep 17 00:00:00 2001 From: Paul Cadach <paul@odt.east.telecom.kz> Date: Sat, 10 Feb 2007 09:23:09 +0000 Subject: [PATCH] Merged revisions 53881 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ........ r53881 | pcadach | 2007-02-10 01:09:49 -0800 (Сбт, 10 Фев 2007) | 1 line Fix VLDTMF reception ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@53885 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_h323.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/channels/chan_h323.c b/channels/chan_h323.c index 08903a8c0c..87d0fe0966 100644 --- a/channels/chan_h323.c +++ b/channels/chan_h323.c @@ -367,6 +367,7 @@ static void __oh323_update_info(struct ast_channel *c, struct oh323_pvt *pvt) .frametype = AST_FRAME_DTMF_END, .subclass = pvt->newdigit, .samples = pvt->newduration * 8, + .len = pvt->newduration, .src = "UPDATE_INFO", }; if (pvt->newdigit == ' ') { /* signalUpdate message */ @@ -561,14 +562,14 @@ static int oh323_digit_end(struct ast_channel *c, char digit, unsigned int durat if (pvt->rtp && (pvt->options.dtmfmode & H323_DTMF_RFC2833) && ((pvt->dtmf_pt[0] > 0) || (pvt->dtmf_pt[0] > 0))) { /* out-of-band DTMF */ if (h323debug) { - ast_log(LOG_DTMF, "End sending out-of-band digit %c on %s\n", digit, c->name); + ast_log(LOG_DTMF, "End sending out-of-band digit %c on %s, duration %d\n", digit, c->name, duration); } ast_rtp_senddigit_end(pvt->rtp, digit); ast_mutex_unlock(&pvt->lock); } else { /* in-band DTMF */ if (h323debug) { - ast_log(LOG_DTMF, "End sending inband digit %c on %s\n", digit, c->name); + ast_log(LOG_DTMF, "End sending inband digit %c on %s, duration %d\n", digit, c->name, duration); } pvt->txDtmfDigit = ' '; token = pvt->cd.call_token ? strdup(pvt->cd.call_token) : NULL; @@ -1847,6 +1848,7 @@ static int receive_digit(unsigned call_reference, char digit, const char *token, .frametype = AST_FRAME_DTMF_END, .subclass = digit, .samples = duration * 8, + .len = duration, .src = "SEND_DIGIT", }; if (digit == ' ') { /* signalUpdate message */ @@ -1856,10 +1858,20 @@ static int receive_digit(unsigned call_reference, char digit, const char *token, pvt->DTMFsched = -1; } } else { /* Regular input or signal message */ + if (pvt->DTMFsched >= 0) { + /* We still don't send DTMF END from previous event, send it now */ + ast_sched_del(sched, pvt->DTMFsched); + pvt->DTMFsched = -1; + f.subclass = pvt->curDTMF; + f.samples = f.len = 0; + ast_queue_frame(pvt->owner, &f); + /* Restore values */ + f.subclass = digit; + f.samples = duration * 8; + f.len = duration; + } if (duration) { /* This is a signal, signalUpdate follows */ f.frametype = AST_FRAME_DTMF_BEGIN; - if (pvt->DTMFsched >= 0) - ast_sched_del(sched, pvt->DTMFsched); pvt->DTMFsched = ast_sched_add(sched, duration, oh323_simulate_dtmf_end, pvt); if (h323debug) ast_log(LOG_DTMF, "Scheduled DTMF END simulation for %d ms, id=%d\n", duration, pvt->DTMFsched); @@ -2454,6 +2466,8 @@ static void set_peer_capabilities(unsigned call_reference, const char *token, in if (h323debug) { int i; for (i = 0; i < 32; ++i) { + if (!prefs->order[i]) + break; ast_log(LOG_DEBUG, "prefs[%d]=%s:%d\n", i, (prefs->order[i] ? ast_getformatname(1 << (prefs->order[i]-1)) : "<none>"), prefs->framing[i]); } } -- GitLab