--- /dev/null
+<configuration name="abstraction.conf" description="Abstraction">
+<apis>
+ <api name="user_name" description="Return Name for extension" syntax="<exten>" parse="(.*)" destination="user_data" argument="$1@default var effective_caller_id_name"/>
+</apis>
+</configuration>
--- /dev/null
+<configuration name="mod_blacklist.conf" description="Blacklist module">
+<lists>
+ <!--
+ Example blacklist, the referenced file contains blacklisted items, one entry per line
+
+ NOTE: make sure the file exists and is readable by FreeSWITCH.
+
+ <list name="example" filename="/usr/local/freeswitch/conf/blacklists/example.list"/>
+ -->
+</lists>
+</configuration>
--- /dev/null
+<configuration name="callcenter.conf" description="CallCenter">
+ <settings>
+ <!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
+ <!--<param name="dbname" value="/dev/shm/callcenter.db"/>-->
+ </settings>
+
+ <queues>
+
+ <queue name="support@default">
+ <param name="strategy" value="longest-idle-agent"/>
+ <param name="moh-sound" value="$${hold_music}"/>
+ <!--<param name="record-template" value="$${base_dir}/recordings/${strftime(%Y-%m-%d-%H-%M-%S)}.${destination_number}.${caller_id_number}.${uuid}.wav"/>-->
+ <param name="time-base-score" value="system"/>
+ <param name="max-wait-time" value="0"/>
+ <param name="max-wait-time-with-no-agent" value="0"/>
+ <param name="max-wait-time-with-no-agent-time-reached" value="5"/>
+ <param name="tier-rules-apply" value="false"/>
+ <param name="tier-rule-wait-second" value="300"/>
+ <param name="tier-rule-wait-multiply-level" value="true"/>
+ <param name="tier-rule-no-agent-no-wait" value="false"/>
+ <param name="discard-abandoned-after" value="60"/>
+ <param name="abandoned-resume-allowed" value="false"/>
+ </queue>
+
+ </queues>
+
+<!-- WARNING: Configuration of XML Agents will be updated into the DB upon restart. -->
+<!-- WARNING: Configuration of XML Tiers will reset the level and position if those were supplied. -->
+<!-- WARNING: Agents and Tiers XML config shouldn't be used in a multi FS shared DB setup (Not currently supported anyway) -->
+ <agents>
+ <!--<agent name="1000@default" type="callback" contact="[call_timeout=10]user/1000@default" status="Available" max-no-answer="3" wrap-up-time="10" reject-delay-time="10" busy-delay-time="60" />-->
+ </agents>
+ <tiers>
+ <!-- If no level or position is provided, they will default to 1. You should do this to keep db value on restart. -->
+ <!-- <tier agent="1000@default" queue="support@default" level="1" position="1"/> -->
+ </tiers>
+
+</configuration>
--- /dev/null
+<configuration name="cidlookup.conf" description="cidlookup Configuration">
+ <settings>
+ <!-- comment out url to not setup a url based lookup -->
+ <param name="url" value="http://query.voipcnam.com/query.php?api_key=MYAPIKEY&number=${caller_id_number}"/>
+
+ <!-- comment out whitepages-apikey to not use whitepages.com, you must
+ get an API key from http://developer.whitepages.com/ -->
+ <param name="whitepages-apikey" value="MYAPIKEY"/>
+
+ <!-- set to false to not cache (in memcache) results from the url query -->
+ <param name="cache" value="true"/>
+ <!-- expire is in seconds -->
+ <param name="cache-expire" value="86400"/>
+
+ <param name="odbc-dsn" value="phone:phone:phone"/>
+
+ <!-- comment out sql to not setup a database (directory) lookup -->
+ <param name="sql" value="
+ SELECT name||' ('||type||')' AS name
+ FROM phonebook p JOIN numbers n ON p.id = n.phonebook_id
+ WHERE n.number='${caller_id_number}'
+ LIMIT 1
+ "/>
+ <!-- comment out citystate-sql to not setup a database (city/state)
+ lookup -->
+ <param name="citystate-sql" value="
+ SELECT ratecenter||' '||state as name
+ FROM npa_nxx_company_ocn
+ WHERE npa = ${caller_id_number:1:3} AND nxx = ${caller_id_number:4:3}
+ LIMIT 1
+ "/>
+ </settings>
+</configuration>
--- /dev/null
+<!-- http://wiki.freeswitch.org/wiki/Mod_conference -->
+<!-- None of these paths are real if you want any of these options you need to really set them up -->
+<configuration name="conference.conf" description="Audio Conference">
+ <!-- Advertise certain presence on startup . -->
+ <advertise>
+ <room name="3001@$${domain}" status="FreeSWITCH"/>
+ </advertise>
+
+ <!-- These are the default keys that map when you do not specify a caller control group -->
+ <!-- Note: none and default are reserved names for group names. Disabled if dist-dtmf member flag is set. -->
+ <caller-controls>
+ <group name="default">
+ <control action="mute" digits="0"/>
+ <control action="deaf mute" digits="*"/>
+ <control action="energy up" digits="9"/>
+ <control action="energy equ" digits="8"/>
+ <control action="energy dn" digits="7"/>
+ <control action="vol talk up" digits="3"/>
+ <control action="vol talk zero" digits="2"/>
+ <control action="vol talk dn" digits="1"/>
+ <control action="vol listen up" digits="6"/>
+ <control action="vol listen zero" digits="5"/>
+ <control action="vol listen dn" digits="4"/>
+ <control action="hangup" digits="#"/>
+ </group>
+ </caller-controls>
+
+ <!-- Profiles are collections of settings you can reference by name. -->
+ <profiles>
+ <!--If no profile is specified it will default to "default"-->
+ <profile name="default">
+ <!-- Directory to drop CDR's
+ 'auto' means $PREFIX/logs/conference_cdr/<confernece_uuid>.cdr.xml
+ a non-absolute path means $PREFIX/logs/<value>/<confernece_uuid>.cdr.xml
+ absolute path means <value>/<confernece_uuid>.cdr.xml
+ -->
+ <!-- <param name="cdr-log-dir" value="auto"/> -->
+
+ <!-- Domain (for presence) -->
+ <param name="domain" value="$${domain}"/>
+ <!-- Sample Rate-->
+ <param name="rate" value="8000"/>
+ <!-- Number of milliseconds per frame -->
+ <param name="interval" value="20"/>
+ <!-- Energy level required for audio to be sent to the other users -->
+ <param name="energy-level" value="300"/>
+
+ <!--Can be | delim of waste|mute|deaf|dist-dtmf waste will always transmit data to each channel
+ even during silence. dist-dtmf propagates dtmfs to all other members, but channel controls
+ via dtmf will be disabled. -->
+ <!--<param name="member-flags" value="waste"/>-->
+
+ <!-- Name of the caller control group to use for this profile -->
+ <!-- <param name="caller-controls" value="some name"/> -->
+ <!-- Name of the caller control group to use for the moderator in this profile -->
+ <!-- <param name="moderator-controls" value="some name"/> -->
+ <!-- TTS Engine to use -->
+ <!--<param name="tts-engine" value="cepstral"/>-->
+ <!-- TTS Voice to use -->
+ <!--<param name="tts-voice" value="david"/>-->
+
+ <!-- If TTS is enabled all audio-file params beginning with -->
+ <!-- 'say:' will be considered text to say with TTS -->
+ <!-- Override the default path here, after which you use relative paths in the other sound params -->
+ <!-- Note: The default path is the conference's first caller's sound_prefix -->
+ <!--<param name="sound-prefix" value="$${sounds_dir}/en/us/callie"/>-->
+ <!-- File to play to acknowledge succees -->
+ <!--<param name="ack-sound" value="beep.wav"/>-->
+ <!-- File to play to acknowledge failure -->
+ <!--<param name="nack-sound" value="beeperr.wav"/>-->
+ <!-- File to play to acknowledge muted -->
+ <param name="muted-sound" value="conference/conf-muted.wav"/>
+ <!-- File to play to acknowledge unmuted -->
+ <param name="unmuted-sound" value="conference/conf-unmuted.wav"/>
+ <!-- File to play if you are alone in the conference -->
+ <param name="alone-sound" value="conference/conf-alone.wav"/>
+ <!-- File to play endlessly (nobody will ever be able to talk) -->
+ <!--<param name="perpetual-sound" value="perpetual.wav"/>-->
+ <!-- File to play when you're alone (music on hold)-->
+ <param name="moh-sound" value="$${hold_music}"/>
+ <!-- File to play when you join the conference -->
+ <param name="enter-sound" value="tone_stream://%(200,0,500,600,700)"/>
+ <!-- File to play when you leave the conference -->
+ <param name="exit-sound" value="tone_stream://%(500,0,300,200,100,50,25)"/>
+ <!-- File to play when you ae ejected from the conference -->
+ <param name="kicked-sound" value="conference/conf-kicked.wav"/>
+ <!-- File to play when the conference is locked -->
+ <param name="locked-sound" value="conference/conf-locked.wav"/>
+ <!-- File to play when the conference is locked during the call-->
+ <param name="is-locked-sound" value="conference/conf-is-locked.wav"/>
+ <!-- File to play when the conference is unlocked during the call-->
+ <param name="is-unlocked-sound" value="conference/conf-is-unlocked.wav"/>
+ <!-- File to play to prompt for a pin -->
+ <param name="pin-sound" value="conference/conf-pin.wav"/>
+ <!-- File to play to when the pin is invalid -->
+ <param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/>
+ <!-- Conference pin -->
+ <!--<param name="pin" value="12345"/>-->
+ <!--<param name="moderator-pin" value="54321"/>-->
+ <!-- Max number of times the user can be prompted for PIN -->
+ <!--<param name="pin-retries" value="3"/>-->
+ <!-- Default Caller ID Name for outbound calls -->
+ <param name="caller-id-name" value="$${outbound_caller_name}"/>
+ <!-- Default Caller ID Number for outbound calls -->
+ <param name="caller-id-number" value="$${outbound_caller_id}"/>
+ <!-- Suppress start and stop talking events -->
+ <!-- <param name="suppress-events" value="start-talking,stop-talking"/> -->
+ <!-- enable comfort noise generation -->
+ <param name="comfort-noise" value="true"/>
+ <!-- Uncomment auto-record to toggle recording every conference call. -->
+ <!-- Another valid value is shout://user:pass@server.com/live.mp3 -->
+ <!--
+ <param name="auto-record" value="$${recordings_dir}/${conference_name}_${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
+ -->
+
+ <!-- IVR digit machine timeouts -->
+ <!-- How much to wait between DTMF digits to match caller-controls -->
+ <!-- <param name="ivr-dtmf-timeout" value="500"/> -->
+ <!-- How much to wait for the first DTMF, 0 forever -->
+ <!-- <param name="ivr-input-timeout" value="0" /> -->
+ <!-- Delay before a conference is asked to be terminated -->
+ <!-- <param name="endconf-grace-time" value="120" /> -->
+ </profile>
+
+ <profile name="wideband">
+ <param name="domain" value="$${domain}"/>
+ <param name="rate" value="16000"/>
+ <param name="interval" value="20"/>
+ <param name="energy-level" value="300"/>
+ <!--<param name="sound-prefix" value="$${sounds_dir}/en/us/callie"/>-->
+ <param name="muted-sound" value="conference/conf-muted.wav"/>
+ <param name="unmuted-sound" value="conference/conf-unmuted.wav"/>
+ <param name="alone-sound" value="conference/conf-alone.wav"/>
+ <param name="moh-sound" value="$${hold_music}"/>
+ <param name="enter-sound" value="tone_stream://%(200,0,500,600,700)"/>
+ <param name="exit-sound" value="tone_stream://%(500,0,300,200,100,50,25)"/>
+ <param name="kicked-sound" value="conference/conf-kicked.wav"/>
+ <param name="locked-sound" value="conference/conf-locked.wav"/>
+ <param name="is-locked-sound" value="conference/conf-is-locked.wav"/>
+ <param name="is-unlocked-sound" value="conference/conf-is-unlocked.wav"/>
+ <param name="pin-sound" value="conference/conf-pin.wav"/>
+ <param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/>
+ <param name="caller-id-name" value="$${outbound_caller_name}"/>
+ <param name="caller-id-number" value="$${outbound_caller_id}"/>
+ <param name="comfort-noise" value="true"/>
+ <!--<param name="tts-engine" value="flite"/>-->
+ <!--<param name="tts-voice" value="kal16"/>-->
+ </profile>
+
+ <profile name="ultrawideband">
+ <param name="domain" value="$${domain}"/>
+ <param name="rate" value="32000"/>
+ <param name="interval" value="20"/>
+ <param name="energy-level" value="300"/>
+ <!--<param name="sound-prefix" value="$${sounds_dir}/en/us/callie"/>-->
+ <param name="muted-sound" value="conference/conf-muted.wav"/>
+ <param name="unmuted-sound" value="conference/conf-unmuted.wav"/>
+ <param name="alone-sound" value="conference/conf-alone.wav"/>
+ <param name="moh-sound" value="$${hold_music}"/>
+ <param name="enter-sound" value="tone_stream://%(200,0,500,600,700)"/>
+ <param name="exit-sound" value="tone_stream://%(500,0,300,200,100,50,25)"/>
+ <param name="kicked-sound" value="conference/conf-kicked.wav"/>
+ <param name="locked-sound" value="conference/conf-locked.wav"/>
+ <param name="is-locked-sound" value="conference/conf-is-locked.wav"/>
+ <param name="is-unlocked-sound" value="conference/conf-is-unlocked.wav"/>
+ <param name="pin-sound" value="conference/conf-pin.wav"/>
+ <param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/>
+ <param name="caller-id-name" value="$${outbound_caller_name}"/>
+ <param name="caller-id-number" value="$${outbound_caller_id}"/>
+ <param name="comfort-noise" value="true"/>
+ <!--<param name="tts-engine" value="flite"/>-->
+ <!--<param name="tts-voice" value="kal16"/>-->
+ </profile>
+
+ <profile name="cdquality">
+ <param name="domain" value="$${domain}"/>
+ <param name="rate" value="48000"/>
+ <param name="interval" value="10"/>
+ <param name="energy-level" value="300"/>
+ <!--<param name="sound-prefix" value="$${sounds_dir}/en/us/callie"/>-->
+ <param name="muted-sound" value="conference/conf-muted.wav"/>
+ <param name="unmuted-sound" value="conference/conf-unmuted.wav"/>
+ <param name="alone-sound" value="conference/conf-alone.wav"/>
+ <param name="moh-sound" value="$${hold_music}"/>
+ <param name="enter-sound" value="tone_stream://%(200,0,500,600,700)"/>
+ <param name="exit-sound" value="tone_stream://%(500,0,300,200,100,50,25)"/>
+ <param name="kicked-sound" value="conference/conf-kicked.wav"/>
+ <param name="locked-sound" value="conference/conf-locked.wav"/>
+ <param name="is-locked-sound" value="conference/conf-is-locked.wav"/>
+ <param name="is-unlocked-sound" value="conference/conf-is-unlocked.wav"/>
+ <param name="pin-sound" value="conference/conf-pin.wav"/>
+ <param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/>
+ <param name="caller-id-name" value="$${outbound_caller_name}"/>
+ <param name="caller-id-number" value="$${outbound_caller_id}"/>
+ <param name="comfort-noise" value="true"/>
+ </profile>
+
+ <profile name="sla">
+ <param name="domain" value="$${domain}"/>
+ <param name="rate" value="16000"/>
+ <param name="interval" value="20"/>
+ <param name="caller-controls" value="none"/>
+ <param name="energy-level" value="200"/>
+ <param name="moh-sound" value="silence"/>
+ <param name="comfort-noise" value="true"/>
+ </profile>
+
+ </profiles>
+</configuration>
--- /dev/null
+ <!--
+ start a dynamic conference with the settings of the "default" conference profile in conference.conf.xml
+ -->
+ <extension name="nb_conferences">
+ <condition field="destination_number" expression="^(30\d{2})$">
+ <action application="answer"/>
+ <action application="conference" data="$1-${domain_name}@default"/>
+ </condition>
+ </extension>
+
+ <extension name="wb_conferences">
+ <condition field="destination_number" expression="^(31\d{2})$">
+ <action application="answer"/>
+ <action application="conference" data="$1-${domain_name}@wideband"/>
+ </condition>
+ </extension>
+
+ <extension name="uwb_conferences">
+ <condition field="destination_number" expression="^(32\d{2})$">
+ <action application="answer"/>
+ <action application="conference" data="$1-${domain_name}@ultrawideband"/>
+ </condition>
+ </extension>
+
+ <!-- MONO 48kHz conferences -->
+ <extension name="cdquality_conferences">
+ <condition field="destination_number" expression="^(33\d{2})$">
+ <action application="answer"/>
+ <action application="conference" data="$1-${domain_name}@cdquality"/>
+ </condition>
+ </extension>
--- /dev/null
+<configuration name="db.conf" description="LIMIT DB Configuration">
+ <settings>
+ <!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
+ </settings>
+</configuration>
--- /dev/null
+<configuration name="distributor.conf" description="Distributor Configuration">
+ <lists>
+ <!-- every 10 calls to test you will get foo1 once and foo2 9 times...yes NINE TIMES! -->
+ <!-- this is not the same as 100 with 10 and 90 that would do foo1 10 times in a row then foo2 90 times in a row -->
+ <list name="test" total-weight="10">
+ <node name="foo1" weight="1"/>
+ <node name="foo2" weight="9"/>
+ </list>
+ </lists>
+</configuration>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<include>
+ <extension name="test gateway distro">
+ <condition field="destination_number" expression="^(.*)$">
+ <action application="bridge" data="sofia/gateway/${distributor(test)}/$1"/>
+ </condition>
+ </extension>
+</include>
--- /dev/null
+<configuration name="easyroute.conf" description="EasyRoute Module">
+ <settings>
+ <!-- These are kind Obvious -->
+ <param name="db-username" value="root"/>
+ <param name="db-password" value="password"/>
+ <param name="db-dsn" value="easyroute"/>
+
+ <!-- Default Technology and profile -->
+ <param name="default-techprofile" value="sofia/default"/>
+
+ <!-- IP or Hostname of Default Route -->
+ <param name="default-gateway" value="192.168.66.6"/>
+
+ <!-- Number of times to retry ODBC connection on connection problems, default is 120 -->
+ <param name="odbc-retries" value="120"/>
+
+ <!-- Customer Query. Use this with Care!!! We are not responsible if you mess
+ This up!!! Query *MUST* return columns in the following order!
+ gateway varchar(128) - contains destination gateway host:port pair (ex: 192.168.1.1:5060 )
+ group varchar(128) - contains optional group name
+ call_limit varchar(16) - contains optional call limit
+ tech_prefix varchar(128) - tech prefix used to build dial string (ex: sofia/default )
+ acctcode varchar(128) - used to set channel variable acctcode for logging into the CDRs
+ destination_number varchar(16) - Number returning for the query for building the dial string. (ex: 18005551212)
+ See Documentation on the Wiki for further information -->
+ <!-- <param name="custom-query" value="call FS_GET_SIP_LOCATION(%s);"/> -->
+ </settings>
+</configuration>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<include>
+ <!-- This example will test the limit value for the DID number being checked -->
+ <!-- If over limit, send 503 -->
+ <extension name="easyroute">
+ <condition field="destination_number" expression="^1?(\d{10})$" break="on-true">
+ <action application="easyroute" data="$1"/>
+ <action application="limit" data="db easyroute ${easy_group} ${easy_limit} LE-$1"/>
+ <action application="bridge" data="${easy_dialstring}"/>
+ </condition>
+ </extension>
+
+ <extension name="easyroute_limit_exceeded">
+ <condition field="destination_number" expression="^LE-(\d{10})$" break="on-true">
+ <action application="respond" data="503 Buzz Off You Ran Out of Channels"/>
+ </condition>
+ </extension>
+
+ <!-- Simple example - just grab the dialstring and send the call -->
+ <extension name="easyroute">
+ <condition field="destination_number" expression="^1?(\d{10})$" break="on-true">
+ <action application="set" data="dialstring={easyroute($1 dialstring)"/>
+ <action application="bridge" data="${easy_dialstring}"/>
+ </condition>
+ </extension>
+
+<include>
--- /dev/null
+<configuration name="enum.conf" description="ENUM Module">
+ <settings>
+ <param name="default-root" value="e164.org"/>
+ <param name="default-isn-root" value="freenum.org"/>
+ <param name="query-timeout" value="10"/>
+ <param name="auto-reload" value="true"/>
+ </settings>
+
+ <routes>
+ <route service="E2U+SIP" regex="sip:(.*)" replace="sofia/${use_profile}/$1"/>
+ <!--<route service="E2U+XMPP" regex="XMPP:(.*)" replace="dingaling/$${xmpp_server_profile}/$1"/>-->
+ </routes>
+</configuration>
--- /dev/null
+<include>
+ <extension name="enum">
+ <condition field="${module_exists(mod_enum)}" expression="true"/>
+ <condition field="destination_number" expression="^(.*)$">
+ <action application="transfer" data="$1 enum"/>
+ </condition>
+ </extension>
+</include>
--- /dev/null
+<configuration name="fifo.conf" description="FIFO Configuration">
+ <settings>
+ <param name="delete-all-outbound-member-on-startup" value="false"/>
+ </settings>
+ <fifos>
+ <fifo name="cool_fifo@$${domain}" importance="0">
+ <!--<member timeout="60" simo="1" lag="20">{member_wait=nowait}user/1005@$${domain}</member>-->
+ </fifo>
+ </fifos>
+</configuration>
--- /dev/null
+ <!--
+ Parking extensions... transferring calls to 5900 will park them in a queue.
+ -->
+ <extension name="park">
+ <condition field="destination_number" expression="^5900$">
+ <action application="set" data="fifo_music=$${hold_music}"/>
+ <action application="fifo" data="5900@${domain_name} in"/>
+ </condition>
+ </extension>
+
+ <!--
+ Parking pickup extension. Calling 5901 will pickup the call.
+ -->
+ <extension name="unpark">
+ <condition field="destination_number" expression="^5901$">
+ <action application="answer"/>
+ <action application="fifo" data="5900@${domain_name} out nowait"/>
+ </condition>
+ </extension>
--- /dev/null
+<configuration name="hash.conf" description="Hash Configuration">
+ <remotes>
+ <!-- List of hosts from where to pull usage data -->
+ <!-- <remote name="Test1" host="10.0.0.10" port="8021" password="ClueCon" interval="1000" /> -->
+ </remotes>
+</configuration>
--- /dev/null
+ <extension name="hash_demo">
+ <condition field="destination_number" expression="^hash_demo$">
+ <action application="hash" data="insert/realm/key/value"/>
+ <action application="hash" data="delete/realm/key"/>
+ <action application="set" data="var=${hash(select/realm/key)}"/>
+ </condition>
+ </extension>
--- /dev/null
+<configuration name="http_cache.conf" description="HTTP GET cache">
+ <settings>
+ <param name="max-urls" value="10000"/>
+ <param name="location" value="$${base_dir}/http_cache"/>
+ <param name="default-max-age" value="86400"/>
+ </settings>
+</configuration>
+
--- /dev/null
+<include>
+ <extension "http_cache_demo">
+ <condition field="destination_number" expression="^(.*)$">
+ <action application="playback" data="${http_get(http://myserver.yo/media/hello_world.wav)}"/>
+ </condition>
+ </extension>
+</include>
--- /dev/null
+<include>
+
+ <X-PRE-PROCESS cmd="set" data="AT_EPENT1=0 0 0 -1 -1 0 -1 0 -1 -1 0 -1"/>
+ <X-PRE-PROCESS cmd="set" data="AT_EPENT2=1 1 1 -1 -1 1 -1 1 -1 -1 1 -1"/>
+ <X-PRE-PROCESS cmd="set" data="AT_CPENT1=0 -1 -1 0 -1 0 0 0 -1 -1 0 -1"/>
+ <X-PRE-PROCESS cmd="set" data="AT_CPENT2=1 -1 -1 1 -1 1 1 1 -1 -1 1 -1"/>
+ <X-PRE-PROCESS cmd="set" data="AT_CMAJ1=0 -1 0 0 -1 0 -1 0 0 -1 0 -1"/>
+ <X-PRE-PROCESS cmd="set" data="AT_CMAJ2=1 -1 1 1 -1 1 -1 1 1 -1 1 -1"/>
+ <X-PRE-PROCESS cmd="set" data="AT_BBLUES=1 -1 1 -1 -1 1 -1 1 1 1 -1 -1"/>
+ <X-PRE-PROCESS cmd="set" data="ATGPENT2=-1 1 -1 1 -1 1 -1 -1 1 -1 1 -1"/>
+
+ <extension name="101">
+ <condition field="destination_number" expression="^101$">
+ <!-- AUTOTALENT DEFAULTS -->
+
+ <!--
+ <action application="set" data="AT_TUNE=440"/>
+ <action application="set" data="AT_FIXED=0"/>
+ <action application="set" data="AT_PULL=0"/>
+ <action application="set" data="AT_A=0"/>
+ <action application="set" data="AT_Bb=-1"/>
+ <action application="set" data="AT_B=0"/>
+ <action application="set" data="AT_C=0"/>
+ <action application="set" data="AT_Db=-1"/>
+ <action application="set" data="AT_D=0"/>
+ <action application="set" data="AT_Eb=-1"/>
+ <action application="set" data="AT_E=0"/>
+ <action application="set" data="AT_F=0"/>
+ <action application="set" data="AT_Gb=-1"/>
+ <action application="set" data="AT_G=0"/>
+ <action application="set" data="AT_Ab=-1"/>
+ <action application="set" data="AT_AMOUNT=1"/>
+ <action application="set" data="AT_SMOOTH=0"/>
+ <action application="set" data="AT_SHIFT=0"/>
+ <action application="set" data="AT_OUTSCALE=0"/>
+ <action application="set" data="AT_LFODEPTH=0"/>
+ <action application="set" data="AT_LFORATE=5"/>
+ <action application="set" data="AT_LFOSHAPE=0"/>
+ <action application="set" data="AT_LFOSYMM=0"/>
+ <action application="set" data="AT_LFOQUANT=0"/>
+ <action application="set" data="AT_FCORR=0"/>
+ <action application="set" data="AT_FWARP=0"/>
+ <action application="set" data="AT_MIX=1"/>
+ -->
+
+
+ <action application="set" data="AT_TUNE=440"/>
+ <action application="set" data="AT_FIXED=0"/>
+ <action application="set" data="AT_PULL=0"/>
+
+ <action application="set" data="AT_AMOUNT=1"/>
+ <action application="set" data="AT_SMOOTH=0"/>
+ <action application="set" data="AT_SHIFT=1"/>
+ <action application="set" data="AT_OUTSCALE=0"/>
+ <action application="set" data="AT_LFODEPTH=0"/>
+ <action application="set" data="AT_LFORATE=5"/>
+ <action application="set" data="AT_LFOSHAPE=0"/>
+ <action application="set" data="AT_LFOSYMM=0"/>
+ <action application="set" data="AT_LFOQUANT=0"/>
+ <action application="set" data="AT_FCORR=0"/>
+ <action application="set" data="AT_FWARP=0"/>
+ <action application="set" data="AT_MIX=1"/>
+
+ <!-- you have to download the ladspa package and the desired plugins from their desired site -->
+
+
+ <action application="set"><![CDATA[ladspa_params=${AT_TUNE} ${AT_FIXED} ${AT_PULL} ${AT_EPENT2} ${AT_AMOUNT} ${AT_SMOOTH} ${AT_SHIFT} ${AT_OUTSCALE} ${AT_LFODEPTH} ${AT_LFORATE} ${AT_LFOSHAPE} ${AT_LFOSYMM} ${AT_LFOQUANT} ${AT_FCORR} ${AT_FWARP} ${AT_MIX}]]></action>
+
+ <action application="ladspa_run" data="r|autotalent||${ladspa_params}"/>
+ <action application="ladspa_run" data="r|tap_chorusflanger||"/>
+ <action application="ladspa_run" data="r|phasers_1217.so|autoPhaser|"/>
+ <action application="bridge" data="sofia/internal/888@conference.freeswitch.org"/>
+
+ </condition>
+ </extension>
+
+</include>
--- /dev/null
+mod_ladspa is a module that allow to use Linux Audio Developer's Simple Plugin API inside freeswitch in realtime.
+see http://wiki.freeswitch.org/wiki/Mod_ladspa for installation and configuration documentation.
+
+Please Note Currently this module only works on Linux.
--- /dev/null
+<configuration name="lcr.conf" description="LCR Configuration">
+ <settings>
+ <param name="odbc-dsn" value="freeswitch-mysql:freeswitch:Fr33Sw1tch"/>
+<!-- <param name="odbc-dsn" value="freeswitch-pgsql:freeswitch:Fr33Sw1tch"/> -->
+ </settings>
+ <profiles>
+ <profile name="default">
+ <param name="id" value="0"/>
+ <param name="order_by" value="rate,quality,reliability"/>
+ </profile>
+ <profile name="qual_rel">
+ <param name="id" value="1"/>
+ <param name="order_by" value="quality,reliability"/>
+ </profile>
+ <profile name="rel_qual">
+ <param name="id" value="2"/>
+ <param name="order_by" value="reliability,quality"/>
+ </profile>
+<!--
+ Some samples of how to do custom SQL:
+
+ =============================================================
+ PostgreSQL with contrib prefix module which supports fast
+ prefix queries. Ideal option.
+ =============================================================
+ <profile name="pg_prefix">
+ <param name="custom_sql" value="
+SELECT l.digits AS lcr_digits,
+ c.carrier_name AS lcr_carrier_name,
+ l.${lcr_rate_field} as lcr_rate_field,
+ cg.prefix AS lcr_gw_prefix, cg.suffix AS lcr_gw_suffix,
+ l.lead_strip AS lcr_lead_strip, l.trail_strip AS lcr_trail_strip,
+ l.prefix AS lcr_prefix, l.suffix AS lcr_suffix
+ FROM lcr l
+ JOIN carriers c ON l.carrier_id=c.id
+ JOIN carrier_gateway cg ON c.id=cg.carrier_id
+ WHERE c.enabled = '1' AND cg.enabled = '1' AND l.enabled = '1'
+ AND digits_prefix @> %q
+ AND CURRENT_TIMESTAMP BETWEEN date_start AND date_end
+ ORDER BY digits DESC, ${lcr_rate_field}, random();
+ "/>
+ </profile>
+
+ =============================================================
+ PostgreSQL with contrib prefix module which supports fast
+ prefix queries. Ideal option. Alternate syntax which requies
+ a session but allows variable substitution.
+ =============================================================
+ <profile name="pg_prefix2">
+ <param name="custom_sql" value="
+SELECT l.digits AS lcr_digits,
+ c.carrier_name AS lcr_carrier_name,
+ l.${lcr_rate_field} as lcr_rate_field,
+ cg.prefix AS lcr_gw_prefix, cg.suffix AS lcr_gw_suffix,
+ l.lead_strip AS lcr_lead_strip, l.trail_strip AS lcr_trail_strip,
+ l.prefix AS lcr_prefix, l.suffix AS lcr_suffix
+ FROM lcr l
+ JOIN carriers c ON l.carrier_id=c.id
+ JOIN carrier_gateway cg ON c.id=cg.carrier_id
+ WHERE c.enabled = '1' AND cg.enabled = '1' AND l.enabled = '1'
+ AND digits_prefix @> '${lcr_query_digits}'
+ AND CURRENT_TIMESTAMP BETWEEN date_start AND date_end
+ ORDER BY digits DESC, ${lcr_rate_field}, random();
+ "/>
+ </profile>
+
+ =============================================================
+ Demonstrates use of computed inlist.
+ =============================================================
+ <profile name="inlist">
+ <param name="custom_sql" value="
+SELECT l.digits AS lcr_digits,
+ c.carrier_name AS lcr_carrier_name,
+ l.${lcr_rate_field} as lcr_rate_field,
+ cg.prefix AS lcr_gw_prefix, cg.suffix AS lcr_gw_suffix,
+ l.lead_strip AS lcr_lead_strip, l.trail_strip AS lcr_trail_strip,
+ l.prefix AS lcr_prefix, l.suffix AS lcr_suffix
+ FROM lcr l
+ JOIN carriers c ON l.carrier_id=c.id
+ JOIN carrier_gateway cg ON c.id=cg.carrier_id
+ WHERE c.enabled = '1' AND cg.enabled = '1' AND l.enabled = '1'
+ AND digits IN (${lcr_query_expanded_digits})
+ AND CURRENT_TIMESTAMP BETWEEN date_start AND date_end
+ ORDER BY digits DESC, ${lcr_rate_field}, random();
+ "/>
+ </profile>
+-->
+ </profiles>
+</configuration>
--- /dev/null
+<include>
+ <extension name="Outbound to PSTN 11 Digits">
+ <condition field="destination_number" expression="^(1[2-9][0-9]{2}[2-9]{7})$">
+ <action application="lcr" data="$1"/>
+ <action application="bridge" data="${lcr_auto_route}"/>
+ </condition>
+ </extension>
+</include>
--- /dev/null
+<configuration name="limit.conf" description="LIMIT Configuration">
+ <settings>
+ <!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
+ </settings>
+</configuration>
--- /dev/null
+<include>
+ <extension name="limit_exceeded">
+ <condition field="destination_number" expression="^limit_exceeded$">
+ <action application="playback" data="/sounds/overthelimit.wav"/>
+ <action application="hangup"/>
+ </condition>
+ </extension>
+
+ <extension name="limit" continue="true">
+ <condition>
+ <action application="limit" data="db $${domain} ${sip_auth_username} ${max_calls}"/>
+ </condition>
+ </extension>
+</include>
--- /dev/null
+<configuration name="memcache.conf" description="memcache Configuration">
+ <settings>
+ <!-- comma sep list of servers: eg: localhost,otherhost:port,anotherone -->
+ <param name="memcache-servers" value="localhost"/>
+ </settings>
+</configuration>
--- /dev/null
+<include>
+ <extension name="memcache_examples">
+ <condition field="destination_number" expression="^memcache$">
+ <action application="set" data="foo=${memcache(get key)}"/>
+ <action application="set" data="ignore=${memcache(set key value)}"/>
+ <action application="set" data="ignore=${memcache(set key ${channel_var})}"/>
+ </condition>
+ </extension>
+</include>
--- /dev/null
+<configuration name="mongo.conf">
+ <settings>
+ <!--
+ connection-string handles different ways to connect to mongo
+ samples:
+ server:port
+ foo/server:port,server:port SET
+ -->
+ <param name="connection-string" value="127.0.0.1:27017"/>
+ <param name="min-connections" value="10"/>
+ <param name="max-connections" value="100"/>
+
+<!--
+ <param name="map" value="function() { emit(this.a, 1); }"/>
+ <param name="reduce" value="function(key, values) { return Array.sum(values); }"/>
+ <param name="finalize" value="function(key, value) { return value;}"/>
+-->
+
+ </settings>
+</configuration>
--- /dev/null
+<configuration name="nibblebill.conf" description="Nibble Billing">
+ <settings>
+ <!-- See http://wiki.freeswitch.org/wiki/Mod_nibblebill for help with these options -->
+
+ <!-- Information for connecting to your database -->
+ <param name="db_username" value="bandwidth.com"/>
+ <param name="db_password" value="password"/>
+ <param name="db_dsn" value="bandwidth.com"/>
+
+ <!-- The database table where your CASH column is located -->
+ <param name="db_table" value="accounts"/>
+
+ <!-- The column name where we store the value of the account -->
+ <param name="db_column_cash" value="cash"/>
+
+ <!-- The column name for the unique ID identifying the account -->
+ <param name="db_column_account" value="id"/>
+
+ <!-- Custom SQL for loading current balance - overrides column names
+ channel vars are interpreted.
+ field nibble_balance is used for balance info
+
+ <param name="custom_sql_lookup" value="SELECT cash AS nibble_balance FROM accounts WHERE account_code='${nibble_account}'"/>
+ -->
+
+ <!-- Custom SQL for loading current balance - overrides column names
+ channel vars are interpreted.
+ nibble_increment is the amount to update
+
+ <param name="custom_sql_save" value="UPDATE accounts SET cash=cash-${nibble_increment} WHERE account_code='${nibble_account}'"/>
+ -->
+
+
+ <!-- Default heartbeat interval. Set to 'off' for no heartbeat (i.e. bill only at end of call) -->
+ <param name="global_heartbeat" value="60"/>
+
+ <!-- By default, warn a caller when their balance is at $5.00. You can set this to a negative number. -->
+ <param name="lowbal_amt" value="5"/>
+ <param name="lowbal_action" value="play ding"/>
+
+ <!-- By default, terminate a caller when their balance hits $0.00. You can set this to a negative number. -->
+ <param name="nobal_amt" value="0"/>
+ <param name="nobal_action" value="hangup"/>
+
+ <!-- If a call goes beyond a certain dollar amount, flag or terminate it -->
+ <param name="percall_max_amt" value="100"/>
+ <param name="percall_action" value="hangup"/>
+
+ </settings>
+</configuration>
--- /dev/null
+<include>
+
+ <extension name="tollfree800">
+ <condition field="destination_number" expression="^1{0,1}(800\d{7})$">
+ <action application="set" data="nibble_account=${accountcode}"/>
+ <action application="set" data="nibble_rate=0"/>
+ <action application="bridge" data="sofia/gateway/bandwidth.com/$1"/>
+ </condition>
+ </extension>
+
+ <extension name="special919rate">
+ <condition field="destination_number" expression="^1{0,1}(919\d{7})$">
+ <action application="set" data="nibble_account=${accountcode}"/>
+ <action application="set" data="nibble_rate=0.07"/>
+ <action application="bridge" data="sofia/gateway/bandwidth.com/$1"/>
+ </condition>
+ </extension>
+
+ <extension name="domestic">
+ <condition field="destination_number" expression="^(1{0,1}\d{10})$">
+ <action application="set" data="nibble_account=${accountcode}"/>
+ <action application="set" data="nibble_rate=0.05"/>
+ <action application="bridge" data="sofia/gateway/bandwidth.com/$1"/>
+ </condition>
+ </extension>
+
+</include>
--- /dev/null
+<configuration name="osp.conf" description="OSP Module Configuration">
+ <settings>
+ <!-- Debug info flag -->
+ <param name="debug-info" value="disabled"/>
+ <!-- Log level for debug info -->
+ <param name="log-level" value="info"/>
+ <!-- Crypto hareware accelerate is disabled by default -->
+ <param name="crypto-hardware" value="disabled"/>
+ <!-- SIP settings -->
+ <param name="sip" module="sofia" profile="external"/>
+ <!-- H.323 settings -->
+ <!-- <param name="h323" module="h323" profile="external"/> -->
+ <!-- IAX settings -->
+ <!-- <param name="iax" module="iax" profile="external"/> -->
+ <!-- Skype settings -->
+ <!-- <param name="skype" module="skypopen" profile="external"/> -->
+ <!-- Default destination protocol -->
+ <param name="default-protocol" value="sip"/>
+ </settings>
+
+ <profiles>
+ <!-- Default OSP profile -->
+ <profile name="default">
+ <!-- Service point URLs, up to 8 allowed -->
+ <!-- <param name="service-point-url" value="http://osptestserver.transnexus.com:5045/osp"/> -->
+ <!-- <param name="service-point-url" value="https://127.0.0.1:1443/osp"/> -->
+ <param name="service-point-url" value="http://127.0.0.1:5045/osp"/>
+
+ <!-- FreeSWITCH IP address for OSP -->
+ <param name="device-ip" value="127.0.0.1:5080"/>
+
+ <!-- SSL lifetime in seconds -->
+ <param name="ssl-lifetime" value="300"/>
+ <!-- HTTP max connections, 1~1000 -->
+ <param name="http-max-connections" value="20"/>
+ <!-- HTTP persistence in seconds -->
+ <param name="http-persistence" value="60"/>
+ <!-- HTTP retry delay in seconds, 0~10 -->
+ <param name="http-retry-delay" value="0"/>
+ <!-- HTTP retry limit, 0~100 -->
+ <param name="http-retry-limit" value="2"/>
+ <!-- HTTP timeout in milliseconds, 200~60000 -->
+ <param name="http-timeout" value="10000"/>
+
+ <!-- OSP work mode, direct or indirect -->
+ <param name="work-mode" value="direct"/>
+ <!-- OSP service type, voice or npquery -->
+ <param name="service-type" value="voice"/>
+ <!-- Max number of destinations -->
+ <param name="max-destinations" value="12"/>
+ </profile>
+ </profiles>
+</configuration>
--- /dev/null
+<configuration name="redis.conf" description="mod_redis Configuration">
+ <settings>
+ <param name="host" value="localhost"/>
+ <param name="port" value="6379"/>
+ <param name="timeout" value="10000"/>
+ </settings>
+</configuration>
--- /dev/null
+<configuration name="rss.conf" description="RSS Parser">
+ <feeds>
+ <!-- Just download the files to wherever and refer to them here -->
+ <!-- <feed name="Slash Dot">/home/rss/rss.rss</feed> -->
+ <!-- <feed name="News Forge">/home/rss/newsforge.rss</feed> -->
+ </feeds>
+</configuration>
--- /dev/null
+<include>
+ <extension name="rss">
+ <condition field="destination_number" expression="^rss$">
+ <action application="rss"/>
+ </condition>
+ </extension>
+</include>
--- /dev/null
+if (session.ready()) {
+ session.answer();
+ session.speak("cepstral","David","Please wait while we refresh the RSS feeds.")
+
+ fetchURLFile("http://weather.yahooapis.com/forecastrss?p=60610","rss/weather.rss");
+ fetchURLFile("http://rss.news.yahoo.com/rss/topstories","rss/yahootop.rss");
+ fetchURLFile("http://rss.news.yahoo.com/rss/science","rss/yahoosci.rss");
+ fetchURLFile("http://rss.news.yahoo.com/rss/business","rss/yahoobus.rss");
+ fetchURLFile("http://rss.news.yahoo.com/rss/entertainment","rss/yahooent.rss");
+ fetchURLFile("http://rss.slashdot.org/Slashdot/slashdot","rss/slashdot.rss");
+ fetchURLFile("http://www.freeswitch.org/xml.php","rss/freeswitch.rss");
+}
--- /dev/null
+<include>
+ <extension name="snom-demo-1">
+ <condition field="destination_number" expression="^9000$">
+ <!-- <key> <light> <label> <user> <host> <profile> <action_name> <action> -->
+ <action application="eval" data="${snom_bind_key(2 on DND ${sip_from_user} ${sip_from_host} ${sofia_profile_name} message api+uuid_transfer ${uuid} 9001)}"/>
+ <action application="playback" data="$${hold_music}"/>
+ </condition>
+ </extension>
+
+ <extension name="snom-demo-2">
+ <condition field="destination_number" expression="^9001$">
+ <action application="eval" data="${snom_bind_key(2 off DND ${sip_from_user} ${sip_from_host} ${sofia_profile_name} message notused)}"/>
+ <action application="transfer" data="3000"/>
+ </condition>
+ </extension>
+</include>
--- /dev/null
+<configuration name="spandsp.conf" description="SpanDSP config">
+ <modem-settings>
+<!--
+ total-modems set to N will create that many soft-modems.
+ If you use them with Hylafax you need the following for each one numbered 0..N:
+
+ 1) A line like this in /etc/inittab:
+
+ f0:2345:respawn:/usr/lib/fax/faxgetty /dev/FS0
+
+ 2) copy conf/config.FS0 to /var/spool/hylafax/etc (or wherver the appropriate dir is on your system)
+
+ Subsequent modem configs would incrment the 0 to 1 and so on.
+
+-->
+ <param name="total-modems" value="0"/>
+
+ <!-- Default context and dialplan to use on inbound calls from the modems -->
+ <param name="context" value="default"/>
+ <param name="dialplan" value="XML"/>
+
+ <!-- Extra tracing for debugging -->
+ <param name="verbose" value="false"/>
+ </modem-settings>
+
+ <fax-settings>
+ <param name="use-ecm" value="true"/>
+ <param name="verbose" value="false"/>
+ <param name="disable-v17" value="false"/>
+ <param name="ident" value="SpanDSP Fax Ident"/>
+ <param name="header" value="SpanDSP Fax Header"/>
+
+ <param name="spool-dir" value="/tmp"/>
+ <param name="file-prefix" value="faxrx"/>
+ </fax-settings>
+
+ <descriptors>
+
+ <!-- These tones are defined in Annex to ITU Operational Bulletin No. 781 - 1.II.2003 -->
+ <!-- Various Tones Used in National Networks (According to ITU-T Recommendation E.180)(03/1998) -->
+
+ <!-- North America -->
+ <descriptor name="1">
+ <tone name="CED_TONE">
+ <element freq1="2100" freq2="0" min="500" max="0"/>
+ </tone>
+ <tone name="SIT">
+ <element freq1="950" freq2="0" min="256" max="400"/>
+ <element freq1="1400" freq2="0" min="256" max="400"/>
+ <element freq1="1800" freq2="0" min="256" max="400"/>
+ </tone>
+ <tone name="REORDER_TONE">
+ <element freq1="480" freq2="620" min="224" max="272"/>
+ <element freq1="0" freq2="0" min="224" max="272"/>
+ </tone>
+ <tone name="BUSY_TONE">
+ <element freq1="480" freq2="620" min="464" max="516"/>
+ <element freq1="0" freq2="0" min="464" max="516"/>
+ </tone>
+ </descriptor>
+
+ <!-- United Kingdom -->
+ <descriptor name="44">
+ <tone name="CED_TONE">
+ <element freq1="2100" freq2="0" min="500" max="0"/>
+ </tone>
+ <tone name="SIT">
+ <element freq1="950" freq2="0" min="256" max="400"/>
+ <element freq1="1400" freq2="0" min="256" max="400"/>
+ <element freq1="1800" freq2="0" min="256" max="400"/>
+ </tone>
+ <tone name="REORDER_TONE">
+ <element freq1="400" freq2="0" min="368" max="416"/>
+ <element freq1="0" freq2="0" min="336" max="368"/>
+ <element freq1="400" freq2="0" min="256" max="288"/>
+ <element freq1="0" freq2="0" min="512" max="544"/>
+ </tone>
+ <tone name="BUSY_TONE">
+ <element freq1="400" freq2="0" min="352" max="384"/>
+ <element freq1="0" freq2="0" min="352" max="384"/>
+ <element freq1="400" freq2="0" min="352" max="384"/>
+ <element freq1="0" freq2="0" min="352" max="384"/>
+ </tone>
+ </descriptor>
+
+ <!-- Germany -->
+ <descriptor name="49">
+ <tone name="CED_TONE">
+ <element freq1="2100" freq2="0" min="500" max="0"/>
+ </tone>
+ <tone name="SIT">
+ <element freq1="900" freq2="0" min="256" max="400"/>
+ <element freq1="1400" freq2="0" min="256" max="400"/>
+ <element freq1="1800" freq2="0" min="256" max="400"/>
+ </tone>
+ <tone name="REORDER_TONE">
+ <element freq1="425" freq2="0" min="224" max="272"/>
+ <element freq1="0" freq2="0" min="224" max="272"/>
+ </tone>
+ <tone name="BUSY_TONE">
+ <element freq1="425" freq2="0" min="464" max="516"/>
+ <element freq1="0" freq2="0" min="464" max="516"/>
+ </tone>
+ </descriptor>
+ </descriptors>
+
+</configuration>
+
--- /dev/null
+CountryCode: 1
+AreaCode: 800
+FAXNumber: +1.800.555.1212
+LongDistancePrefix: 1
+InternationalPrefix: 011
+DialStringRules: etc/dialrules
+ServerTracing: 0xFFF
+SessionTracing: 0xFFF
+RecvFileMode: 0600
+LogFileMode: 0600
+DeviceMode: 0600
+RingsBeforeAnswer: 1
+SpeakerVolume: off
+GettyArgs: "-h %l dx_%s"
+LocalIdentifier: "FS"
+TagLineFont: etc/lutRS18.pcf
+TagLineFormat: "From %%l|%c|Page %%P of %%T"
+MaxRecvPages: 200
+#
+#
+# Modem-related stuff: should reflect modem command interface
+# and hardware connection/cabling (e.g. flow control).
+#
+ModemType: Class1 # use this to supply a hint
+
+#
+# Enabling this will use the hfaxd-protocol to set Caller*ID
+#
+#ModemSetOriginCmd: AT+VSID="%s","%d"
+
+#
+# If "glare" during initialization becomes a problem then take
+# the modem off-hook during initialization, and then place it
+# back on-hook when done.
+#
+#ModemResetCmds: "ATH1\nAT+VCID=1" # enables CallID display
+#ModemReadyCmds: ATH0
+
+Class1AdaptRecvCmd: AT+FAR=1
+Class1TMConnectDelay: 400 # counteract quick CONNECT response
+
+#
+# If you have trouble with V.17 receiving or sending,
+# you may want to enable one of these, respectively.
+#
+#Class1RMQueryCmd: "!24,48,72,96" # enable this to disable V.17 receiving
+#Class1TMQueryCmd: "!24,48,72,96" # enable this to disable V.17 sending
+
+#
+# You'll likely want Caller*ID display (also displays DID) enabled.
+#
+ModemResetCmds: AT+VCID=1 # enables CallID display
+
+#
+# The pty does not support changing parity.
+#
+PagerTTYParity: none
+
+#
+# If you are "missing" Caller*ID data on some calls (but not all)
+# and if you do not have adequate glare protection you may want to
+# not answer based on RINGs, but rather enable the CallIDAnswerLength
+# for NDID, disable AT+VCID=1 and do this:
+#
+#RingsBeforeAnswer: 0
+#ModemRingResponse: AT+VRID=1
+
+# Uncomment DATE and TIME if you really want them, but you probably don't.
+#CallIDPattern: "DATE="
+#CallIDPattern: "TIME="
+CallIDPattern: "NMBR="
+CallIDPattern: "NAME="
+CallIDPattern: "ANID="
+#CallIDPattern: "USER=" # username provided by call
+#CallIDPattern: "PASS=" # password provided by call
+#CallIDPattern: "CDID=" # DID context in call
+CallIDPattern: "NDID="
+#CallIDAnswerLength: 4
--- /dev/null
+ <extension name="fax_receive">
+ <condition field="destination_number" expression="^9178$">
+ <action application="answer" />
+ <action application="playback" data="silence_stream://2000"/>
+ <action application="rxfax" data="/tmp/rxfax.tif"/>
+ <action application="hangup"/>
+ </condition>
+ </extension>
+
+ <extension name="fax_transmit">
+ <condition field="destination_number" expression="^9179$">
+ <action application="txfax" data="/tmp/txfax.tif"/>
+ <action application="hangup"/>
+ </condition>
+ </extension>
+
+ <extension name="fax_receive">
+ <condition field="destination_number" expression="^9978$">
+ <action application="answer" />
+ <action application="playback" data="silence_stream://2000"/>
+ <action application="set" data="fax_enable_t38_request=true"/>
+ <action application="set" data="fax_enable_t38=true"/>
+ <action application="rxfax" data="/tmp/FAX-${uuid}.tif"/>
+ <action application="hangup"/>
+ </condition>
+ </extension>
--- /dev/null
+<include>
+ <!--
+ Valet park retrieval, works with valet_park extension below.
+ Retrieve a valet parked call by dialing 6000 + park number + #
+ -->
+ <extension name="valet_park">
+ <condition field="destination_number" expression="^(6000)$">
+ <action application="answer"/>
+ <action application="valet_park" data="valet_parking_lot ask 1 11 10000 ivr/ivr-enter_ext_pound.wav"/>
+ </condition>
+ </extension>
+
+ <!--
+ Valet park 6001-6099. Blind x-fer to 6001, 6002, etc. to valet park the call.
+ Dial 6001, 6002, etc. to retrieve a call that is already valet parked.
+ After call is retrieved, park extension is free for another call.
+ -->
+ <extension name="valet_park">
+ <condition field="destination_number" expression="^(60\d[1-9])$">
+ <action application="answer"/>
+ <action application="valet_park" data="valet_parking_lot $1"/>
+ </condition>
+ </extension>
+</include>
--- /dev/null
+<include>
+ <extension name="vmdtest">
+ <condition field="destination_number" expression="^vmd(\d{10})$">
+ <action application="answer"/>
+ <action application="info"/>
+ <action application="vmd"/>
+ <action application="sleep" data="25000"/>
+ <action application="info"/> <!-- Look for chan var "vmd_detect" here -->
+ <action application="hangup"/>
+ </condition>
+ </extension>
+</include>
--- /dev/null
+function onInput(s, type, obj, arg)
+{
+ try
+ {
+ if(type == "dtmf")
+ {
+ console_log("info", "DTMF digit: "+s.name+" ["+obj.digit+"] len ["+obj.duration+"]\n");
+ }
+ else if(type == "event" && session.getVariable("vmd_detect") == "TRUE")
+ {
+ console_log("info", "Voicemail Detected\n");
+ }
+
+ }
+ catch(e)
+ {
+ console_log("err", e + "\n");
+ }
+ return true;
+}
+
+session.answer();
+session.execute("vmd", "start");
+while(session.ready())
+{
+ session.streamFile(argv[0], onInput);
+}
--- /dev/null
+local human_detected = false;
+local voicemail_detected = false;
+
+function onInput(session, type, obj)
+ if type == "dtmf" and obj['digit'] == '1' and human_detected == false then
+ human_detected = true;
+ return "break";
+ end
+
+ if type == "event" and voicemail_detected == false then
+ voicemail_detected = true;
+ return "break";
+ end
+end
+
+session:setInputCallback("onInput");
+session:execute("vmd","start");
--- /dev/null
+<configuration name="voicemail.conf" description="Voicemail">
+ <settings>
+ </settings>
+ <profiles>
+ <profile name="default">
+ <param name="file-extension" value="wav"/>
+ <param name="terminator-key" value="#"/>
+ <param name="max-login-attempts" value="3"/>
+ <param name="digit-timeout" value="10000"/>
+ <param name="min-record-len" value="3"/>
+ <param name="max-record-len" value="300"/>
+ <param name="max-retries" value="3"/>
+ <param name="tone-spec" value="%(1000, 0, 640)"/>
+ <param name="callback-dialplan" value="XML"/>
+ <param name="callback-context" value="default"/>
+ <param name="play-new-messages-key" value="1"/>
+ <param name="play-saved-messages-key" value="2"/>
+ <param name="login-keys" value="0"/>
+ <param name="main-menu-key" value="0"/>
+ <param name="config-menu-key" value="5"/>
+ <param name="record-greeting-key" value="1"/>
+ <param name="choose-greeting-key" value="2"/>
+ <param name="change-pass-key" value="6"/>
+ <param name="record-name-key" value="3"/>
+ <param name="record-file-key" value="3"/>
+ <param name="listen-file-key" value="1"/>
+ <param name="save-file-key" value="2"/>
+ <param name="delete-file-key" value="7"/>
+ <param name="undelete-file-key" value="8"/>
+ <param name="email-key" value="4"/>
+ <param name="pause-key" value="0"/>
+ <param name="restart-key" value="1"/>
+ <param name="ff-key" value="6"/>
+ <param name="rew-key" value="4"/>
+ <param name="skip-greet-key" value="#"/>
+ <param name="previous-message-key" value="1"/>
+ <param name="next-message-key" value="3"/>
+ <param name="skip-info-key" value="*"/>
+ <param name="repeat-message-key" value="0"/>
+ <param name="record-silence-threshold" value="200"/>
+ <param name="record-silence-hits" value="2"/>
+ <param name="web-template-file" value="web-vm.tpl"/>
+ <param name="db-password-override" value="false"/>
+ <param name="allow-empty-password-auth" value="true"/>
+ <!-- if you need to change the sample rate of the recorded files e.g. gmail voicemail player -->
+ <!--<param name="record-sample-rate" value="11025"/>-->
+ <!-- the next two both must be set for this to be enabled
+ the extension is in the format of <dest> [<dialplan>] [<context>]
+ -->
+ <param name="operator-extension" value="operator XML default"/>
+ <param name="operator-key" value="9"/>
+ <param name="vmain-extension" value="vmain XML default"/>
+ <param name="vmain-key" value="*"/>
+ <!-- playback created files as soon as they were recorded by default -->
+ <!--<param name="auto-playback-recordings" value="true"/>-->
+ <email>
+ <param name="template-file" value="voicemail.tpl"/>
+ <param name="notify-template-file" value="notify-voicemail.tpl"/>
+ <!-- this is the format voicemail_time will have -->
+ <param name="date-fmt" value="%A, %B %d %Y, %I %M %p"/>
+ <param name="email-from" value="${voicemail_account}@${voicemail_domain}"/>
+ </email>
+ <!--<param name="storage-dir" value="/tmp"/>-->
+ <!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
+ <!--<param name="record-comment" value="Your Comment"/>-->
+ <!--<param name="record-title" value="Your Title"/>-->
+ <!--<param name="record-copyright" value="Your Copyright"/>-->
+ </profile>
+ </profiles>
+</configuration>
--- /dev/null
+<include>
+ <!-- This is a _VERY_ abbreviated demo for voicemail. A better demo would be useful -->
+
+ <!-- voicemail main extension -->
+ <extension name="vmain">
+ <condition field="destination_number" expression="^vmain$|^4000$|^\*98$">
+ <action application="answer"/>
+ <action application="sleep" data="1000"/>
+ <action application="voicemail" data="check default ${domain_name}"/>
+ </condition>
+ </extension>
+
+ <extension name="Local_Voicemail">
+ <condition field="destination_number" expression="^(10[01][0-9])$">
+ <action application="export" data="dialed_extension=$1"/>
+ <action application="export" data="domain=default"/>
+ <action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/>
+ </condition>
+ </extension>
+</include>
--- /dev/null
+From: "${voicemail_caller_id_name}" <${voicemail_caller_id_number}@${voicemail_domain}>
+Date: ${RFC2822_DATE}
+To: <${voicemail_notify_email}>
+Subject: Voicemail from "${voicemail_caller_id_name}" <${voicemail_caller_id_number}> ${voicemail_message_len}
+X-Priority: ${voicemail_priority}
+X-Mailer: FreeSWITCH
+
+Content-Type: multipart/alternative;
+ boundary="000XXX000"
+
+--000XXX000
+Content-Type: text/plain; charset=ISO-8859-1; Format=Flowed
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+
+Created: ${voicemail_time}
+From: "${voicemail_caller_id_name}" <${voicemail_caller_id_number}>
+Duration: ${voicemail_message_len}
+Account: ${voicemail_account}@${voicemail_domain}
+
+--000XXX000
+Content-Type: text/html; charset=ISO-8859-1
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Voicemail from "${voicemail_caller_id_name}" <${voicemail_caller_id_number}> ${voicemail_message_len}</title>
+<meta content="text/html; charset=iso-8859-1" http-equiv="content-type"/>
+</head>
+<body>
+
+<font face=arial>
+<b>Message From "${voicemail_caller_id_name}" <A HREF="tel:${voicemail_caller_id_number}">${voicemail_caller_id_number}</A></b><br>
+<hr noshade size=1>
+Created: ${voicemail_time}<br>
+Duration: ${voicemail_message_len}<br>
+Account: ${voicemail_account}@${voicemail_domain}<br>
+</font>
+
+</body>
+</html>
+--000XXX000--
--- /dev/null
+From: "${voicemail_caller_id_name}" <${voicemail_caller_id_number}@${voicemail_domain}>
+Date: ${RFC2822_DATE}
+To: <${voicemail_email}>
+Subject: Voicemail from "${voicemail_caller_id_name}" <${voicemail_caller_id_number}> ${voicemail_message_len}
+X-Priority: ${voicemail_priority}
+X-Mailer: FreeSWITCH
+
+Content-Type: multipart/alternative;
+ boundary="000XXX000"
+
+--000XXX000
+Content-Type: text/plain; charset=ISO-8859-1; Format=Flowed
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+
+Created: ${voicemail_time}
+From: "${voicemail_caller_id_name}" <${voicemail_caller_id_number}>
+Duration: ${voicemail_message_len}
+Account: ${voicemail_account}@${voicemail_domain}
+
+--000XXX000
+Content-Type: text/html; charset=ISO-8859-1
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Voicemail from "${voicemail_caller_id_name}" <${voicemail_caller_id_number}> ${voicemail_message_len}</title>
+<meta content="text/html; charset=iso-8859-1" http-equiv="content-type"/>
+</head>
+<body>
+
+<font face=arial>
+<b>Message From "${voicemail_caller_id_name}" <A HREF="tel:${voicemail_caller_id_number}">${voicemail_caller_id_number}</A></b><br>
+<hr noshade size=1>
+Created: ${voicemail_time}<br>
+Duration: ${voicemail_message_len}<br>
+Account: ${voicemail_account}@${voicemail_domain}<br>
+</font>
+
+</body>
+</html>
+--000XXX000--
--- /dev/null
+<configuration name="voicemail_ivr.conf" description="Voicemail IVR">
+<profiles>
+ <profile name="default">
+ <settings>
+ <param name="IVR-Maximum-Attempts" value="3" />
+ <param name="IVR-Entry-Timeout" value="3000" />
+ <param name="Record-Format" value="wav" />
+ <!--<param name="Record-Sample-Rate" value="8000" />-->
+ <param name="Record-Silence-Hits" value="4" />
+ <param name="Record-Silence-Threshold" value="200" />
+ <param name="Record-Maximum-Length" value="30" />
+ <!--<param name="Record-Minimum-Length" value="3" />-->
+ <param name="Exit-Purge" value="true" />
+ <param name="Password-Mask" value="XXX." />
+ <param name="User-Mask" value="X." />
+
+ </settings>
+ <apis>
+ <api name="auth_login" value="vm_fsdb_auth_login" />
+ <api name="msg_list" value="vm_fsdb_msg_list" />
+ <api name="msg_count" value="vm_fsdb_msg_count" />
+ <api name="msg_delete" value="vm_fsdb_msg_delete" />
+ <api name="msg_undelete" value="vm_fsdb_msg_undelete" />
+ <api name="msg_save" value="vm_fsdb_msg_save" />
+ <api name="msg_purge" value="vm_fsdb_msg_purge" />
+ <api name="msg_get" value="vm_fsdb_msg_get" />
+ <api name="msg_forward" value="vm_fsdb_msg_forward" />
+ <api name="pref_greeting_set" value="vm_fsdb_pref_greeting_set" />
+ <api name="pref_recname_set" value="vm_fsdb_pref_recname_set" />
+ <api name="pref_password_set" value="vm_fsdb_pref_password_set" />
+ </apis>
+ <menus>
+ <menu name="std_authenticate">
+ <phrases>
+ <phrase name="fail_auth" value="fail_auth@voicemail_ivr" />
+ </phrases>
+ <keys>
+ </keys>
+ </menu>
+
+ <menu name="std_authenticate_ask_user">
+ <phrases>
+ <phrase name="instructions" value="enter_id@voicemail_ivr" />
+ </phrases>
+ <keys>
+ <key dtmf="#" action="ivrengine:terminate_entry" variable="VM-Key-Terminator" />
+ </keys>
+ </menu>
+
+ <menu name="std_authenticate_ask_password">
+ <phrases>
+ <phrase name="instructions" value="enter_pass@voicemail_ivr" />
+ </phrases>
+ <keys>
+ <key dtmf="#" action="ivrengine:terminate_entry" variable="VM-Key-Terminator" />
+ </keys>
+ </menu>
+
+ <menu name="std_main_menu">
+ <phrases>
+ <phrase name="msg_count" value="message_count@mtvoicemail" />
+ <phrase name="say_date" value="say_date_event@mtvoicemail" />
+ <phrase name="say_msg_number" value="say_message_number@mtvoicemail" />
+ <phrase name="menu_options" value="menu@mtvoicemail" />
+ </phrases>
+ <keys>
+ <key dtmf="1" action="new_msg:std_navigator" variable="VM-Key-Play-New-Messages" />
+ <key dtmf="2" action="saved_msg:std_navigator" variable="VM-Key-Play-Saved-Messages" />
+ <key dtmf="5" action="menu:std_preference" variable="VM-Key-Config-Menu"/>
+ <key dtmf="#" action="return" variable="VM-Key-Terminator" />
+ </keys>
+ </menu>
+
+ <menu name="std_navigator">
+ <settings>
+ <!--<param name="Nav-Action-On-Delete" value="next_msg" />-->
+ </settings>
+ <phrases>
+ <phrase name="msg_count" value="message_count@voicemail_ivr" />
+ <phrase name="say_date" value="say_date_event@voicemail_ivr" />
+ <phrase name="say_msg_number" value="say_message_number@voicemail_ivr" />
+ <phrase name="menu_options" value="listen_file_check@voicemail_ivr" />
+ <phrase name="ack" value="ack@voicemail_ivr" />
+ <phrase name="play_message" value="play_message@voicemail_ivr" />
+ </phrases>
+ <keys>
+ <key dtmf="1" action="skip_intro" variable="VM-Key-Main-Listen-File" />
+ <key dtmf="6" action="next_msg" variable="VM-Key-Main-Next-Msg" />
+ <key dtmf="4" action="prev_msg" />
+ <key dtmf="7" action="delete_msg" variable="VM-Key-Main-Delete-File" /> <!-- Same key for undelete if it already deleted -->
+ <key dtmf="8" action="menu:std_forward" variable="VM-Key-Main-Forward" />
+ <key dtmf="3" action="save_msg" variable="VM-Key-Main-Save-File" />
+ <key dtmf="2" action="callback" variable="VM-Key-Main-Callback" />
+ <key dtmf="5" action="menu:std_preference" />
+ <key dtmf="#" action="return" /> <!-- TODO Might Conflict with future fast-forward -->
+ </keys>
+ </menu>
+
+ <menu name="std_preference">
+ <phrases>
+ <phrase name="menu_options" value="config_menu@voicemail_ivr" />
+ </phrases>
+ <keys>
+ <key dtmf="1" action="menu:std_record_greeting_with_slot" variable="VM-Key-Record-Greeting" />
+ <key dtmf="2" action="menu:std_select_greeting_slot" variable="VM-Key-Choose-Greeting" />
+ <key dtmf="3" action="menu:std_record_name" variable="VM-Key-Record-Name" />
+ <key dtmf="6" action="menu:std_set_password" variable="VM-Key-Change-Password" />
+ <key dtmf="#" action="return" variable="VM-Key-Main-Menu" />
+ </keys>
+ </menu>
+
+ <menu name="std_record_greeting">
+ <phrases>
+ <phrase name="instructions" value="record_greeting@voicemail_ivr" />
+ <phrase name="play_recording" value="play_recording@voicemail_ivr" />
+ <phrase name="menu_options" value="record_file_check@voicemail_ivr" />
+ </phrases>
+ <keys>
+ <key dtmf="1" action="listen" variable="VM-Key-Listen-File" />
+ <key dtmf="3" action="save" variable="VM-Key-Save-File" />
+ <key dtmf="4" action="rerecord" variable="VM-Key-ReRecord-File" />
+ <key dtmf="#" action="skip_instruction" />
+ </keys>
+ </menu>
+
+
+ <menu name="std_record_name">
+ <phrases>
+ <phrase name="instructions" value="record_name@voicemail_ivr" />
+ <phrase name="play_recording" value="play_recording@voicemail_ivr" />
+ <phrase name="menu_options" value="record_file_check@voicemail_ivr" />
+ </phrases>
+ <keys>
+ <key dtmf="1" action="listen" variable="VM-Key-Listen-File" />
+ <key dtmf="3" action="save" variable="VM-Key-Save-File" />
+ <key dtmf="4" action="rerecord" variable="VM-Key-ReRecord-File" />
+ <key dtmf="#" action="skip_instruction" />
+ </keys>
+ </menu>
+
+ <menu name="std_record_message">
+ <phrases>
+ <phrase name="instructions" value="record_message@voicemail_ivr" />
+ <phrase name="play_recording" value="play_recording@voicemail_ivr" />
+ <phrase name="menu_options" value="record_file_check@voicemail_ivr" />
+ </phrases>
+ <keys>
+ <key dtmf="1" action="listen" variable="VM-Key-Listen-File" />
+ <key dtmf="3" action="save" variable="VM-Key-Save-File" />
+ <key dtmf="4" action="rerecord" variable="VM-Key-ReRecord-File" />
+ <key dtmf="#" action="skip_instruction" />
+ </keys>
+ </menu>
+
+ <menu name="std_forward_ask_prepend">
+ <phrases>
+ <phrase name="menu_options" value="forward_ask_prepend@voicemail_ivr" />
+ </phrases>
+ <keys>
+ <key dtmf="1" action="prepend" variable="VM-Key-Prepend" />
+ <key dtmf="8" action="forward" variable="VM-Key-Forward" />
+ <key dtmf="#" action="return" variable="VM-Key-Return" />
+ </keys>
+ </menu>
+
+ <menu name="std_forward_ask_extension">
+ <phrases>
+ <phrase name="instructions" value="forward_ask_extension@voicemail_ivr" />
+ <phrase name="ack" value="ack@voicemail_ivr" />
+ <phrase name="invalid_extension" value="invalid_extension@voicemail_ivr" />
+ </phrases>
+ <keys>
+ <key dtmf="#" action="ivrengine:terminate_entry" variable="VM-Key-Terminator" />
+ </keys>
+ </menu>
+
+ <menu name="std_select_greeting_slot">
+ <phrases>
+ <phrase name="instructions" value="choose_greeting@voicemail_ivr" />
+ <phrase name="invalid_slot" value="choose_greeting_fail@voicemail_ivr" />
+ <phrase name="selected_slot" value="greeting_selected@voicemail_ivr" />
+ </phrases>
+ <keys>
+ </keys>
+ </menu>
+
+ <menu name="std_record_greeting_with_slot">
+ <phrases>
+ <phrase name="instructions" value="choose_greeting@voicemail_ivr" />
+ </phrases>
+ <keys>
+ </keys>
+ </menu>
+
+ <menu name="std_set_password">
+ <phrases>
+ <phrase name="instructions" value="enter_pass@voicemail_ivr" />
+ </phrases>
+ <keys>
+ <key dtmf="#" action="ivrengine:terminate_entry" variable="VM-Key-Terminator" />
+ </keys>
+ </menu>
+ </menus>
+ </profile>
+</profiles>
+</configuration>
+
+
--- /dev/null
+<configuration name="cepstral.conf" description="Cepstral TTS configuration">\r
+ <settings>\r
+ <!--\r
+ Possible encodings:\r
+ * utf-8\r
+ * us-ascii\r
+ * iso8859-1 (default)\r
+ * iso8859-15\r
+ -->\r
+ <param name="encoding" value="utf-8"/>\r
+ </settings>\r
+</configuration>
\ No newline at end of file
--- /dev/null
+[default]
+
+; Things you're used to....
+exten => music,n,Dial(SIP/1234@conference.freeswitch.org|120)
+
+exten => _1XXXXX,n,set(cool=${EXTEN})
+exten => _1XXXXX,n,set(myvar=true)
+exten => _1XXXXX,n,Goto(default|music)
+exten => 2137991400/1000,n,Goto(default|music)
+
+
+; Some new magic you can do....
+exten => ~^(18(0{2}|8{2}|7{2}|6{2})\d{7})$,n,enum($1)
+exten => ~^(18(0{2}|8{2}|7{2}|6{2})\d{7})$,n,bridge(${enum_auto_route})
+
+; instead of exten, put anything about the call you would rather match on.
+; either the names of a field in caller_profile or a string of variables to expand.
+caller_id_number => 2137991400,n,Goto(default|music)
+${sip_from_user} => bill,n,Goto(default|music)
+
+
--- /dev/null
+<configuration name="alsa.conf" description="Soundcard Endpoint">
+ <settings>
+ <!--Default dialplan and caller-id info -->
+ <param name="dialplan" value="XML"/>
+ <param name="cid-name" value="N800 Alsa"/>
+ <param name="cid-num" value="5555551212"/>
+
+ <!--audio sample rate and interval -->
+ <param name="sample-rate" value="8000"/>
+ <param name="codec-ms" value="20"/>
+ </settings>
+</configuration>
--- /dev/null
+<configuration name="portaudio.conf" description="Soundcard Endpoint">
+ <settings>
+ <!-- indev, outdev, ringdev:
+ partial case sensitive string match on something in the name
+ or the device number prefixed with # eg "#1" (or blank for default) -->
+
+ <!-- device to use for input -->
+ <param name="indev" value=""/>
+ <!-- device to use for output -->
+ <param name="outdev" value=""/>
+
+ <!--device to use for inbound ring -->
+ <!--<param name="ringdev" value=""/>-->
+ <!--File to play as the ring sound -->
+ <!--<param name="ring-file" value="/sounds/ring.wav"/>-->
+ <!--Number of seconds to pause between rings -->
+ <!--<param name="ring-interval" value="5"/>-->
+ <!--Enable or Disable dual_streams-->
+ <!--<param name="dual-streams" value="true"/>-->
+
+ <!--file to play when calls are on hold-->
+ <param name="hold-file" value="$${hold_music}"/>
+ <!--Timer to use for hold music (i'd leave this one commented)-->
+ <!--<param name="timer-name" value="soft"/>-->
+
+ <!--Default dialplan and caller-id info -->
+ <param name="dialplan" value="XML"/>
+ <param name="cid-name" value="$${outbound_caller_name}"/>
+ <param name="cid-num" value="$${outbound_caller_id}"/>
+
+ <!--audio sample rate and interval -->
+ <param name="sample-rate" value="48000"/>
+ <param name="codec-ms" value="20"/>
+ </settings>
+
+ <!--
+ mod_portaudio "streams"
+
+ The portaudio streams were introduced to support multiple devices and multiple channels in mod_portaudio.
+ For example, if you have a sound card that supports multiple channels or have multiple sound cards and you
+ want to use them at the same time, you can do it configuring streams and endpoints here.
+
+ A "stream" is just a logical container for some settings required by portaudio in order to stream audio and
+ define a friendly name for that configuration. Streams in itself do not do anything else than contain configs.
+ Once you have your streams defined you can proceed to define "endpoints". Go to the "<endpoints>" section
+ for more information on endpoints.
+
+ You can use the command "pa shstreams" (portaudio shared streams) to show the configured streams.
+ -->
+ <streams>
+ <!--
+ In this example we define 2 streams, one for a usb audio device and another for the usual Mac defaults
+ The name="" attribute in the <stream> tag must uniquely identify the stream configuration and can be
+ later used when creating endpoints in the "instream" and "outstream" parameters of the endpoint.
+ -->
+
+ <!-- This sample "usb1" configuration was tested with a USB Griffin iMic device -->
+ <stream name="usb1">
+ <!--
+ Which device to use for input in this stream
+ The value for this parameter must be either in the form '#devno',
+ for example '#2' for device number 2, or 'device-name', like 'iMic USB audio system'
+ The output of command "pa devlist" will show you device names and numbers as enumerated
+ by portaudio.
+ -->
+ <param name="indev" value="#2" />
+
+ <!--
+ Same as the indev but for output. In this case the device is capable of input and output
+ Some devices are capable of input only or output only (see the default example)
+ -->
+ <param name="outdev" value="#2" />
+
+ <!-- The sample rate to use for this stream -->
+ <param name="sample-rate" value="48000" />
+
+ <!--
+ Size of the packets in milliseconds. The smaller the number the less latency you'll have
+ The minimum value is 10ms
+ -->
+ <param name="codec-ms" value="10" />
+
+ <!--
+ How many channels to open for this stream.
+ If you're device is stereo, you can choose 2 here. However, bear in mind that then
+ your left and right channels will be separated and when creating endpoints you will have
+ to either choose the left or right channel. This may or may not be what you want. This separation
+ means that you can have 2 separate FreeSWITCH calls, listening to one of them in your left channel
+ and the other in the right chanel.
+ -->
+ <param name="channels" value="2" />
+ </stream>
+
+ <!-- This default stream was tested using the default Macbook Pro input/output devices -->
+ <stream name="default">
+ <!-- The default system input device -->
+ <param name="indev" value="#0" />
+ <!-- The default system output device -->
+ <param name="outdev" value="#1" />
+ <!-- CD quality sampling rate ftw -->
+ <param name="sample-rate" value="48000" />
+ <!-- Low latency -->
+ <param name="codec-ms" value="10" />
+ <!-- Choosing 1 channel allows to hear in both left-right channel when using a headset -->
+ <param name="channels" value="1" />
+ </stream>
+ </streams>
+
+ <!--
+ mod_portaudio "endpoints"
+
+ Endpoints is a way to define the input and output that a given portaudio channel will use.
+ There is a lot of flexibility. You can create endpoints which are "send-only", which means
+ audio will be read from FreeSWITCH and sent down to the provided stream, but no audio will
+ be read from that stream and only silence provided back to FreeSWITCH.
+
+ send-only endpoint:
+ (FS CORE) ->-> audio ->-> sound-card-x
+
+ You can also create a read-only endpoint.
+
+ read-only-endpoint:
+ (FS CORE) <-<- audio <-<- sound-card-x
+
+ And of course you can create a bidirectional endpoint:
+ bidirectional-endpoint:
+ (FS CORE) <-> audio <-> sound-card-x
+
+ You can also define a stream which uses only the left or only the right channel of a given device stream.
+ This means you can have 2 SIP calls connected to the same device haring one call in your left ear and
+ the other call to your right ear :-)
+
+ The name="parameter" of the endpoint allows you to use it in the FreeSWITCH dial plan to dial, ie:
+
+ <action application="bridge" data="portaudio/endpoint/usb1out-left" />
+
+ You can use the command "pa endpoints" to show the configured endpoints.
+ -->
+ <endpoints>
+
+ <!--
+ An endpoint is a handle name to refer to a configuration that determines where to read media from
+ and write media to. The endpoint can use any input/output stream combination for that purpose as
+ long as the streams match the sampling rate and codec-ms (see <streams> XML tag).
+ You can also omit the instream or the outstream parameter (but obviously not both).
+ -->
+
+ <!--
+ Configuration for a "default" bidirectional endpoint that uses the default stream defined previously in
+ the <streams> section.
+ -->
+ <endpoint name="default">
+ <!--
+ The instream, outstream is the name of the stream and channel to use. The stream
+ name is the same you configured in the <streams> section. This parameters follow
+ the syntax <stream-name>:<channel index>. You can omit either the outstream
+ or the instream, but not both! The channel index is zero-based and must be consistent
+ with the number of channels available for that stream (as configured in the <stream> section).
+ You cannot use index 1 if you chose channels=1 in the stream configuration.
+ -->
+ <param name="instream" value="default:0" />
+ <param name="outstream" value="default:0" />
+ </endpoint>
+
+ <!--
+ This endpoint uses the USB stream defined previously in the <streams> section and
+ is 'send-only' or 'output-only' and uses the channel index 0 (left channel in a stereo device)
+ -->
+ <endpoint name="usb1out-left">
+ <param name="outstream" value="usb1:0" />
+ </endpoint>
+
+ <!--
+ This endpoint uses the USB stream defined previously in the <streams> section and
+ is 'send-only' or 'output-only' and uses the channel index 1 (right channel in a stereo device)
+ -->
+ <endpoint name="usb1out-right">
+ <param name="outstream" value="usb1:1" />
+ </endpoint>
+
+ <!--
+ This endpoint uses the USB stream defined previously in the <streams> section and
+ is 'receive-only' or 'input-only' and uses the channel index 0 (left channel in a stereo device)
+ -->
+ <endpoint name="usb1in-left">
+ <param name="instream" value="usb1:0" />
+ </endpoint>
+
+ <!--
+ This endpoint uses the USB stream defined previously in the <streams> section and
+ is 'receive-only' or 'input-only' and uses the channel index 1 (right channel in a stereo device)
+ -->
+ <endpoint name="usb1in-right">
+ <param name="instream" value="usb1:1" />
+ </endpoint>
+
+ <!--
+ This endpoint uses the USB stream defined previously in the <streams> section and
+ is 'bidirectional' or 'send-receive' and uses the channel index 0 (left channel in a stereo device)
+ -->
+ <endpoint name="usb1-left">
+ <param name="instream" value="usb1:0" />
+ <param name="outstream" value="usb1:0" />
+ </endpoint>
+
+ <!--
+ This endpoint uses the USB stream defined previously in the <streams> section and
+ is 'bidirectional' or 'send-receive' and uses the channel index 1 (right channel in a stereo device)
+ -->
+ <endpoint name="usb1-right">
+ <param name="instream" value="usb1:1" />
+ <param name="outstream" value="usb1:1" />
+ </endpoint>
+
+ </endpoints>
+
+</configuration>
+
--- /dev/null
+<configuration name="rtmp.conf" description="RTMP Endpoint">
+ <profiles>
+ <profile name="default">
+ <settings>
+ <param name="bind-address" value="0.0.0.0:1935" />
+ <param name="context" value="public" />
+ <param name="dialplan" value="XML" />
+ <!-- If this is set to true, no unauthenticated inbound calls will be allowed -->
+ <param name="auth-calls" value="true" />
+ <!-- How much time should the clients buffer the media stream (miliseconds) -->
+ <param name="buffer-len" value="50" />
+ <!-- Sets the maximum size of outbound RTMP chunks -->
+ <param name="chunksize" value="512" />
+ </settings>
+ </profile>
+ </profiles>
+</configuration>
--- /dev/null
+<configuration name="skinny.conf" description="Skinny Endpoints">
+ <profiles>
+ <X-PRE-PROCESS cmd="include" data="../skinny_profiles/*.xml"/>
+ </profiles>
+</configuration>
+
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ NOTICE:
+
+ This context is used for skinny to match dialed number
+
+ The special applications:
+ - skinny-process tells skinny to process the call (route, set call forwarding, ...)
+ - skinny-drop tells skinny to drop the call
+ - skinny-wait tells skinny to wait 'data' seconds for more numbers before drop
+-->
+<!-- http://wiki.freeswitch.org/wiki/Mod_skinny -->
+<include>
+ <context name="skinny-patterns">
+ <!--
+ Wait 10 seconds for another digit by default
+ -->
+ <extension name="Default">
+ <condition>
+ <action application="skinny-wait" data="10"/>
+ </condition>
+ </extension>
+
+ <!--
+ You can place files in the skinny-patterns directory to get included.
+ -->
+ <X-PRE-PROCESS cmd="include" data="skinny-patterns/*.xml"/>
+
+ </context>
+</include>
--- /dev/null
+<include>
+ <extension name="Demo">
+ <condition field="destination_number" expression="^(9[0-9]{3})$">
+ <action application="skinny-process"/>
+ </condition>
+ </extension>
+</include>
+
--- /dev/null
+<include>
+ <extension name="Local_Extension">
+ <condition field="destination_number" expression="^(10[01][0-9])$">
+ <action application="skinny-process"/>
+ </condition>
+ </extension>
+ <extension name="Local_Extension_Skinny">
+ <condition field="destination_number" expression="^(11[01][0-9])$">
+ <action application="skinny-process"/>
+ </condition>
+ </extension>
+</include>
+
--- /dev/null
+<include>
+ <extension name="External">
+ <condition field="destination_number" expression="^(0[0-9]{10,})$">
+ <action application="skinny-process"/>
+ </condition>
+ </extension>
+</include>
+
--- /dev/null
+<include>
+ <!-- drop long dialed number -->
+ <extension name="Default_Drop">
+ <condition field="destination_number" expression="^(.{14,})$">
+ <action application="skinny-drop"/>
+ </condition>
+ </extension>
+</include>
+
--- /dev/null
+<include>
+ <user id="SEP001120AABBCC">
+ <params>
+ <!-- for devices requesting firmware via SCCP, like ATA186
+ <param name="skinny-firmware-version" value="ATA030101SCCP04"
+ <param name="skinny-soft-key-set-set" value="default"
+ -->
+ <param name="foo" value="bar"/>
+ </params>
+ <skinny>
+ <buttons>
+ <!--
+ position: 1..
+ type: one of line, speed-dial
+ label: button label
+ -->
+ <!--
+ value is the directory number (or user)
+ caller-name is shown to the calling party during call
+ -->
+ <button position="1" type="Line" label="Line 1" value="1101" caller-name="Calling as 1101"/>
+ <button position="3" type="Line" label="Shared Line 10" value="1110" caller-name="Calling as 1110"/>
+ <!--
+ value is the directory number to call
+ -->
+ <button position="5" type="SpeedDial" label="Call 1001" value="1001"/>
+ <!--
+ value is the URL
+ -->
+ <button position="6" type="ServiceUrl" label="Some URL" value="http://phone-xml.berbee.com/menu.xml"/>
+ </buttons>
+ </skinny>
+ </user>
+</include>
+
--- /dev/null
+<profile name="internal">
+ <settings>
+ <param name="domain" value="$${domain}"/>
+ <param name="ip" value="$${local_ip_v4}"/>
+ <param name="port" value="2000"/>
+ <param name="patterns-dialplan" value="XML"/>
+ <param name="patterns-context" value="skinny-patterns"/>
+ <param name="dialplan" value="XML"/>
+ <param name="context" value="default"/>
+ <param name="keep-alive" value="60"/>
+ <param name="date-format" value="D/M/Y"/>
+ <param name="odbc-dsn" value=""/>
+ <param name="debug" value="4"/>
+ <param name="auto-restart" value="true"/>
+ </settings>
+ <soft-key-set-sets>
+ <soft-key-set-set name="default">
+ <soft-key-set name="KeySetOnHook" value="SoftkeyNewcall,SoftkeyRedial"/>
+ <soft-key-set name="KeySetConnected" value="SoftkeyEndcall,SoftkeyHold,SoftkeyNewcall,SoftkeyTransfer"/>
+ <soft-key-set name="KeySetOnHold" value="SoftkeyNewcall,SoftkeyResume,SoftkeyEndcall"/>
+ <soft-key-set name="KeySetRingIn" value="SoftkeyAnswer,SoftkeyEndcall,SoftkeyNewcall"/>
+ <soft-key-set name="KeySetOffHook" value=",SoftkeyRedial,SoftkeyEndcall"/>
+ <soft-key-set name="KeySetConnectedWithTransfer" value="SoftkeyEndcall,SoftkeyHold,SoftkeyNewcall,SoftkeyTransfer"/>
+ <soft-key-set name="KeySetDigitsAfterDialingFirstDigit" value="SoftkeyBackspace,,SoftkeyEndcall"/>
+ <!-- <soft-key-set name="KeySetConnectedWithConference" value=""/> -->
+ <soft-key-set name="KeySetRingOut" value=",,SoftkeyEndcall,SoftkeyTransfer"/>
+ <soft-key-set name="KeySetOffHookWithFeatures" value=",SoftkeyRedial,SoftkeyEndcall"/>
+ <soft-key-set name="KeySetInUseHint" value="SoftkeyNewcall,SoftkeyRedial"/>
+ </soft-key-set-set>
+ </soft-key-set-sets>
+ <device-types>
+ <device-type id="Cisco ATA 186">
+ <param name="firmware-version" value="ATA030101SCCP04"/>
+ </device-type>
+ </device-types>
+</profile>
+
--- /dev/null
+<profile name="external">
+ <!-- http://wiki.freeswitch.org/wiki/Sofia_Configuration_Files -->
+ <!-- This profile is only for outbound registrations to providers -->
+ <gateways>
+ <X-PRE-PROCESS cmd="include" data="external/*.xml"/>
+ </gateways>
+
+ <aliases>
+ <!--
+ <alias name="outbound"/>
+ <alias name="nat"/>
+ -->
+ </aliases>
+
+ <domains>
+ <domain name="all" alias="false" parse="true"/>
+ </domains>
+
+ <settings>
+ <param name="debug" value="0"/>
+ <!-- If you want FreeSWITCH to shutdown if this profile fails to load, uncomment the next line. -->
+ <!-- <param name="shutdown-on-fail" value="true"/> -->
+ <param name="sip-trace" value="no"/>
+ <param name="sip-capture" value="no"/>
+ <param name="rfc2833-pt" value="101"/>
+ <!-- RFC 5626 : Send reg-id and sip.instance -->
+ <!--<param name="enable-rfc-5626" value="true"/> -->
+ <param name="sip-port" value="$${external_sip_port}"/>
+ <param name="dialplan" value="XML"/>
+ <param name="context" value="public"/>
+ <param name="dtmf-duration" value="2000"/>
+ <param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
+ <param name="outbound-codec-prefs" value="$${outbound_codec_prefs}"/>
+ <param name="hold-music" value="$${hold_music}"/>
+ <param name="rtp-timer-name" value="soft"/>
+ <!--<param name="enable-100rel" value="true"/>-->
+ <!--<param name="disable-srv503" value="true"/>-->
+ <!-- This could be set to "passive" -->
+ <param name="local-network-acl" value="localnet.auto"/>
+ <param name="manage-presence" value="false"/>
+
+ <!-- used to share presence info across sofia profiles
+ manage-presence needs to be set to passive on this profile
+ if you want it to behave as if it were the internal profile
+ for presence.
+ -->
+ <!-- Name of the db to use for this profile -->
+ <!--<param name="dbname" value="share_presence"/>-->
+ <!--<param name="presence-hosts" value="$${domain}"/>-->
+ <!--<param name="force-register-domain" value="$${domain}"/>-->
+ <!--all inbound reg will stored in the db using this domain -->
+ <!--<param name="force-register-db-domain" value="$${domain}"/>-->
+ <!-- ************************************************* -->
+
+ <!--<param name="aggressive-nat-detection" value="true"/>-->
+ <param name="inbound-codec-negotiation" value="generous"/>
+ <param name="nonce-ttl" value="60"/>
+ <param name="auth-calls" value="false"/>
+ <!--
+ DO NOT USE HOSTNAMES, ONLY IP ADDRESSES IN THESE SETTINGS!
+ -->
+ <param name="rtp-ip" value="$${local_ip_v4}"/>
+ <param name="sip-ip" value="$${local_ip_v4}"/>
+ <param name="ext-rtp-ip" value="auto-nat"/>
+ <param name="ext-sip-ip" value="auto-nat"/>
+ <param name="rtp-timeout-sec" value="300"/>
+ <param name="rtp-hold-timeout-sec" value="1800"/>
+ <!--<param name="enable-3pcc" value="true"/>-->
+
+ <!-- TLS: disabled by default, set to "true" to enable -->
+ <param name="tls" value="$${external_ssl_enable}"/>
+ <!-- Set to true to not bind on the normal sip-port but only on the TLS port -->
+ <param name="tls-only" value="false"/>
+ <!-- additional bind parameters for TLS -->
+ <param name="tls-bind-params" value="transport=tls"/>
+ <!-- Port to listen on for TLS requests. (5081 will be used if unspecified) -->
+ <param name="tls-sip-port" value="$${external_tls_port}"/>
+ <!-- Location of the agent.pem and cafile.pem ssl certificates (needed for TLS server) -->
+ <param name="tls-cert-dir" value="$${external_ssl_dir}"/>
+ <!-- Optionally set the passphrase password used by openSSL to encrypt/decrypt TLS private key files -->
+ <param name="tls-passphrase" value=""/>
+ <!-- Verify the date on TLS certificates -->
+ <param name="tls-verify-date" value="true"/>
+ <!-- TLS verify policy, when registering/inviting gateways with other servers (outbound) or handling inbound registration/invite requests how should we verify their certificate -->
+ <!-- set to 'in' to only verify incoming connections, 'out' to only verify outgoing connections, 'all' to verify all connections, also 'in_subjects', 'out_subjects' and 'all_subjects' for subject validation. Multiple policies can be split with a '|' pipe -->
+ <param name="tls-verify-policy" value="none"/>
+ <!-- Certificate max verify depth to use for validating peer TLS certificates when the verify policy is not none -->
+ <param name="tls-verify-depth" value="2"/>
+ <!-- If the tls-verify-policy is set to subjects_all or subjects_in this sets which subjects are allowed, multiple subjects can be split with a '|' pipe -->
+ <param name="tls-verify-in-subjects" value=""/>
+ <!-- TLS version ("sslv23" (default), "tlsv1"). NOTE: Phones may not work with TLSv1 -->
+ <param name="tls-version" value="$${sip_tls_version}"/>
+
+ </settings>
+</profile>
--- /dev/null
+<include>
+ <!--<gateway name="asterlink.com">-->
+ <!--/// account username *required* ///-->
+ <!--<param name="username" value="cluecon"/>-->
+ <!--/// auth realm: *optional* same as gateway name, if blank ///-->
+ <!--<param name="realm" value="asterlink.com"/>-->
+ <!--/// username to use in from: *optional* same as username, if blank ///-->
+ <!--<param name="from-user" value="cluecon"/>-->
+ <!--/// domain to use in from: *optional* same as realm, if blank ///-->
+ <!--<param name="from-domain" value="asterlink.com"/>-->
+ <!--/// account password *required* ///-->
+ <!--<param name="password" value="2007"/>-->
+ <!--/// extension for inbound calls: *optional* same as username, if blank ///-->
+ <!--<param name="extension" value="cluecon"/>-->
+ <!--/// proxy host: *optional* same as realm, if blank ///-->
+ <!--<param name="proxy" value="asterlink.com"/>-->
+ <!--/// send register to this proxy: *optional* same as proxy, if blank ///-->
+ <!--<param name="register-proxy" value="mysbc.com"/>-->
+ <!--/// expire in seconds: *optional* 3600, if blank ///-->
+ <!--<param name="expire-seconds" value="60"/>-->
+ <!--/// do not register ///-->
+ <!--<param name="register" value="false"/>-->
+ <!-- which transport to use for register -->
+ <!--<param name="register-transport" value="udp"/>-->
+ <!--How many seconds before a retry when a failure or timeout occurs -->
+ <!--<param name="retry-seconds" value="30"/>-->
+ <!--Use the callerid of an inbound call in the from field on outbound calls via this gateway -->
+ <!--<param name="caller-id-in-from" value="false"/>-->
+ <!--extra sip params to send in the contact-->
+ <!--<param name="contact-params" value="tport=tcp"/>-->
+ <!--send an options ping every x seconds, failure will unregister and/or mark it down-->
+ <!--<param name="ping" value="25"/>-->
+ <!--</gateway>-->
+ <!--rfc5626 : Abilitazione rfc5626 ///-->
+ <!--<param name="rfc-5626" value="true"/>-->
+ <!--rfc5626 : extra sip params to send in the contact-->
+ <!--<param name="reg-id" value="1"/>-->
+</include>
--- /dev/null
+<profile name="internal-ipv6">
+ <!--
+ This is an example of a sofia profile setup to listen on IPv6.
+ -->
+ <!-- http://wiki.freeswitch.org/wiki/Sofia_Configuration_Files -->
+ <!--aliases are other names that will work as a valid profile name for this profile-->
+ <settings>
+ <!-- <param name="user-agent-string" value="FreeSWITCH Rocks!"/> -->
+ <param name="debug" value="0"/>
+ <param name="sip-trace" value="no"/>
+ <param name="context" value="public"/>
+ <param name="rfc2833-pt" value="101"/>
+ <!-- port to bind to for sip traffic -->
+ <param name="sip-port" value="$${internal_sip_port}"/>
+ <param name="dialplan" value="XML"/>
+ <param name="dtmf-duration" value="2000"/>
+ <param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
+ <param name="outbound-codec-prefs" value="$${global_codec_prefs}"/>
+ <param name="use-rtp-timer" value="true"/>
+ <param name="rtp-timer-name" value="soft"/>
+ <!-- ip address to use for rtp -->
+ <param name="rtp-ip" value="$${local_ip_v6}"/>
+ <!-- ip address to bind to -->
+ <param name="sip-ip" value="$${local_ip_v6}"/>
+ <param name="hold-music" value="$${hold_music}"/>
+ <!--<param name="enable-100rel" value="false"/>-->
+ <!--<param name="disable-srv503" value="true"/>-->
+ <param name="apply-inbound-acl" value="domains"/>
+ <!--<param name="apply-register-acl" value="domains"/>-->
+ <!--<param name="dtmf-type" value="info"/>-->
+ <param name="record-template" value="$${recordings_dir}/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
+ <!--enable to use presence and mwi -->
+ <param name="manage-presence" value="true"/>
+ <!-- This setting is for AAL2 bitpacking on G726 -->
+ <!-- <param name="bitpacking" value="aal2"/> -->
+ <!--max number of open dialogs in proceeding -->
+ <!--<param name="max-proceeding" value="1000"/>-->
+ <!--session timers for all call to expire after the specified seconds -->
+ <!--<param name="session-timeout" value="1800"/>-->
+ <!--<param name="multiple-registrations" value="true"/>-->
+ <!--set to 'greedy' if you want your codec list to take precedence -->
+ <param name="inbound-codec-negotiation" value="generous"/>
+ <!-- if you want to send any special bind params of your own -->
+ <!--<param name="bind-params" value="transport=udp"/>-->
+ <!--<param name="unregister-on-options-fail" value="true"/>-->
+
+ <!-- TLS: disabled by default, set to "true" to enable -->
+ <param name="tls" value="$${internal_ssl_enable}"/>
+ <!-- additional bind parameters for TLS -->
+ <param name="tls-bind-params" value="transport=tls"/>
+ <!-- Port to listen on for TLS requests. (5061 will be used if unspecified) -->
+ <param name="tls-sip-port" value="$${internal_tls_port}"/>
+ <!-- Location of the agent.pem and cafile.pem ssl certificates (needed for TLS server) -->
+ <param name="tls-cert-dir" value="$${internal_ssl_dir}"/>
+ <!-- TLS version ("sslv23" (default), "tlsv1"). NOTE: Phones may not work with TLSv1 -->
+ <param name="tls-version" value="$${sip_tls_version}"/>
+
+ <!--If you don't want to pass through timestampes from 1 RTP call to another (on a per call basis with rtp_rewrite_timestamps chanvar)-->
+ <!--<param name="rtp-rewrite-timestamps" value="true"/>-->
+ <!--<param name="pass-rfc2833" value="true"/>-->
+ <!--If you have ODBC support and a working dsn you can use it instead of SQLite-->
+ <!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
+
+ <!--Uncomment to set all inbound calls to no media mode-->
+ <!--<param name="inbound-bypass-media" value="true"/>-->
+
+ <!--Uncomment to set all inbound calls to proxy media mode-->
+ <!--<param name="inbound-proxy-media" value="true"/>-->
+
+ <!--Uncomment to let calls hit the dialplan *before* you decide if the codec is ok-->
+ <!--<param name="inbound-late-negotiation" value="true"/>-->
+
+ <!-- this lets anything register -->
+ <!-- comment the next line and uncomment one or both of the other 2 lines for call authentication -->
+ <!-- <param name="accept-blind-reg" value="true"/> -->
+
+ <!-- accept any authentication without actually checking (not a good feature for most people) -->
+ <!-- <param name="accept-blind-auth" value="true"/> -->
+
+ <!-- suppress CNG on this profile or per call with the 'suppress_cng' variable -->
+ <!-- <param name="suppress-cng" value="true"/> -->
+
+ <!--TTL for nonce in sip auth-->
+ <param name="nonce-ttl" value="60"/>
+ <!--Uncomment if you want to force the outbound leg of a bridge to only offer the codec
+ that the originator is using-->
+ <!--<param name="disable-transcoding" value="true"/>-->
+ <!-- Used for when phones respond to a challenged ACK with method INVITE in the hash -->
+ <!--<param name="NDLB-broken-auth-hash" value="true"/>-->
+ <!-- add a ;received="<ip>:<port>" to the contact when replying to register for nat handling -->
+ <!--<param name="NDLB-received-in-nat-reg-contact" value="true"/>-->
+ <param name="auth-calls" value="$${internal_auth_calls}"/>
+ <!-- on authed calls, authenticate *all* the packets not just invite -->
+ <param name="auth-all-packets" value="false"/>
+ <!-- <param name="ext-rtp-ip" value="$${external_rtp_ip}"/> -->
+ <!-- <param name="ext-sip-ip" value="$${external_sip_ip}"/> -->
+ <!-- rtp inactivity timeout -->
+ <param name="rtp-timeout-sec" value="300"/>
+ <param name="rtp-hold-timeout-sec" value="1800"/>
+ <!-- VAD choose one (out is a good choice); -->
+ <!-- <param name="vad" value="in"/> -->
+ <!-- <param name="vad" value="out"/> -->
+ <!-- <param name="vad" value="both"/> -->
+ <!--<param name="alias" value="sip:10.0.1.251:5555"/>-->
+ <!--
+ These are enabled to make the default config work better out of the box.
+ If you need more than ONE domain you'll need to not use these options.
+
+ -->
+ <!--all inbound reg will look in this domain for the users -->
+ <param name="force-register-domain" value="$${domain}"/>
+ <!--all inbound reg will stored in the db using this domain -->
+ <param name="force-register-db-domain" value="$${domain}"/>
+ <!-- disable register and transfer which may be undesirable in a public switch -->
+ <!--<param name="disable-transfer" value="true"/>-->
+ <!--<param name="disable-register" value="true"/>-->
+ <!--<param name="enable-3pcc" value="true"/>-->
+ <!-- use stun when specified (default is true) -->
+ <!--<param name="stun-enabled" value="true"/>-->
+ <!-- use stun when specified (default is true) -->
+ <!-- set to true to have the profile determine stun is not useful and turn it off globally-->
+ <!--<param name="stun-auto-disable" value="true"/>-->
+
+ <!-- the following can be used as workaround with bogus SRV/NAPTR records -->
+ <!--<param name="disable-srv" value="false" />-->
+ <!--<param name="disable-naptr" value="false" />-->
+
+ </settings>
+</profile>
+
--- /dev/null
+<profile name="internal">
+ <!--
+ This is a sofia sip profile/user agent. This will service exactly one ip and port.
+ In FreeSWITCH you can run multiple sip user agents on their own ip and port.
+
+ When you hear someone say "sofia profile" this is what they are talking about.
+ -->
+
+ <!-- http://wiki.freeswitch.org/wiki/Sofia_Configuration_Files -->
+ <!--aliases are other names that will work as a valid profile name for this profile-->
+ <aliases>
+ <!--
+ <alias name="default"/>
+ -->
+ </aliases>
+ <!-- Outbound Registrations -->
+ <gateways>
+ <X-PRE-PROCESS cmd="include" data="internal/*.xml"/>
+ </gateways>
+
+ <domains>
+ <!-- indicator to parse the directory for domains with parse="true" to get gateways-->
+ <!--<domain name="$${domain}" parse="true"/>-->
+ <!-- indicator to parse the directory for domains with parse="true" to get gateways and alias every domain to this profile -->
+ <!--<domain name="all" alias="true" parse="true"/>-->
+ <domain name="all" alias="true" parse="false"/>
+ </domains>
+
+ <settings>
+ <!--
+ When calls are in no media this will bring them back to media
+ when you press the hold button.
+ -->
+ <!--<param name="media-option" value="resume-media-on-hold"/> -->
+ <!--
+ This will allow a call after an attended transfer go back to
+ bypass media after an attended transfer.
+ -->
+ <!--<param name="media-option" value="bypass-media-after-att-xfer"/>-->
+ <!-- <param name="user-agent-string" value="FreeSWITCH Rocks!"/> -->
+ <param name="debug" value="0"/>
+ <!-- If you want FreeSWITCH to shutdown if this profile fails to load, uncomment the next line. -->
+ <!-- <param name="shutdown-on-fail" value="true"/> -->
+ <param name="sip-trace" value="no"/>
+ <param name="sip-capture" value="no"/>
+
+ <!-- Use presence_map.conf.xml to convert extension regex to presence protos for routing -->
+ <!-- <param name="presence-proto-lookup" value="true"/> -->
+
+
+ <!-- Don't be picky about negotiated DTMF just always offer 2833 and accept both 2833 and INFO -->
+ <!--<param name="liberal-dtmf" value="true"/>-->
+
+
+ <!--
+ Sometimes, in extremely rare edge cases, the Sofia SIP stack may stop
+ responding. These options allow you to enable and control a watchdog
+ on the Sofia SIP stack so that if it stops responding for the
+ specified number of milliseconds, it will cause FreeSWITCH to crash
+ immediately. This is useful if you run in an HA environment and
+ need to ensure automated recovery from such a condition. Note that if
+ your server is idle a lot, the watchdog may fire due to not receiving
+ any SIP messages. Thus, if you expect your system to be idle, you
+ should leave the watchdog disabled. It can be toggled on and off
+ through the FreeSWITCH CLI either on an individual profile basis or
+ globally for all profiles. So, if you run in an HA environment with a
+ master and slave, you should use the CLI to make sure the watchdog is
+ only enabled on the master.
+ If such crash occurs, FreeSWITCH will dump core if allowed. The
+ stacktrace will include function watchdog_triggered_abort().
+ -->
+ <param name="watchdog-enabled" value="no"/>
+ <param name="watchdog-step-timeout" value="30000"/>
+ <param name="watchdog-event-timeout" value="30000"/>
+
+ <param name="log-auth-failures" value="false"/>
+ <param name="forward-unsolicited-mwi-notify" value="false"/>
+
+ <param name="context" value="public"/>
+ <param name="rfc2833-pt" value="101"/>
+ <!-- port to bind to for sip traffic -->
+ <param name="sip-port" value="$${internal_sip_port}"/>
+ <param name="dialplan" value="XML"/>
+ <param name="dtmf-duration" value="2000"/>
+ <param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
+ <param name="outbound-codec-prefs" value="$${global_codec_prefs}"/>
+ <param name="rtp-timer-name" value="soft"/>
+ <!-- ip address to use for rtp, DO NOT USE HOSTNAMES ONLY IP ADDRESSES -->
+ <param name="rtp-ip" value="$${local_ip_v4}"/>
+ <!-- ip address to bind to, DO NOT USE HOSTNAMES ONLY IP ADDRESSES -->
+ <param name="sip-ip" value="$${local_ip_v4}"/>
+ <param name="hold-music" value="$${hold_music}"/>
+ <param name="apply-nat-acl" value="nat.auto"/>
+
+
+ <!-- (default true) set to false if you do not wish to have called party info in 1XX responses -->
+ <!-- <param name="cid-in-1xx" value="false"/> -->
+
+ <!-- extended info parsing -->
+ <!-- <param name="extended-info-parsing" value="true"/> -->
+
+ <!--<param name="aggressive-nat-detection" value="true"/>-->
+ <!--
+ There are known issues (asserts and segfaults) when 100rel is enabled.
+ It is not recommended to enable 100rel at this time.
+ -->
+ <!--<param name="enable-100rel" value="true"/>-->
+
+ <!-- uncomment if you don't wish to try a next SRV destination on 503 response -->
+ <!-- RFC3263 Section 4.3 -->
+ <!--<param name="disable-srv503" value="true"/>-->
+
+ <!-- Enable Compact SIP headers. -->
+ <!--<param name="enable-compact-headers" value="true"/>-->
+ <!--
+ enable/disable session timers
+ -->
+ <!--<param name="enable-timer" value="false"/>-->
+ <!--<param name="minimum-session-expires" value="120"/>-->
+ <param name="apply-inbound-acl" value="domains"/>
+ <!--
+ This defines your local network, by default we detect your local network
+ and create this localnet.auto ACL for this.
+ -->
+ <param name="local-network-acl" value="localnet.auto"/>
+ <!--<param name="apply-register-acl" value="domains"/>-->
+ <!--<param name="dtmf-type" value="info"/>-->
+
+
+ <!-- 'true' means every time 'first-only' means on the first register -->
+ <!--<param name="send-message-query-on-register" value="true"/>-->
+
+ <!-- 'true' means every time 'first-only' means on the first register -->
+ <!--<param name="send-presence-on-register" value="first-only"/> -->
+
+
+ <!-- Caller-ID type (choose one, can be overridden by inbound call type and/or sip_cid_type channel variable -->
+ <!-- Remote-Party-ID header -->
+ <!--<param name="caller-id-type" value="rpid"/>-->
+
+ <!-- P-*-Identity family of headers -->
+ <!--<param name="caller-id-type" value="pid"/>-->
+
+ <!-- neither one -->
+ <!--<param name="caller-id-type" value="none"/>-->
+
+
+
+ <param name="record-path" value="$${recordings_dir}"/>
+ <param name="record-template" value="${caller_id_number}.${target_domain}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
+ <!--enable to use presence -->
+ <param name="manage-presence" value="true"/>
+ <!-- send a presence probe on each register to query devices to send presence instead of sending presence with less info -->
+ <!--<param name="presence-probe-on-register" value="true"/>-->
+ <!--<param name="manage-shared-appearance" value="true"/>-->
+ <!-- used to share presence info across sofia profiles -->
+ <!-- Name of the db to use for this profile -->
+ <!--<param name="dbname" value="share_presence"/>-->
+ <param name="presence-hosts" value="$${domain},$${local_ip_v4}"/>
+ <param name="presence-privacy" value="$${presence_privacy}"/>
+ <!-- ************************************************* -->
+
+ <!-- This setting is for AAL2 bitpacking on G726 -->
+ <!-- <param name="bitpacking" value="aal2"/> -->
+ <!--max number of open dialogs in proceeding -->
+ <!--<param name="max-proceeding" value="1000"/>-->
+ <!--session timers for all call to expire after the specified seconds -->
+ <!--<param name="session-timeout" value="1800"/>-->
+ <!-- Can be 'true' or 'contact' -->
+ <!--<param name="multiple-registrations" value="contact"/>-->
+ <!--set to 'greedy' if you want your codec list to take precedence -->
+ <param name="inbound-codec-negotiation" value="generous"/>
+ <!-- if you want to send any special bind params of your own -->
+ <!--<param name="bind-params" value="transport=udp"/>-->
+ <!--<param name="unregister-on-options-fail" value="true"/>-->
+
+ <!-- TLS: disabled by default, set to "true" to enable -->
+ <param name="tls" value="$${internal_ssl_enable}"/>
+ <!-- Set to true to not bind on the normal sip-port but only on the TLS port -->
+ <param name="tls-only" value="false"/>
+ <!-- additional bind parameters for TLS -->
+ <param name="tls-bind-params" value="transport=tls"/>
+ <!-- Port to listen on for TLS requests. (5061 will be used if unspecified) -->
+ <param name="tls-sip-port" value="$${internal_tls_port}"/>
+ <!-- Location of the agent.pem and cafile.pem ssl certificates (needed for TLS server) -->
+ <param name="tls-cert-dir" value="$${internal_ssl_dir}"/>
+ <!-- Optionally set the passphrase password used by openSSL to encrypt/decrypt TLS private key files -->
+ <param name="tls-passphrase" value=""/>
+ <!-- Verify the date on TLS certificates -->
+ <param name="tls-verify-date" value="true"/>
+ <!-- TLS verify policy, when registering/inviting gateways with other servers (outbound) or handling inbound registration/invite requests how should we verify their certificate -->
+ <!-- set to 'in' to only verify incoming connections, 'out' to only verify outgoing connections, 'all' to verify all connections, also 'in_subjects', 'out_subjects' and 'all_subjects' for subject validation. Multiple policies can be split with a '|' pipe -->
+ <param name="tls-verify-policy" value="none"/>
+ <!-- Certificate max verify depth to use for validating peer TLS certificates when the verify policy is not none -->
+ <param name="tls-verify-depth" value="2"/>
+ <!-- If the tls-verify-policy is set to subjects_all or subjects_in this sets which subjects are allowed, multiple subjects can be split with a '|' pipe -->
+ <param name="tls-verify-in-subjects" value=""/>
+ <!-- TLS version ("sslv23" (default), "tlsv1"). NOTE: Phones may not work with TLSv1 -->
+ <param name="tls-version" value="$${sip_tls_version}"/>
+
+ <!-- turn on auto-flush during bridge (skip timer sleep when the socket already has data)
+ (reduces delay on latent connections default true, must be disabled explicitly)-->
+ <!--<param name="rtp-autoflush-during-bridge" value="false"/>-->
+
+ <!--If you don't want to pass through timestamps from 1 RTP call to another (on a per call basis with rtp_rewrite_timestamps chanvar)-->
+ <!--<param name="rtp-rewrite-timestamps" value="true"/>-->
+ <!--<param name="pass-rfc2833" value="true"/>-->
+ <!--If you have ODBC support and a working dsn you can use it instead of SQLite-->
+ <!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
+
+ <!--Uncomment to set all inbound calls to no media mode-->
+ <!--<param name="inbound-bypass-media" value="true"/>-->
+
+ <!--Uncomment to set all inbound calls to proxy media mode-->
+ <!--<param name="inbound-proxy-media" value="true"/>-->
+
+ <!--Uncomment to let calls hit the dialplan *before* you decide if the codec is ok-->
+ <!--<param name="inbound-late-negotiation" value="true"/>-->
+
+ <!-- this lets anything register -->
+ <!-- comment the next line and uncomment one or both of the other 2 lines for call authentication -->
+ <!-- <param name="accept-blind-reg" value="true"/> -->
+
+ <!-- accept any authentication without actually checking (not a good feature for most people) -->
+ <!-- <param name="accept-blind-auth" value="true"/> -->
+
+ <!-- suppress CNG on this profile or per call with the 'suppress_cng' variable -->
+ <!-- <param name="suppress-cng" value="true"/> -->
+
+ <!--TTL for nonce in sip auth-->
+ <param name="nonce-ttl" value="60"/>
+ <!--Uncomment if you want to force the outbound leg of a bridge to only offer the codec
+ that the originator is using-->
+ <!--<param name="disable-transcoding" value="true"/>-->
+ <!-- Handle 302 Redirect in the dialplan -->
+ <!--<param name="manual-redirect" value="true"/> -->
+ <!-- Disable Transfer -->
+ <!--<param name="disable-transfer" value="true"/> -->
+ <!-- Disable Register -->
+ <!--<param name="disable-register" value="true"/> -->
+ <!-- Used for when phones respond to a challenged ACK with method INVITE in the hash -->
+ <!--<param name="NDLB-broken-auth-hash" value="true"/>-->
+ <!-- add a ;received="<ip>:<port>" to the contact when replying to register for nat handling -->
+ <!--<param name="NDLB-received-in-nat-reg-contact" value="true"/>-->
+ <param name="auth-calls" value="$${internal_auth_calls}"/>
+ <!-- Force the user and auth-user to match. -->
+ <param name="inbound-reg-force-matching-username" value="true"/>
+ <!-- on authed calls, authenticate *all* the packets not just invite -->
+ <param name="auth-all-packets" value="false"/>
+
+ <!-- external_sip_ip
+ Used as the public IP address for SDP.
+ Can be an one of:
+ ip address - "12.34.56.78"
+ a stun server lookup - "stun:stun.server.com"
+ a DNS name - "host:host.server.com"
+ auto - Use guessed ip.
+ auto-nat - Use ip learned from NAT-PMP or UPNP
+ -->
+ <param name="ext-rtp-ip" value="auto-nat"/>
+ <param name="ext-sip-ip" value="auto-nat"/>
+
+ <!-- rtp inactivity timeout -->
+ <param name="rtp-timeout-sec" value="300"/>
+ <param name="rtp-hold-timeout-sec" value="1800"/>
+ <!-- VAD choose one (out is a good choice); -->
+ <!-- <param name="vad" value="in"/> -->
+ <!-- <param name="vad" value="out"/> -->
+ <!-- <param name="vad" value="both"/> -->
+ <!--<param name="alias" value="sip:10.0.1.251:5555"/>-->
+ <!--
+ These are enabled to make the default config work better out of the box.
+ If you need more than ONE domain you'll need to not use these options.
+
+ -->
+ <!--all inbound reg will look in this domain for the users -->
+ <param name="force-register-domain" value="$${domain}"/>
+ <!--force the domain in subscriptions to this value -->
+ <param name="force-subscription-domain" value="$${domain}"/>
+ <!--all inbound reg will stored in the db using this domain -->
+ <param name="force-register-db-domain" value="$${domain}"/>
+
+ <!--<param name="delete-subs-on-register" value="false"/>-->
+
+ <!-- enable rtcp on every channel also can be done per leg basis with rtcp_audio_interval_msec variable set to passthru to pass it across a call-->
+ <!--<param name="rtcp-audio-interval-msec" value="5000"/>-->
+ <!--<param name="rtcp-video-interval-msec" value="5000"/>-->
+
+ <!--force suscription expires to a lower value than requested-->
+ <!--<param name="force-subscription-expires" value="60"/>-->
+ <!-- disable register and transfer which may be undesirable in a public switch -->
+ <!--<param name="disable-transfer" value="true"/>-->
+ <!--<param name="disable-register" value="true"/>-->
+
+ <!--
+ enable-3pcc can be set to either 'true' or 'proxy', true accepts the call
+ right away, proxy waits until the call has been answered then sends accepts
+ -->
+ <!--<param name="enable-3pcc" value="true"/>-->
+
+ <!-- use at your own risk or if you know what this does.-->
+ <!--<param name="NDLB-force-rport" value="true"/>-->
+ <!--
+ Choose the realm challenge key. Default is auto_to if not set.
+
+ auto_from - uses the from field as the value for the sip realm.
+ auto_to - uses the to field as the value for the sip realm.
+ <anyvalue> - you can input any value to use for the sip realm.
+
+ If you want URL dialing to work you'll want to set this to auto_from.
+
+ If you use any other value besides auto_to or auto_from you'll loose
+ the ability to do multiple domains.
+
+ Note: comment out to restore the behavior before 2008-09-29
+
+ -->
+ <param name="challenge-realm" value="auto_from"/>
+ <!--<param name="disable-rtp-auto-adjust" value="true"/>-->
+ <!-- on inbound calls make the uuid of the session equal to the sip call id of that call -->
+ <!--<param name="inbound-use-callid-as-uuid" value="true"/>-->
+ <!-- on outbound calls set the callid to match the uuid of the session -->
+ <!--<param name="outbound-use-uuid-as-callid" value="true"/>-->
+ <!-- set to false disable this feature -->
+ <!--<param name="rtp-autofix-timing" value="false"/>-->
+
+ <!-- set this param to false if your gateway for some reason hates X- headers that it is supposed to ignore-->
+ <!--<param name="pass-callee-id" value="false"/>-->
+
+ <!-- clear clears them all or supply the name to add or the name prefixed with ~ to remove
+ valid values:
+
+ clear
+ CISCO_SKIP_MARK_BIT_2833
+ SONUS_SEND_INVALID_TIMESTAMP_2833
+
+ -->
+ <!--<param name="auto-rtp-bugs" data="clear"/>-->
+
+ <!-- the following can be used as workaround with bogus SRV/NAPTR records -->
+ <!--<param name="disable-srv" value="false" />-->
+ <!--<param name="disable-naptr" value="false" />-->
+
+ <!-- The following can be used to fine-tune timers within sofia's transport layer
+ Those settings are for advanced users and can safely be left as-is -->
+
+ <!-- Initial retransmission interval (in milliseconds).
+ Set the T1 retransmission interval used by the SIP transaction engine.
+ The T1 is the initial duration used by request retransmission timers A and E (UDP) as well as response retransmission timer G. -->
+ <!-- <param name="timer-T1" value="500" /> -->
+
+ <!-- Transaction timeout (defaults to T1 * 64).
+ Set the T1x64 timeout value used by the SIP transaction engine.
+ The T1x64 is duration used for timers B, F, H, and J (UDP) by the SIP transaction engine.
+ The timeout value T1x64 can be adjusted separately from the initial retransmission interval T1. -->
+ <!-- <param name="timer-T1X64" value="32000" /> -->
+
+
+ <!-- Maximum retransmission interval (in milliseconds).
+ Set the maximum retransmission interval used by the SIP transaction engine.
+ The T2 is the maximum duration used for the timers E (UDP) and G by the SIP transaction engine.
+ Note that the timer A is not capped by T2. Retransmission interval of INVITE requests grows exponentially
+ until the timer B fires. -->
+ <!-- <param name="timer-T2" value="4000" /> -->
+
+ <!--
+ Transaction lifetime (in milliseconds).
+ Set the lifetime for completed transactions used by the SIP transaction engine.
+ A completed transaction is kept around for the duration of T4 in order to catch late responses.
+ The T4 is the maximum duration for the messages to stay in the network and the duration of SIP timer K. -->
+ <!-- <param name="timer-T4" value="4000" /> -->
+
+ <!-- Turn on a jitterbuffer for every call -->
+ <!-- <param name="auto-jitterbuffer-msec" value="60"/> -->
+
+
+ <!-- By default mod_sofia will ignore the codecs in the sdp for hold/unhold operations
+ Set this to true if you want to actually parse the sdp and re-negotiate the codec during hold/unhold.
+ It's probably not what you want so stick with the default unless you really need to change this.
+ -->
+ <!--<param name="renegotiate-codec-on-hold" value="true"/>-->
+
+ </settings>
+</profile>
+
--- /dev/null
+<include>
+ <!--<gateway name="asterlink.com">-->
+ <!--/// account username *required* ///-->
+ <!--<param name="username" value="cluecon"/>-->
+ <!--/// auth realm: *optional* same as gateway name, if blank ///-->
+ <!--<param name="realm" value="asterlink.com"/>-->
+ <!--/// username to use in from: *optional* same as username, if blank ///-->
+ <!--<param name="from-user" value="cluecon"/>-->
+ <!--/// domain to use in from: *optional* same as realm, if blank ///-->
+ <!--<param name="from-domain" value="asterlink.com"/>-->
+ <!--/// account password *required* ///-->
+ <!--<param name="password" value="2007"/>-->
+ <!--/// extension for inbound calls: *optional* same as username, if blank ///-->
+ <!--<param name="extension" value="cluecon"/>-->
+ <!--/// proxy host: *optional* same as realm, if blank ///-->
+ <!--<param name="proxy" value="asterlink.com"/>-->
+ <!--/// send register to this proxy: *optional* same as proxy, if blank ///-->
+ <!--<param name="register-proxy" value="mysbc.com"/>-->
+ <!--/// expire in seconds: *optional* 3600, if blank ///-->
+ <!--<param name="expire-seconds" value="60"/>-->
+ <!--/// do not register ///-->
+ <!--<param name="register" value="false"/>-->
+ <!-- which transport to use for register -->
+ <!--<param name="register-transport" value="udp"/>-->
+ <!--How many seconds before a retry when a failure or timeout occurs -->
+ <!--<param name="retry-seconds" value="30"/>-->
+ <!--Use the callerid of an inbound call in the from field on outbound calls via this gateway -->
+ <!--<param name="caller-id-in-from" value="false"/>-->
+ <!--extra sip params to send in the contact-->
+ <!--<param name="contact-params" value="tport=tcp"/>-->
+ <!-- Put the extension in the contact -->
+ <!--<param name="extension-in-contact" value="true"/>-->
+ <!--send an options ping every x seconds, failure will unregister and/or mark it down-->
+ <!--<param name="ping" value="25"/>-->
+ <!--<param name="cid-type" value="rpid"/>-->
+ <!--</gateway>-->
+</include>
--- /dev/null
+<configuration name="cdr_csv.conf" description="CDR CSV Format">
+ <settings>
+ <!-- 'cdr-csv' will always be appended to log-base -->
+ <!--<param name="log-base" value="/var/log"/>-->
+ <param name="default-template" value="example"/>
+ <!-- This is like the info app but after the call is hung up -->
+ <!--<param name="debug" value="true"/>-->
+ <param name="rotate-on-hup" value="true"/>
+ <!-- may be a b or ab -->
+ <param name="legs" value="a"/>
+ <!-- Only log in Master.csv -->
+ <!-- <param name="master-file-only" value="true"/> -->
+ </settings>
+ <templates>
+ <template name="sql">INSERT INTO cdr VALUES ("${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${uuid}","${bleg_uuid}", "${accountcode}");</template>
+ <template name="example">"${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${uuid}","${bleg_uuid}","${accountcode}","${read_codec}","${write_codec}"</template>
+ <template name="snom">"${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${uuid}","${bleg_uuid}", "${accountcode}","${read_codec}","${write_codec}","${sip_user_agent}","${call_clientcode}","${sip_rtp_rxstat}","${sip_rtp_txstat}","${sofia_record_file}"</template>
+ <template name="linksys">"${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${uuid}","${bleg_uuid}","${accountcode}","${read_codec}","${write_codec}","${sip_user_agent}","${sip_p_rtp_stat}"</template>
+ <template name="asterisk">"${accountcode}","${caller_id_number}","${destination_number}","${context}","${caller_id}","${channel_name}","${bridge_channel}","${last_app}","${last_arg}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${amaflags}","${uuid}","${userfield}"</template>
+ </templates>
+</configuration>
+
--- /dev/null
+<configuration name="cdr_mongodb.conf" description="MongoDB CDR logger">
+ <settings>
+ <!-- Hostnames and IPv6 addrs not supported (yet) -->
+ <param name="host" value="127.0.0.1"/>
+ <param name="port" value="27017"/>
+
+ <!-- Namespace format is database.collection -->
+ <param name="namespace" value="test.cdr"/>
+
+ <!-- If true, create CDR for B-leg of call (default: true) -->
+ <param name="log-b-leg" value="false"/>
+ </settings>
+</configuration>
--- /dev/null
+<configuration name="cdr_pg_csv.conf" description="CDR PG CSV Format">
+ <settings>
+ <!-- See parameters for PQconnectdb() at http://www.postgresql.org/docs/8.4/static/libpq-connect.html -->
+ <param name="db-info" value="host=localhost dbname=cdr connect_timeout=10" />
+ <!-- CDR table name -->
+ <!--<param name="db-table" value="cdr"/>-->
+
+ <!-- Log a-leg (a), b-leg (b) or both (ab) -->
+ <param name="legs" value="a"/>
+
+ <!-- Directory in which to spool failed SQL inserts -->
+ <!-- <param name="spool-dir" value="$${base_dir}/log/cdr-pg-csv"/> -->
+ <!-- Disk spool format if DB connection/insert fails - csv (default) or sql -->
+ <param name="spool-format" value="csv"/>
+ <param name="rotate-on-hup" value="true"/>
+
+ <!-- This is like the info app but after the call is hung up -->
+ <!--<param name="debug" value="true"/>-->
+ </settings>
+ <schema>
+ <field var="local_ip_v4"/>
+ <field var="caller_id_name"/>
+ <field var="caller_id_number"/>
+ <field var="destination_number"/>
+ <field var="context"/>
+ <field var="start_stamp"/>
+ <field var="answer_stamp"/>
+ <field var="end_stamp"/>
+ <field var="duration" quote="false"/>
+ <field var="billsec" quote="false"/>
+ <field var="hangup_cause"/>
+ <field var="uuid"/>
+ <field var="bleg_uuid"/>
+ <field var="accountcode"/>
+ <field var="read_codec"/>
+ <field var="write_codec"/>
+ <!-- <field var="sip_hangup_disposition"/> -->
+ <!-- <field var="ani"/> -->
+ </schema>
+</configuration>
--- /dev/null
+<configuration name="cdr_sqlite.conf" description="SQLite CDR">
+ <settings>
+ <!-- SQLite database name (.db suffix will be automatically appended) -->
+ <!-- <param name="db-name" value="cdr"/> -->
+ <!-- CDR table name -->
+ <!-- <param name="db-table" value="cdr"/> -->
+ <!-- Log a-leg (a), b-leg (b) or both (ab) -->
+ <param name="legs" value="a"/>
+ <!-- Default template to use when inserting records -->
+ <param name="default-template" value="example"/>
+ <!-- This is like the info app but after the call is hung up -->
+ <!--<param name="debug" value="true"/>-->
+ </settings>
+ <templates>
+ <!-- Note that field order must match SQL table schema, otherwise insert will fail -->
+ <template name="example">"${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}",${duration},${billsec},"${hangup_cause}","${uuid}","${bleg_uuid}","${accountcode}"</template>
+ </templates>
+</configuration>
--- /dev/null
+<configuration name="erlang_event.conf" description="Erlang Socket Client">
+ <settings>
+ <param name="listen-ip" value="0.0.0.0"/>
+ <param name="listen-port" value="8031"/>
+ <!-- Specify the first part of the node name
+ (the host part after the @ will be autodetected)
+ OR pass a complete nodename to avoid autodetection
+ eg. freeswitch@example or freeswitch@example.com.
+ If you pass a complete node name, the 'shortname' parameter has no effect. -->
+ <param name="nodename" value="freeswitch"/>
+ <!-- Specify this OR 'cookie-file' or $HOME/.erlang.cookie will be read -->
+ <param name="cookie" value="ClueCon"/>
+ <!-- Read a cookie from an arbitary erlang cookie file instead -->
+ <!--<param name="cookie-file" value="/tmp/erlang.cookie"/>-->
+ <param name="shortname" value="true"/>
+ <!-- in additon to cookie, optionally restrict by ACL -->
+ <!--<param name="apply-inbound-acl" value="lan"/>-->
+ <!-- alternative is "binary" -->
+ <!--<param name="encoding" value="string"/>-->
+ <!-- provide compatability with previous OTP release (use with care) -->
+ <!--<param name="compat-rel" value="12"/> -->
+ </settings>
+</configuration>
--- /dev/null
+<configuration name="event_multicast.conf" description="Multicast Event">
+ <settings>
+ <param name="address" value="225.1.1.1"/>
+ <param name="port" value="4242"/>
+ <param name="bindings" value="all"/>
+ <param name="ttl" value="1"/>
+ <!-- <param name="loopback" value="no"/>-->
+ <!-- Uncomment this to enable pre-shared key encryption on the packets. -->
+ <!-- For this option to work, you'll need to have the openssl development -->
+ <!-- headers installed when you ran ./configure -->
+ <!-- <param name="psk" value="ClueCon"/> -->
+ </settings>
+</configuration>
+
--- /dev/null
+<configuration name="event_socket.conf" description="Socket Client">
+ <settings>
+ <param name="nat-map" value="false"/>
+ <param name="listen-ip" value="127.0.0.1"/>
+ <param name="listen-port" value="8021"/>
+ <param name="password" value="ClueCon"/>
+ <!--<param name="apply-inbound-acl" value="lan"/>-->
+ </settings>
+</configuration>
--- /dev/null
+<include>
+ <configuration name="json_cdr.conf" description="JSON CDR">
+ <settings>
+
+ <!-- Global parameters -->
+ <param name="log-b-leg" value="true"/>
+ <param name="prefix-a-leg" value="false"/>
+
+ <!-- Whether to URL encode the individual JSON values. Defaults to true, set to false for standard JSON. -->
+ <param name="encode-values" value="true"/>
+
+ <!-- Normally if url and log-dir are present, url is attempted first and log-dir second.
+ This options allows to do both systematically. -->
+ <param name="log-http-and-disk" value="false"/>
+
+ <!-- File logging -->
+ <!-- Directory where to create the "json_cdr" directory used to store JSON CDRs. Leave empty for no file logging. -->
+ <!-- Might be overriden by a channel variable "json_cdr_base". -->
+ <param name="log-dir" value=""/>
+ <!-- Whether to rotate file CDRs. -->
+ <param name="rotate" value="false"/>
+
+ <!-- HTTP(S) logging -->
+ <!-- URL where to POST JSON CDRs. Leave empty for no URL logging. Up to 20 URLs may be specified. -->
+ <param name="url" value=""/>
+ <!-- Authentication scheme for the above URL. May be one of basic|digest|NTLM|GSS-NEGOTIATE|any-->
+ <param name="auth-scheme" value="basic"/>
+ <!-- Credentials in the form username:password if auth-scheme is used. Leave empty for no authentication. -->
+ <param name="cred" value="string"/>
+ <!-- Whether to base64 encode the entire JSON document before POSTing it. -->
+ <param name="encode" value="base64|true|false"/>
+ <!-- Number of retries in case of failure. Each specified URL is tried in turn. -->
+ <param name="retries" value="0"/>
+ <!-- Delay between retries (ms). -->
+ <param name="delay" value="5000"/>
+ <!-- Disable streaming if the server doesn't support it. -->
+ <param name="disable-100-continue" value="false"/>
+ <!-- If web posting failed, the CDR is written to a file. -->
+ <!-- Error log dir ("json_cdr" is appended). Up to 20 may be specified. Default to log-dir if none is specified. -->
+ <param name="err-log-dir" value=""/>
+
+ <!-- SSL options -->
+ <param name="ssl-key-path" value=""/>
+ <param name="ssl-key-password" value=""/>
+ <!-- SSL version. If specified, must be either "SSLv3" or "TLSv1". -->
+ <param name="ssl-version" value=""/>
+ <param name="enable-ssl-verifyhost" value="false"/>
+ <param name="ssl-cert-path" value=""/>
+ <param name="enable-cacert-check" value="false"/>
+ <param name="ssl-cacert-file" value=""/>
+ </settings>
+ </configuration>
+</include>
--- /dev/null
+<configuration name="console.conf" description="Console Logger">
+ <!-- pick a file name, a function name or 'all' -->
+ <!-- map as many as you need for specific debugging -->
+ <mappings>
+ <!--
+ name can be a file name, function name or 'all'
+ value is one or more of debug,info,notice,warning,err,crit,alert,all
+ See examples below
+
+
+ The following map is the default, which is all debug levels enabled:
+ <map name="all" value="debug,info,notice,warning,err,crit,alert"/>
+
+
+ Example: the following turns on debugging for error and critical levels only
+ <map name="all" value="err,crit"/>
+
+ NOTE: using map name="all" will override any other settings! If you
+ want a more specific set of console messages then you will need
+ to specify which files and/or functions you want to have debug
+ messages. One option is to turn on just the more critical
+ messages with map name="all", then specify the other types of
+ console messages you want to see for various files and functions.
+
+ Example: turn on ERROR, CRIT, ALERT for all modules, then specify other
+ levels for various modules and functions
+
+ <map name="all" value="err,crit,alert"/>
+ <map name="switch_loadable_module_process" value="all"/>
+ <map name="mod_local_stream.c" value="warning,debug"/>
+ <map name="mod_sndfile.c" value="warning,info,debug"/>
+ -->
+ <map name="all" value="console,debug,info,notice,warning,err,crit,alert"/>
+
+ <!--
+ You can use or modify this sample set of mappings. It turns on higher
+ level messages for all modules and then specifies extra lower level
+ messages for OpenZAP, Sofia, and switch core messages.
+
+ <map name="all" value="warning,err,crit,alert"/>
+ <map name="zap_analog.c" value="all"/>
+ <map name="zap_io.c" value="all"/>
+ <map name="zap_isdn.c" value="all"/>
+ <map name="zap_zt.c" value="all"/>
+ <map name="mod_openzap" value="all"/>
+ <map name="sofia.c" value="notice"/>
+ <map name="switch_core_state_machine.c" value="all"/>
+
+ -->
+ </mappings>
+ <settings>
+ <!-- comment or set to false for no color logging -->
+ <param name="colorize" value="true"/>
+ <param name="loglevel" value="$${console_loglevel}"/>
+ </settings>
+</configuration>
--- /dev/null
+<configuration name="logfile.conf" description="File Logging">
+ <settings>
+ <!-- true to auto rotate on HUP, false to open/close -->
+ <param name="rotate-on-hup" value="true"/>
+ </settings>
+ <profiles>
+ <profile name="default">
+ <settings>
+ <!-- File to log to -->
+ <!--<param name="logfile" value="/var/log/freeswitch.log"/>-->
+ <!-- At this length in bytes rotate the log file (0 for never) -->
+ <param name="rollover" value="10485760"/>
+ <!-- Maximum number of log files to keep before wrapping -->
+ <!-- If this parameter is enabled, the log filenames will not include a date stamp -->
+ <!-- <param name="maximum-rotate" value="32"/> -->
+ <!-- Uncomment to prefix all log lines by the session's uuid -->
+ <!-- <param name="uuid" value="true" /> -->
+ </settings>
+ <mappings>
+ <!--
+ name can be a file name, function name or 'all'
+ value is one or more of debug,info,notice,warning,err,crit,alert,all
+ Please see comments in console.conf.xml for more information
+ -->
+ <map name="all" value="debug,info,notice,warning,err,crit,alert"/>
+ </mappings>
+ </profile>
+ </profiles>
+</configuration>
--- /dev/null
+<configuration name="syslog.conf" description="Syslog Logger">
+ <!-- SYSLOG -->
+ <!-- emerg - system is unusable -->
+ <!-- alert - action must be taken immediately -->
+ <!-- crit - critical conditions -->
+ <!-- err - error conditions -->
+ <!-- warning - warning conditions -->
+ <!-- notice - normal, but significant, condition -->
+ <!-- info - informational message -->
+ <!-- debug - debug-level message -->
+ <settings>
+ <param name="facility" value="user"/>
+ <param name="ident" value="freeswitch"/>
+ <param name="loglevel" value="warning"/>
+ <!-- Uncomment the following line to log uuids in syslogs (when applicable) -->
+ <!-- <param name="uuid" value="true"/> -->
+ </settings>
+</configuration>
--- /dev/null
+<configuration name="xml_cdr.conf" description="XML CDR CURL logger">
+ <settings>
+ <!-- the url to post to if blank web posting is disabled -->
+ <!-- <param name="url" value="http://localhost/cdr_curl/post.php"/> -->
+
+ <!-- optional: credentials to send to web server -->
+ <!-- <param name="cred" value="user:pass"/> -->
+
+ <!-- the total number of retries (not counting the first 'try') to post to webserver incase of failure -->
+ <!-- <param name="retries" value="2"/> -->
+
+ <!-- delay between retries in seconds, default is 5 seconds -->
+ <!-- <param name="delay" value="1"/> -->
+
+ <!-- Log via http and on disk, default is false -->
+ <!-- <param name="log-http-and-disk" value="true"/> -->
+
+ <!-- optional: if not present we do not log every record to disk -->
+ <!-- either an absolute path, a relative path assuming ${prefix}/logs or a blank value will default to ${prefix}/logs/xml_cdr -->
+ <param name="log-dir" value=""/>
+
+ <!-- optional: if not present we do log the b leg -->
+ <!-- true or false if we should create a cdr for the b leg of a call-->
+ <param name="log-b-leg" value="false"/>
+
+ <!-- optional: if not present, all filenames are the uuid of the call -->
+ <!-- true or false if a leg files are prefixed "a_" -->
+ <param name="prefix-a-leg" value="true"/>
+
+ <!-- encode the post data may be 'true' for url encoding, 'false' for no encoding, 'base64' for base64 encoding or 'textxml' for text/xml -->
+ <param name="encode" value="true"/>
+
+ <!-- optional: set to true to disable Expect: 100-continue lighttpd requires this setting -->
+ <!--<param name="disable-100-continue" value="true"/>-->
+
+ <!-- optional: full path to the error log dir for failed web posts if not specified its the same as log-dir -->
+ <!-- either an absolute path, a relative path assuming ${prefix}/logs or a blank or omitted value will default to ${prefix}/logs/xml_cdr -->
+ <!-- <param name="err-log-dir" value="/tmp"/> -->
+
+ <!-- which auhtentification scheme to use. Supported values are: basic, digest, NTLM, GSS-NEGOTIATE or "any" for automatic detection -->
+ <!--<param name="auth-scheme" value="basic"/>-->
+
+ <!-- optional: this will enable the CA root certificate check by libcurl to
+ verify that the certificate was issued by a major Certificate Authority.
+ note: default value is disabled. only enable if you want this! -->
+ <!--<param name="enable-cacert-check" value="true"/>-->
+ <!-- optional: verify that the server is actually the one listed in the cert -->
+ <!-- <param name="enable-ssl-verifyhost" value="true"/> -->
+
+ <!-- optional: these options can be used to specify custom SSL certificates
+ to use for HTTPS communications. Either use both options or neither.
+ Specify your public key with 'ssl-cert-path' and the private key with
+ 'ssl-key-path'. If your private key has a password, specify it with
+ 'ssl-key-password'. -->
+ <!-- <param name="ssl-cert-path" value="$${base_dir}/conf/certs/public_key.pem"/> -->
+ <!-- <param name="ssl-key-path" value="$${base_dir}/conf/certs/private_key.pem"/> -->
+ <!-- <param name="ssl-key-password" value="MyPrivateKeyPassword"/> -->
+
+ <!-- optional: use a custom CA certificate in PEM format to verify the peer
+ with. This is useful if you are acting as your own certificate authority.
+ note: only makes sense if used in combination with "enable-cacert-check." -->
+ <!-- <param name="ssl-cacert-file" value="$${base_dir}/conf/certs/cacert.pem"/> -->
+
+ <!-- optional: specify the SSL version to force HTTPS to use. Valid options are
+ "SSLv3" and "TLSv1". Otherwise libcurl will auto-negotiate the version. -->
+ <!-- <param name="ssl-version" value="TLSv1"/> -->
+
+ <!-- optional: enables cookies and stores them in the specified file. -->
+ <!-- <param name="cookie-file" value="/tmp/cookie-mod_xml_curl.txt"/> -->
+ </settings>
+</configuration>
--- /dev/null
+<configuration name="xml_curl.conf" description="cURL XML Gateway">
+ <bindings>
+ <binding name="example">
+ <!-- Allow to bind on a particular IP for requests sent -->
+ <!--<param name="bind-local" value="$${local_ip_v4}" />-->
+ <!-- The url to a gateway cgi that can generate xml similar to
+ what's in this file only on-the-fly (leave it commented if you dont
+ need it) -->
+ <!-- one or more |-delim of configuration|directory|dialplan -->
+ <!-- <param name="gateway-url" value="http://www.freeswitch.org/gateway.xml" bindings="dialplan"/> -->
+ <!-- set this to provide authentication credentials to the server -->
+ <!--<param name="gateway-credentials" value="muser:mypass"/>-->
+ <!--<param name="auth-scheme" value="basic"/>-->
+
+ <!-- optional: this will enable the CA root certificate check by libcurl to
+ verify that the certificate was issued by a major Certificate Authority.
+ note: default value is disabled. only enable if you want this! -->
+ <!--<param name="enable-cacert-check" value="true"/>-->
+ <!-- optional: verify that the server is actually the one listed in the cert -->
+ <!-- <param name="enable-ssl-verifyhost" value="true"/> -->
+
+ <!-- optional: these options can be used to specify custom SSL certificates
+ to use for HTTPS communications. Either use both options or neither.
+ Specify your public key with 'ssl-cert-path' and the private key with
+ 'ssl-key-path'. If your private key has a password, specify it with
+ 'ssl-key-password'. -->
+ <!-- <param name="ssl-cert-path" value="$${base_dir}/conf/certs/public_key.pem"/> -->
+ <!-- <param name="ssl-key-path" value="$${base_dir}/conf/certs/private_key.pem"/> -->
+ <!-- <param name="ssl-key-password" value="MyPrivateKeyPassword"/> -->
+ <!-- optional timeout -->
+ <!-- <param name="timeout" value="10"/> -->
+
+ <!-- optional: use a custom CA certificate in PEM format to verify the peer
+ with. This is useful if you are acting as your own certificate authority.
+ note: only makes sense if used in combination with "enable-cacert-check." -->
+ <!-- <param name="ssl-cacert-file" value="$${base_dir}/conf/certs/cacert.pem"/> -->
+
+ <!-- optional: specify the SSL version to force HTTPS to use. Valid options are
+ "SSLv3" and "TLSv1". Otherwise libcurl will auto-negotiate the version. -->
+ <!-- <param name="ssl-version" value="TLSv1"/> -->
+
+ <!-- optional: enables cookies and stores them in the specified file. -->
+ <!-- <param name="cookie-file" value="/tmp/cookie-mod_xml_curl.txt"/> -->
+
+ <!-- one or more of these imply you want to pick the exact variables that are transmitted -->
+ <!--<param name="enable-post-var" value="Unique-ID"/>-->
+ </binding>
+ </bindings>
+</configuration>
--- /dev/null
+<configuration name="xml_rpc.conf" description="XML RPC">
+ <settings>
+ <!-- The port where you want to run the http service (default 8080) -->
+ <param name="http-port" value="8080"/>
+ <!-- if all 3 of the following params exist all http traffic will require auth -->
+ <param name="auth-realm" value="freeswitch"/>
+ <param name="auth-user" value="freeswitch"/>
+ <param name="auth-pass" value="works"/>
+ </settings>
+</configuration>