Merge branch 'master' into smgmaster

This commit is contained in:
Konrad Hammel
2010-11-18 15:41:46 -05:00
278 changed files with 61709 additions and 5169 deletions
+22 -1
View File
@@ -108,5 +108,26 @@ libs/freetdm/testpri
libs/freetdm/testr2
libs/freetdm/testsangomaboost
libs/freetdm/testtones
libs/esl/fs_cli
libs/esl/ivrd
libs/esl/testserver
libs/esl/testclient
libs/libcodec2/Makefile
libs/libcodec2/Makefile.in
libs/libcodec2/config.guess
libs/libcodec2/config.sub
libs/libcodec2/configure
libs/libcodec2/depcomp
libs/libcodec2/install-sh
libs/libcodec2/libtool
libs/libcodec2/ltmain.sh
libs/libcodec2/missing
libs/libcodec2/src/Makefile
libs/libcodec2/src/Makefile.in
libs/libcodec2/unittest/Makefile
libs/libcodec2/unittest/Makefile.in
src/mod/applications/mod_osp/Makefile
src/mod/applications/mod_osp/Makefile.in
src/mod/applications/mod_hash/Makefile
src/mod/applications/mod_hash/Makefile.in
src/mod/applications/mod_hash/mod_hash.log
+16 -16
View File
@@ -2042,18 +2042,18 @@ Global
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64.Build.0 = Release|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.ActiveCfg = Debug|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.Build.0 = Debug|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.ActiveCfg = Debug|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.Build.0 = Debug|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.ActiveCfg = Debug|x64
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.Build.0 = Debug|x64
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.ActiveCfg = Release|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.Build.0 = Release|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.ActiveCfg = Release|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.Build.0 = Release|Win32
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.ActiveCfg = Release|x64
{7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.Build.0 = Release|x64
{7EB71250-F002-4ED8-92CA-CA218114537A}.All|Win32.ActiveCfg = Release|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.All|x64.ActiveCfg = Release|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Win32.ActiveCfg = Debug|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x64.ActiveCfg = Debug|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x64.ActiveCfg = Debug|x64
{7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Win32.ActiveCfg = Release|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|Win32
{7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|x64
{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|Win32.ActiveCfg = Release|Win32
{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|x64.ActiveCfg = Release|Win32
{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -2063,9 +2063,9 @@ Global
{464AAB78-5489-4916-BE51-BF8D61822311}.All|Win32.ActiveCfg = Release|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.All|x64.ActiveCfg = Release|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Win32.ActiveCfg = Debug|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x64.ActiveCfg = Debug|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x64.ActiveCfg = Debug|x64
{464AAB78-5489-4916-BE51-BF8D61822311}.Release|Win32.ActiveCfg = Release|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|Win32
{464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|x64
{0AD1177E-1FD8-4643-9391-431467A11084}.All|Win32.ActiveCfg = Release|x64
{0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.ActiveCfg = Release|x64
{0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.Build.0 = Release|x64
@@ -2482,24 +2482,24 @@ Global
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64.Build.0 = Release|Win32
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.ActiveCfg = Debug|Win32
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.Build.0 = Debug|Win32
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.ActiveCfg = Debug|Win32
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.Build.0 = Debug|Win32
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.ActiveCfg = Debug|x64
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.Build.0 = Debug|x64
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.ActiveCfg = Release|Win32
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.Build.0 = Release|Win32
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.ActiveCfg = Release|Win32
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.Build.0 = Release|Win32
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.ActiveCfg = Release|x64
{D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.Build.0 = Release|x64
{BA599D0A-4310-4505-91DA-6A6447B3E289}.All|Win32.ActiveCfg = Release|Win32
{BA599D0A-4310-4505-91DA-6A6447B3E289}.All|x64.ActiveCfg = Release|Win32
{BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|Win32.ActiveCfg = Debug|Win32
{BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x64.ActiveCfg = Debug|Win32
{BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x64.ActiveCfg = Debug|x64
{BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|Win32.ActiveCfg = Release|Win32
{BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x64.ActiveCfg = Release|Win32
{BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x64.ActiveCfg = Release|x64
{EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|Win32.ActiveCfg = Release|Win32
{EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|x64.ActiveCfg = Release|Win32
{EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|Win32.ActiveCfg = Debug|Win32
{EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x64.ActiveCfg = Debug|Win32
{EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x64.ActiveCfg = Debug|x64
{EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|Win32.ActiveCfg = Release|Win32
{EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x64.ActiveCfg = Release|Win32
{EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x64.ActiveCfg = Release|x64
{70564D74-199A-4452-9C60-19ED5F242F0D}.All|Win32.ActiveCfg = Release|x64
{70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64.ActiveCfg = Release|x64
{70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64.Build.0 = Release|x64
+1174
View File
File diff suppressed because it is too large Load Diff
+9 -1
View File
@@ -267,7 +267,7 @@ src/include/switch_swigable_cpp.h: $(switch_srcdir)/src/include/switch_cpp.h
##
## Applications
##
bin_PROGRAMS = freeswitch fs_cli fs_ivrd tone2wav
bin_PROGRAMS = freeswitch fs_cli fs_ivrd tone2wav fs_encode
##
## fs_cli ()
@@ -281,6 +281,14 @@ fs_cli_CFLAGS += -DHAVE_EDITLINE -I$(switch_srcdir)/libs/libedit/src
fs_cli_LDADD = libs/libedit/src/.libs/libedit.a
endif
##
## fs_encode ()
##
fs_encode_SOURCES = src/fs_encode.c
fs_encode_CFLAGS = $(AM_CFLAGS)
fs_encode_LDFLAGS = $(AM_LDFLAGS) $(CORE_LIBS)
fs_encode_LDADD = libfreeswitch.la
##
## tone2wav ()
##
+1 -1
View File
@@ -148,7 +148,7 @@ if [ "x$libtoolize" = "x" ]; then
exit 1
fi
if [ ! -x "$libtoolize" ]; then
echo "$libtoolize does not exist or ist not executable"
echo "$libtoolize does not exist or is not executable"
exit 1
fi
+1 -1
View File
@@ -105,5 +105,5 @@ say/mod_say_ru
#say/mod_say_th
## Experimental Modules (don't cry if they're broken)
#../../contrib/mod/endpoints/mod_khomp
#endpoints/mod_khomp
#../../contrib/mod/xml_int/mod_xml_odbc
@@ -13,6 +13,7 @@
<param name="time-base-score" value="system"/>
<param name="max-wait-time" value="0"/>
<param name="max-wait-time-with-no-agent" value="0"/>
<param name="max-wait-time-with-no-agent-time-reached" value="5"/>
<param name="tier-rules-apply" value="false"/>
<param name="tier-rule-wait-second" value="300"/>
<param name="tier-rule-wait-multiply-level" value="true"/>
@@ -2,7 +2,16 @@
<settings>
<param name="listen-ip" value="0.0.0.0"/>
<param name="listen-port" value="8031"/>
<!-- Specify the first part of the node name
(the host part after the @ will be autodetected)
OR pass a complete nodename to avoid autodetection
eg. freeswitch@example or freeswitch@example.com.
If you pass a complete node name, the 'shortname' parameter has no effect. -->
<param name="nodename" value="freeswitch"/>
<!-- Specify this OR 'cookie-file' or $HOME/.erlang.cookie will be read -->
<param name="cookie" value="ClueCon"/>
<!-- Read a cookie from an arbitary erlang cookie file instead -->
<!--<param name="cookie-file" value="/tmp/erlang.cookie"/>-->
<param name="shortname" value="true"/>
<!-- in additon to cookie, optionally restrict by ACL -->
<!--<param name="apply-inbound-acl" value="lan"/>-->
+1
View File
@@ -34,6 +34,7 @@
<load module="mod_sofia"/>
<load module="mod_loopback"/>
<!-- <load module="mod_woomera"/> -->
<!-- <load module="mod_freetdm"/> -->
<!-- <load module="mod_openzap"/> -->
<!-- <load module="mod_unicall"/> -->
<!-- <load module="mod_skinny"/> -->
+1
View File
@@ -86,6 +86,7 @@
<!-- <param name="core-db-dsn" value="dsn:username:password" /> -->
<!-- The system will create all the db schemas automatically, set this to false to avoid this behaviour-->
<!--<param name="auto-create-schemas" value="true"/>-->
<!-- <param name="core-dbtype" value="MSSQL"/> -->
</settings>
</configuration>
+4 -3
View File
@@ -33,9 +33,10 @@
<param name="ff-key" value="6"/>
<param name="rew-key" value="4"/>
<param name="skip-greet-key" value="#"/>
<!--<param name="previous-message-key" value=""/>-->
<!--<param name="next-message-key" value=""/>-->
<!--<param name="skip-info-key" value=""/>-->
<param name="previous-message-key" value="1"/>-->
<param name="next-message-key" value="3"/>
<param name="skip-info-key" value="*"/>
<param name="repeat-message-key" value="0"/>
<param name="record-silence-threshold" value="200"/>
<param name="record-silence-hits" value="2"/>
<param name="web-template-file" value="web-vm.tpl"/>
+4 -2
View File
@@ -95,7 +95,7 @@
<extension name="global-intercept">
<condition field="destination_number" expression="^886$">
<action application="answer"/>
<action application="intercept" data="${hash(select/${domain_name}-last_dial/global)}"/>
<action application="intercept" data="${hash(select/${domain_name}-last_dial_ext/global)}"/>
<action application="sleep" data="2000"/>
</condition>
</extension>
@@ -103,7 +103,7 @@
<extension name="group-intercept">
<condition field="destination_number" expression="^\*8$">
<action application="answer"/>
<action application="intercept" data="${hash(select/${domain_name}-last_dial/${callgroup})}"/>
<action application="intercept" data="${hash(select/${domain_name}-last_dial_ext/${callgroup})}"/>
<action application="sleep" data="2000"/>
</condition>
</extension>
@@ -260,6 +260,8 @@
<action application="set" data="continue_on_fail=true"/>
<action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/>
<action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/>
<action application="hash" data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/>
<action application="hash" data="insert/${domain_name}-last_dial_ext/global/${uuid}"/>
<action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/>
<!--<action application="export" data="nolocal:sip_secure_media=${user_data(${dialed_extension}@${domain_name} var sip_secure_media)}"/>-->
<action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/>
+29
View File
@@ -0,0 +1,29 @@
Please do not change the maintainer (as found in the control file).
Please DO send me a note before changing anything here. Also, PLEASE DO MAKE A
JIRA FIRST !!!!
This request is the result of far too many sleepless nights and far too many
people breaking this far too often. So, HANDS OFF FOR NOW !!!!
Again, to be perfectly clear:
1. Do not make any changes before verifying that they are OK with the current
maintainer (yes, that is me*).
2. Before the mere idea of making a change crosses your mind, create a ticket in
Jira and assign it to the current maintainer.
3. As current maintainer, I have other obligations besides fixing things people
break in the Debian build. So, please be patient; it can sometimes take a
bit for me to respond.
4. Creating and maintaining this packages has been a lot of work. Please help
me maintain it by not fixing it to death.
5. The maintainer is always right.
6. If you believe the maintainer is wrong, please see item #5.
* Michal Bielicki <michal.bielicki@seventhsignal.de>
+53 -3
View File
@@ -1,3 +1,53 @@
freeswitch (1.0.head~git.master.20101015.1-1) unstable; urgency=low
* reintroduced mod_flite
* disabled the patching stuff introduced by Julien ... needs an overwork
* reintroduced mod_tts_commandline
* cleaned up rules file and module make rules
* more trivial changes and updates :)
-- Michal Bielicki <michal.bielicki@seventhsignal.de> Fri, 15 Oct 2010 13:14:02 +0200
freeswitch (1.0.head~git.master.20101014.1-1) unstable; urgency=low
* replaced mod_openzap with mod_freetdm
* added mod_theora
* added mod_codec2
* added mod_amrwb
* added mod_portaudio_stream
* cleaned up rules file and module make rules
* added patches from Julien Duqene (FS-369)
* Various trivial changes and updates :)
-- Michal Bielicki <michal.bielicki@seventhsignal.de> Fri, 15 Oct 2010 05:05:02 +0200
freeswitch (1.0.head~git.master.20100601.2-1) unstable; urgency=low
* Various trivial changes and updates.
* Change upstream package version numbering scheme for unreleased versions:
new format is major.minor.micro~git.branch.date.commits-1
* Change source format to 3.0 (quilt).
* Upgrade debhelper compatibility to version 7.
* Update maintainer data and copyright file; now includes the full text
of the MPL since it is not (yet?) available in /usr/share/common-licenses/
* Build and install mod_file_string.so (FSBUILD-247)
* Work around build failure caused by clean rules for openzap.
* Remove several libraries from explicit dependencies, there were no special
version requirements and they should be picked up by dh_shlibdeps.
* Add dh_makeshlibs and make dh_shlibsdeps work again.
* Move openssl to Suggests: as it is not a required package to install or
run freeswitch.
* Add upstream-convert rule to apply patches, generate orig tarball
and set package version.
* Add check to ensure debian patches are applied before attempting build.
* Fix clean rule to avoid unwanted tree change before building orig.tar
archives with git-buildpackage.
-- Julien Plissonneau Duquene <exp-end-2010-06-88a41947@aqiii.org> Tue, 01 Jun 2010 09:53:44 -0400
freeswitch (1.0.6-1ubuntu1) maverick; urgency=low
[ Gabriel Gunderson ]
@@ -15,7 +65,7 @@ freeswitch (1.0.4-1ubuntu2) karmic; urgency=low
* upgrade: Add more verbosity when building to make it easier to find build
errors.
* upgrade: Remove the requirement for EXACTLY automake1.9 and change it to
need atleast automake 1.9
need at least automake 1.9
* upgrade: Add the modules (directory, cluechoo, and valet_parking) to the
build files. These are in the standard build, so they should be here too.
@@ -574,7 +624,7 @@ freeswitch (1.0.1-1) unstable; urgency=low
* ADD: reboot option for sip phones to flush_inboud_reg sofia profile api command
* FIX: add small padding to end of mp3 to avoid cut off mp3 recording
* FIX: patch multiple SDP connection lines in sdp for proxy media mode (MODENDP-109)
* FIX: don't parse ringback varable in proxy situations
* FIX: don't parse ringback variable in proxy situations
* ADD: per call vm recording ext with vm_message_ext variable
* ADD: sip_bye_h prefix to add headers to bye
* ENHANCEMENT: more interfaces available in show fsapi command
@@ -596,7 +646,7 @@ freeswitch (1.0.1~trunk) unstable; urgency=low
- Added mod_say_es and mod_say_nl
- Updated descriptions
- Added mod_cdr_csv
* Fixed typos and some errors in the previus patch.
* Fixed typos and some errors in the previous patch.
* Modified monit script. Now it should work.
* The debian build system now bootstrap automagically if it's necessary and all scripts are in place.
+1 -1
View File
@@ -1 +1 @@
4
7
+44 -10
View File
@@ -2,18 +2,22 @@ Source: freeswitch
Section: comm
Priority: extra
Maintainer: FreeSWITCH developers <freeswitch-dev@lists.freeswitch.org>
Uploaders: Michal Bielicki <michal.bielicki@voiceworks.pl>, Gabriel Gunderson <gabe@gundy.org>, William King <quentusrex@gmail.com>, Mathieu Parent <sathieu@debian.org>
Build-Depends: debhelper (>= 5), fakeroot, wget, automake (>=1.9), autoconf, libtool, unixodbc-dev, libasound2-dev, libcurl3-openssl-dev|libcurl4-openssl-dev, libssl-dev, ncurses-dev, libogg-dev, libvorbis-dev, libperl-dev, libgdbm-dev, libdb-dev, libgnutls-dev, libtiff4-dev, python-dev, libx11-dev, uuid-dev
Uploaders: Michal Bielicki <michal.bielicki@seventhsignal.pl>, Gabriel Gunderson <gabe@gundy.org>, William King <quentusrex@gmail.com>, Mathieu Parent <sathieu@debian.org>
Build-Depends: debhelper (>= 7), wget, automake (>=1.9), autoconf, libtool,
unixodbc-dev, libasound2-dev, libcurl3-openssl-dev|libcurl4-openssl-dev,
libssl-dev, ncurses-dev, libogg-dev, libvorbis-dev, libperl-dev, libgdbm-dev,
libdb-dev, libgnutls-dev, libtiff4-dev, python-dev, libx11-dev, uuid-dev
Homepage: http://freeswitch.org/
Standards-Version: 3.9.1
Vcs-Svn: http://svn.freeswitch.org/svn/freeswitch/trunk/
Vcs-Browser: http://fisheye.freeswitch.org/browse/FreeSWITCH
Vcs-Git: git://git.freeswitch.org/freeswitch.git
Vcs-Browser: http://fisheye.freeswitch.org/browse/freeswitch.git
Package: freeswitch
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, unixodbc, libasound2, libcurl3, openssl, libncurses5, libvorbis0a, libuuid1
Depends: ${shlibs:Depends}, ${misc:Depends}
Recommends: freeswitch-lang-en
Suggests: freeswitch-spidermonkey, freeswitch-lua, freeswitch-perl, freeswitch-sounds-music-8000, monit
Suggests: freeswitch-spidermonkey, freeswitch-lua, freeswitch-perl,
freeswitch-sounds-music-8000, monit, openssl
Description: open source telephony platform
FreeSWITCH is an open source telephony platform designed to facilitate the
creation of voice and chat driven products scaling from a soft-phone up to a
@@ -48,8 +52,8 @@ Description: development libraries and header files for FreeSWITCH
gateway or a media server to host IVR applications using simple scripts or XML
to control the callflow.
.
This package contains the include files used if you wish to compile a package which requires FreeSWITCH's
source file headers.
This package contains the include files used if you wish to compile a package
which require FreeSWITCH's source file headers.
Package: freeswitch-spidermonkey
Architecture: any
@@ -123,6 +127,19 @@ Description: pass through AMR codec support for FreeSWITCH
.
This package contains the mod_amr codec module.
Package: freeswitch-codec-passthru-amrwb
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
Description: pass through AMRWB codec support for FreeSWITCH
FreeSWITCH is an open source telephony platform designed to facilitate the
creation of voice and chat driven products scaling from a soft-phone up to a
soft-switch. It can be used as a simple switching engine, a PBX, a media
gateway or a media server to host IVR applications using simple scripts or XML
to control the callflow.
.
This package contains the mod_amrwb codec module.
Package: freeswitch-codec-passthru-g729
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
@@ -139,7 +156,8 @@ Package: freeswitch-lang-en
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
Recommends: freeswitch-sounds-en-us-callie-8000
Suggests: freeswitch-sounds-en-us-callie-16000, freeswitch-sounds-en-us-callie-32000, freeswitch-sounds-en-us-callie-48000
Suggests: freeswitch-sounds-en-us-callie-16000, freeswitch-sounds-en-us-callie-32000,
freeswitch-sounds-en-us-callie-48000
Description: English language files for FreeSWITCH
FreeSWITCH is an open source telephony platform designed to facilitate the
creation of voice and chat driven products scaling from a soft-phone up to a
@@ -219,7 +237,8 @@ Package: freeswitch-lang-ru
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
Recommends: freeswitch-sounds-ru-ru-elena-8000
Suggests: freeswitch-sounds-ru-ru-elena-16000, freeswitch-sounds-ru-ru-elena-32000, freeswitch-sounds-ru-ru-elena-48000
Suggests: freeswitch-sounds-ru-ru-elena-16000, freeswitch-sounds-ru-ru-elena-32000,
freeswitch-sounds-ru-ru-elena-48000
Description: Russian language files for FreeSWITCH
FreeSWITCH is an open source telephony platform designed to facilitate the
creation of voice and chat driven products scaling from a soft-phone up to a
@@ -229,3 +248,18 @@ Description: Russian language files for FreeSWITCH
.
This package contains the mod_say_ru module and available language
configuration files.
Package: freeswitch-freetdm
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
Description: FreeTDM is a signaling and board API abstraction used mainly by the
FreeSWITCH project to place calls in TDM and analog telephony circuits. The library
was previously named "OpenZAP". Sangoma has worked along with the FreeSWITCH
developers in this library so Sangoma's customers can also use it to do custom
development. The library is still under heavy development but the overall API
does not change often. The intention of the library is to present a consistent
API for different telephony signaling stacks and board I/O APIs. FreeTDM can
either be used as a standalone API or along with FreeSWITCH as an endpoint
(mod_freetdm). If you want to use it as a part of FreeSWITCH remember following
the FreeSWITCH configuration section.
This package contains all the freetdm modules and libs and submodules
+523 -36
View File
@@ -1,51 +1,538 @@
This package was debianized by Michal Bielicki
<michal.bielicki@voiceworks.pl> on Now 25, 2007.
The current Debian maintainer is Nicholas Amorim <nicholas@montrealconsultoria.com.br>
<michal.bielicki@seventhsignal.de> on Nov 25, 2007.
The source was downloaded from http://www.freewitch.org/
Upstream authors:
Anthony Minessale II <anthmct@yahoo.com>
Portions created by the Initial Developer are Copyright (C) 2006-2009
the Initial Developer. All Rights Reserved.
Upstream maintainers:
Current: Michal Bielicki <michal.bielicki@seventhsignal.de>
Past: Nicholas Amorim <nicholas@montrealconsultoria.com.br>
See changelog.Debian.gz for a full list of contributors.
The PRIMARY AUTHORS are (and/or have been):
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.
Anthony Minessale II <anthmct@yahoo.com> - Primary developer of all core components
and many of the included modules. Much of freeswitch is based on his work.
Michael Jerris <mike@jerris.com> - Windows porter and responsible for the
windows\msvc build system.
The PRIMARY AUTHORS are (and/or have been):
Anthony Minessale II <anthm@freeswitch.org> - Primary developer of all core
components and many of the included modules. Much of freeswitch is based
on his work.
Michael Jerris <mike@jerris.com> - Windows porter and responsible for the
windows\msvc build system.
And here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS --
people who have submitted patches, reported bugs, and generally made Freeswitch
that much better:
Brian K. West - For countless hours of work on BSD and Mac support, finding countless bugs, and moral support. Xcode project files.
Joshua Colp - For his help making mod_exosip possible (which we are now getting rid of but oh well),
and for just being a swell guy! (until he backstabbed us, c'est la vie)
Michal "cypromis" Bielicki (michal.bielicki AT voiceworks.pl) - Solaris porting, and autotools enhancements, debian, rpm and solaris packaging.
James Martelletti <james@nerdc0re.com> - All around cool guy (mod_syslog)
Johny Kadarisman <jkr888@gmail.com>
Yossi Neiman of Cartis Solutions, Inc. <freeswitch AT cartissolutions.com> - implementation of mod_cdr (perldd, mysql, csv)
Stefan Knoblich - Various patches and support. Thanks.
Justin Unger - <justinunger at gmail dot com> Lots of help with patches and SIP testing. Thanks!
Paul D. Tinsley - Various patches and support. <pdt at jackhammer.org>
Ken Rice - <krice AT suspicious.org> - xmlcdr, sofia improvements, load testing.
Neal Horman <neal at wanlink dot com> - conference improvements, switch_ivr menu additions and other tweaks.
Johny Kadarisman <jkr888 at gmail.com> - mod_python fixups.
Michael Murdock <mike at mmurdock dot org> - testing, documentation, bug finding and usability enhancements.
Matt Klein <mklein@nmedia.net>
Jonas Gauffin <jonas at gauffin dot org> - Bugfixes and additions in mod_spidermonkey_odbc
Damjan Jovanovic <moctodliamgtavojtodnajmad backwards> - mod_java
Brian K. West - For countless hours of work on BSD and Mac support, finding
countless bugs, and moral support. Xcode project files.
Joshua Colp - For his help making mod_exosip possible (which we are now
getting rid of but oh well), and for just being a swell guy!
Michal "cypromis" Bielicki (michal.bielicki AT voiceworks.pl) - Solaris
porting, and autotools enhancements, debian, rpm and solaris packaging.
James Martelletti <james@nerdc0re.com> - All around cool guy (mod_syslog)
Johny Kadarisman <jkr888@gmail.com>
Yossi Neiman of Cartis Solutions, Inc. <freeswitch AT cartissolutions.com> -
implementation of mod_cdr (perldd, mysql, csv)
Stefan Knoblich - Sofia TLS, various patches and support. Thanks.
Justin Unger - <justinunger at gmail dot com> Lots of help with patches and
SIP testing. Thanks!
Paul D. Tinsley - Various patches and support. <pdt at jackhammer.org>
Ken Rice - <krice AT suspicious.org> - xmlcdr, sofia improvements, load
testing, 1 liners here and there.
Neal Horman <neal at wanlink dot com> - conference improvements, switch_ivr
menu additions and other tweaks.
Johny Kadarisman <jkr888 at gmail.com> - mod_python fixups.
Michael Murdock <mike at mmurdock dot org> - testing, documentation, bug
finding and usability enhancements.
Matt Klein <mklein@nmedia.net>
Jonas Gauffin <jonas at gauffin dot org> - mod_cdr_odbc,
mod_spidermonkey_socket, Bugfixes and additions in mod_spidermonkey_odbc and
mod_spidermonkey, .net event socket library.
Damjan Jovanovic <moctodliamgtavojtodnajmad backwards> - mod_java
Juan Jose Comellas <juanjo@comellas.org> - Patch to switch_utils for arg
parsing.
Dale Thatcher <freeswitch at dalethatcher dot com> - Additions to
mod_conference.
Simon Perreault & Marc Blanchet from Viagenie.ca - IPv6 Support.
A big THANK YOU goes to:
Justin Cassidy - Build related cleanups and automatic build setup.
Bret McDanel - Javascript Documentation, constant feedback and input, many other things I am sure I am forgetting.
Justin Cassidy - Build related cleanups and automatic build setup.
Bret McDanel - Javascript Documentation, constant feedback and input, many
other things I am sure I am forgetting.
MOZILLA PUBLIC LICENSE
Version 1.1
---------------
1. Definitions.
1.0.1. "Commercial Use" means distribution or otherwise making the
Covered Code available to a third party.
1.1. "Contributor" means each entity that creates or contributes to
the creation of Modifications.
1.2. "Contributor Version" means the combination of the Original
Code, prior Modifications used by a Contributor, and the Modifications
made by that particular Contributor.
1.3. "Covered Code" means the Original Code or Modifications or the
combination of the Original Code and Modifications, in each case
including portions thereof.
1.4. "Electronic Distribution Mechanism" means a mechanism generally
accepted in the software development community for the electronic
transfer of data.
1.5. "Executable" means Covered Code in any form other than Source
Code.
1.6. "Initial Developer" means the individual or entity identified
as the Initial Developer in the Source Code notice required by Exhibit
A.
1.7. "Larger Work" means a work which combines Covered Code or
portions thereof with code not governed by the terms of this License.
1.8. "License" means this document.
1.8.1. "Licensable" means having the right to grant, to the maximum
extent possible, whether at the time of the initial grant or
subsequently acquired, any and all of the rights conveyed herein.
1.9. "Modifications" means any addition to or deletion from the
substance or structure of either the Original Code or any previous
Modifications. When Covered Code is released as a series of files, a
Modification is:
A. Any addition to or deletion from the contents of a file
containing Original Code or previous Modifications.
B. Any new file that contains any part of the Original Code or
previous Modifications.
1.10. "Original Code" means Source Code of computer software code
which is described in the Source Code notice required by Exhibit A as
Original Code, and which, at the time of its release under this
License is not already Covered Code governed by this License.
1.10.1. "Patent Claims" means any patent claim(s), now owned or
hereafter acquired, including without limitation, method, process,
and apparatus claims, in any patent Licensable by grantor.
1.11. "Source Code" means the preferred form of the Covered Code for
making modifications to it, including all modules it contains, plus
any associated interface definition files, scripts used to control
compilation and installation of an Executable, or source code
differential comparisons against either the Original Code or another
well known, available Covered Code of the Contributor's choice. The
Source Code can be in a compressed or archival form, provided the
appropriate decompression or de-archiving software is widely available
for no charge.
1.12. "You" (or "Your") means an individual or a legal entity
exercising rights under, and complying with all of the terms of, this
License or a future version of this License issued under Section 6.1.
For legal entities, "You" includes any entity which controls, is
controlled by, or is under common control with You. For purposes of
this definition, "control" means (a) the power, direct or indirect,
to cause the direction or management of such entity, whether by
contract or otherwise, or (b) ownership of more than fifty percent
(50%) of the outstanding shares or beneficial ownership of such
entity.
2. Source Code License.
2.1. The Initial Developer Grant.
The Initial Developer hereby grants You a world-wide, royalty-free,
non-exclusive license, subject to third party intellectual property
claims:
(a) under intellectual property rights (other than patent or
trademark) Licensable by Initial Developer to use, reproduce,
modify, display, perform, sublicense and distribute the Original
Code (or portions thereof) with or without Modifications, and/or
as part of a Larger Work; and
(b) under Patents Claims infringed by the making, using or
selling of Original Code, to make, have made, use, practice,
sell, and offer for sale, and/or otherwise dispose of the
Original Code (or portions thereof).
(c) the licenses granted in this Section 2.1(a) and (b) are
effective on the date Initial Developer first distributes
Original Code under the terms of this License.
(d) Notwithstanding Section 2.1(b) above, no patent license is
granted: 1) for code that You delete from the Original Code; 2)
separate from the Original Code; or 3) for infringements caused
by: i) the modification of the Original Code or ii) the
combination of the Original Code with other software or devices.
2.2. Contributor Grant.
Subject to third party intellectual property claims, each Contributor
hereby grants You a world-wide, royalty-free, non-exclusive license
(a) under intellectual property rights (other than patent or
trademark) Licensable by Contributor, to use, reproduce, modify,
display, perform, sublicense and distribute the Modifications
created by such Contributor (or portions thereof) either on an
unmodified basis, with other Modifications, as Covered Code
and/or as part of a Larger Work; and
(b) under Patent Claims infringed by the making, using, or
selling of Modifications made by that Contributor either alone
and/or in combination with its Contributor Version (or portions
of such combination), to make, use, sell, offer for sale, have
made, and/or otherwise dispose of: 1) Modifications made by that
Contributor (or portions thereof); and 2) the combination of
Modifications made by that Contributor with its Contributor
Version (or portions of such combination).
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
effective on the date Contributor first makes Commercial Use of
the Covered Code.
(d) Notwithstanding Section 2.2(b) above, no patent license is
granted: 1) for any code that Contributor has deleted from the
Contributor Version; 2) separate from the Contributor Version;
3) for infringements caused by: i) third party modifications of
Contributor Version or ii) the combination of Modifications made
by that Contributor with other software (except as part of the
Contributor Version) or other devices; or 4) under Patent Claims
infringed by Covered Code in the absence of Modifications made by
that Contributor.
3. Distribution Obligations.
3.1. Application of License.
The Modifications which You create or to which You contribute are
governed by the terms of this License, including without limitation
Section 2.2. The Source Code version of Covered Code may be
distributed only under the terms of this License or a future version
of this License released under Section 6.1, and You must include a
copy of this License with every copy of the Source Code You
distribute. You may not offer or impose any terms on any Source Code
version that alters or restricts the applicable version of this
License or the recipients' rights hereunder. However, You may include
an additional document offering the additional rights described in
Section 3.5.
3.2. Availability of Source Code.
Any Modification which You create or to which You contribute must be
made available in Source Code form under the terms of this License
either on the same media as an Executable version or via an accepted
Electronic Distribution Mechanism to anyone to whom you made an
Executable version available; and if made available via Electronic
Distribution Mechanism, must remain available for at least twelve (12)
months after the date it initially became available, or at least six
(6) months after a subsequent version of that particular Modification
has been made available to such recipients. You are responsible for
ensuring that the Source Code version remains available even if the
Electronic Distribution Mechanism is maintained by a third party.
3.3. Description of Modifications.
You must cause all Covered Code to which You contribute to contain a
file documenting the changes You made to create that Covered Code and
the date of any change. You must include a prominent statement that
the Modification is derived, directly or indirectly, from Original
Code provided by the Initial Developer and including the name of the
Initial Developer in (a) the Source Code, and (b) in any notice in an
Executable version or related documentation in which You describe the
origin or ownership of the Covered Code.
3.4. Intellectual Property Matters
(a) Third Party Claims.
If Contributor has knowledge that a license under a third party's
intellectual property rights is required to exercise the rights
granted by such Contributor under Sections 2.1 or 2.2,
Contributor must include a text file with the Source Code
distribution titled "LEGAL" which describes the claim and the
party making the claim in sufficient detail that a recipient will
know whom to contact. If Contributor obtains such knowledge after
the Modification is made available as described in Section 3.2,
Contributor shall promptly modify the LEGAL file in all copies
Contributor makes available thereafter and shall take other steps
(such as notifying appropriate mailing lists or newsgroups)
reasonably calculated to inform those who received the Covered
Code that new knowledge has been obtained.
(b) Contributor APIs.
If Contributor's Modifications include an application programming
interface and Contributor has knowledge of patent licenses which
are reasonably necessary to implement that API, Contributor must
also include this information in the LEGAL file.
(c) Representations.
Contributor represents that, except as disclosed pursuant to
Section 3.4(a) above, Contributor believes that Contributor's
Modifications are Contributor's original creation(s) and/or
Contributor has sufficient rights to grant the rights conveyed by
this License.
3.5. Required Notices.
You must duplicate the notice in Exhibit A in each file of the Source
Code. If it is not possible to put such notice in a particular Source
Code file due to its structure, then You must include such notice in a
location (such as a relevant directory) where a user would be likely
to look for such a notice. If You created one or more Modification(s)
You may add your name as a Contributor to the notice described in
Exhibit A. You must also duplicate this License in any documentation
for the Source Code where You describe recipients' rights or ownership
rights relating to Covered Code. You may choose to offer, and to
charge a fee for, warranty, support, indemnity or liability
obligations to one or more recipients of Covered Code. However, You
may do so only on Your own behalf, and not on behalf of the Initial
Developer or any Contributor. You must make it absolutely clear than
any such warranty, support, indemnity or liability obligation is
offered by You alone, and You hereby agree to indemnify the Initial
Developer and every Contributor for any liability incurred by the
Initial Developer or such Contributor as a result of warranty,
support, indemnity or liability terms You offer.
3.6. Distribution of Executable Versions.
You may distribute Covered Code in Executable form only if the
requirements of Section 3.1-3.5 have been met for that Covered Code,
and if You include a notice stating that the Source Code version of
the Covered Code is available under the terms of this License,
including a description of how and where You have fulfilled the
obligations of Section 3.2. The notice must be conspicuously included
in any notice in an Executable version, related documentation or
collateral in which You describe recipients' rights relating to the
Covered Code. You may distribute the Executable version of Covered
Code or ownership rights under a license of Your choice, which may
contain terms different from this License, provided that You are in
compliance with the terms of this License and that the license for the
Executable version does not attempt to limit or alter the recipient's
rights in the Source Code version from the rights set forth in this
License. If You distribute the Executable version under a different
license You must make it absolutely clear that any terms which differ
from this License are offered by You alone, not by the Initial
Developer or any Contributor. You hereby agree to indemnify the
Initial Developer and every Contributor for any liability incurred by
the Initial Developer or such Contributor as a result of any such
terms You offer.
3.7. Larger Works.
You may create a Larger Work by combining Covered Code with other code
not governed by the terms of this License and distribute the Larger
Work as a single product. In such a case, You must make sure the
requirements of this License are fulfilled for the Covered Code.
4. Inability to Comply Due to Statute or Regulation.
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Code due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description
must be included in the LEGAL file described in Section 3.4 and must
be included with all distributions of the Source Code. Except to the
extent prohibited by statute or regulation, such description must be
sufficiently detailed for a recipient of ordinary skill to be able to
understand it.
5. Application of this License.
This License applies to code to which the Initial Developer has
attached the notice in Exhibit A and to related Covered Code.
6. Versions of the License.
6.1. New Versions.
Netscape Communications Corporation ("Netscape") may publish revised
and/or new versions of the License from time to time. Each version
will be given a distinguishing version number.
6.2. Effect of New Versions.
Once Covered Code has been published under a particular version of the
License, You may always continue to use it under the terms of that
version. You may also choose to use such Covered Code under the terms
of any subsequent version of the License published by Netscape. No one
other than Netscape has the right to modify the terms applicable to
Covered Code created under this License.
6.3. Derivative Works.
If You create or use a modified version of this License (which you may
only do in order to apply it to code which is not already Covered Code
governed by this License), You must (a) rename Your license so that
the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
"MPL", "NPL" or any confusingly similar phrase do not appear in your
license (except to note that your license differs from this License)
and (b) otherwise make it clear that Your version of the license
contains terms which differ from the Mozilla Public License and
Netscape Public License. (Filling in the name of the Initial
Developer, Original Code or Contributor in the notice described in
Exhibit A shall not of themselves be deemed to be modifications of
this License.)
7. DISCLAIMER OF WARRANTY.
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
8. TERMINATION.
8.1. This License and the rights granted hereunder will terminate
automatically if You fail to comply with terms herein and fail to cure
such breach within 30 days of becoming aware of the breach. All
sublicenses to the Covered Code which are properly granted shall
survive any termination of this License. Provisions which, by their
nature, must remain in effect beyond the termination of this License
shall survive.
8.2. If You initiate litigation by asserting a patent infringement
claim (excluding declatory judgment actions) against Initial Developer
or a Contributor (the Initial Developer or Contributor against whom
You file such action is referred to as "Participant") alleging that:
(a) such Participant's Contributor Version directly or indirectly
infringes any patent, then any and all rights granted by such
Participant to You under Sections 2.1 and/or 2.2 of this License
shall, upon 60 days notice from Participant terminate prospectively,
unless if within 60 days after receipt of notice You either: (i)
agree in writing to pay Participant a mutually agreeable reasonable
royalty for Your past and future use of Modifications made by such
Participant, or (ii) withdraw Your litigation claim with respect to
the Contributor Version against such Participant. If within 60 days
of notice, a reasonable royalty and payment arrangement are not
mutually agreed upon in writing by the parties or the litigation claim
is not withdrawn, the rights granted by Participant to You under
Sections 2.1 and/or 2.2 automatically terminate at the expiration of
the 60 day notice period specified above.
(b) any software, hardware, or device, other than such Participant's
Contributor Version, directly or indirectly infringes any patent, then
any rights granted to You by such Participant under Sections 2.1(b)
and 2.2(b) are revoked effective as of the date You first made, used,
sold, distributed, or had made, Modifications made by that
Participant.
8.3. If You assert a patent infringement claim against Participant
alleging that such Participant's Contributor Version directly or
indirectly infringes any patent where such claim is resolved (such as
by license or settlement) prior to the initiation of patent
infringement litigation, then the reasonable value of the licenses
granted by such Participant under Sections 2.1 or 2.2 shall be taken
into account in determining the amount or value of any payment or
license.
8.4. In the event of termination under Sections 8.1 or 8.2 above,
all end user license agreements (excluding distributors and resellers)
which have been validly granted by You or any distributor hereunder
prior to termination shall survive termination.
9. LIMITATION OF LIABILITY.
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
10. U.S. GOVERNMENT END USERS.
The Covered Code is a "commercial item," as that term is defined in
48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
software" and "commercial computer software documentation," as such
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
all U.S. Government End Users acquire Covered Code with only those
rights set forth herein.
11. MISCELLANEOUS.
This License represents the complete agreement concerning subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. This License shall be governed by
California law provisions (except to the extent applicable law, if
any, provides otherwise), excluding its conflict-of-law provisions.
With respect to disputes in which at least one party is a citizen of,
or an entity chartered or registered to do business in the United
States of America, any litigation relating to this License shall be
subject to the jurisdiction of the Federal Courts of the Northern
District of California, with venue lying in Santa Clara County,
California, with the losing party responsible for costs, including
without limitation, court costs and reasonable attorneys' fees and
expenses. The application of the United Nations Convention on
Contracts for the International Sale of Goods is expressly excluded.
Any law or regulation which provides that the language of a contract
shall be construed against the drafter shall not apply to this
License.
12. RESPONSIBILITY FOR CLAIMS.
As between Initial Developer and the Contributors, each party is
responsible for claims and damages arising, directly or indirectly,
out of its utilization of rights under this License and You agree to
work with Initial Developer and Contributors to distribute such
responsibility on an equitable basis. Nothing herein is intended or
shall be deemed to constitute any admission of liability.
13. MULTIPLE-LICENSED CODE.
Initial Developer may designate portions of the Covered Code as
"Multiple-Licensed". "Multiple-Licensed" means that the Initial
Developer permits you to utilize portions of the Covered Code under
Your choice of the NPL or the alternative licenses, if any, specified
by the Initial Developer in the file described in Exhibit A.
EXHIBIT A -Mozilla Public License.
``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 ______________________________________.
The Initial Developer of the Original Code is ________________________.
Portions created by ______________________ are Copyright (C) ______
_______________________. All Rights Reserved.
Contributor(s): ______________________________________.
Alternatively, the contents of this file may be used under the terms
of the _____ license (the "[___] License"), in which case the
provisions of [______] License are applicable instead of those
above. If you wish to allow use of your version of this file only
under the terms of the [____] License and not to allow others to use
your version of this file under the MPL, indicate your decision by
deleting the provisions above and replace them with the notice and
other provisions required by the [___] License. If you do not delete
the provisions above, a recipient may use your version of this file
under either the MPL or the [___] License."
[NOTE: The text of this Exhibit A may differ slightly from the text of
the notices in the Source Code files of the Original Code. You should
use the text of this Exhibit A rather than the text found in the
Original Code Source Code for Your Modifications.]
You are free to distribute this software under the terms of
the MPL Mozilla Public License. On Debian systems, the complete
text of the GNU General Public License can be found in the file
'/usr/share/common-licenses/MPL'.
+1
View File
@@ -0,0 +1 @@
opt/freeswitch/mod/mod_amrwb.so*
+6
View File
@@ -0,0 +1,6 @@
opt/freeswitch/conf/tones.conf
opt/freeswitch/conf/autoload_configs/freetdm.conf.xml
opt/freeswitch/conf/pika.conf
opt/freeswitch/conf/freetdm.conf
opt/freeswitch/conf/wanpipe.conf
opt/freeswitch/conf/zt.conf
+10
View File
@@ -0,0 +1,10 @@
opt/freeswitch/conf/tones.conf
opt/freeswitch/conf/autoload_configs/freetdm.conf.xml
opt/freeswitch/conf/pika.conf
opt/freeswitch/conf/freetdm.conf
opt/freeswitch/conf/wanpipe.conf
opt/freeswitch/conf/zt.conf
opt/freeswitch/lib/libfreetdm.so*
opt/freeswitch/mod/mod_freetdm.so*
opt/freeswitch/mod/ftm*.so*
+1
View File
@@ -0,0 +1 @@
opt/freeswitch/conf/autoload_configs/python.conf.xml
+3
View File
@@ -0,0 +1,3 @@
opt/freeswitch/conf/autoload_configs/python.conf.xml
opt/freeswitch/mod/mod_python.so*
usr/lib/python2.*/*-packages/freeswitch.py*
-4
View File
@@ -83,10 +83,8 @@
/opt/freeswitch/conf/ivr_menus/demo_ivr.xml
/opt/freeswitch/conf/jingle_profiles/client.xml
/opt/freeswitch/conf/jingle_profiles/server.xml
/opt/freeswitch/conf/m3ua.conf
/opt/freeswitch/conf/mime.types
/opt/freeswitch/conf/notify-voicemail.tpl
/opt/freeswitch/conf/pika.conf
/opt/freeswitch/conf/sip_profiles/external/example.xml
/opt/freeswitch/conf/sip_profiles/external.xml
/opt/freeswitch/conf/sip_profiles/internal/example.xml
@@ -94,8 +92,6 @@
/opt/freeswitch/conf/sip_profiles/internal.xml
/opt/freeswitch/conf/skinny_profiles/internal.xml
/opt/freeswitch/conf/tetris.ttml
/opt/freeswitch/conf/tones.conf
/opt/freeswitch/conf/vars.xml
/opt/freeswitch/conf/voicemail.tpl
/opt/freeswitch/conf/web-vm.tpl
/opt/freeswitch/conf/zt.conf
+21 -2
View File
@@ -5,7 +5,7 @@
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: The FreeSwitch Voice Switching System
# Short-Description: The FreeSWITCH Voice Switching System
# Description: An advanced platform for voice services
### END INIT INFO
@@ -16,7 +16,7 @@
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/opt/freeswitch/bin
DESC="FreeSwitch Voice Switching System"
DESC="FreeSWITCH Voice Switching System"
NAME=freeswitch
DAEMON=/opt/freeswitch/bin/$NAME
USER=freeswitch
@@ -48,6 +48,24 @@ fi
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that sets ulimit values for the daemon
#
do_setlimits() {
ulimit -c unlimited
ulimit -d unlimited
ulimit -f unlimited
ulimit -i unlimited
ulimit -n 999999
ulimit -q unlimited
ulimit -u unlimited
ulimit -v unlimited
ulimit -x unlimited
ulimit -s 240
ulimit -l unlimited
return 0
}
#
# Function that starts the daemon/service
#
@@ -59,6 +77,7 @@ do_start()
# 2 if daemon could not be started
start-stop-daemon -d $WORKDIR -c $USER --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|| return 1
do_setlimits
start-stop-daemon -d $WORKDIR -c $USER --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
$FREESWITCH_PARAMS \
|| return 2
+18 -20
View File
@@ -1,9 +1,9 @@
opt/freeswitch/bin/freeswitch
opt/freeswitch/bin/fs_cli
opt/freeswitch/bin/fs_encode
opt/freeswitch/bin/fs_ivrd
opt/freeswitch/bin/fsxs
opt/freeswitch/bin/gentls_cert
opt/freeswitch/bin/scripts/*
opt/freeswitch/conf/autoload_configs/acl.conf.xml
opt/freeswitch/conf/autoload_configs/alsa.conf.xml
opt/freeswitch/conf/autoload_configs/callcenter.conf.xml
@@ -31,7 +31,6 @@ opt/freeswitch/conf/autoload_configs/memcache.conf.xml
opt/freeswitch/conf/autoload_configs/modules.conf.xml
opt/freeswitch/conf/autoload_configs/nibblebill.conf.xml
opt/freeswitch/conf/autoload_configs/opal.conf.xml
opt/freeswitch/conf/autoload_configs/openzap.conf.xml
opt/freeswitch/conf/autoload_configs/pocketsphinx.conf.xml
opt/freeswitch/conf/autoload_configs/portaudio.conf.xml
opt/freeswitch/conf/autoload_configs/post_load_modules.conf.xml
@@ -91,11 +90,8 @@ opt/freeswitch/conf/fur_elise.ttml
opt/freeswitch/conf/ivr_menus/demo_ivr.xml
opt/freeswitch/conf/jingle_profiles/client.xml
opt/freeswitch/conf/jingle_profiles/server.xml
opt/freeswitch/conf/m3ua.conf
opt/freeswitch/conf/mime.types
opt/freeswitch/conf/notify-voicemail.tpl
opt/freeswitch/conf/openzap.conf
opt/freeswitch/conf/pika.conf
opt/freeswitch/conf/sip_profiles/external/example.xml
opt/freeswitch/conf/sip_profiles/external.xml
opt/freeswitch/conf/sip_profiles/internal/example.xml
@@ -103,69 +99,71 @@ opt/freeswitch/conf/sip_profiles/internal-ipv6.xml
opt/freeswitch/conf/sip_profiles/internal.xml
opt/freeswitch/conf/skinny_profiles/internal.xml
opt/freeswitch/conf/tetris.ttml
opt/freeswitch/conf/tones.conf
opt/freeswitch/conf/vars.xml
opt/freeswitch/conf/voicemail.tpl
opt/freeswitch/conf/wanpipe.conf
opt/freeswitch/conf/web-vm.tpl
opt/freeswitch/conf/zt.conf
opt/freeswitch/htdocs/*
opt/freeswitch/lib/libfreeswitch*.so*
opt/freeswitch/lib/libopenzap*.so*
opt/freeswitch/mod/mod_avmd.so*
opt/freeswitch/mod/mod_bv.so*
opt/freeswitch/mod/mod_callcenter.so*
opt/freeswitch/mod/mod_cdr_csv.so*
opt/freeswitch/mod/mod_celt.so*
opt/freeswitch/mod/mod_cidlookup.so*
opt/freeswitch/mod/mod_cluechoo.so*
opt/freeswitch/mod/mod_console.so*
opt/freeswitch/mod/mod_codec2.so*
opt/freeswitch/mod/mod_commands.so*
opt/freeswitch/mod/mod_conference.so*
opt/freeswitch/mod/mod_console.so*
opt/freeswitch/mod/mod_curl.so*
opt/freeswitch/mod/mod_db.so*
opt/freeswitch/mod/mod_dialplan*.so*
opt/freeswitch/mod/mod_dingaling.so*
opt/freeswitch/mod/mod_directory.so*
opt/freeswitch/mod/mod_distributor.so*
opt/freeswitch/mod/mod_dptools.so*
opt/freeswitch/mod/mod_easyroute.so*
opt/freeswitch/mod/mod_enum.so*
opt/freeswitch/mod/mod_esf.so*
opt/freeswitch/mod/mod_event_*.so*
opt/freeswitch/mod/mod_expr.so*
opt/freeswitch/mod/mod_spandsp.so*
opt/freeswitch/mod/mod_fifo.so*
opt/freeswitch/mod/mod_file_string.so*
opt/freeswitch/mod/mod_flite.so*
opt/freeswitch/mod/mod_fsv.so*
opt/freeswitch/mod/mod_hash.so*
opt/freeswitch/mod/mod_h26x.so*
opt/freeswitch/mod/mod_ilbc.so*
opt/freeswitch/mod/mod_lcr.so*
opt/freeswitch/mod/mod_db.so*
opt/freeswitch/mod/mod_hash.so*
opt/freeswitch/mod/mod_limit.so*
opt/freeswitch/mod/mod_local_stream.so*
opt/freeswitch/mod/mod_logfile.so*
opt/freeswitch/mod/mod_loopback.so*
opt/freeswitch/mod/mod_memcache.so*
opt/freeswitch/mod/mod_mp4v.so*
opt/freeswitch/mod/mod_native_file.so*
opt/freeswitch/mod/mod_nibblebill.so*
opt/freeswitch/mod/mod_openzap.so
opt/freeswitch/mod/mod_portaudio.so*
opt/freeswitch/mod/mod_portaudio_stream.so*
opt/freeswitch/mod/mod_redis.so*
opt/freeswitch/mod/mod_rss.so*
opt/freeswitch/mod/mod_shout.so*
opt/freeswitch/mod/mod_silk.so*
opt/freeswitch/mod/mod_siren.so*
opt/freeswitch/mod/mod_skinny.so*
opt/freeswitch/mod/mod_skypopen.so*
opt/freeswitch/mod/mod_sndfile.so*
opt/freeswitch/mod/mod_snom.so*
opt/freeswitch/mod/mod_sofia.so*
opt/freeswitch/mod/mod_spandsp.so*
opt/freeswitch/mod/mod_speex.so*
opt/freeswitch/mod/mod_spy.so*
opt/freeswitch/mod/mod_syslog.so*
opt/freeswitch/mod/mod_theora.so*
opt/freeswitch/mod/mod_tone_stream.so*
opt/freeswitch/mod/mod_tts_commandline.so*
opt/freeswitch/mod/mod_valet_parking.so*
opt/freeswitch/mod/mod_vmd.so*
opt/freeswitch/mod/mod_voicemail.so*
opt/freeswitch/mod/mod_xml_*.so*
opt/freeswitch/mod/ozmod_analog_em.so*
opt/freeswitch/mod/ozmod_analog.so*
opt/freeswitch/mod/ozmod_isdn.so*
opt/freeswitch/mod/ozmod_skel.so*
opt/freeswitch/mod/ozmod_ss7_boost.so*
opt/freeswitch/mod/ozmod_wanpipe.so*
opt/freeswitch/mod/ozmod_zt.so*
+8 -1
View File
@@ -24,9 +24,16 @@ case "$1" in
if ! getent passwd freeswitch >/dev/null; then
adduser --disabled-password --quiet --system \
--home /opt/freeswitch \
--gecos "FreeSwitch Voice Platform" --ingroup daemon \
--gecos "FreeSWITCH Voice Platform" --ingroup daemon \
freeswitch
adduser freeswitch audio
else
if [ "$(getent passwd freeswitch | cut -d : -f 6)" != "/opt/freeswitch" ]; then
echo "Error: pre-existing freeswitch user with non-standard home directory." >&2
exit 1
fi
usermod -d /opt/freeswitch -c "FreeSWITCH daemon,,," \
-g daemon -G audio freeswitch
fi
mkdir -p /opt/freeswitch
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/sh
# postrm script for openfire
# postrm script for freeswitch
#
# see: dh_installdeb(1)
+146 -44
View File
@@ -1,40 +1,40 @@
#!/usr/bin/make -f
# Sample debian/rules that uses debhelper.
# This file is public domain software, originally written by Joey Hess.
# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1
export DH_OPTIONS
export DEB_DH_INSTALL_SOURCEDIR=debian/tmp
export PASSTHRU_CODEC_MODULES=codecs/mod_g729 codecs/mod_g723_1 codecs/mod_amr
export PASSTHRU_CODEC_MODULES=codecs/mod_g729 codecs/mod_g723_1 codecs/mod_amr codecs/mod_amrwb
# Modules listed by those built by default, then those that are added in this package
export APPLICATIONS_MODULES=applications/mod_cluechoo applications/mod_commands applications/mod_conference applications/mod_dptools \
applications/mod_enum applications/mod_esf applications/mod_expr applications/mod_fifo applications/mod_fsv \
applications/mod_hash applications/mod_db applications/mod_valet_parking applications/mod_voicemail applications/mod_rss \
applications/mod_spandsp applications/mod_cidlookup applications/mod_curl applications/mod_easyroute \
applications/mod_lcr applications/mod_nibblebill applications/mod_snom \
applications/mod_spy applications/mod_vmd applications/mod_directory applications/mod_callcenter
export ASR_TTS_MODULES=asr_tts/mod_tts_commandline
export CODECS_MODULES=codecs/mod_ilbc codecs/mod_h26x codecs/mod_speex codecs/mod_siren codecs/mod_celt
export DIALPLANS_MODULES=dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml
export DIRECTORIES_MODULES=
export DOTNET_MODULES=
export ENDPOINTS_MODULES=endpoints/mod_dingaling endpoints/mod_portaudio endpoints/mod_sofia \
endpoints/mod_loopback ../../libs/openzap/mod_openzap endpoints/mod_skypopen \
endpoints/mod_skinny
export APPLICATION_MODULES_AE= applications/mod_avmd applications/mod_callcenter applications/mod_cidlookup applications/mod_cluechoo \
applications/mod_commands applications/mod_conference applications/mod_curl applications/mod_db applications/mod_directory \
applications/mod_distributor applications/mod_dptools applications/mod_easyroute applications/mod_enum \
applications/mod_esf applications/mod_expr
export APPLICATION_MODULES_FM= applications/mod_fifo applications/mod_fsv applications/mod_hash applications/mod_lcr applications/mod_limit \
applications/mod_memcache
export APPLICATION_MODULES_NY= applications/mod_nibblebill applications/mod_redis applications/mod_rss applications/mod_snom \
applications/mod_spandsp applications/mod_spy applications/mod_stress \
applications/mod_valet_parking applications/mod_vmd applications/mod_voicemail
export APPLICATIONS_MODULES= $(APPLICATION_MODULES_AE) $(APPLICATION_MODULES_FM) $(APPLICATION_MODULES_NY) $(APPLICATION_MODULES_VZ)
export ASR_TTS_MODULES= asr_tts/mod_pocketsphinx asr_tts/mod_flite asr_tts/mod_tts_commandline
export CODECS_MODULES= codecs/mod_bv codecs/mod_h26x codecs/mod_speex codecs/mod_celt codecs/mod_codec2 codecs/mod_ilbc codecs/mod_mp4v \
codecs/mod_silk codecs/mod_siren codecs/mod_theora
export DIALPLANS_MODULES= dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml
export ENDPOINTS_MODULES= endpoints/mod_dingaling endpoints/mod_portaudio endpoints/mod_sofia endpoints/mod_loopback \
../../libs/freetdm/mod_freetdm endpoints/mod_skypopen endpoints/mod_skinny
export EVENT_HANDLERS_MODULES=event_handlers/mod_event_multicast event_handlers/mod_event_socket event_handlers/mod_cdr_csv
export FORMATS_MODULES=formats/mod_local_stream formats/mod_native_file formats/mod_sndfile formats/mod_tone_stream formats/mod_shout
export FORMATS_MODULES= formats/mod_file_string formats/mod_local_stream formats/mod_native_file formats/mod_portaudio_stream \
formats/mod_shout formats/mod_sndfile formats/mod_tone_stream
export LANGUAGES_MODULES=languages/mod_spidermonkey languages/mod_perl languages/mod_lua languages/mod_python
export LOGGERS_MODULES=loggers/mod_console loggers/mod_logfile loggers/mod_syslog
export SAY_MODULES=say/mod_say_en say/mod_say_it say/mod_say_de say/mod_say_fr say/mod_say_es say/mod_say_nl say/mod_say_ru
export TIMERS_MODULES=
export DISABLED_MODULES=applications/mod_memcache applications/mod_soundtouch directories/mod_ldap languages/mod_java \
asr_tts/mod_cepstral asr_tts/mod_lumenvox endpoints/mod_wanpipe \
event_handlers/mod_event_test event_handlers/mod_radius_cdr event_handlers/mod_zeroconf
export XML_INT_MODULES=xml_int/mod_xml_rpc xml_int/mod_xml_curl xml_int/mod_xml_cdr
export MYMODULES=$(PASSTHRU_CODEC_MODULES) $(APPLICATIONS_MODULES) $(ASR_TTS_MODULES) $(CODECS_MODULES) $(DIALPLANS_MODULES) $(DIRECTORIES_MODULES) $(DOTNET_MODULES) $(ENDPOINTS_MODULES) $(EVENT_HANDLERS_MODULES) $(FORMATS_MODULES) $(LANGUAGES_MODULES) $(LOGGERS_MODULES) $(SAY_MODULES) $(TIMERS_MODULES) $(XML_INT_MODULES)
export MYMODULES= $(PASSTHRU_CODEC_MODULES) $(APPLICATIONS_MODULES) $(ASR_TTS_MODULES) $(CODECS_MODULES) $(DIALPLANS_MODULES) $(ENDPOINTS_MODULES) $(EVENT_HANDLERS_MODULES) $(FORMATS_MODULES) $(LANGUAGES_MODULES) $(LOGGERS_MODULES) $(SAY_MODULES) $(XML_INT_MODULES)
export MODULES=$(MYMODULES)
ifndef AUTOCONF
AUTOCONFS := $(wildcard /usr/bin/autoconf*)
AUTOCONF = $(shell which autoconf)
@@ -57,6 +57,116 @@ ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
FEATURES += --disable-optimization
endif
.pc/applied-patches:
@echo
@echo \ \ Sorry, currently this package cannot be built directly from upstream
@echo \ \ source git/tarball: patches are needed for policy compliance, and the
@echo \ \ "new 3.0 (quilt) source format requires patches to be already applied."
@echo
@echo \ \ Please first convert this tree by running:
@echo -e \\t./debian/rules upstream-convert
@echo
@echo \ \ Note that this will insert an entry in debian/changelog, rename the
@echo \ \ current directory to the version number there, create a .orig.tar.bz2
@echo \ \ archive and apply all the patches in debian/patches/series.
@echo
@echo \ \ Using git-buildpackage is not recommended for now.
@echo
@exit 1
upstream-convert:
@dh_testdir
@test -s .pc/applied-patches && \
echo "Aborted: patches are already applied." && \
exit 1 || exit 0
# update (or not) version number in debian/changelog
@set -e ; \
echo Checking version number ; \
v1="$$(dpkg-parsechangelog | sed -e '/^Version: / ! d' -e 's/^Version: //')" ; \
v2="$${v1}" ; \
echo " Current version: $${v1}" ; \
if [ "$$(which git)" = "" -o ! -d .git ] ; then \
echo Git not available. Keeping current version number. ; \
exit 0 ; \
fi ; \
if [ "$$(which debchange)" = "" ] ; then \
echo debchange not available. Keeping current version number. ; \
exit 0 ; \
fi ; \
if echo -n "$${v1}" | grep -q '~git\.[a-z0-9]\+\.20[0-9]\{6\}\.[0-9]\+-[^-]\+$$' ; then \
maj1="$$(echo -n "$${v1}" | sed -e 's/^\([^.]\+\)\..*$$/\1/')" ; \
min1="$$(echo -n "$${v1}" | sed -e 's/^[^.]\+\.\([^.]\+\)\..*$$/\1/')" ; \
mic1="$$(echo -n "$${v1}" | sed -e 's/^[^.]\+\.[^.]\+\.\([a-zA-Z0-9]\+\).*$$/\1/')" ; \
b1="$$(echo -n "$${v1}" | sed -e 's/^.*~git\.\([a-z0-9]\+\)\.\(20[0-9]\{6\}\)\.[0-9]\+-[^-]\+$$/\1/')" ; \
d1="$$(echo -n "$${v1}" | sed -e 's/^.*\.\(20[0-9]\{6\}\)\.[0-9]\+-[^-]\+$$/\1/')" ; \
n1="$$(echo -n "$${v1}" | sed -e 's/^.*\.20[0-9]\{6\}\.\([0-9]\+\)-[^-]\+$$/\1/')" ; \
maj2="$$(sed -e '/^AC_SUBST(SWITCH_VERSION_MAJOR/ ! d' -e 's/^.*\[\([^\[]\+\)\][^\]]*$$/\1/' configure.in)" ; \
min2="$$(sed -e '/^AC_SUBST(SWITCH_VERSION_MINOR/ ! d' -e 's/^.*\[\([^\[]\+\)\][^\]]*$$/\1/' configure.in)" ; \
mic2="$$(sed -e '/^AC_SUBST(SWITCH_VERSION_MICRO/ ! d' -e 's/^.*\[\([^\[]\+\)\][^\]]*$$/\1/' configure.in)" ; \
b2="$$(git branch | sed -e '/^[^*]/ d' -e 's/* \(.*\)/\1/')" ; \
d2="$$(TZ=UTC git log --date=local -1 --format='%ai' | sed -e 's/^\(....\).\(..\).\(..\).*$$/\1\2\3/')" ; \
n2="$$(TZ=UTC git log --date=local --format=oneline --since="$${d2::4}-$${d2:4:2}-$${d2:6:2} 00:00" | wc -l)" ; \
if [ "$${b2}" != "$$(echo "$${b2}" | tr -dc a-z0-9)" ] ; then \
echo Invalid branch name "'$${b2}'". Aborted. ; \
exit 1; \
fi ; \
if [ "$${b1}.$${d1}.$${n1}" != "$${b2}.$${d2}.$${n2}" \
-o "$${maj1}.$${min1}.$${mic1}" != "$${maj2}.$${min2}.$${mic2}" ] ; then \
v2="$$(echo -n "$${maj2}.$${min2}.$${mic2}")" ; \
v2="$${v2}$$(echo -n "$${v1}" | sed -e 's/^[^.]\+\.[^.]\+\.[^.]\+\(.*\)~git\..*$$/\1/')" ; \
v2="$${v2}~git.$${b2}.$${d2}.$${n2}-1" ; \
echo " New version: $${v2}" ; \
echo Updating debian/changelog with new version number ; \
debchange -v "$${v2}" "New upstream release" ; \
else \
echo Version number already correct, no change. ; \
fi ; \
else \
echo 'Not a ~git. version number. Keeping current version number.' ; \
fi
# rename (or not) current directory to match packagename-version.number
@set -e ; \
echo Checking directory name ; \
d1="$$(basename "$$(cd . && echo "$$PWD")")" ; \
d2="$$(dpkg-parsechangelog | sed -e '/^Source: / ! d' -e 's/^Source: //')" ; \
d2="$${d2}-$$(dpkg-parsechangelog | sed -e '/^Version: / ! d' -e 's/^Version: \(.*\)-[^-]\+$$/\1/')" ; \
if [ "$${d1}" != "$${d2}" ] ; then \
if [ -e "../$${d2}" ] ; then \
test . -ef "../$${d2}" && exit 0 ; \
echo Aborted: directory "../$${d2}" already exists. ; \
exit 1 ; \
fi ; \
echo Renaming current directory to "$${d2}" ; \
mv ../$${d1} ../$${d2} ; \
fi
# create .orig.tar.bz2
@set -e ; \
n="$$(dpkg-parsechangelog | sed -e '/^Source: / ! d' -e 's/^Source: //')" ; \
d="$${n}-$$(dpkg-parsechangelog | sed -e '/^Version: / ! d' -e 's/^Version: \(.*\)-[^-]\+$$/\1/')" ; \
n="$${n}_$$(dpkg-parsechangelog | sed -e '/^Version: / ! d' -e 's/^Version: \(.*\)-[^-]\+$$/\1/').orig.tar.bz2" ; \
echo "Creating source archive $${n}" ; \
cd .. && tar cjf "$${n}" --exclude='.git*' "$${d}"
# apply patches
@set -e ; \
echo "Applying patches in debian/patches/series" ; \
QUILT_PATCHES=debian/patches ; \
export QUILT_PATCHES ; \
while quilt next ; do \
quilt push -v ; \
quilt refresh ; \
done
# remind user to change dir
@echo Done.
@echo
@if [ "$(CURDIR)" != "$$PWD" ] ; then \
echo \ \ You should now tell your shell to update its current working directory: ; \
echo -e \\t'cd $$(pwd)' ; \
echo \ \ or ; \
echo -e "\\tcd $$PWD" ; \
echo ; \
fi
config.status: configure
dh_testdir
rm -f modules.conf
@@ -65,15 +175,12 @@ config.status: configure
for i in $(MODULES); do echo $$i >> modules.conf; done
./configure --prefix=/opt/freeswitch --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) ${FEATURES}
configure:
if test ! -f Makefile.in ; then \
if test -f ./bootstrap.sh ; then \
AUTOCONF=${AUTOCONF} ./bootstrap.sh ; \
else \
echo "No Makefile.in and no known way to bootstrap." ; \
exit 1; \
fi; \
fi;
configure: bootstrap.sh # .pc/applied-patches
dh_testdir
test -e /usr/share/misc/config.sub && cp -f /usr/share/misc/config.sub build/config/config.sub
test -e /usr/share/misc/config.guess && cp -f /usr/share/misc/config.guess build/config/config.guess
AUTOCONF=${AUTOCONF} ./bootstrap.sh
build: build-stamp
build-stamp: config.status
@@ -83,19 +190,13 @@ build-stamp: config.status
touch $@
clean:
clean: # .pc/applied-patches
dh_testdir
dh_testroot
rm -f build-stamp
-$(MAKE) update-clean
ifneq "$(wildcard /usr/share/misc/config.sub)" ""
cp -f /usr/share/misc/config.sub build/config/config.sub
endif
ifneq "$(wildcard /usr/share/misc/config.guess)" ""
cp -f /usr/share/misc/config.guess build/config/config.guess
endif
rm -f config.status
rm -f configure config.status
rm -f */*/config.status
rm -f */*/*/config.status
dh_clean
@@ -103,8 +204,8 @@ endif
install: build
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs -A --sourcedir=debian/tmp
dh_prep
dh_installdirs -A
VERBOSE=1 $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
@@ -123,11 +224,12 @@ binary-arch: build install
cp debian/monit/freeswitch.monitrc debian/freeswitch/etc/monit/freeswitch.monitrc
dh_install --sourcedir=debian/tmp
dh_link
dh_strip --dbg-package=freeswitch
dh_strip --dbg-package=freeswitch-dbg
dh_compress
dh_fixperms --exclude /opt/freeswitch/conf
dh_makeshlibs
dh_shlibdeps
dh_installdeb
dh_shlibdeps --exclude=/opt/freeswitch
dh_gencontrol
dh_md5sums
dh_builddeb
@@ -1,3 +1,12 @@
freeswitch-sounds-en-us-callie (1.0.head-git.master,20101014.1-1) unstable; urgency=low
* Change upstream package version numbering scheme for unreleased versions:
new format is major.minor.micro~git.branch.date.commits-1
* Change source format to 3.0 (quilt).
* Upgrade debhelper compatibility to version 7.
-- Michal Bielicki <michal.bielicki@seventhsignal.de> Fr, 14 Oct 2010 05:05:02 +0200
freeswitch-sounds-en-us-callie (1.0.12-0ubuntu1) jaunty; urgency=low
* Initial: This is the initial working build of the en-us-callie sounds
@@ -2,8 +2,9 @@ Source: freeswitch-sounds-en-us-callie
Maintainer: Freeswitch Debian Team <debian@freeswitch.org>
Section: net
Priority: extra
Build-Depends: debhelper (>= 5), fakeroot, sox
Standards-Version: 3.7.3
Build-Depends: debhelper (>= 7), sox
Homepage: http://www.freeswitch.org/
Standards-Version: 3.8.4
Package: freeswitch-sounds-en-us-callie-8000
Architecture: all
@@ -47,14 +48,18 @@ Description: English language sounds for the FreeSWITCH(TM) (48000)
Package: freeswitch-sounds-en-us-callie
Architecture: all
Depends: sox, freeswitch-sounds-en-us-callie-48000
Conflicts: freeswitch-sounds-en-us-callie-omega, freeswitch-sounds-en-us-callie-8000, freeswitch-sounds-en-us-callie-16000, freeswitch-sounds-en-us-callie-32000
Conflicts: freeswitch-sounds-en-us-callie-omega,
freeswitch-sounds-en-us-callie-8000, freeswitch-sounds-en-us-callie-16000,
freeswitch-sounds-en-us-callie-32000
Description: English language files for FreeSWITCH(TM)
This package generates the 8k, 16k, and 32k from the installed 48k
sounds. You can select which ones you want.
Package: freeswitch-sounds-en-us-callie-omega
Architecture: all
Depends: freeswitch-sounds-en-us-callie-48000, freeswitch-sounds-en-us-callie-32000, freeswitch-sounds-en-us-callie-16000, freeswitch-sounds-en-us-callie-8000
Depends: freeswitch-sounds-en-us-callie-48000,
freeswitch-sounds-en-us-callie-32000, freeswitch-sounds-en-us-callie-16000,
freeswitch-sounds-en-us-callie-8000
Conflicts: freeswitch-sounds-en-us-callie
Description: English language files for FreeSWITCH(TM)
This package depends on the pregenerated 8khz, 16khz, 32khz, and 48khz sounds
@@ -1,3 +1,12 @@
freeswitch-sounds-music (1.0.head-git.master,20101014.1-1) unstable; urgency=low
* Change upstream package version numbering scheme for unreleased versions:
new format is major.minor.micro~git.branch.date.commits-1
* Change source format to 3.0 (quilt).
* Upgrade debhelper compatibility to version 7.
-- Michal Bielicki <michal.bielicki@seventhsignal.de> Fr, 14 Oct 2010 05:05:02 +0200
freeswitch-sounds-music (1.0.8-0ubuntu3) jaunty; urgency=low
* Fixed: empty binary files for some packages
+10 -5
View File
@@ -1,9 +1,10 @@
Source: freeswitch-sounds-music
Maintainer: Freeswitch Debian Team <debian@freeswitch.org>
Maintainer: Freeswitch development Team <freeswitch-dev@freeswitch.org>
Section: net
Priority: extra
Build-Depends: debhelper (>= 5), fakeroot, sox
Standards-Version: 3.7.3
Build-Depends: debhelper (>= 7), sox
Homepage: http://www.freeswitch.org/
Standards-Version: 3.8.4
Package: freeswitch-sounds-music-8000
Architecture: all
@@ -47,14 +48,18 @@ Description: music for FreeSWITCH(TM) (48000)
Package: freeswitch-sounds-music
Architecture: all
Depends: sox, freeswitch-sounds-music-48000
Conflicts: freeswitch-sounds-music-omega, freeswitch-sounds-music-8000, freeswitch-sounds-music-16000, freeswitch-sounds-music-32000
Conflicts: freeswitch-sounds-music-omega,
freeswitch-sounds-music-8000, freeswitch-sounds-music-16000,
freeswitch-sounds-music-32000
Description: Music for FreeSWITCH(TM)
This package generates the 8k, 16k, and 32k from the installed 48k
sounds. You can select which ones you want.
Package: freeswitch-sounds-music-omega
Architecture: all
Depends: freeswitch-sounds-music-48000, freeswitch-sounds-music-32000, freeswitch-sounds-music-16000, freeswitch-sounds-music-8000
Depends: freeswitch-sounds-music-48000,
freeswitch-sounds-music-32000, freeswitch-sounds-music-16000,
freeswitch-sounds-music-8000
Conflicts: freeswitch-sounds-music
Description: Music for FreeSWITCH(TM)
This package depends on the pregenerated 8khz, 16khz, 32khz, and 48khz sounds
@@ -1,3 +1,12 @@
freeswitch-sounds-ru-ru-elena (1.0.head-git.master,20101014.1-1) unstable; urgency=low
* Change upstream package version numbering scheme for unreleased versions:
new format is major.minor.micro~git.branch.date.commits-1
* Change source format to 3.0 (quilt).
* Upgrade debhelper compatibility to version 7.
-- Michal Bielicki <michal.bielicki@seventhsignal.de> Fr, 14 Oct 2010 05:05:02 +0200
freeswitch-sounds-ru-ru-elena (1.0.12-0ubuntu3) jaunty; urgency=low
* Fixed: Empty binary package bug caused by the second ru folder being
+1
View File
@@ -0,0 +1 @@
3.0 (quilt)
-1
View File
@@ -1 +0,0 @@
shlibs:Depends=libc6 (>= 2.3.6-6), libdb4.4, libgcc1 (>= 1:4.1.1-12), libsasl2-2, libssl0.9.8 (>= 0.9.8c-1), libstdc++6 (>= 4.1.1-12), libuuid1, zlib1g (>= 1:1.2.1)
+9 -6
View File
@@ -384,14 +384,14 @@
<prompt phrase="Good morning." filename="ivr-good_morning.wav"/>
<prompt phrase="Good afternoon." filename="ivr-good_afternoon.wav"/>
<prompt phrase="Good evening." filename="ivr-good_evening.wav"/>
<prompt phrase="Thank you." filename="ivr-Thank you.wav"/>
<prompt phrase="Thank you." filename="ivr-Thank_you.wav"/>
<prompt phrase="For..." filename="ivr-for.wav"/>
<prompt phrase="We are experiencing longer than usual hold times." filename="ivr-longer_than_usual_hold_times.wav"/>
<prompt phrase="You are the..." filename="ivr-you_are_the.wav"/>
<prompt phrase="One moment please." filename="ivr-one_moment_please.wav"/>
<prompt phrase="Your call will be answered in the order it was received." filename="ivr-call_answered_order_received.wav"/>
<prompt phrase="Please enter the conference number, followed by the pound key" filename="conf-enter_conf_number.wav"/>
<prompt phrase="Enter the conference PIN number, followed by the pound key." filename="ivr-enter_conf_pin.wav"/>
<prompt phrase="Enter the conference PIN number, followed by the pound key." filename="conf-enter_conf_pin.wav"/>
<prompt phrase="...has entered the conference." filename="conf-has_joined.wav"/>
<prompt phrase="...has left the conference." filename="conf-has_left.wav"/>
<prompt phrase="You entered..." filename="ivr-you_entered.wav"/>
@@ -403,27 +403,30 @@
<prompt phrase="If this is correct, press 1. If not, press 2." filename="ivr-if_correct_one_if_not_two.wav"/>
<prompt phrase="To repeat this information..." filename="ivr-repeat_this_information.wav"/>
<prompt phrase="No no no!" filename="ivr-no_no_no.wav"/>
<prompt phrase="Do you mean to press that key?" filename="ivr-did_you_mean_to_press_key.wav"/>
<prompt phrase="Did you mean to press that key?" filename="ivr-did_you_mean_to_press_key.wav"/>
<prompt phrase="Seriously. Did you REALLY mean to press that key?" filename="ivr-seriously_mean_to_press_key.wav"/>
<prompt phrase="Oh what-EVER." filename="ivr-oh_whatever.wav"/>
<prompt phrase="That's it! One more mistake and I WILL hang up on your ass." filename="ivr-one_more_mistake.wav"/>
<prompt phrase="Congratulations, you pressed star. This does not mean you ARE a star. It simply means that you can press buttons and probably have fingers." filename="ivr-congratulations_you_pressed_star.wav"/>
<prompt phrase="All of our engineers are busy assisting other sales guys with demonstrating how cool the CudaTel is. Please stay on the line and your call will be answered in the order it was received." filename="ivr-engineers_busy_assisting_other_sales.wav"/>
<prompt phrase="All of our engineers are busy assisting other sales guys with demonstrating how cool the CudaTel is." filename="ivr-engineers_busy_assisting_other_sales.wav"/>
<prompt phrase="The person you are trying to reach is not available and does not have voicemail." filename="vm-not_available_no_voicemail.wav"/>
<prompt phrase="This message will self-destruct in 5, 4, 3, 2, 1..." filename="ivr-message_self_destruct.wav"/>
<prompt phrase="You are already muted." filename="conf-you_are_already_muted.wav"/>
<prompt phrase="You are now bi-directionally muted." filename="conf-you_are_now_bidirectionally_muted.wav"/>
<prompt phrase="All your call are belong to us." filename="ivr-all_your_call_are_belong_to_us.wav"/>
<prompt phrase="I just love the way you press those touch tones!" filename="ivr-love_those_touch_tones.wav"/>
<prompt phrase="Yes we have no bananas." filename="ivr-yes_we_have_no_bananas.wav"/>
<prompt phrase="Yes, we have no bananas." filename="ivr-yes_we_have_no_bananas.wav"/>
<prompt phrase="Dude, you suck!" filename="ivr-dude_you_suck.wav"/>
<prompt phrase="Your call is very important to us, but your sanity is not, so we will be happy to keep you on hold, forever torturing you with our annoying hold music." filename="ivr-on_hold_indefinitely.wav"/>
<prompt phrase="...has left the building." filename="ivr-has_left_the_building.wav"/>
<prompt phrase="This phone is unassigned and may not be used to make external calls." filename="ivr-phone_is_unassigned.wav"/>
<prompt phrase="This phone is not configured properly." filename="ivr-phone_not_configured.wav"/>
<prompt phrase="Congratulations! This phone is configured properly and may now be assigned to a user." filename="ivr-phone_is_configured_properly.wav"/>
<prompt phrase="Please contact the system administrator for assistance." filename="ivr-contact_system_administrator.wav"/>
<prompt phrase="Barracuda Networks" filename="ivr-barracuda_networks.wav"/>
<prompt phrase="CudaTel Communication Server" filename="ivr-cudatel_communication_server.wav"/>
<prompt phrase="Please enter the first few letters of the person's first or last name" filename="dir-enter_person_first_or_last.wav"/>
<prompt phrase="There are no calls waiting in this queue." filename="ivr-no_calls_waiting_in_queue.wav"/>
<prompt phrase="Brian West" filename="misc-Brian_West.wav"/>
<prompt phrase="Anthony Minessale" filename="misc-Anthony_Minessale.wav"/>
<prompt phrase="Michael Jerris" filename="misc-Michael_Jerris.wav"/>
@@ -435,7 +438,7 @@
<prompt phrase="Andrew Thompson" filename="misc-Andrew_Thompson.wav"/>
<prompt phrase="Graham Saathoff" filename="misc-Graham_Saathoff.wav"/>
<prompt phrase="Nicholaus Belluni" filename="misc-Nicholaus_Belluni.wav"/>
<prompt phrase="Sean Heiney" filename="misc-Sean_Heiney.wav">
<prompt phrase="Sean Heiney" filename="misc-Sean_Heiney.wav"/>
</ivr>
<misc>
<prompt phrase="This call has been secured" filename="call_secured.wav"/>
+4 -1
View File
@@ -331,7 +331,7 @@ export QA_RPATHS=$[ 0x0001|0x0002 ]
#
######################################################################################################################
APPLICATION_MODULES_AE="applications/mod_avmd applications/mod_callcenter applications/mod_cidlookup applications/mod_cluechoo \
applications/mod_commands applications/mod_conference applications/mod_db applications/mod_directory \
applications/mod_commands applications/mod_conference applications/mod_curl applications/mod_db applications/mod_directory \
applications/mod_distributor applications/mod_dptools applications/mod_easyroute applications/mod_enum \
applications/mod_esf applications/mod_expr"
APPLICATION_MODULES_FM="applications/mod_fifo applications/mod_fsv applications/mod_hash applications/mod_lcr applications/mod_limit \
@@ -753,6 +753,7 @@ fi
%{prefix}/mod/mod_console.so*
%{prefix}/mod/mod_commands.so*
%{prefix}/mod/mod_conference.so*
%{prefix}/mod/mod_curl.so*
%{prefix}/mod/mod_db.so*
%{prefix}/mod/mod_dialplan_asterisk.so*
%{prefix}/mod/mod_dialplan_directory.so*
@@ -949,6 +950,8 @@ fi
#
######################################################################################################################
%changelog
* Fri Oct 15 2010 - michal.bielicki@seventhsignal.de
- added mod_curl
* Sat Oct 09 2010 - michal.bielicki@seventhsignal.de
- added mod_silk
- added mod_codec2
+1 -1
View File
@@ -1,4 +1,4 @@
LOCAL_CFLAGS=-I../src/include -I/usr/java/jdk1.6.0_14/include -I/usr/java/jdk1.6.0_14/include/linux
LOCAL_CFLAGS=-I../src/include -I/usr/java/jdk1.6.0_14/include -I/usr/java/jdk1.6.0_14/include/linux -I/usr/lib/jvm/java-6-openjdk/include/
GCC_WARNING_JUNK=-w
CLASSES=org/freeswitch/esl/*
+14
View File
@@ -11,6 +11,20 @@ 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
!/sample/boost/Makefile
!/sample/dso/Makefile
+148 -182
View File
@@ -29,29 +29,34 @@
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PREFIX = $(prefix)
SRC = src
ACLOCAL_AMFLAGS = -I build
AUTOMAKE_OPTIONS = foreign
SRC = src
moddir = @modinstdir@
libdir = @libdir@
library_includedir = $(PREFIX)/include
library_includedir = $(prefix)/include
INCS = -I$(FT_SRCDIR)/$(SRC)/include -I$(FT_SRCDIR)/$(SRC)/isdn/include -I$(FT_SRCDIR)/$(SRC)/include/private
INCS += -I$(FT_SRCDIR)/$(SRC)/ftmod/ftmod_sangoma_boost
if SNGSS7
INCS += -I/usr/include/sng_ss7/
endif
if SNGISDN
INCS += -I/usr/include/sng_isdn/
INCS = -I$(FT_SRCDIR)/$(SRC)/include -I$(FT_SRCDIR)/$(SRC)/include/private
INCS += -I$(FT_SRCDIR)/$(SRC)/ftmod/ftmod_sangoma_boost
if HAVE_SNG_SS7
INCS += -I/usr/include/sng_ss7
endif
MY_CFLAGS = $(INCS) $(FTDM_CFLAGS) -DFTDM_CONFIG_DIR=\"@confdir@\" -DFTDM_MOD_DIR=\"$(moddir)\" @COMP_VENDOR_CFLAGS@ @DEFS@
COMPILE = $(CC) $(MY_CFLAGS) $(INCS)
if HAVE_SNG_ISDN
INCS += -I/usr/include/sng_isdn
endif
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) $(MY_CFLAGS) $(LDFLAGS) -o $@
LINK = $(LIBTOOL) --mode=link --tag=CC $(CC) $(FTDM_CFLAGS) $(LDFLAGS) -o $@
if DEBUGDTMF
MY_CFLAGS += -DFTDM_DEBUG_DTMF
if WANT_DEBUGDTMF
FTDM_CFLAGS += -DFTDM_DEBUG_DTMF
endif
@@ -68,265 +73,226 @@ pkgconfig_DATA = freetdm.pc
# libfreetdm
#
libfreetdm_la_SOURCES = \
$(SRC)/hashtable.c \
$(SRC)/hashtable_itr.c \
$(SRC)/ftdm_io.c \
$(SRC)/ftdm_queue.c \
$(SRC)/ftdm_sched.c \
$(SRC)/ftdm_call_utils.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)/hashtable.c \
$(SRC)/hashtable_itr.c \
$(SRC)/ftdm_io.c \
$(SRC)/ftdm_queue.c \
$(SRC)/ftdm_sched.c \
$(SRC)/ftdm_call_utils.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
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_dso.h
$(SRC)/include/freetdm.h \
$(SRC)/include/ftdm_declare.h \
$(SRC)/include/ftdm_threadmutex.h \
$(SRC)/include/ftdm_os.h \
$(SRC)/include/ftdm_dso.h
lib_LTLIBRARIES = libfreetdm.la
libfreetdm_la_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
libfreetdm_la_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
libfreetdm_la_LDFLAGS = -version-info 1:0:0 $(AM_LDFLAGS)
libfreetdm_la_LIBADD = $(LIBS)
MYLIB = libfreetdm.la
core: libfreetdm.la
core-install: install-libLTLIBRARIES
#
# tools & test programs
#
noinst_PROGRAMS = testtones detect_tones detect_dtmf testpri testr2 testanalog testapp testcid #testisdn
if HAVE_SCTP
noinst_PROGRAMS += testboost
endif
noinst_PROGRAMS = testtones detect_tones detect_dtmf testpri testr2 testanalog testapp testcid
noinst_PROGRAMS += testsangomaboost
testapp_SOURCES = $(SRC)/testapp.c
testapp_LDADD = libfreetdm.la
testapp_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
testapp_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
testcid_SOURCES = $(SRC)/testcid.c
testcid_LDADD = libfreetdm.la
testcid_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
testcid_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
testtones_SOURCES = $(SRC)/testtones.c
testtones_LDADD = libfreetdm.la
testtones_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
testtones_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
detect_tones_SOURCES = $(SRC)/detect_tones.c
detect_tones_LDADD = libfreetdm.la
detect_tones_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
detect_tones_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
detect_dtmf_SOURCES = $(SRC)/detect_dtmf.c
detect_dtmf_LDADD = libfreetdm.la
detect_dtmf_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
detect_dtmf_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
#testisdn_SOURCES = $(SRC)/testisdn.c
#testisdn_LDADD = libfreetdm.la
#testisdn_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
#testisdn_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
testpri_SOURCES = $(SRC)/testpri.c
testpri_LDADD = libfreetdm.la
testpri_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
testpri_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
testr2_SOURCES = $(SRC)/testr2.c
testr2_LDADD = libfreetdm.la
testr2_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
testr2_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
if HAVE_SCTP
noinst_PROGRAMS += testboost
testboost_SOURCES = $(SRC)/testboost.c
testboost_LDADD = libfreetdm.la
testboost_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
testboost_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
endif
testsangomaboost_SOURCES = $(SRC)/testsangomaboost.c
testsangomaboost_LDADD = libfreetdm.la
testsangomaboost_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
testsangomaboost_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
testanalog_SOURCES = $(SRC)/testanalog.c
testanalog_LDADD = libfreetdm.la
testanalog_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
testanalog_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
#
# ftmod modules
#
mod_LTLIBRARIES = ftmod_zt.la ftmod_skel.la ftmod_analog.la ftmod_analog_em.la #ftmod_isdn.la
if HAVE_SCTP
mod_LTLIBRARIES += ftmod_sangoma_boost.la
endif
if LIBSANGOMA
mod_LTLIBRARIES += ftmod_wanpipe.la
endif
if LIBPRI
mod_LTLIBRARIES += ftmod_libpri.la
endif
if PRITAP
mod_LTLIBRARIES += ftmod_pritap.la
endif
if SNGSS7
mod_LTLIBRARIES += ftmod_sangoma_ss7.la
endif
if SNGISDN
mod_LTLIBRARIES += ftmod_sangoma_isdn.la
endif
if OPENR2
mod_LTLIBRARIES += ftmod_r2.la
endif
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 = $(AM_CFLAGS) $(MY_CFLAGS)
ftmod_zt_la_LDFLAGS = -module -avoid-version
ftmod_zt_la_LIBADD = $(MYLIB)
ftmod_zt_la_CFLAGS = $(AM_CFLAGS) $(FTDM_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 = $(AM_CFLAGS) $(MY_CFLAGS)
ftmod_skel_la_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
ftmod_skel_la_LDFLAGS = -module -avoid-version
ftmod_skel_la_LIBADD = $(MYLIB)
if LIBSANGOMA
ftmod_wanpipe_la_SOURCES = $(SRC)/ftmod/ftmod_wanpipe/ftmod_wanpipe.c
ftmod_wanpipe_la_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS) -D__LINUX__ -I/usr/include/wanpipe
ftmod_wanpipe_la_LDFLAGS = -module -avoid-version -lsangoma
ftmod_wanpipe_la_LIBADD = $(MYLIB)
endif
#ftmod_isdn_la_SOURCES = \
#$(SRC)/isdn/EuroISDNStateNT.c \
#$(SRC)/isdn/EuroISDNStateTE.c \
#$(SRC)/isdn/mfifo.c \
#$(SRC)/isdn/Q921.c \
#$(SRC)/isdn/Q931api.c \
#$(SRC)/isdn/Q931.c \
#$(SRC)/isdn/Q931ie.c \
#$(SRC)/isdn/Q931mes.c \
#$(SRC)/isdn/Q931StateNT.c \
#$(SRC)/isdn/Q931StateTE.c \
#$(SRC)/isdn/nationalmes.c \
#$(SRC)/isdn/nationalStateNT.c \
#$(SRC)/isdn/nationalStateTE.c \
#$(SRC)/isdn/DMSmes.c \
#$(SRC)/isdn/DMSStateNT.c \
#$(SRC)/isdn/DMSStateTE.c \
#$(SRC)/isdn/5ESSmes.c \
#$(SRC)/isdn/5ESSStateNT.c \
#$(SRC)/isdn/5ESSStateTE.c \
#$(SRC)/isdn/Q932mes.c \
#$(SRC)/ftmod/ftmod_isdn/ftmod_isdn.c
#ftmod_isdn_la_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS) -D_GNU_SOURCE
#ftmod_isdn_la_LDFLAGS = $(PCAP_LIB_FLAGS) -module -avoid-version
#ftmod_isdn_la_LIBADD = $(MYLIB)
ftmod_skel_la_LIBADD = libfreetdm.la
ftmod_analog_la_SOURCES = $(SRC)/ftmod/ftmod_analog/ftmod_analog.c
ftmod_analog_la_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
ftmod_analog_la_LDFLAGS = -module -avoid-version
ftmod_analog_la_LIBADD = $(MYLIB)
ftmod_analog_la_CFLAGS = $(AM_CFLAGS) $(FTDM_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 = $(AM_CFLAGS) $(MY_CFLAGS)
ftmod_analog_em_la_LDFLAGS = -module -avoid-version
ftmod_analog_em_la_LIBADD = $(MYLIB)
ftmod_analog_em_la_CFLAGS = $(AM_CFLAGS) $(FTDM_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
ftmod_wanpipe_la_CFLAGS = $(AM_CFLAGS) $(FTDM_COMPAT_CFLAGS) -D__LINUX__ -I/usr/include/wanpipe
ftmod_wanpipe_la_LDFLAGS = -shared -module -avoid-version -lsangoma
ftmod_wanpipe_la_LIBADD = libfreetdm.la
endif
if HAVE_LIBISDN
mod_LTLIBRARIES += ftmod_isdn.la
ftmod_isdn_la_SOURCES = $(SRC)/ftmod/ftmod_isdn/ftmod_isdn.c
ftmod_isdn_la_CFLAGS = $(AM_CFLAGS) $(FTDM_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_SCTP
mod_LTLIBRARIES += ftmod_sangoma_boost.la
ftmod_sangoma_boost_la_SOURCES = $(SRC)/ftmod/ftmod_sangoma_boost/sangoma_boost_client.c $(SRC)/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c
ftmod_sangoma_boost_la_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
ftmod_sangoma_boost_la_LDFLAGS = -module -avoid-version
ftmod_sangoma_boost_la_LIBADD = $(MYLIB)
ftmod_sangoma_boost_la_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
ftmod_sangoma_boost_la_LDFLAGS = -shared -module -avoid-version
ftmod_sangoma_boost_la_LIBADD = libfreetdm.la
endif
if LIBPRI
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 = $(AM_CFLAGS) $(MY_CFLAGS)
ftmod_libpri_la_LDFLAGS = -module -avoid-version -lpri
ftmod_libpri_la_LIBADD = $(MYLIB)
ftmod_libpri_la_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
ftmod_libpri_la_LDFLAGS = -shared -module -avoid-version -lpri
ftmod_libpri_la_LIBADD = libfreetdm.la
endif
if PRITAP
if HAVE_PRITAP
mod_LTLIBRARIES += ftmod_pritap.la
ftmod_pritap_la_SOURCES = $(SRC)/ftmod/ftmod_pritap/ftmod_pritap.c
ftmod_pritap_la_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
ftmod_pritap_la_LDFLAGS = -module -avoid-version -lpri
ftmod_pritap_la_LIBADD = $(MYLIB)
ftmod_pritap_la_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
ftmod_pritap_la_LDFLAGS = -shared -module -avoid-version -lpri
ftmod_pritap_la_LIBADD = libfreetdm.la
endif
if SNGSS7
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
ftmod_sangoma_ss7_la_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS) -D_GNU_SOURCE
ftmod_sangoma_ss7_la_LDFLAGS = -module -avoid-version -lsng_ss7
ftmod_sangoma_ss7_la_LIBADD = $(MYLIB)
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
ftmod_sangoma_ss7_la_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS) -D_GNU_SOURCE
ftmod_sangoma_ss7_la_LDFLAGS = -shared -module -avoid-version -lsng_ss7
ftmod_sangoma_ss7_la_LIBADD = libfreetdm.la
endif
if SNGISDN
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_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
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_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 = $(AM_CFLAGS) $(MY_CFLAGS) -D_GNU_SOURCE
ftmod_sangoma_isdn_la_LDFLAGS = -module -avoid-version -lsng_isdn
ftmod_sangoma_isdn_la_LIBADD = $(MYLIB)
ftmod_sangoma_isdn_la_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS) -D_GNU_SOURCE
ftmod_sangoma_isdn_la_LDFLAGS = -shared -module -avoid-version -lsng_isdn
ftmod_sangoma_isdn_la_LIBADD = libfreetdm.la
endif
if OPENR2
if HAVE_OPENR2
mod_LTLIBRARIES += ftmod_r2.la
ftmod_r2_la_SOURCES = $(SRC)/ftmod/ftmod_r2/ftmod_r2.c
ftmod_r2_la_CFLAGS = $(AM_CFLAGS) $(MY_CFLAGS)
ftmod_r2_la_LDFLAGS = -module -avoid-version -lopenr2
ftmod_r2_la_LIBADD = $(MYLIB)
ftmod_r2_la_CFLAGS = $(AM_CFLAGS) $(FTDM_CFLAGS)
ftmod_r2_la_LDFLAGS = -shared -module -avoid-version -lopenr2
ftmod_r2_la_LIBADD = libfreetdm.la
endif
dox doxygen:
doxygen $(FT_SRCDIR)/docs/Doxygen.conf
mod_freetdm/mod_freetdm.$(DYNAMIC_LIB_EXTEN): $(MYLIB) mod_freetdm/mod_freetdm.c
cd mod_freetdm && make
mod_freetdm/mod_freetdm.$(DYNAMIC_LIB_EXTEN): libfreetdm.la mod_freetdm/mod_freetdm.c
$(MAKE) -C mod_freetdm
mod_freetdm: mod_freetdm/mod_freetdm.$(DYNAMIC_LIB_EXTEN)
mod_freetdm-install: mod_freetdm
cd mod_freetdm && make install
$(MAKE) -C mod_freetdm install
mod_freetdm-clean:
@if [ -f mod_freetdm/mod_freetdm.$(DYNAMIC_LIB_EXTEN) ] ; then cd mod_freetdm && make clean ; fi
@if [ -f mod_freetdm/mod_freetdm.$(DYNAMIC_LIB_EXTEN) ] ; then \
$(MAKE) -C mod_freetdm clean ; \
fi
install-data-local:
$(mkinstalldirs) $(DESTDIR)$(PREFIX)
$(mkinstalldirs) $(DESTDIR)$(prefix)
$(mkinstalldirs) $(DESTDIR)@confdir@
@[ -f "$(DESTDIR)@confdir@/freetdm.conf" ] || ( cp conf/*.conf $(DESTDIR)@confdir@)
@echo FreeTDM Installed
+15
View File
@@ -0,0 +1,15 @@
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
])
])
+10 -4
View File
@@ -2,6 +2,10 @@ 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
@@ -129,12 +133,14 @@ AC_ARG_WITH(pcap-include,
AC_MSG_RESULT(yes)
PCAP_INC_DIR=$ac_cv_pcap_where_inc
PCAP_LIB_DIR=$ac_cv_pcap_where_lib
PCAP_INC_FLAGS="-I${PCAP_INC_DIR}"
PCAP_LIB_FLAGS="-L${PCAP_LIB_DIR} -lpcap"
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_INC_FLAGS)
AC_SUBST(PCAP_LIB_FLAGS)
AC_SUBST(PCAP_CPPFLAGS)
AC_SUBST(PCAP_LDFLAGS)
AC_SUBST(PCAP_LIBS)
AC_DEFINE([HAVE_LIBPCAP],[1],[libpcap])
else
ac_cv_found_pcap=no
+290 -142
View File
@@ -1,119 +1,120 @@
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT([freetdm],[pre-alpha],[bugs@freeswitch.org])
AC_PREREQ([2.59])
AC_INIT([freetdm], [pre-alpha], [bugs@freeswitch.org])
AC_CONFIG_SRCDIR([src/ftdm_io.c])
AC_CONFIG_AUX_DIR(build)
AM_INIT_AUTOMAKE(libfreetdm,0.1)
AC_CONFIG_AUX_DIR([build])
AC_CONFIG_MACRO_DIR([build])
AM_INIT_AUTOMAKE([libfreetdm], [0.1])
# >=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
PKG_PROG_PKG_CONFIG
AC_PREFIX_DEFAULT(/usr/local/freetdm)
# AC_PREFIX_DEFAULT does not get expanded until too late so we need to do this to use prefix in this script
if test "x$prefix" = "xNONE" ; then
prefix='/usr/local/freetdm'
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)
AC_SUBST([FT_SRCDIR])
AC_SUBST([ft_builddir])
if test "$sysconfdir" = "\${prefix}/etc" ; then
confdir="$prefix/conf"
confdir="$prefix/conf"
else
confdir="$sysconfdir"
confdir="$sysconfdir"
fi
AC_SUBST(confdir)
AC_SUBST([confdir])
#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], [:])
#AM_PROG_CC_C_O
AC_PROG_LIBTOOL
AC_PROG_INSTALL
# 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])
# Check for com;iler type
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
])
])
AC_ARG_ENABLE([enable_64], [AS_HELP_STRING([--enable-64], [Enable 64bit compilation])], [enable_64="$enableval"], [enable_64="no"])
AX_COMPILER_VENDOR
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"
;;
COMP_VENDOR_CFLAGS="-ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -O0"
;;
sun)
COMP_VENDOR_CFLAGS="-xc99=all -mt -xCC -D__FUNCTION__=__func__ -xvpara"
if test "$enable_64" = "yes" ; then
COMP_VENDOR_CFLAGS="-m64 $COMP_VENDOR_CFLAGS"
fi
;;
COMP_VENDOR_CFLAGS="-xc99=all -mt -xCC -D__FUNCTION__=__func__ -xvpara"
if test "$enable_64" != "no" ; then
COMP_VENDOR_CFLAGS="-m64 $COMP_VENDOR_CFLAGS"
fi
;;
*)
COMP_VENDOR_CFLAGS="-std=c99 -Wall -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes"
;;
COMP_VENDOR_COMPAT_CFLAGS="-Wall -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])
#set SOLINK variable based on compiler and host
if test "x${ax_cv_c_compiler_vendor}" = "xsun" ; then
SOLINK="-Bdynamic -dy -G"
elif test "x${ax_cv_c_compiler_vendor}" = "xgnu" ; then
case "$host" in
*darwin*)
SOLINK="-dynamic -bundle -force-flat-namespace"
;;
*-solaris2*)
SOLINK="-shared -Xlinker"
;;
*)
SOLINK="-shared -Xlinker -x"
;;
esac
else
AC_ERROR([Please update configure.in with SOLINK values for your compiler])
# 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])
# set DYNAMIC_LIB_EXTEN
# we should really be using libtool so we don't need to do this
case "$host" in
*cygwin* | *mingw*)
DYNAMIC_LIB_EXTEN="dll"
;;
*)
DYNAMIC_LIB_EXTEN="so"
;;
*cygwin* | *mingw*)
DYNAMIC_LIB_EXTEN="dll"
;;
*)
DYNAMIC_LIB_EXTEN="so"
;;
esac
AC_SUBST(SOLINK)
AC_SUBST(DYNAMIC_LIB_EXTEN)
AC_SUBST([DYNAMIC_LIB_EXTEN])
AC_CHECK_LIB([dl], [dlopen])
AC_CHECK_LIB([pthread], [pthread_create])
AC_CHECK_LIB([m], [cos])
AX_LIB_PCAP
AC_CHECK_HEADERS([netinet/sctp.h netdb.h sys/select.h])
AM_CONDITIONAL([HAVE_SCTP],[test "${ac_cv_header_netinet_sctp_h}" = "yes"])
@@ -121,105 +122,252 @@ AM_CONDITIONAL([HAVE_SCTP],[test "${ac_cv_header_netinet_sctp_h}" = "yes"])
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
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_MSG_CHECKING([whether gethostbyname_r requires five arguments])
ac_cv_func_gethostbyname_r_five_args="no"
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_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])
AC_MSG_RESULT([$ac_cv_func_gethostbyname_r_five_args])
AC_DEFINE([HAVE_GETHOSTBYNAME_R], [1], [threadsafe gethostbyname])
fi
# Enable debugging
AC_ARG_ENABLE(debug,
[AC_HELP_STRING([--enable-debug],[build with debug information])],[enable_debug="$enableval"],[enable_debug="yes"])
##
## Modules and optional features
##
AC_MSG_RESULT([${as_nl}<<>> Modules and optional features])
if test "${enable_debug}" = "yes"; 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
# Where to install the modules
AC_ARG_WITH([modinstdir],
[AS_HELP_STRING([--with-modinstdir=DIR], [Install modules into this location (default: $prefix/mod)])], [modinstdir="$withval"], [modinstdir="${prefix}/mod"])
AC_SUBST(modinstdir)
# libpri?
AC_ARG_WITH([libpri],
[AS_HELP_STRING([--with-libpri], [Install ftmod_libpri])], [enable_libpri="yes"], [enable_libpri="no"])
AC_SUBST(enable_libpri)
# pritap?
##
# pritap (TODO: add checks)
#
HAVE_PRITAP="no"
AC_ARG_WITH([pritap],
[AS_HELP_STRING([--with-pritap], [Install ftmod_pritap])], [enable_pritap="yes"], [enable_pritap="no"])
AC_SUBST(enable_pritap)
[AS_HELP_STRING([--with-pritap], [Install ftmod_pritap])],
[case "${withval}" in
no) enable_pritap="no" ;;
*) enable_pritab="yes" ;;
esac],
[enable_pritap="no"]
)
HAVE_PRITAP="${enable_pritap}"
AM_CONDITIONAL([HAVE_PRITAP],[test "${enable_pritap}" = "yes"])
# debug dtmf?
AC_ARG_WITH([debugdtmf],
[AS_HELP_STRING([--with-debugdtmf], [Debug DTMF])], [enable_debugdtmf="yes"], [enable_debugdtmf="no"])
AC_SUBST(enable_debugdtmf)
[AS_HELP_STRING([--with-debugdtmf], [Debug DTMF])],
[case "${withval}" in
no) enable_debugdtmf="no" ;;
*) enable_debugdtmf="yes" ;;
esac],
[enable_debugdtmf="no"]
)
AM_CONDITIONAL([WANT_DEBUGDTMF], [test "${enable_debugdtmf}" = "yes"])
AC_CHECK_LIB([sangoma], [sangoma_span_chan_toif], [have_libsangoma="yes"])
AM_CONDITIONAL([LIBSANGOMA],[test "${have_libsangoma}" = "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"])
AM_CONDITIONAL([LIBPRI],[test "${enable_libpri}" = "yes"])
##
# Digium libpri (TODO: add checks)
#
HAVE_LIBPRI="no"
AC_ARG_WITH([libpri],
[AS_HELP_STRING([--with-libpri], [Install ftmod_libpri])],
[case "${withval}" in
no) enable_libpri="no" ;;
*) enable_libpri="yes" ;;
esac],
[enable_libpri="no"]
)
if test "${enable_libpri}" != "no"
then
AC_MSG_RESULT([${as_nl}<<>> Digium libpri])
AM_CONDITIONAL([PRITAP],[test "${enable_pritap}" = "yes"])
save_LIBS="${LIBS}"
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();]
)],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])
AC_MSG_ERROR([libpri is not installed or unusable (see config.log for details)])]
)
AM_CONDITIONAL([DEBUGDTMF],[test "${enable_debugdtmf}" = "yes"])
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_CHECK_LIB([sng_ss7], [sng_isup_init], [have_sng_ss7="yes"])
AM_CONDITIONAL([SNGSS7],[test "${have_sng_ss7}" = "yes"])
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])]
)
LIBS="${save_LIBS}"
fi
HAVE_LIBPRI="${enable_libpri}"
AM_CONDITIONAL([HAVE_LIBPRI],[test "${enable_libpri}" = "yes"])
AC_CHECK_LIB([sng_isdn], [sng_isdn_init], [have_sng_isdn="yes"])
AM_CONDITIONAL([SNGISDN],[test "${have_sng_isdn}" = "yes"])
##
# 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"])
AC_CHECK_LIB([openr2], [openr2_context_set_io_type], [have_openr2="yes"])
AM_CONDITIONAL([OPENR2],[test "${have_openr2}" = "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 "${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"
;;
# X86_64 machines need additional flags when compiling against libsng_isdn
CFLAGS="$CFLAGS -DBIT_64 -DALIGN_64BIT"
;;
esac
fi
fi
if test "${have_sng_ss7}" = "yes"; then
##
# Sangoma SS7 stack
#
HAVE_SNG_SS7="no"
AC_MSG_RESULT([${as_nl}<<>> Sangoma SS7 stack])
AC_CHECK_LIB([sng_ss7], [sng_isup_init], [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"
;;
# X86_64 machines need additional flags when compiling against libsng_isdn
CFLAGS="$CFLAGS -DBIT_64 -DALIGN_64BIT"
;;
esac
fi
fi
COMP_VENDOR_CFLAGS="$COMP_VENDOR_CFLAGS"
AC_SUBST(COMP_VENDOR_CFLAGS)
AC_CONFIG_FILES([Makefile
freetdm.pc
mod_freetdm/Makefile])
##
# 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)])
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
fi
AM_CONDITIONAL([HAVE_LIBISDN], [test "${HAVE_LIBISDN}" = "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_isdn......................... ${HAVE_LIBISDN}
ftmod_libpri....................... ${HAVE_LIBPRI}
ftmod_sangoma_isdn................. ${HAVE_SNG_ISDN}
ftmod_sangoma_ss7.................. ${HAVE_SNG_SS7}
ftmod_r2........................... ${HAVE_OPENR2}
ftmod_pritap....................... ${HAVE_PRITAP}
I/O:
ftmod_wanpipe...................... ${HAVE_LIBSANGOMA}
===============================================================================
])
+1 -1
View File
@@ -7,7 +7,7 @@ cp Debug/mod/*.dll $fsdir/Debug/mod/
cp mod_freetdm/Debug/*.pdb $fsdir/Debug/mod/
cp Debug/*.dll $fsdir/Debug/
cp Debug/*.pdb $fsdir/Debug/
cp Debug/testsangomaboost.exe $fsdir/Debug/
#cp Debug/testsangomaboost.exe $fsdir/Debug/
echo "FRIENDLY REMINDER: RECOMPILE ftmod_wanpipe WHENEVER YOU INSTALL NEW DRIVERS"
set +x
-8
View File
@@ -63,8 +63,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_sangoma_isdn", "src\f
{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.vcproj", "{94F04D58-5EB8-4B48-8FE5-75EBF468073B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftmod_r2", "src\ftmod\ftmod_r2\ftmod_r2.2008.vcproj", "{08C3EA27-A51D-47F8-B47D-B189C649CF30}"
EndProject
Global
@@ -162,12 +160,6 @@ Global
{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
{94F04D58-5EB8-4B48-8FE5-75EBF468073B}.Debug|Win32.ActiveCfg = Debug|Win32
{94F04D58-5EB8-4B48-8FE5-75EBF468073B}.Debug|Win32.Build.0 = Debug|Win32
{94F04D58-5EB8-4B48-8FE5-75EBF468073B}.Debug|x64.ActiveCfg = Debug|Win32
{94F04D58-5EB8-4B48-8FE5-75EBF468073B}.Release|Win32.ActiveCfg = Release|Win32
{94F04D58-5EB8-4B48-8FE5-75EBF468073B}.Release|Win32.Build.0 = Release|Win32
{94F04D58-5EB8-4B48-8FE5-75EBF468073B}.Release|x64.ActiveCfg = Release|Win32
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Debug|Win32.ActiveCfg = Debug|Win32
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Debug|Win32.Build.0 = Debug|Win32
{08C3EA27-A51D-47F8-B47D-B189C649CF30}.Debug|x64.ActiveCfg = Debug|Win32
+74 -141
View File
@@ -657,7 +657,7 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch
status = ftdm_channel_wait(tech_pvt->ftdmchan, &wflags, chunk);
if (status == FTDM_FAIL) {
ftdm_log(FTDM_LOG_WARNING, "failed to wait for I/O\n");
ftdm_log(FTDM_LOG_ERROR, "Failed to wait for I/O\n");
goto fail;
}
@@ -2434,7 +2434,7 @@ static void parse_bri_pri_spans(switch_xml_t cfg, switch_xml_t spans)
char *var = (char *) switch_xml_attr_soft(param, "name");
char *val = (char *) switch_xml_attr_soft(param, "value");
if (ftdm_array_len(spanparameters) == paramindex) {
if (ftdm_array_len(spanparameters) - 1 == paramindex) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Too many parameters for ss7 span, ignoring any parameter after %s\n", var);
break;
}
@@ -2594,7 +2594,7 @@ static switch_status_t load_config(void)
char *var = (char *) switch_xml_attr_soft(param, "name");
char *val = (char *) switch_xml_attr_soft(param, "value");
if (sizeof(spanparameters)/sizeof(spanparameters[0]) == paramindex) {
if (ftdm_array_len(spanparameters) - 1 == paramindex) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Too many parameters for ss7 span, ignoring any parameter after %s\n", var);
break;
}
@@ -2923,102 +2923,56 @@ static switch_status_t load_config(void)
if ((spans = switch_xml_child(cfg, "pri_spans"))) {
for (myspan = switch_xml_child(spans, "span"); myspan; myspan = myspan->next) {
char *id = (char *) switch_xml_attr(myspan, "id");
char *name = (char *) switch_xml_attr(myspan, "name");
ftdm_conf_parameter_t spanparameters[10];
ftdm_status_t zstatus = FTDM_FAIL;
const char *context = "default";
const char *dialplan = "XML";
//Q921NetUser_t mode = Q931_TE;
//Q931Dialect_t dialect = Q931_Dialect_National;
char *mode = NULL;
char *dialect = NULL;
uint32_t span_id = 0;
unsigned paramindex = 0;
ftdm_span_t *span = NULL;
const char *tonegroup = NULL;
char *digit_timeout = NULL;
const char *opts = "none";
uint32_t to = 0;
int q921loglevel = -1;
int q931loglevel = -1;
// quick debug
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "ID: '%s', Name:'%s'\n",id,name);
uint32_t span_id = 0;
if (!name) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "span missing required attribute 'name'\n");
continue;
}
memset(spanparameters, 0, sizeof(spanparameters));
for (param = switch_xml_child(myspan, "param"); param; param = param->next) {
char *var = (char *) switch_xml_attr_soft(param, "name");
char *val = (char *) switch_xml_attr_soft(param, "value");
if (!strcasecmp(var, "tonegroup")) {
tonegroup = val;
} else if (!strcasecmp(var, "mode")) {
mode = val;
} else if (!strcasecmp(var, "dialect")) {
dialect = val;
} else if (!strcasecmp(var, "q921loglevel")) {
if ((q921loglevel = switch_log_str2level(val)) == SWITCH_LOG_INVALID) {
q921loglevel = -1;
}
} else if (!strcasecmp(var, "q931loglevel")) {
if ((q931loglevel = switch_log_str2level(val)) == SWITCH_LOG_INVALID) {
q931loglevel = -1;
}
} else if (!strcasecmp(var, "context")) {
if (ftdm_array_len(spanparameters) - 1 == paramindex) {
ftdm_log(FTDM_LOG_ERROR, "Too many parameters for pri span '%s', ignoring everything after '%s'\n", name, var);
break;
}
if (ftdm_strlen_zero(var) || ftdm_strlen_zero(val)) {
ftdm_log(FTDM_LOG_WARNING, "Skipping parameter with empty name or value\n");
continue;
}
if (!strcasecmp(var, "context")) {
context = val;
} else if (!strcasecmp(var, "opts")) {
opts = val;
} else if (!strcasecmp(var, "dialplan")) {
dialplan = val;
} else if (!strcasecmp(var, "digit_timeout") || !strcasecmp(var, "digit-timeout")) {
digit_timeout = val;
}
}
if (!id && !name) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "span missing required param 'id'\n");
continue;
}
if (name) {
zstatus = ftdm_span_find_by_name(name, &span);
} else {
if (switch_is_number(id)) {
span_id = atoi(id);
zstatus = ftdm_span_find(span_id, &span);
}
if (zstatus != FTDM_SUCCESS) {
zstatus = ftdm_span_find_by_name(id, &span);
} else {
spanparameters[paramindex].var = var;
spanparameters[paramindex].val = val;
paramindex++;
}
}
if (digit_timeout) {
to = atoi(digit_timeout);
}
zstatus = ftdm_span_find_by_name(name, &span);
if (zstatus != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_ERROR, "Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
ftdm_log(FTDM_LOG_ERROR, "Error finding FreeTDM span %s\n", name);
continue;
}
if (!span_id) {
span_id = ftdm_span_get_id(span);
}
if (!tonegroup) {
tonegroup = "us";
}
if (ftdm_configure_span(span, "isdn", on_clear_channel_signal,
"mode", mode,
"dialect", dialect,
"digit_timeout", &to,
"opts", opts,
"tonemap", tonegroup,
"q921loglevel", q921loglevel,
"q931loglevel", q931loglevel,
FTDM_TAG_END) != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_ERROR, "Error starting FreeTDM span %d mode: %s dialect: %s error: %s\n", span_id,
mode, dialect, ftdm_span_get_last_error(span));
span_id = ftdm_span_get_id(span);
if (ftdm_configure_span_signaling(span, "isdn", on_clear_channel_signal, spanparameters) != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_ERROR, "Error configuring FreeTDM span %s\n", name);
continue;
}
@@ -3048,11 +3002,18 @@ static switch_status_t load_config(void)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "span missing required attribute 'name'\n");
continue;
}
memset(spanparameters, 0, sizeof(spanparameters));
for (param = switch_xml_child(myspan, "param"); param; param = param->next) {
char *var = (char *) switch_xml_attr_soft(param, "name");
char *val = (char *) switch_xml_attr_soft(param, "value");
if (ftdm_array_len(spanparameters) - 1 == paramindex) {
ftdm_log(FTDM_LOG_ERROR, "Too many parameters for pritap span '%s', ignoring everything after '%s'\n", name, var);
break;
}
if (!strcasecmp(var, "context")) {
context = val;
} else if (!strcasecmp(var, "dialplan")) {
@@ -3088,85 +3049,56 @@ static switch_status_t load_config(void)
if ((spans = switch_xml_child(cfg, "libpri_spans"))) {
for (myspan = switch_xml_child(spans, "span"); myspan; myspan = myspan->next) {
char *id = (char *) switch_xml_attr(myspan, "id");
char *name = (char *) switch_xml_attr(myspan, "name");
ftdm_conf_parameter_t spanparameters[10];
ftdm_status_t zstatus = FTDM_FAIL;
const char *context = "default";
const char *context = "default";
const char *dialplan = "XML";
const char *o_node = "cpe";
const char *o_switch = "dms100";
const char *o_dp = "unknown";
const char *o_l1 = "ulaw";
const char *o_debug = "none";
const char* opts = "none";
uint32_t span_id = 0;
unsigned paramindex = 0;
ftdm_span_t *span = NULL;
uint32_t span_id = 0;
if (!name) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "span missing required attribute 'name'\n");
continue;
}
memset(spanparameters, 0, sizeof(spanparameters));
for (param = switch_xml_child(myspan, "param"); param; param = param->next) {
char *var = (char *) switch_xml_attr_soft(param, "name");
char *val = (char *) switch_xml_attr_soft(param, "value");
if (!strcasecmp(var, "node")) {
o_node = val;
} else if (!strcasecmp(var, "switch")) {
o_switch = val;
} else if (!strcasecmp(var, "dp")) {
o_dp = val;
} else if (!strcasecmp(var, "l1")) {
o_l1 = val;
} else if (!strcasecmp(var, "debug")) {
o_debug = val;
} else if (!strcasecmp(var, "context")) {
if (ftdm_array_len(spanparameters) - 1 == paramindex) {
ftdm_log(FTDM_LOG_ERROR, "Too many parameters for libpri span, ignoring everything after '%s'\n", var);
break;
}
if (ftdm_strlen_zero(var) || ftdm_strlen_zero(val)) {
ftdm_log(FTDM_LOG_WARNING, "Skipping parameter with empty name or value\n");
continue;
}
if (!strcasecmp(var, "context")) {
context = val;
} else if (!strcasecmp(var, "opts")) {
opts = val;
} else if (!strcasecmp(var, "dialplan")) {
dialplan = val;
}
}
if (!id && !name) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "span missing required param 'id'\n");
continue;
}
if (name) {
zstatus = ftdm_span_find_by_name(name, &span);
} else {
if (switch_is_number(id)) {
span_id = atoi(id);
zstatus = ftdm_span_find(span_id, &span);
}
if (zstatus != FTDM_SUCCESS) {
zstatus = ftdm_span_find_by_name(id, &span);
} else {
spanparameters[paramindex].var = var;
spanparameters[paramindex].val = val;
paramindex++;
}
}
zstatus = ftdm_span_find_by_name(name, &span);
if (zstatus != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_ERROR, "Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
ftdm_log(FTDM_LOG_ERROR, "Error finding FreeTDM span %s\n", name);
continue;
}
if (!span_id) {
span_id = ftdm_span_get_id(span);
}
if (ftdm_configure_span(span, "libpri", on_clear_channel_signal,
"node", o_node,
"switch", o_switch,
"dp", o_dp,
"l1", o_l1,
"debug", o_debug,
"opts", opts,
FTDM_TAG_END) != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_ERROR, "Error starting FreeTDM span %d node: %s switch: %s dp: %s l1: %s debug: %s error: %s\n",
span_id, switch_str_nil(o_node), switch_str_nil(o_switch), switch_str_nil(o_dp), switch_str_nil(o_l1), switch_str_nil(o_debug),
ftdm_span_get_last_error(span));
span_id = ftdm_span_get_id(span);
if (ftdm_configure_span_signaling(span, "libpri", on_clear_channel_signal, spanparameters) != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_ERROR, "Error configuring FreeTDM span %s\n", name);
continue;
}
@@ -3206,7 +3138,8 @@ static switch_status_t load_config(void)
for (param = switch_xml_child(myspan, "param"); param; param = param->next) {
char *var = (char *) switch_xml_attr_soft(param, "name");
char *val = (char *) switch_xml_attr_soft(param, "value");
if (sizeof(spanparameters)/sizeof(spanparameters[0]) == paramindex) {
if (ftdm_array_len(spanparameters) - 1 == paramindex) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Too many parameters for boost span, ignoring any parameter after %s\n", var);
break;
}
-134
View File
@@ -1,134 +0,0 @@
Index: src/ozmod/ozmod_wanpipe/ozmod_wanpipe.c
===================================================================
--- src/ozmod/ozmod_wanpipe/ozmod_wanpipe.c (revision 745)
+++ src/ozmod/ozmod_wanpipe/ozmod_wanpipe.c (working copy)
@@ -98,19 +98,21 @@
* so we can have one analong handler thread that will deal with all the idle analog channels for events
* the alternative would be for the driver to provide one socket for all of the oob events for all analog channels
*/
-static __inline__ int tdmv_api_wait_socket(sng_fd_t fd, int timeout, int *flags)
+static __inline__ int tdmv_api_wait_socket(zap_channel_t *zchan, int timeout, int *flags)
{
#ifdef LIBSANGOMA_VERSION
int err;
- sangoma_wait_obj_t sangoma_wait_obj;
+ sangoma_wait_obj_t *sangoma_wait_obj = zchan->mod_data;
- sangoma_init_wait_obj(&sangoma_wait_obj, fd, 1, 1, *flags, SANGOMA_WAIT_OBJ);
+ sangoma_init_wait_obj(sangoma_wait_obj, zchan->sockfd, 1, 1, 0, SANGOMA_WAIT_OBJ);
- err=sangoma_socket_waitfor_many(&sangoma_wait_obj,1 , timeout);
+ err = sangoma_socket_waitfor_many(&sangoma_wait_obj, 1, timeout);
+
if (err > 0) {
- *flags=sangoma_wait_obj.flags_out;
+ *flags = sangoma_wait_obj.flags_out;
}
+
return err;
#else
@@ -118,7 +120,7 @@
int res;
memset(&pfds[0], 0, sizeof(pfds[0]));
- pfds[0].fd = fd;
+ pfds[0].fd = zchan->sockfd;
pfds[0].events = *flags;
res = poll(pfds, 1, timeout);
*flags = 0;
@@ -200,6 +202,15 @@
if (sockfd != WP_INVALID_SOCKET && zap_span_add_channel(span, sockfd, type, &chan) == ZAP_SUCCESS) {
wanpipe_tdm_api_t tdm_api;
+#ifdef LIBSANGOMA_VERSION
+ sangoma_wait_obj_t *sangoma_wait_obj;
+
+ sangoma_wait_obj = malloc(sizeof(*sangoma_wait_obj));
+ memset(sangoma_wait_obj, 0, sizeof(*sangoma_wait_obj));
+ sangoma_init_wait_obj(sangoma_wait_obj, sockfd, 1, 1, 0, SANGOMA_WAIT_OBJ);
+ chan->mod_data = sangoma_wait_obj;
+#endif
+
memset(&tdm_api,0,sizeof(tdm_api));
chan->physical_span_id = spanno;
@@ -211,7 +222,7 @@
dtmf = "software";
- /* FIXME: Handle Error Conditino Check for return code */
+ /* FIXME: Handle Error Condition Check for return code */
err= sangoma_tdm_get_hw_coding(chan->sockfd, &tdm_api);
if (tdm_api.wp_tdm_cmd.hw_tdm_coding) {
@@ -606,7 +617,7 @@
inflags |= POLLPRI;
}
- result = tdmv_api_wait_socket(zchan->sockfd, to, &inflags);
+ result = tdmv_api_wait_socket(zchan, to, &inflags);
*flags = ZAP_NO_FLAGS;
@@ -643,26 +654,30 @@
ZIO_SPAN_POLL_EVENT_FUNCTION(wanpipe_poll_event)
{
#ifdef LIBSANGOMA_VERSION
- sangoma_wait_obj_t pfds[ZAP_MAX_CHANNELS_SPAN];
+ sangoma_wait_obj_t *pfds[ZAP_MAX_CHANNELS_SPAN] = { 0 };
#else
struct pollfd pfds[ZAP_MAX_CHANNELS_SPAN];
#endif
uint32_t i, j = 0, k = 0, l = 0;
- int objects=0;
int r;
for(i = 1; i <= span->chan_count; i++) {
zap_channel_t *zchan = span->channels[i];
+
#ifdef LIBSANGOMA_VERSION
- sangoma_init_wait_obj(&pfds[j], zchan->sockfd , 1, 1, POLLPRI, SANGOMA_WAIT_OBJ);
+ if (!zchan->mod_data) {
+ continue;
+ }
+ pfds[j] = zchan->mod_data;
+
#else
memset(&pfds[j], 0, sizeof(pfds[j]));
pfds[j].fd = span->channels[i]->sockfd;
pfds[j].events = POLLPRI;
#endif
- objects++;
+
/* The driver probably should be able to do this wink/flash/ringing by itself this is sort of a hack to make it work! */
if (zap_test_flag(zchan, ZAP_CHANNEL_WINK) || zap_test_flag(zchan, ZAP_CHANNEL_FLASH)) {
@@ -703,7 +718,7 @@
ms = l;
}
#ifdef LIBSANGOMA_VERSION
- r = sangoma_socket_waitfor_many(pfds,objects,ms);
+ r = sangoma_socket_waitfor_many(pfds, j, ms);
#else
r = poll(pfds, j, ms);
#endif
@@ -935,6 +950,15 @@
*/
static ZIO_CHANNEL_DESTROY_FUNCTION(wanpipe_channel_destroy)
{
+ sangoma_wait_obj_t *sangoma_wait_obj;
+
+ if (zchan->mod_data) {
+ sangoma_wait_obj = zchan->mod_data;
+ zchan->mod_data = NULL;
+ sangoma_release_wait_obj(sangoma_wait_obj);
+ free(sangoma_wait_obj);
+ }
+
if (zchan->sockfd > -1) {
close(zchan->sockfd);
zchan->sockfd = WP_INVALID_SOCKET;
+29 -1
View File
@@ -1751,7 +1751,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_open_chan(ftdm_channel_t *ftdmchan)
goto done;
}
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_IN_ALARM)) {
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_IN_ALARM) && !ftdm_test_flag(ftdmchan->span, FTDM_SPAN_PWR_SAVING)) {
snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "%s", "Channel is alarmed\n");
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_WARNING, "Cannot open channel when is alarmed\n");
goto done;
@@ -1915,6 +1915,11 @@ FT_DECLARE(ftdm_trunk_type_t) ftdm_span_get_trunk_type(const ftdm_span_t *span)
return span->trunk_type;
}
FT_DECLARE(const char *) ftdm_span_get_trunk_type_str(const ftdm_span_t *span)
{
return ftdm_trunk_type2str(span->trunk_type);
}
FT_DECLARE(uint32_t) ftdm_span_get_id(const ftdm_span_t *span)
{
return span->span_id;
@@ -2114,6 +2119,15 @@ FT_DECLARE(ftdm_caller_data_t *) ftdm_channel_get_caller_data(ftdm_channel_t *ft
return &ftdmchan->caller_data;
}
FT_DECLARE(int) ftdm_channel_get_state(const ftdm_channel_t *ftdmchan)
{
int state;
ftdm_channel_lock(ftdmchan);
state = ftdmchan->state;
ftdm_channel_unlock(ftdmchan);
return state;
}
FT_DECLARE(const char *) ftdm_channel_get_state_str(const ftdm_channel_t *ftdmchan)
{
const char *state;
@@ -2123,6 +2137,15 @@ FT_DECLARE(const char *) ftdm_channel_get_state_str(const ftdm_channel_t *ftdmch
return state;
}
FT_DECLARE(int) ftdm_channel_get_last_state(const ftdm_channel_t *ftdmchan)
{
int last_state;
ftdm_channel_lock(ftdmchan);
last_state = ftdmchan->last_state;
ftdm_channel_unlock(ftdmchan);
return last_state;
}
FT_DECLARE(const char *) ftdm_channel_get_last_state_str(const ftdm_channel_t *ftdmchan)
{
const char *state;
@@ -3927,6 +3950,11 @@ static ftdm_status_t ftdm_set_channels_alarms(ftdm_span_t *span, int currindex)
ftdm_log(FTDM_LOG_ERROR, "%d:%d: Failed to get alarms\n", span->channels[chan_index]->physical_span_id, span->channels[chan_index]->physical_chan_id);
return FTDM_FAIL;
}
if (span->channels[chan_index]->alarm_flags) {
ftdm_set_flag_locked(span->channels[chan_index], FTDM_CHANNEL_IN_ALARM);
} else {
ftdm_clear_flag_locked(span->channels[chan_index], FTDM_CHANNEL_IN_ALARM);
}
}
return FTDM_SUCCESS;
}
+3 -3
View File
@@ -484,7 +484,7 @@ static FIO_SPAN_NEXT_EVENT_FUNCTION(m3ua_next_event)
static FIO_SPAN_DESTROY_FUNCTION(m3ua_span_destroy)
{
m3ua_span_data_t *span_data = (m3ua_span_data_t *) span->mod_data;
m3ua_span_data_t *span_data = (m3ua_span_data_t *) span->io_data;
if (span_data) {
ftdm_safe_free(span_data);
@@ -494,8 +494,8 @@ static FIO_SPAN_DESTROY_FUNCTION(m3ua_span_destroy)
}
static FIO_CHANNEL_DESTROY_FUNCTION(m3ua_channel_destroy)
{
m3ua_chan_data_t *chan_data = (m3ua_chan_data_t *) ftdmchan->mod_data;
m3ua_span_data_t *span_data = (m3ua_span_data_t *) ftdmchan->span->mod_data;
m3ua_chan_data_t *chan_data = (m3ua_chan_data_t *) ftdmchan->io_data;
m3ua_span_data_t *span_data = (m3ua_span_data_t *) ftdmchan->span->io_data;
if (!chan_data) {
return FTDM_FAIL;
File diff suppressed because it is too large Load Diff
@@ -1,23 +1,23 @@
/*
* Copyright (c) 2007, 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
@@ -33,7 +33,6 @@
#ifndef FTDM_ISDN_H
#define FTDM_ISDN_H
#include "freetdm.h"
#define DEFAULT_DIGIT_TIMEOUT 10000 /* default overlap timeout: 10 seconds */
@@ -42,17 +41,23 @@ typedef enum {
FTDM_ISDN_OPT_NONE = 0,
FTDM_ISDN_OPT_SUGGEST_CHANNEL = (1 << 0),
FTDM_ISDN_OPT_OMIT_DISPLAY_IE = (1 << 1), /*!< Do not send Caller name in outgoing SETUP message (= Display IE) */
FTDM_ISDN_OPT_DISABLE_TONES = (1 << 2), /*!< Disable tone generating thread (NT mode) */
FTDM_ISDN_OPT_DISABLE_TONES = (1 << 2), /*!< Disable tone generating thread (NT mode) */
FTDM_ISDN_OPT_MAX = (2 << 0)
} ftdm_isdn_opts_t;
typedef enum {
FTDM_ISDN_RUNNING = (1 << 0),
FTDM_ISDN_TONES_RUNNING = (1 << 1),
FTDM_ISDN_STOP = (1 << 2)
FTDM_ISDN_RUNNING = (1 << 0),
FTDM_ISDN_TONES_RUNNING = (1 << 1),
FTDM_ISDN_STOP = (1 << 2),
FTDM_ISDN_CAPTURE = (1 << 3),
FTDM_ISDN_CAPTURE_L3ONLY = (1 << 4)
} ftdm_isdn_flag_t;
#ifdef HAVE_PCAP
struct pcap_context;
#endif
struct ftdm_isdn_data {
Q921Data_t q921;
@@ -60,6 +65,7 @@ struct ftdm_isdn_data {
ftdm_channel_t *dchan;
ftdm_channel_t *dchans[2];
struct ftdm_sigmsg sigmsg;
fio_signal_cb_t sig_cb;
uint32_t flags;
int32_t mode;
int32_t digit_timeout;
@@ -67,6 +73,9 @@ struct ftdm_isdn_data {
ftdm_caller_data_t *outbound_crv[32768];
ftdm_channel_t *channels_local_crv[32768];
ftdm_channel_t *channels_remote_crv[32768];
#ifdef HAVE_PCAP
struct pcap_context *pcap;
#endif
};
typedef struct ftdm_isdn_data ftdm_isdn_data_t;
@@ -75,7 +84,7 @@ typedef struct ftdm_isdn_data ftdm_isdn_data_t;
/* b-channel private data */
struct ftdm_isdn_bchan_data
{
L2ULONG digit_timeout;
int32_t digit_timeout;
};
typedef struct ftdm_isdn_bchan_data ftdm_isdn_bchan_data_t;
@@ -91,6 +100,6 @@ typedef struct ftdm_isdn_bchan_data ftdm_isdn_bchan_data_t;
* c-basic-offset:4
* End:
* For VIM:
* vim:set softtabstop=4 shiftwidth=4 tabstop=4:
* vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab:
*/
@@ -1,316 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="ftmod_isdn"
ProjectGUID="{729344A5-D5E9-434D-8EE8-AF8C6C795D15}"
RootNamespace="ftmod_isdn"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="2"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\isdn\include;..\..\include"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FTMOD_ISDN_EXPORTS;_CRT_SECURE_NO_WARNINGS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="4"
WarnAsError="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
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="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="2"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="..\..\isdn\include;..\..\include"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FTMOD_ISDN_EXPORTS;_CRT_SECURE_NO_WARNINGS"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="4"
WarnAsError="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
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;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\isdn\5ESSmes.c"
>
</File>
<File
RelativePath="..\..\isdn\5ESSStateNT.c"
>
</File>
<File
RelativePath="..\..\isdn\5ESSStateTE.c"
>
</File>
<File
RelativePath="..\..\isdn\DMSmes.c"
>
</File>
<File
RelativePath="..\..\isdn\DMSStateNT.c"
>
</File>
<File
RelativePath="..\..\isdn\DMSStateTE.c"
>
</File>
<File
RelativePath="..\..\isdn\EuroISDNStateNT.c"
>
</File>
<File
RelativePath="..\..\isdn\EuroISDNStateTE.c"
>
</File>
<File
RelativePath="..\..\isdn\mfifo.c"
>
</File>
<File
RelativePath="..\..\isdn\nationalmes.c"
>
</File>
<File
RelativePath="..\..\isdn\nationalStateNT.c"
>
</File>
<File
RelativePath="..\..\isdn\nationalStateTE.c"
>
</File>
<File
RelativePath="ftmod_isdn.c"
>
</File>
<File
RelativePath="..\..\isdn\Q921.c"
>
</File>
<File
RelativePath="..\..\isdn\Q931.c"
>
</File>
<File
RelativePath="..\..\isdn\Q931api.c"
>
</File>
<File
RelativePath="..\..\isdn\Q931ie.c"
>
</File>
<File
RelativePath="..\..\isdn\Q931mes.c"
>
</File>
<File
RelativePath="..\..\isdn\Q931StateNT.c"
>
</File>
<File
RelativePath="..\..\isdn\Q931StateTE.c"
>
</File>
<File
RelativePath="..\..\isdn\Q932mes.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\isdn\include\5ESS.h"
>
</File>
<File
RelativePath="..\..\isdn\include\DMS.h"
>
</File>
<File
RelativePath="..\..\isdn\include\mfifo.h"
>
</File>
<File
RelativePath="..\..\isdn\include\national.h"
>
</File>
<File
RelativePath="..\..\isdn\include\Q921.h"
>
</File>
<File
RelativePath="..\..\isdn\include\Q921priv.h"
>
</File>
<File
RelativePath="..\..\isdn\include\Q931.h"
>
</File>
<File
RelativePath="..\..\isdn\include\Q931ie.h"
>
</File>
<File
RelativePath="..\..\isdn\include\Q932.h"
>
</File>
<File
RelativePath="ftdm_isdn.h"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
File diff suppressed because it is too large Load Diff
@@ -42,8 +42,9 @@ typedef enum {
FTMOD_LIBPRI_OPT_SUGGEST_CHANNEL = (1 << 0),
FTMOD_LIBPRI_OPT_OMIT_DISPLAY_IE = (1 << 1),
FTMOD_LIBPRI_OPT_OMIT_REDIRECTING_NUMBER_IE = (1 << 2),
FTMOD_LIBPRI_OPT_MAX = (1 << 3)
FTMOD_LIBPRI_OPT_FACILITY_AOC = (1 << 3),
FTMOD_LIBPRI_OPT_MAX = (1 << 4)
} ftdm_isdn_opts_t;
typedef enum {
@@ -53,35 +54,20 @@ typedef enum {
struct ftdm_libpri_data {
ftdm_channel_t *dchan;
ftdm_channel_t *dchans[2];
struct ftdm_sigmsg sigmsg;
uint32_t flags;
int32_t mode;
ftdm_isdn_opts_t opts;
uint32_t flags;
uint32_t debug_mask;
int node;
int pswitch;
char *dialplan;
unsigned int l1;
unsigned int dp;
int debug;
int mode;
int dialect;
unsigned int layer1;
unsigned int ton;
lpwrap_pri_t spri;
};
typedef struct ftdm_libpri_data ftdm_libpri_data_t;
/* b-channel private data */
struct ftdm_isdn_bchan_data
{
int32_t digit_timeout;
};
typedef struct ftdm_isdn_bchan_data ftdm_isdn_bchan_data_t;
#endif
/* For Emacs:
@@ -1,23 +1,23 @@
/*
* Copyright (c) 2009, 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
@@ -35,8 +35,8 @@
#include "private/ftdm_core.h"
#include "lpwrap_pri.h"
#ifndef HAVE_GETTIMEOFDAY
#ifndef HAVE_GETTIMEOFDAY
#ifdef WIN32
#include <mmsystem.h>
@@ -92,7 +92,7 @@ static struct lpwrap_pri_event_list LPWRAP_PRI_EVENT_LIST[] = {
{8, LPWRAP_PRI_EVENT_ANSWER, "ANSWER"},
{9, LPWRAP_PRI_EVENT_HANGUP_ACK, "HANGUP_ACK"},
{10, LPWRAP_PRI_EVENT_RESTART_ACK, "RESTART_ACK"},
{11, LPWRAP_PRI_EVENT_FACNAME, "FACNAME"},
{11, LPWRAP_PRI_EVENT_FACILITY, "FACILITY"},
{12, LPWRAP_PRI_EVENT_INFO_RECEIVED, "INFO_RECEIVED"},
{13, LPWRAP_PRI_EVENT_PROCEEDING, "PROCEEDING"},
{14, LPWRAP_PRI_EVENT_SETUP_ACK, "SETUP_ACK"},
@@ -106,7 +106,10 @@ static struct lpwrap_pri_event_list LPWRAP_PRI_EVENT_LIST[] = {
#define LINE "--------------------------------------------------------------------------------"
const char *lpwrap_pri_event_str(lpwrap_pri_event_t event_id)
{
{
if (event_id < 0 || event_id >= LPWRAP_PRI_EVENT_MAX)
return "";
return LPWRAP_PRI_EVENT_LIST[event_id].name;
}
@@ -114,8 +117,8 @@ static int __pri_lpwrap_read(struct pri *pri, void *buf, int buflen)
{
struct lpwrap_pri *spri = (struct lpwrap_pri *) pri_get_userdata(pri);
ftdm_size_t len = buflen;
int res;
ftdm_status_t zst;
int res;
if ((zst = ftdm_channel_read(spri->dchan, buf, &len)) != FTDM_SUCCESS) {
if (zst == FTDM_FAIL) {
@@ -124,31 +127,31 @@ static int __pri_lpwrap_read(struct pri *pri, void *buf, int buflen)
} else {
ftdm_log(FTDM_LOG_CRIT, "span %d D-READ TIMEOUT\n", spri->span->span_id);
}
ftdm_clear_flag(spri, LPWRAP_PRI_READY);
return -1;
}
spri->errs = 0;
res = (int)len;
memset(&((unsigned char*)buf)[res],0,2);
res+=2;
memset(&((unsigned char*)buf)[res], 0, 2);
res += 2;
#ifdef IODEBUG
{
char bb[2048] = { 0 };
print_hex_bytes(buf, res - 2, bb, sizeof(bb));
ftdm_log(FTDM_LOG_DEBUG, "READ %d\n", res-2);
ftdm_log(FTDM_LOG_DEBUG, "READ %d\n", res - 2);
}
#endif
return res;
}
static int __pri_lpwrap_write(struct pri *pri, void *buf, int buflen)
{
struct lpwrap_pri *spri = (struct lpwrap_pri *) pri_get_userdata(pri);
ftdm_size_t len = buflen -2;
ftdm_size_t len = buflen - 2;
if (ftdm_channel_write(spri->dchan, buf, buflen, &len) != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_CRIT, "span %d D-WRITE FAIL! [%s]\n", spri->span->span_id, spri->dchan->last_error);
@@ -161,11 +164,10 @@ static int __pri_lpwrap_write(struct pri *pri, void *buf, int buflen)
char bb[2048] = { 0 };
print_hex_bytes(buf, buflen - 2, bb, sizeof(bb));
ftdm_log(FTDM_LOG_DEBUG, "WRITE %d\n", (int)buflen-2);
ftdm_log(FTDM_LOG_DEBUG, "WRITE %d\n", (int)buflen - 2);
}
#endif
return (int) buflen;
return (int)buflen;
}
int lpwrap_init_pri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int debug)
@@ -173,21 +175,63 @@ int lpwrap_init_pri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *
int ret = -1;
memset(spri, 0, sizeof(struct lpwrap_pri));
spri->dchan = dchan;
spri->span = span;
spri->span = span;
if (spri->dchan && (spri->pri = pri_new_cb(spri->dchan->sockfd, node, swtype, __pri_lpwrap_read, __pri_lpwrap_write, spri))){
unsigned char buf[4] = { 0 };
size_t buflen = sizeof(buf), len = 0;
pri_set_debug(spri->pri, debug);
ret = 0;
ftdm_channel_write(spri->dchan, buf, buflen, &len);
} else {
fprintf(stderr, "Unable to create PRI\n");
if (!spri->dchan) {
ftdm_log(FTDM_LOG_ERROR, "No D-Channel available, unable to create PRI\n");
return ret;
}
if ((spri->pri = pri_new_cb(spri->dchan->sockfd, node, swtype, __pri_lpwrap_read, __pri_lpwrap_write, spri))) {
unsigned char buf[4] = { 0 };
size_t buflen = sizeof(buf), len = 0;
pri_set_debug(spri->pri, debug);
#ifdef HAVE_LIBPRI_AOC
pri_aoc_events_enable(spri->pri, 1);
#endif
ftdm_channel_write(spri->dchan, buf, buflen, &len);
ret = 0;
} else {
ftdm_log(FTDM_LOG_ERROR, "Unable to create PRI\n");
}
return ret;
}
int lpwrap_init_bri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int ptp, int debug)
{
int ret = -1;
#ifdef HAVE_LIBPRI_BRI
memset(spri, 0, sizeof(struct lpwrap_pri));
spri->dchan = dchan;
spri->span = span;
if (!spri->dchan) {
ftdm_log(FTDM_LOG_ERROR, "No D-Channel available, unable to create BRI\n");
return ret;
}
if ((spri->pri = pri_new_bri_cb(spri->dchan->sockfd, ptp, node, swtype, __pri_lpwrap_read, __pri_lpwrap_write, spri))) {
unsigned char buf[4] = { 0 };
size_t buflen = sizeof(buf), len = 0;
pri_set_debug(spri->pri, debug);
#ifdef HAVE_LIBPRI_AOC
pri_aoc_events_enable(spri->pri, 1);
#endif
ftdm_channel_write(spri->dchan, buf, buflen, &len);
ret = 0;
} else {
ftdm_log(FTDM_LOG_ERROR, "Unable to create BRI\n");
}
#else
ftdm_log(FTDM_LOG_ERROR, "Installed libpri version (%s) has no BRI support\n",
pri_get_version());
#endif
return ret;
}
@@ -195,11 +239,11 @@ int lpwrap_init_pri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *
int lpwrap_one_loop(struct lpwrap_pri *spri)
{
fd_set rfds, efds;
struct timeval now = {0,0}, *next;
pri_event *event;
struct timeval now = {0,0}, *next = NULL;
pri_event *event = NULL;
event_handler handler;
int sel;
int sel;
if (spri->on_loop) {
if ((sel = spri->on_loop(spri)) < 0) {
return sel;
@@ -231,9 +275,6 @@ int lpwrap_one_loop(struct lpwrap_pri *spri)
now.tv_usec = 100000;
sel = select(pri_fd(spri->pri) + 1, &rfds, NULL, &efds, &now);
event = NULL;
if (!sel) {
if ((next = pri_schedule_next(spri->pri))) {
gettimeofday(&now, NULL);
@@ -248,46 +289,40 @@ int lpwrap_one_loop(struct lpwrap_pri *spri)
if (event) {
/* 0 is catchall event handler */
if ((handler = spri->eventmap[event->e] ? spri->eventmap[event->e] : spri->eventmap[0] ? spri->eventmap[0] : NULL)) {
if (event->e < 0 || event->e >= LPWRAP_PRI_EVENT_MAX) {
handler = spri->eventmap[0];
} else if (spri->eventmap[event->e]) {
handler = spri->eventmap[event->e];
} else {
handler = spri->eventmap[0];
}
if (handler) {
handler(spri, event->e, event);
} else {
ftdm_log(FTDM_LOG_CRIT, "No event handler found for event %d.\n", event->e);
}
}
return sel;
if ((handler = spri->eventmap[LPWRAP_PRI_EVENT_IO_FAIL] ? spri->eventmap[LPWRAP_PRI_EVENT_IO_FAIL] : spri->eventmap[0] ? spri->eventmap[0] : NULL)) {
handler(spri, LPWRAP_PRI_EVENT_IO_FAIL, NULL);
}
return -1;
}
int lpwrap_run_pri(struct lpwrap_pri *spri)
{
int ret = 0;
for (;;){
ret = lpwrap_one_loop(spri);
if (ret < 0) {
for (;;) {
if ((ret = lpwrap_one_loop(spri)) < 0) {
#ifndef WIN32 //This needs to be adressed fror WIN32 still
if (errno == EINTR){
/* Igonore an interrupted system call */
continue;
}
#endif
#endif
ftdm_log(FTDM_LOG_CRIT, "Error = %i [%s]\n", ret, strerror(errno));
break;
}
}
return ret;
}
/* For Emacs:
@@ -300,4 +335,3 @@ int lpwrap_run_pri(struct lpwrap_pri *spri)
* For VIM:
* vim:set softtabstop=4 shiftwidth=4 tabstop=4:
*/
@@ -51,7 +51,11 @@ typedef enum {
LPWRAP_PRI_EVENT_ANSWER = PRI_EVENT_ANSWER,
LPWRAP_PRI_EVENT_HANGUP_ACK = PRI_EVENT_HANGUP_ACK,
LPWRAP_PRI_EVENT_RESTART_ACK = PRI_EVENT_RESTART_ACK,
LPWRAP_PRI_EVENT_FACNAME = PRI_EVENT_FACNAME,
#ifdef PRI_EVENT_FACILITY
LPWRAP_PRI_EVENT_FACILITY = PRI_EVENT_FACILITY,
#else
LPWRAP_PRI_EVENT_FACILITY = PRI_EVENT_FACNAME,
#endif
LPWRAP_PRI_EVENT_INFO_RECEIVED = PRI_EVENT_INFO_RECEIVED,
LPWRAP_PRI_EVENT_PROCEEDING = PRI_EVENT_PROCEEDING,
LPWRAP_PRI_EVENT_SETUP_ACK = PRI_EVENT_SETUP_ACK,
@@ -121,6 +125,8 @@ struct lpwrap_pri_event_list {
const char *lpwrap_pri_event_str(lpwrap_pri_event_t event_id);
int lpwrap_one_loop(struct lpwrap_pri *spri);
int lpwrap_init_pri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int debug);
int lpwrap_init_bri(struct lpwrap_pri *spri, ftdm_span_t *span, ftdm_channel_t *dchan, int swtype, int node, int ptp, int debug);
int lpwrap_run_pri(struct lpwrap_pri *spri);
#define lpwrap_run_bri(x) lpwrap_run_pri(x)
#endif
+18 -18
View File
@@ -266,7 +266,7 @@ PK_VOID PK_CALLBACK media_out_callback(PKH_TPikaEvent *event)
{
PK_STATUS pk_status;
ftdm_channel_t *ftdmchan = event->userData;
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->mod_data;
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->io_data;
//PK_CHAR event_text[PKH_EVENT_MAX_NAME_LENGTH];
//PKH_EVENT_GetText(event->id, event_text, sizeof(event_text));
@@ -345,8 +345,8 @@ static unsigned pika_open_range(ftdm_span_t *span, unsigned boardno, unsigned sp
}
if (span->mod_data) {
span_data = span->mod_data;
if (span->io_data) {
span_data = span->io_data;
} else {
span_data = ftdm_malloc(sizeof(*span_data));
assert(span_data != NULL);
@@ -364,7 +364,7 @@ static unsigned pika_open_range(ftdm_span_t *span, unsigned boardno, unsigned sp
//PKH_QUEUE_Attach(span_data->event_queue, globals.open_boards[boardno], NULL);
span->mod_data = span_data;
span->io_data = span_data;
}
if (type == FTDM_CHAN_TYPE_FXS || type == FTDM_CHAN_TYPE_FXO) {
@@ -380,7 +380,7 @@ static unsigned pika_open_range(ftdm_span_t *span, unsigned boardno, unsigned sp
assert(chan_data);
memset(chan_data, 0, sizeof(*chan_data));
ftdm_span_add_channel(span, 0, type, &chan);
chan->mod_data = chan_data;
chan->io_data = chan_data;
if ((type == FTDM_CHAN_TYPE_B || type == FTDM_CHAN_TYPE_DQ921) && !span_data->handle) {
PKH_TBoardConfig boardConfig;
@@ -680,7 +680,7 @@ static FIO_CONFIGURE_SPAN_FUNCTION(pika_configure_span)
*/
static FIO_OPEN_FUNCTION(pika_open)
{
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->mod_data;
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->io_data;
if (!chan_data && !ftdm_test_flag(chan_data, PK_FLAG_READY)) {
return FTDM_FAIL;
@@ -715,7 +715,7 @@ static FIO_CLOSE_FUNCTION(pika_close)
*/
static FIO_WAIT_FUNCTION(pika_wait)
{
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->mod_data;
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->io_data;
PK_STATUS status;
ftdm_wait_flag_t myflags = *flags;
PK_CHAR event_text[PKH_EVENT_MAX_NAME_LENGTH];
@@ -754,7 +754,7 @@ static FIO_WAIT_FUNCTION(pika_wait)
*/
static FIO_READ_FUNCTION(pika_read)
{
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->mod_data;
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->io_data;
PK_STATUS status;
PK_CHAR event_text[PKH_EVENT_MAX_NAME_LENGTH];
uint32_t len;
@@ -795,7 +795,7 @@ static FIO_READ_FUNCTION(pika_read)
*/
static FIO_WRITE_FUNCTION(pika_write)
{
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->mod_data;
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->io_data;
PK_STATUS status;
if (ftdmchan->type == FTDM_CHAN_TYPE_DQ921) {
@@ -821,8 +821,8 @@ static FIO_WRITE_FUNCTION(pika_write)
*/
static FIO_COMMAND_FUNCTION(pika_command)
{
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->mod_data;
//pika_span_data_t *span_data = (pika_span_data_t *) ftdmchan->span->mod_data;
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->io_data;
//pika_span_data_t *span_data = (pika_span_data_t *) ftdmchan->span->io_data;
PK_STATUS pk_status;
ftdm_status_t status = FTDM_SUCCESS;
@@ -956,7 +956,7 @@ static FIO_COMMAND_FUNCTION(pika_command)
*/
static FIO_SPAN_POLL_EVENT_FUNCTION(pika_poll_event)
{
pika_span_data_t *span_data = (pika_span_data_t *) span->mod_data;
pika_span_data_t *span_data = (pika_span_data_t *) span->io_data;
PK_STATUS status;
PK_CHAR event_text[PKH_EVENT_MAX_NAME_LENGTH];
@@ -1025,7 +1025,7 @@ static FIO_SPAN_POLL_EVENT_FUNCTION(pika_poll_event)
for(x = 1; x <= span->chan_count; x++) {
ftdmchan = span->channels[x];
assert(ftdmchan != NULL);
chan_data = (pika_chan_data_t *) ftdmchan->mod_data;
chan_data = (pika_chan_data_t *) ftdmchan->io_data;
assert(chan_data != NULL);
@@ -1042,7 +1042,7 @@ static FIO_SPAN_POLL_EVENT_FUNCTION(pika_poll_event)
//ftdm_log(FTDM_LOG_DEBUG, "Event: %s\n", event_text);
if (ftdmchan) {
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->mod_data;
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->io_data;
assert(chan_data != NULL);
ftdm_set_flag(ftdmchan, FTDM_CHANNEL_EVENT);
@@ -1068,7 +1068,7 @@ static FIO_SPAN_NEXT_EVENT_FUNCTION(pika_next_event)
for(i = 1; i <= span->chan_count; i++) {
if (ftdm_test_flag(span->channels[i], FTDM_CHANNEL_EVENT)) {
pika_chan_data_t *chan_data = (pika_chan_data_t *) span->channels[i]->mod_data;
pika_chan_data_t *chan_data = (pika_chan_data_t *) span->channels[i]->io_data;
PK_CHAR event_text[PKH_EVENT_MAX_NAME_LENGTH];
ftdm_clear_flag(span->channels[i], FTDM_CHANNEL_EVENT);
@@ -1207,7 +1207,7 @@ static FIO_SPAN_NEXT_EVENT_FUNCTION(pika_next_event)
*/
static FIO_SPAN_DESTROY_FUNCTION(pika_span_destroy)
{
pika_span_data_t *span_data = (pika_span_data_t *) span->mod_data;
pika_span_data_t *span_data = (pika_span_data_t *) span->io_data;
if (span_data) {
PKH_QUEUE_Destroy(span_data->event_queue);
@@ -1224,8 +1224,8 @@ static FIO_SPAN_DESTROY_FUNCTION(pika_span_destroy)
*/
static FIO_CHANNEL_DESTROY_FUNCTION(pika_channel_destroy)
{
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->mod_data;
pika_span_data_t *span_data = (pika_span_data_t *) ftdmchan->span->mod_data;
pika_chan_data_t *chan_data = (pika_chan_data_t *) ftdmchan->io_data;
pika_span_data_t *span_data = (pika_span_data_t *) ftdmchan->span->io_data;
if (!chan_data) {
return FTDM_FAIL;
+62 -73
View File
@@ -31,11 +31,15 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdio.h>
#ifdef __linux__
#ifndef _BSD_SOURCE
#define _BSD_SOURCE /* for strsep() */
#endif
#include <syscall.h>
#include <poll.h>
#include <string.h>
#endif
#include <stdio.h>
#include <openr2.h>
#include "freetdm.h"
#include "private/ftdm_core.h"
@@ -403,6 +407,7 @@ static void ftdm_r2_on_call_init(openr2_chan_t *r2chan)
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_INUSE)) {
ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Cannot start call when channel is in use (state = %s)\n", ftdm_channel_state2str(ftdmchan->state));
ftdm_mutex_unlock(ftdmchan->mutex);
return;
}
if (ftdmchan->state != FTDM_CHANNEL_STATE_DOWN) {
@@ -436,9 +441,6 @@ static void ftdm_r2_on_call_init(openr2_chan_t *r2chan)
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_COLLECT);
ftdm_mutex_unlock(ftdmchan->mutex);
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Span is not threaded, not launching thread for this call\n");
return;
}
/* only called for incoming calls when the ANI, DNIS etc is complete and the user has to decide either to accept or reject the call */
@@ -447,9 +449,7 @@ static void ftdm_r2_on_call_offered(openr2_chan_t *r2chan, const char *ani, cons
ftdm_channel_t *ftdmchan = openr2_chan_get_client_data(r2chan);
ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Call offered with ANI = %s, DNIS = %s, Priority = (%d)\n", ani, dnis, category);
//ftdmchan->caller_data.priority = category;
ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_RING);
}
static void ftdm_r2_on_call_accepted(openr2_chan_t *r2chan, openr2_call_mode_t mode)
@@ -602,8 +602,8 @@ static void ftdm_r2_on_line_idle(openr2_chan_t *r2chan)
ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Far end unblocked in state %s\n", ftdm_channel_state2str(ftdmchan->state));
ftdm_clear_flag(ftdmchan, FTDM_CHANNEL_SUSPENDED);
/* XXX when should we set/unset this flag? XXX */
ftdm_set_flag(ftdmchan, FTDM_CHANNEL_SIG_UP);
/* XXX when should we set/unset this flag? XXX */
ftdm_set_flag(ftdmchan, FTDM_CHANNEL_SIG_UP);
}
static void ftdm_r2_write_log(openr2_log_level_t level, const char *file, const char *function, int line, const char *message)
@@ -883,7 +883,7 @@ static FIO_SIG_CONFIGURE_FUNCTION(ftdm_r2_configure_span)
ftdm_r2_call_t *r2call = NULL;
openr2_chan_t *r2chan = NULL;
openr2_log_level_t tmplevel;
char *clevel;
char *clevel = NULL;
char *logval = NULL;
ft_r2_conf_t r2conf =
@@ -891,20 +891,21 @@ static FIO_SIG_CONFIGURE_FUNCTION(ftdm_r2_configure_span)
/* .variant */ OR2_VAR_ITU,
/* .category */ OR2_CALLING_PARTY_CATEGORY_NATIONAL_SUBSCRIBER,
/* .loglevel */ OR2_LOG_ERROR | OR2_LOG_WARNING,
/* .logdir */ NULL,
/* .advanced_protocol_file */ NULL,
/* .max_ani */ 10,
/* .max_dnis */ 4,
/* .mfback_timeout */ -1,
/* .metering_pulse_timeout */ -1,
/* .allow_collect_calls */ -1,
/* .immediate_accept */ -1,
/* .skip_category */ -1,
/* .forced_release */ -1,
/* .charge_calls */ -1,
/* .get_ani_first */ -1,
/* .call_files */ 0,
/* .mf_files */ 0,
/* .logdir */ NULL,
/* .advanced_protocol_file */ NULL
/* .double_answer */ 0,
/* .charge_calls */ -1,
/* .forced_release */ -1,
/* .allow_collect_calls */ -1
};
assert(sig_cb != NULL);
@@ -1107,7 +1108,7 @@ static FIO_SIG_CONFIGURE_FUNCTION(ftdm_r2_configure_span)
memset(r2call, 0, sizeof(*r2call));
openr2_chan_set_logging_func(r2chan, ftdm_r2_on_chan_log);
openr2_chan_set_client_data(r2chan, span->channels[i]);
r2call->r2chan = r2chan;
r2call->r2chan = r2chan;
span->channels[i]->call_data = r2call;
/* value and key are the same so just free one of them */
snprintf(r2call->name, sizeof(r2call->name), "chancall%d", i);
@@ -1322,8 +1323,8 @@ static int ftdm_r2_state_advance(ftdm_channel_t *ftdmchan)
static void *ftdm_r2_run(ftdm_thread_t *me, void *obj)
{
openr2_chan_t *r2chan;
ftdm_r2_call_t *r2call = NULL;
ftdm_channel_t *ftdmchan = NULL;
ftdm_r2_call_t *r2call = NULL;
ftdm_channel_t *ftdmchan = NULL;
ftdm_status_t status;
ftdm_span_t *span = (ftdm_span_t *) obj;
ftdm_r2_data_t *r2data = span->signal_data;
@@ -1359,16 +1360,14 @@ static void *ftdm_r2_run(ftdm_thread_t *me, void *obj)
}
#ifndef WIN32
/* figure out what event to poll each channel for. POLLPRI when the channel is down,
* POLLPRI|POLLIN|POLLOUT otherwise.
*/
memset(poll_events, 0, sizeof(short)*span->chan_count);
for (i = 0; i < span->chan_count; i++) {
r2chan = R2CALL(span->channels[(i+1)])->r2chan;
ftdmchan = openr2_chan_get_client_data(r2chan);
poll_events[i] = ftdmchan->state == FTDM_CHANNEL_STATE_DOWN ? POLLPRI : (POLLPRI | POLLIN | POLLOUT);
}
/* figure out what event to poll each channel for. POLLPRI when the channel is down,
* POLLPRI|POLLIN|POLLOUT otherwise */
memset(poll_events, 0, sizeof(short)*span->chan_count);
for (i = 0; i < span->chan_count; i++) {
r2chan = R2CALL(span->channels[(i+1)])->r2chan;
ftdmchan = openr2_chan_get_client_data(r2chan);
poll_events[i] = ftdmchan->state == FTDM_CHANNEL_STATE_DOWN ? POLLPRI : (POLLPRI | POLLIN | POLLOUT);
}
status = ftdm_span_poll_event(span, waitms, poll_events);
#else
@@ -1385,62 +1384,61 @@ static void *ftdm_r2_run(ftdm_thread_t *me, void *obj)
continue;
}
if (FTDM_SUCCESS == status) {
if (FTDM_SUCCESS == status) {
ftdm_event_t *event;
while (ftdm_span_next_event(span, &event) == FTDM_SUCCESS) {
if (event->enum_id == FTDM_OOB_CAS_BITS_CHANGE) {
r2call = R2CALL(event->channel);
r2chan = r2call->r2chan;
r2call = R2CALL(event->channel);
r2chan = r2call->r2chan;
ftdm_log(FTDM_LOG_DEBUG, "Handling CAS on channel %d.\n", openr2_chan_get_number(r2chan));
// we only expect CAS and other OOB events on this thread/loop, once a call is started
// the MF events (in-band signaling) are handled in the call thread
openr2_chan_process_cas_signaling(r2chan);
} else {
ftdm_log(FTDM_LOG_DEBUG, "Ignoring event %d on channel %d.\n", event->enum_id, openr2_chan_get_number(r2chan));
// XXX TODO: handle alarms here XXX
}
}
/* XXX
* when ftdm_span_poll_event() returns FTDM_SUCCESS, means there are events pending on the span.
* is it possible to know on which channels those events are pending, without trasvering the span?
* XXX
*/
for (i = 1; i <= span->chan_count; i++) {
r2chan = R2CALL(span->channels[i])->r2chan;
ftdmchan = openr2_chan_get_client_data(r2chan);
r2call = R2CALL(ftdmchan);
/* XXX
* when ftdm_span_poll_event() returns FTDM_SUCCESS, means there are events pending on the span.
* is it possible to know on which channels those events are pending, without traversing the span?
* XXX */
for (i = 1; i <= span->chan_count; i++) {
r2chan = R2CALL(span->channels[i])->r2chan;
ftdmchan = openr2_chan_get_client_data(r2chan);
r2call = R2CALL(ftdmchan);
ftdm_mutex_lock(ftdmchan->mutex);
ftdm_set_flag(r2call, FTDM_R2_PROCESSING);
ftdm_mutex_lock(ftdmchan->mutex);
ftdm_set_flag(r2call, FTDM_R2_PROCESSING);
if (ftdm_r2_state_advance(ftdmchan)) {
ftdm_clear_flag(r2call, FTDM_R2_PROCESSING);
ftdm_mutex_unlock(ftdmchan->mutex);
continue;
}
if (ftdm_r2_state_advance(ftdmchan)) {
ftdm_clear_flag(r2call, FTDM_R2_PROCESSING);
ftdm_mutex_unlock(ftdmchan->mutex);
continue;
}
/* handle timeout events first if any */
openr2_chan_run_schedule(r2chan);
/* handle timeout events first if any */
openr2_chan_run_schedule(r2chan);
/* process mf tones, if any */
if (openr2_chan_get_read_enabled(r2chan))
openr2_chan_process_mf_signaling(r2chan);
/* process mf tones, if any */
if (openr2_chan_get_read_enabled(r2chan)) {
openr2_chan_process_mf_signaling(r2chan);
}
if (ftdm_r2_state_advance(ftdmchan)) {
ftdm_clear_flag(r2call, FTDM_R2_PROCESSING);
ftdm_mutex_unlock(ftdmchan->mutex);
continue;
}
if (ftdm_r2_state_advance(ftdmchan)) {
ftdm_clear_flag(r2call, FTDM_R2_PROCESSING);
ftdm_mutex_unlock(ftdmchan->mutex);
continue;
}
ftdm_clear_flag(r2call, FTDM_R2_PROCESSING);
ftdm_mutex_unlock(ftdmchan->mutex);
}
ftdm_clear_flag(r2call, FTDM_R2_PROCESSING);
ftdm_mutex_unlock(ftdmchan->mutex);
}
} else if (status != FTDM_TIMEOUT) {
ftdm_log(FTDM_LOG_ERROR, "ftdm_span_poll_event returned %d.\n", status);
}
}
ftdm_sleep(20);
}
@@ -1613,22 +1611,13 @@ static FIO_API_FUNCTION(ftdm_r2_api)
r2data->loops,
r2data->monitor_thread_id);
stream->write_function(stream, "\n");
stream->write_function(stream, "%4s %-12.12s %-12.12s %6s %6s %6s %6s\n", "Channel", "Tx CAS", "Rx CAS",
"Rx Avg", "Tx Avg", "Rx", "Tx");
stream->write_function(stream, "%4s %-12.12s %-12.12s\n", "Channel", "Tx CAS", "Rx CAS");
for (i = 1; i <= span->chan_count; i++) {
char rx_str[25];
char tx_str[25];
char rxavg_str[25];
char txavg_str[25];
r2chan = R2CALL(span->channels[i])->r2chan;
stream->write_function(stream, "%4d %-12.12s %-12.12s %6s %6s %6s %6s\n",
stream->write_function(stream, "%4d %-12.12s %-12.12s\n",
span->channels[i]->chan_id,
openr2_chan_get_tx_cas_string(r2chan),
openr2_chan_get_rx_cas_string(r2chan),
rxavg_str,
txavg_str,
rx_str,
tx_str);
openr2_chan_get_rx_cas_string(r2chan));
}
stream->write_function(stream, "\n");
stream->write_function(stream, "+OK.\n");
@@ -47,6 +47,7 @@ static ftdm_status_t ftdm_sangoma_isdn_start(ftdm_span_t *span);
ftdm_channel_t* ftdm_sangoma_isdn_process_event_states(ftdm_span_t *span, sngisdn_event_data_t *sngisdn_event);
static void ftdm_sangoma_isdn_advance_chan_states(ftdm_channel_t *ftdmchan);
static void ftdm_sangoma_isdn_poll_events(ftdm_span_t *span);
static void ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdmchan);
static void ftdm_sangoma_isdn_process_stack_event (ftdm_span_t *span, sngisdn_event_data_t *sngisdn_event);
@@ -56,9 +57,6 @@ static sng_isdn_event_interface_t g_sngisdn_event_interface;
ftdm_sngisdn_data_t g_sngisdn_data;
extern ftdm_status_t sng_isdn_activate_trace(ftdm_span_t *span, sngisdn_tracetype_t trace_opt);
extern ftdm_status_t sngisdn_check_free_ids(void);
ftdm_state_map_t sangoma_isdn_state_map = {
{
{
@@ -238,6 +236,50 @@ static __inline__ void ftdm_sangoma_isdn_advance_chan_states(ftdm_channel_t *ftd
}
}
static void ftdm_sangoma_isdn_poll_events(ftdm_span_t *span)
{
ftdm_status_t ret_status;
ftdm_channel_t *ftdmchan;
ftdm_iterator_t *chaniter = NULL;
ftdm_iterator_t *curr = NULL;
ret_status = ftdm_span_poll_event(span, 0, NULL);
switch(ret_status) {
case FTDM_SUCCESS:
{
ftdm_event_t *event;
while (ftdm_span_next_event(span, &event) == FTDM_SUCCESS) {
if (FTDM_SPAN_IS_BRI(span)) {
switch (event->enum_id) {
/* Check if the span woke up from power-saving mode */
case FTDM_OOB_ALARM_CLEAR:
{
chaniter = ftdm_span_get_chan_iterator(span, NULL);
for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
sngisdn_chan_data_t *sngisdn_info = ftdmchan->call_data;
if (ftdm_test_flag(sngisdn_info, FLAG_ACTIVATING)) {
ftdm_clear_flag(sngisdn_info, FLAG_ACTIVATING);
sngisdn_snd_setup((ftdm_channel_t*)ftdmchan);
}
}
ftdm_iterator_free(chaniter);
}
}
}
}
}
break;
case FTDM_TIMEOUT:
/* No events pending */
break;
default:
ftdm_log(FTDM_LOG_WARNING, "%s:Failed to poll span event\n", span->name);
}
}
static void *ftdm_sangoma_isdn_run(ftdm_thread_t *me, void *obj)
{
ftdm_interrupt_t *ftdm_sangoma_isdn_int[2];
@@ -300,21 +342,8 @@ static void *ftdm_sangoma_isdn_run(ftdm_thread_t *me, void *obj)
}
/* Poll for events, e.g HW DTMF */
ret_status = ftdm_span_poll_event(span, 0);
switch(ret_status) {
case FTDM_SUCCESS:
{
ftdm_event_t *event;
while (ftdm_span_next_event(span, &event) == FTDM_SUCCESS);
}
break;
case FTDM_TIMEOUT:
/* No events pending */
break;
default:
ftdm_log(FTDM_LOG_WARNING, "%s:Failed to poll span event\n", span->name);
}
ftdm_sangoma_isdn_poll_events(span);
if (ftdm_sched_get_time_to_next_timer(signal_data->sched, &sleep) == FTDM_SUCCESS) {
if (sleep < 0 || sleep > SNGISDN_EVENT_POLL_RATE) {
sleep = SNGISDN_EVENT_POLL_RATE;
@@ -498,8 +527,20 @@ static void ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdmchan)
}
break;
case FTDM_CHANNEL_STATE_DIALING: /* outgoing call request */
{
sngisdn_snd_setup(ftdmchan);
{
if (FTDM_SPAN_IS_BRI(ftdmchan->span) &&
ftdm_test_flag(ftdmchan, FTDM_CHANNEL_IN_ALARM) &&
ftdm_test_flag(ftdmchan->span, FTDM_SPAN_PWR_SAVING)) {
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) ftdmchan->span->signal_data;
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Requesting Line activation\n");
sngisdn_set_flag(sngisdn_info, FLAG_ACTIVATING);
sng_isdn_wake_up_phy(ftdmchan->span);
ftdm_sched_timer(signal_data->sched, "timer_t3", signal_data->timer_t3*1000, sngisdn_t3_timeout, (void*) sngisdn_info, NULL);
} else {
sngisdn_snd_setup(ftdmchan);
}
}
break;
case FTDM_CHANNEL_STATE_PROGRESS:
@@ -856,8 +897,7 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_sangoma_isdn_span_config)
if (span->trunk_type == FTDM_TRUNK_BRI_PTMP ||
span->trunk_type == FTDM_TRUNK_BRI) {
ftdm_set_flag(span, FTDM_SPAN_USE_AV_RATE);
sng_isdn_set_avail_rate(span, SNGISDN_AVAIL_PWR_SAVING);
}
@@ -913,7 +953,8 @@ static FIO_SIG_LOAD_FUNCTION(ftdm_sangoma_isdn_init)
}
/* initalize sng_isdn library */
sng_isdn_init(&g_sngisdn_event_interface);
ftdm_assert_return(!sng_isdn_init(&g_sngisdn_event_interface), FTDM_FAIL, "Failed to initialize stack\n");
return FTDM_SUCCESS;
}
@@ -74,6 +74,7 @@ typedef enum {
FLAG_DELAYED_REL = (1 << 7),
FLAG_SENT_PROCEED = (1 << 8),
FLAG_SEND_DISC = (1 << 9),
FLAG_ACTIVATING = (1 << 10), /* Used for BRI only, flag is set after we request line CONNECTED */
} sngisdn_flag_t;
@@ -181,6 +182,7 @@ typedef struct sngisdn_span_data {
uint8_t facility;
int8_t facility_timeout;
uint8_t num_local_numbers;
uint8_t timer_t3;
char* local_numbers[SNGISDN_NUM_LOCAL_NUMBERS];
ftdm_sched_t *sched;
ftdm_queue_t *event_queue;
@@ -266,16 +268,27 @@ extern ftdm_sngisdn_data_t g_sngisdn_data;
ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_span_t *span);
/* Support functions */
FT_DECLARE_INLINE(uint32_t) get_unique_suInstId(uint8_t cc_id);
FT_DECLARE_INLINE(void) clear_call_data(sngisdn_chan_data_t *sngisdn_info);
FT_DECLARE_INLINE(void) clear_call_glare_data(sngisdn_chan_data_t *sngisdn_info);
FT_DECLARE(uint32_t) get_unique_suInstId(int16_t cc_id);
FT_DECLARE(void) clear_call_data(sngisdn_chan_data_t *sngisdn_info);
FT_DECLARE(void) clear_call_glare_data(sngisdn_chan_data_t *sngisdn_info);
void stack_hdr_init(Header *hdr);
void stack_pst_init(Pst *pst);
FT_DECLARE_INLINE(ftdm_status_t) get_ftdmchan_by_spInstId(uint8_t cc_id, uint32_t spInstId, sngisdn_chan_data_t **sngisdn_data);
FT_DECLARE_INLINE(ftdm_status_t) get_ftdmchan_by_suInstId(uint8_t cc_id, uint32_t suInstId, sngisdn_chan_data_t **sngisdn_data);
FT_DECLARE_INLINE(ftdm_status_t) sng_isdn_set_avail_rate(ftdm_span_t *ftdmspan, sngisdn_avail_t avail);
FT_DECLARE(ftdm_status_t) get_ftdmchan_by_spInstId(int16_t cc_id, uint32_t spInstId, sngisdn_chan_data_t **sngisdn_data);
FT_DECLARE(ftdm_status_t) get_ftdmchan_by_suInstId(int16_t cc_id, uint32_t suInstId, sngisdn_chan_data_t **sngisdn_data);
FT_DECLARE(ftdm_status_t) sng_isdn_set_avail_rate(ftdm_span_t *ftdmspan, sngisdn_avail_t avail);
FT_DECLARE(ftdm_status_t) cpy_calling_num_from_stack(ftdm_caller_data_t *ftdm, CgPtyNmb *cgPtyNmb);
FT_DECLARE(ftdm_status_t) cpy_called_num_from_stack(ftdm_caller_data_t *ftdm, CdPtyNmb *cdPtyNmb);
FT_DECLARE(ftdm_status_t) cpy_redir_num_from_stack(ftdm_caller_data_t *ftdm, RedirNmb *redirNmb);
FT_DECLARE(ftdm_status_t) cpy_calling_name_from_stack(ftdm_caller_data_t *ftdm, Display *display);
FT_DECLARE(ftdm_status_t) cpy_calling_num_from_user(CgPtyNmb *cgPtyNmb, ftdm_caller_data_t *ftdm);
FT_DECLARE(ftdm_status_t) cpy_called_num_from_user(CdPtyNmb *cdPtyNmb, ftdm_caller_data_t *ftdm);
FT_DECLARE(ftdm_status_t) cpy_redir_num_from_user(RedirNmb *redirNmb, ftdm_caller_data_t *ftdm);
FT_DECLARE(ftdm_status_t) cpy_calling_name_from_user(ConEvnt *conEvnt, ftdm_channel_t *ftdmchan);
/* Outbound Call Control functions */
void sngisdn_snd_setup(ftdm_channel_t *ftdmchan);
@@ -331,6 +344,14 @@ void sngisdn_process_rst_ind (sngisdn_event_data_t *sngisdn_event);
void sngisdn_rcv_phy_ind(SuId suId, Reason reason);
void sngisdn_rcv_q921_ind(BdMngmt *status);
void sngisdn_trace_q921(char* str, uint8_t* data, uint32_t data_len);
void sngisdn_trace_q931(char* str, uint8_t* data, uint32_t data_len);
void get_memory_info(void);
ftdm_status_t sng_isdn_activate_trace(ftdm_span_t *span, sngisdn_tracetype_t trace_opt);
ftdm_status_t sngisdn_check_free_ids(void);
void sngisdn_rcv_q921_trace(BdMngmt *trc, Buffer *mBuf);
void sngisdn_rcv_q931_ind(InMngmt *status);
void sngisdn_rcv_q931_trace(InMngmt *trc, Buffer *mBuf);
@@ -368,11 +389,13 @@ void sngisdn_delayed_release(void* p_sngisdn_info);
void sngisdn_delayed_connect(void* p_sngisdn_info);
void sngisdn_delayed_disconnect(void* p_sngisdn_info);
void sngisdn_facility_timeout(void* p_sngisdn_info);
void sngisdn_t3_timeout(void* p_sngisdn_info);
/* Stack management functions */
ftdm_status_t sng_isdn_stack_cfg(ftdm_span_t *span);
ftdm_status_t sng_isdn_stack_start(ftdm_span_t *span);
ftdm_status_t sng_isdn_stack_stop(ftdm_span_t *span);
ftdm_status_t sng_isdn_wake_up_phy(ftdm_span_t *span);
void sngisdn_print_phy_stats(ftdm_stream_handle_t *stream, ftdm_span_t *span);
void sngisdn_print_spans(ftdm_stream_handle_t *stream);
@@ -98,6 +98,8 @@ ftdm_status_t parse_switchtype(const char* switch_name, ftdm_span_t *span)
ftdm_log(FTDM_LOG_ERROR, "%s:Unsupported switchtype %s for trunktype:%s\n", span->name, switch_name, ftdm_trunk_type2str(span->trunk_type));
return FTDM_FAIL;
}
ftdm_set_flag(span, FTDM_SPAN_USE_AV_RATE);
ftdm_set_flag(span, FTDM_SPAN_PWR_SAVING);
/* can be > 1 for some BRI variants */
break;
default:
@@ -179,6 +181,7 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
signal_data->min_digits = 8;
signal_data->overlap_dial = SNGISDN_OPT_DEFAULT;
signal_data->setup_arb = SNGISDN_OPT_DEFAULT;
signal_data->timer_t3 = 8;
signal_data->link_id = span->span_id;
span->default_caller_data.bearer_capability = IN_ITC_SPEECH;
@@ -189,6 +192,7 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
if (span->trunk_type == FTDM_TRUNK_BRI ||
span->trunk_type == FTDM_TRUNK_BRI_PTMP) {
ftdm_span_set_npi("unknown", &span->default_caller_data.dnis.plan);
ftdm_span_set_ton("unknown", &span->default_caller_data.dnis.type);
ftdm_span_set_npi("unknown", &span->default_caller_data.cid_num.plan);
@@ -198,7 +198,7 @@ ftdm_status_t sng_isdn_stack_cfg_phy_psap(ftdm_span_t *span)
L1Mngmt cfg;
Pst pst;
S32 d_channel_fd = -1;
int32_t d_channel_fd = -1;
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data;
/* initalize the post structure */
@@ -227,7 +227,7 @@ ftdm_status_t sng_isdn_stack_cfg_phy_psap(ftdm_span_t *span)
for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
ftdm_channel_t *ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
if (ftdmchan->type == FTDM_CHAN_TYPE_DQ921) {
d_channel_fd = (S32) ftdmchan->sockfd;
d_channel_fd = (int32_t)ftdmchan->sockfd;
break;
}
}
@@ -113,6 +113,40 @@ ftdm_status_t sng_isdn_stack_stop(ftdm_span_t *span)
}
ftdm_status_t sng_isdn_wake_up_phy(ftdm_span_t *span)
{
L1Mngmt cntrl;
Pst pst;
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data;
/* initalize the post structure */
stack_pst_init(&pst);
/* insert the destination Entity */
pst.dstEnt = ENTL1;
/* initalize the control structure */
memset(&cntrl, 0, sizeof(cntrl));
/* initalize the control header */
stack_hdr_init(&cntrl.hdr);
cntrl.hdr.msgType = TCNTRL; /* configuration */
cntrl.hdr.entId.ent = ENTL1; /* entity */
cntrl.hdr.entId.inst = S_INST; /* instance */
cntrl.hdr.elmId.elmnt = STTSAP; /* SAP Specific cntrl */
cntrl.t.cntrl.action = AENA;
cntrl.t.cntrl.subAction = SAELMNT;
cntrl.t.cntrl.sapId = signal_data->link_id;
if (sng_isdn_phy_cntrl(&pst, &cntrl)) {
return FTDM_FAIL;
}
return FTDM_SUCCESS;
}
ftdm_status_t sng_isdn_activate_phy(ftdm_span_t *span)
{
@@ -34,11 +34,6 @@
#include "ftmod_sangoma_isdn.h"
extern ftdm_status_t cpy_calling_num_from_stack(ftdm_caller_data_t *ftdm, CgPtyNmb *cgPtyNmb);
extern ftdm_status_t cpy_called_num_from_stack(ftdm_caller_data_t *ftdm, CdPtyNmb *cdPtyNmb);
extern ftdm_status_t cpy_redir_num_from_stack(ftdm_caller_data_t *ftdm, RedirNmb *redirNmb);
extern ftdm_status_t cpy_calling_name_from_stack(ftdm_caller_data_t *ftdm, Display *display);
/* Remote side transmit a SETUP */
void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event)
{
@@ -78,7 +73,7 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event)
break;
}
sngisdn_info->suInstId = get_unique_suInstId((int8_t) suId);
sngisdn_info->suInstId = get_unique_suInstId(suId);
sngisdn_info->spInstId = spInstId;
@@ -135,6 +130,7 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event)
cpy_calling_num_from_stack(&ftdmchan->caller_data, &conEvnt->cgPtyNmb);
cpy_called_num_from_stack(&ftdmchan->caller_data, &conEvnt->cdPtyNmb);
cpy_calling_name_from_stack(&ftdmchan->caller_data, &conEvnt->display);
cpy_redir_num_from_stack(&ftdmchan->caller_data, &conEvnt->redirNmb);
ftdm_log_chan(sngisdn_info->ftdmchan, FTDM_LOG_INFO, "Incoming call: Called No:[%s] Calling No:[%s]\n", ftdmchan->caller_data.dnis.digits, ftdmchan->caller_data.cid_num.digits);
if (conEvnt->bearCap[0].eh.pres) {
@@ -205,7 +201,7 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event)
sngisdn_set_flag(sngisdn_info, FLAG_DELAYED_REL);
sngisdn_info->glare.suId = suId;
sngisdn_info->glare.suInstId = get_unique_suInstId((int8_t) suId);
sngisdn_info->glare.suInstId = get_unique_suInstId(suId);
sngisdn_info->glare.spInstId = spInstId;
sngisdn_info->glare.dChan = dChan;
@@ -34,10 +34,6 @@
#include "ftmod_sangoma_isdn.h"
extern ftdm_status_t cpy_calling_num_from_user(CgPtyNmb *cgPtyNmb, ftdm_caller_data_t *ftdm);
extern ftdm_status_t cpy_called_num_from_user(CdPtyNmb *cdPtyNmb, ftdm_caller_data_t *ftdm);
extern ftdm_status_t cpy_calling_name_from_user(ConEvnt *conEvnt, ftdm_channel_t *ftdmchan);
void sngisdn_snd_setup(ftdm_channel_t *ftdmchan);
void sngisdn_snd_proceed(ftdm_channel_t *ftdmchan);
void sngisdn_snd_progress(ftdm_channel_t *ftdmchan);
@@ -45,7 +41,6 @@ void sngisdn_snd_connect(ftdm_channel_t *ftdmchan);
void sngisdn_snd_disconnect(ftdm_channel_t *ftdmchan);
void sngisdn_snd_release(ftdm_channel_t *ftdmchan, uint8_t glare);
void sngisdn_snd_setup(ftdm_channel_t *ftdmchan)
{
ConEvnt conEvnt;
@@ -147,6 +142,7 @@ void sngisdn_snd_setup(ftdm_channel_t *ftdmchan)
cpy_called_num_from_user(&conEvnt.cdPtyNmb, &ftdmchan->caller_data);
cpy_calling_num_from_user(&conEvnt.cgPtyNmb, &ftdmchan->caller_data);
cpy_redir_num_from_user(&conEvnt.redirNmb, &ftdmchan->caller_data);
cpy_calling_name_from_user(&conEvnt, ftdmchan);
ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending SETUP (suId:%d suInstId:%u spInstId:%u dchan:%d ces:%d)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, signal_data->dchan_id, sngisdn_info->ces);
@@ -34,10 +34,6 @@
#include "ftmod_sangoma_isdn.h"
extern void sngisdn_trace_q921(char* str, uint8_t* data, uint32_t data_len);
extern void sngisdn_trace_q931(char* str, uint8_t* data, uint32_t data_len);
extern void get_memory_info(void);
#define MAX_DECODE_STR_LEN 2000
@@ -112,7 +108,7 @@ void sngisdn_rcv_con_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, Cn
ftdm_assert(g_sngisdn_data.ccs[suId].activation_done != 0, "Con Cfm on unconfigured cc\n");
ftdm_assert(g_sngisdn_data.dchans[dChan].num_spans != 0, "Con Cfm on unconfigured dchan\n");
if (get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) != FTDM_SUCCESS) {
if (get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId);
ISDN_FUNC_TRACE_EXIT(__FUNCTION__);
return;
@@ -156,7 +152,7 @@ void sngisdn_rcv_cnst_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, C
ftdm_assert(g_sngisdn_data.ccs[suId].activation_done != 0, "Cnst Ind on unconfigured cc\n");
ftdm_assert(g_sngisdn_data.dchans[dChan].num_spans != 0, "Cnst Ind on unconfigured dchan\n");
if (get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) != FTDM_SUCCESS) {
if (get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId);
ISDN_FUNC_TRACE_EXIT(__FUNCTION__);
return;
@@ -206,8 +202,8 @@ void sngisdn_rcv_disc_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, D
ftdm_assert(spInstId != 0, "Received DISCONNECT with invalid id");
if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId);
ftdm_assert(0, "Inconsistent call states\n");
@@ -240,8 +236,8 @@ void sngisdn_rcv_rel_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, Re
ISDN_FUNC_TRACE_ENTER(__FUNCTION__);
if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId);
/* It seems that Trillium has a bug where they sometimes send release twice on a call, so do not crash on these for now */
@@ -274,8 +270,8 @@ void sngisdn_rcv_dat_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, In
ISDN_FUNC_TRACE_ENTER(__FUNCTION__);
if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId);
ftdm_assert(0, "Inconsistent call states\n");
@@ -307,8 +303,8 @@ void sngisdn_rcv_sshl_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, S
ISDN_FUNC_TRACE_ENTER(__FUNCTION__);
if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId);
ftdm_assert(0, "Inconsistent call states\n");
@@ -341,8 +337,8 @@ void sngisdn_rcv_sshl_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, S
ISDN_FUNC_TRACE_ENTER(__FUNCTION__);
if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId);
ftdm_assert(0, "Inconsistent call states\n");
@@ -374,8 +370,8 @@ void sngisdn_rcv_rmrt_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, R
ISDN_FUNC_TRACE_ENTER(__FUNCTION__);
if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId);
ftdm_assert(0, "Inconsistent call states\n");
@@ -408,8 +404,8 @@ void sngisdn_rcv_rmrt_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, R
ISDN_FUNC_TRACE_ENTER(__FUNCTION__);
if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId);
ftdm_assert(0, "Inconsistent call states\n");
@@ -442,8 +438,8 @@ void sngisdn_rcv_flc_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, St
ISDN_FUNC_TRACE_ENTER(__FUNCTION__);
if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId);
ftdm_assert(0, "Inconsistent call states\n");
@@ -476,8 +472,8 @@ void sngisdn_rcv_fac_ind (int16_t suId, uint32_t suInstId, uint32_t spInstId, Fa
ISDN_FUNC_TRACE_ENTER(__FUNCTION__);
if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId);
ftdm_assert(0, "Inconsistent call states\n");
@@ -510,8 +506,8 @@ void sngisdn_rcv_sta_cfm (int16_t suId, uint32_t suInstId, uint32_t spInstId, St
ISDN_FUNC_TRACE_ENTER(__FUNCTION__);
if (!(spInstId && get_ftdmchan_by_spInstId((int8_t) suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId((int8_t) suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
if (!(spInstId && get_ftdmchan_by_spInstId(suId, spInstId, &sngisdn_info) == FTDM_SUCCESS) &&
!(suInstId && get_ftdmchan_by_suInstId(suId, suInstId, &sngisdn_info) == FTDM_SUCCESS)) {
ftdm_log(FTDM_LOG_CRIT, "Could not find matching call suId:%u suInstId:%u spInstId:%u\n", suId, suInstId, spInstId);
ftdm_assert(0, "Inconsistent call states\n");
@@ -34,22 +34,12 @@
#include "ftmod_sangoma_isdn.h"
ftdm_status_t cpy_calling_num_from_stack(ftdm_caller_data_t *ftdm, CgPtyNmb *cgPtyNmb);
ftdm_status_t cpy_called_num_from_stack(ftdm_caller_data_t *ftdm, CdPtyNmb *cdPtyNmb);
ftdm_status_t cpy_redir_num_from_stack(ftdm_caller_data_t *ftdm, RedirNmb *redirNmb);
ftdm_status_t cpy_calling_name_from_stack(ftdm_caller_data_t *ftdm, Display *display);
ftdm_status_t cpy_calling_num_from_user(CgPtyNmb *cgPtyNmb, ftdm_caller_data_t *ftdm);
ftdm_status_t cpy_called_num_from_user(CdPtyNmb *cdPtyNmb, ftdm_caller_data_t *ftdm);
ftdm_status_t cpy_redir_num_from_user(RedirNmb *redirNmb, ftdm_caller_data_t *ftdm);
ftdm_status_t cpy_calling_name_from_user(ConEvnt *conEvnt, ftdm_channel_t *ftdmchan);
ftdm_status_t sngisdn_check_free_ids(void);
extern ftdm_sngisdn_data_t g_sngisdn_data;
void get_memory_info(void);
FT_DECLARE_INLINE(void) clear_call_data(sngisdn_chan_data_t *sngisdn_info)
FT_DECLARE(void) clear_call_data(sngisdn_chan_data_t *sngisdn_info)
{
uint32_t cc_id = ((sngisdn_span_data_t*)sngisdn_info->ftdmchan->span->signal_data)->cc_id;
@@ -66,7 +56,7 @@ FT_DECLARE_INLINE(void) clear_call_data(sngisdn_chan_data_t *sngisdn_info)
return;
}
FT_DECLARE_INLINE(void) clear_call_glare_data(sngisdn_chan_data_t *sngisdn_info)
FT_DECLARE(void) clear_call_glare_data(sngisdn_chan_data_t *sngisdn_info)
{
ftdm_log_chan(sngisdn_info->ftdmchan, FTDM_LOG_DEBUG, "Clearing glare data (suId:%d suInstId:%u spInstId:%u actv-suInstId:%u actv-spInstId:%u)\n",
sngisdn_info->glare.suId,
@@ -91,9 +81,10 @@ FT_DECLARE_INLINE(void) clear_call_glare_data(sngisdn_chan_data_t *sngisdn_info)
}
FT_DECLARE_INLINE(uint32_t) get_unique_suInstId(uint8_t cc_id)
FT_DECLARE(uint32_t) get_unique_suInstId(int16_t cc_id)
{
uint32_t suInstId;
ftdm_assert_return((cc_id > 0 && cc_id <=MAX_VARIANTS), FTDM_FAIL, "Invalid cc_id\n");
ftdm_mutex_lock(g_sngisdn_data.ccs[cc_id].mutex);
suInstId = g_sngisdn_data.ccs[cc_id].last_suInstId;
@@ -112,8 +103,9 @@ FT_DECLARE_INLINE(uint32_t) get_unique_suInstId(uint8_t cc_id)
return 0;
}
FT_DECLARE_INLINE(ftdm_status_t) get_ftdmchan_by_suInstId(uint8_t cc_id, uint32_t suInstId, sngisdn_chan_data_t **sngisdn_data)
FT_DECLARE(ftdm_status_t) get_ftdmchan_by_suInstId(int16_t cc_id, uint32_t suInstId, sngisdn_chan_data_t **sngisdn_data)
{
ftdm_assert_return((cc_id > 0 && cc_id <=MAX_VARIANTS), FTDM_FAIL, "Invalid cc_id\n");
ftdm_assert_return(g_sngisdn_data.ccs[cc_id].activation_done, FTDM_FAIL, "Trying to find call on unconfigured CC\n");
if (g_sngisdn_data.ccs[cc_id].active_suInstIds[suInstId] == NULL) {
@@ -123,8 +115,9 @@ FT_DECLARE_INLINE(ftdm_status_t) get_ftdmchan_by_suInstId(uint8_t cc_id, uint32_
return FTDM_SUCCESS;
}
FT_DECLARE_INLINE(ftdm_status_t) get_ftdmchan_by_spInstId(uint8_t cc_id, uint32_t spInstId, sngisdn_chan_data_t **sngisdn_data)
FT_DECLARE(ftdm_status_t) get_ftdmchan_by_spInstId(int16_t cc_id, uint32_t spInstId, sngisdn_chan_data_t **sngisdn_data)
{
ftdm_assert_return((cc_id > 0 && cc_id <=MAX_VARIANTS), FTDM_FAIL, "Invalid cc_id\n");
ftdm_assert_return(g_sngisdn_data.ccs[cc_id].activation_done, FTDM_FAIL, "Trying to find call on unconfigured CC\n");
if (g_sngisdn_data.ccs[cc_id].active_spInstIds[spInstId] == NULL) {
@@ -154,7 +147,7 @@ ftdm_status_t sng_isdn_set_avail_rate(ftdm_span_t *span, sngisdn_avail_t avail)
return FTDM_SUCCESS;
}
ftdm_status_t cpy_calling_num_from_stack(ftdm_caller_data_t *ftdm, CgPtyNmb *cgPtyNmb)
FT_DECLARE(ftdm_status_t) cpy_calling_num_from_stack(ftdm_caller_data_t *ftdm, CgPtyNmb *cgPtyNmb)
{
if (cgPtyNmb->eh.pres != PRSNT_NODEF) {
return FTDM_FAIL;
@@ -181,7 +174,7 @@ ftdm_status_t cpy_calling_num_from_stack(ftdm_caller_data_t *ftdm, CgPtyNmb *cgP
return FTDM_SUCCESS;
}
ftdm_status_t cpy_called_num_from_stack(ftdm_caller_data_t *ftdm, CdPtyNmb *cdPtyNmb)
FT_DECLARE(ftdm_status_t) cpy_called_num_from_stack(ftdm_caller_data_t *ftdm, CdPtyNmb *cdPtyNmb)
{
if (cdPtyNmb->eh.pres != PRSNT_NODEF) {
return FTDM_FAIL;
@@ -203,7 +196,7 @@ ftdm_status_t cpy_called_num_from_stack(ftdm_caller_data_t *ftdm, CdPtyNmb *cdPt
return FTDM_SUCCESS;
}
ftdm_status_t cpy_redir_num_from_stack(ftdm_caller_data_t *ftdm, RedirNmb *redirNmb)
FT_DECLARE(ftdm_status_t) cpy_redir_num_from_stack(ftdm_caller_data_t *ftdm, RedirNmb *redirNmb)
{
if (redirNmb->eh.pres != PRSNT_NODEF) {
return FTDM_FAIL;
@@ -223,7 +216,7 @@ ftdm_status_t cpy_redir_num_from_stack(ftdm_caller_data_t *ftdm, RedirNmb *redir
return FTDM_SUCCESS;
}
ftdm_status_t cpy_calling_name_from_stack(ftdm_caller_data_t *ftdm, Display *display)
FT_DECLARE(ftdm_status_t) cpy_calling_name_from_stack(ftdm_caller_data_t *ftdm, Display *display)
{
if (display->eh.pres != PRSNT_NODEF) {
return FTDM_FAIL;
@@ -236,7 +229,7 @@ ftdm_status_t cpy_calling_name_from_stack(ftdm_caller_data_t *ftdm, Display *dis
return FTDM_SUCCESS;
}
ftdm_status_t cpy_calling_num_from_user(CgPtyNmb *cgPtyNmb, ftdm_caller_data_t *ftdm)
FT_DECLARE(ftdm_status_t) cpy_calling_num_from_user(CgPtyNmb *cgPtyNmb, ftdm_caller_data_t *ftdm)
{
uint8_t len = strlen(ftdm->cid_num.digits);
if (!len) {
@@ -264,7 +257,7 @@ ftdm_status_t cpy_calling_num_from_user(CgPtyNmb *cgPtyNmb, ftdm_caller_data_t *
return FTDM_SUCCESS;
}
ftdm_status_t cpy_called_num_from_user(CdPtyNmb *cdPtyNmb, ftdm_caller_data_t *ftdm)
FT_DECLARE(ftdm_status_t) cpy_called_num_from_user(CdPtyNmb *cdPtyNmb, ftdm_caller_data_t *ftdm)
{
uint8_t len = strlen(ftdm->dnis.digits);
if (!len) {
@@ -294,7 +287,7 @@ ftdm_status_t cpy_called_num_from_user(CdPtyNmb *cdPtyNmb, ftdm_caller_data_t *f
return FTDM_SUCCESS;
}
ftdm_status_t cpy_redir_num_from_user(RedirNmb *redirNmb, ftdm_caller_data_t *ftdm)
FT_DECLARE(ftdm_status_t) cpy_redir_num_from_user(RedirNmb *redirNmb, ftdm_caller_data_t *ftdm)
{
uint8_t len = strlen(ftdm->rdnis.digits);
if (!len) {
@@ -326,7 +319,7 @@ ftdm_status_t cpy_redir_num_from_user(RedirNmb *redirNmb, ftdm_caller_data_t *ft
}
ftdm_status_t cpy_calling_name_from_user(ConEvnt *conEvnt, ftdm_channel_t *ftdmchan)
FT_DECLARE(ftdm_status_t) cpy_calling_name_from_user(ConEvnt *conEvnt, ftdm_channel_t *ftdmchan)
{
uint8_t len;
ftdm_caller_data_t *ftdm = &ftdmchan->caller_data;
@@ -379,6 +372,28 @@ ftdm_status_t cpy_calling_name_from_user(ConEvnt *conEvnt, ftdm_channel_t *ftdmc
return FTDM_SUCCESS;
}
void sngisdn_t3_timeout(void* p_sngisdn_info)
{
sngisdn_chan_data_t *sngisdn_info = (sngisdn_chan_data_t*)p_sngisdn_info;
ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan;
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) ftdmchan->span->signal_data;
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Timer T3 expired (suId:%d suInstId:%u spInstId:%u)\n",
signal_data->cc_id, sngisdn_info->glare.spInstId, sngisdn_info->glare.suInstId);
ftdm_mutex_lock(ftdmchan->mutex);
if (ftdm_test_flag(sngisdn_info, FLAG_ACTIVATING)){
/* PHY layer timed-out, need to clear the call */
ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Failed to Wake-Up line (suId:%d suInstId:%u spInstId:%u)\n",
signal_data->cc_id, sngisdn_info->glare.spInstId, sngisdn_info->glare.suInstId);
ftdmchan->caller_data.hangup_cause = FTDM_CAUSE_NO_ROUTE_DESTINATION;
ftdm_clear_flag(sngisdn_info, FLAG_ACTIVATING);
ftdm_set_flag(sngisdn_info, FLAG_LOCAL_ABORT);
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_TERMINATING);
}
ftdm_mutex_unlock(ftdmchan->mutex);
}
void sngisdn_delayed_release(void* p_sngisdn_info)
{
sngisdn_chan_data_t *sngisdn_info = (sngisdn_chan_data_t*)p_sngisdn_info;
@@ -1347,7 +1347,7 @@ int ftmod_ss7_isup_isap_config(int id)
cfg.t.cfg.s.siSap.natAddrInd = ADDR_NOTPRSNT; /* SID Nature of Addres Indicator */
cfg.t.cfg.s.siSap.sidNPlan = NP_ISDN; /* SID Numbering Plan */
cfg.t.cfg.s.siSap.sidPresInd = FALSE; /* default presentation indicator */
cfg.t.cfg.s.siSap.incSidPresRes = TRUE; /* Presentation Restriction of incoming SID */
cfg.t.cfg.s.siSap.incSidPresRes = FALSE; /* Presentation Restriction of incoming SID */
cfg.t.cfg.s.siSap.sidPresRes = 0; /* Presentation Restriction */
}
cfg.t.cfg.s.siSap.reqOpt = FALSE; /* Request option */
@@ -1482,7 +1482,7 @@ static ftdm_status_t handle_tx_grs(ftdm_stream_handle_t *stream, int span, int c
sngss7_info = (sngss7_chan_data_t *)g_ftdm_sngss7_data.cfg.isupCkt[x].obj;
ftdmchan = sngss7_info->ftdmchan;
sngss7_span = ftdmchan->span->mod_data;
sngss7_span = ftdmchan->span->signal_data;
if ((ftdmchan->physical_span_id == span) &&
((ftdmchan->physical_chan_id >= chan) && (ftdmchan->physical_chan_id < (chan+range)))) {
@@ -1529,7 +1529,7 @@ static ftdm_status_t handle_tx_grs(ftdm_stream_handle_t *stream, int span, int c
sngss7_info = (sngss7_chan_data_t *)g_ftdm_sngss7_data.cfg.isupCkt[x].obj;
ftdmchan = sngss7_info->ftdmchan;
sngss7_span = ftdmchan->span->mod_data;
sngss7_span = ftdmchan->span->signal_data;
if ((ftdmchan->physical_span_id == span) &&
((ftdmchan->physical_chan_id >= chan) && (ftdmchan->physical_chan_id < (chan+range)))) {
@@ -1572,7 +1572,7 @@ static ftdm_status_t handle_tx_cgb(ftdm_stream_handle_t *stream, int span, int c
/* extract the channel and span info for this circuit */
sngss7_info = (sngss7_chan_data_t *)g_ftdm_sngss7_data.cfg.isupCkt[x].obj;
ftdmchan = sngss7_info->ftdmchan;
sngss7_span = ftdmchan->span->mod_data;
sngss7_span = ftdmchan->span->signal_data;
/* check if this circuit is part of the block */
if ((ftdmchan->physical_span_id == span) &&
@@ -1628,7 +1628,7 @@ static ftdm_status_t handle_tx_cgb(ftdm_stream_handle_t *stream, int span, int c
sngss7_info = (sngss7_chan_data_t *)g_ftdm_sngss7_data.cfg.isupCkt[x].obj;
ftdmchan = sngss7_info->ftdmchan;
sngss7_span = ftdmchan->span->mod_data;
sngss7_span = ftdmchan->span->signal_data;
if ((ftdmchan->physical_span_id == span) &&
((ftdmchan->physical_chan_id >= chan) && (ftdmchan->physical_chan_id < (chan+range)))) {
@@ -1672,7 +1672,7 @@ static ftdm_status_t handle_tx_cgu(ftdm_stream_handle_t *stream, int span, int c
/* extract the channel and span info for this circuit */
sngss7_info = (sngss7_chan_data_t *)g_ftdm_sngss7_data.cfg.isupCkt[x].obj;
ftdmchan = sngss7_info->ftdmchan;
sngss7_span = ftdmchan->span->mod_data;
sngss7_span = ftdmchan->span->signal_data;
/* check if this circuit is part of the block */
if ((ftdmchan->physical_span_id == span) &&
@@ -1728,7 +1728,7 @@ static ftdm_status_t handle_tx_cgu(ftdm_stream_handle_t *stream, int span, int c
sngss7_info = (sngss7_chan_data_t *)g_ftdm_sngss7_data.cfg.isupCkt[x].obj;
ftdmchan = sngss7_info->ftdmchan;
sngss7_span = ftdmchan->span->mod_data;
sngss7_span = ftdmchan->span->signal_data;
if ((ftdmchan->physical_span_id == span) &&
((ftdmchan->physical_chan_id >= chan) && (ftdmchan->physical_chan_id < (chan+range)))) {
@@ -1722,7 +1722,7 @@ ftdm_status_t handle_grs_req(uint32_t suInstId, uint32_t spInstId, uint32_t circ
}
/* fill in the span structure for this circuit */
sngss7_span = ftdmchan->span->mod_data;
sngss7_span = ftdmchan->span->signal_data;
sngss7_span->rx_grs.circuit = circuit;
sngss7_span->rx_grs.range = range;
@@ -1758,7 +1758,7 @@ ftdm_status_t handle_grs_rsp(uint32_t suInstId, uint32_t spInstId, uint32_t circ
}
/* fill in the span structure for this circuit */
sngss7_span = ftdmchan->span->mod_data;
sngss7_span = ftdmchan->span->signal_data;
sngss7_span->rx_gra.circuit = circuit;
sngss7_span->rx_gra.range = range;
@@ -1866,7 +1866,7 @@ ftdm_status_t handle_ucic(uint32_t suInstId, uint32_t spInstId, uint32_t circuit
}
/* check if we just sent a GRS request...*/
sngss7_span = ftdmchan->span->mod_data;
sngss7_span = ftdmchan->span->signal_data;
if (sngss7_span->tx_grs.circuit > 0) {
/* we need to put all circuits on this UCIC */
sngss7_span->ucic.circuit = sngss7_span->tx_grs.circuit;
@@ -1917,7 +1917,7 @@ ftdm_status_t handle_cgb_req(uint32_t suInstId, uint32_t spInstId, uint32_t circ
}
/* grab the span info */
sngss7_span = ftdmchan->span->mod_data;
sngss7_span = ftdmchan->span->signal_data;
/* figure out what type of block needs to be applied */
if ((siStaEvnt->cgsmti.eh.pres == PRSNT_NODEF) && (siStaEvnt->cgsmti.typeInd.pres == PRSNT_NODEF)) {
@@ -2058,7 +2058,7 @@ ftdm_status_t handle_cgu_req(uint32_t suInstId, uint32_t spInstId, uint32_t circ
}
/* grab the span info */
sngss7_span = ftdmchan->span->mod_data;
sngss7_span = ftdmchan->span->signal_data;
/* figure out what type of block needs to be applied */
if ((siStaEvnt->cgsmti.eh.pres == PRSNT_NODEF) && (siStaEvnt->cgsmti.typeInd.pres == PRSNT_NODEF)) {
@@ -90,7 +90,7 @@ void sngss7_con_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, SiCo
memcpy(&sngss7_event->event.siConEvnt, siConEvnt, sizeof(*siConEvnt));
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
}
@@ -128,7 +128,7 @@ void sngss7_con_cfm(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, SiCo
memcpy(&sngss7_event->event.siConEvnt, siConEvnt, sizeof(*siConEvnt));
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
}
@@ -167,7 +167,7 @@ void sngss7_con_sta(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, SiCn
memcpy(&sngss7_event->event.siCnStEvnt, siCnStEvnt, sizeof(*siCnStEvnt));
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
}
@@ -205,7 +205,7 @@ void sngss7_rel_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, SiRe
memcpy(&sngss7_event->event.siRelEvnt, siRelEvnt, sizeof(*siRelEvnt));
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
}
@@ -243,7 +243,7 @@ void sngss7_rel_cfm(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, SiRe
memcpy(&sngss7_event->event.siRelEvnt, siRelEvnt, sizeof(*siRelEvnt));
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
}
@@ -281,7 +281,7 @@ void sngss7_dat_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, SiIn
memcpy(&sngss7_event->event.siInfoEvnt, siInfoEvnt, sizeof(*siInfoEvnt));
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
}
@@ -320,7 +320,7 @@ void sngss7_fac_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, uint
memcpy(&sngss7_event->event.siFacEvnt, siFacEvnt, sizeof(*siFacEvnt));
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
}
@@ -359,7 +359,7 @@ void sngss7_fac_cfm(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, uint
memcpy(&sngss7_event->event.siFacEvnt, siFacEvnt, sizeof(*siFacEvnt));
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
}
@@ -396,7 +396,7 @@ void sngss7_umsg_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circuit)
sngss7_event->event_id = SNGSS7_UMSG_IND_EVENT;
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
@@ -438,7 +438,7 @@ void sngss7_sta_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, uint
}
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
}
@@ -478,7 +478,7 @@ void sngss7_susp_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, SiS
}
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
@@ -519,7 +519,7 @@ void sngss7_resm_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, SiR
}
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
@@ -560,7 +560,7 @@ void sngss7_ssp_sta_cfm(uint32_t infId)
}
/* enqueue this event */
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->mod_data)->event_queue, sngss7_event);
ftdm_queue_enqueue(((sngss7_span_data_t*)sngss7_info->ftdmchan->span->signal_data)->event_queue, sngss7_event);
#endif
SS7_FUNC_TRACE_EXIT(__FUNCTION__);
@@ -275,7 +275,7 @@ static void *ftdm_sangoma_ss7_run(ftdm_thread_t * me, void *obj)
ftdm_span_t *ftdmspan = (ftdm_span_t *) obj;
ftdm_channel_t *ftdmchan = NULL;
sngss7_event_data_t *sngss7_event = NULL;
sngss7_span_data_t *sngss7_span = (sngss7_span_data_t *)ftdmspan->mod_data;
sngss7_span_data_t *sngss7_span = (sngss7_span_data_t *)ftdmspan->signal_data;
ftdm_log (FTDM_LOG_INFO, "ftmod_sangoma_ss7 monitor thread for span=%u started.\n", ftdmspan->span_id);
@@ -788,7 +788,7 @@ void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
/* check if this is the base circuit and send out the GRA
* we insure that this is the last circuit to have the state change queued
*/
sngss7_span_data_t *span = ftdmchan->span->mod_data;
sngss7_span_data_t *span = ftdmchan->span->signal_data;
if (span->rx_grs.circuit == sngss7_info->circuit->id) {
/* send out the GRA */
ft_to_sngss7_gra(ftdmchan);
@@ -1350,7 +1350,7 @@ static ftdm_status_t ftdm_sangoma_ss7_start(ftdm_span_t * span)
ftdmchan = span->channels[x];
if (ftdmchan->call_data == NULL) continue;
sngss7_info = ftdmchan->call_data;
sngss7_span = ftdmchan->span->mod_data;
sngss7_span = ftdmchan->span->signal_data;
sngss7_intf = &g_ftdm_sngss7_data.cfg.isupIntf[sngss7_info->circuit->infId];
@@ -1474,7 +1474,7 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_sangoma_ss7_span_config)
span->get_channel_sig_status = ftdm_sangoma_ss7_get_sig_status;
span->set_channel_sig_status = ftdm_sangoma_ss7_set_sig_status;
span->state_map = &sangoma_ss7_state_map;
span->mod_data = ss7_span_info;
span->signal_data = ss7_span_info;
/* set the flag to indicate that this span uses channel state change queues */
ftdm_set_flag (span, FTDM_SPAN_USE_CHAN_QUEUE);
@@ -619,7 +619,7 @@ void ft_to_sngss7_gra (ftdm_channel_t * ftdmchan)
{
SS7_FUNC_TRACE_ENTER (__FUNCTION__);
sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
sngss7_span_data_t *sngss7_span = ftdmchan->span->signal_data;
sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
SiStaEvnt gra;
@@ -663,7 +663,7 @@ void ft_to_sngss7_grs (ftdm_channel_t * ftdmchan)
{
SS7_FUNC_TRACE_ENTER (__FUNCTION__);
sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
sngss7_span_data_t *sngss7_span = ftdmchan->span->signal_data;
sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
SiStaEvnt grs;
@@ -696,7 +696,7 @@ void ft_to_sngss7_cgba(ftdm_channel_t * ftdmchan)
{
SS7_FUNC_TRACE_ENTER (__FUNCTION__);
sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
sngss7_span_data_t *sngss7_span = ftdmchan->span->signal_data;
sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
int x = 0;
@@ -745,7 +745,7 @@ void ft_to_sngss7_cgua(ftdm_channel_t * ftdmchan)
{
SS7_FUNC_TRACE_ENTER (__FUNCTION__);
sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
sngss7_span_data_t *sngss7_span = ftdmchan->span->signal_data;
sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
int x = 0;
@@ -794,7 +794,7 @@ void ft_to_sngss7_cgb(ftdm_channel_t * ftdmchan)
{
SS7_FUNC_TRACE_ENTER (__FUNCTION__);
sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
sngss7_span_data_t *sngss7_span = ftdmchan->span->signal_data;
sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
SiStaEvnt cgb;
int x = 0;
@@ -844,7 +844,7 @@ void ft_to_sngss7_cgu(ftdm_channel_t * ftdmchan)
{
SS7_FUNC_TRACE_ENTER (__FUNCTION__);
sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
sngss7_span_data_t *sngss7_span = ftdmchan->span->signal_data;
sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
SiStaEvnt cgu;
int x = 0;
@@ -513,7 +513,7 @@ ftdm_status_t check_if_rx_grs_started(ftdm_span_t *ftdmspan)
{
ftdm_channel_t *ftdmchan = NULL;
sngss7_chan_data_t *sngss7_info = NULL;
sngss7_span_data_t *sngss7_span = (sngss7_span_data_t *)ftdmspan->mod_data;
sngss7_span_data_t *sngss7_span = (sngss7_span_data_t *)ftdmspan->signal_data;
int i;
for ( i = sngss7_span->rx_grs.circuit; i < (sngss7_span->rx_grs.circuit + sngss7_span->rx_grs.range + 1); i++) {
@@ -575,7 +575,7 @@ ftdm_status_t check_if_rx_grs_processed(ftdm_span_t *ftdmspan)
{
ftdm_channel_t *ftdmchan = NULL;
sngss7_chan_data_t *sngss7_info = NULL;
sngss7_span_data_t *sngss7_span = (sngss7_span_data_t *)ftdmspan->mod_data;
sngss7_span_data_t *sngss7_span = (sngss7_span_data_t *)ftdmspan->signal_data;
int i;
int byte = 0;
int bit = 0;
@@ -667,7 +667,7 @@ ftdm_status_t check_if_rx_gra_started(ftdm_span_t *ftdmspan)
{
ftdm_channel_t *ftdmchan = NULL;
sngss7_chan_data_t *sngss7_info = NULL;
sngss7_span_data_t *sngss7_span = (sngss7_span_data_t *)ftdmspan->mod_data;
sngss7_span_data_t *sngss7_span = (sngss7_span_data_t *)ftdmspan->signal_data;
int i;
for (i = sngss7_span->rx_gra.circuit; i < (sngss7_span->rx_gra.circuit + sngss7_span->rx_gra.range + 1); i++) {
@@ -817,7 +817,7 @@ ftdm_status_t process_span_ucic(ftdm_span_t *ftdmspan)
{
ftdm_channel_t *ftdmchan = NULL;
sngss7_chan_data_t *sngss7_info = NULL;
sngss7_span_data_t *sngss7_span = (sngss7_span_data_t *)ftdmspan->mod_data;
sngss7_span_data_t *sngss7_span = (sngss7_span_data_t *)ftdmspan->signal_data;
int i;
for (i = sngss7_span->ucic.circuit; i < (sngss7_span->ucic.circuit + sngss7_span->ucic.range + 1); i++) {
@@ -869,7 +869,7 @@ ftdm_status_t clear_rx_grs_flags(sngss7_chan_data_t *sngss7_info)
ftdm_status_t clear_rx_grs_data(sngss7_chan_data_t *sngss7_info)
{
ftdm_channel_t *ftdmchan = sngss7_info->ftdmchan;
sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
sngss7_span_data_t *sngss7_span = ftdmchan->span->signal_data;
/* clear the rx_grs data fields */
memset(&sngss7_span->rx_grs, 0x0, sizeof(sngss7_group_data_t));
@@ -881,7 +881,7 @@ ftdm_status_t clear_rx_grs_data(sngss7_chan_data_t *sngss7_info)
ftdm_status_t clear_rx_gra_data(sngss7_chan_data_t *sngss7_info)
{
ftdm_channel_t *ftdmchan = sngss7_info->ftdmchan;
sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
sngss7_span_data_t *sngss7_span = ftdmchan->span->signal_data;
/* clear the rx_grs data fields */
memset(&sngss7_span->rx_gra, 0x0, sizeof(sngss7_group_data_t));
@@ -904,7 +904,7 @@ ftdm_status_t clear_tx_grs_flags(sngss7_chan_data_t *sngss7_info)
ftdm_status_t clear_tx_grs_data(sngss7_chan_data_t *sngss7_info)
{
ftdm_channel_t *ftdmchan = sngss7_info->ftdmchan;
sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
sngss7_span_data_t *sngss7_span = ftdmchan->span->signal_data;
/* clear the rx_grs data fields */
memset(&sngss7_span->tx_grs, 0x0, sizeof(sngss7_group_data_t));
@@ -2121,7 +2121,7 @@ static int ftmod_ss7_fill_in_circuits(sng_isupCkt_t *isupCkt)
ftdmchan->call_data = ss7_info;
/* prepare the timer structures */
ss7_info->t35.sched = ((sngss7_span_data_t *)isupCkt->span->mod_data)->sched;
ss7_info->t35.sched = ((sngss7_span_data_t *)isupCkt->span->signal_data)->sched;
ss7_info->t35.counter = 1;
ss7_info->t35.beat = g_ftdm_sngss7_data.cfg.isupIntf[isupCkt->isupInf].t35*100; /* beat is in ms, t35 is in 100ms */
ss7_info->t35.callback = handle_isup_t35;
@@ -117,28 +117,28 @@ static __inline__ int tdmv_api_wait_socket(ftdm_channel_t *ftdmchan, int timeout
#ifdef LIBSANGOMA_VERSION
int err;
uint32_t inflags = *flags;
uint32_t outflags = 0;
sangoma_wait_obj_t *sangoma_wait_obj = ftdmchan->mod_data;
uint32_t inflags = *flags;
uint32_t outflags = 0;
sangoma_wait_obj_t *sangoma_wait_obj = ftdmchan->io_data;
err = sangoma_waitfor(sangoma_wait_obj, inflags, &outflags, timeout);
*flags = 0;
if (err == SANG_STATUS_SUCCESS) {
*flags = outflags;
err = 1; /* ideally should be the number of file descriptors with something to read */
}
if (err == SANG_STATUS_APIPOLL_TIMEOUT) {
err = 0;
}
return err;
if (err == SANG_STATUS_SUCCESS) {
*flags = outflags;
err = 1; /* ideally should be the number of file descriptors with something to read */
}
if (err == SANG_STATUS_APIPOLL_TIMEOUT) {
err = 0;
}
return err;
#else
struct pollfd pfds[1];
int res;
int res;
memset(&pfds[0], 0, sizeof(pfds[0]));
pfds[0].fd = ftdmchan->sockfd;
pfds[0].events = *flags;
res = poll(pfds, 1, timeout);
memset(&pfds[0], 0, sizeof(pfds[0]));
pfds[0].fd = ftdmchan->sockfd;
pfds[0].events = *flags;
res = poll(pfds, 1, timeout);
*flags = 0;
if (pfds[0].revents & POLLERR) {
@@ -149,7 +149,7 @@ static __inline__ int tdmv_api_wait_socket(ftdm_channel_t *ftdmchan, int timeout
*flags = pfds[0].revents;
}
return res;
return res;
#endif
}
@@ -252,7 +252,7 @@ static unsigned wp_open_range(ftdm_span_t *span, unsigned spanno, unsigned start
ftdm_log(FTDM_LOG_ERROR, "failure create waitable object for s%dc%d\n", spanno, x);
continue;
}
chan->mod_data = sangoma_wait_obj;
chan->io_data = sangoma_wait_obj;
#endif
chan->physical_span_id = spanno;
@@ -541,7 +541,7 @@ static FIO_OPEN_FUNCTION(wanpipe_open)
static FIO_CLOSE_FUNCTION(wanpipe_close)
{
#ifdef LIBSANGOMA_VERSION
sangoma_wait_obj_t *waitobj = ftdmchan->mod_data;
sangoma_wait_obj_t *waitobj = ftdmchan->io_data;
/* kick any I/O waiters */
sangoma_wait_obj_signal(waitobj);
#endif
@@ -895,10 +895,10 @@ FIO_SPAN_POLL_EVENT_FUNCTION(wanpipe_poll_event)
for(i = 1; i <= span->chan_count; i++) {
ftdm_channel_t *ftdmchan = span->channels[i];
#ifdef LIBSANGOMA_VERSION
if (!ftdmchan->mod_data) {
if (!ftdmchan->io_data) {
continue; /* should never happen but happens when shutting down */
}
pfds[j] = ftdmchan->mod_data;
pfds[j] = ftdmchan->io_data;
inflags[j] = poll_events ? poll_events[j] : POLLPRI;
#else
memset(&pfds[j], 0, sizeof(pfds[j]));
@@ -1011,12 +1011,25 @@ static FIO_GET_ALARMS_FUNCTION(wanpipe_get_alarms)
}
alarms = tdm_api.wp_tdm_cmd.fe_alarms;
#endif
#ifdef WIN32
/* Temporary fix: in the current trunk of libsangoma, for BRI,
WAN_TE_BIT_ALARM_RED bit is set if the card is in disconnected state, but this has
not been ported to Windows-libsangoma yet */
if (FTDM_SPAN_IS_BRI(ftdmchan->span)) {
if (alarms) {
ftdmchan->alarm_flags |= FTDM_ALARM_RED;
alarms = 0;
}
}
#endif
ftdmchan->alarm_flags = FTDM_ALARM_NONE;
if (alarms & WAN_TE_BIT_ALARM_RED) {
ftdmchan->alarm_flags |= FTDM_ALARM_RED;
alarms &= ~WAN_TE_BIT_ALARM_RED;
}
if (alarms & WAN_TE_BIT_ALARM_AIS) {
ftdmchan->alarm_flags |= FTDM_ALARM_BLUE;
@@ -1166,6 +1179,11 @@ FIO_SPAN_NEXT_EVENT_FUNCTION(wanpipe_next_event)
char tmp_dtmf[2] = { tdm_api.wp_tdm_cmd.event.wp_tdm_api_event_dtmf_digit, 0 };
event_id = FTDM_OOB_NOOP;
if (tmp_dtmf[0] == 'f') {
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Ignoring wanpipe DTMF: %c, fax tones will be passed through!\n", tmp_dtmf[0]);
break;
}
if (tdm_api.wp_tdm_cmd.event.wp_tdm_api_event_dtmf_type == WAN_EC_TONE_PRESENT) {
ftdm_set_flag_locked(ftdmchan, FTDM_CHANNEL_MUTE);
}
@@ -1216,10 +1234,10 @@ FIO_SPAN_NEXT_EVENT_FUNCTION(wanpipe_next_event)
static FIO_CHANNEL_DESTROY_FUNCTION(wanpipe_channel_destroy)
{
#ifdef LIBSANGOMA_VERSION
if (ftdmchan->mod_data) {
if (ftdmchan->io_data) {
sangoma_wait_obj_t *sangoma_wait_obj;
sangoma_wait_obj = ftdmchan->mod_data;
ftdmchan->mod_data = NULL;
sangoma_wait_obj = ftdmchan->io_data;
ftdmchan->io_data = NULL;
sangoma_wait_obj_delete(&sangoma_wait_obj);
}
#endif
+15 -5
View File
@@ -658,6 +658,14 @@ static FIO_OPEN_FUNCTION(zt_open)
*/
static FIO_CLOSE_FUNCTION(zt_close)
{
if (ftdmchan->type == FTDM_CHAN_TYPE_B) {
int value = 0; /* disable audio mode */
if (ioctl(ftdmchan->sockfd, codes.AUDIOMODE, &value)) {
snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "%s", strerror(errno));
ftdm_log(FTDM_LOG_ERROR, "%s\n", ftdmchan->last_error);
return FTDM_FAIL;
}
}
return FTDM_SUCCESS;
}
@@ -867,7 +875,7 @@ static FIO_WAIT_FUNCTION(zt_wait)
{
int32_t inflags = 0;
int result;
struct pollfd pfds[1];
struct pollfd pfds[1];
if (*flags & FTDM_READ) {
inflags |= POLLIN;
@@ -882,13 +890,14 @@ static FIO_WAIT_FUNCTION(zt_wait)
}
memset(&pfds[0], 0, sizeof(pfds[0]));
pfds[0].fd = ftdmchan->sockfd;
pfds[0].events = inflags;
result = poll(pfds, 1, to);
memset(&pfds[0], 0, sizeof(pfds[0]));
pfds[0].fd = ftdmchan->sockfd;
pfds[0].events = inflags;
result = poll(pfds, 1, to);
*flags = 0;
if (pfds[0].revents & POLLERR) {
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_ERROR, "DAHDI device got POLLERR\n");
result = -1;
}
@@ -900,6 +909,7 @@ static FIO_WAIT_FUNCTION(zt_wait)
if (result < 0){
snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "Poll failed");
ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Failed to poll DAHDI device: %s\n", strerror(errno));
return FTDM_FAIL;
}
+9
View File
@@ -1240,6 +1240,9 @@ FT_DECLARE(void) ftdm_span_set_trunk_type(ftdm_span_t *span, ftdm_trunk_type_t t
*/
FT_DECLARE(ftdm_trunk_type_t) ftdm_span_get_trunk_type(const ftdm_span_t *span);
/*! \brief For display debugging purposes you can display this string which describes the trunk type of a span */
FT_DECLARE(const char *) ftdm_span_get_trunk_type_str(const ftdm_span_t *span);
/*!
* \brief Return the channel identified by the provided id
*
@@ -1259,6 +1262,12 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_set_caller_data(ftdm_channel_t *ftdmchan,
/*! \brief Get the caller data for a channel, typically you need this when receiving FTDM_SIGEVENT_START */
FT_DECLARE(ftdm_caller_data_t *) ftdm_channel_get_caller_data(ftdm_channel_t *channel);
/*! \brief Get current state of a channel */
FT_DECLARE(int) ftdm_channel_get_state(const ftdm_channel_t *ftdmchan);
/*! \brief Get last state of a channel */
FT_DECLARE(int) ftdm_channel_get_last_state(const ftdm_channel_t *ftdmchan);
/*! \brief For display debugging purposes you can display this string which describes the current channel internal state */
FT_DECLARE(const char *) ftdm_channel_get_state_str(const ftdm_channel_t *channel);
+2 -2
View File
@@ -70,7 +70,7 @@ extern "C" {
#define FT_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl
#define FT_DECLARE_DATA __declspec(dllimport)
#endif
#define FT_DECLARE_INLINE(type) type
#define FT_DECLARE_INLINE(type) extern __inline__ type /* why extern? see http://support.microsoft.com/kb/123768 */
#define EX_DECLARE_DATA __declspec(dllexport)
#else
#if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(HAVE_VISIBILITY)
@@ -82,7 +82,7 @@ extern "C" {
#define FT_DECLARE_NONSTD(type) type
#define FT_DECLARE_DATA
#endif
#define FT_DECLARE_INLINE(type) type __inline__
#define FT_DECLARE_INLINE(type) __inline__ type
#define EX_DECLARE_DATA
#endif
+8 -2
View File
@@ -222,6 +222,8 @@ extern "C" {
#define ftdm_is_dtmf(key) ((key > 47 && key < 58) || (key > 64 && key < 69) || (key > 96 && key < 101) || key == 35 || key == 42 || key == 87 || key == 119)
#define FTDM_SPAN_IS_BRI(x) ((x)->trunk_type == FTDM_TRUNK_BRI || (x)->trunk_type == FTDM_TRUNK_BRI_PTMP)
/*!
\brief Copy flags from one arbitrary object to another
\command dest the object to copy the flags to
@@ -422,7 +424,9 @@ struct ftdm_channel {
ftdm_fsk_data_state_t fsk;
uint8_t fsk_buf[80];
uint32_t ring_count;
void *mod_data;
/* Private I/O data. Do not touch unless you are an I/O module */
void *io_data;
/* Private signaling data. Do not touch unless you are a signaling module */
void *call_data;
struct ftdm_caller_data caller_data;
struct ftdm_span *span;
@@ -454,6 +458,7 @@ struct ftdm_span {
ftdm_trunk_type_t trunk_type;
ftdm_analog_start_type_t start_type;
ftdm_signal_type_t signal_type;
/* Private signaling data. Do not touch unless you are a signaling module */
void *signal_data;
fio_signal_cb_t signal_cb;
ftdm_event_t event_header;
@@ -471,7 +476,8 @@ struct ftdm_span {
ftdm_span_start_t start;
ftdm_span_stop_t stop;
ftdm_channel_sig_read_t sig_read;
void *mod_data;
/* Private I/O data per span. Do not touch unless you are an I/O module */
void *io_data;
char *type;
char *dtmf_hangup;
size_t dtmf_hangup_len;
@@ -176,10 +176,11 @@ typedef enum {
FTDM_SPAN_USE_CHAN_QUEUE = (1 << 6),
FTDM_SPAN_SUGGEST_CHAN_ID = (1 << 7),
FTDM_SPAN_USE_AV_RATE = (1 << 8),
FTDM_SPAN_PWR_SAVING = (1 << 9),
/* If you use this flag, you MUST call ftdm_span_trigger_signals to deliver the user signals
* after having called ftdm_send_span_signal(), which with this flag it will just enqueue the signal
* for later delivery */
FTDM_SPAN_USE_SIGNALS_QUEUE = (1 << 9),
FTDM_SPAN_USE_SIGNALS_QUEUE = (1 << 10),
} ftdm_span_flag_t;
/*! \brief Channel supported features */
+9 -3
View File
@@ -1,13 +1,13 @@
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
#
# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
# Written by Scott James Remnant, 2004.
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 4 lt~obsolete.m4
# serial 5 lt~obsolete.m4
# These exist entirely to fool aclocal when bootstrapping libtool.
#
@@ -77,7 +77,6 @@ m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])])
m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
@@ -90,3 +89,10 @@ m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
@@ -898,7 +898,7 @@ tryagain:
static void handle_call_loop_start(zap_span_t *span, sangomabc_connection_t *mcon, sangomabc_short_event_t *event)
{
zap_status_t res = ZAP_FAIL;
zap_state_change_result_t res = ZAP_FAIL;
zap_channel_t *zchan;
if (!(zchan = find_zchan(span, (sangomabc_short_event_t*)event, 0))) {
@@ -923,7 +923,7 @@ static void handle_call_loop_start(zap_span_t *span, sangomabc_connection_t *mco
static __inline__ void stop_loop(zap_channel_t *zchan)
{
zap_status_t res = ZAP_FAIL;
zap_state_change_result_t res = ZAP_STATE_CHANGE_FAIL;
zap_channel_command(zchan, ZAP_COMMAND_DISABLE_LOOP, NULL);
/* even when we did not sent a msg we set this flag to avoid sending call stop in the DOWN state handler */
zap_set_flag(zchan, SFLAG_SENT_FINAL_MSG);
@@ -1119,7 +1119,14 @@ ZIO_SPAN_NEXT_EVENT_FUNCTION(wanpipe_next_event)
event_id = ZAP_OOB_NOOP;
//zap_log(ZAP_LOG_WARNING, "%d:%d queue hardware dtmf %s %s\n", zchan->span_id, zchan->chan_id, tmp_dtmf,
//tdm_api.wp_tdm_cmd.event.wp_tdm_api_event_dtmf_type == WAN_EC_TONE_PRESENT ? "on" : "off");
//tdm_api.wp_tdm_cmd.event.wp_tdm_api_event_dtmf_type == WAN_EC_TONE_PRESENT ? "on" : "off");
if (tmp_dtmf[0] == 'f') {
if (zap_test_flag(zchan, ZAP_CHANNEL_INUSE)) {
zap_channel_queue_dtmf(zchan, tmp_dtmf);
}
break;
}
if (tdm_api.wp_tdm_cmd.event.wp_tdm_api_event_dtmf_type == WAN_EC_TONE_PRESENT) {
zap_set_flag_locked(zchan, ZAP_CHANNEL_MUTE);
}
+1 -1
View File
@@ -1 +1 @@
Mon May 31 09:47:08 EDT 2010
Wed Nov 3 13:53:34 EDT 2010
+14 -5
View File
@@ -1674,7 +1674,7 @@ int agent_set_params(nta_agent_t *agent, tagi_t *tags)
progress = 60 * 1000;
agent->sa_progress = progress;
if (server_rport > 2)
if (server_rport > 3)
server_rport = 1;
else if (server_rport < 0)
server_rport = 1;
@@ -3084,7 +3084,9 @@ int agent_check_request_via(nta_agent_t *agent,
rport = su_sprintf(msg_home(msg), "rport=%u", ntohs(from->su_port));
msg_header_replace_param(msg_home(msg), v->v_common, rport);
}
else if (agent->sa_server_rport == 2) {
else if (agent->sa_server_rport == 2 ||
(agent->sa_server_rport == 3 && sip && sip->sip_user_agent &&
sip->sip_user_agent->g_string && !strncasecmp(sip->sip_user_agent->g_string, "Polycom", 7))) {
rport = su_sprintf(msg_home(msg), "rport=%u", ntohs(from->su_port));
msg_header_replace_param(msg_home(msg), v->v_common, rport);
}
@@ -8174,9 +8176,12 @@ outgoing_send(nta_outgoing_t *orq, int retransmit)
if (orq->orq_method == sip_method_ack)
;
else if (!orq->orq_reliable)
outgoing_set_timer(orq, agent->sa_t1); /* Timer A/E */
else if (orq->orq_try_tcp_instead && !tport_is_connected(tp))
else if (!orq->orq_reliable) {
/* race condition on initial t1 timer timeout, set minimum initial timeout to 1000ms */
unsigned t1_timer = agent->sa_t1;
if (t1_timer < 1000) t1_timer = 1000;
outgoing_set_timer(orq, t1_timer); /* Timer A/E */
} else if (orq->orq_try_tcp_instead && !tport_is_connected(tp))
outgoing_set_timer(orq, agent->sa_t4); /* Timer N3 */
}
@@ -8660,6 +8665,10 @@ void outgoing_destroy(nta_outgoing_t *orq)
orq->orq_destroyed = 1;
orq->orq_callback = outgoing_default_cb;
orq->orq_magic = NULL;
if (orq->orq_method != sip_method_invite &&
orq->orq_method != sip_method_ack)
outgoing_terminate(orq);
}
/** @internal Outgoing transaction timer routine.
+67 -74
View File
@@ -38,7 +38,6 @@ struct stfu_queue {
uint32_t array_size;
uint32_t array_len;
uint32_t wr_len;
uint32_t last_index;
};
typedef struct stfu_queue stfu_queue_t;
@@ -47,10 +46,12 @@ struct stfu_instance {
struct stfu_queue b_queue;
struct stfu_queue *in_queue;
struct stfu_queue *out_queue;
uint32_t last_ts;
struct stfu_frame *last_frame;
uint32_t last_wr_ts;
uint32_t last_rd_ts;
uint32_t interval;
uint32_t miss_count;
uint8_t running;
uint32_t max_plc;
};
@@ -112,7 +113,7 @@ stfu_status_t stfu_n_resize(stfu_instance_t *i, uint32_t qlen)
return s;
}
stfu_instance_t *stfu_n_init(uint32_t qlen)
stfu_instance_t *stfu_n_init(uint32_t qlen, uint32_t max_plc)
{
struct stfu_instance *i;
@@ -125,6 +126,13 @@ stfu_instance_t *stfu_n_init(uint32_t qlen)
stfu_n_init_aqueue(&i->b_queue, qlen);
i->in_queue = &i->a_queue;
i->out_queue = &i->b_queue;
if (max_plc) {
i->max_plc = max_plc;
} else {
i->max_plc = qlen / 2;
}
return i;
}
@@ -135,10 +143,9 @@ void stfu_n_reset(stfu_instance_t *i)
i->in_queue->array_len = 0;
i->out_queue->array_len = 0;
i->out_queue->wr_len = 0;
i->out_queue->last_index = 0;
i->last_frame = NULL;
i->miss_count = 0;
i->last_ts = 0;
i->running = 0;
i->last_wr_ts = 0;
i->miss_count = 0;
i->interval = 0;
}
@@ -197,7 +204,7 @@ stfu_status_t stfu_n_add_data(stfu_instance_t *i, uint32_t ts, uint32_t pt, void
i->in_queue->array_len = 0;
i->out_queue->wr_len = 0;
i->out_queue->last_index = 0;
i->last_frame = NULL;
i->miss_count = 0;
if (stfu_n_process(i, i->out_queue) < 0) {
@@ -222,6 +229,8 @@ stfu_status_t stfu_n_add_data(stfu_instance_t *i, uint32_t ts, uint32_t pt, void
cplen = sizeof(frame->data);
}
i->last_rd_ts = ts;
memcpy(frame->data, data, cplen);
frame->pt = pt;
frame->ts = ts;
@@ -231,87 +240,71 @@ stfu_status_t stfu_n_add_data(stfu_instance_t *i, uint32_t ts, uint32_t pt, void
return STFU_IT_WORKED;
}
static int stfu_n_find_frame(stfu_queue_t *queue, uint32_t ts, stfu_frame_t **r_frame, uint32_t *index)
{
uint32_t i = 0;
stfu_frame_t *frame = NULL;
assert(r_frame);
assert(index);
*r_frame = NULL;
for(i = 0; i < queue->array_len; i++) {
frame = &queue->array[i];
if (frame->ts == ts) {
*r_frame = frame;
*index = i;
frame->was_read = 1;
return 1;
}
}
return 0;
}
stfu_frame_t *stfu_n_read_a_frame(stfu_instance_t *i)
{
uint32_t index, index2;
uint32_t index;
uint32_t should_have = 0;
stfu_frame_t *frame = NULL, *rframe = NULL;
stfu_frame_t *rframe = NULL;
if (((i->out_queue->wr_len == i->out_queue->array_len) || !i->out_queue->array_len)) {
return NULL;
}
if (i->running) {
should_have = i->last_ts + i->interval;
if (i->last_wr_ts) {
should_have = i->last_wr_ts + i->interval;
} else {
should_have = i->out_queue->array[0].ts;
}
for(index = 0; index < i->out_queue->array_len; index++) {
if (i->out_queue->array[index].was_read) {
continue;
}
frame = &i->out_queue->array[index];
if (frame->ts != should_have) {
unsigned int tried = 0;
for (index2 = 0; index2 < i->out_queue->array_len; index2++) {
if (i->out_queue->array[index2].was_read) {
continue;
}
tried++;
if (i->out_queue->array[index2].ts == should_have) {
rframe = &i->out_queue->array[index2];
i->out_queue->last_index = index2;
goto done;
}
}
for (index2 = 0; index2 < i->in_queue->array_len; index2++) {
if (i->in_queue->array[index2].was_read) {
continue;
}
tried++;
if (i->in_queue->array[index2].ts == should_have) {
rframe = &i->in_queue->array[index2];
goto done;
}
}
i->miss_count++;
if (i->miss_count > 10 || (i->in_queue->array_len == i->in_queue->array_size) || tried >= i->in_queue->array_size) {
i->running = 0;
i->interval = 0;
i->out_queue->wr_len = i->out_queue->array_size;
return NULL;
}
i->last_ts = should_have;
rframe = &i->out_queue->int_frame;
rframe->dlen = i->out_queue->array[i->out_queue->last_index].dlen;
/* poor man's plc.. Copy the last frame, but we flag it so you can use a better one if you wish */
memcpy(rframe->data, i->out_queue->array[i->out_queue->last_index].data, rframe->dlen);
rframe->ts = should_have;
i->out_queue->wr_len++;
i->running = 1;
return rframe;
} else {
rframe = &i->out_queue->array[index];
i->out_queue->last_index = index;
goto done;
}
}
done:
if (rframe) {
if (stfu_n_find_frame(i->out_queue, should_have, &rframe, &index) || stfu_n_find_frame(i->in_queue, should_have, &rframe, &index)) {
i->last_frame = rframe;
i->out_queue->wr_len++;
i->last_ts = rframe->ts;
i->last_wr_ts = rframe->ts;
rframe->was_read = 1;
i->running = 1;
i->miss_count = 0;
}
} else {
i->last_wr_ts = should_have;
rframe = &i->out_queue->int_frame;
if (i->last_frame && i->last_frame != rframe) {
rframe->dlen = i->last_frame->dlen;
/* poor man's plc.. Copy the last frame, but we flag it so you can use a better one if you wish */
memcpy(rframe->data, i->last_frame->data, rframe->dlen);
}
rframe->ts = should_have;
if (++i->miss_count > i->max_plc) {
i->interval = 0;
i->out_queue->wr_len = i->out_queue->array_size;
i->last_wr_ts = 0;
rframe = NULL;
}
}
return rframe;
}
+1 -1
View File
@@ -96,7 +96,7 @@ typedef struct {
void stfu_n_report(stfu_instance_t *i, stfu_report_t *r);
void stfu_n_destroy(stfu_instance_t **i);
stfu_instance_t *stfu_n_init(uint32_t qlen);
stfu_instance_t *stfu_n_init(uint32_t qlen, uint32_t max_plc);
stfu_status_t stfu_n_resize(stfu_instance_t *i, uint32_t qlen);
stfu_status_t stfu_n_add_data(stfu_instance_t *i, uint32_t ts, uint32_t pt, void *data, size_t datalen, int last);
stfu_frame_t *stfu_n_read_a_frame(stfu_instance_t *i);
+50 -2
View File
@@ -11,6 +11,9 @@
<Platform
Name="Win32"
/>
<Platform
Name="x64"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
@@ -33,7 +36,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\16000&quot; /C /D /Y /S /I"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -55,7 +58,52 @@
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\16000&quot; /C /D /Y /S /I"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="10"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="10"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\16000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
</Configurations>
@@ -11,6 +11,9 @@
<Platform
Name="Win32"
/>
<Platform
Name="x64"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
@@ -58,6 +61,51 @@
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\music\16000\*.*&quot; &quot;$(OutDir)\sounds\music\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="10"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\music\16000\*.*&quot; &quot;$(OutDir)\sounds\music\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="10"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\music\16000\*.*&quot; &quot;$(OutDir)\sounds\music\16000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
</Configurations>
<References>
</References>
+50 -2
View File
@@ -11,6 +11,9 @@
<Platform
Name="Win32"
/>
<Platform
Name="x64"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
@@ -33,7 +36,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\32000&quot; /C /D /Y /S /I"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -55,7 +58,52 @@
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\32000&quot; /C /D /Y /S /I"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="10"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="10"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\32000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\32000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
</Configurations>
@@ -11,6 +11,9 @@
<Platform
Name="Win32"
/>
<Platform
Name="x64"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
@@ -58,6 +61,51 @@
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\music\32000\*.*&quot; &quot;$(OutDir)\sounds\music\32000&quot; /C /D /Y /S /I"
/>
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="10"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\music\32000\*.*&quot; &quot;$(OutDir)\sounds\music\32000&quot; /C /D /Y /S /I"
/>
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="10"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\music\32000\*.*&quot; &quot;$(OutDir)\sounds\music\32000&quot; /C /D /Y /S /I"
/>
</Configuration>
</Configurations>
<References>
</References>
+50 -2
View File
@@ -11,6 +11,9 @@
<Platform
Name="Win32"
/>
<Platform
Name="x64"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
@@ -33,7 +36,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\8000&quot; /C /D /Y /S /I"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -55,7 +58,52 @@
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\8000&quot; /C /D /Y /S /I"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="10"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="10"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\voicemail\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\voicemail\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ivr\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ivr\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\conference\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\conference\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\time\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\time\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\digits\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\digits\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\ascii\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\ascii\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\misc\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\misc\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\currency\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\currency\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\phonetic-ascii\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;xcopy &quot;$(SolutionDir)libs\sounds\en\us\callie\directory\8000\*.*&quot; &quot;$(OutDir)\sounds\en\us\callie\directory\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
</Configurations>
@@ -11,6 +11,9 @@
<Platform
Name="Win32"
/>
<Platform
Name="x64"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
@@ -58,6 +61,51 @@
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\music\8000\*.*&quot; &quot;$(OutDir)\sounds\music\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="10"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\music\8000\*.*&quot; &quot;$(OutDir)\sounds\music\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="10"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(SolutionDir)libs\sounds\music\8000\*.*&quot; &quot;$(OutDir)\sounds\music\8000&quot; /C /D /Y /S /I&#x0D;&#x0A;"
/>
</Configuration>
</Configurations>
<References>
</References>
+2 -2
View File
@@ -172,7 +172,7 @@
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="."
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;HAVE_CONFIG_H;HAVE_STDARG_H;STDC_HEADERS"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;HAVE_CONFIG_H;HAVE_STDARG_H;STDC_HEADERS"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -236,7 +236,7 @@
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="."
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;HAVE_CONFIG_H;HAVE_STDARG_H;STDC_HEADERS"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;HAVE_CONFIG_H;HAVE_STDARG_H;STDC_HEADERS"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
+2 -2
View File
@@ -96,7 +96,7 @@
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;HAVE_CONFIG_H;HAVE_STDARG_H;STDC_HEADERS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;HAVE_CONFIG_H;HAVE_STDARG_H;STDC_HEADERS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<WarningLevel>Level3</WarningLevel>
@@ -110,7 +110,7 @@
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;HAVE_CONFIG_H;HAVE_STDARG_H;STDC_HEADERS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;HAVE_CONFIG_H;HAVE_STDARG_H;STDC_HEADERS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<WarningLevel>Level3</WarningLevel>
+4 -4
View File
@@ -32,7 +32,7 @@
>
<Tool
Name="VCPreBuildEventTool"
CommandLine="copy /Y $(ProjectDir)opensslconf.h $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h&#x0D;&#x0A;copy /Y $(ProjectDir)applink.c $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c&#x0D;&#x0A;copy /Y $(ProjectDir)buildinf.h $(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h&#x0D;&#x0A;copy /Y $(ProjectDir)libeay32.def $(ProjectDir)..\..\openssl-1.0.0a\libeay32.def&#x0D;&#x0A;if not exist &quot; $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h&quot; xcopy &quot;$(ProjectDir)\include\*.*&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\&quot; /C /Y /S&#x0D;&#x0A;"
CommandLine="copy /Y &quot;$(ProjectDir)opensslconf.h&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h&quot;&#x0D;&#x0A;copy /Y &quot;$(ProjectDir)applink.c&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c&quot;&#x0D;&#x0A;copy /Y &quot;$(ProjectDir)buildinf.h&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h&quot;&#x0D;&#x0A;copy /Y &quot;$(ProjectDir)libeay32.def&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\libeay32.def&quot;&#x0D;&#x0A;if not exist &quot; $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h&quot; xcopy &quot;$(ProjectDir)\include\*.*&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\&quot; /C /Y /S&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -116,7 +116,7 @@
>
<Tool
Name="VCPreBuildEventTool"
CommandLine="copy /Y $(ProjectDir)opensslconf.h $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h&#x0D;&#x0A;copy /Y $(ProjectDir)applink.c $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c&#x0D;&#x0A;copy /Y $(ProjectDir)buildinf.h $(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h&#x0D;&#x0A;copy /Y $(ProjectDir)libeay32.def $(ProjectDir)..\..\openssl-1.0.0a\libeay32.def&#x0D;&#x0A;if not exist &quot; $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h&quot; xcopy &quot;$(ProjectDir)\include\*.*&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\&quot; /C /Y /S&#x0D;&#x0A;"
CommandLine="copy /Y &quot;$(ProjectDir)opensslconf.h&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h&quot;&#x0D;&#x0A;copy /Y &quot;$(ProjectDir)applink.c&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c&quot;&#x0D;&#x0A;copy /Y &quot;$(ProjectDir)buildinf.h&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h&quot;&#x0D;&#x0A;copy /Y &quot;$(ProjectDir)libeay32.def&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\libeay32.def&quot;&#x0D;&#x0A;if not exist &quot; $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h&quot; xcopy &quot;$(ProjectDir)\include\*.*&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\&quot; /C /Y /S&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -201,7 +201,7 @@
>
<Tool
Name="VCPreBuildEventTool"
CommandLine="copy /Y $(ProjectDir)opensslconf.h $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h&#x0D;&#x0A;copy /Y $(ProjectDir)applink.c $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c&#x0D;&#x0A;copy /Y $(ProjectDir)buildinf.h $(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h&#x0D;&#x0A;copy /Y $(ProjectDir)libeay32.def $(ProjectDir)..\..\openssl-1.0.0a\libeay32.def&#x0D;&#x0A;if not exist &quot; $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h&quot; xcopy &quot;$(ProjectDir)\include\*.*&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\&quot; /C /Y /S&#x0D;&#x0A;"
CommandLine="copy /Y &quot;$(ProjectDir)opensslconf.h&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h&quot;&#x0D;&#x0A;copy /Y &quot;$(ProjectDir)applink.c&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c&quot;&#x0D;&#x0A;copy /Y &quot;$(ProjectDir)buildinf.h&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h&quot;&#x0D;&#x0A;copy /Y &quot;$(ProjectDir)libeay32.def&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\libeay32.def&quot;&#x0D;&#x0A;if not exist &quot; $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h&quot; xcopy &quot;$(ProjectDir)\include\*.*&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\&quot; /C /Y /S&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -286,7 +286,7 @@
>
<Tool
Name="VCPreBuildEventTool"
CommandLine="copy /Y $(ProjectDir)opensslconf.h $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h&#x0D;&#x0A;copy /Y $(ProjectDir)applink.c $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c&#x0D;&#x0A;copy /Y $(ProjectDir)buildinf.h $(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h&#x0D;&#x0A;copy /Y $(ProjectDir)libeay32.def $(ProjectDir)..\..\openssl-1.0.0a\libeay32.def&#x0D;&#x0A;if not exist &quot; $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h&quot; xcopy &quot;$(ProjectDir)\include\*.*&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\&quot; /C /Y /S&#x0D;&#x0A;"
CommandLine="copy /Y &quot;$(ProjectDir)opensslconf.h&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h&quot;&#x0D;&#x0A;copy /Y &quot;$(ProjectDir)applink.c&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c&quot;&#x0D;&#x0A;copy /Y &quot;$(ProjectDir)buildinf.h&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h&quot;&#x0D;&#x0A;copy /Y &quot;$(ProjectDir)libeay32.def&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\libeay32.def&quot;&#x0D;&#x0A;if not exist &quot; $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h&quot; xcopy &quot;$(ProjectDir)\include\*.*&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\&quot; /C /Y /S&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
+16 -16
View File
@@ -81,10 +81,10 @@
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<PreBuildEvent>
<Command>copy /Y $(ProjectDir)opensslconf.h $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h
copy /Y $(ProjectDir)applink.c $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c
copy /Y $(ProjectDir)buildinf.h $(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h
copy /Y $(ProjectDir)libeay32.def $(ProjectDir)..\..\openssl-1.0.0a\libeay32.def
<Command>copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h"
copy /Y "$(ProjectDir)applink.c" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c"
copy /Y "$(ProjectDir)buildinf.h" "$(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h"
copy /Y "$(ProjectDir)libeay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\libeay32.def"
if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$(ProjectDir)\include\*.*" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\" /C /Y /S
</Command>
</PreBuildEvent>
@@ -115,10 +115,10 @@ if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<PreBuildEvent>
<Command>copy /Y $(ProjectDir)opensslconf.h $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h
copy /Y $(ProjectDir)applink.c $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c
copy /Y $(ProjectDir)buildinf.h $(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h
copy /Y $(ProjectDir)libeay32.def $(ProjectDir)..\..\openssl-1.0.0a\libeay32.def
<Command>copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h"
copy /Y "$(ProjectDir)applink.c" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c"
copy /Y "$(ProjectDir)buildinf.h" "$(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h"
copy /Y "$(ProjectDir)libeay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\libeay32.def"
if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$(ProjectDir)\include\*.*" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\" /C /Y /S
</Command>
</PreBuildEvent>
@@ -151,10 +151,10 @@ if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<PreBuildEvent>
<Command>copy /Y $(ProjectDir)opensslconf.h $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h
copy /Y $(ProjectDir)applink.c $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c
copy /Y $(ProjectDir)buildinf.h $(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h
copy /Y $(ProjectDir)libeay32.def $(ProjectDir)..\..\openssl-1.0.0a\libeay32.def
<Command>copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h"
copy /Y "$(ProjectDir)applink.c" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c"
copy /Y "$(ProjectDir)buildinf.h" "$(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h"
copy /Y "$(ProjectDir)libeay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\libeay32.def"
if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$(ProjectDir)\include\*.*" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\" /C /Y /S
</Command>
</PreBuildEvent>
@@ -185,10 +185,10 @@ if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<PreBuildEvent>
<Command>copy /Y $(ProjectDir)opensslconf.h $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h
copy /Y $(ProjectDir)applink.c $(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c
copy /Y $(ProjectDir)buildinf.h $(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h
copy /Y $(ProjectDir)libeay32.def $(ProjectDir)..\..\openssl-1.0.0a\libeay32.def
<Command>copy /Y "$(ProjectDir)opensslconf.h" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\opensslconf.h"
copy /Y "$(ProjectDir)applink.c" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\applink.c"
copy /Y "$(ProjectDir)buildinf.h" "$(ProjectDir)..\..\openssl-1.0.0a\crypto\buildinf.h"
copy /Y "$(ProjectDir)libeay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\libeay32.def"
if not exist "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\e_os.h" xcopy "$(ProjectDir)\include\*.*" "$(ProjectDir)..\..\openssl-1.0.0a\include\openssl\" /C /Y /S
</Command>
</PreBuildEvent>
+4 -4
View File
@@ -29,7 +29,7 @@
>
<Tool
Name="VCPreBuildEventTool"
CommandLine="copy /Y $(ProjectDir)ssleay32.def $(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def"
CommandLine="copy /Y &quot;$(ProjectDir)ssleay32.def&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def&quot;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -108,7 +108,7 @@
>
<Tool
Name="VCPreBuildEventTool"
CommandLine="copy /Y $(ProjectDir)ssleay32.def $(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def"
CommandLine="copy /Y &quot;$(ProjectDir)ssleay32.def&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def&quot;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -188,7 +188,7 @@
>
<Tool
Name="VCPreBuildEventTool"
CommandLine="copy /Y $(ProjectDir)ssleay32.def $(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def"
CommandLine="copy /Y &quot;$(ProjectDir)ssleay32.def&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def&quot;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -268,7 +268,7 @@
>
<Tool
Name="VCPreBuildEventTool"
CommandLine="copy /Y $(ProjectDir)ssleay32.def $(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def"
CommandLine="copy /Y &quot;$(ProjectDir)ssleay32.def&quot; &quot;$(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def&quot;"
/>
<Tool
Name="VCCustomBuildTool"
+4 -4
View File
@@ -80,7 +80,7 @@
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<PreBuildEvent>
<Command>copy /Y $(ProjectDir)ssleay32.def $(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def</Command>
<Command>copy /Y "$(ProjectDir)ssleay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def"</Command>
</PreBuildEvent>
<ClCompile>
<AdditionalOptions>/Gs0 %(AdditionalOptions)</AdditionalOptions>
@@ -107,7 +107,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<PreBuildEvent>
<Command>copy /Y $(ProjectDir)ssleay32.def $(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def</Command>
<Command>copy /Y "$(ProjectDir)ssleay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def"</Command>
</PreBuildEvent>
<ClCompile>
<AdditionalOptions>/Gs0 %(AdditionalOptions)</AdditionalOptions>
@@ -134,7 +134,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<PreBuildEvent>
<Command>copy /Y $(ProjectDir)ssleay32.def $(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def</Command>
<Command>copy /Y "$(ProjectDir)ssleay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def"</Command>
</PreBuildEvent>
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
@@ -164,7 +164,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<PreBuildEvent>
<Command>copy /Y $(ProjectDir)ssleay32.def $(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def</Command>
<Command>copy /Y "$(ProjectDir)ssleay32.def" "$(ProjectDir)..\..\openssl-1.0.0a\ssleay32.def"</Command>
</PreBuildEvent>
<Midl>
<TargetEnvironment>X64</TargetEnvironment>

Some files were not shown because too many files have changed in this diff Show More