mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 12:16:00 +00:00
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. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@120171 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
5
Makefile
5
Makefile
@@ -687,6 +687,11 @@ samples: adsi
|
||||
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"; \
|
||||
|
@@ -1,11 +0,0 @@
|
||||
[general]
|
||||
; The native delimiters for application arguments changed in 1.6 to be commas,
|
||||
; instead of pipes. For people who don't want to upgrade their databases
|
||||
; immediately, there is this compatibility option, which will allow them to
|
||||
; use pipes, via a translation done at runtime. Set compat to 1.4, if you
|
||||
; want to turn this translation ON. Set compat to 1.6 if you've already made
|
||||
; the transition.
|
||||
;
|
||||
; compat=1.4
|
||||
compat=1.6
|
||||
|
@@ -112,6 +112,18 @@ enum ast_option_flags {
|
||||
|
||||
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 */
|
||||
|
@@ -156,6 +156,7 @@ int daemon(int, int); /* defined in libresolv of all places */
|
||||
/*! @{ */
|
||||
|
||||
struct ast_flags ast_options = { AST_DEFAULT_OPTIONS };
|
||||
struct ast_flags ast_compat = { 7 };
|
||||
|
||||
int option_verbose; /*!< Verbosity level */
|
||||
int option_debug; /*!< Debug level */
|
||||
@@ -2774,6 +2775,20 @@ static void ast_readconfig(void)
|
||||
#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);
|
||||
}
|
||||
|
||||
|
@@ -7856,6 +7856,10 @@ int pbx_builtin_setvar(struct ast_channel *chan, void *data)
|
||||
{
|
||||
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;
|
||||
|
@@ -53,9 +53,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||
|
||||
#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.
|
||||
|
||||
[context@][realtimetable][/options]
|
||||
@@ -179,7 +176,7 @@ static int realtime_exec(struct ast_channel *chan, const char *context, const ch
|
||||
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 unload_module(void)
|
||||
|
||||
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;
|
||||
|
@@ -1456,7 +1456,23 @@ static int handle_exec(struct ast_channel *chan, AGI *agi, int argc, char **argv
|
||||
ast_verb(3, "AGI Script Executing Application: (%s) Options: (%s)\n", argv[1], argv[2]);
|
||||
|
||||
if ((app = pbx_findapp(argv[1]))) {
|
||||
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;
|
||||
|
Reference in New Issue
Block a user