From 9bfd7ae25a546a8750e87414da1d78434181c896 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 24 Feb 2006 16:47:22 +0000 Subject: [PATCH] *) Add support for unified config: When config file does not exist the system will browse freeswitch.conf (if it exists) for an embedded file. Embeded files denoted with +file.conf Terminated by either another [+XXX] or EOF eg [+iax.conf] ... [+exosip.conf] ... EOF *) Change default examples to use this method *) Fix small bug in core to pass along failure when outgoing channel fails. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@663 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- conf/dialplan_directory.conf | 7 - conf/event_multicast.conf | 3 - conf/exosip.conf | 5 - conf/extensions.conf | 9 - conf/freeswitch.conf | 174 ++++++++++++++++++++ conf/iax.conf | 6 - conf/modules.conf | 47 ------ conf/portaudio.conf | 11 -- conf/regextensions.conf | 13 -- conf/wanpipe.conf | 31 ---- conf/woomera.conf | 8 - conf/xmpp_event.conf | 9 - conf/zeroconf.conf | 6 - src/include/switch_config.h | 6 + src/mod/endpoints/mod_wanpipe/mod_wanpipe.c | 10 +- src/switch_config.c | 56 ++++++- src/switch_core.c | 2 + 17 files changed, 241 insertions(+), 162 deletions(-) delete mode 100644 conf/dialplan_directory.conf delete mode 100644 conf/event_multicast.conf delete mode 100644 conf/exosip.conf delete mode 100644 conf/extensions.conf create mode 100644 conf/freeswitch.conf delete mode 100644 conf/iax.conf delete mode 100644 conf/modules.conf delete mode 100644 conf/portaudio.conf delete mode 100644 conf/regextensions.conf delete mode 100644 conf/wanpipe.conf delete mode 100644 conf/woomera.conf delete mode 100644 conf/xmpp_event.conf delete mode 100644 conf/zeroconf.conf diff --git a/conf/dialplan_directory.conf b/conf/dialplan_directory.conf deleted file mode 100644 index 3618f924d8..0000000000 --- a/conf/dialplan_directory.conf +++ /dev/null @@ -1,7 +0,0 @@ -[settings] - -directory_name => ldap -host => ldap.mydomain.org -dn => cn=Manager,dc=mydomain,dc=org -pass => mypass -base => dc=mydomain,dc=org diff --git a/conf/event_multicast.conf b/conf/event_multicast.conf deleted file mode 100644 index 48087dcfb8..0000000000 --- a/conf/event_multicast.conf +++ /dev/null @@ -1,3 +0,0 @@ -[settings] -address => 225.0.0.37 -port => 12345 diff --git a/conf/exosip.conf b/conf/exosip.conf deleted file mode 100644 index e365ae339e..0000000000 --- a/conf/exosip.conf +++ /dev/null @@ -1,5 +0,0 @@ -[settings] -port => 5060 -dialplan => demo -rtp_min_port => 10000 -rtp_max_port => 20000 diff --git a/conf/extensions.conf b/conf/extensions.conf deleted file mode 100644 index 63b062b9da..0000000000 --- a/conf/extensions.conf +++ /dev/null @@ -1,9 +0,0 @@ -[extensions] - -1000 => playback /tmp/siriusraw.raw - -; to time from a timer instead of from the input stream use -; 1000 => playback /tmp/siriusraw.raw soft - -; call the freeswitch conference -888 => bridge iax/guest@66.250.68.194/888 diff --git a/conf/freeswitch.conf b/conf/freeswitch.conf new file mode 100644 index 0000000000..4bbc1d2ada --- /dev/null +++ b/conf/freeswitch.conf @@ -0,0 +1,174 @@ +; Unified Config file +; each section denoted with a + could also be in it's own file + +;---- MODULES +;-------------------------------------------------------------------------------- +[+modules.conf] +[modules] + +; If this option is the first one the rest of them will be ignored +; If it is not the first one, _it_ will be ignored +;load => all + +; Event Handlers +;load => mod_event_multicast +;load => mod_event_test +;load => mod_zeroconf +;load => mod_xmpp_event + +; Directory Interfaces +load => mod_ldap + +; Endpoints +load => mod_exosip +load => mod_iax +;load => mod_portaudio +;load => mod_woomera + +; Applications +load => mod_bridgecall +load => mod_ivrtest +load => mod_playback + +; Dialplan Interfaces +load => mod_dialplan_demo +load => mod_dialplan_directory +load => mod_pcre + +; Codec Interfaces +load => mod_g711 +load => mod_gsm +load => mod_l16 +load => mod_speex + +; File Format Interfaces +load => mod_sndfile + +; Timers +load => mod_softtimer + + +load => mod_wanpipe + +;---- IAX PROTOCOL +;-------------------------------------------------------------------------------- +[+iax.conf] +[settings] +debug => 0 +port => 4569 +dialplan => demo +codec_prefs => PCMU,PCMA,speex,L16 +codec_master => us +codec_rates=8 + +;---- SIP PROTOCOL +;-------------------------------------------------------------------------------- +[+exosip.conf] +[settings] +debug => 10 +port => 5060 +dialplan => demo +codec_prefs => PCMU + +;---- WOOMERA PROTOCOL +;-------------------------------------------------------------------------------- +[+woomera.conf] +[settings] +debug=0 + +;---- WANPIPE PRI +;-------------------------------------------------------------------------------- +[+wanpipe.conf] +[settings] +debug => 0 +dialplan => demo +bpf => 320 + +[span] + span => 1 + node => cpe + switch => ni2 + dp = national + l1 = ulaw + bchan => 1-23 + dchan => 24 + dialplan => demo + + +;---- SOUND CARD CHANNEL +;-------------------------------------------------------------------------------- +[+portaudio.conf] +[settings] +debug => 2 +dialplan => demo + +; partial string match on something in the name or the device # +indev => USB +outdev => USB + +cid_name => FreeSwitch +cid_num => 5555551212 + +;--- ZEROCONF +;-------------------------------------------------------------------------------- +[+zeroconf.conf] +[settings] + +publish => yes +browse => _sip._udp + +;---- XMPP EVENT +;-------------------------------------------------------------------------------- +[+xmpp_event.conf] +[settings] + +#debug => 1 +jid => freeswitch@my.jabber.com/me +passwd => mypass + +target_jid => freeswitch@reader.org/him + +;---- LDAP DIALPLAN +;-------------------------------------------------------------------------------- +[+dialplan_directory.conf] +[settings] + +directory_name => ldap +host => ldap.freeswitch.org +dn => cn=Manager,dc=freeswitch,dc=org +pass => test +base => dc=freeswitch,dc=org + +;----REGULAR EXPRESSION DIALPLAN +;-------------------------------------------------------------------------------- +[+regextensions.conf] + +; any extension starting with a '4' +; strip the '4' and consider the rest a numeric filename +[playfile] + regex => ^4(\d+) + match => playback /var/sounds/$1.raw + +; send everything to wanpipe isdn +[gateway] + regex => (.*) + match => bridge wanpipe/a/a/$1 + +; ordniary extension +[plain_old_extension] + regex => 9999 + match => playback /var/sounds/beep.gsm + +;---- BASIC EXTENSIONS +;-------------------------------------------------------------------------------- +[+extensions.conf] +[extensions] + +1000 => playback /var/sounds/beep.raw + +; to time from a timer instead of from the input stream use +; 1000 => playback /var/sounds/beep.raw soft + +; call the freeswitch conference +888 => bridge iax/guest@66.250.68.194/888 + diff --git a/conf/iax.conf b/conf/iax.conf deleted file mode 100644 index 245a1d58a2..0000000000 --- a/conf/iax.conf +++ /dev/null @@ -1,6 +0,0 @@ -[settings] -debug => 2 -port => 4569 -dialplan => demo -codec_prefs => PCMU,PCMA,speex,L16 -codec_master => us diff --git a/conf/modules.conf b/conf/modules.conf deleted file mode 100644 index 92c122a099..0000000000 --- a/conf/modules.conf +++ /dev/null @@ -1,47 +0,0 @@ -[modules] - -; If this option is the first one the rest of them will be ignored -;load => all - -; Extension will be chosen automaticly if not specified (.dll for windows, .so for UNIX) -; Full paths will be taken "as is" (eg /some/dir/mymod.so) - -; Event Handlers -;load => mod_event_multicast -load => mod_zeroconf -load => mod_xmpp_event - -; Directory Interfaces -load => mod_ldap - -; Endpoints -load => mod_exosip -load => mod_iax -load => mod_woomera - -; Applications -load => mod_bridgecall -load => mod_ivrtest -load => mod_playback - -; Dialplan Interfaces -load => mod_dialplan_demo -load => mod_dialplan_directory -load => mod_pcre - -; Codec Interfaces -load => mod_g711 -load => mod_gsm -load => mod_l16 -load => mod_speex - -; File Format Interfaces -load => mod_sndfile - -; Timers -load => mod_softtimer - - - - - diff --git a/conf/portaudio.conf b/conf/portaudio.conf deleted file mode 100644 index ba20e7e58d..0000000000 --- a/conf/portaudio.conf +++ /dev/null @@ -1,11 +0,0 @@ -[settings] -debug => 2 -dialplan => demo - -; partial string match on something in the name or the device # -indev => USB -outdev => USB - -cid_name => FreeSwitch -cid_num => 5555551212 - diff --git a/conf/regextensions.conf b/conf/regextensions.conf deleted file mode 100644 index ffdf89590c..0000000000 --- a/conf/regextensions.conf +++ /dev/null @@ -1,13 +0,0 @@ -[playfiles] - regex => 4(.*) - match => playback /tmp/$1.raw - -[passthrough] - regex => 1(.*) - match => bridge iax/guest@1.2.3.4/$1 - - - - - - diff --git a/conf/wanpipe.conf b/conf/wanpipe.conf deleted file mode 100644 index 994c0d1005..0000000000 --- a/conf/wanpipe.conf +++ /dev/null @@ -1,31 +0,0 @@ -[settings] - debug => 1 - dialplan => pcre - mtu => 320 - dtmf_on => 150 - dtmf_off => 50 - -[span] - span => 1 - node => cpe - - ;switch => ni2 - switch => dms100 - ;switch => lucent5e - ;switch => att4ess - ;switch => euroisdn - ;switch => gr303eoc - ;switch => gr303tmc - - dp => national - ;dp => international - ;dp => local - ;dp => private - ;dp => unknown - - l1 => ulaw - ;l1 => alaw - - bchan => 1-23 - dchan => 24 - dialplan => pcre diff --git a/conf/woomera.conf b/conf/woomera.conf deleted file mode 100644 index 947ef89f94..0000000000 --- a/conf/woomera.conf +++ /dev/null @@ -1,8 +0,0 @@ -[settings] -debug=2 - -[profile] -host=localhost -port=42420 -audio_ip=10.200.10.20 -dialplan=demo diff --git a/conf/xmpp_event.conf b/conf/xmpp_event.conf deleted file mode 100644 index f53002f365..0000000000 --- a/conf/xmpp_event.conf +++ /dev/null @@ -1,9 +0,0 @@ -[settings] - -debug => 0 - -#jid => somebody@jabber.org -#passwd => pass -#target_jid => somebodyelse@jabber.org - - diff --git a/conf/zeroconf.conf b/conf/zeroconf.conf deleted file mode 100644 index 29970adbc2..0000000000 --- a/conf/zeroconf.conf +++ /dev/null @@ -1,6 +0,0 @@ -[settings] - -; cant do both at once WTF? -publish => yes -#browse => _sip._udp - diff --git a/src/include/switch_config.h b/src/include/switch_config.h index 8976ce3948..fe440524cc 100644 --- a/src/include/switch_config.h +++ b/src/include/switch_config.h @@ -70,12 +70,18 @@ struct switch_config { char *path; /*! current category */ char category[256]; + /*! current section */ + char section[256]; /*! buffer of current line being read */ char buf[1024]; /*! current line number in file */ int lineno; /*! current category number in file */ int catno; + /*! current section number in file */ + int sectno; + + int lockto; }; /*! diff --git a/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c b/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c index a6f7db4711..2d40b743ee 100644 --- a/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c +++ b/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c @@ -73,6 +73,7 @@ static struct { int dtmf_on; int dtmf_off; int supress_dtmf_tone; + int configured_spans; char *dialplan; } globals; @@ -351,6 +352,12 @@ static switch_status wanpipe_on_transmit(switch_core_session *session) static switch_status wanpipe_outgoing_channel(switch_core_session *session, switch_caller_profile *outbound_profile, switch_core_session **new_session) { + if (!globals.configured_spans) { + switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Error No Spans Configured.\n"); + return SWITCH_STATUS_FALSE; + } + + if ((*new_session = switch_core_session_request(&wanpipe_endpoint_interface, NULL))) { struct private_object *tech_pvt; switch_channel *channel; @@ -1177,7 +1184,7 @@ static int config_wanpipe(int reload) } - + globals.configured_spans = 0; for(current_span = 1; current_span < MAX_SPANS; current_span++) { if (SPANS[current_span]) { @@ -1195,6 +1202,7 @@ static int config_wanpipe(int reload) } switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Launch span %d\n", current_span); pri_thread_launch(&SPANS[current_span]->spri); + globals.configured_spans++; } } diff --git a/src/switch_config.c b/src/switch_config.c index bc860cb453..926631bf7e 100644 --- a/src/switch_config.c +++ b/src/switch_config.c @@ -52,15 +52,46 @@ SWITCH_DECLARE(int) switch_config_open_file(switch_config *cfg, char *file_path) path = path_buf; } - if (!path || (f = fopen(path, "r")) == 0) { + if (!path) { return 0; } memset(cfg, 0, sizeof(*cfg)); - cfg->file = f; - cfg->path = path; + cfg->lockto = -1; - return 1; + if (!(f = fopen(path, "r"))) { + if (file_path[0] != '/') { + int last = -1; + char *var, *val; + + snprintf(path_buf, sizeof(path_buf), "%s/freeswitch.conf", SWITCH_CONF_DIR); + path = path_buf; + + if ((f = fopen(path, "r")) == 0) { + return 0; + } + + cfg->file = f; + cfg->path = path; + + while (switch_config_next_pair(cfg, &var, &val)) { + if ((cfg->sectno != last) && !strcmp(cfg->section, file_path)) { + cfg->lockto = cfg->sectno; + return 1; + } + } + + switch_config_close_file(cfg); + memset(cfg, 0, sizeof(*cfg)); + return 0; + } + + return 0; + } else { + cfg->file = f; + cfg->path = path; + return 1; + } } @@ -96,8 +127,21 @@ SWITCH_DECLARE(int) switch_config_next_pair(switch_config *cfg, char **var, char if (**var == '[' && (end = strchr(*var, ']')) != 0) { *end = '\0'; (*var)++; - switch_copy_string(cfg->category, *var, sizeof(cfg->category)); - cfg->catno++; + if (**var == '+') { + (*var)++; + switch_copy_string(cfg->section, *var, sizeof(cfg->section)); + cfg->sectno++; + + if (cfg->lockto > -1 && cfg->sectno != cfg->lockto) { + break; + } + cfg->catno = 0; + cfg->lineno = 0; + + } else { + switch_copy_string(cfg->category, *var, sizeof(cfg->category)); + cfg->catno++; + } continue; } diff --git a/src/switch_core.c b/src/switch_core.c index 1b67d6a96f..2f84a47917 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -807,6 +807,8 @@ SWITCH_DECLARE(switch_status) switch_core_session_outgoing_channel(switch_core_s break; } } + } else { + return status; } }