aboutsummaryrefslogtreecommitdiffstats
path: root/pbx
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-05-22 21:43:47 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-05-22 21:43:47 +0000
commit9befc6e976aedf45707dcefe95c690c30a4cda20 (patch)
treea646dd055c17735981ae9705af84a58db46d8e47 /pbx
parent0bfbd79a0693e10619949cde1933d78b3e2fe228 (diff)
Merged revisions 117986 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r117986 | tilghman | 2008-05-22 16:42:50 -0500 (Thu, 22 May 2008) | 2 lines Add a compatibility option for upgrading realtime extensions ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@117987 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'pbx')
-rw-r--r--pbx/pbx_realtime.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/pbx/pbx_realtime.c b/pbx/pbx_realtime.c
index d4876bd7f..ea2ee9bab 100644
--- a/pbx/pbx_realtime.c
+++ b/pbx/pbx_realtime.c
@@ -53,6 +53,8 @@ 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.
@@ -176,8 +178,24 @@ static int realtime_exec(struct ast_channel *chan, const char *context, const ch
for (v = var; v ; v = v->next) {
if (!strcasecmp(v->name, "app"))
app = ast_strdupa(v->value);
- else if (!strcasecmp(v->name, "appdata"))
- tmp = ast_strdupa(v->value);
+ else if (!strcasecmp(v->name, "appdata")) {
+ if (!compat16) {
+ char *ptr;
+ tmp = alloca(strlen(v->value) * 2 + 1);
+ for (ptr = tmp; *v->value; v->value++) {
+ if (*v->value == ',') {
+ *ptr++ = '\\';
+ *ptr++ = ',';
+ } else if (*v->value == '|') {
+ *ptr++ = ',';
+ } else {
+ *ptr++ = *v->value;
+ }
+ }
+ } else {
+ tmp = ast_strdupa(v->value);
+ }
+ }
}
ast_variables_destroy(var);
if (!ast_strlen_zero(app)) {
@@ -243,6 +261,18 @@ 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;