[asterisk-commits] tilghman: trunk r120171 - in /trunk: ./ configs/ include/asterisk/ main/ pbx/...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Jun 3 17:05:16 CDT 2008


Author: tilghman
Date: Tue Jun  3 17:05:16 2008
New Revision: 120171

URL: http://svn.digium.com/view/asterisk?view=rev&rev=120171
Log:
Move compatibility options into asterisk.conf, default them to on for upgrades,
and off for new installations.  This includes the translation from pipes to commas
for pbx_realtime and the EXEC command for AGI, as well as the change to the Set
application not to support multiple variables at once.

Removed:
    trunk/configs/pbx_realtime.conf
Modified:
    trunk/Makefile
    trunk/include/asterisk/options.h
    trunk/main/asterisk.c
    trunk/main/pbx.c
    trunk/pbx/pbx_realtime.c
    trunk/res/res_agi.c

Modified: trunk/Makefile
URL: http://svn.digium.com/view/asterisk/trunk/Makefile?view=diff&rev=120171&r1=120170&r2=120171
==============================================================================
--- trunk/Makefile (original)
+++ trunk/Makefile Tue Jun  3 17:05:16 2008
@@ -687,6 +687,11 @@
 		echo ";astctlowner = root" ; \
 		echo ";astctlgroup = apache" ; \
 		echo ";astctl = asterisk.ctl" ; \
+		echo "" ; \
+		echo "[compat]" ; \
+		echo "pbx_realtime=1.6" ; \
+		echo "res_agi=1.6" ; \
+		echo "app_set=1.6" ; \
 		) > $(DESTDIR)$(ASTCONFPATH) ; \
 	else \
 		echo "Skipping asterisk.conf creation"; \

Modified: trunk/include/asterisk/options.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/options.h?view=diff&rev=120171&r1=120170&r2=120171
==============================================================================
--- trunk/include/asterisk/options.h (original)
+++ trunk/include/asterisk/options.h Tue Jun  3 17:05:16 2008
@@ -112,6 +112,18 @@
 
 extern struct ast_flags ast_options;
 
+enum ast_compat_flags {
+	AST_COMPAT_DELIM_PBX_REALTIME = (1 << 0),
+	AST_COMPAT_DELIM_RES_AGI = (1 << 1),
+	AST_COMPAT_APP_SET = (1 << 2),
+};
+
+#define	ast_compat_pbx_realtime	ast_test_flag(&ast_compat, AST_COMPAT_DELIM_PBX_REALTIME)
+#define ast_compat_res_agi	ast_test_flag(&ast_compat, AST_COMPAT_DELIM_RES_AGI)
+#define	ast_compat_app_set	ast_test_flag(&ast_compat, AST_COMPAT_APP_SET)
+
+extern struct ast_flags ast_compat;
+
 extern int option_verbose;
 extern int option_maxfiles;		/*!< Max number of open file handles (files, sockets) */
 extern int option_debug;		/*!< Debugging */

Modified: trunk/main/asterisk.c
URL: http://svn.digium.com/view/asterisk/trunk/main/asterisk.c?view=diff&rev=120171&r1=120170&r2=120171
==============================================================================
--- trunk/main/asterisk.c (original)
+++ trunk/main/asterisk.c Tue Jun  3 17:05:16 2008
@@ -156,6 +156,7 @@
 /*! @{ */
 
 struct ast_flags ast_options = { AST_DEFAULT_OPTIONS };
+struct ast_flags ast_compat = { 7 };
 
 int option_verbose;				/*!< Verbosity level */
 int option_debug;				/*!< Debug level */
@@ -2772,6 +2773,20 @@
 				option_minmemfree = 0;
 			}
 #endif
+		}
+	}
+	for (v = ast_variable_browse(cfg, "compat"); v; v = v->next) {
+		float version;
+		if (sscanf(v->value, "%f", &version) != 1) {
+			ast_log(LOG_WARNING, "Compatibility version for option '%s' is not a number: '%s'\n", v->name, v->value);
+			continue;
+		}
+		if (!strcasecmp(v->name, "app_set")) {
+			ast_set2_flag(&ast_compat, version < 1.5 ? 1 : 0, AST_COMPAT_APP_SET);
+		} else if (!strcasecmp(v->name, "res_agi")) {
+			ast_set2_flag(&ast_compat, version < 1.5 ? 1 : 0, AST_COMPAT_DELIM_RES_AGI);
+		} else if (!strcasecmp(v->name, "pbx_realtime")) {
+			ast_set2_flag(&ast_compat, version < 1.5 ? 1 : 0, AST_COMPAT_DELIM_PBX_REALTIME);
 		}
 	}
 	ast_config_destroy(cfg);

Modified: trunk/main/pbx.c
URL: http://svn.digium.com/view/asterisk/trunk/main/pbx.c?view=diff&rev=120171&r1=120170&r2=120171
==============================================================================
--- trunk/main/pbx.c (original)
+++ trunk/main/pbx.c Tue Jun  3 17:05:16 2008
@@ -7856,6 +7856,10 @@
 {
 	char *name, *value, *mydata;
 
+	if (ast_compat_app_set) {
+		return pbx_builtin_setvar_multiple(chan, data);
+	}
+
 	if (ast_strlen_zero(data)) {
 		ast_log(LOG_WARNING, "Set requires one variable name/value pair.\n");
 		return 0;

Modified: trunk/pbx/pbx_realtime.c
URL: http://svn.digium.com/view/asterisk/trunk/pbx/pbx_realtime.c?view=diff&rev=120171&r1=120170&r2=120171
==============================================================================
--- trunk/pbx/pbx_realtime.c (original)
+++ trunk/pbx/pbx_realtime.c Tue Jun  3 17:05:16 2008
@@ -52,9 +52,6 @@
 #define MODE_CANMATCH 	2
 
 #define EXT_DATA_SIZE 256
-
-/* If set to 0, translate commas to "\," and pipes to "," */
-static int compat16 = 1;
 
 /* Realtime switch looks up extensions in the supplied realtime table.
 
@@ -179,7 +176,7 @@
 			if (!strcasecmp(v->name, "app"))
 				app = ast_strdupa(v->value);
 			else if (!strcasecmp(v->name, "appdata")) {
-				if (!compat16) {
+				if (ast_compat_pbx_realtime) {
 					char *ptr;
 					int in = 0;
 					tmp = alloca(strlen(v->value) * 2 + 1);
@@ -270,18 +267,6 @@
 
 static int load_module(void)
 {
-	struct ast_flags flags = { 0 };
-	struct ast_config *cfg = ast_config_load("pbx_realtime.conf", flags);
-	if (cfg) {
-		const char *tmp = ast_variable_retrieve(cfg, "general", "compat");
-		if (tmp && strncmp(tmp, "1.6", 3)) {
-			compat16 = 0;
-		} else {
-			compat16 = 1;
-		}
-		ast_config_destroy(cfg);
-	}
-
 	if (ast_register_switch(&realtime_switch))
 		return AST_MODULE_LOAD_FAILURE;
 	return AST_MODULE_LOAD_SUCCESS;

Modified: trunk/res/res_agi.c
URL: http://svn.digium.com/view/asterisk/trunk/res/res_agi.c?view=diff&rev=120171&r1=120170&r2=120171
==============================================================================
--- trunk/res/res_agi.c (original)
+++ trunk/res/res_agi.c Tue Jun  3 17:05:16 2008
@@ -1456,7 +1456,23 @@
 	ast_verb(3, "AGI Script Executing Application: (%s) Options: (%s)\n", argv[1], argv[2]);
 
 	if ((app = pbx_findapp(argv[1]))) {
-		res = pbx_exec(chan, app, argv[2]);
+		if (ast_compat_res_agi && !ast_strlen_zero(argv[2])) {
+			char *compat = alloca(strlen(argv[2]) * 2 + 1), *cptr, *vptr;
+			for (cptr = compat, vptr = argv[2]; *vptr; vptr++) {
+				if (*vptr == ',') {
+					*cptr++ = '\\';
+					*cptr++ = ',';
+				} else if (*vptr == '|') {
+					*cptr++ = ',';
+				} else {
+					*cptr++ = *vptr;
+				}
+			}
+			*cptr = '\0';
+			res = pbx_exec(chan, app, compat);
+		} else {
+			res = pbx_exec(chan, app, argv[2]);
+		}
 	} else {
 		ast_log(LOG_WARNING, "Could not find application (%s)\n", argv[1]);
 		res = -2;




More information about the asterisk-commits mailing list