DISA only needs to know about the end of DTMF, not the beginning/duration.
authorJoshua Colp <jcolp@digium.com>
Wed, 19 Sep 2007 15:08:43 +0000 (15:08 +0000)
committerJoshua Colp <jcolp@digium.com>
Wed, 19 Sep 2007 15:08:43 +0000 (15:08 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@83114 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_disa.c

index f07e36b..081abe6 100644 (file)
@@ -179,6 +179,8 @@ static int disa_exec(struct ast_channel *chan, void *data)
 
        play_dialtone(chan, args.mailbox);
 
+       ast_set_flag(chan, AST_FLAG_END_DTMF_ONLY);
+
        for (;;) {
                  /* if outa time, give em reorder */
                if (ast_tvdiff_ms(ast_tvnow(), lastdigittime) > ((k&2) ? digittimeout : firstdigittimeout)) {
@@ -192,11 +194,14 @@ static int disa_exec(struct ast_channel *chan, void *data)
                        continue;
                }
 
-               if (!(f = ast_read(chan)))
+               if (!(f = ast_read(chan))) {
+                       ast_clear_flag(chan, AST_FLAG_END_DTMF_ONLY);
                        return -1;
+               }
 
                if ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_HANGUP)) {
                        ast_frfree(f);
+                       ast_clear_flag(chan, AST_FLAG_END_DTMF_ONLY);
                        return -1;
                }
 
@@ -225,6 +230,7 @@ static int disa_exec(struct ast_channel *chan, void *data)
                                                fp = fopen(args.passcode,"r");
                                                if (!fp) {
                                                        ast_log(LOG_WARNING,"DISA password file %s not found on chan %s\n",args.passcode,chan->name);
+                                                       ast_clear_flag(chan, AST_FLAG_END_DTMF_ONLY);
                                                        return -1;
                                                }
                                                pwline[0] = 0;
@@ -307,6 +313,8 @@ static int disa_exec(struct ast_channel *chan, void *data)
                }
        }
 
+       ast_clear_flag(chan, AST_FLAG_END_DTMF_ONLY);
+
        if (k == 3) {
                int recheck = 0;
                struct ast_flags flags = { AST_CDR_FLAG_POSTED };