fixes ability to exit echo app
authorAlec L Davis <sivad.a@paradise.net.nz>
Tue, 2 Mar 2010 07:38:56 +0000 (07:38 +0000)
committerAlec L Davis <sivad.a@paradise.net.nz>
Tue, 2 Mar 2010 07:38:56 +0000 (07:38 +0000)
when called from a ISDN channel, null frames prevent '#' exit.
Now only echo back VOICE and DTMF frames

(issue #16880)
Reported by: alecdavis
Patches:
      echo_exit.diff.txt uploaded by alecdavis (license 585)
Tested by: alecdavis

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

apps/app_echo.c

index 1c72110..5414ee3 100644 (file)
@@ -62,17 +62,26 @@ static int echo_exec(struct ast_channel *chan, const char *data)
                if (!f) {
                        break;
                }
-               f->delivery.tv_sec = 0;
-               f->delivery.tv_usec = 0;
-               if (ast_write(chan, f)) {
-                       ast_frfree(f);
-                       goto end;
-               }
-               if ((f->frametype == AST_FRAME_DTMF) && (f->subclass.integer == '#')) {
-                       res = 0;
-                       ast_frfree(f);
-                       goto end;
-               }
+               switch (f->frametype) {
+               case AST_FRAME_VOICE:
+               case AST_FRAME_DTMF:
+                       f->delivery.tv_sec = 0;
+                       f->delivery.tv_usec = 0;
+                       if (ast_write(chan, f)) {
+                               ast_frfree(f);
+                               goto end;
+                       }
+                       if (f->frametype == AST_FRAME_DTMF) {
+                               if (f->subclass.integer == '#') {
+                                       res = 0;
+                                       ast_frfree(f);
+                                       goto end;
+                               }
+                       }
+                       break;
+               default:
+                       break;
+               }               
                ast_frfree(f);
        }
 end: