aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_zapscan.c
diff options
context:
space:
mode:
authorcitats <citats@f38db490-d61c-443f-a65b-d21fe96a405b>2004-03-10 03:51:59 +0000
committercitats <citats@f38db490-d61c-443f-a65b-d21fe96a405b>2004-03-10 03:51:59 +0000
commit0c5e4952826945ac830b35481a35574a4fc02c52 (patch)
treebdca37dc8c85210d9d04668f0ca7555529e398f9 /apps/app_zapscan.c
parenta9115edb4ef2175714adbccf5219e72841ae394e (diff)
Make ZapScan exit when '*' is pressed. Has the side effect of making
the app exit when the channel is hungup which wasn't happening before git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2383 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_zapscan.c')
-rwxr-xr-xapps/app_zapscan.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/apps/app_zapscan.c b/apps/app_zapscan.c
index 54db27df0..502aa5a34 100755
--- a/apps/app_zapscan.c
+++ b/apps/app_zapscan.c
@@ -43,8 +43,8 @@ static char *app = "ZapScan";
static char *synopsis = "Scan Zap channels to monitor calls";
static char *descrip =
-" ZapScan allows a call center manager to monitor\n"
-"phone conversations in a convenient way.";
+" ZapScan allows a call center manager to monitor Zap channels in\n"
+"a convenient way. Use '#' to select the next channel and use '*' to exit\n";
STANDARD_LOCAL_USER;
@@ -191,6 +191,9 @@ zapretry:
if ((f->frametype == AST_FRAME_DTMF) && (f->subclass == '#')) {
ret = 0;
break;
+ } else if ((f->frametype == AST_FRAME_DTMF) && (f->subclass == '*')) {
+ ret = -1;
+ break;
} else if (fd != chan->fds[0]) {
if (f->frametype == AST_FRAME_VOICE) {
if (f->subclass == AST_FORMAT_ULAW) {
@@ -245,6 +248,7 @@ static int conf_exec(struct ast_channel *chan, void *data)
int confno = 0;
char confstr[80], *tmp;
struct ast_channel *tempchan = NULL, *lastchan = NULL;
+ struct ast_frame *f;
LOCAL_USER_ADD(u);
@@ -252,6 +256,14 @@ static int conf_exec(struct ast_channel *chan, void *data)
ast_answer(chan);
for (;;) {
+ f = ast_read(chan);
+ if (!f || ast_check_hangup(chan))
+ break;
+ if ((f->frametype == AST_FRAME_DTMF) && (f->subclass == '*')) {
+ ast_frfree(f);
+ break;
+ }
+ ast_frfree(f);
tempchan = ast_channel_walk(tempchan);
if ( !tempchan && !lastchan )
break;