[asterisk-commits] tilghman: trunk r148325 - in /trunk: CHANGES pbx/pbx_config.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Oct 10 13:31:38 CDT 2008


Author: tilghman
Date: Fri Oct 10 13:31:38 2008
New Revision: 148325

URL: http://svn.digium.com/view/asterisk?view=rev&rev=148325
Log:
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

Modified:
    trunk/CHANGES
    trunk/pbx/pbx_config.c

Modified: trunk/CHANGES
URL: http://svn.digium.com/view/asterisk/trunk/CHANGES?view=diff&rev=148325&r1=148324&r2=148325
==============================================================================
--- trunk/CHANGES (original)
+++ trunk/CHANGES Fri Oct 10 13:31:38 2008
@@ -28,6 +28,11 @@
  * 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  -------------

Modified: trunk/pbx/pbx_config.c
URL: http://svn.digium.com/view/asterisk/trunk/pbx/pbx_config.c?view=diff&rev=148325&r1=148324&r2=148325
==============================================================================
--- trunk/pbx/pbx_config.c (original)
+++ trunk/pbx/pbx_config.c Fri Oct 10 13:31:38 2008
@@ -1410,6 +1410,7 @@
 	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 @@
 			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';




More information about the asterisk-commits mailing list