From 538d044acaf3168aabc975499fcbec58526c46b9 Mon Sep 17 00:00:00 2001 From: Russell Bryant <russell@russellbryant.com> Date: Tue, 27 Jul 2010 19:55:40 +0000 Subject: [PATCH] Merged revisions 279916 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r279916 | russell | 2010-07-27 14:50:56 -0500 (Tue, 27 Jul 2010) | 12 lines Fix inband DTMF detection on outgoing ISDN calls. This is a regression from the sig_pri split from chan_dahdi. When a call is first initiated, the inband DTMF detector is not enabled if it's an outgoing ISDN call. However, it needs to be turned on once the media path starts up. This handling was put back in the open_media() callback of chan_dahdi. In sig_pri, open_media() calls were added to a few places where it was needed, including handling of PRI_EVENT_RINGING, PRI_EVENT_PROGRESS, and PRI_EVENT_PROCEEDING. Thanks to rmudgett for helping me with the patch! ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@279917 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_dahdi.c | 5 +++++ channels/sig_pri.c | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index 331278ec23..0f0f63962f 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -2505,6 +2505,11 @@ static void my_pri_open_media(void *p) if (res < 0) { ast_log(LOG_WARNING, "Unable to set gains on channel %d\n", pvt->channel); } + + if (pvt->dsp_features && pvt->dsp) { + ast_dsp_set_features(pvt->dsp, pvt->dsp_features); + pvt->dsp_features = 0; + } } #endif /* defined(HAVE_PRI) */ diff --git a/channels/sig_pri.c b/channels/sig_pri.c index 9d18a303bd..22f9501dda 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -4907,6 +4907,17 @@ static void *pri_dchannel(void *vpri) pri_queue_control(pri, chanpos, AST_CONTROL_RINGING); pri->pvts[chanpos]->alerting = 1; + if ( +#ifdef PRI_PROGRESS_MASK + e->ringing.progressmask & PRI_PROG_INBAND_AVAILABLE +#else + e->ringing.progress == 8 +#endif + ) { + sig_pri_open_media(pri->pvts[chanpos]); + } + + #ifdef SUPPORT_USERUSER if (!ast_strlen_zero(e->ringing.useruserinfo)) { struct ast_channel *owner; @@ -4965,6 +4976,7 @@ static void *pri_dchannel(void *vpri) pri_queue_control(pri, chanpos, AST_CONTROL_PROGRESS); pri->pvts[chanpos]->progress = 1; sig_pri_set_dialing(pri->pvts[chanpos], 0); + sig_pri_open_media(pri->pvts[chanpos]); } sig_pri_unlock_private(pri->pvts[chanpos]); } @@ -4998,6 +5010,7 @@ static void *pri_dchannel(void *vpri) pri_queue_control(pri, chanpos, AST_CONTROL_PROGRESS); pri->pvts[chanpos]->progress = 1; sig_pri_set_dialing(pri->pvts[chanpos], 0); + sig_pri_open_media(pri->pvts[chanpos]); } sig_pri_unlock_private(pri->pvts[chanpos]); } -- GitLab