]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 298193 via svnmerge from
authorRichard Mudgett <rmudgett@digium.com>
Mon, 13 Dec 2010 17:04:41 +0000 (17:04 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Mon, 13 Dec 2010 17:04:41 +0000 (17:04 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r298193 | rmudgett | 2010-12-13 10:56:07 -0600 (Mon, 13 Dec 2010) | 19 lines

  Outgoing PRI/BRI calls cannot do DTMF triggered transfers.

  Outgoing PRI/BRI calls cannot do DTMF triggered transfers if a PROCEEDING
  message is not received.  The debug output shows that the DTMF begin event
  is seen, but the DTMF end event is missing.  When the DTMF begin happens,
  the call is muted so we now have one way audio (until a DTMF end event is
  somehow seen).

  * Made set the proceeding flag when the PRI_EVENT_ANSWER event is
  received.

  * Made absorb the DTMF begin and DTMF end events if we are overlap dialing
  and have not seen a PROCEEDING message.

  * Added a debug message when absorbing a DTMF event.

  JIRA SWP-2690
  JIRA ABE-2697
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@298194 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_dahdi.c

index 34102c493a90d59fef1c87f769764caa3673457a..b6be64820287ddb51d9445d13e732575f07631b2 100644 (file)
@@ -7291,12 +7291,17 @@ static struct ast_frame *dahdi_read(struct ast_channel *ast)
                                           a busy */
                                        f = NULL;
                                }
-                       } else if (f->frametype == AST_FRAME_DTMF) {
+                       } else if (f->frametype == AST_FRAME_DTMF_BEGIN
+                               || f->frametype == AST_FRAME_DTMF_END) {
 #ifdef HAVE_PRI
                                if (!p->proceeding && ((p->sig == SIG_PRI) || (p->sig == SIG_BRI) || (p->sig == SIG_BRI_PTMP)) && p->pri &&
                                        ((!p->outgoing && (p->pri->overlapdial & DAHDI_OVERLAPDIAL_INCOMING)) ||
                                        (p->outgoing && (p->pri->overlapdial & DAHDI_OVERLAPDIAL_OUTGOING)))) {
                                        /* Don't accept in-band DTMF when in overlap dial mode */
+                                       ast_debug(1, "Absorbing inband %s DTMF digit: 0x%02X '%c' on %s\n",
+                                               f->frametype == AST_FRAME_DTMF_BEGIN ? "begin" : "end",
+                                               f->subclass, f->subclass, ast->name);
+
                                        f->frametype = AST_FRAME_NULL;
                                        f->subclass = 0;
                                }
@@ -13582,6 +13587,7 @@ static void *pri_dchannel(void *vpri)
                                                        ast_debug(1, "Waiting on answer confirmation on channel %d!\n", pri->pvts[chanpos]->channel);
                                                } else {
                                                        pri->pvts[chanpos]->dialing = 0;
+                                                       pri->pvts[chanpos]->proceeding = 1;
                                                        pri->pvts[chanpos]->subs[SUB_REAL].needanswer =1;
                                                        /* Enable echo cancellation if it's not on already */
                                                        dahdi_enable_ec(pri->pvts[chanpos]);