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

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