]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix inband DTMF detection on outgoing ISDN calls.
authorRussell Bryant <russell@russellbryant.com>
Tue, 27 Jul 2010 19:50:56 +0000 (19:50 +0000)
committerRussell Bryant <russell@russellbryant.com>
Tue, 27 Jul 2010 19:50:56 +0000 (19:50 +0000)
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/branches/1.8@279916 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_dahdi.c
channels/sig_pri.c

index c24d01106867e8259f1158ca1cf4eeec6b817930..64965a38df9f1717b5ac1d867bb7eb153e9edb1d 100644 (file)
@@ -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) */
 
index 9d18a303bd09ddf5e371f53a75648865362fccec..22f9501dda38f9e8c259f12134550a894475fd60 100644 (file)
@@ -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]);
                                }