Added gatekeeper support.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12878 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Robert Joly 2009-04-01 23:10:52 +00:00
parent c15866847c
commit a6065fb411
3 changed files with 53 additions and 28 deletions

View File

@ -4,6 +4,9 @@
<param name="context" value="default"/> <param name="context" value="default"/>
<param name="dialplan" value="XML"/> <param name="dialplan" value="XML"/>
<param name="codec-prefs" value="PCMU"/> <param name="codec-prefs" value="PCMU"/>
<param name="gk-address" value=""/> <!-- empty to disable, "*" to search LAN -->
<param name="gk-identifer" value=""/> <!-- optional name of gk -->
<param name="gk-interface" value=""/> <!-- optional listener interface name -->
</settings> </settings>
<listeners> <listeners>
<listener name="default"> <listener name="default">

View File

@ -25,6 +25,7 @@
#include "mod_opal.h" #include "mod_opal.h"
#include <opal/patch.h> #include <opal/patch.h>
#include <h323/h323pdu.h> #include <h323/h323pdu.h>
#include <h323/gkclient.h>
SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_codec_string, mod_opal_globals.codec_string); SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_codec_string, mod_opal_globals.codec_string);
SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_context, mod_opal_globals.context); SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_context, mod_opal_globals.context);
@ -364,6 +365,18 @@ bool FSManager::Initialise(switch_loadable_module_interface_t *iface)
} }
} }
if (!m_gkAddress.IsEmpty()) {
if (m_h323ep->UseGatekeeper(m_gkAddress, m_gkIdentifer, m_gkInterface))
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Started gatekeeper: %s\n",
(const char *)m_h323ep->GetGatekeeper()->GetName());
else
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,
"Could not start gatekeeper: addr=\"%s\", id=\"%s\", if=\"%s\"\n",
(const char *)m_gkAddress,
(const char *)m_gkIdentifer,
(const char *)m_gkInterface);
}
return TRUE; return TRUE;
} }
@ -391,39 +404,44 @@ switch_status_t FSManager::ReadConfig(int reload)
if (xml == NULL) { if (xml == NULL) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
} else { }
switch_xml_t xmlSettings = switch_xml_child(cfg, "settings");
if (xmlSettings) {
for (switch_xml_t xmlParam = switch_xml_child(xmlSettings, "param"); xmlParam != NULL; xmlParam = xmlParam->next) {
const char *var = switch_xml_attr_soft(xmlParam, "name");
const char *val = switch_xml_attr_soft(xmlParam, "value");
if (!strcasecmp(var, "trace-level")) { switch_xml_t xmlSettings = switch_xml_child(cfg, "settings");
int level = atoi(val); if (xmlSettings) {
if (level > 0) { for (switch_xml_t xmlParam = switch_xml_child(xmlSettings, "param"); xmlParam != NULL; xmlParam = xmlParam->next) {
mod_opal_globals.trace_level = level; const char *var = switch_xml_attr_soft(xmlParam, "name");
} const char *val = switch_xml_attr_soft(xmlParam, "value");
} else if (!strcasecmp(var, "context")) {
set_global_context(val); if (!strcasecmp(var, "trace-level")) {
} else if (!strcasecmp(var, "dialplan")) { int level = atoi(val);
set_global_dialplan(val); if (level > 0) {
} else if (!strcasecmp(var, "codec-prefs")) { mod_opal_globals.trace_level = level;
set_global_codec_string(val);
} else if (!strcasecmp(var, "jitter-size")) {
char * next;
unsigned minJitter = strtoul(val, &next, 10);
if (minJitter >= 10) {
unsigned maxJitter = minJitter;
if (*next == ',')
maxJitter = atoi(next+1);
SetAudioJitterDelay(minJitter, maxJitter); // In milliseconds
}
} }
} else if (!strcasecmp(var, "context")) {
set_global_context(val);
} else if (!strcasecmp(var, "dialplan")) {
set_global_dialplan(val);
} else if (!strcasecmp(var, "codec-prefs")) {
set_global_codec_string(val);
} else if (!strcasecmp(var, "jitter-size")) {
char * next;
unsigned minJitter = strtoul(val, &next, 10);
if (minJitter >= 10) {
unsigned maxJitter = minJitter;
if (*next == ',')
maxJitter = atoi(next+1);
SetAudioJitterDelay(minJitter, maxJitter); // In milliseconds
}
} else if (!strcasecmp(var, "gk-address")) {
m_gkAddress = val;
} else if (!strcasecmp(var, "gk-identifer")) {
m_gkIdentifer = val;
} else if (!strcasecmp(var, "gk-interface")) {
m_gkInterface = val;
} }
} }
} }
switch_xml_t xmlListeners = switch_xml_child(cfg, "listeners"); switch_xml_t xmlListeners = switch_xml_child(cfg, "listeners");
if (xmlListeners != NULL) { if (xmlListeners != NULL) {
for (switch_xml_t xmlListener = switch_xml_child(xmlListeners, "listener"); xmlListener != NULL; xmlListener = xmlListener->next) { for (switch_xml_t xmlListener = switch_xml_child(xmlListeners, "listener"); xmlListener != NULL; xmlListener = xmlListener->next) {

View File

@ -111,7 +111,11 @@ class FSManager : public OpalManager {
H323EndPoint *m_h323ep; H323EndPoint *m_h323ep;
IAX2EndPoint *m_iaxep; IAX2EndPoint *m_iaxep;
FSEndPoint *m_fsep; FSEndPoint *m_fsep;
PString m_gkAddress;
PString m_gkIdentifer;
PString m_gkInterface;
list < FSListener > m_listeners; list < FSListener > m_listeners;
}; };