From e47f8215e98f45ca34960f7c078ebf689637046c Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Wed, 21 Oct 2009 20:57:46 +0000 Subject: [PATCH] mod_erlang_event: optionally allow compatability with nodes running older OTP releases (R7 through current) git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15189 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- .../mod_erlang_event/erlang_event.conf.xml | 12 +++++++----- .../mod_erlang_event/mod_erlang_event.c | 13 ++++++++++++- .../mod_erlang_event/mod_erlang_event.h | 1 + 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/mod/event_handlers/mod_erlang_event/erlang_event.conf.xml b/src/mod/event_handlers/mod_erlang_event/erlang_event.conf.xml index c4b73bfae7..ec14e21a25 100644 --- a/src/mod/event_handlers/mod_erlang_event/erlang_event.conf.xml +++ b/src/mod/event_handlers/mod_erlang_event/erlang_event.conf.xml @@ -3,10 +3,12 @@ - - - - - + + + + + + + diff --git a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c index 8dafdc3c4f..f292f15c29 100644 --- a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c +++ b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c @@ -982,6 +982,7 @@ static int config(void) prefs.shortname = SWITCH_TRUE; prefs.encoding = ERLANG_STRING; + prefs.compat_rel = 0; if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", cf); @@ -999,6 +1000,11 @@ static int config(void) set_pref_cookie(val); } else if (!strcmp(var, "nodename")) { set_pref_nodename(val); + } else if (!strcmp(var, "compat-rel")) { + if (atoi(val) >= 7) + prefs.compat_rel = atoi(val); + else + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid compatability release '%s' specified\n", val); } else if (!strcmp(var, "shortname")) { prefs.shortname = switch_true(val); } else if (!strcmp(var, "encoding")) { @@ -1129,7 +1135,7 @@ session_elem_t *session_elem_create(listener_t* listener, switch_core_session_t switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "OH OH no pool\n"); return NULL; } - += session_element = switch_core_alloc(session_elem_pool, sizeof(*session_element)); memset(session_element, 0, sizeof(*session_element)); @@ -1650,6 +1656,11 @@ SWITCH_MODULE_RUNTIME_FUNCTION(mod_erlang_event_runtime) switch_yield(100000); } + if (prefs.compat_rel) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Compatability with OTP R%d requested\n", prefs.compat_rel); + ei_set_compat_rel(prefs.compat_rel); + } + if (SWITCH_STATUS_SUCCESS!=initialise_ei(&ec)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to init ei connection\n"); goto init_failed; diff --git a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.h b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.h index 0debebe943..ad9344c82a 100644 --- a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.h +++ b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.h @@ -181,6 +181,7 @@ struct prefs_struct { uint32_t acl_count; uint32_t id; erlang_encoding_t encoding; + int compat_rel; }; typedef struct prefs_struct prefs_t;