Add keyword "same", which allows you to create multiple steps in a dialplan,

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
This commit is contained in:
Tilghman Lesher
2008-10-10 18:31:38 +00:00
parent 926e3ad13d
commit 5c32f80a61
2 changed files with 22 additions and 8 deletions

View File

@@ -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 -------------

View 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';