Skip to content
Snippets Groups Projects
Commit 5c32f80a authored by Tilghman Lesher's avatar Tilghman Lesher
Browse files

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
parent 926e3ad1
No related branches found
No related tags found
No related merge requests found
......@@ -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 -------------
......
......@@ -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';
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment