]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
*) Add support for unified config:
authorAnthony Minessale <anthony.minessale@gmail.com>
Fri, 24 Feb 2006 16:47:22 +0000 (16:47 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Fri, 24 Feb 2006 16:47:22 +0000 (16:47 +0000)
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

17 files changed:
conf/dialplan_directory.conf [deleted file]
conf/event_multicast.conf [deleted file]
conf/exosip.conf [deleted file]
conf/extensions.conf [deleted file]
conf/freeswitch.conf [new file with mode: 0644]
conf/iax.conf [deleted file]
conf/modules.conf [deleted file]
conf/portaudio.conf [deleted file]
conf/regextensions.conf [deleted file]
conf/wanpipe.conf [deleted file]
conf/woomera.conf [deleted file]
conf/xmpp_event.conf [deleted file]
conf/zeroconf.conf [deleted file]
src/include/switch_config.h
src/mod/endpoints/mod_wanpipe/mod_wanpipe.c
src/switch_config.c
src/switch_core.c

diff --git a/conf/dialplan_directory.conf b/conf/dialplan_directory.conf
deleted file mode 100644 (file)
index 3618f92..0000000
+++ /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 (file)
index 48087dc..0000000
+++ /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 (file)
index e365ae3..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-[settings]\r
-port => 5060\r
-dialplan => demo\r
-rtp_min_port => 10000\r
-rtp_max_port => 20000\r
diff --git a/conf/extensions.conf b/conf/extensions.conf
deleted file mode 100644 (file)
index 63b062b..0000000
+++ /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 (file)
index 0000000..4bbc1d2
--- /dev/null
@@ -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 (file)
index 245a1d5..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-[settings]\r
-debug => 2\r
-port => 4569\r
-dialplan => demo\r
-codec_prefs => PCMU,PCMA,speex,L16\r
-codec_master => us\r
diff --git a/conf/modules.conf b/conf/modules.conf
deleted file mode 100644 (file)
index 92c122a..0000000
+++ /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 (file)
index ba20e7e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[settings]\r
-debug => 2\r
-dialplan => demo\r
-\r
-; partial string match on something in the name or the device #\r
-indev => USB\r
-outdev => USB\r
-\r
-cid_name => FreeSwitch\r
-cid_num => 5555551212\r
-\r
diff --git a/conf/regextensions.conf b/conf/regextensions.conf
deleted file mode 100644 (file)
index ffdf895..0000000
+++ /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 (file)
index 994c0d1..0000000
+++ /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 (file)
index 947ef89..0000000
+++ /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 (file)
index f53002f..0000000
+++ /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 (file)
index 29970ad..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-[settings]
-
-; cant do both at once WTF?
-publish => yes
-#browse => _sip._udp
-
index 8976ce3948243946f06e71d183cd40ae18c78535..fe440524cc60d8c49c9a56fe150c5254a653c53d 100644 (file)
@@ -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;
 };
 
 /*!
index a6f7db47119396d17e5619ae7f6de0c4acb8829f..2d40b743eece24279689136662ef32230f5b906f 100644 (file)
@@ -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++;
                }
        }
 
index bc860cb453d4a0d1a8dbeb3f2515adf95c048a8b..926631bf7e3ef2d59d1076bf81ad8ec7fa057d94 100644 (file)
@@ -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;
                }
 
index 1b67d6a96fc54a6fcefbba7461418ebe94c04239..2f84a479176b612441fff61145d2e414d1659ecd 100644 (file)
@@ -807,6 +807,8 @@ SWITCH_DECLARE(switch_status) switch_core_session_outgoing_channel(switch_core_s
                                        break;
                                }
                        }
+               } else {
+                       return status;
                }
        }