mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-12-19 03:37:46 +00:00
Merge branch 'master' into v1.10
This commit is contained in:
48
.drone.yml
48
.drone.yml
@@ -5,18 +5,19 @@ name: unit-tests
|
||||
steps:
|
||||
- name: bootstrap
|
||||
image: signalwire/freeswitch-public-base
|
||||
pull: true
|
||||
pull: always
|
||||
commands:
|
||||
- cat /proc/sys/kernel/core_pattern
|
||||
- ./bootstrap.sh -j
|
||||
|
||||
- name: configure
|
||||
image: signalwire/freeswitch-public-base
|
||||
pull: true
|
||||
pull: always
|
||||
commands:
|
||||
- apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -yq remove libspandsp-dev
|
||||
- DEBIAN_FRONTEND=noninteractive apt-get -yq install libsofia-sip-ua-dev libspandsp3-dev
|
||||
- echo "applications/mod_test" >> modules.conf
|
||||
- apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -yq remove libsofia-sip-ua0 libspandsp-dev
|
||||
- DEBIAN_FRONTEND=noninteractive apt-get -yq install libspandsp3-dev
|
||||
- git clone https://github.com/freeswitch/sofia-sip.git
|
||||
- cd sofia-sip && ./autogen.sh && ./configure.gnu && make -j`nproc` && make install && cd ..
|
||||
- echo 'codecs/mod_openh264' >> modules.conf
|
||||
- sed -i '/applications\\/mod_http_cache/s/^#//g' modules.conf
|
||||
- sed -i '/event_handlers\\/mod_rayo/s/^#//g' modules.conf
|
||||
@@ -27,20 +28,22 @@ steps:
|
||||
|
||||
- name: build
|
||||
image: signalwire/freeswitch-public-base
|
||||
pull: true
|
||||
pull: always
|
||||
commands:
|
||||
- apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -yq remove libspandsp-dev
|
||||
- DEBIAN_FRONTEND=noninteractive apt-get -yq install libsofia-sip-ua-dev libspandsp3-dev
|
||||
- apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -yq remove libsofia-sip-ua0 libspandsp-dev
|
||||
- DEBIAN_FRONTEND=noninteractive apt-get -yq install libspandsp3-dev
|
||||
- cd sofia-sip && make install && cd ..
|
||||
- echo '#!/bin/bash\nmake -j`nproc --all` |& tee ./unit-tests-build-result.txt\nexitstatus=$${PIPESTATUS[0]}\necho $$exitstatus > ./build-status.txt\n' > build.sh
|
||||
- chmod +x build.sh
|
||||
- ./build.sh
|
||||
|
||||
- name: run-tests
|
||||
image: signalwire/freeswitch-public-base
|
||||
pull: true
|
||||
pull: always
|
||||
commands:
|
||||
- apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -yq remove libspandsp-dev
|
||||
- DEBIAN_FRONTEND=noninteractive apt-get -yq install libsofia-sip-ua-dev libspandsp3-dev
|
||||
- apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -yq remove libsofia-sip-ua0 libspandsp-dev
|
||||
- DEBIAN_FRONTEND=noninteractive apt-get -yq install libspandsp3-dev
|
||||
- cd sofia-sip && make install && cd ..
|
||||
- make install || true
|
||||
- cd tests/unit
|
||||
- ./run-tests.sh
|
||||
@@ -53,7 +56,7 @@ steps:
|
||||
|
||||
- name: notify
|
||||
image: signalwire/drone-notify
|
||||
pull: true
|
||||
pull: always
|
||||
environment:
|
||||
SLACK_WEBHOOK_URL:
|
||||
from_secret: slack_webhook_url
|
||||
@@ -61,7 +64,7 @@ steps:
|
||||
from_secret: notify_env
|
||||
commands:
|
||||
- /root/unit-tests-notify.sh
|
||||
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- master
|
||||
@@ -75,14 +78,14 @@ name: scan-build
|
||||
|
||||
steps:
|
||||
- name: bootstrap
|
||||
image: signalwire/freeswitch-public-base:stretch
|
||||
pull: true
|
||||
image: signalwire/freeswitch-public-base
|
||||
pull: always
|
||||
commands:
|
||||
- ./bootstrap.sh -j
|
||||
|
||||
- name: configure
|
||||
image: signalwire/freeswitch-public-base:stretch
|
||||
pull: true
|
||||
image: signalwire/freeswitch-public-base
|
||||
pull: always
|
||||
commands:
|
||||
- apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -yq remove libspandsp-dev
|
||||
- DEBIAN_FRONTEND=noninteractive apt-get -yq install libsofia-sip-ua-dev libspandsp3-dev
|
||||
@@ -112,13 +115,13 @@ steps:
|
||||
- ./configure
|
||||
|
||||
- name: scan-build
|
||||
image: signalwire/freeswitch-public-base:stretch
|
||||
pull: true
|
||||
image: signalwire/freeswitch-public-base
|
||||
pull: always
|
||||
commands:
|
||||
- apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -yq remove libspandsp-dev
|
||||
- DEBIAN_FRONTEND=noninteractive apt-get -yq install libsofia-sip-ua-dev libspandsp3-dev
|
||||
- mkdir -p scan-build
|
||||
- echo '#!/bin/bash\nscan-build-4.0 -o ./scan-build/ make -j`nproc --all` |& tee ./scan-build-result.txt\nexitstatus=$${PIPESTATUS[0]}\necho $$exitstatus > ./scan-build-status.txt\n' > scan.sh
|
||||
- echo '#!/bin/bash\nscan-build-7 -o ./scan-build/ make -j`nproc --all` |& tee ./scan-build-result.txt\nexitstatus=$${PIPESTATUS[0]}\necho $$exitstatus > ./scan-build-status.txt\n' > scan.sh
|
||||
- chmod +x scan.sh
|
||||
- ./scan.sh
|
||||
- exitstatus=`cat ./scan-build-status.txt`
|
||||
@@ -126,7 +129,7 @@ steps:
|
||||
|
||||
- name: notify
|
||||
image: signalwire/drone-notify
|
||||
pull: true
|
||||
pull: always
|
||||
environment:
|
||||
SLACK_WEBHOOK_URL:
|
||||
from_secret: slack_webhook_url
|
||||
@@ -135,7 +138,6 @@ steps:
|
||||
commands:
|
||||
- /root/scan-build-notify.sh
|
||||
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- master
|
||||
@@ -145,6 +147,6 @@ trigger:
|
||||
|
||||
---
|
||||
kind: signature
|
||||
hmac: af77439b382612b49140cb95f04d6d695e0a188c411ae227abcba205bf96bab9
|
||||
hmac: a85b0db203d2c9a71c3e4a63a46b5513fbdb3b8f5135e21d0fe0992f33626824
|
||||
|
||||
...
|
||||
|
||||
20
.gitignore
vendored
20
.gitignore
vendored
@@ -102,6 +102,7 @@ Release/
|
||||
/build/config/ltmain.sh
|
||||
/build/config/missing
|
||||
/build/freeswitch.pc
|
||||
/build/standalone_module/freeswitch.pc
|
||||
/build/getlib.sh
|
||||
/build/getg729.sh
|
||||
/build/getsounds.sh
|
||||
@@ -115,15 +116,6 @@ Release/
|
||||
/libs/esl/fs_ivrd
|
||||
/libs/esl/testclient
|
||||
/libs/esl/testserver
|
||||
/libs/freetdm/detect_dtmf
|
||||
/libs/freetdm/detect_tones
|
||||
/libs/freetdm/testanalog
|
||||
/libs/freetdm/testapp
|
||||
/libs/freetdm/testcid
|
||||
/libs/freetdm/testpri
|
||||
/libs/freetdm/testr2
|
||||
/libs/freetdm/testsangomaboost
|
||||
/libs/freetdm/testtones
|
||||
/libs/fsg729-*-installer
|
||||
/libs/g729/
|
||||
/libs/libcodec2/compile
|
||||
@@ -165,6 +157,7 @@ Release/
|
||||
/src/mod/languages/mod_lua/mod_lua_wrap.cpp.orig
|
||||
/src/mod/languages/mod_perl/mod_perl_wrap.cpp.orig
|
||||
/src/mod/languages/mod_python/mod_python_wrap.cpp.orig
|
||||
/src/mod/languages/mod_python3/mod_python_wrap.cpp.orig
|
||||
/src/mod/say/mod_say_de/Makefile
|
||||
/src/mod/say/mod_say_es/Makefile
|
||||
/src/mod/say/mod_say_fr/Makefile
|
||||
@@ -273,9 +266,18 @@ src/mod/applications/mod_http_cache/test/test_aws.log
|
||||
src/mod/applications/mod_http_cache/test/test_aws.trs
|
||||
src/mod/formats/mod_sndfile/test/test_sndfile
|
||||
src/mod/formats/mod_sndfile/test/test_sndfile_conf
|
||||
src/mod/formats/mod_ssml/test/test_tts_format
|
||||
src/mod/*/*/test/*.log
|
||||
src/mod/*/*/test/*.trs
|
||||
src/mod/*/*/test/[0-9]*/*
|
||||
test-suite.log
|
||||
src/mod/applications/mod_av/test/test_BT7.mp4
|
||||
src/mod/applications/mod_av/test/test_RGB.mp4
|
||||
images/test-argb.png
|
||||
images/test-rgb.png
|
||||
images/test.png
|
||||
images/test_patched.png
|
||||
images/test_text.png
|
||||
|
||||
src/mod/codecs/mod_amrwb/test/test_amrwb
|
||||
src/mod/endpoints/mod_sofia/test/sipp-based-tests
|
||||
|
||||
17
Makefile.am
17
Makefile.am
@@ -248,7 +248,7 @@ endif
|
||||
lib_LTLIBRARIES = libfreeswitch.la
|
||||
libfreeswitch_la_CFLAGS = $(CORE_CFLAGS) $(SQLITE_CFLAGS) $(GUMBO_CFLAGS) $(FVAD_CFLAGS) $(FREETYPE_CFLAGS) $(CURL_CFLAGS) $(PCRE_CFLAGS) $(SPEEX_CFLAGS) $(LIBEDIT_CFLAGS) $(openssl_CFLAGS) $(SOFIA_SIP_CFLAGS) $(AM_CFLAGS) $(TPL_CFLAGS)
|
||||
libfreeswitch_la_LDFLAGS = -version-info 1:0:0 $(AM_LDFLAGS) $(PLATFORM_CORE_LDFLAGS) -no-undefined
|
||||
libfreeswitch_la_LIBADD = $(CORE_LIBS) $(APR_LIBS) $(SQLITE_LIBS) $(GUMBO_LIBS) $(FVAD_LIBS) $(FREETYPE_LIBS) $(CURL_LIBS) $(PCRE_LIBS) $(SPEEX_LIBS) $(LIBEDIT_LIBS) $(openssl_LIBS) $(PLATFORM_CORE_LIBS) $(TPL_LIBS) $(SPANDSP_LIBS) $(SOFIA_SIP_LIBS)
|
||||
libfreeswitch_la_LIBADD = $(CORE_LIBS) $(APR_LIBS) $(SQLITE_LIBS) $(GUMBO_LIBS) $(FVAD_LIBS) $(FREETYPE_LIBS) $(CURL_LIBS) $(PCRE_LIBS) $(SPEEX_LIBS) $(LIBEDIT_LIBS) $(SYSTEMD_LIBS) $(openssl_LIBS) $(PLATFORM_CORE_LIBS) $(TPL_LIBS) $(SPANDSP_LIBS) $(SOFIA_SIP_LIBS)
|
||||
libfreeswitch_la_DEPENDENCIES = $(BUILT_SOURCES)
|
||||
|
||||
if HAVE_PNG
|
||||
@@ -300,6 +300,7 @@ library_include_HEADERS = \
|
||||
src/include/switch_dso.h \
|
||||
src/include/switch_loadable_module.h \
|
||||
src/include/switch_module_interfaces.h \
|
||||
src/include/switch_packetizer.h \
|
||||
src/include/switch_platform.h \
|
||||
src/include/switch_resample.h \
|
||||
src/include/switch_regex.h \
|
||||
@@ -364,6 +365,7 @@ libfreeswitch_la_SOURCES = \
|
||||
src/switch_version.c \
|
||||
src/switch_core_media.c \
|
||||
src/switch_core_video.c \
|
||||
src/switch_packetizer.c \
|
||||
src/switch_sdp.c \
|
||||
src/switch_scheduler.c \
|
||||
src/switch_core_db.c \
|
||||
@@ -599,14 +601,15 @@ libs/apr/libapr-1.la: libs/apr/Makefile libs/apr/.update
|
||||
libs/apr-util/libaprutil-1.la: libs/apr/libapr-1.la libs/apr-util libs/apr-util/.update
|
||||
@if [ $(MAKELEVEL) = 0 -o -z "`echo "$(MAKEARGS)" | grep "j"`" ] ; then touch $(switch_srcdir)/src/include/switch.h; cd libs/apr-util && $(MAKE) $(MFLAGS) && touch libaprutil-1.la; fi
|
||||
|
||||
SRTP_SRC = libs/srtp/srtp/srtp.c libs/srtp/srtp/ekt.c libs/srtp/crypto/cipher/cipher.c libs/srtp/crypto/cipher/null_cipher.c \
|
||||
SRTP_SRC = libs/srtp/srtp/srtp.c libs/srtp/crypto/cipher/cipher.c libs/srtp/crypto/cipher/null_cipher.c \
|
||||
libs/srtp/crypto/cipher/aes.c libs/srtp/crypto/cipher/aes_icm.c \
|
||||
libs/srtp/crypto/hash/null_auth.c libs/srtp/crypto/hash/sha1.c \
|
||||
libs/srtp/crypto/hash/hmac.c libs/srtp/crypto/hash/auth.c \
|
||||
libs/srtp/crypto/math/datatypes.c libs/srtp/crypto/math/stat.c \
|
||||
libs/srtp/crypto/math/datatypes.c \
|
||||
libs/srtp/crypto/kernel/crypto_kernel.c libs/srtp/crypto/kernel/alloc.c \
|
||||
libs/srtp/crypto/kernel/key.c libs/srtp/crypto/kernel/err.c \
|
||||
libs/srtp/crypto/replay/rdb.c libs/srtp/crypto/replay/rdbx.c libs/srtp/crypto/replay/ut_sim.c
|
||||
libs/srtp/crypto/replay/rdb.c libs/srtp/crypto/replay/rdbx.c \
|
||||
libs/srtp/crypto/cipher/cipher_test_cases.c libs/srtp/crypto/hash/auth_test_cases.c
|
||||
|
||||
libs/srtp/libsrtp.la: libs/srtp libs/srtp/.update $(SRTP_SRC)
|
||||
touch $(switch_srcdir)/src/include/switch.h
|
||||
@@ -741,7 +744,7 @@ pristine:
|
||||
git clean -fdx
|
||||
git reset --hard
|
||||
|
||||
update-clean: clean python-reconf
|
||||
update-clean: clean python-reconf python3-reconf
|
||||
cd libs/esl && $(MAKE) clean
|
||||
cd libs/srtp && $(MAKE) clean
|
||||
|
||||
@@ -758,6 +761,10 @@ python-reconf:
|
||||
rm -f src/mod/languages/mod_python/Makefile
|
||||
./config.status
|
||||
|
||||
python3-reconf:
|
||||
rm -f src/mod/languages/mod_python3/Makefile
|
||||
./config.status
|
||||
|
||||
reconf:
|
||||
rm config.cache
|
||||
sh ./config.status --recheck
|
||||
|
||||
@@ -10,7 +10,7 @@ BGJOB=false
|
||||
VERBOSE=false
|
||||
BASEDIR=`pwd`;
|
||||
LIBDIR=${BASEDIR}/libs;
|
||||
SUBDIRS="apr libzrtp iksemel libdingaling srtp freetdm unimrcp fs";
|
||||
SUBDIRS="apr libzrtp iksemel libdingaling srtp unimrcp fs";
|
||||
|
||||
while getopts 'jhd:v' o; do
|
||||
case "$o" in
|
||||
|
||||
@@ -4,6 +4,10 @@ After=syslog.target network.target
|
||||
After=postgresql.service postgresql-9.3.service postgresql-9.4.service mysqld.service httpd.service
|
||||
|
||||
[Service]
|
||||
# You can use Type=notify only if you compile FreeSWITCH with --enable-systemd configure option
|
||||
# In this case you have to run FreeSWITCH in foreground mode (-nf option)!
|
||||
#Type=notify
|
||||
#NotifyAccess=main
|
||||
User=freeswitch
|
||||
EnvironmentFile=-/etc/sysconfig/freeswitch
|
||||
# RuntimeDirectory is not yet supported in CentOS 7. A workaround is to use /etc/tmpfiles.d/freeswitch.conf
|
||||
|
||||
@@ -21,8 +21,8 @@ cd $here
|
||||
for i in $files ; do
|
||||
mod=${i%%.*}
|
||||
|
||||
infile=`grep ^.*$mod\$ ../modules.conf | grep -v ftmod_`
|
||||
commented=`grep ^\#.*$mod\$ ../modules.conf | grep -v ftmod_`
|
||||
infile=`grep -E "^.*$mod(\|.*)?$" ../modules.conf | grep -v ftmod_`
|
||||
commented=`grep -E "^\#.*$mod(\|.*)?$" ../modules.conf | grep -v ftmod_`
|
||||
|
||||
if [ -z "$infile" ] ; then
|
||||
echo "${on}WARNING: installed module: $i was not installed by this build. It is not present in modules.conf.${off}"
|
||||
|
||||
@@ -49,6 +49,7 @@ applications/mod_sms
|
||||
applications/mod_spandsp
|
||||
#applications/mod_spy
|
||||
#applications/mod_stress
|
||||
applications/mod_test
|
||||
#applications/mod_translate
|
||||
applications/mod_valet_parking
|
||||
#applications/mod_video_filter
|
||||
@@ -134,6 +135,7 @@ languages/mod_lua
|
||||
#languages/mod_managed
|
||||
#languages/mod_perl
|
||||
#languages/mod_python
|
||||
#languages/mod_python3
|
||||
#languages/mod_v8
|
||||
#languages/mod_yaml
|
||||
loggers/mod_console
|
||||
@@ -168,7 +170,7 @@ xml_int/mod_xml_cdr
|
||||
xml_int/mod_xml_rpc
|
||||
xml_int/mod_xml_scgi
|
||||
|
||||
#../../libs/freetdm/mod_freetdm
|
||||
#mod_freetdm|https://github.com/freeswitch/freetdm.git -b master
|
||||
|
||||
## Experimental Modules (don't cry if they're broken)
|
||||
#../../contrib/mod/xml_int/mod_xml_odbc
|
||||
|
||||
@@ -47,6 +47,7 @@ applications/mod_soundtouch
|
||||
applications/mod_spandsp
|
||||
applications/mod_spy
|
||||
applications/mod_stress
|
||||
applications/mod_test
|
||||
applications/mod_translate
|
||||
applications/mod_valet_parking
|
||||
applications/mod_video_filter
|
||||
@@ -127,7 +128,7 @@ languages/mod_java
|
||||
languages/mod_lua
|
||||
languages/mod_managed
|
||||
languages/mod_perl
|
||||
languages/mod_python
|
||||
languages/mod_python3
|
||||
#languages/mod_v8
|
||||
languages/mod_yaml
|
||||
loggers/mod_console
|
||||
|
||||
@@ -1 +1 @@
|
||||
1.10.6-release
|
||||
1.10.7-release
|
||||
|
||||
@@ -13,6 +13,11 @@ make swigclean
|
||||
make mod_python_wrap.cpp
|
||||
cd ../../../..
|
||||
|
||||
cd src/mod/languages/mod_python3
|
||||
make swigclean
|
||||
make mod_python_wrap.cpp
|
||||
cd ../../../..
|
||||
|
||||
cd src/mod/languages/mod_java
|
||||
make reswig
|
||||
cd ../../../..
|
||||
|
||||
BIN
conf/FreeMono.ttf
Normal file
BIN
conf/FreeMono.ttf
Normal file
Binary file not shown.
@@ -184,7 +184,7 @@
|
||||
<zone name="America/Rosario" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||
<zone name="America/Santiago" value="CLST" />
|
||||
<zone name="America/Santo_Domingo" value="AST4" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3BRST,M10.2.0/0,M2.3.0/0" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3" />
|
||||
<zone name="America/Scoresbysund" value="EGT1EGST,M3.5.0/0,M10.5.0/1" />
|
||||
<zone name="America/Shiprock" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||
<zone name="America/St_Barthelemy" value="AST4" />
|
||||
|
||||
@@ -81,6 +81,7 @@
|
||||
<load module="mod_v8"/>
|
||||
<!-- <load module="mod_perl"/> -->
|
||||
<!-- <load module="mod_python"/> -->
|
||||
<!-- <load module="mod_python3"/> -->
|
||||
<!-- <load module="mod_java"/> -->
|
||||
<load module="mod_lua"/>
|
||||
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
<zone name="America/Rosario" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||
<zone name="America/Santiago" value="CLST" />
|
||||
<zone name="America/Santo_Domingo" value="AST4" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3BRST,M10.2.0/0,M2.3.0/0" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3" />
|
||||
<zone name="America/Scoresbysund" value="EGT1EGST,M3.5.0/0,M10.5.0/1" />
|
||||
<zone name="America/Shiprock" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||
<zone name="America/St_Barthelemy" value="AST4" />
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
<zone name="America/Santarem" value="BRT3" />
|
||||
<zone name="America/Santiago" value="CLST" />
|
||||
<zone name="America/Santo_Domingo" value="AST4" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3BRST,M10.3.0/0,M2.3.0/0" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3" />
|
||||
<zone name="America/Scoresbysund" value="EGT1EGST,M3.5.0/0,M10.5.0/1" />
|
||||
<zone name="America/Shiprock" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||
<zone name="America/Sitka" value="AKST9AKDT,M3.2.0,M11.1.0" />
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
<zone name="America/Rosario" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||
<zone name="America/Santiago" value="CLST" />
|
||||
<zone name="America/Santo_Domingo" value="AST4" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3BRST,M10.2.0/0,M2.3.0/0" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3" />
|
||||
<zone name="America/Scoresbysund" value="EGT1EGST,M3.5.0/0,M10.5.0/1" />
|
||||
<zone name="America/Shiprock" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||
<zone name="America/St_Barthelemy" value="AST4" />
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
<zone name="America/Rosario" value="ART3ARST,M10.1.0/0,M3.3.0/0" />
|
||||
<zone name="America/Santiago" value="CLST" />
|
||||
<zone name="America/Santo_Domingo" value="AST4" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3BRST,M10.2.0/0,M2.3.0/0" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3" />
|
||||
<zone name="America/Scoresbysund" value="EGT1EGST,M3.5.0/0,M10.5.0/1" />
|
||||
<zone name="America/Shiprock" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||
<zone name="America/St_Barthelemy" value="AST4" />
|
||||
|
||||
@@ -18,5 +18,7 @@
|
||||
<param name="adjust-bitrate" value="0"/>
|
||||
<!-- force OA when originating -->
|
||||
<param name="force-oa" value="0"/>
|
||||
<!-- don't mirror mode-set in SDP answer, but use our own (default-bitrate). -->
|
||||
<param name="mode-set-overwrite" value="0"/>
|
||||
</settings>
|
||||
</configuration>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<param name="complexity" value="10"/>
|
||||
<param name="use-jb-lookahead" value="true"/>
|
||||
<param name="keep-fec-enabled" value="true"/>
|
||||
<param name="adjust-bitrate" value="true"/>
|
||||
<param name="adjust-bitrate" value="true"/>
|
||||
<param name="mono" value="0"/>
|
||||
</settings>
|
||||
</configuration>
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
<zone name="America/Santarem" value="BRT3" />
|
||||
<zone name="America/Santiago" value="CLST" />
|
||||
<zone name="America/Santo_Domingo" value="AST4" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3BRST,M10.3.0/0,M2.3.0/0" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3" />
|
||||
<zone name="America/Scoresbysund" value="EGT1EGST,M3.5.0/0,M10.5.0/1" />
|
||||
<zone name="America/Shiprock" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||
<zone name="America/Sitka" value="AKST9AKDT,M3.2.0,M11.1.0" />
|
||||
|
||||
@@ -216,6 +216,14 @@
|
||||
<!-- TLS ciphers default: ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH -->
|
||||
<param name="tls-ciphers" value="$${sip_tls_ciphers}"/>
|
||||
|
||||
<!--
|
||||
Connect timeout for outgoing requests using TLS (in milliseconds).
|
||||
Set the timeout and SIP engine will try again sending an outgoing request
|
||||
and when possible - using an alternative address (DNS failover).
|
||||
Default - 0 (disabled)
|
||||
-->
|
||||
<!-- <param name="tls-orq-connect-timeout" value="3000" /> -->
|
||||
|
||||
<!-- 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"/>-->
|
||||
|
||||
@@ -18,5 +18,7 @@
|
||||
<param name="adjust-bitrate" value="0"/>
|
||||
<!-- force OA when originating -->
|
||||
<param name="force-oa" value="0"/>
|
||||
<!-- don't mirror mode-set in SDP answer, but use our own (default-bitrate). -->
|
||||
<param name="mode-set-overwrite" value="0"/>
|
||||
</settings>
|
||||
</configuration>
|
||||
|
||||
@@ -122,6 +122,7 @@
|
||||
<!-- <load module="mod_v8"/> -->
|
||||
<!-- <load module="mod_perl"/> -->
|
||||
<!-- <load module="mod_python"/> -->
|
||||
<!-- <load module="mod_python3"/> -->
|
||||
<!-- <load module="mod_java"/> -->
|
||||
<load module="mod_lua"/>
|
||||
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
<!-- Max capture rate, 8000, 12000, 16000, 24000 and 48000 are valid options -->
|
||||
<!--<param name="sprop-maxcapturerate" value="0"/>-->
|
||||
<!-- Enable automatic bitrate variation during the call based on RTCP feedback -->
|
||||
<!--<param name="adjust-bitrate" value="1"/>-->
|
||||
<!--<param name="adjust-bitrate" value="1"/>-->
|
||||
<!-- will enforce mono even if the remote party wants stereo. must be used in conjunction with param "max-audio-channels" set to 1 in switch.conf.xml. -->
|
||||
<param name="mono" value="0"/>
|
||||
</settings>
|
||||
</configuration>
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
<fax-settings>
|
||||
<param name="use-ecm" value="true"/>
|
||||
<param name="verbose" value="false"/>
|
||||
<!--param name="verbose-log-level" value="INFO"/-->
|
||||
<param name="disable-v17" value="false"/>
|
||||
<param name="ident" value="SpanDSP Fax Ident"/>
|
||||
<param name="header" value="SpanDSP Fax Header"/>
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
<zone name="America/Santarem" value="BRT3" />
|
||||
<zone name="America/Santiago" value="CLT3" />
|
||||
<zone name="America/Santo_Domingo" value="AST4" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3BRST,M10.3.0/0,M2.3.0/0" />
|
||||
<zone name="America/Sao_Paulo" value="BRT3" />
|
||||
<zone name="America/Scoresbysund" value="EGT1EGST,M3.5.0/0,M10.5.0/1" />
|
||||
<zone name="America/Shiprock" value="MST7MDT,M3.2.0,M11.1.0" />
|
||||
<zone name="America/Sitka" value="AKST9AKDT,M3.2.0,M11.1.0" />
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
<settings>
|
||||
<param name="debug" value="0"/>
|
||||
<!-- <param name="kslog" value="true"/> -->
|
||||
<!-- seconds to wait before hanging up a disconnected channel -->
|
||||
<!-- <param name="detach-timeout-sec" value="120"/> -->
|
||||
<!-- enable broadcasting all FreeSWITCH events in Verto -->
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
<!-- <param name="bitpacking" value="aal2"/> -->
|
||||
<!--max number of open dialogs in proceeding -->
|
||||
<!--<param name="max-proceeding" value="1000"/>-->
|
||||
<!--max number of receiving requests per second (Default: 1000, 0 - unlimited) -->
|
||||
<!--<param name="max-recv-requests-per-second" value="0"/>-->
|
||||
<!--session timers for all call to expire after the specified seconds -->
|
||||
<!--<param name="session-timeout" value="1800"/>-->
|
||||
<!--<param name="multiple-registrations" value="true"/>-->
|
||||
|
||||
@@ -172,6 +172,8 @@
|
||||
<!-- <param name="bitpacking" value="aal2"/> -->
|
||||
<!--max number of open dialogs in proceeding -->
|
||||
<!--<param name="max-proceeding" value="1000"/>-->
|
||||
<!--max number of receiving requests per second (Default: 1000, 0 - unlimited) -->
|
||||
<!--<param name="max-recv-requests-per-second" value="0"/> -->
|
||||
<!--session timers for all call to expire after the specified seconds -->
|
||||
<!--<param name="session-timeout" value="1800"/>-->
|
||||
<!-- Can be 'true' or 'contact' -->
|
||||
@@ -216,6 +218,14 @@
|
||||
<!-- TLS ciphers default: ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH -->
|
||||
<param name="tls-ciphers" value="$${sip_tls_ciphers}"/>
|
||||
|
||||
<!--
|
||||
Connect timeout for outgoing requests using TLS (in milliseconds).
|
||||
Set the timeout and SIP engine will try again sending an outgoing request
|
||||
and when possible - using an alternative address (DNS failover).
|
||||
Default - 0 (disabled)
|
||||
-->
|
||||
<!-- <param name="tls-orq-connect-timeout" value="3000" /> -->
|
||||
|
||||
<!-- 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"/>-->
|
||||
|
||||
203
configure.ac
203
configure.ac
@@ -3,10 +3,10 @@
|
||||
|
||||
# Must change all of the below together
|
||||
# For a release, set revision for that tagged release as well and uncomment
|
||||
AC_INIT([freeswitch], [1.10.6-release], bugs@freeswitch.org)
|
||||
AC_INIT([freeswitch], [1.10.7-release], bugs@freeswitch.org)
|
||||
AC_SUBST(SWITCH_VERSION_MAJOR, [1])
|
||||
AC_SUBST(SWITCH_VERSION_MINOR, [10])
|
||||
AC_SUBST(SWITCH_VERSION_MICRO, [6-release])
|
||||
AC_SUBST(SWITCH_VERSION_MICRO, [7-release])
|
||||
AC_SUBST(SWITCH_VERSION_REVISION, [])
|
||||
AC_SUBST(SWITCH_VERSION_REVISION_HUMAN, [])
|
||||
|
||||
@@ -598,7 +598,7 @@ AC_ARG_ENABLE(srtp,
|
||||
AM_CONDITIONAL([ENABLE_SRTP],[test "${enable_srtp}" = "yes"])
|
||||
|
||||
have_openal=no
|
||||
AC_CHECK_LIB(openal, alMidiGainSOFT, [have_openal="yes"])
|
||||
AC_CHECK_LIB(openal, alcLoopbackOpenDeviceSOFT, [have_openal="yes"])
|
||||
AM_CONDITIONAL([HAVE_OPENAL],[test "${have_openal}" = "yes"])
|
||||
|
||||
AC_ARG_ENABLE(zrtp,
|
||||
@@ -725,7 +725,7 @@ PKG_CHECK_MODULES([SPANDSP], [spandsp >= 3.0],[
|
||||
AC_MSG_ERROR([no usable spandsp; please install spandsp3 devel package or equivalent])
|
||||
])
|
||||
|
||||
PKG_CHECK_MODULES([SOFIA_SIP], [sofia-sip-ua >= 1.13.3],[
|
||||
PKG_CHECK_MODULES([SOFIA_SIP], [sofia-sip-ua >= 1.13.6],[
|
||||
AM_CONDITIONAL([HAVE_SOFIA_SIP],[true])],[
|
||||
AC_MSG_ERROR([no usable sofia-sip; please install sofia-sip-ua devel package or equivalent])
|
||||
])
|
||||
@@ -838,6 +838,10 @@ PKG_CHECK_MODULES([AMRWB], [opencore-amrwb >= 0.1.0 vo-amrwbenc >= 0.1.0],[
|
||||
AM_CONDITIONAL([HAVE_AMRWB],[true])],[
|
||||
AC_MSG_RESULT([no]); AM_CONDITIONAL([HAVE_AMRWB],[false])])
|
||||
|
||||
PKG_CHECK_MODULES([STIRSHAKEN], [stirshaken],[
|
||||
AM_CONDITIONAL([HAVE_STIRSHAKEN],[true])],[
|
||||
AC_MSG_RESULT([no]); AM_CONDITIONAL([HAVE_STIRSHAKEN],[false])])
|
||||
|
||||
AC_CHECK_LIB(apr-1, apr_pool_mutex_set, use_system_apr=yes, use_system_apr=no)
|
||||
AM_CONDITIONAL([SYSTEM_APR],[test "${use_system_apr}" = "yes"])
|
||||
AC_CHECK_LIB(aprutil-1, apr_queue_pop_timeout, use_system_aprutil=yes, use_system_aprutil=no)
|
||||
@@ -1404,7 +1408,9 @@ PKG_CHECK_MODULES([VLC], [libvlc >= 2.1.0],[
|
||||
|
||||
PKG_CHECK_MODULES([OPENCV], [opencv >= 2.4.5],[
|
||||
AM_CONDITIONAL([HAVE_OPENCV],[true])],[
|
||||
AC_MSG_RESULT([no]); AM_CONDITIONAL([HAVE_OPENCV],[false])])
|
||||
PKG_CHECK_MODULES([OPENCV], [opencv4 >= 2.4.5],[
|
||||
AM_CONDITIONAL([HAVE_OPENCV],[true])],[
|
||||
AC_MSG_RESULT([no]); AM_CONDITIONAL([HAVE_OPENCV],[false])])])
|
||||
|
||||
PKG_CHECK_MODULES([OPUSFILE_DECODE], [opusfile >= 0.5],[
|
||||
AM_CONDITIONAL([HAVE_OPUSFILE_DECODE],[true])],[
|
||||
@@ -1572,6 +1578,17 @@ AS_IF([test "x$enable_core_libedit_support" != "xno"],[
|
||||
AC_MSG_ERROR([You need to either install libedit-dev (>= 2.11) or configure with --disable-core-libedit-support])
|
||||
])])])
|
||||
|
||||
AC_ARG_ENABLE(systemd,
|
||||
[AS_HELP_STRING([--enable-systemd], [Compile with systemd notify support])])
|
||||
|
||||
AS_IF([test "x$enable_systemd" = "xyes"],[
|
||||
PKG_CHECK_MODULES([SYSTEMD], [libsystemd >= 219], [
|
||||
AC_DEFINE([HAVE_SYSTEMD], [1], [Define to 1 if systemd is available])])
|
||||
])
|
||||
|
||||
AC_SUBST(SYSTEMD_LIBS)
|
||||
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl - OpenLDAP SDK
|
||||
dnl ---------------------------------------------------------------------------
|
||||
@@ -1698,7 +1715,7 @@ if test "x$ac_cv_have_php" != "xno" -a "x$ac_cv_have_php_config" != "xno"; then
|
||||
fi
|
||||
|
||||
#
|
||||
# Python checks for mod_python
|
||||
# Python checks for mod_python (scroll down to see python3 checks for mod_python3)
|
||||
#
|
||||
AC_ARG_WITH(
|
||||
[python],
|
||||
@@ -1818,6 +1835,127 @@ else
|
||||
AC_MSG_WARN([python support disabled, building mod_python will fail!])
|
||||
fi
|
||||
|
||||
#
|
||||
# Python3 checks for mod_python3
|
||||
#
|
||||
AC_ARG_WITH(
|
||||
[python3],
|
||||
[AS_HELP_STRING([--with-python3], [Use system provided version of python3 (default: try)])],
|
||||
[with_python3="$withval"],
|
||||
[with_python3="try"]
|
||||
)
|
||||
|
||||
if test "$with_python3" != "no"
|
||||
then
|
||||
save_CFLAGS="$CFLAGS"
|
||||
save_LIBS="$LIBS"
|
||||
|
||||
if test "$with_python3" != "yes" -a "$with_python3" != "try" ; then
|
||||
AC_MSG_CHECKING([for python3])
|
||||
if test ! -x "$with_python3" ; then
|
||||
AC_MSG_ERROR([Specified python3 does not exist or is not executable: $with_python3])
|
||||
fi
|
||||
AC_MSG_RESULT([$with_python3])
|
||||
AC_SUBST([PYTHON3], ["$with_python3"])
|
||||
else
|
||||
AC_PATH_PROG([PYTHON3], ["python3"], ["no"], ["$PATH:/usr/bin:/usr/local/bin"])
|
||||
fi
|
||||
|
||||
if test "$PYTHON3" != "no" ; then
|
||||
AC_MSG_CHECKING([python3 version])
|
||||
PYTHON3_VER="`$PYTHON3 -V 2>&1 | cut -d' ' -f2`"
|
||||
|
||||
if test -z "$PYTHON3_VER" ; then
|
||||
AC_MSG_ERROR([Unable to detect python3 version])
|
||||
fi
|
||||
AC_MSG_RESULT([$PYTHON3_VER])
|
||||
|
||||
AC_MSG_CHECKING([for python3 distutils])
|
||||
python3_result="`$PYTHON3 -c 'import distutils;' 2>&1`"
|
||||
if test -z "$python3_result" ; then
|
||||
python3_has_distutils="yes"
|
||||
else
|
||||
python3_has_distutils="no"
|
||||
fi
|
||||
AC_MSG_RESULT([$python3_has_distutils])
|
||||
|
||||
if test "$python3_has_distutils" != "no" ; then
|
||||
AC_MSG_CHECKING([location of python3 site-packages])
|
||||
|
||||
PYTHON3_SITE_DIR="`$PYTHON3 -c 'from distutils import sysconfig; print(sysconfig.get_python_lib(0));'`"
|
||||
|
||||
if test -z "$PYTHON3_SITE_DIR" ; then
|
||||
AC_MSG_ERROR([Unable to detect python3 site-packages path])
|
||||
elif test ! -d "$PYTHON3_SITE_DIR" ; then
|
||||
AC_MSG_ERROR([Path $PYTHON3_SITE_DIR returned by python3 does not exist!])
|
||||
fi
|
||||
AC_MSG_RESULT([$PYTHON3_SITE_DIR])
|
||||
AC_SUBST([PYTHON3_SITE_DIR], [$PYTHON3_SITE_DIR])
|
||||
|
||||
#
|
||||
# python3 distutils found, get settings from python3 directly
|
||||
#
|
||||
PYTHON3_CFLAGS="`$PYTHON3 -c 'from distutils import sysconfig; flags = [[\"-I\" + sysconfig.get_python_inc(0), \"-I\" + sysconfig.get_python_inc(1), \" \".join(sysconfig.get_config_var(\"CFLAGS\").split())]]; print(\" \".join(flags));' | sed -e 's/-arch i386//g;s/-arch x86_64//g'`"
|
||||
PYTHON3_LDFLAGS="`$PYTHON3 -c 'from distutils import sysconfig; ldver = sysconfig.get_config_var(\"LDVERSION\"); libs = sysconfig.get_config_var(\"LIBS\").split() + sysconfig.get_config_var(\"SYSLIBS\").split(); libs.append(\"-lpython\" + [[ldver,sysconfig.get_config_var(\"VERSION\")]][[ldver==None]]); print(\" \".join(libs));'`"
|
||||
PYTHON3_LIB="`$PYTHON3 -c 'from distutils import sysconfig; ldver = sysconfig.get_config_var(\"LDVERSION\"); print(\"python\" + [[ldver,sysconfig.get_config_var(\"VERSION\")]][[ldver==None]]);'`"
|
||||
PYTHON3_LIBDIR="`$PYTHON3 -c 'from distutils import sysconfig; print(sysconfig.get_config_var(\"LIBDIR\"));'`"
|
||||
|
||||
# handle python3 being installed into /usr/local
|
||||
AC_MSG_CHECKING([python3 libdir])
|
||||
if test -z "`echo $PYTHON3_LIBDIR | grep "/usr/lib"`" ; then
|
||||
PYTHON3_LDFLAGS="-L$PYTHON3_LIBDIR $PYTHON3_LDFLAGS"
|
||||
LIBS="-L$PYTHON3_LIBDIR $LIBS"
|
||||
fi
|
||||
AC_MSG_RESULT([$PYTHON3_LIBDIR])
|
||||
|
||||
# check libpython3
|
||||
AC_CHECK_LIB([$PYTHON3_LIB], [main], [has_libpython3="yes"], [has_libpython3="no"])
|
||||
|
||||
if test "$has_libpython3" = "no" ; then
|
||||
AS_IF([test "$with_python3" = "try"],
|
||||
[AC_MSG_WARN([$PYTHON3_LIB is unusable])],
|
||||
[AC_MSG_ERROR([$PYTHON3_LIB is unusable])]
|
||||
)
|
||||
fi
|
||||
|
||||
# check whether system libpython3 is usable and has threads support
|
||||
CFLAGS="$PYTHON3_CFLAGS"
|
||||
LIBS="$PYTHON3_LDFLAGS"
|
||||
AC_CHECK_FUNC([PyThread_init_thread], [python3_has_threads="yes"], [python3_has_threads="no"])
|
||||
|
||||
if test "$python3_has_threads" = "no"; then
|
||||
AS_IF([test "$with_python3" = "try"],
|
||||
[AC_MSG_WARN([Your python3 lacks threads support, can not build mod_python3])],
|
||||
[AC_MSG_ERROR([Your python3 lacks threads support, can not build mod_python3])]
|
||||
)
|
||||
else
|
||||
AC_MSG_NOTICE([Your python3 seems OK, do not forget to enable mod_python3 in modules.conf])
|
||||
AC_SUBST([PYTHON3_CFLAGS], [$PYTHON3_CFLAGS])
|
||||
AC_SUBST([PYTHON3_LDFLAGS], [$PYTHON3_LDFLAGS])
|
||||
fi
|
||||
else
|
||||
AS_IF([test "$with_python3" = "try"],
|
||||
[AC_MSG_WARN([Could not find or use python3 distutils module: $python3_result])],
|
||||
[AC_MSG_ERROR([Could not find or use python3 distutils module: $python3_result])]
|
||||
)
|
||||
fi
|
||||
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
unset python3_has_threads
|
||||
unset python3_has_distutils
|
||||
unset python3_result
|
||||
else
|
||||
AS_IF([test "$with_python3" = "try"],
|
||||
[AC_MSG_WARN([Could not find python3, mod_python3 will not build, use --with-python3 to specify the location])],
|
||||
[AC_MSG_ERROR([Could not find python3, use --with-python3 to specify the location])]
|
||||
)
|
||||
fi
|
||||
else
|
||||
AC_MSG_WARN([python3 support disabled, building mod_python3 will fail!])
|
||||
fi
|
||||
|
||||
#
|
||||
# SNMP checks for mod_snmp
|
||||
#
|
||||
@@ -1848,6 +1986,55 @@ if test "${enable_address_sanitizer}" = "yes"; then
|
||||
APR_ADDTO(LDFLAGS, -fsanitize=address)
|
||||
fi
|
||||
|
||||
# Enable HEAP profiler (requires libgoogle-perftools-dev package)
|
||||
AC_ARG_ENABLE(heap_profiler,
|
||||
[AC_HELP_STRING([--enable-heap-profiler],[build with google heap profiler])],
|
||||
[enable_heap_profiler="$enable_heap_profiler"],
|
||||
[enable_heap_profiler="no"])
|
||||
|
||||
# Enable CPU profiler (requires libgoogle-perftools-dev package)
|
||||
AC_ARG_ENABLE(cpu_profiler,
|
||||
[AC_HELP_STRING([--enable-cpu-profiler],[build with google cpu profiler])],
|
||||
[enable_cpu_profiler="$enable_cpu_profiler"],
|
||||
[enable_cpu_profiler="no"])
|
||||
|
||||
PKG_CHECK_MODULES([TCMALLOC], [libtcmalloc], [have_tcmalloc=yes], [have_tcmalloc=no])
|
||||
|
||||
if test "${enable_heap_profiler}" = "yes" || test "${enable_cpu_profiler}" = "yes"; then
|
||||
if test "x$have_tcmalloc" != "xyes" ; then
|
||||
AC_MSG_ERROR([You must install libgoogle-perftools-dev in order to use heap or cpu profiler])
|
||||
fi
|
||||
fi
|
||||
|
||||
# WARNING: When both enabled you can NOT link them statically and MUST use the special library
|
||||
if test "${enable_heap_profiler}" = "yes" && test "${enable_cpu_profiler}" = "yes"; then
|
||||
APR_ADDTO(CFLAGS, -ltcmalloc_and_profiler)
|
||||
APR_ADDTO(CXXFLAGS, -ltcmalloc_and_profiler)
|
||||
APR_ADDTO(LDFLAGS, -ltcmalloc_and_profiler)
|
||||
else
|
||||
if test "${enable_heap_profiler}" = "yes"; then
|
||||
APR_ADDTO(CFLAGS, -ltcmalloc)
|
||||
APR_ADDTO(CXXFLAGS, -ltcmalloc)
|
||||
APR_ADDTO(LDFLAGS, -ltcmalloc)
|
||||
fi
|
||||
|
||||
if test "${enable_cpu_profiler}" = "yes"; then
|
||||
APR_ADDTO(CFLAGS, -lprofiler)
|
||||
APR_ADDTO(CXXFLAGS, -lprofiler)
|
||||
APR_ADDTO(LDFLAGS, -lprofiler)
|
||||
fi
|
||||
fi
|
||||
|
||||
# Enable fake dlclose
|
||||
AC_ARG_ENABLE(fake_dlclose,
|
||||
[AC_HELP_STRING([--enable-fake-dlclose],[Do not unload dynamic libraries])],
|
||||
[enable_fake_dlclose="$enable_fake_dlclose"],
|
||||
[enable_fake_dlclose="no"])
|
||||
|
||||
if test "${enable_fake_dlclose}" = "yes"; then
|
||||
APR_ADDTO(SWITCH_AM_CFLAGS, -DHAVE_FAKE_DLCLOSE)
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(,
|
||||
[AC_HELP_STRING([--enable-pool-sanitizer],[build with sanitizer friendly pool behavior])],
|
||||
[enable_pool_sanitizer="$enable_pool_sanitizer"],
|
||||
@@ -2008,6 +2195,7 @@ AC_CONFIG_FILES([Makefile
|
||||
src/mod/languages/mod_managed/Makefile
|
||||
src/mod/languages/mod_perl/Makefile
|
||||
src/mod/languages/mod_python/Makefile
|
||||
src/mod/languages/mod_python3/Makefile
|
||||
src/mod/languages/mod_v8/Makefile
|
||||
src/mod/languages/mod_yaml/Makefile
|
||||
src/mod/languages/mod_basic/Makefile
|
||||
@@ -2074,7 +2262,7 @@ AM_CONDITIONAL(HAVE_G729, [ test -d ${switch_srcdir}/libs/libg729 ])
|
||||
LIBTOOL='$(SHELL) $(switch_builddir)/libtool'
|
||||
TOUCH_TARGET='if test -f "$@";then touch "$@";fi;'
|
||||
CONF_MODULES='$$(grep -v "\#" $(switch_builddir)/modules.conf | sed "s/|.*//" | sed -e "s|^.*/||" | sort | uniq )'
|
||||
CONF_DISABLED_MODULES='$$(grep "\#" $(switch_builddir)/modules.conf | grep -v "\#\#" | sed "s/|.*//" | sed -e "s|^.*/||" | sort | uniq )'
|
||||
CONF_DISABLED_MODULES='$$(grep "\#" $(switch_builddir)/modules.conf | grep -v "\#\#" | sed "s/|.*//" | sed "s/\#/\#\//"| sed -e "s|^.*/||" | sort | uniq )'
|
||||
OUR_MODS='$$(if test -z "$(MODULES)" ; then tmp_mods="$(CONF_MODULES)"; else tmp_mods="$(MODULES)" ; fi ; mods="$$(for i in $$tmp_mods ; do echo $$i-all ; done )"; echo $$mods )'
|
||||
OUR_CLEAN_MODS='$$(if test -z "$(MODULES)" ; then tmp_mods="$(CONF_MODULES)"; else tmp_mods="$(MODULES)" ; fi ; mods="$$(for i in $$tmp_mods ; do echo $$i-clean ; done )"; echo $$mods )'
|
||||
OUR_INSTALL_MODS='$$(if test -z "$(MODULES)" ; then tmp_mods="$(CONF_MODULES)"; else tmp_mods="$(MODULES)" ; fi ; mods="$$(for i in $$tmp_mods ; do echo $$i-install ; done)"; echo $$mods )'
|
||||
@@ -2120,7 +2308,6 @@ if test "$use_system_aprutil" != "yes"; then
|
||||
fi
|
||||
AC_CONFIG_SUBDIRS([libs/iksemel])
|
||||
AC_CONFIG_SUBDIRS([libs/libdingaling])
|
||||
AC_CONFIG_SUBDIRS([libs/freetdm])
|
||||
AC_CONFIG_SUBDIRS([libs/unimrcp])
|
||||
if test "x${enable_zrtp}" = "xyes"; then
|
||||
AC_CONFIG_SUBDIRS([libs/libzrtp])
|
||||
|
||||
14
debian/bootstrap.sh
vendored
14
debian/bootstrap.sh
vendored
@@ -29,7 +29,7 @@ conf_dir="../conf"
|
||||
lang_dir="../conf/vanilla/lang"
|
||||
fs_description="FreeSWITCH is a scalable open source cross-platform telephony platform designed to route and interconnect popular communication protocols using audio, video, text or any other form of media."
|
||||
mod_build_depends="." mod_depends="." mod_recommends="." mod_suggests="."
|
||||
supported_debian_distros="wheezy jessie stretch buster sid"
|
||||
supported_debian_distros="wheezy jessie stretch buster bullseye sid"
|
||||
supported_ubuntu_distros="trusty utopic xenial"
|
||||
supported_distros="$supported_debian_distros $supported_ubuntu_distros"
|
||||
avoid_mods=(
|
||||
@@ -299,7 +299,7 @@ print_source_control () {
|
||||
esac
|
||||
local debhelper_dep="debhelper (>= 8.0.0)"
|
||||
if [ ${use_sysvinit} = "false" ]; then
|
||||
debhelper_dep=${debhelper_dep}", dh-systemd"
|
||||
debhelper_dep=${debhelper_dep}", dh-systemd | debhelper (>= 8.0.0)"
|
||||
fi
|
||||
cat <<EOF
|
||||
Source: freeswitch
|
||||
@@ -325,14 +325,14 @@ Build-Depends:
|
||||
# configure options
|
||||
libssl1.0-dev | libssl-dev, unixodbc-dev, libpq-dev,
|
||||
libncurses5-dev, libjpeg62-turbo-dev | libjpeg-turbo8-dev | libjpeg62-dev | libjpeg8-dev,
|
||||
python-dev, python-all-dev, python-support (>= 0.90) | dh-python, erlang-dev, libtpl-dev (>= 1.5),
|
||||
python-dev | python-dev-is-python2, python3-dev, python-all-dev, python-support (>= 0.90) | dh-python, erlang-dev, libtpl-dev (>= 1.5),
|
||||
# documentation
|
||||
doxygen,
|
||||
# for APR (not essential for build)
|
||||
uuid-dev, libexpat1-dev, libgdbm-dev, libdb-dev,
|
||||
# used by many modules
|
||||
libcurl4-openssl-dev | libcurl4-gnutls-dev | libcurl-dev,
|
||||
bison, zlib1g-dev, libsofia-sip-ua-dev (>= 1.13.3),
|
||||
bison, zlib1g-dev, libsofia-sip-ua-dev (>= 1.13.6),
|
||||
libspandsp3-dev,
|
||||
# used to format the private freeswitch apt-repo key properly
|
||||
gnupg,
|
||||
@@ -371,7 +371,7 @@ Description: Cross-Platform Scalable Multi-Protocol Soft Switch
|
||||
|
||||
Package: libfreeswitch1
|
||||
Architecture: amd64 armhf
|
||||
Depends: \${shlibs:Depends}, \${misc:Depends}
|
||||
Depends: \${shlibs:Depends}, \${misc:Depends}, libsofia-sip-ua0 (>= 1.13.6)
|
||||
Recommends:
|
||||
Suggests: libfreeswitch1-dbg
|
||||
Conflicts: freeswitch-all (<= 1.6.7)
|
||||
@@ -683,7 +683,7 @@ Depends: \${misc:Depends}, freeswitch (= \${binary:Version}),
|
||||
freeswitch-mod-java (= \${binary:Version}),
|
||||
freeswitch-mod-lua (= \${binary:Version}),
|
||||
freeswitch-mod-perl (= \${binary:Version}),
|
||||
freeswitch-mod-python (= \${binary:Version}),
|
||||
freeswitch-mod-python3 (= \${binary:Version}),
|
||||
freeswitch-mod-yaml (= \${binary:Version}),
|
||||
freeswitch-mod-console (= \${binary:Version}),
|
||||
freeswitch-mod-logfile (= \${binary:Version}),
|
||||
@@ -922,7 +922,7 @@ Depends: \${misc:Depends}, freeswitch (= \${binary:Version}),
|
||||
freeswitch-mod-java-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-lua-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-perl-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-python-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-python3-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-yaml-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-console-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-logfile-dbg (= \${binary:Version}),
|
||||
|
||||
9
debian/control-modules
vendored
9
debian/control-modules
vendored
@@ -492,6 +492,7 @@ Description: Adds mod_verto.
|
||||
Adds mod_verto.
|
||||
Build-Depends: libperl-dev
|
||||
Build-Depends-Buster: libperl-dev, libgdbm-compat-dev
|
||||
Build-Depends-Bullseye: libperl-dev, libgdbm-compat-dev
|
||||
|
||||
## mod/event_handlers
|
||||
|
||||
@@ -665,11 +666,17 @@ Description: mod_perl
|
||||
Adds mod_perl.
|
||||
Build-Depends: libperl-dev
|
||||
Build-Depends-Buster: libperl-dev, libgdbm-compat-dev
|
||||
Build-Depends-Bullseye: libperl-dev, libgdbm-compat-dev
|
||||
|
||||
Module: languages/mod_python
|
||||
Description: mod_python
|
||||
Adds mod_python.
|
||||
Build-Depends: python-dev
|
||||
Build-Depends: python-dev | python-dev-is-python2
|
||||
|
||||
Module: languages/mod_python3
|
||||
Description: mod_python3
|
||||
Adds mod_python3.
|
||||
Build-Depends: python3-dev
|
||||
|
||||
Module: languages/mod_v8
|
||||
Description: mod_v8
|
||||
|
||||
2
debian/freeswitch-mod-python.install.tmpl
vendored
2
debian/freeswitch-mod-python.install.tmpl
vendored
@@ -1 +1 @@
|
||||
/usr/lib/python*/*-packages/freeswitch.py
|
||||
/usr/lib/python2*/*-packages/freeswitch.py
|
||||
|
||||
1
debian/freeswitch-mod-python3.install.tmpl
vendored
Normal file
1
debian/freeswitch-mod-python3.install.tmpl
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/usr/lib/python3*/*-packages/freeswitch.py
|
||||
4
debian/rules
vendored
4
debian/rules
vendored
@@ -73,7 +73,7 @@ override_dh_auto_clean:
|
||||
./configure -C --enable-portable-binary --disable-dependency-tracking \
|
||||
--host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) \
|
||||
--prefix=/usr --localstatedir=/var --sysconfdir=/etc \
|
||||
--with-gnu-ld --with-python --with-erlang --with-openssl \
|
||||
--with-gnu-ld --with-python --with-python3 --with-erlang --with-openssl \
|
||||
--enable-core-odbc-support --enable-zrtp
|
||||
touch $@
|
||||
|
||||
@@ -85,6 +85,7 @@ override_dh_auto_configure: .stamp-configure
|
||||
make iksemel-dep
|
||||
make -j$(NJOBS)
|
||||
make -C libs/esl pymod
|
||||
make -C libs/esl py3mod
|
||||
make -C libs/esl perlmod
|
||||
touch $@
|
||||
|
||||
@@ -99,6 +100,7 @@ override_dh_strip:
|
||||
override_dh_auto_install:
|
||||
dh_auto_install
|
||||
dh_auto_install -- -C libs/esl pymod-install
|
||||
dh_auto_install -- -C libs/esl py3mod-install
|
||||
dh_auto_install -- -C libs/esl perlmod-install
|
||||
rm -f debian/tmp/usr/share/freeswitch/grammar/model/communicator/COPYING
|
||||
|
||||
|
||||
12
debian/util.sh
vendored
12
debian/util.sh
vendored
@@ -46,9 +46,9 @@ find_distro () {
|
||||
case "$1" in
|
||||
experimental) echo "sid";;
|
||||
unstable) echo "sid";;
|
||||
testing) echo "buster";;
|
||||
stable) echo "stretch";;
|
||||
oldstable) echo "jessie";;
|
||||
testing) echo "bullseye";;
|
||||
stable) echo "buster";;
|
||||
oldstable) echo "stretch";;
|
||||
*) echo "$1";;
|
||||
esac
|
||||
}
|
||||
@@ -56,9 +56,9 @@ find_distro () {
|
||||
find_suite () {
|
||||
case "$1" in
|
||||
sid) echo "unstable";;
|
||||
buster) echo "testing";;
|
||||
stretch) echo "stable";;
|
||||
jessie) echo "oldstable";;
|
||||
bullseye) echo "testing";;
|
||||
buster) echo "stable";;
|
||||
stretch) echo "oldstable";;
|
||||
*) echo "$1";;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
%define build_mod_esl 0
|
||||
%define build_mod_rayo 1
|
||||
%define build_mod_ssml 1
|
||||
%define build_mod_opusfile 0
|
||||
%define build_mod_v8 0
|
||||
|
||||
%{?with_sang_tc:%define build_sng_tc 1 }
|
||||
@@ -46,7 +45,6 @@
|
||||
%{?with_py26_esl:%define build_py26_esl 1 }
|
||||
%{?with_timerfd:%define build_timerfd 1 }
|
||||
%{?with_mod_esl:%define build_mod_esl 1 }
|
||||
%{?with_mod_opusfile:%define build_mod_opusfile 1 }
|
||||
%{?with_mod_v8:%define build_mod_v8 1 }
|
||||
|
||||
%define nonparsedversion 1.7.0
|
||||
@@ -142,7 +140,7 @@ BuildRequires: curl-devel >= 7.19
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: libtool >= 1.5.17
|
||||
BuildRequires: openssl-devel >= 1.0.1e
|
||||
BuildRequires: sofia-sip-devel >= 1.13.3
|
||||
BuildRequires: sofia-sip-devel >= 1.13.6
|
||||
BuildRequires: spandsp3-devel >= 3.0
|
||||
BuildRequires: pcre-devel
|
||||
BuildRequires: speex-devel
|
||||
@@ -170,6 +168,19 @@ Requires: zlib
|
||||
Requires: libxml2
|
||||
Requires: libsndfile
|
||||
|
||||
%if 0%{?rhel} == 7
|
||||
# to build mariadb module required gcc >= 4.9 (more details GH #1046)
|
||||
# On CentOS 7 dist you can install fresh gcc using command
|
||||
# yum install centos-release-scl && yum install devtoolset-9
|
||||
BuildRequires: devtoolset-9
|
||||
%endif
|
||||
%if 0%{?rhel} == 8
|
||||
# we want use fresh gcc on RHEL 8 based dists
|
||||
# On CentOS 8 dist you can install fresh gcc using command
|
||||
# dnf install gcc-toolset-9
|
||||
BuildRequires: gcc-toolset-9
|
||||
%endif
|
||||
|
||||
%if 0%{?suse_version} > 800
|
||||
PreReq: %insserv_prereq %fillup_prereq
|
||||
%endif
|
||||
@@ -1094,17 +1105,15 @@ BuildRequires: lame-devel
|
||||
Mod Shout is a FreeSWITCH module to allow you to stream audio from MP3s or a i
|
||||
shoutcast stream.
|
||||
|
||||
%if %{build_mod_opusfile}
|
||||
%package format-mod-opusfile
|
||||
%package format-opusfile
|
||||
Summary: Plays Opus encoded files
|
||||
Group: System/Libraries
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: opusfile >= 0.5
|
||||
BuildRequires: opusfile-devel >= 0.5
|
||||
|
||||
%description format-mod-opusfile
|
||||
%description format-opusfile
|
||||
Mod Opusfile is a FreeSWITCH module to allow you to play Opus encoded files
|
||||
%endif
|
||||
|
||||
%if %{build_mod_ssml}
|
||||
%package format-ssml
|
||||
@@ -1501,14 +1510,11 @@ EVENT_HANDLERS_MODULES+=" event_handlers/mod_rayo"
|
||||
# File and Audio Format Handlers
|
||||
#
|
||||
######################################################################################################################
|
||||
FORMATS_MODULES="formats/mod_local_stream formats/mod_native_file formats/mod_portaudio_stream \
|
||||
FORMATS_MODULES="formats/mod_local_stream formats/mod_native_file formats/mod_opusfile formats/mod_portaudio_stream \
|
||||
formats/mod_shell_stream formats/mod_shout formats/mod_sndfile formats/mod_tone_stream"
|
||||
%if %{build_mod_ssml}
|
||||
FORMATS_MODULES+=" formats/mod_ssml"
|
||||
%endif
|
||||
%if %{build_mod_opusfile}
|
||||
FORMATS_MODULES+=" formats/mod_opusfile"
|
||||
%endif
|
||||
|
||||
######################################################################################################################
|
||||
#
|
||||
@@ -1575,6 +1581,16 @@ export DESTDIR=%{buildroot}/
|
||||
export PKG_CONFIG_PATH=/usr/bin/pkg-config:$PKG_CONFIG_PATH
|
||||
export ACLOCAL_FLAGS="-I /usr/share/aclocal"
|
||||
|
||||
%if 0%{?rhel} == 7
|
||||
# to build mod_mariadb we need gcc >= 4.9 (more details GH #1046)
|
||||
export CFLAGS="$CFLAGS -Wno-error=expansion-to-defined"
|
||||
. /opt/rh/devtoolset-9/enable
|
||||
%endif
|
||||
%if 0%{?rhel} == 8
|
||||
# we want use fresh gcc on RHEL 8 based dists
|
||||
. /opt/rh/gcc-toolset-9/enable
|
||||
%endif
|
||||
|
||||
######################################################################################################################
|
||||
#
|
||||
# Bootstrap, Configure and Build the whole enchilada
|
||||
@@ -1635,6 +1651,15 @@ cd libs/esl
|
||||
#
|
||||
######################################################################################################################
|
||||
%install
|
||||
%if 0%{?rhel} == 7
|
||||
# to build mod_mariadb we need gcc >= 4.9
|
||||
. /opt/rh/devtoolset-9/enable
|
||||
%endif
|
||||
%if 0%{?rhel} == 8
|
||||
# we want use fresh gcc on RHEL 8 based dists
|
||||
. /opt/rh/gcc-toolset-9/enable
|
||||
%endif
|
||||
|
||||
|
||||
%{__make} DESTDIR=%{buildroot} install
|
||||
|
||||
@@ -2317,6 +2342,9 @@ fi
|
||||
%files format-native-file
|
||||
%{MODINSTDIR}/mod_native_file.so*
|
||||
|
||||
%files format-opusfile
|
||||
%{MODINSTDIR}/mod_opusfile.so*
|
||||
|
||||
%files format-portaudio-stream
|
||||
%{MODINSTDIR}/mod_portaudio_stream.so*
|
||||
|
||||
|
||||
BIN
images/cluecon.jpg
Normal file
BIN
images/cluecon.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
BIN
images/cluecon.png
Normal file
BIN
images/cluecon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 113 KiB |
6
libs/.gitignore
vendored
6
libs/.gitignore
vendored
@@ -85,12 +85,6 @@ opal
|
||||
/esl/Release/
|
||||
/flite-*/
|
||||
/freeradius-client-*/
|
||||
/freetdm/build/compile
|
||||
/freetdm/COPYING
|
||||
/freetdm/INSTALL
|
||||
/freetdm/Makefile.in
|
||||
/freetdm/msvc/Debug/
|
||||
/freetdm/msvc/Release/
|
||||
/iksemel/build/compile
|
||||
/iksemel/doc/Makefile
|
||||
/iksemel/doc/Makefile.in
|
||||
|
||||
@@ -29,6 +29,10 @@
|
||||
#include "apr_pools.h"
|
||||
#include "apr_errno.h"
|
||||
|
||||
#if !defined(_ANSI_SOURCE) && defined(_DARWIN_C_SOURCE)
|
||||
#define NSIG __DARWIN_NSIG
|
||||
#endif
|
||||
|
||||
#if APR_HAVE_SIGNAL_H
|
||||
#include <signal.h>
|
||||
#endif
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#include <assert.h> /* assert() */
|
||||
|
||||
#if APR_POOL_DEBUG && APR_HAVE_STDIO_H
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
@@ -433,6 +435,7 @@ APR_DECLARE(apr_hash_t *) apr_hash_merge(apr_pool_t *p,
|
||||
for (k = 0; k <= base->max; k++) {
|
||||
for (iter = base->array[k]; iter; iter = iter->next) {
|
||||
i = iter->hash & res->max;
|
||||
assert(new_vals);
|
||||
new_vals[j].klen = iter->klen;
|
||||
new_vals[j].key = iter->key;
|
||||
new_vals[j].val = iter->val;
|
||||
|
||||
@@ -54,6 +54,7 @@ reswig: swigclean
|
||||
$(MAKE) -C php reswig
|
||||
$(MAKE) -C lua reswig
|
||||
$(MAKE) -C python reswig
|
||||
$(MAKE) -C python3 reswig
|
||||
$(MAKE) -C ruby reswig
|
||||
$(MAKE) -C java reswig
|
||||
$(MAKE) -C managed reswig
|
||||
@@ -63,6 +64,7 @@ swigclean: clean
|
||||
$(MAKE) -C php swigclean
|
||||
$(MAKE) -C lua swigclean
|
||||
$(MAKE) -C python swigclean
|
||||
$(MAKE) -C python3 swigclean
|
||||
$(MAKE) -C ruby swigclean
|
||||
$(MAKE) -C java swigclean
|
||||
$(MAKE) -C managed swigclean
|
||||
@@ -77,7 +79,10 @@ luamod: $(MYLIB)
|
||||
$(MAKE) MYLIB="../$(MYLIB)" SOLINK="$(SOLINK)" CFLAGS="-I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CFLAGS)" CXXFLAGS="-I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CXXFLAGS)" CXX_CFLAGS="$(CXX_CFLAGS)" LUA_CFLAGS="$(LUA_CFLAGS)" LUA_LIBS="$(LUA_LIBS)" -C lua
|
||||
|
||||
pymod: $(MYLIB)
|
||||
$(MAKE) MYLIB="../$(MYLIB)" SOLINK="$(SOLINK)" CFLAGS="-I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CFLAGS)" CXXFLAGS="-I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CXXFLAGS)" CXX_CFLAGS="$(CXX_CFLAGS)" -C python
|
||||
$(MAKE) PYTHON=$(PYTHON) MYLIB="../$(MYLIB)" SOLINK="$(SOLINK)" CFLAGS="-I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CFLAGS)" CXXFLAGS="-I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CXXFLAGS)" CXX_CFLAGS="$(CXX_CFLAGS)" -C python
|
||||
|
||||
py3mod: $(MYLIB)
|
||||
$(MAKE) PYTHON3=$(PYTHON3) MYLIB="../$(MYLIB)" SOLINK="$(SOLINK)" CFLAGS="-I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CFLAGS)" CXXFLAGS="-I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CXXFLAGS)" CXX_CFLAGS="$(CXX_CFLAGS)" -C python3
|
||||
|
||||
tclmod: $(MYLIB)
|
||||
$(MAKE) MYLIB="../$(MYLIB)" SOLINK="$(SOLINK)" CFLAGS="-I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CFLAGS)" CXXFLAGS="-I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CXXFLAGS)" CXX_CFLAGS="$(CXX_CFLAGS)" -C tcl
|
||||
@@ -98,9 +103,12 @@ phpmod-install: phpmod
|
||||
$(MAKE) -C php install
|
||||
|
||||
pymod-install: pymod
|
||||
$(MAKE) -C python install
|
||||
$(MAKE) PYTHON=$(PYTHON) -C python install
|
||||
|
||||
py3mod-install: py3mod
|
||||
$(MAKE) PYTHON3=$(PYTHON3) -C python3 install
|
||||
|
||||
rubymod-install: rubymod
|
||||
$(MAKE) -C ruby install
|
||||
|
||||
everymod: perlmod phpmod luamod pymod rubymod javamod managedmod
|
||||
everymod: perlmod phpmod luamod pymod py3mod rubymod javamod managedmod
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
LOCAL_CFLAGS=`python ./python-config --includes`
|
||||
LOCAL_LDFLAGS=`python ./python-config --ldflags`
|
||||
SITE_DIR=$(DESTDIR)/`python -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)"`
|
||||
LOCAL_CFLAGS=`$(PYTHON) ./python-config --includes`
|
||||
LOCAL_LDFLAGS=`$(PYTHON) ./python-config --ldflags`
|
||||
SITE_DIR=$(DESTDIR)/`$(PYTHON) -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)"`
|
||||
|
||||
all: _ESL.so
|
||||
|
||||
|
||||
132
libs/esl/python3/ESL.py
Normal file
132
libs/esl/python3/ESL.py
Normal file
@@ -0,0 +1,132 @@
|
||||
# This file was automatically generated by SWIG (http://www.swig.org).
|
||||
# Version 3.0.2
|
||||
#
|
||||
# Do not make changes to this file unless you know what you are doing--modify
|
||||
# the SWIG interface file instead.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
from sys import version_info
|
||||
if version_info >= (2,6,0):
|
||||
def swig_import_helper():
|
||||
from os.path import dirname
|
||||
import imp
|
||||
fp = None
|
||||
try:
|
||||
fp, pathname, description = imp.find_module('_ESL', [dirname(__file__)])
|
||||
except ImportError:
|
||||
import _ESL
|
||||
return _ESL
|
||||
if fp is not None:
|
||||
try:
|
||||
_mod = imp.load_module('_ESL', fp, pathname, description)
|
||||
finally:
|
||||
fp.close()
|
||||
return _mod
|
||||
_ESL = swig_import_helper()
|
||||
del swig_import_helper
|
||||
else:
|
||||
import _ESL
|
||||
del version_info
|
||||
def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
|
||||
if (name == "thisown"): return self.this.own(value)
|
||||
if (name == "this"):
|
||||
if type(value).__name__ == 'SwigPyObject':
|
||||
self.__dict__[name] = value
|
||||
return
|
||||
method = class_type.__swig_setmethods__.get(name,None)
|
||||
if method: return method(self,value)
|
||||
if (not static):
|
||||
self.__dict__[name] = value
|
||||
else:
|
||||
raise AttributeError("You cannot add attributes to %s" % self)
|
||||
|
||||
def _swig_setattr(self,class_type,name,value):
|
||||
return _swig_setattr_nondynamic(self,class_type,name,value,0)
|
||||
|
||||
def _swig_getattr(self,class_type,name):
|
||||
if (name == "thisown"): return self.this.own()
|
||||
method = class_type.__swig_getmethods__.get(name,None)
|
||||
if method: return method(self)
|
||||
raise AttributeError(name)
|
||||
|
||||
def _swig_repr(self):
|
||||
try: strthis = "proxy of " + self.this.__repr__()
|
||||
except: strthis = ""
|
||||
return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
|
||||
|
||||
class ESLevent:
|
||||
__swig_setmethods__ = {}
|
||||
__setattr__ = lambda self, name, value: _swig_setattr(self, ESLevent, name, value)
|
||||
__swig_getmethods__ = {}
|
||||
__getattr__ = lambda self, name: _swig_getattr(self, ESLevent, name)
|
||||
__repr__ = _swig_repr
|
||||
__swig_setmethods__["event"] = _ESL.ESLevent_event_set
|
||||
__swig_getmethods__["event"] = _ESL.ESLevent_event_get
|
||||
__swig_setmethods__["serialized_string"] = _ESL.ESLevent_serialized_string_set
|
||||
__swig_getmethods__["serialized_string"] = _ESL.ESLevent_serialized_string_get
|
||||
__swig_setmethods__["mine"] = _ESL.ESLevent_mine_set
|
||||
__swig_getmethods__["mine"] = _ESL.ESLevent_mine_get
|
||||
def __init__(self, *args):
|
||||
this = _ESL.new_ESLevent(*args)
|
||||
try: self.this.append(this)
|
||||
except: self.this = this
|
||||
__swig_destroy__ = _ESL.delete_ESLevent
|
||||
__del__ = lambda self : None;
|
||||
def serialize(self, format=None): return _ESL.ESLevent_serialize(self, format)
|
||||
def setPriority(self, *args): return _ESL.ESLevent_setPriority(self, *args)
|
||||
def getHeader(self, *args): return _ESL.ESLevent_getHeader(self, *args)
|
||||
def getBody(self): return _ESL.ESLevent_getBody(self)
|
||||
def getType(self): return _ESL.ESLevent_getType(self)
|
||||
def addBody(self, *args): return _ESL.ESLevent_addBody(self, *args)
|
||||
def addHeader(self, *args): return _ESL.ESLevent_addHeader(self, *args)
|
||||
def pushHeader(self, *args): return _ESL.ESLevent_pushHeader(self, *args)
|
||||
def unshiftHeader(self, *args): return _ESL.ESLevent_unshiftHeader(self, *args)
|
||||
def delHeader(self, *args): return _ESL.ESLevent_delHeader(self, *args)
|
||||
def firstHeader(self): return _ESL.ESLevent_firstHeader(self)
|
||||
def nextHeader(self): return _ESL.ESLevent_nextHeader(self)
|
||||
ESLevent_swigregister = _ESL.ESLevent_swigregister
|
||||
ESLevent_swigregister(ESLevent)
|
||||
|
||||
class ESLconnection:
|
||||
__swig_setmethods__ = {}
|
||||
__setattr__ = lambda self, name, value: _swig_setattr(self, ESLconnection, name, value)
|
||||
__swig_getmethods__ = {}
|
||||
__getattr__ = lambda self, name: _swig_getattr(self, ESLconnection, name)
|
||||
__repr__ = _swig_repr
|
||||
def __init__(self, *args):
|
||||
this = _ESL.new_ESLconnection(*args)
|
||||
try: self.this.append(this)
|
||||
except: self.this = this
|
||||
__swig_destroy__ = _ESL.delete_ESLconnection
|
||||
__del__ = lambda self : None;
|
||||
def socketDescriptor(self): return _ESL.ESLconnection_socketDescriptor(self)
|
||||
def connected(self): return _ESL.ESLconnection_connected(self)
|
||||
def getInfo(self): return _ESL.ESLconnection_getInfo(self)
|
||||
def send(self, *args): return _ESL.ESLconnection_send(self, *args)
|
||||
def sendRecv(self, *args): return _ESL.ESLconnection_sendRecv(self, *args)
|
||||
def api(self, *args): return _ESL.ESLconnection_api(self, *args)
|
||||
def bgapi(self, *args): return _ESL.ESLconnection_bgapi(self, *args)
|
||||
def sendEvent(self, *args): return _ESL.ESLconnection_sendEvent(self, *args)
|
||||
def sendMSG(self, *args): return _ESL.ESLconnection_sendMSG(self, *args)
|
||||
def recvEvent(self): return _ESL.ESLconnection_recvEvent(self)
|
||||
def recvEventTimed(self, *args): return _ESL.ESLconnection_recvEventTimed(self, *args)
|
||||
def filter(self, *args): return _ESL.ESLconnection_filter(self, *args)
|
||||
def events(self, *args): return _ESL.ESLconnection_events(self, *args)
|
||||
def execute(self, *args): return _ESL.ESLconnection_execute(self, *args)
|
||||
def executeAsync(self, *args): return _ESL.ESLconnection_executeAsync(self, *args)
|
||||
def setAsyncExecute(self, *args): return _ESL.ESLconnection_setAsyncExecute(self, *args)
|
||||
def setEventLock(self, *args): return _ESL.ESLconnection_setEventLock(self, *args)
|
||||
def disconnect(self): return _ESL.ESLconnection_disconnect(self)
|
||||
ESLconnection_swigregister = _ESL.ESLconnection_swigregister
|
||||
ESLconnection_swigregister(ESLconnection)
|
||||
|
||||
|
||||
def eslSetLogLevel(*args):
|
||||
return _ESL.eslSetLogLevel(*args)
|
||||
eslSetLogLevel = _ESL.eslSetLogLevel
|
||||
# This file is compatible with both classic and new-style classes.
|
||||
|
||||
|
||||
28
libs/esl/python3/Makefile
Normal file
28
libs/esl/python3/Makefile
Normal file
@@ -0,0 +1,28 @@
|
||||
LOCAL_CFLAGS=`$(PYTHON3) ./python-config --includes`
|
||||
LOCAL_LDFLAGS=`$(PYTHON3) ./python-config --ldflags`
|
||||
SITE_DIR=$(DESTDIR)/`$(PYTHON3) -c "from distutils.sysconfig import get_python_lib; print (get_python_lib(1))"`
|
||||
|
||||
all: _ESL.so
|
||||
|
||||
esl_wrap.cpp:
|
||||
swig3.0 -module ESL -classic -python -c++ -DMULTIPLICITY -threads -I../src/include -o esl_wrap.cpp ../ESL.i
|
||||
|
||||
esl_wrap.o: esl_wrap.cpp
|
||||
$(CXX) $(CXX_CFLAGS) $(CXXFLAGS) $(LOCAL_CFLAGS) -c esl_wrap.cpp -o esl_wrap.o
|
||||
|
||||
_ESL.so: esl_wrap.o
|
||||
$(CXX) $(SOLINK) esl_wrap.o $(MYLIB) $(LOCAL_LDFLAGS) -o _ESL.so -L. $(LIBS)
|
||||
|
||||
install: _ESL.so
|
||||
mkdir -p $(SITE_DIR)
|
||||
install -m 755 _ESL.so $(SITE_DIR)
|
||||
install -m 755 ESL.py $(SITE_DIR)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.so *~
|
||||
|
||||
swigclean:
|
||||
rm -f esl_wrap.* ESL.so
|
||||
|
||||
reswig: swigclean esl_wrap.cpp
|
||||
|
||||
6128
libs/esl/python3/esl_wrap.cpp
Normal file
6128
libs/esl/python3/esl_wrap.cpp
Normal file
File diff suppressed because it is too large
Load Diff
20
libs/esl/python3/events.py
Normal file
20
libs/esl/python3/events.py
Normal file
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import string
|
||||
import sys
|
||||
|
||||
from ESL import *
|
||||
|
||||
con = ESLconnection("localhost","8021","ClueCon")
|
||||
#are we connected?
|
||||
|
||||
if con.connected:
|
||||
|
||||
con.events("plain", "all");
|
||||
|
||||
while 1:
|
||||
#my $e = $con->recvEventTimed(100);
|
||||
e = con.recvEvent()
|
||||
|
||||
if e:
|
||||
print e.serialize()
|
||||
55
libs/esl/python3/python-config
Normal file
55
libs/esl/python3/python-config
Normal file
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from __future__ import print_function
|
||||
import sys
|
||||
import os
|
||||
import getopt
|
||||
from distutils import sysconfig
|
||||
|
||||
valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags',
|
||||
'ldflags', 'help']
|
||||
|
||||
def exit_with_usage(code=1):
|
||||
print("Usage: %s [%s]" % (sys.argv[0], '|'.join('--'+opt for opt in valid_opts)), file=sys.stderr)
|
||||
sys.exit(code)
|
||||
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], '', valid_opts)
|
||||
except getopt.error:
|
||||
exit_with_usage()
|
||||
|
||||
if not opts:
|
||||
exit_with_usage()
|
||||
|
||||
opt = opts[0][0]
|
||||
|
||||
pyver = sysconfig.get_config_var('LDVERSION')
|
||||
if pyver == None:
|
||||
pyver = sysconfig.get_config_var('VERSION')
|
||||
getvar = sysconfig.get_config_var
|
||||
|
||||
if opt == '--help':
|
||||
exit_with_usage(0)
|
||||
|
||||
elif opt == '--prefix':
|
||||
print(sysconfig.PREFIX)
|
||||
|
||||
elif opt == '--exec-prefix':
|
||||
print(sysconfig.EXEC_PREFIX)
|
||||
|
||||
elif opt in ('--includes', '--cflags'):
|
||||
flags = ['-I' + sysconfig.get_python_inc(),
|
||||
'-I' + sysconfig.get_python_inc(plat_specific=True)]
|
||||
if opt == '--cflags':
|
||||
flags.extend(getvar('CFLAGS').split())
|
||||
print(' '.join(flags))
|
||||
|
||||
elif opt in ('--libs', '--ldflags'):
|
||||
libs = getvar('LIBS').split() + getvar('SYSLIBS').split()
|
||||
libs.append('-lpython'+pyver)
|
||||
# add the prefix/lib/pythonX.Y/config dir, but only if there is no
|
||||
# shared library in prefix/lib/.
|
||||
if opt == '--ldflags' and not getvar('Py_ENABLE_SHARED'):
|
||||
libs.insert(0, '-L' + getvar('LIBPL'))
|
||||
print(' '.join(libs))
|
||||
|
||||
29
libs/esl/python3/server.py
Normal file
29
libs/esl/python3/server.py
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import SocketServer
|
||||
from ESL import *
|
||||
|
||||
class ESLRequestHandler(SocketServer.BaseRequestHandler ):
|
||||
def setup(self):
|
||||
print self.client_address, 'connected!'
|
||||
|
||||
fd = self.request.fileno()
|
||||
print fd
|
||||
|
||||
con = ESLconnection(fd)
|
||||
print "Connected: "
|
||||
print con.connected()
|
||||
if con.connected():
|
||||
|
||||
info = con.getInfo()
|
||||
|
||||
uuid = info.getHeader("unique-id")
|
||||
print uuid
|
||||
con.execute("answer", "", uuid)
|
||||
con.execute("playback", "/ram/swimp.raw", uuid);
|
||||
|
||||
#server host is a tuple ('host', port)
|
||||
server = SocketServer.ThreadingTCPServer(('', 8040), ESLRequestHandler)
|
||||
server.serve_forever()
|
||||
|
||||
|
||||
43
libs/esl/python3/single_command.py
Normal file
43
libs/esl/python3/single_command.py
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import string
|
||||
import sys
|
||||
from optparse import OptionParser
|
||||
from ESL import *
|
||||
|
||||
def main(argv):
|
||||
|
||||
try:
|
||||
|
||||
parser = OptionParser()
|
||||
parser.add_option("-a", "--auth", dest="auth", default="ClueCon",
|
||||
help="ESL password")
|
||||
parser.add_option("-s", "--server", dest="server", default="127.0.0.1",
|
||||
help="FreeSWITCH server IP address")
|
||||
parser.add_option("-p", "--port", dest="port", default="8021",
|
||||
help="FreeSWITCH server event socket port")
|
||||
parser.add_option("-c", "--command", dest="command",
|
||||
help="command to run, surround mutli word commands in \"\'s")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
|
||||
con = ESLconnection(options.server, options.port, options.auth)
|
||||
#are we connected?
|
||||
|
||||
if con.connected():
|
||||
#run command
|
||||
e = con.api(options.command)
|
||||
print e.getBody()
|
||||
|
||||
else:
|
||||
|
||||
print "Not Connected"
|
||||
sys.exit(2)
|
||||
|
||||
except:
|
||||
|
||||
print parser.get_usage()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
||||
@@ -132,6 +132,7 @@ static const char *EVENT_NAMES[] = {
|
||||
"SEND_INFO",
|
||||
"RECV_INFO",
|
||||
"RECV_RTCP_MESSAGE",
|
||||
"SEND_RTCP_MESSAGE",
|
||||
"CALL_SECURE",
|
||||
"NAT",
|
||||
"RECORD_START",
|
||||
|
||||
@@ -120,6 +120,7 @@ typedef enum {
|
||||
ESL_EVENT_SEND_INFO,
|
||||
ESL_EVENT_RECV_INFO,
|
||||
ESL_EVENT_RECV_RTCP_MESSAGE,
|
||||
ESL_EVENT_SEND_RTCP_MESSAGE,
|
||||
ESL_EVENT_CALL_SECURE,
|
||||
ESL_EVENT_NAT,
|
||||
ESL_EVENT_RECORD_START,
|
||||
|
||||
39
libs/freetdm/.gitignore
vendored
39
libs/freetdm/.gitignore
vendored
@@ -1,39 +0,0 @@
|
||||
*.o
|
||||
*.lo
|
||||
*.so
|
||||
*.a
|
||||
*.orig
|
||||
*.rej
|
||||
*.log
|
||||
|
||||
Makefile
|
||||
config.*
|
||||
configure
|
||||
libtool
|
||||
aclocal.m4
|
||||
build/libtool.m4
|
||||
build/ltoptions.m4
|
||||
build/ltsugar.m4
|
||||
build/ltversion.m4
|
||||
build/lt~obsolete.m4
|
||||
|
||||
testanalog
|
||||
testapp
|
||||
testboost
|
||||
testcid
|
||||
testpri
|
||||
testr2
|
||||
testsangomaboost
|
||||
testtones
|
||||
|
||||
!/msvc/testanalog/
|
||||
!/msvc/testboost/
|
||||
|
||||
!/sample/boost/Makefile
|
||||
!/sample/dso/Makefile
|
||||
|
||||
freetdm.2010.sdf
|
||||
/mod_freetdm/Win32/
|
||||
/msvc/Win32/
|
||||
/src/ftmod/*/Win32/
|
||||
/src/ftmod/*/x64/
|
||||
@@ -1 +0,0 @@
|
||||
Fri Feb 3 11:55:29 PST 2012
|
||||
@@ -1,244 +0,0 @@
|
||||
#
|
||||
# cmake file that generate build files for freetdm.
|
||||
# this automatically includes the tests and also
|
||||
# mod_freetdm
|
||||
#
|
||||
# Arnaldo M Pereira <arnaldo@sangoma.com>
|
||||
#
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
|
||||
PROJECT(freetdm)
|
||||
|
||||
ADD_SUBDIRECTORY(sample)
|
||||
ADD_SUBDIRECTORY(mod_freetdm)
|
||||
|
||||
# includes
|
||||
SET(freetdm_INCLUDES
|
||||
${PROJECT_SOURCE_DIR}/src/include
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/include
|
||||
${PROJECT_SOURCE_DIR}/src/include/private
|
||||
${PROJECT_SOURCE_DIR}/src/ftmod/ftmod_sangoma_boost
|
||||
)
|
||||
INCLUDE_DIRECTORIES(${freetdm_INCLUDES})
|
||||
LINK_DIRECTORIES(${freetdm_BINARY_DIR})
|
||||
|
||||
# optional includes
|
||||
IF(DEFINED SNGSS7)
|
||||
SET(freetdm_INCLUDES ${freetdm_INCLUDES} /usr/include/sng_ss7)
|
||||
ENDIF(DEFINED SNGSS7)
|
||||
|
||||
IF(DEFINED SNGISDN)
|
||||
SET(freetdm_INCLUDES ${freetdm_INCLUDES} /usr/include/sng_isdn)
|
||||
ENDIF(DEFINED SNGISDN)
|
||||
|
||||
# definitions / CFLAGS
|
||||
ADD_DEFINITIONS(-DFTDM_CONFIG_DIR="/FIXME" -DFTDM_MOD_DIR="/FIXME")
|
||||
IF(DEFINED WIN32)
|
||||
ADD_DEFINITIONS(-DFREETDM_EXPORTS -DTELETONE_EXPORTS -DMOD_EXPORTS -DDLL_EXPORTS)
|
||||
ENDIF(DEFINED WIN32)
|
||||
IF(DEFINED SNGISDN)
|
||||
SET(freetdm_INCLUDES ${freetdm_INCLUDES} /usr/include/sng_isdn)
|
||||
ENDIF(DEFINED SNGISDN)
|
||||
|
||||
# lib sources
|
||||
SET(freetdm_SOURCES
|
||||
${PROJECT_SOURCE_DIR}/src/hashtable.c
|
||||
${PROJECT_SOURCE_DIR}/src/hashtable_itr.c
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_io.c
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_queue.c
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_sched.c
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_call_utils.c
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_config.c
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_callerid.c
|
||||
${PROJECT_SOURCE_DIR}/src/fsk.c
|
||||
${PROJECT_SOURCE_DIR}/src/uart.c
|
||||
${PROJECT_SOURCE_DIR}/src/g711.c
|
||||
${PROJECT_SOURCE_DIR}/src/libteletone_detect.c
|
||||
${PROJECT_SOURCE_DIR}/src/libteletone_generate.c
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_buffer.c
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_threadmutex.c
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_dso.c
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_cpu_monitor.c
|
||||
)
|
||||
|
||||
# libfreetdm.so
|
||||
ADD_LIBRARY(${PROJECT_NAME} SHARED ${freetdm_SOURCES})
|
||||
|
||||
IF(NOT DEFINED WIN32)
|
||||
TARGET_LINK_LIBRARIES(${PROJECT_NAME} m pthread dl)
|
||||
ENDIF(NOT DEFINED WIN32)
|
||||
|
||||
REMOVE_DEFINITIONS(-DLL_EXPORTS)
|
||||
|
||||
# tools & tests
|
||||
IF(NOT DEFINED WIN32)
|
||||
FOREACH(TOOL testtones testpri testr2 testapp testcid)
|
||||
ADD_EXECUTABLE(${TOOL} ${PROJECT_SOURCE_DIR}/src/${TOOL}.c)
|
||||
TARGET_LINK_LIBRARIES(${TOOL} -l${PROJECT_NAME})
|
||||
ADD_DEPENDENCIES(${TOOL} ${PROJECT_NAME})
|
||||
ENDFOREACH(TOOL)
|
||||
|
||||
ADD_EXECUTABLE(detect_dtmf
|
||||
${PROJECT_SOURCE_DIR}/src/detect_dtmf.c
|
||||
${PROJECT_SOURCE_DIR}/src/libteletone_detect.c
|
||||
)
|
||||
TARGET_LINK_LIBRARIES(detect_dtmf ${PROJECT_NAME})
|
||||
ADD_DEPENDENCIES(detect_dtmf ${PROJECT_NAME})
|
||||
|
||||
ADD_EXECUTABLE(detect_tones
|
||||
${PROJECT_SOURCE_DIR}/src/detect_tones.c
|
||||
${PROJECT_SOURCE_DIR}/src/libteletone_detect.c
|
||||
)
|
||||
TARGET_LINK_LIBRARIES(detect_tones ${PROJECT_NAME})
|
||||
ADD_DEPENDENCIES(detect_tones ${PROJECT_NAME})
|
||||
|
||||
ADD_EXECUTABLE(testanalog
|
||||
${PROJECT_SOURCE_DIR}/src/testanalog.c
|
||||
)
|
||||
TARGET_LINK_LIBRARIES(testanalog -l${PROJECT_NAME})
|
||||
ADD_DEPENDENCIES(testanalog ${PROJECT_NAME})
|
||||
|
||||
# optional tests/tools
|
||||
IF(HAVE_SCTP)
|
||||
ADD_EXECUTABLE(testboost src/testboost.c)
|
||||
TARGET_LINK_LIBRARIES(testboost ${PROJECT_NAME})
|
||||
ENDIF(HAVE_SCTP)
|
||||
ELSE(NOT DEFINED WIN32)
|
||||
MESSAGE(WARNING "Not building tools/tests on WIN32 yet.")
|
||||
ENDIF(NOT DEFINED WIN32)
|
||||
|
||||
#
|
||||
# ftmod modules
|
||||
#
|
||||
SET(ftmod_DIR ${PROJECT_SOURCE_DIR}/src/ftmod)
|
||||
|
||||
IF(DEFINED WIN32)
|
||||
SET(ftmod_ADDITIONAL_SOURCES
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_io.c
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_config.c
|
||||
${PROJECT_SOURCE_DIR}/src/ftdm_queue.c
|
||||
${PROJECT_SOURCE_DIR}/src/g711.c
|
||||
)
|
||||
SET(module_list skel analog analog_em)
|
||||
ELSE(DEFINED WIN32)
|
||||
SET(module_list skel analog analog_em zt)
|
||||
ENDIF(DEFINED WIN32)
|
||||
|
||||
# build default modules
|
||||
FOREACH(module ${module_list})
|
||||
ADD_LIBRARY(ftmod_${module} MODULE ${ftmod_DIR}/ftmod_${module}/ftmod_${module}.c ${ftmod_ADDITIONAL_SOURCES})
|
||||
TARGET_LINK_LIBRARIES(ftmod_${module} ${PROJECT_NAME})
|
||||
ENDFOREACH(module)
|
||||
|
||||
# build isdn ftmod
|
||||
IF(DEFINED BUILD_FTMOD_ISDN)
|
||||
SET(ftmod_isdn_SOURCES
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/EuroISDNStateNT.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/EuroISDNStateTE.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/mfifo.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/Q921.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/Q931api.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/Q931.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/Q931ie.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/Q931mes.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/Q931StateNT.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/Q931StateTE.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/nationalmes.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/nationalStateNT.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/nationalStateTE.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/DMSmes.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/DMSStateNT.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/DMSStateTE.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/5ESSmes.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/5ESSStateNT.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/5ESSStateTE.c
|
||||
${PROJECT_SOURCE_DIR}/src/isdn/Q932mes.c
|
||||
${ftmod_DIR}/ftmod_isdn/ftmod_isdn.c
|
||||
)
|
||||
IF(NOT DEFINED WIN32)
|
||||
ADD_DEFINITIONS(-D_GNU_SOURCE)
|
||||
ENDIF(NOT DEFINED WIN32)
|
||||
ADD_LIBRARY(ftmod_isdn MODULE ${ftmod_isdn_SOURCES})
|
||||
TARGET_LINK_LIBRARIES(ftmod_isdn ${PROJECT_NAME})
|
||||
ENDIF(DEFINED BUILD_FTMOD_ISDN)
|
||||
|
||||
# from now on, optionals
|
||||
IF(DEFINED LIBSANGOMA)
|
||||
ADD_LIBRARY(ftmod_wanpipe MODULE ${ftmod_DIR}/ftmod_wanpipe/ftmod_wanpipe.c)
|
||||
IF(DEFINED WIN32)
|
||||
MESSAGE(WARNING "FIXME: look for wanpipe headers on win32")
|
||||
ELSE(DEFINED WIN32)
|
||||
ADD_DEFINITIONS(-D__LINUX__)
|
||||
INCLUDE_DIRECTORIES(/usr/include/wanpipe)
|
||||
ENDIF(DEFINED WIN32)
|
||||
TARGET_LINK_LIBRARIES(ftmod_wanpipe sangoma ${PROJECT_NAME})
|
||||
ENDIF(DEFINED LIBSANGOMA)
|
||||
|
||||
IF(DEFINED HAVE_SCTP)
|
||||
ADD_LIBRARY(ftmod_sangoma_boost MODULE
|
||||
${ftmod_DIR}/ftmod_sangoma_boost/sangoma_boost_client.c
|
||||
${ftmod_DIR}/ftmod_sangoma_boost/ftmod_sangoma_boost.c
|
||||
)
|
||||
TARGET_LINK_LIBRARIES(ftmod_sangoma_boost ${PROJECT_NAME})
|
||||
ENDIF(DEFINED HAVE_SCTP)
|
||||
|
||||
IF(DEFINED LIBPRI)
|
||||
ADD_LIBRARY(ftmod_libpri MODULE
|
||||
${ftmod_DIR}/ftmod_libpri/libpri_client.c
|
||||
${ftmod_DIR}/ftmod_libpri/ftmod_libpri.c
|
||||
)
|
||||
TARGET_LINK_LIBRARIES(ftmod_libpri ${PROJECT_NAME})
|
||||
ENDIF(DEFINED LIBPRI)
|
||||
|
||||
IF(DEFINED PRITAP)
|
||||
ADD_LIBRARY(ftmod_pritap MODULE
|
||||
${ftmod_DIR}/ftmod_pritap/pritap_client.c
|
||||
${ftmod_DIR}/ftmod_pritap/ftmod_pritap.c
|
||||
)
|
||||
TARGET_LINK_LIBRARIES(ftmod_pritap ${PROJECT_NAME} pri)
|
||||
ENDIF(DEFINED PRITAP)
|
||||
|
||||
IF(DEFINED SNGSS7)
|
||||
ADD_LIBRARY(ftmod_sangoma_ss7 MODULE
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_in.c
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cntrl.c
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_timers.c
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_sta.c
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_sts.c
|
||||
${ftmod_DIR}/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c
|
||||
)
|
||||
IF(NOT DEFINED WIN32)
|
||||
ADD_DEFINITIONS(-D_GNU_SOURCE)
|
||||
ENDIF(NOT DEFINED WIN32)
|
||||
TARGET_LINK_LIBRARIES(ftmod_sangoma_ss7 ${PROJECT_NAME} sng_ss7)
|
||||
ENDIF(DEFINED SNGSS7)
|
||||
|
||||
IF(DEFINED SNGISDN)
|
||||
ADD_LIBRARY(ftmod_sangoma_isdn MODULE
|
||||
${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
|
||||
${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c
|
||||
${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cntrl.c
|
||||
${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c
|
||||
${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c
|
||||
${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c
|
||||
${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c
|
||||
${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c
|
||||
${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c
|
||||
${ftmod_DIR}/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c
|
||||
)
|
||||
IF(NOT DEFINED WIN32)
|
||||
ADD_DEFINITIONS(-D_GNU_SOURCE)
|
||||
ENDIF(NOT DEFINED WIN32)
|
||||
TARGET_LINK_LIBRARIES(ftmod_sangoma_isdn ${PROJECT_NAME} sng_isdn)
|
||||
ENDIF(DEFINED SNGISDN)
|
||||
|
||||
IF(DEFINED OPENR2)
|
||||
ADD_LIBRARY(ftmod_r2 MODULE ${ftmod_DIR}/ftmod_r2/ftmod_r2.c)
|
||||
TARGET_LINK_LIBRARIES(ftmod_r2 ${PROJECT_NAME} openr2)
|
||||
ENDIF(DEFINED OPENR2)
|
||||
@@ -1,290 +0,0 @@
|
||||
# Copyright (c) 2007-2014, Anthony Minessale II
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# * Neither the name of the original author; nor the names of any contributors
|
||||
# may be used to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
|
||||
# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
ACLOCAL_AMFLAGS = -I build
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
SRC = src
|
||||
|
||||
moddir = @modinstdir@
|
||||
libdir = @libdir@
|
||||
library_includedir = $(prefix)/include
|
||||
|
||||
INCS = -I$(FT_SRCDIR)/$(SRC)/include -I$(FT_SRCDIR)/$(SRC)/include/private
|
||||
|
||||
# we needed to separate CFLAGS in FTDM_COMPAT_CFLAGS and FTDM_CFLAGS due to -c99 which causes problems with wanpipe headers
|
||||
FTDM_COMPAT_CFLAGS = $(INCS) -DFTDM_CONFIG_DIR=\"@confdir@\" -DFTDM_MOD_DIR=\"$(moddir)\" @COMP_VENDOR_COMPAT_CFLAGS@ @DEFS@
|
||||
FTDM_CFLAGS = $(INCS) -DFTDM_CONFIG_DIR=\"@confdir@\" -DFTDM_MOD_DIR=\"$(moddir)\" @COMP_VENDOR_CFLAGS@ @DEFS@
|
||||
COMPILE = $(CC) $(FTDM_CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(COMPILE)
|
||||
LINK = $(LIBTOOL) --mode=link --tag=CC $(CC) $(FTDM_CFLAGS) $(LDFLAGS) -o $@
|
||||
|
||||
|
||||
#
|
||||
# GNU pkgconfig file
|
||||
#
|
||||
EXTRA_DIST = freetdm.pc.in
|
||||
|
||||
pkgconfigdir = @pkgconfigdir@
|
||||
pkgconfig_DATA = freetdm.pc
|
||||
|
||||
|
||||
#
|
||||
# libfreetdm
|
||||
#
|
||||
libfreetdm_la_SOURCES = \
|
||||
$(SRC)/hashtable.c \
|
||||
$(SRC)/hashtable_itr.c \
|
||||
$(SRC)/ftdm_io.c \
|
||||
$(SRC)/ftdm_state.c \
|
||||
$(SRC)/ftdm_queue.c \
|
||||
$(SRC)/ftdm_sched.c \
|
||||
$(SRC)/ftdm_call_utils.c \
|
||||
$(SRC)/ftdm_variables.c \
|
||||
$(SRC)/ftdm_config.c \
|
||||
$(SRC)/ftdm_callerid.c \
|
||||
$(SRC)/fsk.c \
|
||||
$(SRC)/uart.c \
|
||||
$(SRC)/g711.c \
|
||||
$(SRC)/libteletone_detect.c \
|
||||
$(SRC)/libteletone_generate.c \
|
||||
$(SRC)/ftdm_buffer.c \
|
||||
$(SRC)/ftdm_threadmutex.c \
|
||||
$(SRC)/ftdm_dso.c \
|
||||
$(SRC)/ftdm_cpu_monitor.c \
|
||||
$(SRC)/ftdm_backtrace.c
|
||||
|
||||
library_include_HEADERS = \
|
||||
$(SRC)/include/freetdm.h \
|
||||
$(SRC)/include/ftdm_declare.h \
|
||||
$(SRC)/include/ftdm_threadmutex.h \
|
||||
$(SRC)/include/ftdm_os.h \
|
||||
$(SRC)/include/ftdm_call_utils.h \
|
||||
$(SRC)/include/ftdm_dso.h
|
||||
|
||||
lib_LTLIBRARIES = libfreetdm.la
|
||||
libfreetdm_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
libfreetdm_la_LDFLAGS = -version-info 1:0:0 $(AM_LDFLAGS)
|
||||
libfreetdm_la_LIBADD = $(LIBS)
|
||||
|
||||
core: libfreetdm.la
|
||||
core-install: install-libLTLIBRARIES
|
||||
|
||||
#
|
||||
# tools & test programs
|
||||
#
|
||||
noinst_PROGRAMS = testtones detect_tones detect_dtmf testpri testr2 testanalog testapp testcid
|
||||
|
||||
testapp_SOURCES = $(SRC)/testapp.c
|
||||
testapp_LDADD = libfreetdm.la
|
||||
testapp_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
|
||||
testcid_SOURCES = $(SRC)/testcid.c
|
||||
testcid_LDADD = libfreetdm.la
|
||||
testcid_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
|
||||
testtones_SOURCES = $(SRC)/testtones.c
|
||||
testtones_LDADD = libfreetdm.la
|
||||
testtones_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
|
||||
detect_tones_SOURCES = $(SRC)/detect_tones.c
|
||||
detect_tones_LDADD = libfreetdm.la
|
||||
detect_tones_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
|
||||
detect_dtmf_SOURCES = $(SRC)/detect_dtmf.c
|
||||
detect_dtmf_LDADD = libfreetdm.la
|
||||
detect_dtmf_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
|
||||
#testisdn_SOURCES = $(SRC)/testisdn.c
|
||||
#testisdn_LDADD = libfreetdm.la
|
||||
#testisdn_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
|
||||
testpri_SOURCES = $(SRC)/testpri.c
|
||||
testpri_LDADD = libfreetdm.la
|
||||
testpri_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
|
||||
testr2_SOURCES = $(SRC)/testr2.c
|
||||
testr2_LDADD = libfreetdm.la
|
||||
testr2_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
|
||||
testanalog_SOURCES = $(SRC)/testanalog.c
|
||||
testanalog_LDADD = libfreetdm.la
|
||||
testanalog_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
|
||||
#
|
||||
# ftmod modules
|
||||
#
|
||||
mod_LTLIBRARIES = ftmod_zt.la ftmod_skel.la ftmod_analog.la ftmod_analog_em.la
|
||||
|
||||
ftmod_zt_la_SOURCES = $(SRC)/ftmod/ftmod_zt/ftmod_zt.c
|
||||
ftmod_zt_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
ftmod_zt_la_LDFLAGS = -shared -module -avoid-version
|
||||
ftmod_zt_la_LIBADD = libfreetdm.la
|
||||
|
||||
ftmod_skel_la_SOURCES = $(SRC)/ftmod/ftmod_skel/ftmod_skel.c
|
||||
ftmod_skel_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
ftmod_skel_la_LDFLAGS = -shared -module -avoid-version
|
||||
ftmod_skel_la_LIBADD = libfreetdm.la
|
||||
|
||||
ftmod_analog_la_SOURCES = $(SRC)/ftmod/ftmod_analog/ftmod_analog.c
|
||||
ftmod_analog_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
ftmod_analog_la_LDFLAGS = -shared -module -avoid-version
|
||||
ftmod_analog_la_LIBADD = libfreetdm.la
|
||||
|
||||
ftmod_analog_em_la_SOURCES = $(SRC)/ftmod/ftmod_analog_em/ftmod_analog_em.c
|
||||
ftmod_analog_em_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
ftmod_analog_em_la_LDFLAGS = -shared -module -avoid-version
|
||||
ftmod_analog_em_la_LIBADD = libfreetdm.la
|
||||
|
||||
if HAVE_LIBSANGOMA
|
||||
mod_LTLIBRARIES += ftmod_wanpipe.la
|
||||
ftmod_wanpipe_la_SOURCES = $(SRC)/ftmod/ftmod_wanpipe/ftmod_wanpipe.c
|
||||
# some structures within Wanpipe drivers are not c99 compatible, so we need to compile ftmod_wanpipe
|
||||
# without c99 flags, use FTDM_COMPAT_CFLAGS instead
|
||||
ftmod_wanpipe_la_CFLAGS = $(FTDM_COMPAT_CFLAGS) $(AM_CFLAGS) -D__LINUX__ -I/usr/include/wanpipe
|
||||
ftmod_wanpipe_la_LDFLAGS = -shared -module -avoid-version
|
||||
ftmod_wanpipe_la_LIBADD = libfreetdm.la -lsangoma
|
||||
endif
|
||||
|
||||
if HAVE_LIBISDN
|
||||
mod_LTLIBRARIES += ftmod_isdn.la
|
||||
ftmod_isdn_la_SOURCES = $(SRC)/ftmod/ftmod_isdn/ftmod_isdn.c
|
||||
ftmod_isdn_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS) -D_GNU_SOURCE $(LIBISDN_CPPFLAGS) $(PCAP_CPPFLAGS)
|
||||
ftmod_isdn_la_LDFLAGS = -shared -module -avoid-version $(LIBISDN_LDFLAGS) $(PCAP_LDFLAGS)
|
||||
ftmod_isdn_la_LIBADD = libfreetdm.la $(LIBISDN_LIBS) $(PCAP_LIBS)
|
||||
endif
|
||||
|
||||
if HAVE_LIBPRI
|
||||
mod_LTLIBRARIES += ftmod_libpri.la
|
||||
ftmod_libpri_la_SOURCES = $(SRC)/ftmod/ftmod_libpri/ftmod_libpri.c $(SRC)/ftmod/ftmod_libpri/lpwrap_pri.c
|
||||
ftmod_libpri_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS) $(LIBPRI_CPPFLAGS)
|
||||
ftmod_libpri_la_LDFLAGS = -shared -module -avoid-version $(LIBPRI_LDFLAGS)
|
||||
ftmod_libpri_la_LIBADD = libfreetdm.la $(LIBPRI_LIBS)
|
||||
endif
|
||||
|
||||
if HAVE_PRITAP
|
||||
mod_LTLIBRARIES += ftmod_pritap.la
|
||||
ftmod_pritap_la_SOURCES = $(SRC)/ftmod/ftmod_pritap/ftmod_pritap.c
|
||||
ftmod_pritap_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
ftmod_pritap_la_LDFLAGS = -shared -module -avoid-version
|
||||
ftmod_pritap_la_LIBADD = libfreetdm.la -lpri
|
||||
endif
|
||||
|
||||
if HAVE_SNG_SS7
|
||||
mod_LTLIBRARIES += ftmod_sangoma_ss7.la
|
||||
ftmod_sangoma_ss7_la_SOURCES = \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_in.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cntrl.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_timers.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_sta.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_sts.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua_xml.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_relay.c
|
||||
|
||||
ftmod_sangoma_ss7_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS) -D_GNU_SOURCE
|
||||
ftmod_sangoma_ss7_la_LDFLAGS = -shared -module -avoid-version
|
||||
ftmod_sangoma_ss7_la_LIBADD = libfreetdm.la -lsng_ss7
|
||||
endif
|
||||
|
||||
if HAVE_SNG_ISDN
|
||||
mod_LTLIBRARIES += ftmod_sangoma_isdn.la
|
||||
ftmod_sangoma_isdn_la_SOURCES = \
|
||||
$(SRC)/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cntrl.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_transfer.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c \
|
||||
$(SRC)/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c
|
||||
|
||||
ftmod_sangoma_isdn_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS) -D_GNU_SOURCE
|
||||
ftmod_sangoma_isdn_la_LDFLAGS = -shared -module -avoid-version
|
||||
ftmod_sangoma_isdn_la_LIBADD = libfreetdm.la -lsng_isdn
|
||||
endif
|
||||
|
||||
if HAVE_OPENR2
|
||||
mod_LTLIBRARIES += ftmod_r2.la
|
||||
ftmod_r2_la_SOURCES = $(SRC)/ftmod/ftmod_r2/ftmod_r2.c $(SRC)/ftmod/ftmod_r2/ftmod_r2_io_mf_lib.c
|
||||
ftmod_r2_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
ftmod_r2_la_LDFLAGS = -shared -module -avoid-version
|
||||
ftmod_r2_la_LIBADD = libfreetdm.la -lopenr2
|
||||
endif
|
||||
|
||||
if HAVE_WAT
|
||||
mod_LTLIBRARIES += ftmod_gsm.la
|
||||
ftmod_gsm_la_SOURCES = $(SRC)/ftmod/ftmod_gsm/ftmod_gsm.c
|
||||
ftmod_gsm_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
|
||||
ftmod_gsm_la_LDFLAGS = -shared -module -avoid-version
|
||||
ftmod_gsm_la_LIBADD = libfreetdm.la -lwat
|
||||
endif
|
||||
|
||||
if HAVE_MISDN
|
||||
mod_LTLIBRARIES += ftmod_misdn.la
|
||||
ftmod_misdn_la_SOURCES = $(SRC)/ftmod/ftmod_misdn/ftmod_misdn.c
|
||||
ftmod_misdn_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS) $(MISDN_CFLAGS) -D_GNU_SOURCE
|
||||
ftmod_misdn_la_LDFLAGS = -shared -module -avoid-version
|
||||
ftmod_misdn_la_LIBADD = libfreetdm.la
|
||||
endif
|
||||
|
||||
dox doxygen:
|
||||
doxygen $(FT_SRCDIR)/docs/Doxygen.conf
|
||||
|
||||
mod_freetdm/mod_freetdm.so: libfreetdm.la mod_freetdm/mod_freetdm.c
|
||||
$(MAKE) -C mod_freetdm
|
||||
|
||||
mod_freetdm: mod_freetdm/mod_freetdm.so
|
||||
|
||||
mod_freetdm-install: mod_freetdm
|
||||
$(MAKE) -C mod_freetdm install
|
||||
|
||||
mod_freetdm-clean:
|
||||
@if [ -f mod_freetdm/mod_freetdm.so ] ; then \
|
||||
$(MAKE) -C mod_freetdm clean ; \
|
||||
fi
|
||||
|
||||
install-data-local:
|
||||
$(mkinstalldirs) $(DESTDIR)$(prefix)
|
||||
$(mkinstalldirs) $(DESTDIR)@confdir@
|
||||
@[ -f "$(DESTDIR)@confdir@/freetdm.conf" ] || ( cp conf/*.conf $(DESTDIR)@confdir@)
|
||||
@echo FreeTDM Installed
|
||||
@@ -1,3 +0,0 @@
|
||||
FreeTDM
|
||||
http://wiki.freeswitch.org/wiki/FreeTDM
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
== Interface inconsistency ==
|
||||
- enum_id member of ftdm_event_t is inconsistent. Most of the time is just for OOB events, the only other
|
||||
type of event as of now is FTDM_EVENT_DTMF and is not using the enum_id member. I think we can get rid
|
||||
of the FTDM_EVENT_DTMF and create ftdm_dtmf_event_t type instead of reusing ftdm_event_t
|
||||
then ftdm_event_t would be renamed to ftdm_oob_event_t and the enum_id renamed to type, then ftdm_span_next_event()
|
||||
will only return OOB events
|
||||
|
||||
- Deprecate last_error members.
|
||||
It requires a lot of discipline to set the last_error string for every failure.
|
||||
It does not add much value to the user either, most of the errors are criptic and
|
||||
cannot be shown to end users, we already provide extensive logging for problem
|
||||
troubleshooting.
|
||||
|
||||
- Implement threaded IO.
|
||||
Currently IO modules only work on-demand, where the user (ie, FreeSWITCH) drives the read/write
|
||||
of media. If the user stops reading, some functions are not possible
|
||||
(DTMF detection or Hangup tone detection). It would be useful to implement a FreeTDM mode
|
||||
where the media is driven by a group of threads that are always reading (and possibly writing)
|
||||
then when the user does ftdm_channel_read(), the media would be read from the buffers filled
|
||||
by the media thread and not from the underlying IO device, this gives a chance to FreeTDM to
|
||||
still perform hangup detection or other media services even if the application is not reading.
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
m4_include([build/ax_compiler_vendor.m4])
|
||||
m4_include([build/libpcap.m4])
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/sh
|
||||
autoheader
|
||||
libtoolize --force --copy
|
||||
aclocal
|
||||
automake -f --copy --add-missing
|
||||
autoconf
|
||||
@@ -1,15 +0,0 @@
|
||||
AC_DEFUN([AX_COMPILER_VENDOR],
|
||||
[
|
||||
AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
|
||||
[ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown
|
||||
# note: don't check for gcc first since some other compilers define __GNUC__
|
||||
for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do
|
||||
vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")"
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[
|
||||
#if !($vencpp)
|
||||
thisisanerror;
|
||||
#endif
|
||||
])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break])
|
||||
done
|
||||
])
|
||||
])
|
||||
@@ -1,150 +0,0 @@
|
||||
dnl libpcap.m4--PCAP libraries and includes
|
||||
dnl Derrick Brashear
|
||||
dnl from KTH krb and Arla
|
||||
dnl $Id: libpcap.m4,v 1.4 2006/01/20 20:21:09 snsimon Exp $
|
||||
dnl 2010/10/31 (stkn):
|
||||
dnl rename: PCAP_INC_FLAGS -> PCAP_CPPFLAGS
|
||||
dnl rename: PCAP_LIB_FLAGS -> PCAP_LDFLAGS (-L flags only)
|
||||
dnl add: PCAP_LIBS (libs only)
|
||||
|
||||
AC_DEFUN([PCAP_INC_WHERE1], [
|
||||
ac_cv_found_pcap_inc=no
|
||||
if test -f "$1/pcap.h" ; then
|
||||
ac_cv_found_pcap_inc=yes
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([PCAP_INC_WHERE], [
|
||||
for i in $1; do
|
||||
AC_MSG_CHECKING(for pcap header in $i)
|
||||
PCAP_INC_WHERE1($i)
|
||||
if test "$ac_cv_found_pcap_inc" = "yes"; then
|
||||
ac_cv_pcap_where_inc=$i
|
||||
AC_MSG_RESULT(found)
|
||||
break
|
||||
else
|
||||
AC_MSG_RESULT(no found)
|
||||
fi
|
||||
done
|
||||
])
|
||||
|
||||
AC_DEFUN([PCAP_LIB_WHERE1], [
|
||||
saved_LIBS=$LIBS
|
||||
LIBS="$saved_LIBS -L$1 -lpcap"
|
||||
AC_TRY_LINK(,
|
||||
[pcap_lookupdev("");],
|
||||
[ac_cv_found_pcap_lib=yes],
|
||||
ac_cv_found_pcap_lib=no)
|
||||
LIBS=$saved_LIBS
|
||||
])
|
||||
|
||||
AC_DEFUN([TEST_LIBPATH], [
|
||||
changequote(<<, >>)
|
||||
define(<<AC_CV_FOUND>>, translit(ac_cv_found_$2_lib, <<- *>>, <<__p>>))
|
||||
changequote([, ])
|
||||
if test "$AC_CV_FOUND" = "yes"; then
|
||||
if test \! -r "$1/lib$2.a" -a \! -r "$1/lib$2.so" -a \! -r "$1/lib$2.sl" -a \! -r "$1/lib$2.dylib"; then
|
||||
AC_CV_FOUND=no
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
AC_DEFUN([PCAP_LIB_WHERE], [
|
||||
for i in $1; do
|
||||
AC_MSG_CHECKING(for pcap library in $i)
|
||||
PCAP_LIB_WHERE1($i)
|
||||
TEST_LIBPATH($i, pcap)
|
||||
if test "$ac_cv_found_pcap_lib" = "yes" ; then
|
||||
ac_cv_pcap_where_lib=$i
|
||||
AC_MSG_RESULT(found)
|
||||
break
|
||||
else
|
||||
AC_MSG_RESULT(no found)
|
||||
fi
|
||||
done
|
||||
])
|
||||
|
||||
AC_DEFUN([FIND_LIB_SUBDIR],
|
||||
[dnl
|
||||
AC_ARG_WITH([lib-subdir], AC_HELP_STRING([--with-lib-subdir=DIR],[Find libraries in DIR instead of lib]))
|
||||
AC_CHECK_SIZEOF(long)
|
||||
AC_CACHE_CHECK([what directory libraries are found in], [ac_cv_cmu_lib_subdir],
|
||||
[test "X$with_lib_subdir" = "Xyes" && with_lib_subdir=
|
||||
test "X$with_lib_subdir" = "Xno" && with_lib_subdir=
|
||||
if test "X$with_lib_subdir" = "X" ; then
|
||||
ac_cv_cmu_lib_subdir=lib
|
||||
if test $ac_cv_sizeof_long -eq 4 ; then
|
||||
test -d /usr/lib32 && ac_cv_cmu_lib_subdir=lib32
|
||||
test -r /usr/lib/libpcap.so && ac_cv_cmu_lib_subdir=lib
|
||||
fi
|
||||
if test $ac_cv_sizeof_long -eq 8 ; then
|
||||
test -d /usr/lib64 && ac_cv_cmu_lib_subdir=lib64
|
||||
fi
|
||||
else
|
||||
ac_cv_cmu_lib_subdir=$with_lib_subdir
|
||||
fi])
|
||||
AC_SUBST(LIB_SUBDIR, $ac_cv_cmu_lib_subdir)
|
||||
])
|
||||
|
||||
|
||||
AC_DEFUN([AX_LIB_PCAP], [
|
||||
AC_REQUIRE([FIND_LIB_SUBDIR])
|
||||
AC_ARG_WITH(pcap,
|
||||
[ --with-pcap=PREFIX Compile with PCAP support],
|
||||
[if test "X$with_pcap" = "X"; then
|
||||
with_pcap=yes
|
||||
fi])
|
||||
AC_ARG_WITH(pcap-lib,
|
||||
[ --with-pcap-lib=dir use pcap libraries in dir],
|
||||
[if test "$withval" = "yes" -o "$withval" = "no"; then
|
||||
AC_MSG_ERROR([No argument for --with-pcap-lib])
|
||||
fi])
|
||||
AC_ARG_WITH(pcap-include,
|
||||
[ --with-pcap-include=dir use pcap headers in dir],
|
||||
[if test "$withval" = "yes" -o "$withval" = "no"; then
|
||||
AC_MSG_ERROR([No argument for --with-pcap-include])
|
||||
fi])
|
||||
|
||||
if test "X$with_pcap" != "X"; then
|
||||
if test "$with_pcap" != "yes"; then
|
||||
ac_cv_pcap_where_lib=$with_pcap
|
||||
ac_cv_pcap_where_inc=$with_pcap/include
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "X$with_pcap_lib" != "X"; then
|
||||
ac_cv_pcap_where_lib=$with_pcap_lib
|
||||
fi
|
||||
if test "X$ac_cv_pcap_where_lib" = "X"; then
|
||||
PCAP_LIB_WHERE(/usr/$LIB_SUBDIR /usr/local/$LIB_SUBDIR)
|
||||
fi
|
||||
|
||||
if test "X$with_pcap_include" != "X"; then
|
||||
ac_cv_pcap_where_inc=$with_pcap_include
|
||||
fi
|
||||
if test "X$ac_cv_pcap_where_inc" = "X"; then
|
||||
PCAP_INC_WHERE(/usr/ng/include /usr/include /usr/local/include)
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING(whether to include pcap)
|
||||
if test "X$ac_cv_pcap_where_lib" != "X" -a "X$ac_cv_pcap_where_inc" != "X"; then
|
||||
ac_cv_found_pcap=yes
|
||||
AC_MSG_RESULT(yes)
|
||||
PCAP_INC_DIR=$ac_cv_pcap_where_inc
|
||||
PCAP_LIB_DIR=$ac_cv_pcap_where_lib
|
||||
PCAP_CPPFLAGS="-I${PCAP_INC_DIR}"
|
||||
PCAP_LDFLAGS="-L${PCAP_LIB_DIR}"
|
||||
PCAP_LIBS="-lpcap"
|
||||
AC_SUBST(PCAP_INC_DIR)
|
||||
AC_SUBST(PCAP_LIB_DIR)
|
||||
AC_SUBST(PCAP_CPPFLAGS)
|
||||
AC_SUBST(PCAP_LDFLAGS)
|
||||
AC_SUBST(PCAP_LIBS)
|
||||
AC_DEFINE([HAVE_LIBPCAP],[1],[libpcap])
|
||||
else
|
||||
ac_cv_found_pcap=no
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
; !! THIS IS A SAMPLE CONFIGURATION ONLY !!
|
||||
|
||||
; refer to http://wiki.freeswitch.org/wiki/FreeTDM for further documentation
|
||||
|
||||
[general]
|
||||
; whether to launch a thread for CPU usage monitoring
|
||||
cpu_monitor => no
|
||||
|
||||
; How often (in milliseconds) monitor CPU usage
|
||||
cpu_monitoring_interval => 1000
|
||||
|
||||
; At what CPU percentage raise a CPU alarm
|
||||
cpu_set_alarm_threshold => 80
|
||||
|
||||
; At what CPU percentage stop the CPU alarm
|
||||
cpu_clear_alarm_threshold => 70
|
||||
|
||||
; Which action to take when the CPU alarm is raised
|
||||
; it can be warn and/or reject calls
|
||||
; cpu_alarm_action => warn,reject
|
||||
cpu_alarm_action => warn
|
||||
|
||||
; Where to dump DTMF debug files (see per span debugdtmf=yes option)
|
||||
debugdtmf_directory=/full/path/to/dtmf/directory
|
||||
|
||||
; spans are defined with [span <span type> <span name>]
|
||||
; the span type can either be zt, wanpipe or pika
|
||||
; the span name can be any unique string
|
||||
[span wanpipe myWanpipe]
|
||||
|
||||
; valid trunk types are: FXO, FXS, EM, E1, T1, J1, BRI, BRI_PTMP
|
||||
trunk_type => FXS
|
||||
|
||||
; add FXS channels from 3 to 4 at wanpipe span 1 to this freetdm span
|
||||
fxs-channel => 1:3-4
|
||||
|
||||
; IO stats. Defaults to yes, you can print the stats with ftdm iostats print <span> <chan>
|
||||
; This feature depends on the span IO type, currently only Wanpipe spans support it
|
||||
; This may cause a warning to be printed once in a while if audio is not provided fast enough
|
||||
; and causes the driver to transmit an idle frame (when there is no data provided by the application)
|
||||
iostats => yes
|
||||
|
||||
[span wanpipe myWanpipe2]
|
||||
trunk_type => FXO
|
||||
; This number will be used as DNIS for FXO devices
|
||||
fxo-channel => 1:1-2
|
||||
|
||||
[span zt myZaptelSpan]
|
||||
number => 9999
|
||||
fxs-channel => 1
|
||||
|
||||
[span zt mySecondZaptelSpan]
|
||||
; This number will be used as DNIS for FXO devices
|
||||
number => 2
|
||||
fxo-channel => 3
|
||||
|
||||
; MFC-R2 typical span configuration
|
||||
|
||||
; MFC-R2 with wanpipe (Sangoma)
|
||||
[span wanpipe myWanpipeSpan]
|
||||
trunk_type => E1
|
||||
cas-channel => 1-15:1101
|
||||
cas-channel => 17-31:1101
|
||||
|
||||
; MFC-R2 with Zaptel/DAHDI
|
||||
[span zt myWanpipeSpan]
|
||||
trunk_type => E1
|
||||
cas-channel => 1-15:1101
|
||||
cas-channel => 17-31:1101
|
||||
|
||||
; generic channel parameters
|
||||
; this parameters are accepted by any type of span/channel
|
||||
; remember that for generic channel parameters only channels
|
||||
; below the parameter within the span will be affected
|
||||
|
||||
; Channel audio gain
|
||||
; rxgain => 0.0
|
||||
; txgain => 0.0
|
||||
|
||||
; Whether to perform media dumps for DTMF debugging
|
||||
; debugdtmf => yes
|
||||
|
||||
@@ -1,633 +0,0 @@
|
||||
<!-- Please refer to http://wiki.freeswitch.org/wiki/FreeTDM for further documentation -->
|
||||
|
||||
<!--
|
||||
This is a sample FreeSWITCH XML configuration for FreeTDM
|
||||
Remember you still need to configure freetdm.conf (no XML extension) in $prefix/conf/
|
||||
directory of FreeSWITCH. The freetdm.conf (no XML extension) is a simple text file
|
||||
definining the I/O interfaces (Sangoma, DAHDI etc). This file (freetdm.conf.xml) deals
|
||||
with the signaling protocols that you can run on top of your I/O interfaces.
|
||||
-->
|
||||
<configuration name="freetdm.conf" description="FreeTDM Configuration">
|
||||
|
||||
<settings>
|
||||
<param name="debug" value="0"/>
|
||||
<!--<param name="hold-music" value="$${moh_uri}"/>-->
|
||||
<!-- Analog global options (they apply to all spans)
|
||||
Remember you can only choose between either call-swap
|
||||
or 3-way, not both!
|
||||
-->
|
||||
<!--<param name="enable-analog-option" value="call-swap"/>-->
|
||||
<!--<param name="enable-analog-option" value="3-way"/>-->
|
||||
<!--
|
||||
Refuse to load the module if there is configuration errors
|
||||
Defaults to 'no'
|
||||
-->
|
||||
<!--<param name="fail-on-error" value="no"/>-->
|
||||
</settings>
|
||||
|
||||
<!-- Sample analog configuration (The analog_spans tag is for ftmod_analog) -->
|
||||
<analog_spans>
|
||||
<!-- The span name must match the name in your freetdm.conf -->
|
||||
<span name="myAnalog">
|
||||
<!--<param name="hold-music" value="$${moh_uri}"/>-->
|
||||
<!--
|
||||
3-way allows you to flash your FXS line and dial
|
||||
another number and put all the parties in a conference
|
||||
|
||||
call-swap allows you to flash your FXS line and swap
|
||||
between one call and another
|
||||
|
||||
Remember you can only choose between either call-swap
|
||||
or 3-way, not both!
|
||||
|
||||
<param name="enable-analog-option" value="call-swap"/>
|
||||
<param name="enable-analog-option" value="3-way"/>
|
||||
-->
|
||||
|
||||
<!-- Tones are defined in tones.conf
|
||||
This setting is very important for analog lines to
|
||||
work properly
|
||||
-->
|
||||
<param name="tonegroup" value="us"/>
|
||||
|
||||
<!-- How much time to wait for digits (in FXS lines) -->
|
||||
<param name="digit-timeout" value="2000"/>
|
||||
|
||||
<!-- Maximum number of digits to wait for (in FXS lines) -->
|
||||
<param name="max-digits" value="11"/>
|
||||
|
||||
<!-- whether you want to wait for caller id -->
|
||||
<param name="enable-callerid" value="true"/>
|
||||
|
||||
<!-- How much to wait for dial tone (0 if you just want to dial out immediately without waiting for dial tone) -->
|
||||
<!--<param name="wait-dialtone-timeout" value="5000"/>-->
|
||||
|
||||
<!-- whether you want to enable callwaiting feature -->
|
||||
<!--<param name="callwaiting" value="true"/>-->
|
||||
|
||||
<!-- whether you want to answer/hangup on polarity reverse for outgoing calls in FXO devices
|
||||
and send polarity reverse on answer/hangup for incoming calls in FXS devices -->
|
||||
<!--<param name="answer-polarity-reverse" value="false"/>-->
|
||||
<!--<param name="hangup-polarity-reverse" value="false"/>-->
|
||||
<!--
|
||||
Minimum delay (in milliseconds) required between an answer polarity reverse
|
||||
and hangup polarity reverse in order to assume the second polarity reverse is a real hangup
|
||||
<param name="polarity-delay" value="600"/>
|
||||
-->
|
||||
|
||||
<!-- Retrieve caller id on polarity reverse -->
|
||||
<!--
|
||||
<param name="polarity-callerid" value="true"/>
|
||||
-->
|
||||
|
||||
<!-- regex to stop dialing when it matches -->
|
||||
<!--<param name="dial-regex" value="5555"/>-->
|
||||
|
||||
<!-- regex to stop dialing when it does not match -->
|
||||
<!--<param name="fail-dial-regex" value="^5"/>-->
|
||||
|
||||
<!-- FreeSWITCH dialplan type and context to send the calls -->
|
||||
<param name="dialplan" value="XML"/>
|
||||
<param name="context" value="default"/>
|
||||
</span>
|
||||
</analog_spans>
|
||||
|
||||
<!--
|
||||
|
||||
openr2 (MFC-R2 signaling) spans (ftmod_r2)
|
||||
|
||||
In order to use this type of spans your FreeTDM must have been compiled with ftmod_r2 module.
|
||||
The module is compiled if the openr2 library is present when running the ./configure script
|
||||
in the FreeTDM source code
|
||||
|
||||
MFC-R2 signaling has lots of variants from country to country and even sometimes
|
||||
minor variants inside the same country. The only mandatory parameters here are:
|
||||
variant, but typically you also want to set max_ani and max_dnis.
|
||||
IT IS RECOMMENDED that you leave the default values (leaving them commented) for the
|
||||
other parameters unless you have problems or you have been instructed to change some
|
||||
parameter. OpenR2 library uses the 'variant' parameter to try to determine the
|
||||
best defaults for your country. If you want to contribute your configs for a particular
|
||||
country send them to the e-mail of the primary OpenR2 developer that you can find in the
|
||||
AUTHORS file of the OpenR2 package, they will be added to the samples directory of openr2.
|
||||
|
||||
-->
|
||||
<r2_spans>
|
||||
<span name="wp1" cfgprofile="testr2">
|
||||
|
||||
<!--
|
||||
MFC/R2 variant. This depends on the OpenR2 supported variants
|
||||
A list of values can be found by executing the openr2 command r2test -l
|
||||
some valid values are:
|
||||
mx (Mexico)
|
||||
ar (Argentina)
|
||||
br (Brazil)
|
||||
ph (Philippines)
|
||||
itu (per ITU spec)
|
||||
-->
|
||||
<param name="variant" value="mx"/>
|
||||
|
||||
<!-- switch parameters (required), where to send calls to -->
|
||||
<param name="dialplan" value="XML"/>
|
||||
<param name="context" value="default"/>
|
||||
|
||||
<!--
|
||||
Max amount of ANI (caller id digits) to ask for
|
||||
<param name="max_ani" value="4"/>
|
||||
-->
|
||||
<!--
|
||||
Max amount of DNIS to ask for
|
||||
<param name="max_dnis" value="4"/>
|
||||
-->
|
||||
|
||||
<!-- Do not set parameters below this line unless you desire to tweak it because is not working -->
|
||||
|
||||
<!--
|
||||
Whether or not to get the ANI before getting DNIS (only affects incoming calls)
|
||||
Some telcos require ANI first some others do not care, if default go wrong on
|
||||
incoming calls, change this value
|
||||
<param name="get_ani_first" value="yes"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
Caller Category to send. Accepted values:
|
||||
- national_subscriber
|
||||
- national_priority_subscriber
|
||||
- international_subscriber
|
||||
- international_priority_subscriber
|
||||
- collect_call
|
||||
Usually national_subscriber (the default) works just fine
|
||||
<param name="category" value="national_subscriber"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
Brazil uses a special calling party category for collect calls (llamadas por cobrar)
|
||||
instead of using the operator (as in Mexico). The R2 spec in Brazil says a special GB tone
|
||||
should be used to reject collect calls. If you want to ALLOW collect calls specify 'yes',
|
||||
if you want to BLOCK collect calls then say 'no'. Default is to block collect calls.
|
||||
(see also 'double_answer')
|
||||
<param name="allow_collect_calls" value="yes"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
This feature is related but independent of allow_collect_calls
|
||||
Some PBX's require a double-answer process to block collect calls, if
|
||||
you ever have problems blocking collect calls using Group B signals (allow_collect_calls=no)
|
||||
then you may want to try with double_answer=yes, this will cause that every answer signal
|
||||
is changed to perform 'answer -> clear back -> answer' (sort of a flash)
|
||||
(see also 'allow_collect_calls')
|
||||
<param name="double_answer" value="yes"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
This feature allows to skip the use of Group B/II signals and go directly
|
||||
to the accepted state for incoming calls
|
||||
<param name="immediate_accept" value="yes"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
Skip request of calling party category and ANI
|
||||
<param name="skip_category" value="yes"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
Brazil use a special signal to force the release of the line (hangup) from the
|
||||
backward perspective. When forced_release=no, the normal clear back signal
|
||||
will be sent on hangup, which is OK for all mfcr2 variants I know of, except for
|
||||
Brazilian variant, where the central will leave the line up for several seconds (30, 60)
|
||||
which sometimes is not what people really want. When forced_release=yes, a different
|
||||
signal will be sent to hangup the call indicating that the line should be released immediately
|
||||
<param name="forced_release" value="yes"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
Whether or not report to the other end 'accept call with charge'
|
||||
This setting has no effect with most telecos, usually is safe
|
||||
leave the default (yes), but once in a while when interconnecting with
|
||||
old PBXs this may be useful.
|
||||
Concretely this affects the Group B signal used to accept calls
|
||||
<param name="charge_calls" value="yes"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
MFC/R2 value in milliseconds for the MF timeout. Any negative value
|
||||
means 'default', smaller values than 500ms are not recommended
|
||||
and can cause malfunctioning. If you experience protocol error
|
||||
due to MF timeout try incrementing this value in 500ms steps
|
||||
<param name="mfback_timeout" value="1500"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
MFC/R2 value in milliseconds for the metering pulse timeout.
|
||||
Metering pulses are sent by some telcos for some R2 variants
|
||||
during a call presumably for billing purposes to indicate costs,
|
||||
however this pulses use the same signal that is used to indicate
|
||||
call hangup, therefore a timeout is sometimes required to distinguish
|
||||
between a *real* hangup and a billing pulse that should not
|
||||
last more than 500ms, If you experience call drops after some
|
||||
minutes of being stablished try setting a value of some ms here,
|
||||
values greater than 500ms are not recommended.
|
||||
BE AWARE that choosing the proper protocol variant parameter
|
||||
implicitly sets a good recommended value for this timer, use this
|
||||
parameter only when you *really* want to override the default, otherwise
|
||||
just comment out this value.
|
||||
<param name="metering_pulse_timeout" value="1000"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
WARNING: advanced users only! I really mean it
|
||||
this parameter is commented by default because
|
||||
YOU DON'T NEED IT UNLESS YOU REALLY GROK MFC/R2
|
||||
READ COMMENTS on doc/r2proto.conf in openr2 package
|
||||
for more info
|
||||
<param name="advanced_protocol_file" value="/usr/local/freeswitch/conf/r2proto.conf"/>
|
||||
-->
|
||||
|
||||
<!-- USE THIS FOR DEBUGGING MFC-R2 PROTOCOL -->
|
||||
<!--
|
||||
Where to dump advanced call file protocol logs
|
||||
<param name="logdir" value="$${base_dir}/log/mfcr2"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
MFC/R2 valid logging values are: all,error,warning,debug,notice,cas,mf,nothing
|
||||
error,warning,debug and notice are self-descriptive
|
||||
'cas' is for logging ABCD CAS tx and rx
|
||||
'mf' is for logging of the Multi Frequency tones
|
||||
You can mix up values, like: loglevel=error,debug,mf to log just error, debug and
|
||||
multi frequency messages
|
||||
'all' is a special value to log all the activity
|
||||
'nothing' is a clean-up value, in case you want to not log any activity for
|
||||
a channel or group of channels
|
||||
BE AWARE that the level of output logged will ALSO depend on
|
||||
the value you have in FreeSWITCH logging configurations, if you disable output FreeSWITCH
|
||||
then it does not matter if you specify 'all' here, nothing will be logged
|
||||
so FreeSWITCH has the last word on what is going to be logged
|
||||
<param name="logging" value="debug,notice,warning,error,mf,cas"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
whether or not to drop protocol call files into 'logdir'
|
||||
<param name="call_files" value="yes"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
Use only for very technical debugging
|
||||
This is the size (if 0, dumps are disabled) of MF dump files. MF dump files
|
||||
are audio files that are dumped when a protocol error occurs.
|
||||
The files are dumped in whatever you set in the logdir parameter.
|
||||
Value -1 uses a default recommended size (which stores 5 seconds of audio)
|
||||
<param name="mf_dump_size" value="-1"/>
|
||||
-->
|
||||
</span>
|
||||
</r2_spans>
|
||||
|
||||
<!-- Sangoma ISDN PRI/BRI spans. Requires libsng_isdn to be installed -->
|
||||
<sangoma_pri_spans>
|
||||
<span name="wp1">
|
||||
<!--
|
||||
Switch emulation/Variant
|
||||
Possible values are:
|
||||
national
|
||||
4ess
|
||||
5ess
|
||||
qsig
|
||||
euroisdn
|
||||
ntt
|
||||
|
||||
<param name="switchtype" value="national"/>
|
||||
-->
|
||||
<!--
|
||||
Signalling
|
||||
Possible values are:
|
||||
net
|
||||
cpe
|
||||
|
||||
<param name="signalling" value="cpe"/>
|
||||
-->
|
||||
<!--
|
||||
Overlap - whether to support overlap receive
|
||||
Possible values are: Yes/No
|
||||
|
||||
<param name="overlap" value="yes"/>
|
||||
-->
|
||||
<!--
|
||||
Facility - whether to support facility messages
|
||||
Possible values are: Yes/No
|
||||
|
||||
<param name="facility" value="yes"/>
|
||||
-->
|
||||
<!--
|
||||
Minimum Digits
|
||||
In overlap receive mode.
|
||||
Minimum number of digits to receive before sending notification
|
||||
to the dialplan
|
||||
Possible values are: <Any digit>
|
||||
|
||||
<param name="min-digits" value="8"/>
|
||||
-->
|
||||
<!--
|
||||
TEI - default value for Terminal Equipment Identifier.
|
||||
Used in Point-to-point connections
|
||||
Possible values are: <1-127>
|
||||
|
||||
<param name="tei" value="0"/>
|
||||
-->
|
||||
<!--
|
||||
Type of Number (TON)
|
||||
Set the TON on outbound calls
|
||||
Possible values are:
|
||||
unknown
|
||||
international
|
||||
national
|
||||
network-specific
|
||||
subscriber-number
|
||||
abbreviated-number
|
||||
|
||||
<param name="outbound-called-ton" value="unknown"/>
|
||||
<param name="outbound-calling-ton" value="unknown"/>
|
||||
<param name="outbound-rdnis-ton" value="unknown"/>
|
||||
-->
|
||||
<!--
|
||||
Numbering Plan Indendification (NPI)
|
||||
Set the NPI on outbound calls
|
||||
Possible values are:
|
||||
unknown
|
||||
isdn
|
||||
data
|
||||
telex
|
||||
national
|
||||
private
|
||||
reserved
|
||||
|
||||
<param name="outbound-called-npi" value="unknown"/>
|
||||
<param name="outbound-calling-npi" value="unknown"/>
|
||||
<param name="outbound-rdnis-npi" value="unknown"/>
|
||||
-->
|
||||
<!--
|
||||
Bearer Capability - Transfer Capability
|
||||
Set the Bearer Capability - Transfer Capability on outbound calls
|
||||
Possible values are:
|
||||
speech
|
||||
unrestricted-digital-information
|
||||
restricted-digital-information
|
||||
3.1-Khz-audio
|
||||
7-Khz-audio
|
||||
15-Khz-audio
|
||||
video
|
||||
|
||||
<param name="outbound-bc-transfer-cap" value="speech"/>
|
||||
-->
|
||||
<!--
|
||||
Bearer Capability - User Layer 1
|
||||
Set the Bearer Capability - User Layer 1 on outbound calls
|
||||
Possible values are:
|
||||
|
||||
V.110
|
||||
ulaw
|
||||
alaw
|
||||
|
||||
<param name="outbound-bc-user-layer1" value="speech"/>
|
||||
-->
|
||||
<!--
|
||||
Channel Restart Timeout
|
||||
If we do not receive a RESTART message within this timeout on link
|
||||
UP, we will send a channel restart.
|
||||
|
||||
|
||||
<param name="channel-restart-timeout" value="20"/>
|
||||
-->
|
||||
<!--
|
||||
Local Number (MSN)
|
||||
On incoming calls, we will only respond to this call if
|
||||
the Called Party Number matches this value.
|
||||
|
||||
Note: Up to 8 local numbers can be added per span.
|
||||
<param name="local-number" value="9054741990"/>
|
||||
-->
|
||||
<!--
|
||||
Facility Timeout
|
||||
Amount of time to wait for the FACILITY message after a SETUP message is
|
||||
received
|
||||
<param name="facility-timeout" value="1"/>
|
||||
-->
|
||||
<!--
|
||||
Transfer Timeout
|
||||
Amount of time to wait for the remote switch to respond to a transfer request
|
||||
<param name="transfer-timeout" value="20"/>
|
||||
-->
|
||||
<!--
|
||||
AT&T Transfer - Remove DTMF
|
||||
Whether to remove DTMF tones received from remote switch when performing
|
||||
AT&T Transfer.
|
||||
|
||||
<param name="att-remove-dtmf" value="yes/no"/>
|
||||
-->
|
||||
<!--
|
||||
Facility Information Element Decoding
|
||||
Whether to decode contents within Facility IE. You should only disable this option if your custom application has its own Facility IE decoding.
|
||||
|
||||
<param name="facility-ie-decode" value="yes/no"/>
|
||||
-->
|
||||
<!--
|
||||
Ignore cause value
|
||||
When using 5ESS switchtype, whether or not do initiate disconnects based on cause code.
|
||||
|
||||
<param name="ignore-cause-value" value="yes/no"/>
|
||||
-->
|
||||
<!--
|
||||
Trace (Interpreted)
|
||||
Whether or not to enable Q921/Q931 trace on start
|
||||
|
||||
<param name="q931-trace" value="yes/no"/>
|
||||
<param name="q921-trace" value="yes/no"/>
|
||||
-->
|
||||
<!--
|
||||
Trace (Raw)
|
||||
Whether or not to enable Q921/Q931 trace on start
|
||||
|
||||
<param name="q931-raw-trace" value="yes/no"/>
|
||||
<param name="q921-raw-trace" value="yes/no"/>
|
||||
-->
|
||||
<!--
|
||||
Force sending complete
|
||||
Will add Sending Complete IE to outgoing SETUP message
|
||||
By default, enabled on EuroISDN, disabled on US variants.
|
||||
|
||||
<param name="force-sending-complete" value="yes/no"/>
|
||||
-->
|
||||
<!--
|
||||
Early Media Override
|
||||
Assume early media is available, even if Q.931 message does not have
|
||||
progress indicator IE = in-band data ready
|
||||
|
||||
Possible values
|
||||
on-proceed
|
||||
on-progress
|
||||
on-alert
|
||||
|
||||
<param name="early-media-override" value="on-alert"/>
|
||||
-->
|
||||
<!--
|
||||
Invert Channel ID Invert Bit
|
||||
|
||||
Invert the Channel ID Extend Bit
|
||||
|
||||
<param name="chan-id-invert-extend-bit" value="yes/no"/>
|
||||
-->
|
||||
<!--
|
||||
CID Name transmit method
|
||||
|
||||
How to transmit Caller ID Name
|
||||
|
||||
Possible values:
|
||||
display-ie
|
||||
user-user-ie
|
||||
facility-ie
|
||||
default (will transmit CID-Name based on variant)
|
||||
|
||||
<param name="cid-name-transmit-method" value="default"/>
|
||||
-->
|
||||
<!--
|
||||
CID Name transmit
|
||||
|
||||
Whether to transmit Caller ID Name
|
||||
|
||||
Possible values:
|
||||
yes - always send CID-name
|
||||
no - nether send CID-name
|
||||
default (will transmit CID-Name based on variant)
|
||||
|
||||
<param name="cid-name-transmit-method" value="default"/>
|
||||
-->
|
||||
<!--
|
||||
Send CONNECT ACK
|
||||
Whether to send a Connect Ack
|
||||
|
||||
Possible values:
|
||||
yes - send connect ack
|
||||
no - do not send connect ack
|
||||
default (will transmit Connect Ack based on variant + signaling)
|
||||
|
||||
<param name="send-connect-ack" value="yes"/>
|
||||
-->
|
||||
|
||||
<!--
|
||||
Q.931 Timers in seconds
|
||||
|
||||
Override default Q.931 values
|
||||
|
||||
timers:
|
||||
timer-t301
|
||||
timer-t302
|
||||
timer-t303
|
||||
timer-t304
|
||||
timer-t305
|
||||
timer-t306
|
||||
timer-t307
|
||||
timer-t308
|
||||
timer-t310
|
||||
timer-t312
|
||||
timer-t313
|
||||
timer-t314
|
||||
timer-t316
|
||||
timer-t318
|
||||
timer-t319
|
||||
timer-t322
|
||||
|
||||
<param name="timer-t301" value="10"/>
|
||||
-->
|
||||
</span>
|
||||
</sangoma_pri_spans>
|
||||
|
||||
|
||||
<!--
|
||||
PRI passive tapping spans. Requires patched version from libpri at http://svn.digium.com/svn/libpri/team/moy/tap-1.4
|
||||
You must also configure FreeTDM with "-with-pritap" (see ./configure help for details)
|
||||
-->
|
||||
<pritap_spans>
|
||||
<span name="tapped1">
|
||||
<!-- The peer span name used to tap the link -->
|
||||
<param name="peerspan" value="tapped2"/>
|
||||
|
||||
<!--
|
||||
Whether to mix the audio from the peerspan with the audio from this span
|
||||
This is most likely what you want (and therefore the default) so you can hear
|
||||
the full conversation being tapped instead of just one side
|
||||
-->
|
||||
<!-- <param name="mixaudio" value="yes"/> -->
|
||||
|
||||
<!-- switch parameters (required), where to send calls to -->
|
||||
<param name="dialplan" value="XML"/>
|
||||
<param name="context" value="default"/>
|
||||
</span>
|
||||
|
||||
<span name="tapped2">
|
||||
<!-- This span is linked to "tapped1" through its peerspan parameter -->
|
||||
<param name="peerspan" value="tapped1"/>
|
||||
<!-- <param name="mixaudio" value="yes"/> -->
|
||||
|
||||
<!-- switch parameters (required), where to send calls to -->
|
||||
<param name="dialplan" value="XML"/>
|
||||
<param name="context" value="default"/>
|
||||
</span>
|
||||
</pritap_spans>
|
||||
|
||||
<!--
|
||||
GSM spans (libwat must be installed when configuring the freetdm build)
|
||||
-->
|
||||
<gsm_spans>
|
||||
<span name="gsm01">
|
||||
<!-- where to send inbound calls to -->
|
||||
<param name="dialplan" value="XML" />
|
||||
<param name="context" value="module1" />
|
||||
|
||||
<!--
|
||||
GSM module type
|
||||
Accepted values: "telit", "telit-gc864", "telit-he910", "telit-cc864", "telit-de910", "motorola"
|
||||
-->
|
||||
<param name="moduletype" value="telit-gc864" />
|
||||
|
||||
<!--
|
||||
Debug mask (accepted values: all, uart_raw, uart_raw, call_state, span_state, at_parse, at_handle, sms_encode, sms_decode, none)
|
||||
comma-separated values are accepted to combine those levels
|
||||
-->
|
||||
<param name="debug" value="all" />
|
||||
|
||||
<!--
|
||||
Whether to enable HW DTMF in the hardware module
|
||||
Accepted values: true, generate, detect, false
|
||||
-->
|
||||
<param name="hwdtmf" value="true" />
|
||||
|
||||
<!--
|
||||
This enables conditional forwarding on module startup
|
||||
-->
|
||||
<!-- <param name="conditional-forwarding-prefix" value="*71" /> -->
|
||||
<!-- <param name="conditional-forwarding-number" value="123456789" /> -->
|
||||
|
||||
<!--
|
||||
This enables immediate forwarding logic to simulate hunt groups
|
||||
The syntax for immediate-forwarding-numbers ia a comma-separated
|
||||
list of elements in the form [<span-name>:]<number>
|
||||
|
||||
if span-name is specified, the span will be checked for availability
|
||||
before enabling forwarding to that span number
|
||||
|
||||
The span-name must be a defined freetdm span name
|
||||
|
||||
If the span-name is not specified then only first number specified is used for
|
||||
forwarding whenever this span is busy
|
||||
-->
|
||||
<!-- <param name="immediate-forwarding-prefix" value="*72" /> -->
|
||||
<!-- <param name="immediate-forwarding-numbers" value="gsm02:123456789" /> -->
|
||||
|
||||
<!-- Number to dial to disable forwarding when the call ends (if immediate forwarding was enabled) -->
|
||||
<!-- <param name="disable-forwarding-number" value="*73" /> -->
|
||||
|
||||
<!-- Startup raw AT commands to run, you can repeat this parameter as many times as needed -->
|
||||
<!-- <param name="startup-command" value="AT$GPSP=1" /> -->
|
||||
<!-- <param name="startup-command" value="AT$GPSAT=1" /> -->
|
||||
</span>
|
||||
</gsm_spans>
|
||||
</configuration>
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
; you dont need this file unless you use PIKA boards
|
||||
|
||||
; each category is a config profile
|
||||
; to apply the profile append it to a channel def in
|
||||
; freetdm.conf with @<profile_name>
|
||||
; e.g.
|
||||
; [span pika]
|
||||
; name => pika
|
||||
; number => pika
|
||||
; fxs-channel => 1:0:1-12@default
|
||||
|
||||
[default]
|
||||
; region is na or eu
|
||||
;region => na
|
||||
;rx-gain => 0.00
|
||||
;rx-agc-enabled => false
|
||||
;rx-agc-targetPower => -15.00
|
||||
;rx-agc-minGain => -6.00
|
||||
;rx-agc-maxGain => 18.00
|
||||
;rx-agc-attackRate => 170
|
||||
;rx-agc-decayRate => 750
|
||||
;rx-agc-speechThreshold => -36.00
|
||||
;rx-vad-enabled => false
|
||||
;rx-vad-activationThreshold => -40.00
|
||||
;rx-vad-activationDebounceTime => 72
|
||||
;rx-vad-deactivationThreshold => -40.00
|
||||
;rx-vad-deactivationDebounceTime => 984
|
||||
;rx-vad-preSpeechBufferSize => 240
|
||||
;tx-gain => 0.00
|
||||
;tx-agc-enabled => true
|
||||
;tx-agc-targetPower => -15.00
|
||||
;tx-agc-minGain => -6.00
|
||||
;tx-agc-maxGain => 18.00
|
||||
;tx-agc-attackRate => 170
|
||||
;tx-agc-decayRate => 750
|
||||
;tx-agc-speechThreshold => -36.00
|
||||
;ec-enabled => false
|
||||
;ec-doubleTalkerThreshold => -6.00
|
||||
;ec-speechPresentThreshold => -40.00
|
||||
;ec-echoSuppressionThreshold => -18.00
|
||||
;ec-echoSuppressionEnabled => true
|
||||
;ec-comfortNoiseEnabled => true
|
||||
;ec-adaptationModeEnabled => true
|
||||
@@ -1,142 +0,0 @@
|
||||
[us]
|
||||
generate-dial => v=-7;%(1000,0,350,440)
|
||||
detect-dial => 350,440
|
||||
|
||||
generate-ring => v=-7;%(2000,4000,440,480)
|
||||
detect-ring => 440,480
|
||||
|
||||
generate-busy => v=-7;%(500,500,480,620)
|
||||
detect-busy => 480,620
|
||||
|
||||
generate-attn => v=0;%(100,100,1400,2060,2450,2600)
|
||||
detect-attn => 1400,2060,2450,2600
|
||||
|
||||
generate-callwaiting-sas => v=0;%(300,0,440)
|
||||
detect-callwaiting-sas => 440
|
||||
|
||||
generate-callwaiting-cas => v=0;%(80,0,2750,2130)
|
||||
detect-callwaiting-cas => 2750,2130
|
||||
|
||||
detect-fail1 => 913.8
|
||||
detect-fail2 => 1370.6
|
||||
detect-fail3 => 1776.7
|
||||
|
||||
|
||||
[sg]
|
||||
generate-dial => v=-7;%(1000,0,425)
|
||||
detect-dial => 425
|
||||
|
||||
generate-ring => v=-7;%(2000,4000,425)
|
||||
detect-ring => 425
|
||||
|
||||
generate-busy => v=-7;%(750,750,425)
|
||||
detect-busy => 425
|
||||
|
||||
generate-attn => v=0;%(100,100,1400,2060,2450,2600)
|
||||
detect-attn => 1400,2060,2450,2600
|
||||
|
||||
generate-callwaiting-sas => v=0;%(300,0,440)
|
||||
detect-callwaiting-sas => 440
|
||||
|
||||
generate-callwaiting-cas => v=0;%(80,0,2750,2130)
|
||||
detect-callwaiting-cas => 2750,2130
|
||||
|
||||
detect-fail1 => 913.8
|
||||
detect-fail2 => 1370.6
|
||||
detect-fail3 => 1776.7
|
||||
|
||||
|
||||
[ru]
|
||||
generate-dial => v=-7;%(1000,425)
|
||||
detect-dial => 0
|
||||
|
||||
generate-ring => v=-7;%(800,5000,425,0)
|
||||
detect-ring => 425,0
|
||||
|
||||
generate-busy => v=-7;%(350,350,425,0)
|
||||
detect-busy => 425,0
|
||||
|
||||
generate-attn => v=0;%(100,100,1400,2060,2450,2600)
|
||||
detect-attn => 1400,2060,2450,2600
|
||||
|
||||
generate-callwaiting-sas => v=0;%(300,0,440)
|
||||
detect-callwaiting-sas => 440,480
|
||||
|
||||
generate-callwaiting-cas => v=0;%(80,0,2750,2130)
|
||||
detect-callwaiting-cas => 2750,2130
|
||||
|
||||
detect-fail1 => 913.8
|
||||
detect-fail2 => 1370.6
|
||||
detect-fail3 => 1776.7
|
||||
|
||||
|
||||
[in]
|
||||
generate-dial => v=-7;%(1000,0,375,425)
|
||||
detect-dial => 375,425
|
||||
|
||||
generate-ring => v=-7;%(2000,4000,440,480)
|
||||
detect-ring => 440,480
|
||||
|
||||
generate-busy => v=-7;%(500,500,480,620)
|
||||
detect-busy => 480,620
|
||||
|
||||
generate-attn => v=0;%(100,100,1400,2060,2450,2600)
|
||||
detect-attn => 1400,2060,2450,2600
|
||||
|
||||
generate-callwaiting-sas => v=0;%(300,0,440)
|
||||
detect-callwaiting-sas => 440
|
||||
|
||||
generate-callwaiting-cas => v=0;%(80,0,2750,2130)
|
||||
detect-callwaiting-cas => 2750,2130
|
||||
|
||||
detect-fail1 => 913.8
|
||||
detect-fail2 => 1370.6
|
||||
detect-fail3 => 776.7
|
||||
|
||||
|
||||
[th]
|
||||
generate-dial => v=-7;%(1000,0,400,400)
|
||||
detect-dial => 400,400
|
||||
|
||||
generate-ring => v=-7;%(2000,4000,400,400)
|
||||
detect-ring => 400,400
|
||||
|
||||
generate-busy => v=-7;%(500,500,480,620)
|
||||
detect-busy => 480,620
|
||||
|
||||
generate-attn => v=0;%(100,100,1400,2060,2450,2600)
|
||||
detect-attn => 1400,2060,2450,2600
|
||||
|
||||
generate-callwaiting-sas => v=0;%(300,0,440)
|
||||
detect-callwaiting-sas => 440
|
||||
|
||||
generate-callwaiting-cas => v=0;%(80,0,2750,2130)
|
||||
detect-callwaiting-cas => 2750,2130
|
||||
|
||||
detect-fail1 => 913.8
|
||||
detect-fail2 => 1370.6
|
||||
detect-fail3 => 1776.7
|
||||
|
||||
|
||||
[au]
|
||||
generate-dial => v=-7;%(1000,0,413,438)
|
||||
detect-dial => 413,438
|
||||
|
||||
generate-ring => v=-7;%(400,200,413,438);%(400,2000,413,438)
|
||||
detect-ring => 413,438
|
||||
|
||||
generate-busy => v=-7;%(375,375,425)
|
||||
detect-busy => 425
|
||||
|
||||
generate-attn => v=0;%(100,100,1400,2060,2450,2600)
|
||||
detect-attn => 1400,2060,2450,2600
|
||||
|
||||
generate-callwaiting-sas => v=0;%(300,0,440)
|
||||
detect-callwaiting-sas => 440
|
||||
|
||||
generate-callwaiting-cas => v=0;%(80,0,2750,2130)
|
||||
detect-callwaiting-cas => 2750,2130
|
||||
|
||||
detect-fail1 => 913.8
|
||||
detect-fail2 => 1370.6
|
||||
detect-fail3 => 776.7
|
||||
@@ -1,13 +0,0 @@
|
||||
[defaults]
|
||||
; User space interval at which data will be delivered
|
||||
codec_ms => 20
|
||||
|
||||
; wink and flash interval
|
||||
wink_ms => 150
|
||||
flash_ms => 750
|
||||
|
||||
; size of the driver queue of elements of MTU size
|
||||
; typical case is 10 elements of 80 bytes each (10ms of ulaw/alaw)
|
||||
; don't mess with this if you don't know what you're doing
|
||||
; txqueue_size => 10
|
||||
; rxqueue_size => 10
|
||||
@@ -1,8 +0,0 @@
|
||||
[defaults]
|
||||
codec_ms => 20
|
||||
wink_ms => 150
|
||||
flash_ms => 750
|
||||
echo_cancel_level => 64
|
||||
rxgain => 0.0
|
||||
txgain => 0.0
|
||||
|
||||
@@ -1,480 +0,0 @@
|
||||
# -*- Autoconf -*-
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ([2.59])
|
||||
AC_INIT([freetdm], [0.1], [bugs@freeswitch.org])
|
||||
AC_CONFIG_SRCDIR([src/ftdm_io.c])
|
||||
|
||||
AC_CONFIG_AUX_DIR([build])
|
||||
AC_CONFIG_MACRO_DIR([build])
|
||||
AM_INIT_AUTOMAKE
|
||||
|
||||
# >=automake-1.11
|
||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||
|
||||
# override some default libtool behavior and invoke AC_PROG_LIBTOOL
|
||||
# (see http://lists.gnu.org/archive/html/libtool/2007-03/msg00000.html)
|
||||
m4_defun([_LT_AC_LANG_F77_CONFIG], [:])
|
||||
m4_defun([_LT_AC_LANG_GCJ_CONFIG], [:])
|
||||
m4_defun([_LT_AC_LANG_RC_CONFIG], [:])
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CC
|
||||
AC_PROG_MAKE_SET
|
||||
AM_PROG_CC_C_O
|
||||
AC_PROG_LIBTOOL
|
||||
AC_PROG_INSTALL
|
||||
|
||||
# NOTE: pkg-config is used to detect libisdn
|
||||
m4_ifdef([PKG_PROG_PKG_CONFIG],
|
||||
[PKG_PROG_PKG_CONFIG],
|
||||
[AC_MSG_WARN([pkg-config missing (required for libisdn detection)])]
|
||||
)
|
||||
|
||||
AX_COMPILER_VENDOR
|
||||
|
||||
# AC_PREFIX_DEFAULT does not get expanded until too late so we need
|
||||
# to do this to use prefix in this script
|
||||
AC_PREFIX_DEFAULT([/usr/local/freetdm])
|
||||
if test "x${prefix}" = "xNONE" ; then
|
||||
prefix='/usr/local/freetdm'
|
||||
fi
|
||||
|
||||
# Absolute source/build directory
|
||||
FT_SRCDIR=`(cd $srcdir && pwd)`
|
||||
ft_builddir=`pwd`
|
||||
AC_SUBST([FT_SRCDIR])
|
||||
AC_SUBST([ft_builddir])
|
||||
|
||||
if test "$sysconfdir" = "\${prefix}/etc" ; then
|
||||
confdir="$prefix/conf"
|
||||
else
|
||||
confdir="$sysconfdir"
|
||||
fi
|
||||
|
||||
AC_SUBST([confdir])
|
||||
|
||||
DEFAULT_INCLUDES="-I. -I./src/include -I\$(srcdir)"
|
||||
AC_SUBST([DEFAULT_INCLUDES])
|
||||
|
||||
# Where to install the modules
|
||||
AC_ARG_WITH([modinstdir],
|
||||
[AS_HELP_STRING([--with-modinstdir=DIR], [Install modules into this location (default: ${prefix}/mod)])],
|
||||
[case "${withval}" in
|
||||
no|yes) AC_MSG_ERROR([Invalid value \"${withval}\", option requires a valid path]) ;;
|
||||
*) modinstdir="${withval}" ;;
|
||||
esac],
|
||||
[modinstdir="${prefix}/mod"]
|
||||
)
|
||||
AC_SUBST([modinstdir])
|
||||
|
||||
# freetdm.pc pkgconfig file
|
||||
AC_ARG_WITH([pkgconfigdir],
|
||||
[AS_HELP_STRING([--with-pkgconfigdir=DIR], [Installation directory for pkgconfig file (default: ${libdir}/pkgconfig)])],
|
||||
[case "${withval}" in
|
||||
yes|no) AC_MSG_ERROR([Invalid value ${withval} for option --with-pkgconfigdir]) ;;
|
||||
*) pkgconfigdir="${withval}" ;;
|
||||
esac
|
||||
],
|
||||
[pkgconfigdir="${libdir}/pkgconfig"]
|
||||
)
|
||||
AC_SUBST([pkgconfigdir])
|
||||
|
||||
AC_ARG_ENABLE([enable_64],
|
||||
[AS_HELP_STRING([--enable-64], [Enable 64bit compilation])],
|
||||
[enable_64="${enableval}"],
|
||||
[enable_64="no"]
|
||||
)
|
||||
|
||||
case "${ax_cv_c_compiler_vendor}" in
|
||||
gnu)
|
||||
COMP_VENDOR_CFLAGS="-ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -O0"
|
||||
;;
|
||||
sun)
|
||||
COMP_VENDOR_CFLAGS="-xc99=all -mt -xCC -xvpara"
|
||||
if test "$enable_64" != "no" ; then
|
||||
COMP_VENDOR_CFLAGS="-m64 $COMP_VENDOR_CFLAGS"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
COMP_VENDOR_COMPAT_CFLAGS="-Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes"
|
||||
COMP_VENDOR_CFLAGS="-std=c99 $COMP_VENDOR_COMPAT_CFLAGS"
|
||||
;;
|
||||
esac
|
||||
AC_SUBST([COMP_VENDOR_COMPAT_CFLAGS])
|
||||
AC_SUBST([COMP_VENDOR_CFLAGS])
|
||||
|
||||
|
||||
# Enable debugging
|
||||
AC_ARG_ENABLE([debug],
|
||||
[AC_HELP_STRING([--enable-debug], [build with debug information])],
|
||||
[enable_debug="${enableval}"],
|
||||
[enable_debug="yes"]
|
||||
)
|
||||
if test "${enable_debug}" != "no"; then
|
||||
AC_DEFINE([DEBUG], [], [Enable extra debugging.])
|
||||
|
||||
if test "x${ax_cv_c_compiler_vendor}" = "xgnu" ; then
|
||||
COMP_VENDOR_CFLAGS="$COMP_VENDOR_CFLAGS -g -ggdb"
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([COMP_VENDOR_CFLAGS])
|
||||
|
||||
AC_CHECK_LIB([dl], [dlopen])
|
||||
AC_CHECK_LIB([pthread], [pthread_create])
|
||||
AC_CHECK_LIB([m], [cos])
|
||||
|
||||
AC_CHECK_HEADERS([netdb.h sys/select.h execinfo.h])
|
||||
|
||||
AC_CHECK_FUNC([gethostbyname_r],
|
||||
[], [AC_CHECK_LIB([nsl], [gethostbyname_r])]
|
||||
)
|
||||
if test "$ac_cv_func_gethostbyname_r" = "yes" -o "$ac_cv_lib_nsl_gethostbyname_r" = "yes"
|
||||
then
|
||||
AC_MSG_CHECKING([whether gethostbyname_r requires five arguments])
|
||||
|
||||
ac_cv_func_gethostbyname_r_five_args="no"
|
||||
|
||||
AC_TRY_COMPILE([#include <netdb.h>],
|
||||
[char *name;
|
||||
struct hostent *he, *res;
|
||||
char buffer[2048];
|
||||
int buflen = 2048;
|
||||
(void)gethostbyname_r(name, he, buffer, buflen, &res)],
|
||||
[ac_cv_func_gethostbyname_r_five_args="yes"
|
||||
AC_DEFINE([HAVE_GETHOSTBYNAME_R_FIVE], [1], [gethostbyname_r has five arguments])]
|
||||
)
|
||||
|
||||
AC_MSG_RESULT([$ac_cv_func_gethostbyname_r_five_args])
|
||||
AC_DEFINE([HAVE_GETHOSTBYNAME_R], [1], [threadsafe gethostbyname])
|
||||
fi
|
||||
|
||||
##
|
||||
## Modules and optional features
|
||||
##
|
||||
AC_MSG_RESULT([${as_nl}<<>> Modules and optional features])
|
||||
|
||||
##
|
||||
# pritap (TODO: add checks)
|
||||
#
|
||||
HAVE_PRITAP="no"
|
||||
AC_ARG_WITH([pritap],
|
||||
[AS_HELP_STRING([--with-pritap], [Install ftmod_pritap])],
|
||||
[case "${withval}" in
|
||||
no) enable_pritap="no" ;;
|
||||
*) enable_pritap="yes" ;;
|
||||
esac],
|
||||
[enable_pritap="no"]
|
||||
)
|
||||
HAVE_PRITAP="${enable_pritap}"
|
||||
AM_CONDITIONAL([HAVE_PRITAP],[test "${enable_pritap}" = "yes"])
|
||||
|
||||
##
|
||||
# OpenR2 stack
|
||||
#
|
||||
HAVE_OPENR2="no"
|
||||
AC_CHECK_LIB([openr2], [openr2_context_set_io_type], [HAVE_OPENR2="yes"])
|
||||
AC_MSG_RESULT([checking whether to build ftmod_r2... ${HAVE_OPENR2}])
|
||||
AM_CONDITIONAL([HAVE_OPENR2], [test "${HAVE_OPENR2}" = "yes"])
|
||||
|
||||
##
|
||||
# WAT GSM stack
|
||||
#
|
||||
HAVE_WAT="no"
|
||||
AC_CHECK_LIB([wat], [wat_version], [HAVE_WAT="yes"])
|
||||
AC_MSG_RESULT([checking whether to build ftmod_wat... ${HAVE_WAT}])
|
||||
AM_CONDITIONAL([HAVE_WAT], [test "${HAVE_WAT}" = "yes"])
|
||||
|
||||
##
|
||||
# Digium libpri (TODO: add checks)
|
||||
#
|
||||
HAVE_LIBPRI="no"
|
||||
AC_ARG_WITH([libpri],
|
||||
[AS_HELP_STRING([--with-libpri@<:@=PREFIX@:>@], [Install ftmod_libpri])],
|
||||
[case "${withval}" in
|
||||
no|yes) with_libpri="${withval}" ;;
|
||||
*) AS_IF([test -d "${withval}"],
|
||||
[with_libpri="${withval}"],
|
||||
[AC_MSG_ERROR([Invalid argument for --with-libpri, \"${withval}\" is not a directory])]
|
||||
) ;;
|
||||
esac],
|
||||
[with_libpri="no"]
|
||||
)
|
||||
if test "x${with_libpri}" != "xno"
|
||||
then
|
||||
save_LIBS="${LIBS}"
|
||||
save_CPPFLAGS="${CPPFLAGS}"
|
||||
save_LDFLAGS="${LDFLAGS}"
|
||||
|
||||
LIBPRI_CPPFLAGS=""
|
||||
LIBPRI_LDFLAGS=""
|
||||
|
||||
AC_MSG_RESULT([${as_nl}<<>> Digium libpri])
|
||||
|
||||
AS_IF([test "x${with_libpri}" != "xyes"],
|
||||
[LIBPRI_CPPFLAGS="-I${with_libpri}/include"
|
||||
LIBPRI_LDFLAGS="-L${with_libpri}/lib"],
|
||||
)
|
||||
|
||||
LDFLAGS="${save_LDFLAGS} ${LIBPRI_LDFLAGS}"
|
||||
CPPFLAGS="${save_CPPFLAGS} ${LIBPRI_CPPFLAGS}"
|
||||
LIBS="${LIBS} -lpri"
|
||||
|
||||
AC_MSG_CHECKING([whether libpri is usable])
|
||||
AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[#include <libpri.h>],
|
||||
[const char *version = pri_get_version();
|
||||
(void)version;]
|
||||
)],
|
||||
[AC_MSG_RESULT([yes])
|
||||
HAVE_LIBPRI="yes"],
|
||||
[AC_MSG_RESULT([no])
|
||||
AC_MSG_ERROR([libpri not found or unusable (see config.log for details)])]
|
||||
)
|
||||
|
||||
AC_MSG_CHECKING([whether libpri is too old])
|
||||
AC_PREPROC_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[#include <libpri.h>],
|
||||
[#if !defined(PRI_IO_FUNCS)
|
||||
#error "libpri is lacking PRI_IO_FUNCS"
|
||||
#elif !defined(PRI_NEW_SET_API)
|
||||
#error "libpri is lacking PRI_NEW_SET_API"
|
||||
#endif]
|
||||
)],
|
||||
[AC_MSG_RESULT([no])],
|
||||
[AC_MSG_RESULT([yes])
|
||||
AC_MSG_ERROR([Your version of libpri is too old (pre 1.2), please update!])]
|
||||
)
|
||||
|
||||
AC_MSG_CHECKING([whether libpri has BRI support])
|
||||
AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[extern void pri_new_bri_cb(void);],
|
||||
[pri_new_bri_cb();]
|
||||
)],
|
||||
[AC_DEFINE([HAVE_LIBPRI_BRI], [1], [libpri has BRI support])
|
||||
AC_MSG_RESULT([yes])],
|
||||
[AC_MSG_RESULT([no])
|
||||
AC_MSG_NOTICE([You will need libpri-1.4.12_beta1 or newer for BRI support])]
|
||||
)
|
||||
|
||||
AC_MSG_CHECKING([whether libpri has AOC event support])
|
||||
AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[extern void pri_aoc_events_enable(void);],
|
||||
[pri_aoc_events_enable();]
|
||||
)],
|
||||
[AC_DEFINE([HAVE_LIBPRI_AOC], [1], [libpri has AOC event support])
|
||||
AC_MSG_RESULT([yes])],
|
||||
[AC_MSG_RESULT([no])
|
||||
AC_MSG_NOTICE([You will need libpri-1.4.12_beta1 or newer for AOC event support])]
|
||||
)
|
||||
|
||||
|
||||
AC_MSG_CHECKING([whether libpri has pri_maintenance_service()])
|
||||
AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[extern int pri_maintenance_service(void);],
|
||||
[pri_maintenance_service();]
|
||||
)],
|
||||
[AC_DEFINE([HAVE_LIBPRI_MAINT_SERVICE], [1], [libpri has pri_maintenance_service()])
|
||||
AC_MSG_RESULT([yes])],
|
||||
[AC_MSG_RESULT([no])
|
||||
AC_MSG_NOTICE([You will need libpri-1.4.11 or newer for the ftdm libpri maintenance set of commands])]
|
||||
)
|
||||
|
||||
# libpri is available, set variables for Makefile(.am)
|
||||
AC_SUBST([LIBPRI_LIBS], [-lpri])
|
||||
AC_SUBST([LIBPRI_LDFLAGS])
|
||||
AC_SUBST([LIBPRI_CPPFLAGS])
|
||||
|
||||
LIBS="${save_LIBS}"
|
||||
LDFLAGS="${save_LDFLAGS}"
|
||||
CPPFLAGS="${save_CPPFLAGS}"
|
||||
fi
|
||||
AM_CONDITIONAL([HAVE_LIBPRI],[test "x${HAVE_LIBPRI}" = "xyes"])
|
||||
|
||||
##
|
||||
# Sangoma Wanpipe
|
||||
#
|
||||
HAVE_LIBSANGOMA="no"
|
||||
AC_MSG_RESULT([${as_nl}<<>> Sangoma Wanpipe])
|
||||
AC_CHECK_LIB([sangoma], [sangoma_span_chan_toif], [HAVE_LIBSANGOMA="yes"])
|
||||
AC_MSG_RESULT([checking whether to build ftmod_wanpipe... ${HAVE_LIBSANGOMA}])
|
||||
AM_CONDITIONAL([HAVE_LIBSANGOMA], [test "${HAVE_LIBSANGOMA}" = "yes"])
|
||||
|
||||
##
|
||||
# Sangoma ISDN stack
|
||||
#
|
||||
HAVE_SNG_ISDN="no"
|
||||
AC_MSG_RESULT([${as_nl}<<>> Sangoma ISDN stack])
|
||||
AC_CHECK_LIB([sng_isdn], [sng_isdn_init], [HAVE_SNG_ISDN="yes"])
|
||||
AC_MSG_RESULT([checking whether to build ftmod_sangoma_isdn... ${HAVE_SNG_ISDN}])
|
||||
AM_CONDITIONAL([HAVE_SNG_ISDN], [test "${HAVE_SNG_ISDN}" = "yes"])
|
||||
|
||||
if test "${HAVE_SNG_ISDN}" = "yes"; then
|
||||
if test "${build}" = "${host}"
|
||||
then
|
||||
case "${host}" in
|
||||
x86_64-*)
|
||||
# X86_64 machines need additional flags when compiling against libsng_isdn
|
||||
CFLAGS="$CFLAGS -DBIT_64 -DALIGN_64BIT"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
##
|
||||
# Sangoma SS7 stack
|
||||
#
|
||||
HAVE_SNG_SS7="no"
|
||||
AC_MSG_RESULT([${as_nl}<<>> Sangoma SS7 stack])
|
||||
AC_CHECK_LIB([sng_ss7], [sng_isup_init_gen], [HAVE_SNG_SS7="yes"])
|
||||
AC_MSG_RESULT([checking whether to build ftmod_sangoma_ss7... ${HAVE_SNG_SS7}])
|
||||
AM_CONDITIONAL([HAVE_SNG_SS7], [test "${HAVE_SNG_SS7}" = "yes"])
|
||||
|
||||
if test "${HAVE_SNG_SS7}" = "yes"; then
|
||||
if test "${build}" = "${host}"
|
||||
then
|
||||
case "${host}" in
|
||||
x86_64-*)
|
||||
# X86_64 machines need additional flags when compiling against libsng_isdn
|
||||
CFLAGS="$CFLAGS -DBIT_64 -DALIGN_64BIT"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
##
|
||||
# zlib (required for Sangoma SS7 Transparent IAM)
|
||||
#
|
||||
HAVE_ZLIB="no"
|
||||
AC_MSG_RESULT([${as_nl}<<>> zlib])
|
||||
AC_CHECK_LIB([z], [compress], [HAVE_ZLIB="yes"])
|
||||
AC_MSG_RESULT([checking whether zlib is installed... ${HAVE_ZLIB}])
|
||||
AM_CONDITIONAL([HAVE_ZLIB], [test "{HAVE_ZLIB]" = "yes"])
|
||||
if test "${HAVE_ZLIB}" = "yes"; then
|
||||
CFLAGS="$CFLAGS -DHAVE_ZLIB"
|
||||
fi
|
||||
|
||||
##
|
||||
# libisdn
|
||||
#
|
||||
HAVE_LIBISDN="no"
|
||||
AC_ARG_WITH([libisdn],
|
||||
[AS_HELP_STRING([--with-libisdn], [Install ftmod_isdn (libisdn stack)])],
|
||||
[case "${withval}" in
|
||||
no) with_libisdn="no" ;;
|
||||
*) with_libisdn="yes" ;;
|
||||
esac
|
||||
],
|
||||
[with_libisdn="no"]
|
||||
)
|
||||
if test "${with_libisdn}" != "no"
|
||||
then
|
||||
AC_MSG_RESULT([${as_nl}<<>> ftmod_isdn (libisdn stack)])
|
||||
m4_ifdef([PKG_CHECK_MODULES],
|
||||
[PKG_CHECK_MODULES([libisdn],
|
||||
[libisdn >= 0.0.1],
|
||||
[AC_MSG_CHECKING([libisdn version])
|
||||
LIBISDN_VERSION="`${PKG_CONFIG} --modversion libisdn`"
|
||||
if test -z "${LIBISDN_VERSION}"; then
|
||||
AC_MSG_ERROR([Failed to retrieve libisdn version])
|
||||
fi
|
||||
AC_MSG_RESULT([${LIBISDN_VERSION}])
|
||||
|
||||
# check features
|
||||
AC_MSG_CHECKING([for new experimental API])
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[#include <libisdn/version.h>
|
||||
#if !LIBISDN_FEATURE(API2)
|
||||
#error "libisdn API v2 not available"
|
||||
#endif
|
||||
],
|
||||
[;]
|
||||
)],
|
||||
[AC_MSG_RESULT([yes])],
|
||||
[AC_MSG_RESULT([no])]
|
||||
)
|
||||
|
||||
HAVE_LIBISDN="yes"
|
||||
AC_DEFINE([HAVE_LIBISDN], [1], [libisdn support])
|
||||
AC_SUBST([LIBISDN_CFLAGS], [${libisdn_CFLAGS}])
|
||||
AC_SUBST([LIBISDN_CPPFLAGS],[${libisdn_CPPFLAGS}])
|
||||
AC_SUBST([LIBISDN_LDFLAGS], [${libisdn_LDFLAGS}])
|
||||
AC_SUBST([LIBISDN_LIBS], [${libisdn_LIBS}])
|
||||
AC_SUBST([LIBISDN_VERSION])
|
||||
],
|
||||
[AC_MSG_ERROR([Need libisdn-0.0.1 or higher])]
|
||||
)
|
||||
AX_LIB_PCAP],
|
||||
[AC_MSG_WARN([pkg-config missing (required for libisdn detection)])]
|
||||
)
|
||||
fi
|
||||
AM_CONDITIONAL([HAVE_LIBISDN], [test "${HAVE_LIBISDN}" = "yes"])
|
||||
|
||||
|
||||
##
|
||||
# mISDN dependencies
|
||||
#
|
||||
HAVE_MISDN="no"
|
||||
AC_ARG_WITH([misdn],
|
||||
[AS_HELP_STRING([--with-misdn], [Install ftmod_misdn (mISDN I/O plugin)])],
|
||||
[case "${withval}" in
|
||||
no|yes) with_misdn="${withval}" ;;
|
||||
*) AC_MSG_ERROR([Invalid value \"${with_misdn}\" for --with-misdn option]) ;;
|
||||
esac],
|
||||
[with_misdn="auto"]
|
||||
)
|
||||
AS_IF([test "${with_misdn}" != "no"],
|
||||
[AC_MSG_RESULT([${as_nl}<<>> ftmod_misdn (Linux mISDN I/O plugin)])
|
||||
AC_CHECK_HEADER([mISDN/mISDNif.h],
|
||||
[HAVE_MISDN="yes"
|
||||
AC_CHECK_LIB([rt], [clock_gettime])],
|
||||
[AS_IF([test "${with_misdn}" = "yes"],
|
||||
[AC_MSG_ERROR([mISDN/mISDNif.h not found])],
|
||||
[AC_MSG_NOTICE([mISDN/mISDNif.h not found])]
|
||||
)],
|
||||
[#include <sys/socket.h>]
|
||||
)]
|
||||
)
|
||||
AM_CONDITIONAL([HAVE_MISDN], [test "${HAVE_MISDN}" = "yes"])
|
||||
|
||||
|
||||
AC_MSG_RESULT([${as_nl}<<>> Creating output files])
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
freetdm.pc
|
||||
mod_freetdm/Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
||||
#
|
||||
# summary screen
|
||||
#
|
||||
AC_MSG_RESULT([
|
||||
============================ FreeTDM configuration ============================
|
||||
|
||||
+ Modules
|
||||
|
||||
Signalling:
|
||||
ftmod_analog....................... yes
|
||||
ftmod_analog_em.................... yes
|
||||
ftmod_isdn......................... ${HAVE_LIBISDN}
|
||||
ftmod_libpri....................... ${HAVE_LIBPRI}
|
||||
ftmod_sangoma_isdn................. ${HAVE_SNG_ISDN}
|
||||
ftmod_sangoma_ss7.................. ${HAVE_SNG_SS7}
|
||||
ftmod_r2........................... ${HAVE_OPENR2}
|
||||
ftmod_gsm.......................... ${HAVE_WAT}
|
||||
ftmod_pritap....................... ${HAVE_PRITAP}
|
||||
I/O:
|
||||
ftmod_zt........................... yes
|
||||
ftmod_wanpipe...................... ${HAVE_LIBSANGOMA}
|
||||
ftmod_misdn........................ ${HAVE_MISDN}
|
||||
|
||||
===============================================================================
|
||||
])
|
||||
@@ -1,3 +0,0 @@
|
||||
#! /bin/sh
|
||||
srcpath=$(dirname $0 2>/dev/null ) || srcpath="."
|
||||
$srcpath/configure "$@" --with-pic
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/bin/bash
|
||||
# this script must be run from freetdm root dir and it is assuming
|
||||
# FreeSWITCH is trunk is located at ../../
|
||||
fsdir=../..
|
||||
set -x
|
||||
cp Debug/mod/*.dll $fsdir/Debug/mod/
|
||||
cp mod_freetdm/Debug/*.pdb $fsdir/Debug/mod/
|
||||
cp Debug/freetdm.dll $fsdir/Debug/
|
||||
cp Debug/ftmod_*.dll $fsdir/Debug/mod/
|
||||
cp Debug/*.pdb $fsdir/Debug/mod/
|
||||
#cp Debug/testsangomaboost.exe $fsdir/Debug/
|
||||
echo "FRIENDLY REMINDER: RECOMPILE ftmod_wanpipe WHENEVER YOU INSTALL NEW DRIVERS"
|
||||
set +x
|
||||
|
||||
@@ -1,265 +0,0 @@
|
||||
# Doxyfile 1.4.6
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
PROJECT_NAME = FreeTDM
|
||||
PROJECT_NUMBER =
|
||||
OUTPUT_DIRECTORY = docs/
|
||||
CREATE_SUBDIRS = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
USE_WINDOWS_ENCODING = YES
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ABBREVIATE_BRIEF = "The $name class" \
|
||||
"The $name widget" \
|
||||
"The $name file" \
|
||||
is \
|
||||
provides \
|
||||
specifies \
|
||||
contains \
|
||||
represents \
|
||||
a \
|
||||
an \
|
||||
the
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = NO
|
||||
STRIP_FROM_PATH =
|
||||
STRIP_FROM_INC_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
DETAILS_AT_TOP = NO
|
||||
INHERIT_DOCS = YES
|
||||
SEPARATE_MEMBER_PAGES = NO
|
||||
TAB_SIZE = 8
|
||||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
SUBGROUPING = YES
|
||||
IGNORE_PREFIX = ftdm_ FTDM_ Q921 Q931
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = YES
|
||||
EXTRACT_PRIVATE = YES
|
||||
EXTRACT_STATIC = YES
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = YES
|
||||
HIDE_UNDOC_MEMBERS = YES
|
||||
HIDE_UNDOC_CLASSES = YES
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = NO
|
||||
CASE_SENSE_NAMES = NO
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
SORT_BRIEF_DOCS = NO
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = YES
|
||||
SHOW_DIRECTORIES = YES
|
||||
FILE_VERSION_FILTER =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = NO
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = src/include/freetdm.h
|
||||
|
||||
FILE_PATTERNS = *.c \
|
||||
*.cc \
|
||||
*.cxx \
|
||||
*.cpp \
|
||||
*.c++ \
|
||||
*.d \
|
||||
*.java \
|
||||
*.ii \
|
||||
*.ixx \
|
||||
*.ipp \
|
||||
*.i++ \
|
||||
*.inl \
|
||||
*.h \
|
||||
*.hh \
|
||||
*.hxx \
|
||||
*.hpp \
|
||||
*.h++ \
|
||||
*.idl \
|
||||
*.odl \
|
||||
*.cs \
|
||||
*.php \
|
||||
*.php3 \
|
||||
*.inc \
|
||||
*.m \
|
||||
*.mm \
|
||||
*.dox \
|
||||
*.py
|
||||
RECURSIVE = NO
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS =
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
IMAGE_PATH =
|
||||
INPUT_FILTER =
|
||||
FILTER_PATTERNS =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = NO
|
||||
INLINE_SOURCES = YES
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = YES
|
||||
REFERENCES_RELATION = YES
|
||||
USE_HTAGS = YES
|
||||
VERBATIM_HEADERS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = YES
|
||||
COLS_IN_ALPHA_INDEX = 1
|
||||
IGNORE_PREFIX = ftdm_
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = YES
|
||||
HTML_OUTPUT = html
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
GENERATE_HTMLHELP = NO
|
||||
CHM_FILE = freetdm.chm
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = YES
|
||||
BINARY_TOC = NO
|
||||
TOC_EXPAND = NO
|
||||
DISABLE_INDEX = NO
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
GENERATE_TREEVIEW = YES
|
||||
TREEVIEW_WIDTH = 250
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = NO
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
PDF_HYPERLINKS = NO
|
||||
USE_PDFLATEX = NO
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT = rtf
|
||||
COMPACT_RTF = NO
|
||||
RTF_HYPERLINKS = NO
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_MAN = NO
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = NO
|
||||
XML_OUTPUT = xml
|
||||
XML_SCHEMA =
|
||||
XML_DTD =
|
||||
XML_PROGRAMLISTING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
PERLMOD_PRETTY = YES
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
ENABLE_PREPROCESSING = YES
|
||||
MACRO_EXPANSION = YES
|
||||
EXPAND_ONLY_PREDEF = NO
|
||||
SEARCH_INCLUDES = NO
|
||||
INCLUDE_PATH =
|
||||
INCLUDE_FILE_PATTERNS = *.h
|
||||
PREDEFINED = FT_DECLARE(x)=x \
|
||||
FT_MOD_DECLARE(x)=x \
|
||||
DoxyDefine(x)=x
|
||||
|
||||
EXPAND_AS_DEFINED = NO
|
||||
SKIP_FUNCTION_MACROS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
PERL_PATH = /usr/bin/perl
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = YES
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = YES
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
GROUP_GRAPHS = YES
|
||||
UML_LOOK = YES
|
||||
TEMPLATE_RELATIONS = YES
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
CALL_GRAPH = YES
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DIRECTORY_GRAPH = YES
|
||||
DOT_IMAGE_FORMAT = jpg
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MAX_DOT_GRAPH_WIDTH = 1024
|
||||
MAX_DOT_GRAPH_HEIGHT = 1024
|
||||
MAX_DOT_GRAPH_DEPTH = 1000
|
||||
DOT_TRANSPARENT = NO
|
||||
DOT_MULTI_TARGETS = NO
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to the search engine
|
||||
#---------------------------------------------------------------------------
|
||||
SEARCHENGINE = NO
|
||||
Binary file not shown.
@@ -1,15 +0,0 @@
|
||||
APIs that result in an event when the API returns FTDM_SUCCESS
|
||||
|
||||
ftdm_channel_call_answer()
|
||||
ftdm_channel_call_indicate()
|
||||
ftdm_channel_call_transfer()
|
||||
FTDM_SIGEVENT_INDICATION_COMPLETED
|
||||
*note that FTDM_SIGEVENT_INDICATION_COMPLETED has associated data to indicate the result of the indication
|
||||
*note this event is only delivered on non-blocking channels
|
||||
|
||||
ftdm_call_place
|
||||
FTDM_SIGEVENT_DIALING
|
||||
|
||||
ftdm_channel_call_hangup
|
||||
FTDM_SIGEVENT_RELEASED
|
||||
|
||||
@@ -1,76 +0,0 @@
|
||||
== This is an email sent to stkn responding to his post http://stkn.techmage.de/archives/200 ==
|
||||
|
||||
1. FreeTDM open channels immediately.
|
||||
|
||||
Yes, this seems to come from the early days of Freetdm where probably the analog modules were implemented first and was dragged incorrectly to ISDN.
|
||||
The open API also sets the flag in use so others cannot use it. We should decouple this open and reserve operations. Does not seem very hard to do,
|
||||
I'll take a look at it on my way back to Toronto this week or earlier if possible, I'll create a git branch for it and send you the url for peer review.
|
||||
Feel free to do the opposite if you are in a hurry.
|
||||
|
||||
2. FreeTDM does not completely close the channel on hangup.
|
||||
|
||||
As long as the signaling module calls ftdm_channel_close() the fio->close API will be called where the IO module is responsible
|
||||
for turning off ec or any other operations to leave the channel unused/idle (not really closed). There was indeed a bug where ftdm_zt module
|
||||
was not properly closing the channel, if that is what you mean, then it means that was already fixed by you with your audio mode turn off patch.
|
||||
|
||||
Now, a more lengthy response ...
|
||||
|
||||
When we, Sangoma, took over freetdm and renamed it to freetdm, it was not just a name change, many API cleanups were done so API users cannot access
|
||||
|
||||
the internal data structures and cannot explicitly move between channel states. Also, some order on the state transitions has been put into place.
|
||||
|
||||
We've tried to keep backwards compatibility though, so old modules may not follow all of the conventions. Some unwritten conventions are:
|
||||
|
||||
1. Signaling modules are responsible for calling ftdm_channel_close() when done with the channel. In fact, signaling modules should not
|
||||
call ftdm_channel_done unless they really know what they're doing. ftdm_channel_close will call ftdm_channel_done anyways.
|
||||
|
||||
2. When remote end hangs up a call, signaling module should go to TERMINATING state and send SIGEVENT_STOP to the user. The signaling stack
|
||||
should not acknowledge the hangup until the user implicitly moves us to HANGUP (via ftdm_channel_call_hangup()). There is a core timer
|
||||
that will ensure we move from TERMINATING to HANGUP if the user does not moves us fast enough (arbitrarely 3000ms), although that is considered
|
||||
a bug in the user application (at some point we saw that in FreeSWITCH) and we complain loudly when that happens.
|
||||
|
||||
3. Signaling modules should leave the channel with NO pending states once they unlock it. This means, whenever you have a message to process
|
||||
you must lock the channel, check its current state (the user may have already changed the state to something else), process any pending
|
||||
state set by the user, then process your message and if required move the channel to a new state and process that state before releasing the lock.
|
||||
There is a chance of a deadlock due to the callbacks we use to notify users of messages if we call those callbacks with the channel lock held and
|
||||
that is why new signaling modules should use the FTDM_SPAN_USE_SIGNALS_QUEUE to defer the notification to the user when the ftdm_channel_t is not
|
||||
locked calling ftdm_span_trigger_signals() at the end of their processing loop which delivers the callback notifications to users.
|
||||
|
||||
Having said that, there is a major architectural change coming, probably early 2011, and I'd like to have your input.
|
||||
|
||||
== Decoupling calls from IO channels ==
|
||||
|
||||
We've also found that the concept of a channel and a call are unnecesarily coupled together in FreeTDM. I've never asked Anthony the reasoning
|
||||
for this, but it seems the API was meant to be used with, or without calls. That is, a user should be able to just 'open' a channel and start
|
||||
reading and writing raw data without ever launching one of the provided signaling stacks on top, may be just because the user is using their
|
||||
own signaling stack and just needs freetdm as an I/O API. In fact, signaling modules work like this (but there are defects there).
|
||||
The problem is, as you have noticed, the way ftdm_channel_open_xx APIs has been implemented is abusing this concept.
|
||||
|
||||
Problems with current implementation.
|
||||
|
||||
1. Exclusive channel is the only way we can request channels to the ISDN network. There is no room to change the channel later on easily.
|
||||
2. Multi-rate calls cannot be done. We need to associate multiple B-channels to a single call.
|
||||
3. Low-bit-rate calls (not sure what is the proper name for them) where a single B-channel can feed media to multiple calls with a low bit-rate
|
||||
codec (I know of at least one request from a big company for this to support some Q.SIG stuff for Eurocontrol).
|
||||
|
||||
|
||||
What do we need?
|
||||
|
||||
I think there should be only one open() API that wraps calls around fio->open(), the other current open_xx functions that do hunting, should
|
||||
be eliminated and some extra arguments provided to ftdm_channel_call_place to provide information about the channel where we would like to
|
||||
place the call or group hunting information and the API would return immediately providing a ftdm_call_t reference pointer that can be used
|
||||
to further track the status of that call, or in the case where a channel exclusivity was requested and we know for a fact is not available,
|
||||
just return failure. At that point there is no I/O channel involved yet. Eventually after the signaling stack hunts the channel and
|
||||
negotiaties its availability with the network, an I/O channel can be attached to that call, or even attach multiple channels (for the case
|
||||
of multi rate calls?).
|
||||
|
||||
This involves heavy changes. The state machine should be moved out of the ftdm_channel_t structure along with probably some other members
|
||||
and stuffed into a new ftdm_call_t structure. Signaling modules would have to be updated to run their state machines with this call
|
||||
structure and then at some point attach IO channels to the call. There would be 2 type of read/write APIs, one low level ftdm_channel_read
|
||||
which receives an ftdm_channel_t as parameter and an ftdm_call_read() which receives an ftdm_call_t as parameter, for the case of multi-rate
|
||||
calls or low-bit-rate multiplexed calls in the same B-channel this API would return just the media corresponding to that call already
|
||||
demultiplexed or concatenated, or whatever needs to be done with the media from the multiple low-level IO channels.
|
||||
|
||||
This is fairly disruptive, but I believe should be done sooner or later.
|
||||
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
Glare is a PITA.
|
||||
|
||||
Although configuration of ISDN links can be done to minimize glare, we also must have a clear policy
|
||||
on how the FreeTDM API is supposed to behave on glare across signaling modules.
|
||||
|
||||
There is a well-known race in the FreeTDM API since the beginning. When a user wants to place a call with
|
||||
the old APIs:
|
||||
|
||||
1. ftdm_channel_open_xx (to hunt the channel by group, span or select a channel individually)
|
||||
2. ftdm_channel_call_place() to place the actual call.
|
||||
|
||||
Since the user has no access to channel locking, between opening a channel and placing a call, an incoming call could be
|
||||
received. Therefore things can get complicated and that is why you should STOP USING those 2 deprecated functions.
|
||||
|
||||
The replacement is ftdm_call_place().
|
||||
|
||||
ftdm_call_place receives the information required to hunt the channel and place the call.
|
||||
|
||||
If glare is detected after placing the call and the signaling stack decides to drop the local call, a regular
|
||||
SIGEVENT_STOP will be sent with the hangup cause FTDM_CAUSE_REQUESTED_CHAN_UNAVAIL.
|
||||
|
||||
ftdm_call_place may return FTDM_BREAK if glare is detected while placing the call, in such cases you can try
|
||||
calling ftdm_call_place again to hunt another channel.
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
Last Updated: Jan 19, 2011
|
||||
|
||||
== BACKGROUND ==
|
||||
|
||||
The IO module provides an abstracted IO interface to FreeTDM.
|
||||
|
||||
== SHUTDOWN ==
|
||||
Upon global shutdown, for each channel FIO_CLOSE_FUNCTION will be called.
|
||||
When FIO_CLOSE_FUNCTION is called, all waiters on this channel shall be signalled.
|
||||
If FIO_WAIT_FUNCTION is called on a function that has already been closed, this function shall return FTDM_TIMEOUT without blocking.
|
||||
FIO_CHANNEL_DESTROY will eventually be called, and IO module is responsible for clearing all internal states and free allocated memory upon channel destroy.
|
||||
|
||||
|
||||
@@ -1,125 +0,0 @@
|
||||
Last Updated: Fri 30 Dec, 2010
|
||||
|
||||
== Background ==
|
||||
|
||||
FreeTDM is a threaded library. As such, locking considerations must be taken when using it and when writing code inside the library.
|
||||
|
||||
At the moment locks are not exposed to users. This means API users cannot acquire a lock on a channel or span structure. There is no
|
||||
need for users to lock channels or spans since all their interactions with those structures should be done thru the FreeTDM API which
|
||||
can (and in most cases must) internally lock on their behalf.
|
||||
|
||||
Internally, locking can be done either by the core or the signaling modules. To better understand the locking considerations we must
|
||||
understand first the threading model of FreeTDM.
|
||||
|
||||
== Threading Model ==
|
||||
|
||||
At startup, when the user calls ftdm_global_init(), just one timing thread is created to dispatch internal timers. If you write
|
||||
a signaling module or any other code using the scheduling API, you can choose to run your schedule in this timing thread or in
|
||||
a thread of your choice. This is the only thread launched at initialization.
|
||||
|
||||
If the application decides to use ftdm_global_configuration(), which reads freetdm.conf to create the spans and channels data
|
||||
structures, then possibly another thread will be launched for CPU usage monitoring (only if enabled in the configuration cpu_monitor=yes
|
||||
This thread sole purpose is to check the CPU and raise an alarm if reaches a configurable threshold, the alarm then is checked to avoid
|
||||
placing or receiving further calls.
|
||||
|
||||
At this point FreeTDM has initialized and configured its channels input output configuration.
|
||||
|
||||
The user is then supposed to configure the signaling via ftdm_configure_span_signaling() and then start the signaling work
|
||||
using ftdm_span_start(). This will typically launch at least 1 thread per span. Some signaling modules (actually just the analog one)
|
||||
launches another thread per channel when receiving a call. The rest of the signaling modules currently launch only one thread per
|
||||
span and the signaling for all channels within the span is handled in that thread. We call that thread 'the signaling thread'.
|
||||
|
||||
At this point the user can start placing calls using the FreeTDM call API ftdm_channel_call_place(). Any of the possible threads in
|
||||
which the user calls the FreeTDM API is called 'the user thread', depending on the application thread model (the application using FreeTDM)
|
||||
this user thread may be different each time or the same all the time, we cannot make any assumptions. In the case of FreeSWITCH, the most
|
||||
common user of FreeTDM, the user thread is most of the cases a thread for each new call leg.
|
||||
|
||||
At this point we have identified 4 types of threads.
|
||||
|
||||
1. The timing thread (the core thread that triggers timers).
|
||||
Its responsibility is simply check for timers that were scheduled and trigger them when the time comes. This means that if you decide
|
||||
to use the scheduling API in freerun mode (where you use the core timer thread) you callbacks will be executed in this global thread
|
||||
and you MUST not block at all since there might be other events waiting.
|
||||
|
||||
2. The CPU thread (we don't really care about this one as it does not interact with channels or spans).
|
||||
|
||||
3. The signaling thread.
|
||||
There is one thread of this per span. This thread takes care of reading signaling specific messages from the network (ISDN network, etc) and
|
||||
changing the channel call state accordingly and processing state changes caused by user API calls (like ftdm_channel_call_hangup for example).
|
||||
|
||||
4. The user thread.
|
||||
This is a thread in which the user decides to execute FreeTDM APIs, in some cases it might even be the same than the signaling thread (because
|
||||
most SIGEVENT notifications are delivered by the signaling thread, however we are advicing users to not use FreeTDM unsafe APIs from the
|
||||
thread where they receive SIGEVENT notifications as some APIs may block for a few milliseconds, effectively blocking the whole signaling thread
|
||||
that is servicing a span.
|
||||
|
||||
== Application Locking ==
|
||||
|
||||
Users of the FreeTDM API will typically have locking of their own for their own application-specific data structures (in the case of FreeSWITCH, the
|
||||
session lock for example). Other application-specific locks may be involved.
|
||||
|
||||
== DeadLocks ==
|
||||
|
||||
As soon as we think of application locks, and we mix them with the FreeTDM internal locks, the possibility of deadlocks arise.
|
||||
|
||||
A typical deadlock scenario when 2 locks are involved is:
|
||||
|
||||
- User Thread - - Signaling Thread -
|
||||
1. Application locks applock. 1. A network message is received for a channel.
|
||||
|
||||
2. Aplication invokes a FreeTDM call API (ie: ftdm_channel_call_hangup()). 2. The involved channel is locked.
|
||||
|
||||
3. The FreeTDM API attempts to acquire the channel lock and stalls because 3. The message processing results in a notification
|
||||
the signaling thread just acquired it. to be delivered to the user via the callback function
|
||||
provided for that purpose. The callback is then called.
|
||||
|
||||
4. The thread is now deadlocked because the signaling thread will never 4. The application callback attempts to acquire its application
|
||||
release the channel lock. lock but deadlocks because the user thread already has it.
|
||||
|
||||
To avoid this signaling modules should not deliver signals to the user while holding the channel lock. An easy way to avoid this is
|
||||
to not deliver signals while processing a state change, but rather defer them until the channel lock is released. Most new signaling modules
|
||||
accomplish this by setting the span flag FTDM_SPAN_USE_SIGNALS_QUEUE, this flag tells the core to enqueue signals (ie FTDM_SIGEVENT_START)
|
||||
when ftdm_span_send_signal() is called and not deliver them until ftdm_span_trigger_signals() is called, which is done by the signaling module
|
||||
in its signaling thread when no channel lock is being held.
|
||||
|
||||
== State changes while locking ==
|
||||
|
||||
Only 2 types of threads should be performing state changes.
|
||||
|
||||
User threads.
|
||||
The user thread is a random thread that was crated by the API user. We do not know what threading model users of FreeTDM will follow
|
||||
and therefore cannot make assumptions about it. The user should be free to call FreeTDM APIs from any thread, except threads that
|
||||
are under our control, like the signaling threads. Although it may work in most situations, is discouraged for users to try
|
||||
to use FreeTDM APIs from the signaling thread, that is, the thread where the signaling callback provided during configuration
|
||||
is called (the callback where FTDM_SIGEVENT_XXX signals are delivered).
|
||||
|
||||
A user thread may request state changes implicitly through calls to FreeTDM API's. The idea of state changes is internal to freetdm
|
||||
and should not be exposed to users of the API (except for debugging purposes, like the ftdm_channel_get_state, ftdm_channel_get_state_str etc)
|
||||
|
||||
This is an example of the API's that implicitly request a state change.
|
||||
|
||||
ftdm_channel_call_answer()
|
||||
|
||||
Signaling modules should guarantee that upon releasing a lock on a channel, any state changes will be already processed and
|
||||
not deferred to other threads, otherwise that leads to a situation where a state change requested by the signaling module is pending
|
||||
to be serviced by another signaling module thread but a user thread wins the channel lock and attempts to perform a state change which will
|
||||
fail because another state change is pending (and user threads are not meant to process signaling states).
|
||||
|
||||
ONLY one signaling thread per channel should try to perform state changes and processing of the states,
|
||||
otherwise complexity arises and is not worth it!
|
||||
|
||||
At some point before we stablished this policies we could have 3 different threads doing state changes.
|
||||
|
||||
1. A user random thread could implcitly try to change the state in response to a call API.
|
||||
2. The ftmod signaling thread could try to change the state in response to other state changes.
|
||||
3. The lower level signaling stack threads could try to change the state in response to stack events.
|
||||
|
||||
As a result, lower level signaling stack thread could set a state and then let the signaling thread to
|
||||
process it, but when unlocking the channel, the user thread may win the lock over the signaling thread and
|
||||
may try to set a state change of its own and fail (due to the unprocessed state change)!
|
||||
|
||||
The rule is, the signaling module should never unlock a channel with states pending to process this way the user,
|
||||
when acquiring a channel lock (inside ftdm_channel_call_answer for example) it will always find a consistent state
|
||||
for the channel and not in the middle of state processing.
|
||||
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
FreeTDM can both notify and set signaling status changes in the different protocols thru a unified interface. More
|
||||
specific details on the C data types and function prototypes are found in freetdm.h
|
||||
|
||||
The API provides the following functions and data types to do it:
|
||||
|
||||
The signaling status in any channel/span is represented thru ftdm_signaling_status_t
|
||||
|
||||
/* The signaling link is down (no d-chans up in the span/group, MFC-R2 bit pattern unidentified) */
|
||||
FTDM_SIG_STATE_DOWN,
|
||||
/* The signaling link is suspended (MFC-R2 bit pattern blocked, PRI maintenance, ss7 blocked?) */
|
||||
FTDM_SIG_STATE_SUSPENDED,
|
||||
/* The signaling link is ready and calls can be placed (ie: d-chan up, MFC-R2 both rx and tx in IDLE) */
|
||||
FTDM_SIG_STATE_UP,
|
||||
/* Invalid status */
|
||||
FTDM_SIG_STATE_INVALID
|
||||
|
||||
Changes in the signaling status are notified to the user using the standard callback notification function provided
|
||||
during configuration using the sigevent type FTDM_SIGEVENT_SIGSTATUS_CHANGED which is sent when the line status changes.
|
||||
|
||||
On startup the signalling status default is FTDM_SIG_STATE_DOWN, and no notification is provided until the state change,
|
||||
so applications must assume the status is down unless told otherwise.
|
||||
|
||||
When ftdm_span_start is called, the signaling stack takes care of attempting to bring the status to UP
|
||||
but it will ultimately depend on the other side too.
|
||||
|
||||
== Setting the signaling status ==
|
||||
|
||||
Users can set the signaling status on a given channel/span thru FreeTDM the following API functions:
|
||||
|
||||
ftdm_channel_set_sig_status
|
||||
ftdm_span_set_sig_status
|
||||
|
||||
If the user calls ftdm_channel_set_sig_status(chan, FTDM_SIG_STATE_SUSPENDED), the signaling stack will try to set
|
||||
the status of the line to the one requested, if successful, it will result in a SIGEVENT_SIGSTATUS_CHANGED notification
|
||||
being sent with status FTDM_SIG_STATE_SUSPENDED.
|
||||
|
||||
** MFC-R2 Signaling Notes **
|
||||
For MFC-R2, calling ftdm_span_start() results in setting the tx CAS bits to IDLE. However, if the rx bits are in BLOCKED state
|
||||
the signaling status will be reported as SUSPENDED.
|
||||
|
||||
If the user calls ftdm_channel_set_sig_status(chan, SUSPENDED), the tx CAS bits will be set to BLOCKED and, if, the current rx bits
|
||||
are IDLE then a SIGEVENT_SIGSTATUS_CHANGED with state SUSPENDED will be sent. If the rx bits are already in blocked then no further
|
||||
SIGEVENT_SIGSTATUS_CHANGED notification is needed (because it was already sent when the rx bits were initially detected as BLOCKED).
|
||||
|
||||
If the user calls ftdm_channel_set_sig_status(chan, UP), the tx CAS bits will be set to IDLE and, if, the current rx bits
|
||||
are IDLE, then SIGEVENT_SIGSTATUS_CHANGED with state UP will be sent. If the rx bits are BLOCKED, then no notification is
|
||||
sent at all until the rx bits change.
|
||||
|
||||
Bottom line is, for MFC-R2, SIGEVENT_SIGSTATUS_CHANGED UP is only sent to the user when both the rx and tx bits are in IDLE, and
|
||||
SIGEVENT_SIGSTATUS_CHANGED SUSPENDED is only sent to the user when any of the rx or tx bits are in BLOCKED.
|
||||
|
||||
== Getting the signaling status ==
|
||||
Users can get the signaling status on a given channel/span thru FreeTDM the following API functions:
|
||||
|
||||
ftdm_channel_get_sig_status
|
||||
ftdm_span_get_sig_status
|
||||
|
||||
The line status returned should be the same as the last time a SIGEVENT_SIGSTATUS_CHANGED was reported.
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
SS7 Native Bridge
|
||||
|
||||
Native bridge is enabled on 2 conditions:
|
||||
|
||||
* The SIP header FreeTDM-TransUUID is set in the originating leg and matches a freetdm channel
|
||||
* The variable freetdm_native_sigbridge is true and the originating leg is also a freetdm channel
|
||||
|
||||
Some coding rules apply to this feature:
|
||||
|
||||
- Each channel is responsible for clearning its own peer_data and event queue
|
||||
at the end of the call (when moving to DOWN state)
|
||||
|
||||
- Each channel dequeues messages only from its own queue and enqueues messages
|
||||
in the peer's queue, with the only exception being messages received before
|
||||
the bridge is stablished (IAM for sure and possible SAM messages) because
|
||||
if the bridge is not yet stablished the messages must be queued by the channel
|
||||
in its own queue temporarily until the bridge is ready
|
||||
|
||||
- When the bridge is ready it is the responsibility of the incoming channel to
|
||||
move the messages that stored temporarily in its own queue to the bridged peer queue
|
||||
|
||||
- During hangup, each channel is responsible for moving itself to DOWN. The procedure
|
||||
however differs slightly depending on the hangup conditions
|
||||
|
||||
If the user requests hangup (ie, FreeSWITCH) the request will be noted by setting the
|
||||
FTDM_CHANNEL_USER_HANGUP flag but will not be processed yet because call control is
|
||||
driven only by the link messages (so no hangup from ESL or command line allowed)
|
||||
|
||||
When REL message comes, the channel receiving it must move to TERMINATING state and:
|
||||
|
||||
- If the user has not hangup yet (FTDM_CHANNEL_USER_HANGUP flag not set) then
|
||||
notify the user via SIGEVENT_STOP and wait for the user to move to HANGUP
|
||||
state by calling ftdm_channel_call_hangup() before sending RLC
|
||||
|
||||
- If the user did hangup already (FTDM_CHANNEL_USER_HANGUP flag is set) then
|
||||
skip user notification and move to HANGUP state directly where the RLC message
|
||||
will be sent
|
||||
|
||||
- On HANGUP state the RLC is sent and the channel is moved to DOWN, final state
|
||||
The peer channel will forward the REL message and wait for RLC from the network, when
|
||||
RLC is received the channel can move straight to DOWN itself because the peer channel
|
||||
is completing its own shutdown procedure when it received the REL message
|
||||
|
||||
@@ -1,122 +0,0 @@
|
||||
Using FreeTDM Variables
|
||||
|
||||
1. User application sending variables or raw buffer to FreeTDM
|
||||
==============================================================
|
||||
|
||||
The User can include a ftdm_usrmsg_t before sending an event to freetdm.
|
||||
|
||||
example #1a - Making an outbound call:
|
||||
--------------------------------------
|
||||
|
||||
To make an outbound call:
|
||||
ftdm_usrmsg_t usrmsg;
|
||||
memset(&usrmsg, 0, sizeof(usrmsg));
|
||||
|
||||
/* Attach variable to usrmsg */
|
||||
ftdm_usrmsg_add_var(&usrmsg, "isdn.prog_ind.descr", "inband-info-available");
|
||||
|
||||
ftdm_channel_call_place_ex(ftdmchan, &usrmsg);
|
||||
|
||||
example #1b - Adding a variable:
|
||||
--------------------------------
|
||||
When using ftmod_sangoma_isdn, user want to specify progress indicator inside PROCEED message.
|
||||
|
||||
|
||||
ftdm_usrmsg_t usrmsg;
|
||||
memset(&usrmsg, 0, sizeof(usrmsg));
|
||||
|
||||
/* Attach variable to usrmsg */
|
||||
ftdm_usrmsg_add_var(&usrmsg, "isdn.prog_ind.descr", "inband-info-available");
|
||||
|
||||
/* Request FreeTDM to send a PROCEED msg */
|
||||
ftdm_channel_call_indicate_ex(ftdmchan, FTDM_CHANNEL_INDICATE_PROCEED, &usrmsg);
|
||||
|
||||
|
||||
example #2 - Setting raw data:
|
||||
--------------------------------------------------------
|
||||
|
||||
When using ftmod_sangoma_isdn, user wants to transmit a custom Facility IE, inside a FACILITY message.
|
||||
|
||||
ftdm_usrmsg_t usrmsg;
|
||||
|
||||
uint8_t *my_facility_ie = ftdm_calloc(1, 200); /*memory has to be allocated using ftdm_calloc !! */
|
||||
unsigned my_facility_ie_len = 0;
|
||||
|
||||
memset(&usrmsg, 0, sizeof(usrmsg));
|
||||
|
||||
/* Fill my_facility_ie with custom data here */
|
||||
my_facility_ie[my_facility_ie_len++] = 0x1C; /* Q.931 Facility IE ID */
|
||||
my_facility_ie[my_facility_ie_len++] = 0x03; /* Length of facility IE */
|
||||
my_facility_ie[my_facility_ie_len++] = 0x01;
|
||||
my_facility_ie[my_facility_ie_len++] = 0x02;
|
||||
my_facility_ie[my_facility_ie_len++] = 0x03;
|
||||
|
||||
ftdm_usrmsg_set_raw_data(&usrmsg, my_facility_ie, my_facility_ie_len);
|
||||
|
||||
ftdm_channel_call_indicate_ex(ftdmchan, FTDM_CHANNEL_INDICATE_FACILITY, &usrmsg);
|
||||
|
||||
/* FreeTDM will automatically free my_facility_ie */
|
||||
|
||||
|
||||
2. User application receiving variables and raw buffer from FreeTDM
|
||||
==================================================================
|
||||
|
||||
example #1 - print all variables received from FreeTDM
|
||||
------------------------------------------------------
|
||||
|
||||
/* Inside event call-back function */
|
||||
ftdm_iterator_t *iter = NULL;
|
||||
ftdm_iterator_t *curr = NULL;
|
||||
const char *var_name = NULL;
|
||||
const char *var_value = NULL;
|
||||
|
||||
/* Read all variables attached to this event */
|
||||
iter = ftdm_sigmsg_get_var_iterator(sigmsg, iter);
|
||||
for (curr = iter ; curr; curr = ftdm_iterator_next(curr)) {
|
||||
ftdm_get_current_var(curr, &var_name, &var_value);
|
||||
fprintf("Call Variable: %s=%s\n", var_name, var_value);
|
||||
}
|
||||
ftdm_iterator_free(iter);
|
||||
|
||||
|
||||
example #2 - accessing a specific variable
|
||||
------------------------------------------
|
||||
|
||||
/* Inside event call-back function */
|
||||
char *string = NULL;
|
||||
string = ftdm_sigmsg_get_var(sigmsg, "isdn.prog_ind.descr");
|
||||
if (string && *string) {
|
||||
fprintf("Progress indicator:%s\n", string);
|
||||
}
|
||||
|
||||
|
||||
example #3a - accessing raw data
|
||||
-------------------------------
|
||||
|
||||
/* Inside event call-back function */
|
||||
ftdm_size_t len;
|
||||
uint8_t *mydata;
|
||||
if (ftdm_sigmsg_get_raw_data(sigmsg, (void**)&mydata, &len) == FTDM_SUCCESS) {
|
||||
/* raw data is available, do something with mydata here */
|
||||
}
|
||||
/* Once this function returns, raw data will be free'd inside FreeTDM */
|
||||
|
||||
|
||||
example #3b - accessing raw data
|
||||
-------------------------------
|
||||
|
||||
/* Inside event call-back function */
|
||||
ftdm_size_t len;
|
||||
uint8_t *mydata;
|
||||
if (ftdm_sigmsg_get_raw_data_detached(sigmsg, (void**)&mydata, &len) == FTDM_SUCCESS) {
|
||||
/* raw data is available, do something with mydata here */
|
||||
|
||||
}
|
||||
|
||||
:
|
||||
:
|
||||
:
|
||||
|
||||
/* User owns raw data and is responsible for free'ing it*/
|
||||
ftdm_safe_free(mydata);
|
||||
|
||||
@@ -1,155 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||
# Visual Studio 2008
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetdm", "msvc\freetdm.2008.vcproj", "{93B8812C-3EC4-4F78-8970-FFBFC99E167D}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testanalog", "msvc\testanalog\testanalog.2008.vcproj", "{BB833648-BAFF-4BE2-94DB-F8BB043C588C}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D} = {93B8812C-3EC4-4F78-8970-FFBFC99E167D}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testisdn", "msvc\testisdn\testisdn.2008.vcproj", "{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D} = {93B8812C-3EC4-4F78-8970-FFBFC99E167D}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_freetdm", "mod_freetdm\mod_freetdm.2008.vcproj", "{FE3540C5-3303-46E0-A69E-D92F775687F1}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D} = {93B8812C-3EC4-4F78-8970-FFBFC99E167D}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_analog", "src\ftmod\ftmod_analog\ftmod_analog.2008.vcproj", "{37C94798-6E33-4B4F-8EE0-C72A7DC91157}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D} = {93B8812C-3EC4-4F78-8970-FFBFC99E167D}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_analog_em", "src\ftmod\ftmod_analog_em\ftmod_analog_em.2008.vcproj", "{B3F49375-2834-4937-9D8C-4AC2EC911010}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D} = {93B8812C-3EC4-4F78-8970-FFBFC99E167D}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_isdn", "src\ftmod\ftmod_isdn\ftmod_isdn.2008.vcproj", "{729344A5-D5E9-434D-8EE8-AF8C6C795D15}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D} = {93B8812C-3EC4-4F78-8970-FFBFC99E167D}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_pika", "src\ftmod\ftmod_pika\ftmod_pika.2008.vcproj", "{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D} = {93B8812C-3EC4-4F78-8970-FFBFC99E167D}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_wanpipe", "src\ftmod\ftmod_wanpipe\ftmod_wanpipe.2008.vcproj", "{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D} = {93B8812C-3EC4-4F78-8970-FFBFC99E167D}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_sangoma_isdn", "src\ftmod\ftmod_sangoma_isdn\ftmod_sangoma_isdn.2008.vcproj", "{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D} = {93B8812C-3EC4-4F78-8970-FFBFC99E167D}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_r2", "src\ftmod\ftmod_r2\ftmod_r2.2008.vcproj", "{08C3EA27-A51D-47F8-B47D-B189C649CF30}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D} = {93B8812C-3EC4-4F78-8970-FFBFC99E167D}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Debug|x64 = Debug|x64
|
||||
Release|Win32 = Release|Win32
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Debug|x64.Build.0 = Debug|x64
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|Win32.Build.0 = Release|Win32
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|x64.ActiveCfg = Release|x64
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|x64.Build.0 = Release|x64
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|x64.Build.0 = Debug|x64
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|Win32.Build.0 = Release|Win32
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|x64.ActiveCfg = Release|x64
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|x64.Build.0 = Release|x64
|
||||
{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}.Release|x64.ActiveCfg = Release|x64
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|x64.Build.0 = Debug|x64
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Win32.Build.0 = Release|Win32
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|x64.ActiveCfg = Release|x64
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|x64.Build.0 = Release|x64
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Debug|x64.Build.0 = Debug|x64
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Release|Win32.Build.0 = Release|Win32
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Release|x64.ActiveCfg = Release|x64
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Release|x64.Build.0 = Release|x64
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Debug|x64.Build.0 = Debug|x64
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Release|Win32.Build.0 = Release|Win32
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Release|x64.ActiveCfg = Release|x64
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Release|x64.Build.0 = Release|x64
|
||||
{729344A5-D5E9-434D-8EE8-AF8C6C795D15}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{729344A5-D5E9-434D-8EE8-AF8C6C795D15}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{729344A5-D5E9-434D-8EE8-AF8C6C795D15}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{729344A5-D5E9-434D-8EE8-AF8C6C795D15}.Release|x64.ActiveCfg = Release|x64
|
||||
{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Release|x64.ActiveCfg = Release|x64
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Release|x64.ActiveCfg = Release|x64
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|x64.Build.0 = Debug|x64
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|Win32.Build.0 = Release|Win32
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|x64.ActiveCfg = Release|x64
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|x64.Build.0 = Release|x64
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|x64.Build.0 = Debug|x64
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|Win32.Build.0 = Release|Win32
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|x64.ActiveCfg = Release|x64
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|x64.Build.0 = Release|x64
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|x64.Build.0 = Debug|x64
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|Win32.Build.0 = Release|Win32
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|x64.ActiveCfg = Release|x64
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|x64.Build.0 = Release|x64
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Release|Win32.Build.0 = Release|Win32
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Release|x64.ActiveCfg = Release|Win32
|
||||
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Release|x64.ActiveCfg = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,127 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetdm", "msvc\freetdm.2010.vcxproj", "{93B8812C-3EC4-4F78-8970-FFBFC99E167D}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testanalog", "msvc\testanalog\testanalog.2010.vcxproj", "{BB833648-BAFF-4BE2-94DB-F8BB043C588C}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testisdn", "msvc\testisdn\testisdn.2010.vcxproj", "{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_freetdm", "mod_freetdm\mod_freetdm.2010.vcxproj", "{FE3540C5-3303-46E0-A69E-D92F775687F1}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_analog", "src\ftmod\ftmod_analog\ftmod_analog.2010.vcxproj", "{37C94798-6E33-4B4F-8EE0-C72A7DC91157}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_analog_em", "src\ftmod\ftmod_analog_em\ftmod_analog_em.2010.vcxproj", "{B3F49375-2834-4937-9D8C-4AC2EC911010}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_isdn", "src\ftmod\ftmod_isdn\ftmod_isdn.2010.vcxproj", "{729344A5-D5E9-434D-8EE8-AF8C6C795D15}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_pika", "src\ftmod\ftmod_pika\ftmod_pika.2010.vcxproj", "{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_wanpipe", "src\ftmod\ftmod_wanpipe\ftmod_wanpipe.2010.vcxproj", "{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_sangoma_isdn", "src\ftmod\ftmod_sangoma_isdn\ftmod_sangoma_isdn.2010.vcxproj", "{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_r2", "src\ftmod\ftmod_r2\ftmod_r2.2010.vcxproj", "{08C3EA27-A51D-47F8-B47D-B189C649CF30}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Debug|x64 = Debug|x64
|
||||
Release|Win32 = Release|Win32
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Debug|x64.Build.0 = Debug|x64
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|Win32.Build.0 = Release|Win32
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|x64.ActiveCfg = Release|x64
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|x64.Build.0 = Release|x64
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|x64.Build.0 = Debug|x64
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|Win32.Build.0 = Release|Win32
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|x64.ActiveCfg = Release|x64
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|x64.Build.0 = Release|x64
|
||||
{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}.Release|x64.ActiveCfg = Release|x64
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|x64.Build.0 = Debug|x64
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Win32.Build.0 = Release|Win32
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|x64.ActiveCfg = Release|x64
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|x64.Build.0 = Release|x64
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Debug|x64.Build.0 = Debug|x64
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Release|Win32.Build.0 = Release|Win32
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Release|x64.ActiveCfg = Release|x64
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Release|x64.Build.0 = Release|x64
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Debug|x64.Build.0 = Debug|x64
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Release|Win32.Build.0 = Release|Win32
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Release|x64.ActiveCfg = Release|x64
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Release|x64.Build.0 = Release|x64
|
||||
{729344A5-D5E9-434D-8EE8-AF8C6C795D15}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{729344A5-D5E9-434D-8EE8-AF8C6C795D15}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{729344A5-D5E9-434D-8EE8-AF8C6C795D15}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{729344A5-D5E9-434D-8EE8-AF8C6C795D15}.Release|x64.ActiveCfg = Release|x64
|
||||
{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Release|x64.ActiveCfg = Release|x64
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Release|x64.ActiveCfg = Release|x64
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|x64.Build.0 = Debug|x64
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|Win32.Build.0 = Release|Win32
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|x64.ActiveCfg = Release|x64
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|x64.Build.0 = Release|x64
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|x64.Build.0 = Debug|x64
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|Win32.Build.0 = Release|Win32
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|x64.ActiveCfg = Release|x64
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|x64.Build.0 = Release|x64
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|x64.Build.0 = Debug|x64
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|Win32.Build.0 = Release|Win32
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|x64.ActiveCfg = Release|x64
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|x64.Build.0 = Release|x64
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Release|x64.ActiveCfg = Release|x64
|
||||
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Release|x64.ActiveCfg = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,127 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2012
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetdm", "msvc\freetdm.2012.vcxproj", "{93B8812C-3EC4-4F78-8970-FFBFC99E167D}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testanalog", "msvc\testanalog\testanalog.2012.vcxproj", "{BB833648-BAFF-4BE2-94DB-F8BB043C588C}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testisdn", "msvc\testisdn\testisdn.2012.vcxproj", "{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_freetdm", "mod_freetdm\mod_freetdm.2012.vcxproj", "{FE3540C5-3303-46E0-A69E-D92F775687F1}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_analog", "src\ftmod\ftmod_analog\ftmod_analog.2012.vcxproj", "{37C94798-6E33-4B4F-8EE0-C72A7DC91157}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_analog_em", "src\ftmod\ftmod_analog_em\ftmod_analog_em.2012.vcxproj", "{B3F49375-2834-4937-9D8C-4AC2EC911010}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_isdn", "src\ftmod\ftmod_isdn\ftmod_isdn.2012.vcxproj", "{729344A5-D5E9-434D-8EE8-AF8C6C795D15}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_pika", "src\ftmod\ftmod_pika\ftmod_pika.2012.vcxproj", "{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_wanpipe", "src\ftmod\ftmod_wanpipe\ftmod_wanpipe.2012.vcxproj", "{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_sangoma_isdn", "src\ftmod\ftmod_sangoma_isdn\ftmod_sangoma_isdn.2012.vcxproj", "{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_r2", "src\ftmod\ftmod_r2\ftmod_r2.2012.vcxproj", "{08C3EA27-A51D-47F8-B47D-B189C649CF30}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Debug|x64 = Debug|x64
|
||||
Release|Win32 = Release|Win32
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Debug|x64.Build.0 = Debug|x64
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|Win32.Build.0 = Release|Win32
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|x64.ActiveCfg = Release|x64
|
||||
{93B8812C-3EC4-4F78-8970-FFBFC99E167D}.Release|x64.Build.0 = Release|x64
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Debug|x64.Build.0 = Debug|x64
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|Win32.Build.0 = Release|Win32
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|x64.ActiveCfg = Release|x64
|
||||
{BB833648-BAFF-4BE2-94DB-F8BB043C588C}.Release|x64.Build.0 = Release|x64
|
||||
{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{6DA6FD42-641D-4147-92F5-3BC4AAA6589B}.Release|x64.ActiveCfg = Release|x64
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Debug|x64.Build.0 = Debug|x64
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|Win32.Build.0 = Release|Win32
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|x64.ActiveCfg = Release|x64
|
||||
{FE3540C5-3303-46E0-A69E-D92F775687F1}.Release|x64.Build.0 = Release|x64
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Debug|x64.Build.0 = Debug|x64
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Release|Win32.Build.0 = Release|Win32
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Release|x64.ActiveCfg = Release|x64
|
||||
{37C94798-6E33-4B4F-8EE0-C72A7DC91157}.Release|x64.Build.0 = Release|x64
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Debug|x64.Build.0 = Debug|x64
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Release|Win32.Build.0 = Release|Win32
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Release|x64.ActiveCfg = Release|x64
|
||||
{B3F49375-2834-4937-9D8C-4AC2EC911010}.Release|x64.Build.0 = Release|x64
|
||||
{729344A5-D5E9-434D-8EE8-AF8C6C795D15}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{729344A5-D5E9-434D-8EE8-AF8C6C795D15}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{729344A5-D5E9-434D-8EE8-AF8C6C795D15}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{729344A5-D5E9-434D-8EE8-AF8C6C795D15}.Release|x64.ActiveCfg = Release|x64
|
||||
{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{E886B4D5-AB4F-4092-B8F4-3B06E1E462EF}.Release|x64.ActiveCfg = Release|x64
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{1A145EE9-BBD8-45E5-98CD-EB4BE99E1DCD}.Release|x64.ActiveCfg = Release|x64
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Debug|x64.Build.0 = Debug|x64
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|Win32.Build.0 = Release|Win32
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|x64.ActiveCfg = Release|x64
|
||||
{D021EF2A-460D-4827-A0F7-41FDECF46F1B}.Release|x64.Build.0 = Release|x64
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Debug|x64.Build.0 = Debug|x64
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|Win32.Build.0 = Release|Win32
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|x64.ActiveCfg = Release|x64
|
||||
{2B1BAF36-0241-43E7-B865-A8338AD48E2E}.Release|x64.Build.0 = Release|x64
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Debug|x64.Build.0 = Debug|x64
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|Win32.Build.0 = Release|Win32
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|x64.ActiveCfg = Release|x64
|
||||
{0DA69C18-4FA1-4E8C-89CE-12498637C5BE}.Release|x64.Build.0 = Release|x64
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{B2AF4EA6-0CD7-4529-9EB5-5AF43DB90395}.Release|x64.ActiveCfg = Release|x64
|
||||
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Release|x64.ActiveCfg = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,18 +0,0 @@
|
||||
#
|
||||
# FreeTDM pkg-config file
|
||||
#
|
||||
prefix=@prefix@
|
||||
exec_prefix=${prefix}
|
||||
libdir=${exec_prefix}/lib
|
||||
includedir=${prefix}/include
|
||||
modulesdir=@modinstdir@
|
||||
|
||||
Name: FreeTDM
|
||||
Description:
|
||||
Version: @PACKAGE_VERSION@
|
||||
URL: http://www.openzap.org/
|
||||
Requires:
|
||||
Conflicts:
|
||||
Libs: -L${libdir} -lfreetdm
|
||||
Libs.private: -lm
|
||||
Cflags: -I${includedir}
|
||||
@@ -1,144 +0,0 @@
|
||||
#!/bin/bash
|
||||
INSTALLPREFIX="/usr/local/freetdm"
|
||||
VERSION=""
|
||||
NODOCS="NO"
|
||||
|
||||
for i in $*
|
||||
do
|
||||
case $i in
|
||||
--version=*)
|
||||
VERSION=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
|
||||
;;
|
||||
--prefix=*)
|
||||
INSTALLPREFIX=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
|
||||
;;
|
||||
--nodocs)
|
||||
NODOCS="YES"
|
||||
;;
|
||||
*)
|
||||
# unknown option
|
||||
echo "Unknown option $i"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "x$VERSION" = "x" ]
|
||||
then
|
||||
echo "Provide a version number with --version=<version>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
arch=$(uname -m)
|
||||
|
||||
# defs
|
||||
LIBSNG_ISDN_URL=ftp://ftp.sangoma.com/linux/libsng_isdn
|
||||
LIBSNG_ISDN_NAME=libsng_isdn-7-current
|
||||
LIBSNG_SS7_URL=ftp://ftp.sangoma.com/linux/libsng_ss7
|
||||
LIBSNG_SS7_NAME=libsng_ss7-3-current
|
||||
LIBSNG_ISDN_DIR="$LIBSNG_ISDN_NAME.$arch"
|
||||
LIBSNG_SS7_DIR="$LIBSNG_SS7_NAME.$arch"
|
||||
|
||||
# download and decompress a tarball
|
||||
# $1 = prefix_url, such as ftp://ftp.sangoma.com/foo/bar
|
||||
# $2 = package name, such as libsng_isdn-7.0.0.x86_64
|
||||
function download() {
|
||||
wget $1/$2.tgz
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
tardir=$(tar -tf $2.tgz | head -n1 | sed 's,\/,,g')
|
||||
tar -xvzf $2.tgz || echo "FAILED to decompress $2.tgz"
|
||||
if [ "$tardir" != "$2" ]
|
||||
then
|
||||
mv $tardir $2 || echo "FAILED to move $tardir to $2"
|
||||
fi
|
||||
echo "SUCCESSFULLY downloaded $2"
|
||||
else
|
||||
echo "FAILED to download $1/$2.tgz"
|
||||
fi
|
||||
}
|
||||
|
||||
# download and build libsng-ss7
|
||||
fullname="$LIBSNG_ISDN_NAME.$arch"
|
||||
if [ -d $fullname ]
|
||||
then
|
||||
echo "skipping isdn download since $fullname directory already exists ... remove if you want this step to be performed"
|
||||
else
|
||||
download $LIBSNG_ISDN_URL $fullname
|
||||
fi
|
||||
|
||||
cd $LIBSNG_ISDN_DIR
|
||||
make DESTDIR=$INSTALLPREFIX install || echo "Failed to build libsng-isdn"
|
||||
cd ..
|
||||
|
||||
# download and build libsng-ss7
|
||||
fullname="$LIBSNG_SS7_NAME.$arch"
|
||||
if [ -d $fullname ]
|
||||
then
|
||||
echo "skipping ss7 download since $fullname directory already exists ... remove if you want this step to be performed"
|
||||
else
|
||||
download $LIBSNG_SS7_URL $fullname
|
||||
fi
|
||||
|
||||
cd $LIBSNG_SS7_DIR
|
||||
make DESTDIR=$INSTALLPREFIX install || echo "Failed to build libsng-ss7"
|
||||
cd ..
|
||||
|
||||
if [ ! -d $INSTALLPREFIX ]
|
||||
then
|
||||
mkdir -p $INSTALLPREFIX || exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d $INSTALLPREFIX/bin-releases ]
|
||||
then
|
||||
mkdir -p $INSTALLPREFIX/bin-releases || exit 1
|
||||
fi
|
||||
|
||||
# attempt to compile freetdm
|
||||
echo "Build freetdm and mod_freetdm now..."
|
||||
make all mod_freetdm || exit 1
|
||||
echo "freetdm built OK"
|
||||
|
||||
major=$(echo "$VERSION" | cut -d. -f1)
|
||||
minor=$(echo "$VERSION" | cut -d. -f2)
|
||||
micro=$(echo "$VERSION" | cut -d. -f3)
|
||||
release="freetdm-$VERSION"
|
||||
|
||||
# ABI compatibility check
|
||||
if [ -x /usr/local/bin/ftdm_abi_check.py ]; then
|
||||
/usr/local/bin/ftdm_abi_check.py --release_path=$(pwd) --archive_path=$INSTALLPREFIX/bin-releases --version=$VERSION
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ABI compabitility test failed, not creating release. Either increment the major version number or fix the interface."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo -ne "\n\nWARNING: /usr/local/bin/ftdm_abi_check.py not found, skipping ABI compatibility test\n\n"
|
||||
fi
|
||||
|
||||
if [ $NODOCS = "NO" ]
|
||||
then
|
||||
make dox || exit 1
|
||||
fi
|
||||
|
||||
echo "Creating $release ($major.$minor.$micro) at $INSTALLPREFIX/$release (directory will be removed if exists already) ... "
|
||||
|
||||
mkdir -p $INSTALLPREFIX/$release $INSTALLPREFIX/bin-releases/$major/$release
|
||||
|
||||
cp -r ./* $INSTALLPREFIX/bin-releases/$major/$release
|
||||
cp -r ./.libs $INSTALLPREFIX/bin-releases/$major/$release
|
||||
|
||||
make clean
|
||||
make mod_freetdm-clean
|
||||
|
||||
cp -r ./* $INSTALLPREFIX/$release
|
||||
|
||||
# copy ABI compatibility reports to release
|
||||
if [ -d compat_reports ]; then
|
||||
mv ./compat_reports $INSTALLPREFIX/$release
|
||||
fi
|
||||
|
||||
rm -rf $INSTALLPREFIX/$release/{$LIBSNG_ISDN_DIR,$LIBSNG_SS7_DIR,*.tgz}
|
||||
rm -rf $INSTALLPREFIX/bin-releases/$major/$release/{$LIBSNG_ISDN_DIR,$LIBSNG_SS7_DIR,*.tgz}
|
||||
|
||||
tar -C $INSTALLPREFIX -czf $INSTALLPREFIX/$release.tar.gz $release/
|
||||
@@ -1,32 +0,0 @@
|
||||
#
|
||||
# Arnaldo M Pereira <arnaldo@sangoma.com>
|
||||
#
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
|
||||
PROJECT(mod_freetdm)
|
||||
|
||||
IF(NOT DEFINED WIN32)
|
||||
ADD_DEFINITIONS(-g -O2 -ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -O0 -g -ggdb -DPACKAGE_NAME=\"freetdm\" -DPACKAGE_TARNAME=\"freetdm\" -DPACKAGE_VERSION=\"pre-alpha\" -DPACKAGE_STRING=\"freetdm\ pre-alpha\" -DPACKAGE_BUGREPORT=\"bugs@freeswitch.org\" -DPACKAGE_URL=\"\" -DPACKAGE=\"libfreetdm\" -DVERSION=\"0.1\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_LIBDL=1 -DHAVE_LIBPTHREAD=1 -DHAVE_LIBM=1 -DSIZEOF_LONG=8 -DHAVE_NETINET_SCTP_H=1 -DHAVE_NETDB_H=1 -DHAVE_SYS_SELECT_H=1 -DHAVE_GETHOSTBYNAME_R=1) # -DDEBUG=/\*\*/)
|
||||
ENDIF(NOT DEFINED WIN32)
|
||||
|
||||
# includes
|
||||
SET(mod_freetdm_INCLUDES
|
||||
${PROJECT_SOURCE_DIR}/../src/include
|
||||
${PROJECT_SOURCE_DIR}/../src/isdn/include
|
||||
${PROJECT_SOURCE_DIR}/../../libteletone/src
|
||||
${PROJECT_SOURCE_DIR}/../../../src/include
|
||||
)
|
||||
INCLUDE_DIRECTORIES(${mod_freetdm_INCLUDES})
|
||||
|
||||
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/..)
|
||||
ADD_LIBRARY(${PROJECT_NAME} SHARED mod_freetdm.c)
|
||||
TARGET_LINK_LIBRARIES(${PROJECT_NAME} freetdm -fPIC -Werror -fvisibility=hidden)
|
||||
|
||||
IF(DEFINED WIN32)
|
||||
SET(EXT lib)
|
||||
ELSE(DEFINED WIN32)
|
||||
SET(EXT so)
|
||||
ENDIF(DEFINED WIN32)
|
||||
|
||||
ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E rename lib${PROJECT_NAME}.${EXT} ${PROJECT_NAME}.${EXT}
|
||||
)
|
||||
@@ -1,24 +0,0 @@
|
||||
FT_CFLAGS=@CFLAGS@ @COMP_VENDOR_CFLAGS@ @DEFS@
|
||||
|
||||
BASE=../../..
|
||||
FT_DIR=..
|
||||
VERBOSE=1
|
||||
FTLA=$(FT_DIR)/libfreetdm.la
|
||||
LOCAL_OBJS=tdm.o
|
||||
LOCAL_CFLAGS=-I$(FT_DIR)/src/include -I$(FT_DIR)/src/isdn/include $(FT_CFLAGS)
|
||||
LOCAL_LDFLAGS=-L$(FT_DIR) -lfreetdm
|
||||
include $(BASE)/build/modmake.rules
|
||||
|
||||
local_depend: $(FTLA)
|
||||
|
||||
$(FTLA): $(FT_DIR)/.update
|
||||
cd $(FT_DIR) && $(MAKE)
|
||||
|
||||
local_install:
|
||||
cd $(FT_DIR) && $(MAKE) install
|
||||
[ -f $(DESTDIR)@confdir@/autoload_configs/freetdm.conf.xml ] || cp -f $(FT_DIR)/conf/freetdm.conf.xml $(DESTDIR)@confdir@/autoload_configs
|
||||
|
||||
local_clean:
|
||||
cd $(FT_DIR) && $(MAKE) clean
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/bash
|
||||
rm -rf mod_freetdm.so
|
||||
rm -rf .libs/mod_freetdm.so
|
||||
rm -rf mod_freetdm.o
|
||||
rm -rf .libs/mod_freetdm.o
|
||||
rm -rf mod_freetdm.lo
|
||||
@@ -1,369 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="mod_freetdm"
|
||||
ProjectGUID="{FE3540C5-3303-46E0-A69E-D92F775687F1}"
|
||||
RootNamespace="mod_freetdm"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="131072"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../../../src/include;../src/include;../../curl/include;../src/isdn/include"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="4"
|
||||
WarnAsError="true"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="FreeSwitchCore.lib"
|
||||
OutputFile="$(SolutionDir)$(OutDir)/mod/mod_freetdm.dll"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""../../../w32/Library/$(OutDir)""
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/$(TargetName).pdb"
|
||||
SubSystem="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/mod_freetdm.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="../../../src/include;../src/include;../../curl/include;../src/isdn/include"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="4"
|
||||
WarnAsError="true"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="FreeSwitchCore.lib"
|
||||
OutputFile="$(SolutionDir)$(OutDir)/mod/mod_freetdm.dll"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories=""../../../w32/Library/$(OutDir)""
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/$(TargetName).pdb"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
LinkTimeCodeGeneration="1"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/mod_freetdm.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|x64"
|
||||
OutputDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../../../src/include;../src/include;../../curl/include;../src/isdn/include"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="4"
|
||||
WarnAsError="true"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="FreeSwitchCore.lib"
|
||||
OutputFile="$(SolutionDir)$(OutDir)/mod/mod_freetdm.dll"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""../../../w32/Library/$(OutDir)""
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/$(TargetName).pdb"
|
||||
SubSystem="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/mod_freetdm.lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
OutputDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="../../../src/include;../src/include;../../curl/include;../src/isdn/include"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="4"
|
||||
WarnAsError="true"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="FreeSwitchCore.lib"
|
||||
OutputFile="$(SolutionDir)$(OutDir)/mod/mod_freetdm.dll"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories=""../../../w32/Library/$(OutDir)""
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/$(TargetName).pdb"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
LinkTimeCodeGeneration="1"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/mod_freetdm.lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\mod_freetdm.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
@@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="mod_freetdm.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,201 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="mod_freetdm"
|
||||
ProjectGUID="{FE3540C5-3303-46E0-A69E-D92F775687F1}"
|
||||
RootNamespace="mod_freetdm"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../../../src/include;../src/include;../src/isdn/include"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="4"
|
||||
WarnAsError="true"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="FreeSwitchCore.lib"
|
||||
OutputFile="$(SolutionDir)$(OutDir)/mod/$(InputName).dll"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""../../../w32/Library/$(OutDir)""
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)$(TargetName).pdb"
|
||||
SubSystem="2"
|
||||
ImportLibrary="$(OutDir)/mod_freetdm.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="../../../src/include;../src/include;../src/isdn/include"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="4"
|
||||
WarnAsError="true"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="FreeSwitchCore.lib"
|
||||
OutputFile="$(SolutionDir)$(OutDir)/mod/$(InputName).dll"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories=""../../../w32/Library/$(OutDir)""
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)$(TargetName).pdb"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
LinkTimeCodeGeneration="1"
|
||||
ImportLibrary="$(OutDir)/mod_freetdm.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\mod_freetdm.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
@@ -1,719 +0,0 @@
|
||||
/*
|
||||
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
||||
* Copyright (C) 2005-2011, Anthony Minessale II <anthm@freeswitch.org>
|
||||
*
|
||||
* Version: MPL 1.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Anthony Minessale II <anthm@freeswitch.org>
|
||||
* Portions created by the Initial Developer are Copyright (C)
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Mathieu Rene <mrene@avgs.ca>
|
||||
*
|
||||
* tdm.c -- FreeTDM Controllable Channel Module
|
||||
*
|
||||
*/
|
||||
|
||||
#include <switch.h>
|
||||
#include "freetdm.h"
|
||||
|
||||
void ctdm_init(switch_loadable_module_interface_t *module_interface);
|
||||
|
||||
/* Parameters */
|
||||
|
||||
#define kSPAN_ID "span"
|
||||
#define kCHAN_ID "chan"
|
||||
#define kSPAN_NAME "span_name"
|
||||
#define kPREBUFFER_LEN "prebuffer_len"
|
||||
#define kECHOCANCEL "echo_cancel"
|
||||
|
||||
|
||||
static struct {
|
||||
switch_memory_pool_t *pool;
|
||||
switch_endpoint_interface_t *endpoint_interface;
|
||||
} ctdm;
|
||||
|
||||
typedef struct {
|
||||
int span_id;
|
||||
int chan_id;
|
||||
ftdm_channel_t *ftdm_channel;
|
||||
switch_core_session_t *session;
|
||||
switch_codec_t read_codec, write_codec;
|
||||
switch_frame_t read_frame;
|
||||
int prebuffer_len;
|
||||
|
||||
unsigned char databuf[SWITCH_RECOMMENDED_BUFFER_SIZE];
|
||||
} ctdm_private_t;
|
||||
|
||||
static switch_status_t channel_on_init(switch_core_session_t *session);
|
||||
static switch_status_t channel_on_destroy(switch_core_session_t *session);
|
||||
static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
|
||||
switch_caller_profile_t *outbound_profile,
|
||||
switch_core_session_t **new_session,
|
||||
switch_memory_pool_t **pool,
|
||||
switch_originate_flag_t flags, switch_call_cause_t *cancel_cause);
|
||||
static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
|
||||
static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
|
||||
static switch_status_t channel_receive_message(switch_core_session_t *session, switch_core_session_message_t *msg);
|
||||
static switch_status_t channel_receive_event(switch_core_session_t *session, switch_event_t *event);
|
||||
static switch_status_t channel_send_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf);
|
||||
|
||||
|
||||
static ftdm_status_t ctdm_span_prepare(ftdm_span_t *span);
|
||||
|
||||
switch_state_handler_table_t ctdm_state_handlers = {
|
||||
.on_init = channel_on_init,
|
||||
.on_destroy = channel_on_destroy
|
||||
};
|
||||
|
||||
switch_io_routines_t ctdm_io_routines = {
|
||||
.send_dtmf = channel_send_dtmf,
|
||||
.outgoing_channel = channel_outgoing_channel,
|
||||
.read_frame = channel_read_frame,
|
||||
.write_frame = channel_write_frame,
|
||||
.receive_message = channel_receive_message,
|
||||
.receive_event = channel_receive_event
|
||||
};
|
||||
|
||||
static void ctdm_report_alarms(ftdm_channel_t *channel)
|
||||
{
|
||||
switch_event_t *event = NULL;
|
||||
ftdm_alarm_flag_t alarmflag = 0;
|
||||
|
||||
if (switch_event_create(&event, SWITCH_EVENT_TRAP) != SWITCH_STATUS_SUCCESS) {
|
||||
ftdm_log(FTDM_LOG_ERROR, "failed to create alarms events\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (ftdm_channel_get_alarms(channel, &alarmflag) != FTDM_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to retrieve alarms %s:%d\n", ftdm_channel_get_span_name(channel), ftdm_channel_get_id(channel));
|
||||
return;
|
||||
}
|
||||
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "span-name", "%s", ftdm_channel_get_span_name(channel));
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "span-number", "%d", ftdm_channel_get_span_id(channel));
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "chan-number", "%d", ftdm_channel_get_id(channel));
|
||||
|
||||
if (alarmflag) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "condition", "ftdm-alarm-trap");
|
||||
} else {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "condition", "ftdm-alarm-clear");
|
||||
}
|
||||
|
||||
if (alarmflag & FTDM_ALARM_RED) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm", "red");
|
||||
}
|
||||
if (alarmflag & FTDM_ALARM_YELLOW) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm", "yellow");
|
||||
}
|
||||
if (alarmflag & FTDM_ALARM_RAI) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm", "rai");
|
||||
}
|
||||
if (alarmflag & FTDM_ALARM_BLUE) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm", "blue");
|
||||
}
|
||||
if (alarmflag & FTDM_ALARM_AIS) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm", "ais");
|
||||
}
|
||||
if (alarmflag & FTDM_ALARM_GENERAL) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm", "general");
|
||||
}
|
||||
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Reporting [%s] alarms for %s:%d\n",
|
||||
(alarmflag?"ftdm-alarm-trap":"ftdm-alarm-clear"), ftdm_channel_get_span_name(channel), ftdm_channel_get_id(channel));
|
||||
|
||||
switch_event_fire(&event);
|
||||
return;
|
||||
}
|
||||
|
||||
static ftdm_channel_t *ctdm_get_channel_from_event(switch_event_t *event, ftdm_span_t *span)
|
||||
{
|
||||
uint32_t chan_id = 0;
|
||||
const char *chan_number = NULL;
|
||||
|
||||
chan_number = switch_event_get_header(event, "chan-number");
|
||||
|
||||
if (zstr(chan_number)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No channel number specified\n");
|
||||
return NULL;
|
||||
}
|
||||
chan_id = atoi(chan_number);
|
||||
if (!chan_id) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid channel number:%s\n", chan_number);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return ftdm_span_get_channel_ph(span, chan_id);
|
||||
}
|
||||
|
||||
|
||||
static void ctdm_event_handler(switch_event_t *event)
|
||||
{
|
||||
ftdm_status_t status = FTDM_FAIL;
|
||||
switch(event->event_id) {
|
||||
case SWITCH_EVENT_TRAP:
|
||||
{
|
||||
ftdm_span_t *span = NULL;
|
||||
ftdm_channel_t *channel = NULL;
|
||||
const char *span_name = NULL;
|
||||
|
||||
const char *cond = switch_event_get_header(event, "condition");
|
||||
const char *command = switch_event_get_header(event, "command");
|
||||
if (zstr(cond)) {
|
||||
return;
|
||||
}
|
||||
|
||||
span_name = switch_event_get_header(event, "span-name");
|
||||
|
||||
if (ftdm_span_find_by_name(span_name, &span) != FTDM_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find span [%s]\n", span_name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!strcmp(cond, "mg-tdm-prepare")) {
|
||||
status = ctdm_span_prepare(span);
|
||||
if (status == FTDM_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s:prepared successfully\n", span_name);
|
||||
} else if (status != FTDM_EINVAL) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s:Failed to prepare span\n", span_name);
|
||||
}
|
||||
} else if (!strcmp(cond, "mg-tdm-check")) {
|
||||
channel = ctdm_get_channel_from_event(event, span);
|
||||
if (!channel) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find channel\n");
|
||||
return;
|
||||
}
|
||||
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Requesting alarm status for %s:%d\n",
|
||||
ftdm_channel_get_span_name(channel), ftdm_channel_get_id(channel));
|
||||
|
||||
ctdm_report_alarms(channel);
|
||||
} else if (!strcmp(cond, "mg-tdm-dtmfremoval")) {
|
||||
uint8_t enable = 0;
|
||||
channel = ctdm_get_channel_from_event(event, span);
|
||||
if (!channel) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find channel\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (zstr(command)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s:No command specified for mg-tdm-dtmfremoval\n", span_name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!strcmp(command, "enable")) {
|
||||
enable = 1;
|
||||
}
|
||||
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s DTMF-removal for %s:%d\n",
|
||||
enable ? "Enabling" : "Disabling", ftdm_channel_get_span_name(channel), ftdm_channel_get_id(channel));
|
||||
|
||||
ftdm_channel_command(channel, enable ? FTDM_COMMAND_ENABLE_DTMF_REMOVAL : FTDM_COMMAND_DISABLE_DTMF_REMOVAL, 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void ctdm_init(switch_loadable_module_interface_t *module_interface)
|
||||
{
|
||||
switch_endpoint_interface_t *endpoint_interface;
|
||||
ctdm.pool = module_interface->pool;
|
||||
endpoint_interface = switch_loadable_module_create_interface(module_interface, SWITCH_ENDPOINT_INTERFACE);
|
||||
endpoint_interface->interface_name = "tdm";
|
||||
endpoint_interface->io_routines = &ctdm_io_routines;
|
||||
endpoint_interface->state_handler = &ctdm_state_handlers;
|
||||
ctdm.endpoint_interface = endpoint_interface;
|
||||
|
||||
switch_event_bind("mod_freetdm", SWITCH_EVENT_TRAP, SWITCH_EVENT_SUBCLASS_ANY, ctdm_event_handler, NULL);
|
||||
}
|
||||
|
||||
static FIO_SIGNAL_CB_FUNCTION(on_signal_cb)
|
||||
{
|
||||
uint32_t chanid, spanid;
|
||||
switch_event_t *event = NULL;
|
||||
ftdm_alarm_flag_t alarmbits = FTDM_ALARM_NONE;
|
||||
|
||||
chanid = ftdm_channel_get_id(sigmsg->channel);
|
||||
spanid = ftdm_channel_get_span_id(sigmsg->channel);
|
||||
|
||||
switch(sigmsg->event_id) {
|
||||
case FTDM_SIGEVENT_ALARM_CLEAR:
|
||||
case FTDM_SIGEVENT_ALARM_TRAP:
|
||||
{
|
||||
if (ftdm_channel_get_alarms(sigmsg->channel, &alarmbits) != FTDM_SUCCESS) {
|
||||
ftdm_log(FTDM_LOG_ERROR, "failed to retrieve alarms\n");
|
||||
return FTDM_FAIL;
|
||||
}
|
||||
|
||||
if (switch_event_create(&event, SWITCH_EVENT_TRAP) != SWITCH_STATUS_SUCCESS) {
|
||||
ftdm_log(FTDM_LOG_ERROR, "failed to create alarms events\n");
|
||||
return FTDM_FAIL;
|
||||
}
|
||||
if (sigmsg->event_id == FTDM_SIGEVENT_ALARM_CLEAR) {
|
||||
ftdm_log(FTDM_LOG_NOTICE, "Alarm cleared on channel %d:%d\n", spanid, chanid);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "condition", "ftdm-alarm-clear");
|
||||
} else {
|
||||
ftdm_log(FTDM_LOG_NOTICE, "Alarm raised on channel %d:%d\n", spanid, chanid);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "condition", "ftdm-alarm-trap");
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unhandled event %d\n", sigmsg->event_id);
|
||||
break;
|
||||
}
|
||||
|
||||
if (event) {
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "span-name", "%s", ftdm_channel_get_span_name(sigmsg->channel));
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "span-number", "%d", ftdm_channel_get_span_id(sigmsg->channel));
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "chan-number", "%d", ftdm_channel_get_id(sigmsg->channel));
|
||||
|
||||
if (alarmbits & FTDM_ALARM_RED) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm", "red");
|
||||
}
|
||||
if (alarmbits & FTDM_ALARM_YELLOW) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm", "yellow");
|
||||
}
|
||||
if (alarmbits & FTDM_ALARM_RAI) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm", "rai");
|
||||
}
|
||||
if (alarmbits & FTDM_ALARM_BLUE) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm", "blue");
|
||||
}
|
||||
if (alarmbits & FTDM_ALARM_AIS) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm", "ais");
|
||||
}
|
||||
if (alarmbits & FTDM_ALARM_GENERAL) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm", "general");
|
||||
}
|
||||
|
||||
switch_event_fire(&event);
|
||||
}
|
||||
return FTDM_SUCCESS;
|
||||
}
|
||||
|
||||
static ftdm_status_t ctdm_span_prepare(ftdm_span_t *span)
|
||||
{
|
||||
if (ftdm_span_register_signal_cb(span, on_signal_cb) != FTDM_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register signal CB\n");
|
||||
return FTDM_FAIL;
|
||||
}
|
||||
return ftdm_span_start(span);
|
||||
}
|
||||
|
||||
static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
|
||||
switch_caller_profile_t *outbound_profile,
|
||||
switch_core_session_t **new_session,
|
||||
switch_memory_pool_t **pool,
|
||||
switch_originate_flag_t flags, switch_call_cause_t *cancel_cause)
|
||||
{
|
||||
const char *szchanid = switch_event_get_header(var_event, kCHAN_ID),
|
||||
*span_name = switch_event_get_header(var_event, kSPAN_NAME),
|
||||
*szprebuffer_len = switch_event_get_header(var_event, kPREBUFFER_LEN);
|
||||
int chan_id;
|
||||
int span_id;
|
||||
switch_caller_profile_t *caller_profile;
|
||||
ftdm_span_t *span;
|
||||
ftdm_channel_t *chan;
|
||||
switch_channel_t *channel;
|
||||
char name[128];
|
||||
const char *dname;
|
||||
ftdm_codec_t codec;
|
||||
uint32_t interval;
|
||||
ctdm_private_t *tech_pvt = NULL;
|
||||
|
||||
if (zstr(szchanid) || zstr(span_name)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Both ["kSPAN_ID"] and ["kCHAN_ID"] have to be set.\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
chan_id = atoi(szchanid);
|
||||
|
||||
if (ftdm_span_find_by_name(span_name, &span) == FTDM_SUCCESS) {
|
||||
span_id = ftdm_span_get_id(span);
|
||||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find span [%s]\n", span_name);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!(*new_session = switch_core_session_request(ctdm.endpoint_interface, SWITCH_CALL_DIRECTION_OUTBOUND, 0, pool))) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't request session.\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
channel = switch_core_session_get_channel(*new_session);
|
||||
|
||||
if (ftdm_channel_open_ph(span_id, chan_id, &chan) != FTDM_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't open span or channel.\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
switch_channel_set_flag(channel, CF_AUDIO);
|
||||
|
||||
span = ftdm_channel_get_span(chan);
|
||||
|
||||
tech_pvt = switch_core_session_alloc(*new_session, sizeof *tech_pvt);
|
||||
tech_pvt->chan_id = chan_id;
|
||||
tech_pvt->span_id = span_id;
|
||||
tech_pvt->ftdm_channel = chan;
|
||||
tech_pvt->session = *new_session;
|
||||
tech_pvt->read_frame.buflen = sizeof(tech_pvt->databuf);
|
||||
tech_pvt->read_frame.data = tech_pvt->databuf;
|
||||
tech_pvt->prebuffer_len = zstr(szprebuffer_len) ? 0 : atoi(szprebuffer_len);
|
||||
switch_core_session_set_private(*new_session, tech_pvt);
|
||||
|
||||
|
||||
caller_profile = switch_caller_profile_clone(*new_session, outbound_profile);
|
||||
switch_channel_set_caller_profile(channel, caller_profile);
|
||||
|
||||
snprintf(name, sizeof(name), "tdm/%d:%d", span_id, chan_id);
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Connect outbound channel %s\n", name);
|
||||
switch_channel_set_name(channel, name);
|
||||
|
||||
switch_channel_set_state(channel, CS_INIT);
|
||||
|
||||
if (FTDM_SUCCESS != ftdm_channel_command(chan, FTDM_COMMAND_GET_CODEC, &codec)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to retrieve channel codec.\n");
|
||||
return SWITCH_CAUSE_NETWORK_OUT_OF_ORDER;
|
||||
}
|
||||
|
||||
if (FTDM_SUCCESS != ftdm_channel_command(chan, FTDM_COMMAND_GET_INTERVAL, &interval)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to retrieve channel interval.\n");
|
||||
return SWITCH_CAUSE_NETWORK_OUT_OF_ORDER;
|
||||
}
|
||||
|
||||
if (FTDM_SUCCESS != ftdm_channel_command(chan, FTDM_COMMAND_SET_PRE_BUFFER_SIZE, &tech_pvt->prebuffer_len)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to set channel pre buffer size.\n");
|
||||
return SWITCH_CAUSE_NETWORK_OUT_OF_ORDER;
|
||||
}
|
||||
|
||||
if (FTDM_SUCCESS != ftdm_channel_command(tech_pvt->ftdm_channel, FTDM_COMMAND_ENABLE_ECHOCANCEL, NULL)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Failed to set enable echo cancellation.\n");
|
||||
}
|
||||
|
||||
switch(codec) {
|
||||
case FTDM_CODEC_ULAW:
|
||||
{
|
||||
dname = "PCMU";
|
||||
}
|
||||
break;
|
||||
case FTDM_CODEC_ALAW:
|
||||
{
|
||||
dname = "PCMA";
|
||||
}
|
||||
break;
|
||||
case FTDM_CODEC_SLIN:
|
||||
{
|
||||
dname = "L16";
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid codec value retrieved from channel, codec value: %d\n", codec);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (switch_core_codec_init(&tech_pvt->read_codec,
|
||||
dname,
|
||||
NULL,
|
||||
NULL,
|
||||
8000,
|
||||
interval,
|
||||
1,
|
||||
SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE,
|
||||
NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n");
|
||||
goto fail;
|
||||
} else {
|
||||
if (switch_core_codec_init(&tech_pvt->write_codec,
|
||||
dname,
|
||||
NULL,
|
||||
NULL,
|
||||
8000,
|
||||
interval,
|
||||
1,
|
||||
SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE,
|
||||
NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n");
|
||||
switch_core_codec_destroy(&tech_pvt->read_codec);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
if (switch_core_session_set_read_codec(*new_session, &tech_pvt->read_codec) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't set read codec?\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (switch_core_session_set_write_codec(*new_session, &tech_pvt->write_codec) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't set write codec?\n");
|
||||
}
|
||||
|
||||
if (switch_core_session_thread_launch(*new_session) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't start session thread.\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
switch_channel_mark_answered(channel);
|
||||
|
||||
return SWITCH_CAUSE_SUCCESS;
|
||||
|
||||
fail:
|
||||
|
||||
if (tech_pvt) {
|
||||
if (tech_pvt->ftdm_channel) {
|
||||
ftdm_channel_close(&tech_pvt->ftdm_channel);
|
||||
}
|
||||
|
||||
if (tech_pvt->read_codec.implementation) {
|
||||
switch_core_codec_destroy(&tech_pvt->read_codec);
|
||||
}
|
||||
|
||||
if (tech_pvt->write_codec.implementation) {
|
||||
switch_core_codec_destroy(&tech_pvt->write_codec);
|
||||
}
|
||||
}
|
||||
|
||||
if (*new_session) {
|
||||
switch_core_session_destroy(new_session);
|
||||
}
|
||||
return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
|
||||
}
|
||||
|
||||
static switch_status_t channel_on_init(switch_core_session_t *session)
|
||||
{
|
||||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||
|
||||
switch_channel_set_state(channel, CS_CONSUME_MEDIA);
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static switch_status_t channel_on_destroy(switch_core_session_t *session)
|
||||
{
|
||||
ctdm_private_t *tech_pvt = switch_core_session_get_private(session);
|
||||
|
||||
if ((tech_pvt = switch_core_session_get_private(session))) {
|
||||
|
||||
if (FTDM_SUCCESS != ftdm_channel_command(tech_pvt->ftdm_channel, FTDM_COMMAND_ENABLE_ECHOCANCEL, NULL)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Failed to enable echo cancellation.\n");
|
||||
}
|
||||
|
||||
if (tech_pvt->read_codec.implementation) {
|
||||
switch_core_codec_destroy(&tech_pvt->read_codec);
|
||||
}
|
||||
|
||||
if (tech_pvt->write_codec.implementation) {
|
||||
switch_core_codec_destroy(&tech_pvt->write_codec);
|
||||
}
|
||||
|
||||
switch_core_session_unset_read_codec(session);
|
||||
switch_core_session_unset_write_codec(session);
|
||||
|
||||
ftdm_channel_close(&tech_pvt->ftdm_channel);
|
||||
}
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
|
||||
{
|
||||
ftdm_wait_flag_t wflags = FTDM_READ;
|
||||
ftdm_status_t status;
|
||||
ctdm_private_t *tech_pvt;
|
||||
const char *name;
|
||||
switch_channel_t *channel;
|
||||
int chunk;
|
||||
uint32_t span_id, chan_id;
|
||||
ftdm_size_t len;
|
||||
char dtmf[128] = "";
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
|
||||
tech_pvt = switch_core_session_get_private(session);
|
||||
assert(tech_pvt != NULL);
|
||||
|
||||
name = switch_channel_get_name(channel);
|
||||
|
||||
top:
|
||||
wflags = FTDM_READ;
|
||||
chunk = ftdm_channel_get_io_interval(tech_pvt->ftdm_channel) * 2;
|
||||
status = ftdm_channel_wait(tech_pvt->ftdm_channel, &wflags, chunk);
|
||||
|
||||
|
||||
span_id = ftdm_channel_get_span_id(tech_pvt->ftdm_channel);
|
||||
chan_id = ftdm_channel_get_id(tech_pvt->ftdm_channel);
|
||||
|
||||
if (status == FTDM_FAIL) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to read from channel %s device %d:%d!\n", name, span_id, chan_id);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (status == FTDM_TIMEOUT) {
|
||||
goto top;
|
||||
}
|
||||
|
||||
if (!(wflags & FTDM_READ)) {
|
||||
goto top;
|
||||
}
|
||||
|
||||
len = tech_pvt->read_frame.buflen;
|
||||
if (ftdm_channel_read(tech_pvt->ftdm_channel, tech_pvt->read_frame.data, &len) != FTDM_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Failed to read from channel %s device %d:%d!\n", name, span_id, chan_id);
|
||||
}
|
||||
|
||||
*frame = &tech_pvt->read_frame;
|
||||
tech_pvt->read_frame.datalen = (uint32_t)len;
|
||||
tech_pvt->read_frame.samples = tech_pvt->read_frame.datalen;
|
||||
tech_pvt->read_frame.codec = &tech_pvt->read_codec;
|
||||
|
||||
if (ftdm_channel_get_codec(tech_pvt->ftdm_channel) == FTDM_CODEC_SLIN) {
|
||||
tech_pvt->read_frame.samples /= 2;
|
||||
}
|
||||
|
||||
while (ftdm_channel_dequeue_dtmf(tech_pvt->ftdm_channel, dtmf, sizeof(dtmf))) {
|
||||
switch_dtmf_t _dtmf = { 0, switch_core_default_dtmf_duration(0) };
|
||||
char *p;
|
||||
for (p = dtmf; p && *p; p++) {
|
||||
if (is_dtmf(*p)) {
|
||||
_dtmf.digit = *p;
|
||||
ftdm_log(FTDM_LOG_DEBUG, "Queuing DTMF [%c] in channel %s device %d:%d\n", *p, name, span_id, chan_id);
|
||||
switch_channel_queue_dtmf(channel, &_dtmf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
|
||||
fail:
|
||||
return SWITCH_STATUS_GENERR;
|
||||
}
|
||||
|
||||
static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
|
||||
{
|
||||
ftdm_wait_flag_t wflags = FTDM_WRITE;
|
||||
ctdm_private_t *tech_pvt;
|
||||
const char *name;
|
||||
switch_channel_t *channel;
|
||||
uint32_t span_id, chan_id;
|
||||
ftdm_size_t len;
|
||||
unsigned char data[SWITCH_RECOMMENDED_BUFFER_SIZE] = {0};
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
|
||||
tech_pvt = switch_core_session_get_private(session);
|
||||
assert(tech_pvt != NULL);
|
||||
|
||||
span_id = ftdm_channel_get_span_id(tech_pvt->ftdm_channel);
|
||||
chan_id = ftdm_channel_get_id(tech_pvt->ftdm_channel);
|
||||
|
||||
name = switch_channel_get_name(channel);
|
||||
|
||||
if (switch_test_flag(frame, SFF_CNG)) {
|
||||
frame->data = data;
|
||||
frame->buflen = sizeof(data);
|
||||
if ((frame->datalen = tech_pvt->write_codec.implementation->encoded_bytes_per_packet) > frame->buflen) {
|
||||
goto fail;
|
||||
}
|
||||
memset(data, 255, frame->datalen);
|
||||
}
|
||||
|
||||
wflags = FTDM_WRITE;
|
||||
ftdm_channel_wait(tech_pvt->ftdm_channel, &wflags, ftdm_channel_get_io_interval(tech_pvt->ftdm_channel) * 10);
|
||||
|
||||
if (!(wflags & FTDM_WRITE)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Dropping frame! (write not ready) in channel %s device %d:%d!\n", name, span_id, chan_id);
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
len = frame->datalen;
|
||||
if (ftdm_channel_write(tech_pvt->ftdm_channel, frame->data, frame->buflen, &len) != FTDM_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Failed to write to channel %s device %d:%d!\n", name, span_id, chan_id);
|
||||
}
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
|
||||
fail:
|
||||
return SWITCH_STATUS_GENERR;
|
||||
}
|
||||
|
||||
static switch_status_t channel_send_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
|
||||
{
|
||||
ctdm_private_t *tech_pvt = NULL;
|
||||
char tmp[2] = "";
|
||||
|
||||
tech_pvt = switch_core_session_get_private(session);
|
||||
assert(tech_pvt != NULL);
|
||||
|
||||
tmp[0] = dtmf->digit;
|
||||
ftdm_channel_command(tech_pvt->ftdm_channel, FTDM_COMMAND_SEND_DTMF, tmp);
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static switch_status_t channel_receive_message(switch_core_session_t *session, switch_core_session_message_t *msg)
|
||||
{
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static switch_status_t channel_receive_event(switch_core_session_t *session, switch_event_t *event)
|
||||
{
|
||||
const char *command = switch_event_get_header(event, "command");
|
||||
ctdm_private_t *tech_pvt = switch_core_session_get_private(session);
|
||||
|
||||
if (!zstr(command)) {
|
||||
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "FreeTDM received %s command \n",command);
|
||||
|
||||
if (!strcasecmp(command, kPREBUFFER_LEN)) {
|
||||
const char *szval = switch_event_get_header(event, kPREBUFFER_LEN);
|
||||
int val = !zstr(szval) ? atoi(szval) : 0;
|
||||
|
||||
if (tech_pvt->prebuffer_len == val) {
|
||||
tech_pvt->prebuffer_len = val;
|
||||
if (FTDM_SUCCESS != ftdm_channel_command(tech_pvt->ftdm_channel, FTDM_COMMAND_SET_PRE_BUFFER_SIZE, &tech_pvt->prebuffer_len)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to set channel pre buffer size.\n");
|
||||
return SWITCH_STATUS_GENERR;
|
||||
}
|
||||
}
|
||||
} else if (!strcasecmp(command, kECHOCANCEL)) {
|
||||
const char *szval = switch_event_get_header(event, kECHOCANCEL);
|
||||
int enabled = !!switch_true(szval);
|
||||
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "FreeTDM sending echo cancel [%s] command \n",enabled ? "enable" : "disable");
|
||||
|
||||
if (FTDM_SUCCESS != ftdm_channel_command(tech_pvt->ftdm_channel, enabled ? FTDM_COMMAND_ENABLE_ECHOCANCEL : FTDM_COMMAND_DISABLE_ECHOCANCEL, NULL)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Failed to %s echo cancellation.\n", enabled ? "enable" : "disable");
|
||||
}
|
||||
|
||||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "FreeTDM received unknown command [%s] \n",command);
|
||||
}
|
||||
}
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -1,499 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="freetdm"
|
||||
ProjectGUID="{93B8812C-3EC4-4F78-8970-FFBFC99E167D}"
|
||||
RootNamespace="freetdm"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="131072"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2"
|
||||
BuildLogFile="$(IntDir)\BuildLog-freetdm.htm"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../src/include;../src/include/private;../src/isdn/include"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FREETDM_EXPORTS;TELETONE_EXPORTS;_WIN32_WINNT=0x0501"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
DisableLanguageExtensions="false"
|
||||
RuntimeTypeInfo="false"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="4"
|
||||
WarnAsError="true"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
CompileAs="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
GenerateDebugInformation="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2"
|
||||
BuildLogFile="$(IntDir)\BuildLog-freetdm.htm"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../src/include;../src/include/private;../src/isdn/include"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FREETDM_EXPORTS;TELETONE_EXPORTS;_WIN32_WINNT=0x0501"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
DisableLanguageExtensions="false"
|
||||
RuntimeTypeInfo="false"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="4"
|
||||
WarnAsError="true"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
CompileAs="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
GenerateDebugInformation="true"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
BuildLogFile="$(IntDir)\BuildLog-freetdm.htm"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="../src/include;../src/include/private;../src/isdn/include"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FREETDM_EXPORTS;TELETONE_EXPORTS;_WIN32_WINNT=0x0501"
|
||||
RuntimeLibrary="2"
|
||||
DisableLanguageExtensions="false"
|
||||
RuntimeTypeInfo="false"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="4"
|
||||
WarnAsError="true"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
CompileAs="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
BuildLogFile="$(IntDir)\BuildLog-freetdm.htm"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="../src/include;../src/include/private;../src/isdn/include"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FREETDM_EXPORTS;TELETONE_EXPORTS;_WIN32_WINNT=0x0501"
|
||||
RuntimeLibrary="2"
|
||||
DisableLanguageExtensions="false"
|
||||
RuntimeTypeInfo="false"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="4"
|
||||
WarnAsError="true"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
CompileAs="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\src\include\freetdm.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\fsk.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\ftdm_buffer.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\ftdm_call_utils.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\ftdm_config.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\ftdm_core.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\ftdm_declare.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\ftdm_dso.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\ftdm_os.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\ftdm_sched.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\ftdm_state.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\ftdm_threadmutex.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\ftdm_types.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\g711.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\hashtable.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\hashtable_itr.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\hashtable_private.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\libteletone.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\libteletone_detect.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\libteletone_generate.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\include\private\uart.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\src\fsk.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\ftdm_buffer.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\ftdm_call_utils.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\ftdm_variables.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\ftdm_callerid.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\ftdm_config.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\ftdm_cpu_monitor.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\ftdm_dso.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\ftdm_io.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\ftdm_queue.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\ftdm_sched.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\ftdm_state.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\ftdm_threadmutex.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\g711.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\hashtable.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\hashtable_itr.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\libteletone_detect.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\libteletone_generate.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\uart.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
@@ -1,137 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\src\include\freetdm.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\fsk.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\ftdm_buffer.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\ftdm_call_utils.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\ftdm_config.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\ftdm_core.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\ftdm_declare.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\ftdm_dso.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\ftdm_os.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\ftdm_sched.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\ftdm_threadmutex.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\ftdm_types.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\g711.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\hashtable.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\hashtable_itr.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\hashtable_private.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\libteletone.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\libteletone_detect.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\libteletone_generate.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\uart.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\include\private\ftdm_state.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\src\fsk.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ftdm_buffer.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ftdm_call_utils.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ftdm_variables.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ftdm_callerid.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ftdm_config.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ftdm_cpu_monitor.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ftdm_dso.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ftdm_io.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ftdm_queue.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ftdm_sched.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ftdm_threadmutex.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\g711.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\hashtable.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\hashtable_itr.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\libteletone_detect.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\libteletone_generate.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\uart.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ftdm_state.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user