Add keyword "same", which allows you to create multiple steps in a dialplan,
authorTilghman Lesher <tilghman@meg.abyt.es>
Fri, 10 Oct 2008 18:31:38 +0000 (18:31 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Fri, 10 Oct 2008 18:31:38 +0000 (18:31 +0000)
without needing to respecify an extension pattern multiple times.
(closes issue #13632)
 Reported by: blitzrage
 Patches:
       20081006__bug13632.diff.txt uploaded by Corydon76 (license 14)
 Tested by: blitzrage, Corydon76

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

CHANGES
pbx/pbx_config.c

diff --git a/CHANGES b/CHANGES
index 2a632d2..ee8c65a 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -28,6 +28,11 @@ Miscellaneous
  * res_jabber: autoprune has been disabled by default, to avoid misconfiguration 
    that would end up being interpreted as a bug once Asterisk started removing 
    the contacts from a user list.
+ * extensions.conf now allows you to use keyword "same" to define an extension
+   without actually specifying an extension.  It uses exactly the same pattern
+   as previously used on the last "exten" line.  For example:
+     exten => 123,1,NoOp(something)
+     same  =>     n,SomethingElse()
 
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 1.6.0 to Asterisk 1.6.1  -------------
index 2d93fd8..e2b38c1 100644 (file)
@@ -1410,6 +1410,7 @@ static int pbx_load_config(const char *config_file)
        const char *aft;
        const char *newpm, *ovsw;
        struct ast_flags config_flags = { 0 };
+       char lastextension[256] = "";
        cfg = ast_config_load(config_file, config_flags);
        if (!cfg)
                return 0;
@@ -1451,18 +1452,26 @@ static int pbx_load_config(const char *config_file)
                        continue;
 
                for (v = ast_variable_browse(cfg, cxt); v; v = v->next) {
-                       if (!strcasecmp(v->name, "exten")) {
-                               char *tc = ast_strdup(v->value);
-                               if (tc) {
+                       char *tc = NULL;
+                       char realext[256] = "";
+                       char *stringp, *ext;
+                       if (!strncasecmp(v->name, "same", 4)) {
+                               if ((stringp = tc = ast_strdup(v->value))) {
+                                       ast_copy_string(realext, lastextension, sizeof(realext));
+                                       goto copy_last_extension;
+                               }
+                       } else if (!strcasecmp(v->name, "exten")) {
+                               if ((tc = ast_strdup(v->value))) {
                                        int ipri = -2;
-                                       char realext[256]="";
                                        char *plus, *firstp;
                                        char *pri, *appl, *data, *cidmatch;
-                                       char *stringp = tc;
-                                       char *ext = strsep(&stringp, ",");
-                                       if (!ext)
-                                               ext="";
+                                       stringp = tc;
+                                       if (!(ext = strsep(&stringp, ","))) {
+                                               ext = "";
+                                       }
                                        pbx_substitute_variables_helper(NULL, ext, realext, sizeof(realext) - 1);
+                                       ast_copy_string(lastextension, realext, sizeof(lastextension));
+copy_last_extension:
                                        cidmatch = strchr(realext, '/');
                                        if (cidmatch) {
                                                *cidmatch++ = '\0';