Make menu interruptible (bug #2377), Also fix PBX "add extension" CLI (bug #2289)
authorMark Spencer <markster@digium.com>
Tue, 7 Sep 2004 01:22:57 +0000 (01:22 +0000)
committerMark Spencer <markster@digium.com>
Tue, 7 Sep 2004 01:22:57 +0000 (01:22 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3732 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_meetme.c
pbx/pbx_config.c
res/res_musiconhold.c

index 42f42fc..ef2ff3d 100755 (executable)
@@ -5,7 +5,7 @@
  * 
  * Copyright (C) 1999-2004, Digium, Inc.
  *
- * Mark Spencer <markster@linux-support.net>
+ * Mark Spencer <markster@digium.com>
  *
  * This program is free software, distributed under the terms of
  * the GNU General Public License
@@ -511,6 +511,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
        char *agifiledefault = "conf-background.agi";
        char meetmesecs[30] = "";
        char exitcontext[AST_MAX_EXTENSION] = "";
+       int dtmf;
 
        ZT_BUFFERINFO bi;
        char __buf[CONF_SIZE + AST_FRIENDLY_OFFSET];
@@ -840,10 +841,14 @@ zapretry:
                                                        menu_active = 1;
                                                        /* Record this sound! */
                                                        if (!ast_streamfile(chan, "conf-adminmenu", chan->language))
-                                                               ast_waitstream(chan, "");
-                                               } else {
-                                                       switch(f->subclass - 48) {
-                                                               case 1: /* Un/Mute */
+                                                               dtmf = ast_waitstream(chan, AST_DIGIT_ANY);
+                                                       else
+                                                               dtmf = 0;
+                                               } else 
+                                                       dtmf = f->subclass;
+                                               if (dtmf) {
+                                                       switch(dtmf) {
+                                                               case '1': /* Un/Mute */
                                                                        menu_active = 0;
                                                                        if (ztc.confmode & ZT_CONF_TALKER) {
                                                                        ztc.confmode = ZT_CONF_CONF | ZT_CONF_LISTENER;
@@ -865,7 +870,7 @@ zapretry:
                                                                                        ast_waitstream(chan, "");
                                                                        }
                                                                        break;
-                                                               case 2: /* Un/Lock the Conference */
+                                                               case '2': /* Un/Lock the Conference */
                                                                        menu_active = 0;
                                                                        if (conf->locked) {
                                                                                conf->locked = 0;
@@ -891,10 +896,14 @@ zapretry:
                                                        menu_active = 1;
                                                        /* Record this sound! */
                                                        if (!ast_streamfile(chan, "conf-usermenu", chan->language))
-                                                               ast_waitstream(chan, "");
-                                               } else {
-                                                       switch(f->subclass - 48) {
-                                                               case 1: /* Un/Mute */
+                                                               dtmf = ast_waitstream(chan, AST_DIGIT_ANY);
+                                                       else
+                                                               dtmf = 0;
+                                               } else 
+                                                       dtmf = f->subclass;
+                                               if (dtmf) {
+                                                       switch(dtmf) {
+                                                               case '1': /* Un/Mute */
                                                                        menu_active = 0;
                                                                        if (ztc.confmode & ZT_CONF_TALKER) {
                                                                        ztc.confmode = ZT_CONF_CONF | ZT_CONF_LISTENER;
index 39fd332..b067e2f 100755 (executable)
@@ -1195,13 +1195,21 @@ static int handle_context_add_extension(int fd, int argc, char *argv[])
                        }
                }
        }
-       app = strsep(&whole_exten, ",");
+       app = whole_exten;
        if (app && (start = strchr(app, '(')) && (end = strrchr(app, ')'))) {
                *start = *end = '\0';
                app_data = start + 1;
                process_quotes_and_slashes(app_data, ',', '|');
-       } else
-               app_data = whole_exten;
+       } else {
+               if (app) {
+                       app_data = strchr(app, ',');
+                       if (app_data) {
+                               *app_data = '\0';
+                               app_data++;
+                       }
+               } else  
+                       app_data = NULL;
+       }
 
        if (!exten || !prior || !app || (!app_data && iprior != PRIORITY_HINT)) return RESULT_SHOWUSAGE;
 
index 2cbb59c..2dc39a5 100755 (executable)
@@ -3,9 +3,9 @@
  *
  * Routines implementing music on hold
  * 
- * Copyright (C) 1999, Mark Spencer
+ * Copyright (C) 1999-2004, Digium, Inc.
  *
- * Mark Spencer <markster@linux-support.net>
+ * Mark Spencer <markster@digium.com>
  *
  * This program is free software, distributed under the terms of
  * the GNU General Public License