Merge branch 'master' into smgmaster

Conflicts:
	build/modules.conf.in
	libs/esl/fs_cli.c
This commit is contained in:
Moises Silva 2011-12-17 17:25:36 -05:00
commit 3eef66d6c1
305 changed files with 15668 additions and 6219 deletions

1
.gitignore vendored
View File

@ -83,6 +83,7 @@ core.*
/build/config/compile
/build/config/config.guess
/build/config/config.sub
/build/config/depcomp
/build/config/install-sh
/build/config/ltmain.sh

View File

@ -466,6 +466,8 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dingaling", "src\mod\endpoints\mod_dingaling\mod_dingaling.2008.vcproj", "{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}"
ProjectSection(ProjectDependencies) = postProject
{1906D736-08BD-4EE1-924F-B536249B9A54} = {1906D736-08BD-4EE1-924F-B536249B9A54}
{D331904D-A00A-4694-A5A3-FCFF64AB5DBE} = {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}
{B4B62169-5AD4-4559-8707-3D933AC5DB39} = {B4B62169-5AD4-4559-8707-3D933AC5DB39}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3}

View File

@ -716,6 +716,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ldns", "libs\win32\ldns\ldn
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_callcenter", "src\mod\applications\mod_callcenter\mod_callcenter.2010.vcxproj", "{47886A6C-CCA6-4F9F-A7D4-F97D06FB2B1A}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_blacklist", "src\mod\applications\mod_blacklist\mod_blacklist.2010.vcxproj", "{50AAC2CE-BFC9-4912-87CC-C6381850D735}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
All|Win32 = All|Win32
@ -3665,6 +3667,19 @@ Global
{47886A6C-CCA6-4F9F-A7D4-F97D06FB2B1A}.Release|x64.ActiveCfg = Release|x64
{47886A6C-CCA6-4F9F-A7D4-F97D06FB2B1A}.Release|x64 Setup.ActiveCfg = Release|x64
{47886A6C-CCA6-4F9F-A7D4-F97D06FB2B1A}.Release|x86 Setup.ActiveCfg = Release|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.All|Win32.ActiveCfg = Release|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.All|x64.ActiveCfg = Release|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.All|x64.Build.0 = Release|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.All|x64 Setup.ActiveCfg = Release|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.All|x86 Setup.ActiveCfg = Release|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.Debug|Win32.ActiveCfg = Debug|Win32
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.Debug|x64.ActiveCfg = Debug|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.Debug|x64 Setup.ActiveCfg = Debug|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.Debug|x86 Setup.ActiveCfg = Debug|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.Release|Win32.ActiveCfg = Release|Win32
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.Release|x64.ActiveCfg = Release|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.Release|x64 Setup.ActiveCfg = Release|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.Release|x86 Setup.ActiveCfg = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -3714,6 +3729,7 @@ Global
{B889A18E-70A7-44B5-B2C9-47798D4F43B3} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{47886A6C-CCA6-4F9F-A7D4-F97D06FB2B1A} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{50AAC2CE-BFC9-4912-87CC-C6381850D735} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{07113B25-D3AF-4E04-BA77-4CD1171F022C} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4}
{A27CCA23-1541-4337-81A4-F0A6413078A0} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4}
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4}

View File

@ -1,6 +1,6 @@
EXTRA_DIST =
SUBDIRS = . src
AUTOMAKE_OPTS = foreign
AUTOMAKE_OPTIONS = foreign
NAME = freeswitch
AM_CFLAGS = $(SWITCH_AM_CFLAGS) $(SWITCH_ANSI_CFLAGS)
@ -106,6 +106,7 @@ CORE_CFLAGS += -I$(switch_srcdir)/libs/spandsp/src -I$(switch_srcdir)/libs/tiff-
CORE_LIBS = libs/apr-util/libaprutil-1.la libs/apr/libapr-1.la
CORE_LIBS += libs/sqlite/libsqlite3.la libs/pcre/libpcre.la libs/speex/libspeex/libspeexdsp.la
if ENABLE_SRTP
CORE_CFLAGS += -DENABLE_SRTP
CORE_LIBS += libs/srtp/libsrtp.la
@ -128,13 +129,17 @@ if ENABLE_TIMERFD_WRAPPER
CORE_CFLAGS += -DTIMERFD_WRAP
endif
if CURL_BUILTIN
CORE_LIBS += libs/curl/lib/libcurl.la
endif
##
## libfreeswitch
##
lib_LTLIBRARIES = libfreeswitch.la
libfreeswitch_la_CFLAGS = $(CORE_CFLAGS) $(AM_CFLAGS)
libfreeswitch_la_LDFLAGS = -version-info 1:0:0 $(AM_LDFLAGS) $(PLATFORM_CORE_DEPLIBS)
libfreeswitch_la_LIBADD = $(CORE_LIBS)
libfreeswitch_la_LDFLAGS = -version-info 1:0:0 $(AM_LDFLAGS) $(PLATFORM_CORE_LDFLAGS)
libfreeswitch_la_LIBADD = $(CORE_LIBS) $(PLATFORM_CORE_LIBS)
libfreeswitch_la_DEPENDENCIES = $(BUILT_SOURCES)
if HAVE_ODBC
@ -244,6 +249,7 @@ libfreeswitch_la_SOURCES = \
src/switch_pcm.c \
src/switch_profile.c \
src/switch_json.c \
src/switch_curl.c \
libs/stfu/stfu.c \
libs/libteletone/src/libteletone_detect.c \
libs/libteletone/src/libteletone_generate.c \
@ -294,21 +300,32 @@ 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 -lcrypt -lrt
fs_encode_CFLAGS = $(AM_CFLAGS)
fs_encode_LDFLAGS = $(AM_LDFLAGS)
fs_encode_LDADD = libfreeswitch.la $(CORE_LIBS)
if HAVE_ODBC
fs_encode_LDADD += $(ODBC_LIB_FLAGS)
endif
##
## tone2wav ()
##
tone2wav_SOURCES = src/tone2wav.c
tone2wav_CFLAGS = $(AM_CFLAGS)
tone2wav_LDFLAGS = $(AM_LDFLAGS) $(CORE_LIBS)
tone2wav_LDADD = libfreeswitch.la -lcrypt -lrt
tone2wav_LDFLAGS = $(AM_LDFLAGS)
tone2wav_LDADD = libfreeswitch.la $(CORE_LIBS)
if HAVE_ODBC
tone2wav_LDADD += $(ODBC_LIB_FLAGS)
endif
##
## fs_ivrd ()
@ -332,6 +349,10 @@ freeswitch_CFLAGS += -Ilibs/libedit/src -DSWITCH_HAVE_LIBEDIT
freeswitch_LDADD += libs/libedit/src/.libs/libedit.a
endif
if HAVE_ODBC
freeswitch_LDADD += $(ODBC_LIB_FLAGS)
endif
##
## Scripts
@ -415,6 +436,13 @@ src/include/switch_version.h: src/include/switch_version.h.in .version $(libfree
libs/libedit/src/.libs/libedit.a:
cd libs/libedit && $(MAKE)
libs/curl/Makefile:
cd libs/curl && sh ./configure.gnu --prefix=$(prefix)
libs/curl/lib/libcurl.la: libs/curl libs/curl/Makefile
@cd libs/curl && $(MAKE)
@$(TOUCH_TARGET)
libs/apr/libapr-1.la: libs/apr libs/apr/.update
@cd libs/apr && $(MAKE)
@$(TOUCH_TARGET)
@ -560,7 +588,9 @@ libs/openzap/Makefile:
cd libs/openzap && autoconf
cd libs/openzap && ./configure
update-clean: clean modwipe uninstall libs/openzap/Makefile python-reconf
reinstall: modwipe uninstall install
update-clean: clean libs/openzap/Makefile python-reconf
cd libs/sofia-sip && $(MAKE) clean
cd libs/openzap && $(MAKE) clean
cd libs/portaudio && $(MAKE) clean
@ -584,6 +614,11 @@ speex-reconf:
cd libs/speex && ./config.status --recheck
cd libs/speex && ./config.status
sndfile-reconf:
cd libs/libsndfile && autoreconf
cd libs/libsndfile && ./config.status --recheck
cd libs/libsndfile && ./config.status
tiff-reconf:
cd libs/tiff-3.8.2 && autoreconf -fi
cd libs/tiff-3.8.2 && sh ./configure.gnu
@ -633,14 +668,14 @@ cluecon:
current: cluecon update-clean is-scm
$(MAKE) update
$(MAKE) all
$(MAKE) install
$(MAKE) reinstall
installall: current
speedy-current: update-clean is-scm
$(MAKE) update
$(MAKE) speedy-sure
$(MAKE) install
$(MAKE) reinstall
wayclean: clean
@ -661,7 +696,7 @@ modclean: $(switch_builddir)/modules.conf
@cd src/mod && $(MAKE) $(AM_MAKEFLAGS) clean
modwipe:
rm -f $(prefix)/$(modulesdir)/*.${DYNAMIC_LIB_EXTEN}
rm -f $(modulesdir)/*.${DYNAMIC_LIB_EXTEN}
dox:
cd docs && doxygen $(PWD)/docs/Doxygen.conf

1658
build/config/config.sub vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,58 +1,46 @@
#!/bin/sh
bz="false"
BUNZIP=/usr/bin/bunzip2
TAR=@TAR@
ZCAT=@ZCAT@
BZIP=@BZIP@
XZ=@XZ@
WGET=@WGET@
CURL=@CURL@
if [ -f "$WGET" ] ; then
if [ -f "$WGET" ]; then
DOWNLOAD_CMD=$WGET
else
if [ -f "$CURL" ] ; then
DOWNLOAD_CMD="$CURL -O"
fi
elif [ -f "$CURL" ]; then
DOWNLOAD_CMD="$CURL -O"
fi
base=http://files.freeswitch.org/downloads/libs/
tarfile=$1
url=`echo $tarfile | grep "://"`
if [ `echo $tarfile | grep bz2` ] ; then
bz="true"
UNZIPPER=$BUNZIP
else
UNZIPPER=$ZCAT
fi
if [ ! -z $url ] ; then
base=$tarfile/
if [ -n "`echo $1 | grep '://'`" ]; then
base=$1/
tarfile=$2
else
base=http://files.freeswitch.org/downloads/libs/
tarfile=$1
fi
if [ ! -d $tarfile ] ; then
uncompressed=`echo $tarfile | sed 's/\(\(\.tar\.gz\|\.tar\.bz2\|\.tar\.xz\)\|\(\.tgz\|\.tbz2\)\)$//'`
if [ $bz = "true" ] ; then
uncompressed=`echo $tarfile | sed "s/\.tar\.bz2//g"`
else
uncompressed=`echo $tarfile | sed "s/\.tar\.gz//g"`
uncompressed=`echo $uncompressed | sed "s/\.tgz//g"`
fi
case `echo $tarfile | sed 's/.*\.\([^.]\+\)$/\1/'` in
bz2|tbz2) UNZIPPER=$BZIP ;;
xz) UNZIPPER=$XZ ;;
gz|tgz|*) UNZIPPER=$ZCAT ;;
esac
if [ ! -f $tarfile ] ; then
rm -fr $uncompressed
$DOWNLOAD_CMD $base$tarfile
if [ ! -f $tarfile ] ; then
echo cannot find $tarfile
exit 1
fi
if [ ! -d $tarfile ]; then
if [ ! -f $tarfile ]; then
rm -fr $uncompressed
$DOWNLOAD_CMD $base$tarfile
if [ ! -f $tarfile ]; then
echo cannot find $tarfile
exit 1
fi
fi
if [ ! -d $uncompressed ] ; then
$UNZIPPER -c -d $tarfile | $TAR xf -
if [ ! -d $uncompressed ]; then
$UNZIPPER -c -d $tarfile | $TAR -xf -
fi
fi
exit 0

View File

@ -80,20 +80,18 @@ TOUCH_TARGET=@TOUCH_TARGET@
MAKE_OPTS = `test -n "$(VERBOSE)" || echo -s`
RECURSE_MODNAME=`pwd | sed -e 's|^.*/||'`
RECURSE_SOURCEFILE=`if test -f "$$modname.cpp" -o -f "$(MODDIR)/$$modname.cpp"; then echo "$$modname.cpp"; else echo "$$modname.c"; fi`
RECURSE_OUR_DEPS=`test -z "$(WANT_CURL)" || if test ! -z "$(LIBCURL_DEPS)"; then echo $(CURLLA); fi `
RECURSE_OUR_CFLAGS=`test -z "$(WANT_CURL)" || echo $(LIBCURL_CPPFLAGS) ; $(LOCAL_INSERT_CFLAGS) `
RECURSE_OUR_LDFLAGS=`test -z "$(WANT_CURL)" || echo $(LIBCURL) ; $(LOCAL_INSERT_LDFLAGS) `
RECURSE_OUR_CFLAGS=` $(LOCAL_INSERT_CFLAGS) `
RECURSE_OUR_LDFLAGS=` $(LOCAL_INSERT_LDFLAGS) `
RECURSE_MODDIR=`if test -z $(MODDIR); then pwd | sed -e 's|$(switch_builddir)|$(switch_srcdir)|'; else echo $(MODDIR); fi`
RECURSE_MAKE=+modname="$(RECURSE_MODNAME)" ; \
sourcefile="$(RECURSE_SOURCEFILE)" ; \
osarch=`uname -s` ; \
ourdefs="$(RECURSE_OUR_DEPS)" ; \
ourcflags="$(RECURSE_OUR_CFLAGS)" ; \
ourldflags="$(RECURSE_OUR_LDFLAGS)" ; \
insertobjs="`$(LOCAL_INSERT_OBJS)`" ; \
moddir="$(RECURSE_MODDIR)" ; \
$(MAKE) $(MAKE_OPTS) MODNAME="$$modname" SOURCEFILE="$$sourcefile" MODDIR="$$moddir" \
OUR_DEPS="$$ourdefs" OUR_CFLAGS="$$ourcflags" OUR_LDFLAGS="$$ourldflags" OUR_OBJS="$$insertobjs"
OUR_CFLAGS="$$ourcflags" OUR_LDFLAGS="$$ourldflags" OUR_OBJS="$$insertobjs"
all: Makefile
@$(RECURSE_MAKE) all-modules || exit 1
@ -136,7 +134,7 @@ LINK_OUTPUT_REDIR=> .libs/$(MODNAME).log || error="yes" ; \
exit 1 ;\
fi
$(MODNAME).$(LIBTOOL_LIB_EXTEN): $(LIBS) $(LOCAL_LIBADD) $(OUR_DEPS) $(LOCAL_OBJS) $(OUR_OBJS) $(MODDIR)/$(SOURCEFILE) $(MODNAME).lo
$(MODNAME).$(LIBTOOL_LIB_EXTEN): $(LIBS) $(LOCAL_LIBADD) $(LOCAL_OBJS) $(OUR_OBJS) $(MODDIR)/$(SOURCEFILE) $(MODNAME).lo
@echo Creating $@...
@test -d .libs || mkdir .libs
@error="";\

View File

@ -29,6 +29,13 @@
<profiles>
<!--If no profile is specified it will default to "default"-->
<profile name="default">
<!-- Directory to drop CDR's
'auto' means $PREFIX/logs/conference_cdr/<confernece_uuid>.cdr.xml
a non-absolute path means $PREFIX/logs/<value>/<confernece_uuid>.cdr.xml
absolute path means <value>/<confernece_uuid>.cdr.xml
-->
<!-- <param name="cdr-log-dir" value="auto"/> -->
<!-- Domain (for presence) -->
<param name="domain" value="$${domain}"/>
<!-- Sample Rate-->
@ -45,6 +52,8 @@
<!-- Name of the caller control group to use for this profile -->
<!-- <param name="caller-controls" value="some name"/> -->
<!-- Name of the caller control group to use for the moderator in this profile -->
<!-- <param name="moderator-controls" value="some name"/> -->
<!-- TTS Engine to use -->
<!--<param name="tts-engine" value="cepstral"/>-->
<!-- TTS Voice to use -->
@ -87,6 +96,9 @@
<param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/>
<!-- Conference pin -->
<!--<param name="pin" value="12345"/>-->
<!--<param name="moderator-pin" value="54321"/>-->
<!-- Max number of times the user can be prompted for PIN -->
<!--<param name="pin-retries" value="3"/>-->
<!-- Default Caller ID Name for outbound calls -->
<param name="caller-id-name" value="$${outbound_caller_name}"/>
<!-- Default Caller ID Number for outbound calls -->
@ -100,6 +112,12 @@
<!--
<param name="auto-record" value="$${recordings_dir}/${conference_name}_${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
-->
<!-- IVR digit machine timeouts -->
<!-- How much to wait between DTMF digits to match caller-controls -->
<!-- <param name="ivr-dtmf-timeout" value="500"/> -->
<!-- How much to wait for the first DTMF, 0 forever -->
<!-- <param name="ivr-input-timeout" value="0" /> -->
</profile>
<profile name="wideband">

View File

@ -0,0 +1,8 @@
<configuration name="http_cache.conf" description="HTTP GET cache">
<settings>
<param name="max-urls" value="10000"/>
<param name="location" value="$${base_dir}/http_cache"/>
<param name="default-max-age" value="86400"/>
</settings>
</configuration>

View File

@ -97,6 +97,7 @@
<!-- Timers -->
<!-- <load module="mod_timerfd"/> -->
<!-- <load module="mod_posix_timer"/> -->
<!-- Languages -->
<load module="mod_spidermonkey"/>

View File

@ -47,11 +47,7 @@
<!-- OSP service type, voice or npquery -->
<param name="service-type" value="voice"/>
<!-- Max number of destinations -->
<param name="max-destinations" value="5"/>
<!-- SIP features -->
<!-- Add "user=phone" URI parameter in outbound SIP messages -->
<param name="user-phone" value="disabled"/>
<param name="max-destinations" value="12"/>
</profile>
</profiles>
</configuration>

View File

@ -0,0 +1,7 @@
<configuration name="presence_map.conf" description="PRESENCE MAP">
<domains>
<domain name="$${domain}">
<exten regex="3\d+" proto="conf"/>
</domain>
</domains>
</configuration>

View File

@ -1,5 +1,40 @@
<configuration name="spandsp.conf" description="Tone detector descriptors">
<descriptors>
<configuration name="spandsp.conf" description="SpanDSP config">
<modem-settings>
<!--
total-modems set to N will create that many soft-modems.
If you use them with Hylafax you need the following for each one numbered 0..N:
1) A line like this in /etc/inittab:
f0:2345:respawn:/usr/lib/fax/faxgetty /dev/FS0
2) copy conf/config.FS0 to /var/spool/hylafax/etc (or wherver the appropriate dir is on your system)
Subsequent modem configs would incrment the 0 to 1 and so on.
-->
<param name="total-modems" value="0"/>
<!-- Default context and dialplan to use on inbound calls from the modems -->
<param name="context" value="default"/>
<param name="dialplan" value="XML"/>
<!-- Extra tracing for debugging -->
<param name="verbose" value="false"/>
</modem-settings>
<fax-settings>
<param name="use-ecm" value="true"/>
<param name="verbose" value="false"/>
<param name="disable-v17" value="false"/>
<param name="ident" value="SpanDSP Fax Ident"/>
<param name="header" value="SpanDSP Fax Header"/>
<param name="spool-dir" value="/tmp"/>
<param name="file-prefix" value="faxrx"/>
</fax-settings>
<descriptors>
<!-- These tones are defined in Annex to ITU Operational Bulletin No. 781 - 1.II.2003 -->
<!-- Various Tones Used in National Networks (According to ITU-T Recommendation E.180)(03/1998) -->

View File

@ -27,7 +27,7 @@
<!-- true or false if a leg files are prefixed "a_" -->
<param name="prefix-a-leg" value="true"/>
<!-- encode the post data may be 'true' for url encoding, 'false' for no encoding or 'base64' for base64 encoding -->
<!-- encode the post data may be 'true' for url encoding, 'false' for no encoding, 'base64' for base64 encoding or 'textxml' for text/xml -->
<param name="encode" value="true"/>
<!-- optional: set to true to disable Expect: 100-continue lighttpd requires this setting -->

78
conf/config.FS0 Normal file
View File

@ -0,0 +1,78 @@
CountryCode: 1
AreaCode: 800
FAXNumber: +1.800.555.1212
LongDistancePrefix: 1
InternationalPrefix: 011
DialStringRules: etc/dialrules
ServerTracing: 0xFFF
SessionTracing: 0xFFF
RecvFileMode: 0600
LogFileMode: 0600
DeviceMode: 0600
RingsBeforeAnswer: 1
SpeakerVolume: off
GettyArgs: "-h %l dx_%s"
LocalIdentifier: "FS"
TagLineFont: etc/lutRS18.pcf
TagLineFormat: "From %%l|%c|Page %%P of %%T"
MaxRecvPages: 200
#
#
# Modem-related stuff: should reflect modem command interface
# and hardware connection/cabling (e.g. flow control).
#
ModemType: Class1 # use this to supply a hint
#
# Enabling this will use the hfaxd-protocol to set Caller*ID
#
#ModemSetOriginCmd: AT+VSID="%s","%d"
#
# If "glare" during initialization becomes a problem then take
# the modem off-hook during initialization, and then place it
# back on-hook when done.
#
#ModemResetCmds: "ATH1\nAT+VCID=1" # enables CallID display
#ModemReadyCmds: ATH0
Class1AdaptRecvCmd: AT+FAR=1
Class1TMConnectDelay: 400 # counteract quick CONNECT response
#
# If you have trouble with V.17 receiving or sending,
# you may want to enable one of these, respectively.
#
#Class1RMQueryCmd: "!24,48,72,96" # enable this to disable V.17 receiving
#Class1TMQueryCmd: "!24,48,72,96" # enable this to disable V.17 sending
#
# You'll likely want Caller*ID display (also displays DID) enabled.
#
ModemResetCmds: AT+VCID=1 # enables CallID display
#
# The pty does not support changing parity.
#
PagerTTYParity: none
#
# If you are "missing" Caller*ID data on some calls (but not all)
# and if you do not have adequate glare protection you may want to
# not answer based on RINGs, but rather enable the CallIDAnswerLength
# for NDID, disable AT+VCID=1 and do this:
#
#RingsBeforeAnswer: 0
#ModemRingResponse: AT+VRID=1
# Uncomment DATE and TIME if you really want them, but you probably don't.
#CallIDPattern: "DATE="
#CallIDPattern: "TIME="
CallIDPattern: "NMBR="
CallIDPattern: "NAME="
CallIDPattern: "ANID="
#CallIDPattern: "USER=" # username provided by call
#CallIDPattern: "PASS=" # password provided by call
#CallIDPattern: "CDID=" # DID context in call
CallIDPattern: "NDID="
#CallIDAnswerLength: 4

View File

@ -181,7 +181,7 @@
<extension name="eavesdrop">
<condition field="destination_number" expression="^88(\d{4})$|^\*0(.*)$">
<action application="answer"/>
<action application="eavesdrop" data="${hash(select/${domain_name}-spymap/$1)}"/>
<action application="eavesdrop" data="${hash(select/${domain_name}-spymap/$1$2)}"/>
</condition>
</extension>
@ -244,7 +244,6 @@
-->
<extension name="Local_Extension">
<condition field="destination_number" expression="^(10[01][0-9])$">
<action application="set" data="dialed_extension=$1"/>
<action application="export" data="dialed_extension=$1"/>
<!-- bind_meta_app can have these args <key> [a|b|ab] [a|b|o|s] <app> -->
<action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/>
@ -260,9 +259,9 @@
<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="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/>
<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}"/>
<action application="bridge" data="user/${dialed_extension}@${domain_name}"/>

View File

@ -82,4 +82,25 @@
</input>
</macro>
<macro name="screen_confirm">
<input pattern="^(.*)$">
<match>
<action function="sleep" data="500"/>
<action function="play-file" data="ivr/ivr-call_from.wav"/>
<action function="sleep" data="250"/>
<!-- Note, be sure to pass in the full path to the file or else!! -->
<action function="play-file" data="$1"/>
<action function="sleep" data="500"/>
<action function="play-file" data="ivr/ivr-accept_reject_voicemail.wav"/>
<action function="sleep" data="1500"/>
<action function="play-file" data="ivr/ivr-call_from.wav"/>
<action function="sleep" data="250"/>
<action function="play-file" data="$1"/>
<action function="sleep" data="500"/>
<action function="play-file" data="ivr/ivr-accept_reject_voicemail.wav"/>
<action function="sleep" data="1500"/>
</match>
</input>
</macro>
</include>

View File

@ -365,7 +365,7 @@
<macro name="voicemail_say_date">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
<action function="say" data="$1" method="pronounced" type="short_date_time"/>
</match>
</input>
</macro>

View File

@ -23,6 +23,8 @@
<param name="sip-trace" value="no"/>
<param name="sip-capture" value="no"/>
<param name="rfc2833-pt" value="101"/>
<!-- RFC 5626 : Send reg-id and sip.instance -->
<!--<param name="enable-rfc-5626" value="true"/> -->
<param name="sip-port" value="$${external_sip_port}"/>
<param name="dialplan" value="XML"/>
<param name="context" value="public"/>

View File

@ -31,4 +31,8 @@
<!--send an options ping every x seconds, failure will unregister and/or mark it down-->
<!--<param name="ping" value="25"/>-->
<!--</gateway>-->
<!--rfc5626 : Abilitazione rfc5626 ///-->
<!--<param name="rfc-5626" value="true"/>-->
<!--rfc5626 : extra sip params to send in the contact-->
<!--<param name="reg-id" value="1"/>-->
</include>

View File

@ -43,6 +43,9 @@
<!-- <param name="shutdown-on-fail" value="true"/> -->
<param name="sip-trace" value="no"/>
<param name="sip-capture" value="no"/>
<!-- Use presence_map.conf.xml to convert extension regex to presence protos for routing -->
<!-- <param name="presence-proto-lookup" value="true"/> -->
<!-- Don't be picky about negotiated DTMF just always offer 2833 and accept both 2833 and INFO -->
@ -70,7 +73,7 @@
<param name="watchdog-step-timeout" value="30000"/>
<param name="watchdog-event-timeout" value="30000"/>
<param name="log-auth-failures" value="true"/>
<param name="log-auth-failures" value="false"/>
<param name="forward-unsolicited-mwi-notify" value="false"/>
<param name="context" value="public"/>
@ -154,6 +157,7 @@
<!-- Name of the db to use for this profile -->
<!--<param name="dbname" value="share_presence"/>-->
<param name="presence-hosts" value="$${domain},$${local_ip_v4}"/>
<param name="presence-privacy" value="$${presence_privacy}"/>
<!-- ************************************************* -->
<!-- This setting is for AAL2 bitpacking on G726 -->

View File

@ -199,6 +199,10 @@
<X-PRE-PROCESS cmd="set" data="default_areacode=918"/>
<X-PRE-PROCESS cmd="set" data="default_country=US"/>
<!-- if false or undefined, the destination number is included in presence NOTIFY dm:note.
if true, the destination number is not included -->
<X-PRE-PROCESS cmd="set" data="presence_privacy=false"/>
<X-PRE-PROCESS cmd="set" data="be-ring=%(1000,3000,425)"/>
<X-PRE-PROCESS cmd="set" data="ca-ring=%(2000,4000,440,480)"/>
<X-PRE-PROCESS cmd="set" data="cn-ring=%(1000,4000,450)"/>

View File

@ -40,10 +40,10 @@ AC_DEFINE_UNQUOTED([SWITCH_MOD_DIR],"${modulesdir}",[where to install the module
if test "$localstatedir" = "\${prefix}/var" ; then
rundir="$prefix/run"
logfiledir="${prefix}/log"
logdir="${prefix}/log"
else
rundir="$localstatedir/run/freeswitch"
logfiledir="$localstatedir/log/freeswitch"
logdir="$localstatedir/log/freeswitch"
fi
# Where to put pidfile
AC_ARG_WITH([rundir],
@ -51,30 +51,38 @@ AC_ARG_WITH([rundir],
AC_SUBST(runtimedir)
AC_DEFINE_UNQUOTED([SWITCH_RUN_DIR],"${runtimedir}",[where to put pidfile to])
AC_ARG_WITH([logfiledir],
[AS_HELP_STRING([--with-logfiledir=DIR], [Put logfiles into this location (default: $localstatedir/log)])], [logfiledir="$withval"], [logfiledir="$logdir"])
AC_SUBST(logfiledir)
AC_DEFINE_UNQUOTED([SWITCH_LOG_DIR],"${logfiledir}",[where to put log files])
dbdir="${prefix}/db"
AC_ARG_WITH([dbdir],
[AS_HELP_STRING([--with-dbdir=DIR], [Put database files into this location (default: $prefix/db)])], [dbdir="$withval"], [dbdir="$prefix/db"])
AC_SUBST(dbdir)
AC_DEFINE_UNQUOTED([SWITCH_DB_DIR],"${dbdir}",[where to put db files])
htdocsdir="${prefix}/htdocs"
AC_ARG_WITH([htdocsdir],
[AS_HELP_STRING([--with-htdocsdir=DIR], [Put html files into this location (default: $prefix/htdocs)])], [htdocsdir="$withval"], [htdocsdir="$prefix/htdocs"])
AC_SUBST(htdocsdir)
AC_DEFINE_UNQUOTED([SWITCH_HTDOCS_DIR],"${htdocsdir}",[where to put htdocs files])
soundsdir="${prefix}/sounds"
AC_ARG_WITH([soundsdir],
[AS_HELP_STRING([--with-soundsdir=DIR], [Put sound files into this location (default: $prefix/sounds)])], [soundsdir="$withval"], [soundsdir="$prefix/sounds"])
AC_SUBST(soundsdir)
AC_DEFINE_UNQUOTED([SWITCH_SOUNDS_DIR],"${soundsdir}",[where to put sounds files])
grammardir="${prefix}/grammar"
AC_ARG_WITH([grammardir],
[AS_HELP_STRING([--with-grammardir=DIR], [Put grammar files into this location (default: $prefix/grammar)])], [grammardir="$withval"], [grammardir="$prefix/grammar"])
AC_SUBST(grammardir)
AC_DEFINE_UNQUOTED([SWITCH_GRAMMAR_DIR],"${grammardir}",[where to put grammar files])
scriptdir="${prefix}/scripts"
AC_ARG_WITH([scriptdir],
[AS_HELP_STRING([--with-scriptdir=DIR], [Put script files into this location (default: $prefix/scripts)])], [scriptdir="$withval"], [scriptdir="$prefix/scripts"])
AC_SUBST(scriptdir)
AC_DEFINE_UNQUOTED([SWITCH_SCRIPT_DIR],"${scriptdir}",[where to put script files])
recordingsdir="${prefix}/recordings"
AC_ARG_WITH([recordingsdir],
[AS_HELP_STRING([--with-recordingsdir=DIR], [Put recordings files into this location (default: $prefix/recordings)])], [recordingsdir="$withval"], [recordingsdir="$prefix/recordings"])
AC_SUBST(recordingsdir)
AC_DEFINE_UNQUOTED([SWITCH_RECORDINGS_DIR],"${recordingsdir}",[where to put recording files])
@ -407,7 +415,8 @@ APR_ADDTO(SWITCH_AM_LDFLAGS, -lresolv)
fi
ESL_LDFLAGS=
PLATFORM_CORE_DEPLIBS=
PLATFORM_CORE_LDFLAGS=
PLATFORM_CORE_LIBS=
# tweak platform specific flags
case "$host" in
*darwin10.*)
@ -417,23 +426,30 @@ case "$host" in
APR_ADDTO(CXXFLAGS, -pipe)
APR_REMOVEFROM(SWITCH_AM_CFLAGS, -fPIC)
if test "x$enable_core_odbc_support" != "xno"; then
APR_ADDTO(PLATFORM_CORE_DEPLIBS, --framework CoreFoundation)
APR_ADDTO([PLATFORM_CORE_LDFLAGS], [--framework CoreFoundation])
fi
APR_ADDTO([PLATFORM_CORE_LIBS], [-ldl])
;;
*darwin*)
APR_ADDTO(SWITCH_AM_CFLAGS, -DMACOSX)
APR_REMOVEFROM(SWITCH_AM_CFLAGS, -fPIC)
if test "x$enable_core_odbc_support" != "xno"; then
APR_ADDTO(PLATFORM_CORE_DEPLIBS, --framework CoreFoundation)
APR_ADDTO([PLATFORM_CORE_LDFLAGS], [--framework CoreFoundation])
fi
APR_ADDTO([PLATFORM_CORE_LIBS], [-ldl])
;;
*-solaris2*)
APR_ADDTO(SWITCH_AM_CFLAGS, -DPATH_MAX=2048 -D__EXTENSIONS__)
APR_ADDTO(SWITCH_AM_LDFLAGS, -lsendfile -lresolv -lsocket -lnsl -luuid)
APR_ADDTO(ESL_LDFLAGS, -lnsl -lsocket)
APR_ADDTO([PLATFORM_CORE_LIBS], [-ldl -lcrypt -lrt -lsendfile -lresolv -lsocket -lnsl -luuid])
;;
*bsd*)
APR_ADDTO(SWITCH_AM_CFLAGS, -I/usr/local/include)
APR_ADDTO([PLATFORM_CORE_LIBS], [-lcrypt -lrt])
;;
*linux*)
APR_ADDTO([PLATFORM_CORE_LIBS], [-ldl -lcrypt -lrt])
;;
esac
@ -444,7 +460,8 @@ AC_SUBST(SWITCH_ANSI_CFLAGS)
AC_SUBST(SWITCH_AM_CXXFLAGS)
AC_SUBST(SWITCH_AM_LDFLAGS)
AC_SUBST(ESL_LDFLAGS)
AC_SUBST(PLATFORM_CORE_DEPLIBS)
AC_SUBST(PLATFORM_CORE_LDFLAGS)
AC_SUBST(PLATFORM_CORE_LIBS)
AC_SUBST(SOLINK)
AC_SUBST(DYNAMIC_LIB_EXTEN)
AC_SUBST(LIBTOOL_LIB_EXTEN)
@ -474,7 +491,7 @@ AC_PROG_GCC_TRADITIONAL
AC_FUNC_MALLOC
AC_TYPE_SIGNAL
AC_FUNC_STRFTIME
AC_CHECK_FUNCS([gethostname vasprintf mmap mlock mlockall usleep getifaddrs timerfd_create getdtablesize])
AC_CHECK_FUNCS([gethostname vasprintf mmap mlock mlockall usleep getifaddrs timerfd_create getdtablesize posix_openpt])
AC_CHECK_FUNCS([sched_setscheduler setpriority setrlimit setgroups initgroups])
AC_CHECK_FUNCS([wcsncmp setgroups asprintf setenv pselect gettimeofday localtime_r gmtime_r strcasecmp stricmp _stricmp])
@ -485,6 +502,9 @@ AC_CHECK_LIB(rt, clock_getres, [AC_DEFINE(HAVE_CLOCK_GETRES, 1, [Define if you h
AC_CHECK_LIB(rt, clock_nanosleep, [AC_DEFINE(HAVE_CLOCK_NANOSLEEP, 1, [Define if you have clock_nanosleep()])])
AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket))
AC_CHECK_FILE(/dev/ptmx, [AC_DEFINE(HAVE_DEV_PTMX, 1, [Define if you have /dev/ptmx])])
AC_CHECK_LIB(util, openpty, [AC_DEFINE(HAVE_OPENPTY, 1, [Define if you have openpty()])])
AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[
#include <sys/types.h>
#include <time.h>])
@ -764,6 +784,8 @@ case $host in
;;
esac
AC_PATH_PROGS(BZIP, bzip2)
AC_PATH_PROGS(XZ, xz)
AC_PATH_PROGS(TAR, gtar tar)
AC_PATH_PROGS(WGET, wget)
AC_PATH_PROGS(CURL, curl)
@ -792,12 +814,29 @@ if test "$_libcurl_with" = "yes" ; then
ac_cv_use_system_curl=yes;
fi
if test "$ac_cv_use_system_curl" = "yes" ; then
AC_CACHE_CHECK([whether to use system libcurl library], [ac_cv_curl_usable], [
AC_CHECK_LIB(curl, Curl_setopt, [ac_cv_curl_usable="yes"], [ac_cv_curl_usable="no"])
])
fi
if test "$ac_cv_curl_usable" != "yes" ; then
ac_cv_use_system_curl=no;
fi
if test "$ac_cv_use_system_curl" != "yes" ; then
LIBCURL_DEPS='${switch_builddir}/libs/curl/lib/libcurl.la'
LIBCURL='${switch_builddir}/libs/curl/lib/libcurl.la'
LIBCURL_CPPFLAGS='-I${switch_srcdir}/libs/curl/include'
else
SWITCH_AM_LDFLAGS="$LIBCURL $SWITCH_AM_LDFLAGS"
fi
SWITCH_AM_CFLAGS="$LIBCURL_CPPFLAGS $SWITCH_AM_CFLAGS"
SWITCH_AM_CXXFLAGS="$LIBCURL_CPPFLAGS $SWITCH_AM_CXXFLAGS"
AM_CONDITIONAL([CURL_BUILTIN],[test "${ac_cv_use_system_curl}" != "yes"])
AC_SUBST(LIBCURL_DEPS)
@ -1031,10 +1070,7 @@ AC_CONFIG_SUBDIRS([libs/pcre])
AC_CONFIG_SUBDIRS([libs/apr])
AC_CONFIG_SUBDIRS([libs/apr-util])
AC_CONFIG_SUBDIRS([libs/ilbc])
if test "$ac_cv_use_system_curl" != "yes" ; then
AC_CONFIG_SUBDIRS([libs/curl])
fi
AC_CONFIG_SUBDIRS([libs/curl])
AC_CONFIG_SUBDIRS([libs/iksemel])
AC_CONFIG_SUBDIRS([libs/js/nsprpub])
AC_CONFIG_SUBDIRS([libs/js])

View File

@ -30,6 +30,7 @@ freeswitch (1.0.7)
build: They no longer ship the wsj model in pocketsphinx... and seems the dictionary has moved a bit. (r:23571680)
build: unimrcp vs2010 build fixes for new version (r:2dcca5f4)
build: add sqlite to clean on make current or update-clean (r:2366f429)
build: Update windows to use Lame 3.98.4 (r:4349ec00)
codec2: working prototype, still for testing only (r:04ca0751)
config: move limit.conf to db.conf
config: Update VM phrase macros to voice option then action on main, config menus
@ -55,6 +56,7 @@ freeswitch (1.0.7)
config: Add ivr/ subdir to conf/lang/en/en.xml (r:42f10a48)
config: Fix mod_directory phrase file references to 'dir-press.wav' (correct: vm-press) (r:3ef2692f)
config: bump ru sounds version to 1.0.13 (r:2b1b19bf)
config: Fix eavesdrop so that *0 works as well as 88 as the access code (r:cbfe83cc)
core: Add RTCP support (FSRTP-14)
core: handle some errors on missing db handle conditions
core: add ... and shutdown as a fail-safe when no modules are loaded
@ -309,6 +311,31 @@ freeswitch (1.0.7)
core: fix event firing for CHANNEL_PROGRESS_MEDIA event (r:e2a4fb11/FS-3396)
core: add emulation for asterisk DIALSTATUS magic var (r:9d98d49f)
core: the new code requires accurate timestamps, we were incrementing it by the interval (20) instead of the samples (160) (r:f10566af/FS-3181)
core: pass cancel_cause into enterprise_originate (r:2e9724d2)
core: add support for global namespace in chat interface to bind to unhandled messages (r:6dd1264d)
core: resolve Syntax Error when using MSSQL in core (r:40990c04/FS-3527)
core: add RTP_BUG_ACCEPT_ANY_PACKETS to disable dropping invalid packets for interop with Oracle CCA (r:aea22cd4)
core: yield when doing b64 encode to avoid stealing the cpu on single proc crappy hardware (r:7d612da4)
core: DTMF stands for Devil Took My Fone (r:0c066f06)
core: add callee_id name/number to xml_cdr (r:bcd1e147)
core: add new flag to frames to denote pass thru frames that are not audio (r:cb9abe02)
core: change -hp to -rp, add -lp and -np, no priority flags means auto which will do -rp if you have > 1 cpu (r:c1dd008b)
core: only reap sigchld when in fork mode for system (r:1e712c7e)
core: Add application flag zombie_exec so registered applications can apply to be executed on channels that are already hungup, like the inline exec this is only limited to a small family of apps that do not use the channel for audio. (r:637a5ed8)
core: do not escape strings inside single quotes unless we can find a closing quote too (r:b4b99c41)
core: convert chat interface to use events instead of a bunch of args (r:9125a96c)
core: make app to turn on new zombie exec instead of always doing it (r:3a2f8183)
core: fix inaccurate sample count in file handle, buffered samples were being double tallied (r:5fe3a22d)
core: prevent sql injection by using sqlite formatter on various code that generates sql stmts with switch_snprintf (r:256a6264)
core: add ivr_menu_terminator variable you can set to none or the dtmf chars you want to terminate input (r:0a3e5d2f)
core: delay_echo was double the length in milliseconds from what it should be (r:3317f5d3)
core: fix issue where clearing a single realm does not completely clear (r:d2710422)
core: add manual_rtp_bug gen_one_gen_all to prevent rtp passthru to break the *S* word.. (r:9e094835)
core: Add transfer_history to logs (r:1bf97fa7)
core: add fsctl sync_clock_when_idle so you can sync the clock but have it not do it till there are 0 calls (r:2094f2d3)
core: add getGlobalVariable and setGlobalVariable to swig stuff (r:2faaee0e)
core: Fix erroneous "module busy" messages on module unload (r:bad5964b/FS-3589)
core: move code from uuid_kill into core (r:3c9551ee)
docs: Major clean up of doxygen generated core API documentation (r:794246e1)
docs: Add libteletone back to core API documentation (r:c35c138d)
embedded languages: Provide core level support for conditional Set Global Variable (r:c017c24b/FSCORE-612)
@ -320,6 +347,10 @@ freeswitch (1.0.7)
fs_cli: let ctl-c work until you are connected (r:986f258d)
fs_cli: add -i --interrupt to fs_cli to allow control-c to exit the program (r:e7b3c3b1)
fs_cli: add timeout option to fs_cli (r:5fad26b4)
fs_cli: implement CLI prompt redrawing (r:a79f1f42) (many other minor changes by TC on 2011-09-22)
fs_cli: implement configurable prompt, input, and output coloring (r:c7ec19d6)
fs_cli: allow ;; seperated commands in fs_cli -x (r:cbc92936)
fs_cli: only enable new features on supported terminals (r:26cd927c)
lang: Improve French phrase files (FSCONFIG-23)
lang: Update langs - Add pt_PT, update es to have es_ES and es_MX, update mod_say_es and add mod_say_pt (FS-2937) (r:c81a9448/FS-2937)
libapr: Fix issue where after a bridge with a member, uuid of Agent is set to single quote character ' (r:3fee704d/FS-2738)
@ -327,6 +358,7 @@ freeswitch (1.0.7)
libdingaling: Fix crash in new GV interface when exceeding 24 calls (r:be00609a/FS-2171)
libdingaling: fix crash when GV call ends (r:687140b5/FS-3139)
libdingaling: fix small leak (r:d3ea42d8/FS-3334)
libdingaling: send keep alive packets to prevent NAT from munging connection (thanks Federico Beffa) (r:4bd305e5/FS-3612)
libesl: Fix potential race condition (ESL-36)
libesl: Add /uuid command to fs_cli to filter logs by uuid
libesl: Increase buffer in fs_cli for Win (r:d1d6be88/FSCORE-611)
@ -358,11 +390,14 @@ freeswitch (1.0.7)
libesl: Add digit_timeout to ESL::IVR's playAndGetDigits method (r:f564d383)
libesl: add array manipulation to the wraper code (r:ffa0a071)
libesl: fix mem leak - good catch, Jlenk! (r:e420e17f/FS-3386)
libesl: add sendmsg function to esl (r:2ae688a3)
libfreetdm: implemented freetdm config nodes and ss7 initial configuration
libfreetdm: fix codec for CAS signaling (r:b76e7f18)
libfreetdm: freetdm: ss7- added support for incoming group blocks, started adding support for ansi (r:c219a73c)
libfreetdm: receive side, update libteletone to track duration so it is less likely to double detect and push api changes down to freetdm (r:a65794fb/FS-3570)
libg7221: A bunch of tweaks to the G.722.1 codec (r:5d548570)
libgnutls: link to libgcrypt as well, please report any platforms this breaks, but it should be portable (r:c569fb0f/FS-1248)
libiksemel: making this the new default and patching libdingaling to use it exclusively with openssl, now we actually have single thread for gtalk an no gah noodlez (r:f506e19e/FS-3471)
libjs: non-portable comment syntax in .s files
libldns: select on FD > 1024 get this patch to ldns ppl (r:710fc7a7/FS-3110)
libopenzap: Add CLI tracing
@ -402,6 +437,11 @@ freeswitch (1.0.7)
mod_avmd: Initial check in - Advanced Voicemail Detect (r:10c6a30a) (by Eric Des Courtis)
mod_avmd: Add to windows build (r:df4bd935)
mod_avmd: Fix mem leak (r:cd951384/FS-2839)
mod_blacklist: Add mod_blacklist from contrib. (r:3a477c42)
mod_blacklist: Add example configuration file (r:d00f7464)
mod_blacklist: Resource leak fixes, config checks and add help output for api interface (r:41abb3e6)
mod_blacklist: add ability to dump a list back to it's text file (r:1d5f5ec7)
mod_blacklist: fix broken dump/save (r:abc5d7cd/FS-3617)
mod_callcenter: Initial commit of the mod_callcenter application. This module is in it early state of developpement. You can see documentation on the wiki at : <a href="http://wiki.freeswitch.org/wiki/Mod_callcenter">http://wiki.freeswitch.org/wiki/Mod_callcenter</a> For support/comments, please use <a href="http://jira.freeswitch.org/">http://jira.freeswitch.org/</a> and select the MOD CALLCENTER module. (r:ba09b96d)
mod_callcenter: Add ability to unload/reload/load a queue setting (You still need to reloadxml before). Note that joining a queue will check for it in the config and load it on the fly... I've used the same system as in mod_voicemail. Not sure if we should allow this, but just comment it out of the config before unload and it wont be available anymore (r:3eafca60)
mod_callcenter: Try to fix the ring-all, also add cli auto complete done in previous commit (r:1666783c)
@ -438,6 +478,7 @@ freeswitch (1.0.7)
mod_callcenter: New strategies: round-robin, random, and 'top-down' (r:2b4b23aa,r:bee247ca)
mod_callcenter: Display an warning when MOH is invalid and resume wait with silence. (r:37b14c9a/FS-2740)
mod_callcenter: Fix member been switch as abandoned when he was pickup by an agent (r:9ff8f53f/FS-3281)
mod_cdr_mongodb: add MongoDB CDR module (r:a9169199)
mod_cdr_sqlite: initial commit (r:f625fe3b)
mod_cdr_sqlite: config file for mod_cdr_sqlite (r:25bc8fe3)
mod_cdr_sqlite: Drop transaction BEGIN/END around INSERT. We're only executing one command, and autocommit will automatically rollback if the INSERT fails. Sync state_handlers with mod_cdr_csv. Minor libpq fixups. (r:0f95b870)
@ -473,6 +514,9 @@ freeswitch (1.0.7)
mod_commands: fix crash when uuid_break all cannot find bonded uuid channel (r:69e61f76/FS-3468)
mod_commands: fix uuid_dual_transfer for inline dialplan (r:5d84efc3/FS-3403)
mod_commands: update show calls to show both 1 legged calls and bridged calls, also show bridged_calls for previous behaviour of show calls (r:c16c74d9)
mod_commands: Add 'presence_data' field to 'show channels like xxx' list of fields. This makes anthm's trick mentioned on the mailing list even more handy. (r:4872e6ff)
mod_commands: Update tab-complete for show cmd to include bridged_calls, detailed_calls, detailed_bridged_calls and removed distinct_channels (r:2fa8f110)
mod_commands: add threaded-system-exec param and fsctl (set it to false to use fork) (r:910f5364)
mod_conference: Fix reporting of volume up/down (MODAPP-419)
mod_conference: add last talking time per member to conference xml list
mod_conference: add terminate-on-silence conference param
@ -514,6 +558,10 @@ freeswitch (1.0.7)
mod_conference: add conference member flag nomoh (r:f35a6814)
mod_conference: add hup command to conference (kick without the kick sound) (r:492db906)
mod_conference: see H.264 iFrames (r:765be8c9/FS-3406)
mod_conference: add moderator PIN controls (thanks Moy) (r:1936c2b0/FS-3493)
mod_conference: remove waste flags from both conference and member and explicitly always send audio from conferences to avoid random interop issues and general discomfort these flags are now deprecated (r:5d77e789)
mod_conference: add conference cdrs to mod_conference (r:127be02d)
mod_conference: add custom kick sound to conference (r:8fde25cc)
mod_curl: use method=post when post requested (r:c6a4ddd0/FSMOD-69)
mod_db: fix stack corruption (MODAPP-407)
mod_dialplan_xml: Add in the INFO log the caller id number when processing a request (Currenly only show the caller name) (r:e1df5e13)
@ -525,6 +573,9 @@ freeswitch (1.0.7)
mod_dingaling: use the login as message source when not in component mode. (chat_send) (r:58c28aab)
mod_dingaling: fix mod_dingaling/iksemel/gnutls link error when using newer autotools (r:294b0779/FS-3182)
mod_dingaling: fix segmentation fault on mod_dingaling when receiving a discovery from the server (r:2e651c8f/FS-3391)
mod_dingaling: Remove unused but set variables GCC-4.6 -Wunused-but-set-variable (r:0f45b8ba/GCC-4)
mod_dingaling: Add from_jid (r:f0b52ef7/FS-3611)
mod_dingaling: autoflush durning bridge in dingaling (r:bd9317f2)
mod_directory: Add variable directory_search_order to allow to search by first name by default is set to "first_name" (r:163ca31f)
mod_directory: let mod_directory use non-XML dialplans (r:8895de1b)
mod_distributor: Add mod_distributor to VS2010 - not built by default (r:bac79ba1)
@ -549,6 +600,8 @@ freeswitch (1.0.7)
mod_dptools: fix small leak in strftime (r:bbbd67ba)
mod_dptools: resolve Heap corruption in strftime_api_function -thanks (r:707bd05b/FS-3417)
mod_dptools: fix seg on user_recurse_variables reported on the mailing list (r:01b2bd04)
mod_dptools: add digit_action_set_target app that can set the target (direction of the dtmf flow and subsequent channel who gets the events) to self or peer (bridged channel when possible) (r:cf9859ea)
mod_dptools: get rid of digit_action_set target and add target,bind_target params to bind_digit_action (r:42b64ccd)
mod_easyroute: Fix possible segfaults and memory leak during unload, and add new setting odbc-retries (r:7fbc47f8/FS-2973)
mod_enum: switch mod_enum to use new portable in-tree version (r:2bbc37e3)
mod_enum: fix race condition between ldns configure creating ldns/util.h and mod_enum (r:87884c5c)
@ -562,6 +615,7 @@ freeswitch (1.0.7)
mod_erlang_event: Rewrite XML fetch conditional wait to be more sane (Reported by James Aimonetti) (r:6941c6eb/FS-2775)
mod_erlang_event: Don't urlencode events (and destroy an event after use) (r:4eccdfef)
mod_erlang_event Add proper locking for the list of XML bindings (r:9fe440b2)
mod_erlang_event: Fixed a memory leak, too short of connect times across data centers, a deadlock condition with the globals.bindings_rwlock not being released, a buffer overrun possibility or 4, and added the ability to send a body when injecting an event (r:994f9a8c)
mod_event_multicast: make multicast loopback configurable (r:97a7668c/FS-3416)
mod_event_socket: fix up other users of switch_event_xmlize() to use SWITCH_EVENT_NONE (r:d6eb7562)
mod_event_socket: Fix small mem leaks (r:e4f90584/MODEVENT-68)
@ -569,8 +623,12 @@ freeswitch (1.0.7)
mod_event_socket: clear unique headers on event_socket filters (r:436413e0)
mod_event_socket: Unlock mutex to prevent mortuus obfirmo (r:64bc1938/FS-3156/FS-3157)
mod_event_socket: (and mod_erlang_event) make empty apply-inbound-acl config line not deny all (r:8ae9ab5d/FS-3034)
mod_event_socket: allow duplicate headers to be parsed into events received on the wire (r:2b7a830d)
mod_event_socket: add optional format string after myevent (r:7ed7f539)
mod_event_socket: Allow ridiculously long commands over event socket (r:6bbde4e2/FS-3621)
mod_event_zmq: Intitial mod_event_zmq code (r:4d554067)
mod_event_zmq: Update download file from 2.1.3 to 2.1.4 (2.1.3 tar file is gone from zmq server) (r:0b780702)
mod_event_zmq: Bump to zeromq-2.1.9 (r:3a352e67)
mod_fifo: allow multiple dtmf to exit fifo, set fifo_caller_exit_key to specify which (MODAPP-420)
mod_fifo: cancel outbound call if customer hangs up (r:cadb4d94)
mod_fifo: add taking_calls param to fifo member add and config file (r:821488bf)
@ -584,7 +642,10 @@ freeswitch (1.0.7)
mod_fifo: don't seg in edge case error conditions (r:9ee13b72)
mod_fifo: set tracking data before enabling hooks (r:34267869)
mod_fifo: Fix fifo orbit timeout when not using a chime tested with and without chime (r:7fee1fd1)
mod_fifo: Fix URI (r:26039c57/FS-3548)
mod_fifo: add _continue_ value for fifo orbit exten that just means exit back to the next dp instruction (r:4d6ee827)
mod_file_string: Fix segfault when using file string in conference (r:9c40e8e9/FS-3122)
mod_flite: Update to flite 1.5.1 it should sound better now too (r:ecbd1db8)
mod_freetdm: Fix for TON and NPI not passed through to channel variables on incoming calls
mod_freetdm: add pvt data to freetdm channels fix fxs features (r:9d456900)
mod_freetdm: export and import boost custom data (r:edb2d582)
@ -647,6 +708,8 @@ freeswitch (1.0.7)
mod_h323: move PTrace level set to FSH323EndPoint::Initialise. partially apply patch from from Peter Olsson, Remove UnLock() when TryLock() failed and DEBUG_RTP_PACKETS directiv e. (r:7b5803f7)
mod_h323: set network_addr of caller profile to signaling ip address. (requested by Steven Ayre) (r:072bf5ad)
mod_h323: fix race condition on destroying signaling thread in h323 library (r:c22aac0e)
mod_h323: move the switch_rtp_request_port() call from the contructor to FSH323Connection::CreateRealTimeLogicalChannel() - fix rtp port leak. tnx to Peter Olsson. (r:6f4c4ea0)
mod_http_cache: Initial commit of new module (thanks crienzo) (r:c51acfcc/FS-3597)
mod_java: fix eventConsumer issue and add flush() method (r:7fd3aff6)
mod_java: Allow user defined java methods to be called at startup and shutdown of JVM (r:1339e218/MODLANG-117)
mod_json_cdr: Fix segfault in mod_json_cdr.c (r:f347698a/MODEVENT-66)
@ -687,6 +750,7 @@ freeswitch (1.0.7)
mod_managed: add additional support (r:5be58aac)
mod_managed: add mono 2.8 patch file see FS-2774 (r:6a948bd9/FS-2774)
mod_managed: resolve Memory leak in mod_managed by EventBinding and swig delete_switch_event (r:c6048134/FS-3381)
mod_managed: upgrade mono to support 2.8 - MichaelGG (r:1dcac642/FS-2774)
mod_mongo: New mod, initial commit; module for MongoDB (http://www.mongodb.org/) (r:dc6ca6f8/FS-3278)
mod_mongo: add mapreduce API (r:7c5b5797/FS-3357)
mod_mp4v: MP4V-ES passthru for washibechi on IRC
@ -706,6 +770,7 @@ freeswitch (1.0.7)
mod_opus: Use libtool archives for linking, add dependencies to fix parallel builds (r:74bbd4be)
mod_osp: initial check (Open Settlement Protocol)
mod_osp:Changed OSP TCP port from 1080 to 5045. (r:03abefdf)
mod_perl: add chat app to perl (r:18897f9e)
mod_pocketsphinx: Update PocketSphinx to the latest builds... only had to make two changes (r:1a39d7fb)
mod_pocketsphinx: They no longer ship the wsj model in pocketsphinx... and seems the dictionary has moved a bit. (r:23571680)
mod_portaudio: Fix inbound state (CS_ROUTING not CS_INIT) (MODENDP-302)
@ -716,6 +781,7 @@ freeswitch (1.0.7)
mod_portaudio: Fix Windows crash (r:94c9cbf6/FS-3498)
mod_portaudio_stream: update to specify the channel index (r:d1169d6e)
mod_protovm: This is a very early new prototype voicemail ivr system. You need to copy the sounds.xml and make it loadale in the language folder and protovm.conf.xml inside the autoload_configs folder. Configs file will most definitly change. Once stabilized, we make it install those file by default. (r:fb549777)
mod_python: add chat app to python (r:08917021)
mod_radius_cdr: Add 'Freeswitch-Direction' av pair (r:a5170df0)
mod_radius_cdr: Add 'Freeswitch-Other-Leg-Id' av pair (r:18d29b46)
mod_radius_cdr: log errors with the call's uuid (r:fee49b16)
@ -732,6 +798,8 @@ freeswitch (1.0.7)
mod_rtmp: CNG frames need to have codec set too (r:36f812d9)
mod_rtmp: remove superfluous hangup (r:50817655)
mod_rtmp: fix crash when call made from user not in domain (r:a5452174/FS-3353)
mod_rtmp: add params so xml curl can know who's calling the directory request (r:91b73d1f)
mod_rtmp: New feature: param disallow-multiple-registration on user directory logs out all other users on other sessions with the same user:domain pair. (r:624a2921)
mod_sangoma_codec: Add sample config file
mod_sangoma_codec: added load/noload options for the supported codecs
mod_sangoma_codec: rename load/noload to register/noregister
@ -792,6 +860,10 @@ freeswitch (1.0.7)
mod_skypopen: refining oss driver, removing audio sync during call (was each 20 secs), audio sync at the tcp interfacing with the skype client (reading more than 20ms worth) (r:891015e6)
mod_skypopen: fixed a demented bug (incrementing a variable zeroed in the same loop) maybe responsible for moh sputtering under load on virtual machines (r:43eeeb82)
mod_skypopen: avoid accumulating delay on VMs, better debug logging (r:1b4c78bf)
mod_sms: add new chatplan concept and mod_sms. Apps for chat messages: copy new base freeswitch.xml and chatplan dir if you are upgrading on existing config base (r:7333d46d)
mod_sms: fix "format literal and no arguments" warning (r:a0e91001)
mod_sms: allow chatplan apps to have null args (r:4feb26d3)
mod_sms: only ignore events if you matched something on a cp (r:a14b20af)
mod_snapshot: fix bad codepaths in mod_snapshot (r:844ac220)
mod_sndfile: Add support for .alaw and .ulaw to mod_sndfile (r:facf09b8/MODFORM-41)
mod_sndfile: return break in mod_sndfile when seek returns failure (r:564dc7e4)
@ -999,7 +1071,30 @@ freeswitch (1.0.7)
mod_sofia: Fix RTP handling bug to allow goofy & undefined behavior (r:77413ba9/FS-3451)
mod_sofia: don't allow auto answer on an non-outbound call (r:61ee7fdc)
mod_sofia: use the call_id of the original register in the unsolicited notify for MWI (r:53b0ecce)
mod_sofia: Fix caller ID name on bridged appearance (r:7efa4fb2/FS-3532)
mod_sofia: speed up restart speed of profiles (r:fb5f29c2)
mod_sofia: this is actually compliant when mixing ptimes in the same sdp but since iLBC uses its own fmtp for ptime I will add this patch to make it beleive its 20 for the sake of arguement. If you have any other problems with this, set the channel or global variable sdp_m_per_ptime=false to completely disable the default correct behaviour (r:247537a9/FS-3545)
mod_sofia: I missed a few more spots to hack in the exception for iLBC, (thanks for marring my code iLBC ppl) it should work as expected now even with the m_per_ptime on (r:83a78fbf/FS-3545)
mod_sofia: don't turn X-FS- headers into variables, they are reserved for FS specific communication and should not be passed on (r:7d399cce)
mod_sofia: This patch will probably make it work but the bug is actually in the phone, the patch is simply tolerating the bad behaviour. You are correct about the a=sendonly missing, this was fixed in a later revision of the polycom firmware. I suggest that even if this patch works, that you update your phones to a newer firmware, preferably the most recent. (r:7acddfac/FS-3549)
mod_sofia: add auth username to unreg event (r:1b9b3456)
mod_sofia: fix wrong media ip in recover data issue (r:5154b881)
mod_sofia: fix missing ACK that causes Polycom failure (r:408adb8d/FS-3558)
mod_sofia: use bridge_to instead of signal_bond for recovering bridge (r:f4794620)
mod_sofia: save telephony event data for recovery (r:4d1a76ee)
mod_sofia: tighten up the parsing of these boolean vals issue in t38 sdp (r:626b5cb2/FS-3571,FS-3442,FS-957)
mod_sofia: resolve race condition caused by unresponsive host when unregistering the gateway. (r:607c112f/FS-3583)
mod_sofia: only require user and pass in gateway when register is true (r:9e4ca2c2)
mod_sofia: Remove arbitrary 100 ACL limit (r:dd5188f3/FS-3605)
mod_sofia: add t38_pass_broken_boolean to pass the broken boolean behaviour over to the other side of the call when detected (r:afd0e1fc)
mod_sofia: Update handling of sub/notify (fixes broken Snom BLF) (r:51c22811/FS-2877)
mod_sofia: Don't add Contact header to MESSAGE requests, per RFC3428 (libsofia still does it a bit) (r:1f6670e7/FS-3628)
mod_sofia: add presence_map (r:4ee1722f)
mod_sofia: add presence_map config (r:48416707)
mod_sofia: add lookup params to presence_map (r:ea7f6a18)
mod_sofia: add missing mod_sofia indexes (r:40df8d65)
mod_soundtouch: updated soundtouch to library 1.5.0 to fix gcc > 4.3 incompatibilities (r:dfb5c629)
mod_soundtouch: Update soundtouch to 1.6.0 to fix FS-3634 (r:d8ae59fd/FS-3634)
mod_spandsp: initial checkin of mod_fax/mod_voipcodecs merge into mod_spandsp (r:fa9a59a8)
mod_spandsp: rework of new mod_spandsp to have functions broken up into different c files (r:65400642)
mod_spandsp: improve duplicate digit detection and add 'min_dup_digit_spacing_ms' channel variable for use with the dtmf detector (r:eab4f246/FSMOD-45)
@ -1021,6 +1116,9 @@ freeswitch (1.0.7)
mod_spandsp: add proper tone detect stop (r:8beb10d2/FS-3367)
mod_spandsp: add more fax event information (r:0555b702/FS-3345)
mod_spandsp: fix memory issue in spandsp_tone_detect (r:8793c2ed)
mod_spandsp: Tweak link order of some libs to fix build on gcc platforms that have ld flag "--as-needed" as default. (r:0db88b59/FS-2873/FS-2874)
mod_spandsp: Fix spandsp_start_fax_detect timeout issue (r:90a6e78d/FS-3619)
mod_spandsp: Add tone_type param to start_fax_detect to handle outbound fax detection (r:d6d18748/FS-3624)
mod_spidermonkey: allow vars to be set containing vars from languages (r:5cd072a3)
mod_spidermonkey: fix seg in js hangup (r:7d554c11)
mod_spidermonkey: Fix mod_spidermonkey build on FreeBSD, (Undefined symbol PR_LocalTimeParameters). (r:3edb8419)
@ -1041,6 +1139,10 @@ freeswitch (1.0.7)
mod_valet_parking: pass hold class on transfer (r:76a065ec)
mod_valet_parking: add valet_announce_slot variable (r:293d7254)
mod_valet_parking: make valet parking reserve a space for 10 seconds to allow time for an attended transfer switcharoo (r:308f44af)
mod_valet_parking: refactor timeout tracker for valet (r:3514c780)
mod_valet_parking: valet_info now returns uuid properly (r:34ddeb75/FS-3613)
mod_valet_parking: add presence to mod_valet_parking subscribe to the lot name for general stats or individual slots to monitor with park+ prefix *note* this used to be used in mod_fifo which now will use queue+ going forward (r:9daa42c1)
mod_valet_parking: lower token freq to 5, put it in a define and have more obvious warning about full lots (r:2f786a07)
mod_voicemail: Fix vm_prefs profile lock (MODAPP-417)
mod_voicemail: add 'vm-enabled' param (default true)
mod_voicemail: fix vm msg being deleted when pressing key to forward to email (MODAPP-403)
@ -1062,12 +1164,16 @@ freeswitch (1.0.7)
mod_voicemail: Add 2 new profile settings, db-password-override and allow-empty-password-auth. By default, they have value of their previous behavior. If db-password-override=true, the db password will only be used if present, if not present fallback to the xml config file vm-password. If allow-empty-password-auth=false, it will disable login via a authentication method if there is no password set in the user account (This wont affect voicemail_authorize=true login). (r:a9db642a)
mod_voicemail: remove pointless update_mwi() in vm_list api command (r:b952b2b2)
mod_voicemail: add message_len to output of vm_list api command (r:77c5000d)
mod_voicemail: use vm_email as notification address if vm_notify_email isn't set (that behavior was in voicemail_leave_main but not in deliver_vm) (r:8974f9d6)
mod_voicemail: better fix for voicemail email key match (r:aff4bcbe/FS-3080)
mod_voicemail: Prevent rewind key from breaking out of message playback (r:923a104b/FS-3637)
mod_xml_cdr: add force_process_cdr var to process b leg cdr on a case by case basis when b leg cdr is disabled (XML-17)
mod_xml_cdr: add leg param to query string (XML-24)
mod_xml_cdr: fix locked sessions (XML-26)
mod_xml_cdr: fix minor memory leaks and config bug (r:19253d83/MODEVENT-62)
mod_xml_cdr: Fix prefix-a-leg not respected for url submission (r:ea9021a2/FS-2998)
mod_xml_cdr: Fix delay to 5 sec from 5000 sec (r:34a38009/FS-2815)
mod_xml_cdr: Accept all 2xx messages, not just "200" (r:d39b7c6b/FS-3593)
mod_xml_rpc: Fix crash if unauthorized XML RPC is attempted (r:9835395c/FS-184)
scripts: added honeypot.pl and blacklist.pl which add extra SIP security options (r:b6a81ba7)
scripts: do simple verification to make sure we are getting IP addresses from VoIP abuse blacklist (r:b0049160)

View File

@ -493,7 +493,7 @@
<prompt phrase="This conference is full. Please contact the conference moderator." filename="conf-conference_is_full.wav"/>
<prompt phrase="You do not have permission to perform this action." filename="ivr-not_have_permission.wav"/>
<prompt phrase="You're doing it wrong, but I'll try to connect you anyway. (Douchebag!)" filename="ivr-youre_doing_it_wrong.wav"/>
<prompt phrase="" filename=""/>
<prompt phrase="3... 2... 1... WE'RE ASTERISK FREE!!!" filename="ivr-were_asterisk_free"/>
<prompt phrase="" filename=""/>
<prompt phrase="" filename=""/>
</ivr>

View File

@ -434,7 +434,7 @@ APPLICATION_MODULES_AE="applications/mod_avmd applications/mod_callcenter applic
applications/mod_distributor applications/mod_dptools applications/mod_easyroute applications/mod_enum \
applications/mod_esf applications/mod_expr applications/mod_blacklist"
APPLICATION_MODULES_FM="applications/mod_fifo applications/mod_fsv applications/mod_hash applications/mod_lcr applications/mod_limit \
applications/mod_memcache"
applications/mod_memcache applications/mod_http_cache"
APPLICATION_MODULES_NY="applications/mod_nibblebill applications/mod_redis applications/mod_rss applications/mod_snom \
applications/mod_soundtouch applications/mod_spandsp applications/mod_spy applications/mod_stress \
applications/mod_valet_parking applications/mod_vmd applications/mod_voicemail applications/mod_sms"
@ -774,6 +774,7 @@ fi
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/fax.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/fifo.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/hash.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/http_cache.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/ivr.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/java.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/lcr.conf.xml
@ -788,6 +789,7 @@ fi
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/pocketsphinx.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/portaudio.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/post_load_modules.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/presence_map.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/redis.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/rss.conf.xml
%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/rtmp.conf.xml
@ -919,6 +921,7 @@ fi
%{prefix}/mod/mod_flite.so*
%{prefix}/mod/mod_fsv.so*
%{prefix}/mod/mod_hash.so*
%{prefix}/mod/mod_http_cache.so*
%{prefix}/mod/mod_h26x.so*
%{prefix}/mod/mod_ilbc.so*
%{prefix}/mod/mod_lcr.so*
@ -1142,6 +1145,8 @@ fi
######################################################################################################################
%changelog
* Tue Jun 14 2011 - michal.bielicki@seventhsignal.de
- added mod_http_cache
* Tue Jun 14 2011 - michal.bielicki@seventhsignal.de
- added mod_rtmp
* Fri Apr 01 2011 - michal.bielicki@seventhsignal.de
- added hebrew language stuff

217
libs/.gitignore vendored
View File

@ -70,8 +70,7 @@ missing
/broadvoice/src/Makefile.in
/broadvoice/src/stamp-h1
/broadvoice/tests/regression_tests.sh
/celt-0.10.0/
/celt-0.7.1/
/celt-*/
/Communicator_semi_40.cd_semi_6000/
/curl/curl-config
/curl/include/curl/Makefile
@ -116,8 +115,8 @@ missing
/curl/src/stamp-h2
/esl/Debug/
/esl/Release/
/flite-1.3.99/
/freeradius-client-1.1.6/
/flite-*/
/freeradius-client-*/
/freetdm/build/compile
/freetdm/COPYING
/freetdm/INSTALL
@ -218,11 +217,11 @@ missing
/js/nsprpub/pr/src/threads/Makefile
/js/nsprpub/pr/tests/dll/Makefile
/js/nsprpub/pr/tests/Makefile
/json-c-0.9/
/json-c-*/
/js/src/jsautocfg.h
/js/src/perlconnect/Makefile.PL
/lame-3.97/
/ldns-1.6.9/
/lame-*/
/ldns-*/
/ldns/doc/ldns_manpages
/ldns/include/
/ldns/ldns/config.h
@ -294,9 +293,9 @@ missing
/libg722_1/tests/regression_tests.sh
/libg723_1/
/libg729/
/libmemcached-0.32/
/libogg-1.1.3/
/libshout-2.2.2/
/libmemcached-*/
/libogg-*/
/libshout-*/
/libsndfile/Cfg/compile
/libsndfile/doc/Makefile
/libsndfile/doc/Makefile.in
@ -336,15 +335,15 @@ missing
/libsndfile/tests/test_wrapper.sh
/libsndfile/Win32/Makefile
/libsndfile/Win32/Makefile.in
/mongo-cxx-driver-v1.8/
/mongo-cxx-driver-v*/
/mpg123/
/openldap-2.4.19/
/openssl-1.0.0a/
/openldap-*/
/openssl-*/
/openzap/build/compile
/openzap/COPYING
/openzap/INSTALL
/openzap/Makefile.in
/opus-0.9.0/
/opus-*/
/pcre/config.h
/pcre/Makefile
/pcre/Makefile.in
@ -358,7 +357,7 @@ missing
/pcre/pcre_stringpiece_unittest
/pcre/pcretest
/pcre/stamp-h1
/pocketsphinx-0.7/
/pocketsphinx-*/
/portaudio/bin/
/portaudio/bin-stamp
/portaudio/lib-stamp
@ -501,7 +500,7 @@ missing
/sofia-sip/open_c/Makefile.in
/sofia-sip/packages/Makefile
/sofia-sip/packages/Makefile.in
/sofia-sip/packages/sofia-sip-1.12.10devel.spec
/sofia-sip/packages/sofia-sip-*devel.spec
/sofia-sip/s2check/Makefile
/sofia-sip/s2check/Makefile.in
/sofia-sip/stamp-h1
@ -516,7 +515,7 @@ missing
/sofia-sip/win32/Makefile.in
/sounds/
/soundtouch/
/soundtouch-1.3.1/
/soundtouch-*/
/spandsp/config-h.in
/spandsp/doc/doxygen
/spandsp/doc/Makefile
@ -642,7 +641,7 @@ missing
/speex/win32/VS2008/speexenc/Makefile.in
/speex/win32/VS2008/tests/Makefile
/speex/win32/VS2008/tests/Makefile.in
/sphinxbase-0.7/
/sphinxbase-*/
/sqlite/keywordhash.h
/sqlite/lemon
/sqlite/lempar.c
@ -667,95 +666,95 @@ missing
/srtp/Makefile.in
/srtp/test/Makefile
/srtp/test/Makefile.in
/tiff-3.8.2/contrib/acorn/Makefile
/tiff-3.8.2/contrib/acorn/Makefile.in
/tiff-3.8.2/contrib/addtiffo/addtiffo
/tiff-3.8.2/contrib/addtiffo/Makefile
/tiff-3.8.2/contrib/addtiffo/Makefile.in
/tiff-3.8.2/contrib/dbs/Makefile
/tiff-3.8.2/contrib/dbs/Makefile.in
/tiff-3.8.2/contrib/dbs/tiff-bi
/tiff-3.8.2/contrib/dbs/tiff-grayscale
/tiff-3.8.2/contrib/dbs/tiff-palette
/tiff-3.8.2/contrib/dbs/tiff-rgb
/tiff-3.8.2/contrib/dbs/xtiff/Makefile
/tiff-3.8.2/contrib/dbs/xtiff/Makefile.in
/tiff-3.8.2/contrib/iptcutil/iptcutil
/tiff-3.8.2/contrib/iptcutil/Makefile
/tiff-3.8.2/contrib/iptcutil/Makefile.in
/tiff-3.8.2/contrib/mac-cw/Makefile
/tiff-3.8.2/contrib/mac-cw/Makefile.in
/tiff-3.8.2/contrib/mac-mpw/Makefile
/tiff-3.8.2/contrib/mac-mpw/Makefile.in
/tiff-3.8.2/contrib/Makefile
/tiff-3.8.2/contrib/Makefile.in
/tiff-3.8.2/contrib/mfs/Makefile
/tiff-3.8.2/contrib/mfs/Makefile.in
/tiff-3.8.2/contrib/ojpeg/Makefile
/tiff-3.8.2/contrib/ojpeg/Makefile.in
/tiff-3.8.2/contrib/pds/Makefile
/tiff-3.8.2/contrib/pds/Makefile.in
/tiff-3.8.2/contrib/ras/Makefile
/tiff-3.8.2/contrib/ras/Makefile.in
/tiff-3.8.2/contrib/stream/Makefile
/tiff-3.8.2/contrib/stream/Makefile.in
/tiff-3.8.2/contrib/tags/Makefile
/tiff-3.8.2/contrib/tags/Makefile.in
/tiff-3.8.2/contrib/win_dib/Makefile
/tiff-3.8.2/contrib/win_dib/Makefile.in
/tiff-3.8.2/html/images/Makefile
/tiff-3.8.2/html/images/Makefile.in
/tiff-3.8.2/html/Makefile
/tiff-3.8.2/html/Makefile.in
/tiff-3.8.2/html/man/Makefile
/tiff-3.8.2/html/man/Makefile.in
/tiff-3.8.2/libtiff/Makefile
/tiff-3.8.2/libtiff/Makefile.in
/tiff-3.8.2/libtiff/mkg3states
/tiff-3.8.2/libtiff/stamp-h1
/tiff-3.8.2/libtiff/stamp-h2
/tiff-3.8.2/libtiff/tif_config.h
/tiff-3.8.2/libtiff/tif_config.h.in
/tiff-3.8.2/libtiff/tiffconf.h
/tiff-3.8.2/m4/libtool.m4
/tiff-3.8.2/m4/lt~obsolete.m4
/tiff-3.8.2/m4/ltoptions.m4
/tiff-3.8.2/m4/ltsugar.m4
/tiff-3.8.2/m4/ltversion.m4
/tiff-3.8.2/Makefile
/tiff-3.8.2/Makefile.in
/tiff-3.8.2/man/Makefile
/tiff-3.8.2/man/Makefile.in
/tiff-3.8.2/port/Makefile
/tiff-3.8.2/port/Makefile.in
/tiff-3.8.2/test/Makefile
/tiff-3.8.2/test/Makefile.in
/tiff-3.8.2/tiff-Makefile.tgz
/tiff-3.8.2/tools/bmp2tiff
/tiff-3.8.2/tools/fax2ps
/tiff-3.8.2/tools/fax2tiff
/tiff-3.8.2/tools/gif2tiff
/tiff-3.8.2/tools/Makefile
/tiff-3.8.2/tools/Makefile.in
/tiff-3.8.2/tools/pal2rgb
/tiff-3.8.2/tools/ppm2tiff
/tiff-3.8.2/tools/ras2tiff
/tiff-3.8.2/tools/raw2tiff
/tiff-3.8.2/tools/rgb2ycbcr
/tiff-3.8.2/tools/thumbnail
/tiff-3.8.2/tools/tiff2bw
/tiff-3.8.2/tools/tiff2pdf
/tiff-3.8.2/tools/tiff2ps
/tiff-3.8.2/tools/tiff2rgba
/tiff-3.8.2/tools/tiffcmp
/tiff-3.8.2/tools/tiffcp
/tiff-3.8.2/tools/tiffdither
/tiff-3.8.2/tools/tiffdump
/tiff-3.8.2/tools/tiffgt
/tiff-3.8.2/tools/tiffinfo
/tiff-3.8.2/tools/tiffmedian
/tiff-3.8.2/tools/tiffset
/tiff-3.8.2/tools/tiffsplit
/tiff-*/contrib/acorn/Makefile
/tiff-*/contrib/acorn/Makefile.in
/tiff-*/contrib/addtiffo/addtiffo
/tiff-*/contrib/addtiffo/Makefile
/tiff-*/contrib/addtiffo/Makefile.in
/tiff-*/contrib/dbs/Makefile
/tiff-*/contrib/dbs/Makefile.in
/tiff-*/contrib/dbs/tiff-bi
/tiff-*/contrib/dbs/tiff-grayscale
/tiff-*/contrib/dbs/tiff-palette
/tiff-*/contrib/dbs/tiff-rgb
/tiff-*/contrib/dbs/xtiff/Makefile
/tiff-*/contrib/dbs/xtiff/Makefile.in
/tiff-*/contrib/iptcutil/iptcutil
/tiff-*/contrib/iptcutil/Makefile
/tiff-*/contrib/iptcutil/Makefile.in
/tiff-*/contrib/mac-cw/Makefile
/tiff-*/contrib/mac-cw/Makefile.in
/tiff-*/contrib/mac-mpw/Makefile
/tiff-*/contrib/mac-mpw/Makefile.in
/tiff-*/contrib/Makefile
/tiff-*/contrib/Makefile.in
/tiff-*/contrib/mfs/Makefile
/tiff-*/contrib/mfs/Makefile.in
/tiff-*/contrib/ojpeg/Makefile
/tiff-*/contrib/ojpeg/Makefile.in
/tiff-*/contrib/pds/Makefile
/tiff-*/contrib/pds/Makefile.in
/tiff-*/contrib/ras/Makefile
/tiff-*/contrib/ras/Makefile.in
/tiff-*/contrib/stream/Makefile
/tiff-*/contrib/stream/Makefile.in
/tiff-*/contrib/tags/Makefile
/tiff-*/contrib/tags/Makefile.in
/tiff-*/contrib/win_dib/Makefile
/tiff-*/contrib/win_dib/Makefile.in
/tiff-*/html/images/Makefile
/tiff-*/html/images/Makefile.in
/tiff-*/html/Makefile
/tiff-*/html/Makefile.in
/tiff-*/html/man/Makefile
/tiff-*/html/man/Makefile.in
/tiff-*/libtiff/Makefile
/tiff-*/libtiff/Makefile.in
/tiff-*/libtiff/mkg3states
/tiff-*/libtiff/stamp-h1
/tiff-*/libtiff/stamp-h2
/tiff-*/libtiff/tif_config.h
/tiff-*/libtiff/tif_config.h.in
/tiff-*/libtiff/tiffconf.h
/tiff-*/m4/libtool.m4
/tiff-*/m4/lt~obsolete.m4
/tiff-*/m4/ltoptions.m4
/tiff-*/m4/ltsugar.m4
/tiff-*/m4/ltversion.m4
/tiff-*/Makefile
/tiff-*/Makefile.in
/tiff-*/man/Makefile
/tiff-*/man/Makefile.in
/tiff-*/port/Makefile
/tiff-*/port/Makefile.in
/tiff-*/test/Makefile
/tiff-*/test/Makefile.in
/tiff-*/tiff-Makefile.tgz
/tiff-*/tools/bmp2tiff
/tiff-*/tools/fax2ps
/tiff-*/tools/fax2tiff
/tiff-*/tools/gif2tiff
/tiff-*/tools/Makefile
/tiff-*/tools/Makefile.in
/tiff-*/tools/pal2rgb
/tiff-*/tools/ppm2tiff
/tiff-*/tools/ras2tiff
/tiff-*/tools/raw2tiff
/tiff-*/tools/rgb2ycbcr
/tiff-*/tools/thumbnail
/tiff-*/tools/tiff2bw
/tiff-*/tools/tiff2pdf
/tiff-*/tools/tiff2ps
/tiff-*/tools/tiff2rgba
/tiff-*/tools/tiffcmp
/tiff-*/tools/tiffcp
/tiff-*/tools/tiffdither
/tiff-*/tools/tiffdump
/tiff-*/tools/tiffgt
/tiff-*/tools/tiffinfo
/tiff-*/tools/tiffmedian
/tiff-*/tools/tiffset
/tiff-*/tools/tiffsplit
/unimrcp/build/acmacros/libtool.m4
/unimrcp/build/acmacros/lt~obsolete.m4
/unimrcp/build/acmacros/ltoptions.m4
@ -904,8 +903,8 @@ missing
!/portaudio/bindings/cpp/build/gnu/config.sub
!/portaudio/bindings/cpp/build/gnu/configure
!/portaudio/bindings/cpp/build/gnu/install-sh
!/tiff-3.8.2/config/depcomp
!/tiff-3.8.2/config/missing
!/tiff-*/config/depcomp
!/tiff-*/config/missing
!/xmlrpc-c/install-sh
!/xmlrpc-c/missing
!/yaml/aclocal.m4

View File

@ -304,7 +304,8 @@ typedef enum {
CURLE_UNSUPPORTED_PROTOCOL, /* 1 */
CURLE_FAILED_INIT, /* 2 */
CURLE_URL_MALFORMAT, /* 3 */
CURLE_URL_MALFORMAT_USER, /* 4 - NOT USED */
CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for
7.17.0, reused in April 2011 for 7.21.5] */
CURLE_COULDNT_RESOLVE_PROXY, /* 5 */
CURLE_COULDNT_RESOLVE_HOST, /* 6 */
CURLE_COULDNT_CONNECT, /* 7 */

View File

@ -1190,8 +1190,13 @@ Curl_ossl_connect_step1(struct connectdata *conn,
req_method = TLSv1_client_method();
break;
case CURL_SSLVERSION_SSLv2:
#ifdef OPENSSL_NO_SSL2
failf(data, "OpenSSL was built without SSLv2 support");
return CURLE_NOT_BUILT_IN;
#else
req_method = SSLv2_client_method();
break;
#endif
case CURL_SSLVERSION_SSLv3:
req_method = SSLv3_client_method();
break;

View File

@ -69,6 +69,10 @@ curl_easy_strerror(CURLcode error)
case CURLE_URL_MALFORMAT:
return "URL using bad/illegal format or missing URL";
case CURLE_NOT_BUILT_IN:
return "A requested feature, protocol or option was not found built-in in"
" this libcurl due to a build-time decision.";
case CURLE_COULDNT_RESOLVE_PROXY:
return "couldn't resolve proxy name";
@ -278,7 +282,6 @@ curl_easy_strerror(CURLcode error)
return "caller must register CURLOPT_CONV_ callback options";
/* error codes not used by current libcurl */
case CURLE_URL_MALFORMAT_USER:
case CURLE_FTP_USER_PASSWORD_INCORRECT:
case CURLE_MALFORMAT_USER:
case CURLE_BAD_CALLING_ORDER:

View File

@ -72,6 +72,7 @@ static char prompt_str[512] = "";
static char prompt_color[12] = {ESL_SEQ_DEFAULT_COLOR};
static char input_text_color[12] = {ESL_SEQ_DEFAULT_COLOR};
static char output_text_color[12] = {ESL_SEQ_DEFAULT_COLOR};
static int feature_level = 0;
static cli_profile_t profiles[128] = {{{0}}};
static cli_profile_t internal_profile = {{ 0 }};
static int pcount = 0;
@ -237,7 +238,7 @@ static int console_bufferInput (char *addchars, int len, char *cmd, int key)
return 0;
}
if (key == KEY_TAB) {
esl_console_complete(cmd, cmd+iCmdBuffer, &cmd[iCmdBuffer-1]);
esl_console_complete(cmd, cmd+iCmdBuffer, cmd+iCmdBuffer);
return 0;
}
if (key == KEY_UP || key == KEY_DOWN || key == CLEAR_OP) {
@ -680,9 +681,10 @@ static void *msg_thread_run(esl_thread_t *me, void *obj)
}
#ifndef WIN32
if (aok) {
clear_line();
if (feature_level) clear_line();
printf("%s%s", colors[level], handle->last_event->body);
redisplay();
if (!feature_level) printf("%s", ESL_SEQ_DEFAULT_COLOR);
if (feature_level) redisplay();
}
#else
if (aok) {
@ -1112,6 +1114,7 @@ int main(int argc, char *argv[])
char dft_cfile[512] = "nbess7_cli.conf";
#endif
char *home = getenv("HOME");
char *term = getenv("TERM");
/* Vars for optargs */
int opt;
static struct option options[] = {
@ -1146,6 +1149,17 @@ int main(int argc, char *argv[])
int argv_quiet = 0;
int loops = 2, reconnect = 0, timeout = 0;
if (term && (!strncasecmp("screen", term, 6) ||
!strncasecmp("vt100", term, 5))) {
feature_level = 1;
} else {
feature_level = 0;
}
#ifdef WIN32
feature_level = 0;
#endif
strncpy(internal_profile.host, "127.0.0.1", sizeof(internal_profile.host));
strncpy(internal_profile.pass, "ClueCon", sizeof(internal_profile.pass));
strncpy(internal_profile.name, "internal", sizeof(internal_profile.name));
@ -1279,11 +1293,11 @@ int main(int argc, char *argv[])
snprintf(prompt_str, sizeof(prompt_str), PROMPT_PREFIX "@%s> ", profile->name);
}
bare_prompt_str_len = (int)strlen(bare_prompt_str);
#ifdef WIN32
snprintf(prompt_str, sizeof(prompt_str), "%s", bare_prompt_str); /* Not supporting this for now */
#else
snprintf(prompt_str, sizeof(prompt_str), "%s%s%s", prompt_color, bare_prompt_str, input_text_color);
#endif
if (feature_level) {
snprintf(prompt_str, sizeof(prompt_str), "%s%s%s", prompt_color, bare_prompt_str, input_text_color);
} else {
snprintf(prompt_str, sizeof(prompt_str), "%s", bare_prompt_str);
}
connect:
connected = 0;
while (--loops > 0) {
@ -1310,7 +1324,7 @@ int main(int argc, char *argv[])
}
if (argv_exec) {
const char *err = NULL;
snprintf(cmd_str, sizeof(cmd_str), "api %s\n\n", argv_command);
snprintf(cmd_str, sizeof(cmd_str), "api %s\nconsole_execute: true\n\n", argv_command);
if (timeout) {
esl_status_t status = esl_send_recv_timed(&handle, cmd_str, timeout);
if (status != ESL_SUCCESS) {

View File

@ -42,11 +42,6 @@ static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struc
char path_buffer[1024] = { 0 };
const char *path;
if (fork()) {
close(client_sock);
return;
}
if (esl_attach_handle(&handle, client_sock, addr) != ESL_SUCCESS || !handle.info_event) {
esl_log(ESL_LOG_ERROR, "Socket Error\n");
exit(0);
@ -95,9 +90,7 @@ int main(int argc, char *argv[])
return -1;
}
signal(SIGCHLD, SIG_IGN);
esl_listen(ip, port, mycallback);
esl_listen(ip, port, mycallback, 100000);
return 0;
}

View File

@ -53,10 +53,18 @@
#ifndef WIN32
#define closesocket(x) close(x)
#include <fcntl.h>
#include <errno.h>
#else
#pragma warning (disable:6386)
/* These warnings need to be ignored warning in sdk header */
#include <Ws2tcpip.h>
#include <windows.h>
#ifndef errno
#define errno WSAGetLastError()
#endif
#ifndef EINTR
#define EINTR WSAEINTR
#endif
#pragma warning (default:6386)
#endif
@ -612,12 +620,31 @@ static int esl_socket_reuseaddr(esl_socket_t socket)
#endif
}
ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback)
struct thread_handler {
esl_listen_callback_t callback;
esl_socket_t server_sock;
esl_socket_t client_sock;
struct sockaddr_in addr;
};
static void *client_thread(esl_thread_t *me, void *obj)
{
struct thread_handler *handler = (struct thread_handler *) obj;
handler->callback(handler->server_sock, handler->client_sock, &handler->addr);
free(handler);
return NULL;
}
ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback, int max)
{
esl_socket_t server_sock = ESL_SOCK_INVALID;
struct sockaddr_in addr;
esl_status_t status = ESL_SUCCESS;
struct thread_handler *handler = NULL;
if ((server_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
return ESL_FAIL;
}
@ -634,7 +661,7 @@ ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_list
goto end;
}
if (listen(server_sock, 10000) < 0) {
if (listen(server_sock, max) < 0) {
status = ESL_FAIL;
goto end;
}
@ -655,7 +682,16 @@ ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_list
goto end;
}
callback(server_sock, client_sock, &echoClntAddr);
handler = malloc(sizeof(*handler));
esl_assert(handler);
memset(handler, 0, sizeof(*handler));
handler->callback = callback;
handler->server_sock = server_sock;
handler->client_sock = client_sock;
handler->addr = echoClntAddr;
esl_thread_create_detached(client_thread, handler);
}
end:
@ -1055,7 +1091,21 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms
static esl_ssize_t handle_recv(esl_handle_t *handle, void *data, esl_size_t datalen)
{
return recv(handle->sock, data, datalen, 0);
int activity;
while (handle->connected) {
activity = esl_wait_sock(handle->sock, 1000, ESL_POLL_READ|ESL_POLL_ERROR);
if (activity > 0 && (activity & ESL_POLL_READ)) {
return recv(handle->sock, data, datalen, 0);
}
if (activity < 0) {
return errno == EINTR ? 0 : -1;
}
}
return -1;
}
ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, int check_q, esl_event_t **save_event)

View File

@ -391,7 +391,7 @@ ESL_DECLARE(esl_status_t) esl_attach_handle(esl_handle_t *handle, esl_socket_t s
\param port Port to bind to
\param callback Callback that will be called upon data received
*/
ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback);
ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_listen_callback_t callback, int max);
/*!
\brief Executes application with sendmsg to a specific UUID. Used for outbound socket.
\param handle Handle that the msg will be sent

View File

@ -9,11 +9,6 @@ static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struc
esl_status_t status;
time_t exp = 0;
if (fork()) {
close(client_sock);
return;
}
esl_attach_handle(&handle, client_sock, addr);
esl_log(ESL_LOG_INFO, "Connected! %d\n", handle.sock);
@ -53,7 +48,7 @@ static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struc
int main(void)
{
esl_global_set_default_logger(7);
esl_listen("localhost", 8084, mycallback);
esl_listen("localhost", 8084, mycallback, 100000);
return 0;
}

View File

@ -184,9 +184,9 @@ endif
if HAVE_LIBPRI
mod_LTLIBRARIES += ftmod_libpri.la
ftmod_libpri_la_SOURCES = $(SRC)/ftmod/ftmod_libpri/ftmod_libpri.c $(SRC)/ftmod/ftmod_libpri/lpwrap_pri.c
ftmod_libpri_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS)
ftmod_libpri_la_LDFLAGS = -shared -module -avoid-version -lpri
ftmod_libpri_la_LIBADD = libfreetdm.la
ftmod_libpri_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS) $(LIBPRI_CPPFLAGS)
ftmod_libpri_la_LDFLAGS = -shared -module -avoid-version $(LIBPRI_LDFLAGS)
ftmod_libpri_la_LIBADD = libfreetdm.la $(LIBPRI_LIBS)
endif
if HAVE_PRITAP
@ -251,7 +251,7 @@ endif
if HAVE_MISDN
mod_LTLIBRARIES += ftmod_misdn.la
ftmod_misdn_la_SOURCES = $(SRC)/ftmod/ftmod_misdn/ftmod_misdn.c
ftmod_misdn_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS) $(MISDN_CFLAGS)
ftmod_misdn_la_CFLAGS = $(FTDM_CFLAGS) $(AM_CFLAGS) $(MISDN_CFLAGS) -D_GNU_SOURCE
ftmod_misdn_la_LDFLAGS = -shared -module -avoid-version
ftmod_misdn_la_LIBADD = libfreetdm.la
endif

View File

@ -1 +1,2 @@
m4_include([build/ax_compiler_vendor.m4])
m4_include([build/libpcap.m4])

View File

@ -54,7 +54,7 @@ fi
AC_SUBST([confdir])
DEFAULT_INCLUDES="-I. -I./src/include -I$(srcdir)"
DEFAULT_INCLUDES="-I. -I./src/include -I\$(srcdir)"
AC_SUBST([DEFAULT_INCLUDES])
# Where to install the modules
@ -194,28 +194,46 @@ AM_CONDITIONAL([HAVE_OPENR2], [test "${HAVE_OPENR2}" = "yes"])
#
HAVE_LIBPRI="no"
AC_ARG_WITH([libpri],
[AS_HELP_STRING([--with-libpri], [Install ftmod_libpri])],
[AS_HELP_STRING([--with-libpri@<:@=PREFIX@:>@], [Install ftmod_libpri])],
[case "${withval}" in
no) enable_libpri="no" ;;
*) enable_libpri="yes" ;;
no|yes) with_libpri="${withval}" ;;
*) AS_IF([test -d "${withval}"],
[with_libpri="${withval}"],
[AC_MSG_ERROR([Invalid argument for --with-libpri, \"${withval}\" is not a directory])]
) ;;
esac],
[enable_libpri="no"]
[with_libpri="no"]
)
if test "${enable_libpri}" != "no"
if test "x${with_libpri}" != "xno"
then
save_LIBS="${LIBS}"
save_CPPFLAGS="${CPPFLAGS}"
save_LDFLAGS="${LDFLAGS}"
LIBPRI_CPPFLAGS=""
LIBPRI_LDFLAGS=""
AC_MSG_RESULT([${as_nl}<<>> Digium libpri])
save_LIBS="${LIBS}"
AS_IF([test "x${with_libpri}" != "xyes"],
[LIBPRI_CPPFLAGS="-I${with_libpri}/include"
LIBPRI_LDFLAGS="-L${with_libpri}/lib"],
)
LDFLAGS="${save_LDFLAGS} ${LIBPRI_LDFLAGS}"
CPPFLAGS="${save_CPPFLAGS} ${LIBPRI_CPPFLAGS}"
LIBS="${LIBS} -lpri"
AC_MSG_CHECKING([whether libpri is usable])
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[#include <libpri.h>],
[const char *version = pri_get_version();]
)],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([yes])
HAVE_LIBPRI="yes"],
[AC_MSG_RESULT([no])
AC_MSG_ERROR([libpri is not installed or unusable (see config.log for details)])]
AC_MSG_ERROR([libpri not found or unusable (see config.log for details)])]
)
AC_MSG_CHECKING([whether libpri has BRI support])
@ -241,10 +259,17 @@ then
[AC_MSG_RESULT([no])
AC_MSG_NOTICE([You will need libpri-1.4.12_beta1 or newer for AOC event support])]
)
# libpri is available, set variables for Makefile(.am)
AC_SUBST([LIBPRI_LIBS], [-lpri])
AC_SUBST([LIBPRI_LDFLAGS])
AC_SUBST([LIBPRI_CPPFLAGS])
LIBS="${save_LIBS}"
LDFLAGS="${save_LDFLAGS}"
CPPFLAGS="${save_CPPFLAGS}"
fi
HAVE_LIBPRI="${enable_libpri}"
AM_CONDITIONAL([HAVE_LIBPRI],[test "${enable_libpri}" = "yes"])
AM_CONDITIONAL([HAVE_LIBPRI],[test "x${HAVE_LIBPRI}" = "xyes"])
##
# Sangoma Wanpipe

View File

@ -45,7 +45,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../src/include;../src/include;../src/isdn/include"
AdditionalIncludeDirectories="../../../src/include;../src/include;../../curl/include;../src/isdn/include"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@ -126,7 +126,7 @@
/>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="../../../src/include;../src/include;../src/isdn/include"
AdditionalIncludeDirectories="../../../src/include;../src/include;../../curl/include;../src/isdn/include"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
@ -210,7 +210,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../../src/include;../src/include;../src/isdn/include"
AdditionalIncludeDirectories="../../../src/include;../src/include;../../curl/include;../src/isdn/include"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@ -292,7 +292,7 @@
/>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="../../../src/include;../src/include;../src/isdn/include"
AdditionalIncludeDirectories="../../../src/include;../src/include;../../curl/include;../src/isdn/include"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS"
RuntimeLibrary="2"
UsePrecompiledHeader="0"

View File

@ -91,7 +91,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../src/include;../src/include;../src/isdn/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../src/include;../src/include;../../curl/include;../src/isdn/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -117,7 +117,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>../../../src/include;../src/include;../src/isdn/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../src/include;../src/include;../../curl/include;../src/isdn/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<PrecompiledHeader>
@ -148,7 +148,7 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../src/include;../src/include;../src/isdn/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../src/include;../src/include;../../curl/include;../src/isdn/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -177,7 +177,7 @@
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<AdditionalIncludeDirectories>../../../src/include;../src/include;../src/isdn/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../src/include;../src/include;../../curl/include;../src/isdn/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<PrecompiledHeader>

View File

@ -507,7 +507,7 @@ static switch_status_t channel_on_hangup(switch_core_session_t *session)
const char *name = NULL;
int span_id = 0;
int chan_id = 0;
int t = 0;
uint32_t t = 0;
uint32_t tokencnt;
char *uuid = NULL;
const char *token = NULL;
@ -2317,7 +2317,6 @@ static FIO_SIGNAL_CB_FUNCTION(on_r2_signal)
switch_set_flag_locked(tech_pvt, TFLAG_DEAD);
channel = switch_core_session_get_channel(session);
switch_channel_hangup(channel, caller_data->hangup_cause);
ftdm_channel_clear_token(sigmsg->channel, switch_core_session_get_uuid(session));
switch_core_session_rwunlock(session);
}
}

View File

@ -3969,7 +3969,9 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_process_media(ftdm_channel_t *ftdmchan, v
if (ftdmchan->state == FTDM_CHANNEL_STATE_CALLWAITING && (digit_char == 'D' || digit_char == 'A')) {
ftdmchan->detected_tones[FTDM_TONEMAP_CALLWAITING_ACK]++;
} else {
char digit_str[2] = { digit_char, 0};
char digit_str[2] = { 0 };
digit_str[0] = digit_char;
if (!ftdmchan->span->sig_dtmf || (ftdmchan->span->sig_dtmf(ftdmchan, (const char*)digit_str) != FTDM_BREAK)) {
ftdm_channel_queue_dtmf(ftdmchan, digit_str);

View File

@ -310,9 +310,7 @@ static FIO_API_FUNCTION(ftdm_libpri_api)
stream->write_function(stream, ftdm_libpri_usage);
goto done;
}
}
if (argc == 2) {
} else if (argc == 2) {
if (!strcasecmp(argv[0], "kill")) {
int span_id = atoi(argv[1]);
ftdm_span_t *span = NULL;
@ -321,7 +319,8 @@ static FIO_API_FUNCTION(ftdm_libpri_api)
ftdm_libpri_data_t *isdn_data = span->signal_data;
if (span->start != ftdm_libpri_start) {
stream->write_function(stream, "%s: -ERR invalid span.\n", __FILE__);
stream->write_function(stream, "%s: -ERR '%s' is not a libpri span.\n",
__FILE__, ftdm_span_get_name(span));
goto done;
}
@ -329,13 +328,12 @@ static FIO_API_FUNCTION(ftdm_libpri_api)
stream->write_function(stream, "%s: +OK killed.\n", __FILE__);
goto done;
} else {
stream->write_function(stream, "%s: -ERR invalid span.\n", __FILE__);
stream->write_function(stream, "%s: -ERR span '%s' not found.\n",
__FILE__, argv[0]);
goto done;
}
}
}
if (argc >= 2) {
} else if (argc >= 2) {
if (!strcasecmp(argv[0], "debug")) {
ftdm_span_t *span = NULL;
@ -344,7 +342,8 @@ static FIO_API_FUNCTION(ftdm_libpri_api)
uint32_t flags = 0;
if (span->start != ftdm_libpri_start) {
stream->write_function(stream, "%s: -ERR invalid span.\n", __FILE__);
stream->write_function(stream, "%s: -ERR '%s' is not a libpri span.\n",
__FILE__, ftdm_span_get_name(span));
goto done;
}
@ -364,7 +363,8 @@ static FIO_API_FUNCTION(ftdm_libpri_api)
stream->write_function(stream, "%s: +OK debug %s.\n", __FILE__, (flags) ? "enabled" : "disabled");
goto done;
} else {
stream->write_function(stream, "%s: -ERR invalid span.\n", __FILE__);
stream->write_function(stream, "%s: -ERR span '%s' not found.\n",
__FILE__, argv[0]);
goto done;
}
}
@ -372,8 +372,10 @@ static FIO_API_FUNCTION(ftdm_libpri_api)
ftdm_span_t *span = NULL;
if (ftdm_span_find_by_name(argv[1], &span) == FTDM_SUCCESS) {
ftdm_libpri_data_t *isdn_data = span->signal_data;
if (span->start != ftdm_libpri_start) {
stream->write_function(stream, "%s: -ERR invalid span.\n", __FILE__);
stream->write_function(stream, "%s: -ERR '%s' is not a libpri span.\n",
__FILE__, ftdm_span_get_name(span));
goto done;
}
@ -381,7 +383,8 @@ static FIO_API_FUNCTION(ftdm_libpri_api)
stream->write_function(stream, "%s: +OK reset.\n", __FILE__);
goto done;
} else {
stream->write_function(stream, "%s: -ERR invalid span.\n", __FILE__);
stream->write_function(stream, "%s: -ERR span '%s' not found.\n",
__FILE__, argv[0]);
goto done;
}
}
@ -389,8 +392,10 @@ static FIO_API_FUNCTION(ftdm_libpri_api)
ftdm_span_t *span = NULL;
if (ftdm_span_find_by_name(argv[1], &span) == FTDM_SUCCESS) {
ftdm_libpri_data_t *isdn_data = span->signal_data;
if (span->start != ftdm_libpri_start) {
stream->write_function(stream, "%s: -ERR invalid span.\n", __FILE__);
stream->write_function(stream, "%s: -ERR '%s' is not a libpri span.\n",
__FILE__, ftdm_span_get_name(span));
goto done;
}
if (!strcasecmp(argv[2], "all")) {
@ -405,7 +410,8 @@ static FIO_API_FUNCTION(ftdm_libpri_api)
stream->write_function(stream, "%s: +OK restart set.\n", __FILE__);
goto done;
} else {
stream->write_function(stream, "%s: -ERR invalid span.\n", __FILE__);
stream->write_function(stream, "%s: -ERR span '%s' not found.\n",
__FILE__, argv[0]);
goto done;
}
}
@ -413,8 +419,10 @@ static FIO_API_FUNCTION(ftdm_libpri_api)
ftdm_span_t *span = NULL;
if (ftdm_span_find_by_name(argv[1], &span) == FTDM_SUCCESS) {
ftdm_libpri_data_t *isdn_data = span->signal_data;
if (span->start != ftdm_libpri_start) {
stream->write_function(stream, "%s: -ERR invalid span.\n", __FILE__);
stream->write_function(stream, "%s: -ERR '%s' is not a libpri span.\n",
__FILE__, ftdm_span_get_name(span));
goto done;
}
if (!isdn_data->service_message_support) {
@ -433,11 +441,15 @@ static FIO_API_FUNCTION(ftdm_libpri_api)
stream->write_function(stream, "%s: +OK change status set.\n", __FILE__);
goto done;
} else {
stream->write_function(stream, "%s: -ERR invalid span.\n", __FILE__);
stream->write_function(stream, "%s: -ERR span '%s' not found.\n",
__FILE__, argv[0]);
goto done;
}
}
} else {
/* zero args print usage */
stream->write_function(stream, ftdm_libpri_usage);
goto done;
}
stream->write_function(stream, "%s: -ERR invalid command.\n", __FILE__);
@ -1165,7 +1177,7 @@ static int on_proceeding(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_
if (chan) {
/* Open channel if inband information is available */
if (pevent->proceeding.progressmask & PRI_PROG_INBAND_AVAILABLE) {
if (pevent->proceeding.progressmask & PRI_PROG_INBAND_AVAILABLE || pevent->proceeding.progressmask & PRI_PROG_CALL_NOT_E2E_ISDN) {
ftdm_log(FTDM_LOG_DEBUG, "-- In-band information available, B-Channel %d:%d\n",
ftdm_channel_get_span_id(chan),
ftdm_channel_get_id(chan));
@ -1207,7 +1219,7 @@ static int on_progress(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_ev
if (chan) {
/* Open channel if inband information is available */
if (pevent->proceeding.progressmask & PRI_PROG_INBAND_AVAILABLE) {
if (pevent->proceeding.progressmask & PRI_PROG_INBAND_AVAILABLE || pevent->proceeding.progressmask & PRI_PROG_CALL_NOT_E2E_ISDN) {
ftdm_log(FTDM_LOG_DEBUG, "-- In-band information available, B-Channel %d:%d\n",
ftdm_channel_get_span_id(chan),
ftdm_channel_get_id(chan));

View File

@ -547,7 +547,7 @@ static void handle_pri_passive_event(pritap_t *pritap, pri_event *e)
break;
case PRI_EVENT_PROGRESS:
crv = tap_pri_get_crv(pritap->pri, e->ring.call);
crv = tap_pri_get_crv(pritap->pri, e->proceeding.call);
ftdm_log(FTDM_LOG_DEBUG, "Progress on channel %s:%d:%d with callref %d\n",
pritap->span->name, PRI_SPAN(e->proceeding.channel), PRI_CHANNEL(e->proceeding.channel), crv);
break;

View File

@ -1155,6 +1155,77 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_sangoma_isdn_span_config)
return FTDM_FAIL;
}
if (span_data->cid_name_method == SNGISDN_CID_NAME_AUTO) {
switch (span_data->switchtype) {
case SNGISDN_SWITCH_EUROISDN:
if (FTDM_SPAN_IS_BRI(span)) {
span_data->cid_name_method = SNGISDN_CID_NAME_USR_USR_IE;
} else {
span_data->cid_name_method = SNGISDN_CID_NAME_DISPLAY_IE;
}
break;
case SNGISDN_SWITCH_DMS100:
span_data->cid_name_method = SNGISDN_CID_NAME_DISPLAY_IE;
break;
case SNGISDN_SWITCH_NI2:
case SNGISDN_SWITCH_5ESS:
case SNGISDN_SWITCH_4ESS:
span_data->cid_name_method = SNGISDN_CID_NAME_FACILITY_IE;
break;
default:
break;
}
}
if (span_data->send_cid_name == SNGISDN_OPT_DEFAULT) {
switch (span_data->switchtype) {
case SNGISDN_SWITCH_EUROISDN:
#ifdef SNGISDN_SUPPORT_CALLING_NAME_IN_FACILITY
case SNGISDN_SWITCH_NI2:
case SNGISDN_SWITCH_5ESS:
case SNGISDN_SWITCH_4ESS:
#endif
if (span_data->signalling == SNGISDN_SIGNALING_NET) {
span_data->send_cid_name = SNGISDN_OPT_TRUE;
} else {
span_data->send_cid_name = SNGISDN_OPT_FALSE;
}
break;
case SNGISDN_SWITCH_DMS100:
span_data->send_cid_name = SNGISDN_OPT_TRUE;
break;
#ifndef SNGISDN_SUPPORT_CALLING_NAME_IN_FACILITY
case SNGISDN_SWITCH_NI2:
case SNGISDN_SWITCH_5ESS:
case SNGISDN_SWITCH_4ESS:
span_data->send_cid_name = SNGISDN_OPT_FALSE;
break;
#endif
default:
span_data->send_cid_name = SNGISDN_OPT_FALSE;
break;
}
} else if (span_data->send_cid_name == SNGISDN_OPT_TRUE) {
switch (span_data->switchtype) {
case SNGISDN_SWITCH_NI2:
case SNGISDN_SWITCH_5ESS:
case SNGISDN_SWITCH_4ESS:
#ifndef SNGISDN_SUPPORT_CALLING_NAME_IN_FACILITY
ftdm_log(FTDM_LOG_WARNING, "Sending Calling Name in Facility IE not supported, please update your libsng_isdn library\n");
span_data->send_cid_name = SNGISDN_OPT_FALSE;
#endif
break;
case SNGISDN_SWITCH_INSNET: /* Don't know how to transmit caller ID name on INSNET */
case SNGISDN_SWITCH_QSIG: /* It seems like QSIG does not support Caller ID */
span_data->send_cid_name = SNGISDN_OPT_FALSE;
break;
case SNGISDN_SWITCH_EUROISDN:
break;
default:
span_data->send_cid_name = SNGISDN_OPT_FALSE;
break;
}
}
span->start = ftdm_sangoma_isdn_start;
span->stop = ftdm_sangoma_isdn_stop;

View File

@ -132,6 +132,13 @@ typedef enum {
SNGISDN_AVAIL_UP = 10,
} sngisdn_avail_t;
typedef enum {
SNGISDN_CID_NAME_AUTO,
SNGISDN_CID_NAME_DISPLAY_IE,
SNGISDN_CID_NAME_USR_USR_IE,
SNGISDN_CID_NAME_FACILITY_IE,
} sngisdn_cid_name_t;
typedef enum {
SNGISDN_EVENT_CON_IND = 1,
SNGISDN_EVENT_CON_CFM,
@ -262,10 +269,10 @@ typedef struct sngisdn_span_data {
uint8_t raw_trace_q921; /* TODO: combine with trace_flags */
uint8_t timer_t3;
uint8_t restart_opt;
uint8_t dynamic_tei;
uint8_t restart_timeout;
uint8_t force_sending_complete;
uint8_t cid_name_in_display_ie; /* In BRI, send the CID-name inside Display IE instead of Usr-usr */
uint8_t cid_name_method;
uint8_t send_cid_name;
char* local_numbers[SNGISDN_NUM_LOCAL_NUMBERS];
ftdm_timer_id_t timers[SNGISDN_NUM_SPAN_TIMERS];
ftdm_sched_t *sched;

View File

@ -284,12 +284,14 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
signal_data->ignore_cause_value = SNGISDN_OPT_DEFAULT;
signal_data->timer_t3 = 8;
signal_data->restart_opt = SNGISDN_OPT_DEFAULT;
signal_data->dynamic_tei = SNGISDN_OPT_DEFAULT;
signal_data->link_id = span->span_id;
signal_data->transfer_timeout = 20000;
signal_data->att_remove_dtmf = SNGISDN_OPT_DEFAULT;
signal_data->force_sending_complete = SNGISDN_OPT_DEFAULT;
signal_data->cid_name_method = SNGISDN_CID_NAME_AUTO;
signal_data->send_cid_name = SNGISDN_OPT_DEFAULT;
span->default_caller_data.dnis.plan = FTDM_NPI_INVALID;
span->default_caller_data.dnis.type = FTDM_TON_INVALID;
span->default_caller_data.cid_num.plan = FTDM_NPI_INVALID;
@ -362,8 +364,6 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
parse_yesno(var, val, &signal_data->restart_opt);
} else if (!strcasecmp(var, "channel-restart-timeout")) {
signal_data->restart_timeout = atoi(val);
} else if (!strcasecmp(var, "dynamic-tei")) {
parse_yesno(var, val, &signal_data->dynamic_tei);
} else if (!strcasecmp(var, "local-number")) {
if (add_local_number(val, span) != FTDM_SUCCESS) {
return FTDM_FAIL;
@ -404,8 +404,30 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
#else
ftdm_log(FTDM_LOG_WARNING, "chan-id-invert-extend-bit is not supported in your version of libsng_isdn\n");
#endif
} else if (!strcasecmp(var, "cid-name-in-display-ie")) {
parse_yesno(var, val, &signal_data->cid_name_in_display_ie);
} else if (!strcasecmp(var, "cid-name-transmit-method")) {
if (!strcasecmp(val, "display-ie")) {
signal_data->cid_name_method = SNGISDN_CID_NAME_DISPLAY_IE;
} else if (!strcasecmp(val, "user-user-ie")) {
signal_data->cid_name_method = SNGISDN_CID_NAME_USR_USR_IE;
} else if (!strcasecmp(val, "facility-ie")) {
signal_data->cid_name_method = SNGISDN_CID_NAME_FACILITY_IE;
} else if (!strcasecmp(val, "auto") || !strcasecmp(val, "automatic") || !strcasecmp(val, "default")) {
signal_data->cid_name_method = SNGISDN_CID_NAME_AUTO;
} else {
ftdm_log(FTDM_LOG_WARNING, "Invalid option %s for parameter %s\n", val, var);
signal_data->cid_name_method = SNGISDN_CID_NAME_AUTO;
}
} else if (!strcasecmp(var, "send-cid-name")) {
if (!strcasecmp(val, "yes")) {
signal_data->send_cid_name = SNGISDN_OPT_TRUE;
} else if (!strcasecmp(val, "no")) {
signal_data->send_cid_name = SNGISDN_OPT_FALSE;
} else if (!strcasecmp(val, "auto") || !strcasecmp(val, "automatic") || !strcasecmp(val, "default")) {
signal_data->send_cid_name = SNGISDN_OPT_DEFAULT;
} else {
ftdm_log(FTDM_LOG_WARNING, "Invalid option %s for parameter %s\n", val, var);
signal_data->send_cid_name = SNGISDN_OPT_DEFAULT;
}
} else {
ftdm_log(FTDM_LOG_WARNING, "Ignoring unknown parameter %s\n", ftdm_parameters[paramindex].var);
}

View File

@ -865,12 +865,6 @@ ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
return FTDM_FAIL;
}
/* Override TEI teiAlloc Option if user specified it */
if (signal_data->dynamic_tei != SNGISDN_OPT_DEFAULT ) {
ftdm_log(FTDM_LOG_DEBUG, "%s: TEI allocation set to %s\n", span->name, (signal_data->dynamic_tei == SNGISDN_OPT_TRUE)? "dynamic": "static");
cfg.t.cfg.s.inDLSAP.teiAlloc = (signal_data->dynamic_tei==SNGISDN_OPT_TRUE)?IN_DYNAMIC:IN_STATIC;
}
if (sng_isdn_q931_config(&pst, &cfg)) {
return FTDM_FAIL;
}

View File

@ -897,12 +897,19 @@ int16_t sngisdn_rcv_l1_data_req(uint16_t spId, sng_l1_frame_t *l1_frame)
do {
flags = FTDM_WRITE;
status = signal_data->dchan->fio->wait(signal_data->dchan, &flags, 1000);
if (status != FTDM_SUCCESS) {
ftdm_log_chan_msg(signal_data->dchan, FTDM_LOG_WARNING, "transmit timed-out\n");
return -1;
switch(status) {
case FTDM_SUCCESS:
break;
case FTDM_TIMEOUT:
continue;
case FTDM_FAIL:
default:
ftdm_log_chan_msg(signal_data->dchan, FTDM_LOG_WARNING, "failed to poll for channel\n");
return -1;
}
/* status = FTDM_SUCCESS */
if ((flags & FTDM_WRITE)) {
#if 0
int i;
@ -993,7 +1000,9 @@ void sngisdn_rcv_sng_log(uint8_t level, char *fmt,...)
ftdm_log(FTDM_LOG_DEBUG, "sng_isdn->%s\n", data);
break;
case SNG_LOGLEVEL_WARN:
ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s\n", data);
if ( strncmp(data, "Invalid Q.921/Q.931 frame", 25) ) {
ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s", data);
}
break;
case SNG_LOGLEVEL_INFO:
ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s\n", data);

View File

@ -567,7 +567,7 @@ ftdm_status_t set_calling_num2(ftdm_channel_t *ftdmchan, CgPtyNmb *cgPtyNmb)
ftdm_caller_data_t *caller_data = &ftdmchan->caller_data;
string = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "isdn.cg_pty2.digits");
if ((string == NULL) || !(*string)) {
if (ftdm_strlen_zero(string)) {
return FTDM_FAIL;
}
@ -696,70 +696,71 @@ ftdm_status_t set_redir_num(ftdm_channel_t *ftdmchan, RedirNmb *redirNmb)
ftdm_status_t set_calling_name(ftdm_channel_t *ftdmchan, ConEvnt *conEvnt)
{
uint8_t len;
ftdm_caller_data_t *caller_data = &ftdmchan->caller_data;
/* sngisdn_chan_data_t *sngisdn_info = ftdmchan->call_data; */
const char *string = NULL;
ftdm_caller_data_t *caller_data = &ftdmchan->caller_data;
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) ftdmchan->span->signal_data;
ftdm_bool_t force_send_cid_name = FTDM_FALSE;
len = strlen(caller_data->cid_name);
if (!len) {
return FTDM_SUCCESS;
}
if (FTDM_SPAN_IS_BRI(ftdmchan->span) &&
signal_data->cid_name_in_display_ie != SNGISDN_OPT_TRUE) {
conEvnt->usrUsr.eh.pres = PRSNT_NODEF;
conEvnt->usrUsr.protocolDisc.pres = PRSNT_NODEF;
conEvnt->usrUsr.protocolDisc.val = PD_IA5; /* IA5 chars */
conEvnt->usrUsr.usrInfo.pres = PRSNT_NODEF;
conEvnt->usrUsr.usrInfo.len = len;
/* in sangoma_brid we used to send usr-usr info as <cid_name>!<calling_number>,
change to previous style if current one does not work */
memcpy(conEvnt->usrUsr.usrInfo.val, caller_data->cid_name, len);
} else {
switch (signal_data->switchtype) {
case SNGISDN_SWITCH_NI2:
#ifdef SNGISDN_SUPPORT_CALLING_NAME_IN_FACILITY
{
if (signal_data->signalling == SNGISDN_SIGNALING_NET) {
sng_isdn_encode_facility_caller_name(caller_data->cid_name, conEvnt->facilityStr.facilityStr.val, &conEvnt->facilityStr.facilityStr.len);
conEvnt->facilityStr.eh.pres = PRSNT_NODEF;
conEvnt->facilityStr.facilityStr.pres = PRSNT_NODEF;
}
}
#endif
break;
case SNGISDN_SWITCH_EUROISDN:
if (signal_data->signalling != SNGISDN_SIGNALING_NET) {
break;
}
/* follow through */
case SNGISDN_SWITCH_5ESS:
case SNGISDN_SWITCH_4ESS:
conEvnt->display.dispInfo.pres = PRSNT_NODEF;
conEvnt->display.dispInfo.len = len;
memcpy(conEvnt->display.dispInfo.val, caller_data->cid_name, len);
break;
case SNGISDN_SWITCH_DMS100:
conEvnt->ntDisplay[0].eh.pres = PRSNT_NODEF;
conEvnt->ntDisplay[0].dispTypeNt.pres = PRSNT_NODEF;
conEvnt->ntDisplay[0].dispTypeNt.val = 0x01; /* Calling Party Name */
conEvnt->ntDisplay[0].assocInfo.pres = PRSNT_NODEF;
conEvnt->ntDisplay[0].assocInfo.val = 0x03; /* Included */
conEvnt->ntDisplay[0].eh.pres = PRSNT_NODEF;
conEvnt->ntDisplay[0].eh.pres = PRSNT_NODEF;
conEvnt->ntDisplay[0].dispInfo.pres = PRSNT_NODEF;
conEvnt->ntDisplay[0].dispInfo.len = len;
memcpy(conEvnt->ntDisplay[0].dispInfo.val, caller_data->cid_name, len);
break;
case SNGISDN_SWITCH_QSIG:
/* It seems like QSIG does not support Caller ID Name */
break;
case SNGISDN_SWITCH_INSNET:
/* Don't know how to transmit caller ID name on INSNET */
break;
string = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "isdn.send_cid_name");
if (!ftdm_strlen_zero(string)) {
if (!strcasecmp(string, "no")) {
return FTDM_SUCCESS;
} else if (!strcasecmp(string, "yes")) {
force_send_cid_name = FTDM_TRUE;
}
}
if (force_send_cid_name == FTDM_FALSE && signal_data->send_cid_name == SNGISDN_OPT_FALSE) {
return FTDM_SUCCESS;
}
switch(signal_data->cid_name_method) {
case SNGISDN_CID_NAME_FACILITY_IE:
#ifdef SNGISDN_SUPPORT_CALLING_NAME_IN_FACILITY
/* Note: The Facility IE will be overwritten if user chose to transmit a Raw Facility IE */
sng_isdn_encode_facility_caller_name(caller_data->cid_name, conEvnt->facilityStr.facilityStr.val, &conEvnt->facilityStr.facilityStr.len);
conEvnt->facilityStr.eh.pres = PRSNT_NODEF;
conEvnt->facilityStr.facilityStr.pres = PRSNT_NODEF;
#endif
break;
case SNGISDN_CID_NAME_USR_USR_IE:
conEvnt->usrUsr.eh.pres = PRSNT_NODEF;
conEvnt->usrUsr.protocolDisc.pres = PRSNT_NODEF;
conEvnt->usrUsr.protocolDisc.val = PD_IA5; /* IA5 chars */
conEvnt->usrUsr.usrInfo.pres = PRSNT_NODEF;
conEvnt->usrUsr.usrInfo.len = len;
/* in sangoma_brid we used to send usr-usr info as <cid_name>!<calling_number>,
change to previous style if current one does not work */
memcpy(conEvnt->usrUsr.usrInfo.val, caller_data->cid_name, len);
break;
case SNGISDN_CID_NAME_DISPLAY_IE:
if (signal_data->switchtype == SNGISDN_SWITCH_DMS100) {
conEvnt->ntDisplay[0].eh.pres = PRSNT_NODEF;
conEvnt->ntDisplay[0].dispTypeNt.pres = PRSNT_NODEF;
conEvnt->ntDisplay[0].dispTypeNt.val = 0x01; /* Calling Party Name */
conEvnt->ntDisplay[0].assocInfo.pres = PRSNT_NODEF;
conEvnt->ntDisplay[0].assocInfo.val = 0x03; /* Included */
conEvnt->ntDisplay[0].eh.pres = PRSNT_NODEF;
conEvnt->ntDisplay[0].eh.pres = PRSNT_NODEF;
conEvnt->ntDisplay[0].dispInfo.pres = PRSNT_NODEF;
conEvnt->ntDisplay[0].dispInfo.len = len;
memcpy(conEvnt->ntDisplay[0].dispInfo.val, caller_data->cid_name, len);
} else {
conEvnt->display.eh.pres = PRSNT_NODEF;
conEvnt->display.dispInfo.pres = PRSNT_NODEF;
conEvnt->display.dispInfo.len = len;
memcpy(conEvnt->display.dispInfo.val, caller_data->cid_name, len);
}
break;
default:
break;
}
return FTDM_SUCCESS;
}
@ -767,7 +768,7 @@ ftdm_status_t set_calling_subaddr(ftdm_channel_t *ftdmchan, CgPtySad *cgPtySad)
{
const char* clg_subaddr = NULL;
clg_subaddr = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "isdn.calling_subaddr");
if ((clg_subaddr != NULL) && (*clg_subaddr)) {
if (!ftdm_strlen_zero(clg_subaddr)) {
unsigned len = strlen (clg_subaddr);
cgPtySad->eh.pres = PRSNT_NODEF;
cgPtySad->typeSad.pres = 1;

View File

@ -62,6 +62,7 @@ sng_switch_type_t sng_switch_type_map[] =
{ 1, "india" , LSI_SW_INDIA , LSI_SW_INDIA },
{ 1, "uk" , LSI_SW_UK , LSI_SW_UK },
{ 1, "russia" , LSI_SW_RUSSIA , LSI_SW_RUSSIA },
{ 1, "china" , LSI_SW_CHINA , LSI_SW_CHINA },
{ 0, "", 0, 0 },
};

View File

@ -256,7 +256,7 @@ static void zt_build_gains(struct zt_gains *g, float rxgain, float txgain, int c
}
/**
* \brief Initialises a range of ftdmtel channels
* \brief Initialises a range of Zaptel/DAHDI channels
* \param span FreeTDM span
* \param start Initial wanpipe channel number
* \param end Final wanpipe channel number
@ -349,7 +349,7 @@ static unsigned zt_open_range(ftdm_span_t *span, unsigned start, unsigned end, f
}
if (ioctl(CONTROL_FD, codes.CHANCONFIG, &cc)) {
ftdm_log(FTDM_LOG_WARNING, "this ioctl fails on older ftdmtel but is harmless if you used ztcfg\n[device %s chan %d fd %d (%s)]\n", chanpath, x, CONTROL_FD, strerror(errno));
ftdm_log(FTDM_LOG_WARNING, "this ioctl fails in older zaptel but is harmless if you used ztcfg\n[device %s chan %d fd %d (%s)]\n", chanpath, x, CONTROL_FD, strerror(errno));
}
}
@ -453,7 +453,7 @@ static unsigned zt_open_range(ftdm_span_t *span, unsigned start, unsigned end, f
}
/**
* \brief Initialises an freetdm ftdmtel span from a configuration string
* \brief Initialises a freetdm Zaptel/DAHDI span from a configuration string
* \param span FreeTDM span
* \param str Configuration string
* \param type FreeTDM span type
@ -523,7 +523,7 @@ static FIO_CONFIGURE_SPAN_FUNCTION(zt_configure_span)
}
/**
* \brief Process configuration variable for a ftdmtel profile
* \brief Process configuration variable for a Zaptel/DAHDI profile
* \param category Wanpipe profile name
* \param var Variable name
* \param val Variable value
@ -601,7 +601,7 @@ static FIO_CONFIGURE_FUNCTION(zt_configure)
}
/**
* \brief Opens a ftdmtel channel
* \brief Opens a Zaptel/DAHDI channel
* \param ftdmchan Channel to open
* \return Success or failure
*/
@ -671,7 +671,7 @@ static FIO_OPEN_FUNCTION(zt_open)
}
/**
* \brief Closes ftdmtel channel
* \brief Closes Zaptel/DAHDI channel
* \param ftdmchan Channel to close
* \return Success
*/
@ -689,7 +689,7 @@ static FIO_CLOSE_FUNCTION(zt_close)
}
/**
* \brief Executes an FreeTDM command on a ftdmtel channel
* \brief Executes a FreeTDM command on a Zaptel/DAHDI channel
* \param ftdmchan Channel to execute command on
* \param command FreeTDM command to execute
* \param obj Object (unused)
@ -870,7 +870,7 @@ static FIO_COMMAND_FUNCTION(zt_command)
}
/**
* \brief Gets alarms from a ftdmtel Channel
* \brief Gets alarms from a Zaptel/DAHDI channel
* \param ftdmchan Channel to get alarms from
* \return Success or failure
*/
@ -893,7 +893,7 @@ static FIO_GET_ALARMS_FUNCTION(zt_get_alarms)
}
/**
* \brief Waits for an event on a ftdmtel channel
* \brief Waits for an event on a Zaptel/DAHDI channel
* \param ftdmchan Channel to open
* \param flags Type of event to wait for
* \param to Time to wait (in ms)
@ -967,7 +967,7 @@ pollagain:
}
/**
* \brief Checks for events on a ftdmtel span
* \brief Checks for events on a Zaptel/DAHDI span
* \param span Span to check for events
* \param ms Time to wait for event
* \return Success if event is waiting or failure if not
@ -1164,7 +1164,7 @@ FIO_CHANNEL_NEXT_EVENT_FUNCTION(zt_channel_next_event)
}
/**
* \brief Retrieves an event from a ftdmtel span
* \brief Retrieves an event from a Zaptel/DAHDI span
* \param span Span to retrieve event from
* \param event FreeTDM event to return
* \return Success or failure
@ -1204,7 +1204,7 @@ FIO_SPAN_NEXT_EVENT_FUNCTION(zt_next_event)
}
/**
* \brief Reads data from a ftdmtel channel
* \brief Reads data from a Zaptel/DAHDI channel
* \param ftdmchan Channel to read from
* \param data Data buffer
* \param datalen Size of data buffer
@ -1246,7 +1246,7 @@ static FIO_READ_FUNCTION(zt_read)
}
/**
* \brief Writes data to a ftdmtel channel
* \brief Writes data to a Zaptel/DAHDI channel
* \param ftdmchan Channel to write to
* \param data Data buffer
* \param datalen Size of data buffer
@ -1285,7 +1285,7 @@ tryagain:
}
/**
* \brief Destroys a ftdmtel Channel
* \brief Destroys a Zaptel/DAHDI Channel
* \param ftdmchan Channel to destroy
* \return Success
*/
@ -1298,12 +1298,12 @@ static FIO_CHANNEL_DESTROY_FUNCTION(zt_channel_destroy)
}
/**
* \brief Global FreeTDM IO interface for ftdmtel
* \brief Global FreeTDM IO interface for Zaptel/DAHDI
*/
static ftdm_io_interface_t zt_interface;
/**
* \brief Loads ftdmtel IO module
* \brief Loads Zaptel/DAHDI IO module
* \param fio FreeTDM IO interface
* \return Success or failure
*/
@ -1358,7 +1358,7 @@ static FIO_IO_LOAD_FUNCTION(zt_init)
}
/**
* \brief Unloads ftdmtel IO module
* \brief Unloads Zaptel/DAHDI IO module
* \return Success
*/
static FIO_IO_UNLOAD_FUNCTION(zt_destroy)
@ -1369,7 +1369,7 @@ static FIO_IO_UNLOAD_FUNCTION(zt_destroy)
}
/**
* \brief FreeTDM ftdmtel IO module definition
* \brief FreeTDM Zaptel/DAHDI IO module definition
*/
ftdm_module_t ftdm_module = {
"zt",

View File

@ -104,6 +104,10 @@
#include <sys/time.h>
#endif
#ifdef __linux__
#include <execinfo.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -220,6 +224,27 @@ 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)
#ifdef __linux__
#define ftdm_print_stack(level) \
do { \
void *__stacktrace[100] = { 0 }; \
char **__symbols = NULL; \
int __size = 0; \
int __i = 0; \
__size = backtrace(__stacktrace, ftdm_array_len(__stacktrace)); \
__symbols = backtrace_symbols(__stacktrace, __size); \
if (__symbols) { \
for (__i = 0; __i < __size; __i++) { \
ftdm_log(__level, "%s\n", __symbols[i]); \
} \
free(__symbols); \
} \
} while (0);
#else
#define ftdm_print_stack(level) ftdm_log(level, "FTDM_PRINT_STACK is not implemented in this operating system!\n");
#endif
#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

View File

@ -1,16 +1,25 @@
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
Software Foundation, Inc.
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. This file is offered as-is,
without warranty of any kind.
Basic Installation
==================
These are generic installation instructions.
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package. Some packages provide this
`INSTALL' file but do not implement all of the features documented
below. The lack of an optional feature in a given package is not
necessarily a bug. More recommendations for GNU packages can be found
in *note Makefile Conventions: (standards)Makefile Conventions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
@ -23,9 +32,9 @@ debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. (Caching is
the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
cache files.)
cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
@ -35,30 +44,37 @@ some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You only need
`configure.ac' if you want to change it or regenerate `configure' using
a newer version of `autoconf'.
`configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
The simplest way to compile this package is:
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
`./configure' to configure the package for your system.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
Running `configure' might take a while. While running, it prints
some messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
the package, generally using the just-built uninstalled binaries.
4. Type `make install' to install the programs and any data files and
documentation.
documentation. When installing into a prefix owned by root, it is
recommended that the package be configured and built as a regular
user, and only the `make install' phase executed with root
privileges.
5. You can remove the program binaries and object files from the
5. Optionally, type `make installcheck' to repeat any self-tests, but
this time using the binaries in their final installed location.
This target does not install anything. Running this target as a
regular user, particularly if the prior `make install' required
root privileges, verifies that the installation completed
correctly.
6. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
@ -67,45 +83,69 @@ The simplest way to compile this package is:
all sorts of other programs in order to regenerate files that came
with the distribution.
7. Often, you can also type `make uninstall' to remove the installed
files again. In practice, not all packages have tested that
uninstallation works correctly, even though it is required by the
GNU Coding Standards.
8. Some packages, particularly those that use Automake, provide `make
distcheck', which can by used by developers to test that all other
targets like `make install' and `make uninstall' work correctly.
This target is generally not run by end users.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. Run `./configure --help'
for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
source code in the directory that `configure' is in and in `..'. This
is known as a "VPATH" build.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a
time in the source code directory. After you have installed the
package for one architecture, use `make distclean' before reconfiguring
for another architecture.
With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.
On MacOS X 10.5 and later systems, you can create libraries and
executables that work on multiple system types--known as "fat" or
"universal" binaries--by specifying multiple `-arch' options to the
compiler but only a single `-arch' option to the preprocessor. Like
this:
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CPP="gcc -E" CXXCPP="g++ -E"
This is not guaranteed to produce working output in all cases, you
may have to build one architecture at a time and combine the results
using the `lipo' tool if you have problems.
Installation Names
==================
By default, `make install' installs the package's commands under
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
`configure' the option `--prefix=PREFIX', where PREFIX must be an
absolute file name.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
@ -116,16 +156,47 @@ Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
you can set and what kinds of files go in them. In general, the
default for these options is expressed in terms of `${prefix}', so that
specifying just `--prefix' will affect all of the other directory
specifications that were not explicitly provided.
The most portable way to affect installation locations is to pass the
correct locations to `configure'; however, many packages provide one or
both of the following shortcuts of passing variable assignments to the
`make install' command line to change installation locations without
having to reconfigure or recompile.
The first method involves providing an override variable for each
affected directory. For example, `make install
prefix=/alternate/directory' will choose an alternate location for all
directory configuration variables that were expressed in terms of
`${prefix}'. Any directories that were specified during `configure',
but not in terms of `${prefix}', must each be overridden at install
time for the entire installation to be relocated. The approach of
makefile variable overrides for each directory variable is required by
the GNU Coding Standards, and ideally causes no recompilation.
However, some platforms have known limitations with the semantics of
shared libraries that end up requiring recompilation when using this
method, particularly noticeable in packages that use GNU Libtool.
The second method involves providing the `DESTDIR' variable. For
example, `make install DESTDIR=/alternate/directory' will prepend
`/alternate/directory' before all installation names. The approach of
`DESTDIR' overrides is not required by the GNU Coding Standards, and
does not work on platforms that have drive letters. On the other hand,
it does better at avoiding recompilation issues, and works well even
when some directory options were not specified in terms of `${prefix}'
at `configure' time.
Optional Features
=================
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
@ -137,14 +208,53 @@ find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Some packages offer the ability to configure how verbose the
execution of `make' will be. For these packages, running `./configure
--enable-silent-rules' sets the default to minimal output, which can be
overridden with `make V=1'; while running `./configure
--disable-silent-rules' sets the default to verbose, which can be
overridden with `make V=0'.
Particular systems
==================
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
CC is not installed, it is recommended to use the following options in
order to use an ANSI C compiler:
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
a workaround. If GNU CC is not installed, it is therefore recommended
to try
./configure CC="cc"
and if that doesn't work, try
./configure CC="cc -nodtk"
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
directory contains several dysfunctional programs; working variants of
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
in your `PATH', put it _after_ `/usr/bin'.
On Haiku, software installed for all users goes in `/boot/common',
not `/usr/local'. It is recommended to use the following options:
./configure --prefix=/boot/common
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
@ -152,7 +262,8 @@ type, such as `sun4', or a canonical name which has the form:
where SYSTEM can have one of these forms:
OS KERNEL-OS
OS
KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
@ -170,9 +281,9 @@ eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
@ -181,7 +292,7 @@ A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
@ -190,21 +301,29 @@ them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script). Here is a another example:
overridden in the site shell script).
/bin/bash ./configure CONFIG_SHELL=/bin/bash
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf bug. Until the bug is fixed you can use this workaround:
Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
configuration-related scripts to be executed by `/bin/bash'.
CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`configure' recognizes the following options to control how it
operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
Print a summary of all of the options to `configure', and exit.
`--help=short'
`--help=recursive'
Print a summary of the options unique to this package's
`configure', and exit. The `short' variant lists options used
only in the top level, while the `recursive' variant lists options
also present in any nested packages.
`--version'
`-V'
@ -231,6 +350,16 @@ configuration-related scripts to be executed by `/bin/bash'.
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--prefix=DIR'
Use DIR as the installation prefix. *note Installation Names::
for more details, including other options available for fine-tuning
the installation locations.
`--no-create'
`-n'
Run the configure checks, but stop before creating any output
files.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

View File

@ -50,7 +50,10 @@ AC_SEARCH_LIBS(recv,socket)
AC_CHECK_FUNCS(getopt_long)
AC_CHECK_FUNCS(getaddrinfo)
AX_PATH_LIBGNUTLS(,AC_DEFINE(HAVE_GNUTLS,,"Use libgnutls"))
#AX_PATH_LIBGNUTLS(,AC_DEFINE(HAVE_GNUTLS,,"Use libgnutls"))
m4_include([openssl.m4])
SAC_OPENSSL
dnl Check -Wall flag of GCC
if test "x$GCC" = "xyes"; then

49
libs/iksemel/openssl.m4 Normal file
View File

@ -0,0 +1,49 @@
dnl ======================================================================
dnl SAC_OPENSSL
dnl ======================================================================
AC_DEFUN([SAC_OPENSSL], [
AC_ARG_WITH(openssl,
[ --with-openssl use OpenSSL [[enabled]]],, with_openssl=pkg-config)
dnl SOSXXX:SAC_ASSERT_DEF([openssl libraries])
if test "$with_openssl" = no ;then
: # No openssl
else
if test "$with_openssl" = "pkg-config" ; then
PKG_CHECK_MODULES(openssl, openssl,
[HAVE_TLS=1 HAVE_SSL=1 LIBS="$openssl_LIBS $LIBS"],
[HAVE_SSL=0])
fi
if test x$HAVE_SSL = x1 ; then
AC_DEFINE([HAVE_LIBCRYPTO], 1, [Define to 1 if you have the `crypto' library (-lcrypto).])
AC_DEFINE([HAVE_LIBSSL], 1, [Define to 1 if you have the `ssl' library (-lssl).])
else
AC_CHECK_HEADERS([openssl/tls1.h], [
HAVE_SSL=1 HAVE_TLS=1
AC_CHECK_LIB(crypto, BIO_new,,
HAVE_SSL=0
AC_MSG_WARN(OpenSSL crypto library was not found))
AC_CHECK_LIB(ssl, TLSv1_method,,
HAVE_TLS=0
AC_MSG_WARN(OpenSSL protocol library was not found))
],[AC_MSG_WARN(OpenSSL include files were not found)])
fi
if test x$HAVE_SSL = x1; then
AC_DEFINE([HAVE_SSL], 1, [Define to 1 if you have OpenSSL])
fi
if test x$HAVE_TLS = x1; then
AC_DEFINE([HAVE_TLS], 1, [Define to 1 if you have TLS])
fi
fi
AM_CONDITIONAL(HAVE_TLS, test x$HAVE_TLS = x1)
])

View File

@ -19,6 +19,19 @@
#include <gnutls/gnutls.h>
#endif
#ifdef HAVE_SSL
#include <openssl/ssl.h>
#include <openssl/err.h>
#ifdef WIN32
typedef unsigned __int32 uint32_t;
#else
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
#include <poll.h>
#endif
#endif
#define SF_FOREIGN 1
#define SF_TRY_SECURE 2
#define SF_SECURE 4
@ -41,9 +54,63 @@ struct stream_data {
#ifdef HAVE_GNUTLS
gnutls_session sess;
gnutls_certificate_credentials cred;
#elif HAVE_SSL
SSL* ssl;
SSL_CTX* ssl_ctx;
#endif
};
#ifdef HAVE_SSL
#ifdef WIN32
static int sock_read_ready(struct stream_data *data, uint32_t ms)
{
int r = 0;
fd_set fds;
struct timeval tv;
FD_ZERO(&fds);
#ifdef WIN32
#pragma warning( push )
#pragma warning( disable : 4127 )
FD_SET(SSL_get_fd(data->ssl), &fds);
#pragma warning( pop )
#else
FD_SET(SSL_get_fd(data->ssl), &fds);
#endif
tv.tv_sec = ms / 1000;
tv.tv_usec = (ms % 1000) * ms;
r = select (SSL_get_fd(data->ssl) + 1, &fds, NULL, NULL, &tv);
return r;
}
#else
static int sock_read_ready(struct stream_data *data, int ms)
{
struct pollfd pfds[2] = { { 0 } };
int s = 0, r = 0;
pfds[0].fd = SSL_get_fd(data->ssl);
pfds[0].events |= POLLIN;
s = poll(pfds, 1, ms);
if (s < 0) {
r = s;
} else if (s > 0) {
if ((pfds[0].revents & POLLIN)) {
r = 1;
}
}
return r;
}
#endif
#endif
#ifdef HAVE_GNUTLS
#ifndef WIN32
#include <gcrypt.h>
@ -120,6 +187,86 @@ handshake (struct stream_data *data)
iks_send_header (data->prs, data->server);
return IKS_OK;
} // HAVE_GNUTLS
#elif HAVE_SSL
static int wait_for_data(struct stream_data *data, int ret, int timeout)
{
struct timeval tv;
fd_set fds;
int err;
int retval = IKS_OK;
err = SSL_get_error(data->ssl, ret);
switch(err)
{
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
ret = sock_read_ready(data, timeout*1000);
if (ret == -1) {
retval = IKS_NET_TLSFAIL;
}
break;
default:
if(data->logHook)
data->logHook(data->user_data, ERR_error_string(err, NULL), strlen(ERR_error_string(err, NULL)), 1);
retval = IKS_NET_TLSFAIL;
break;
}
ERR_clear_error();
return retval;
}
static int
handshake (struct stream_data *data)
{
int ret;
int finished;
SSL_library_init();
SSL_load_error_strings();
data->ssl_ctx = SSL_CTX_new(TLSv1_method());
if(!data->ssl_ctx) return IKS_NOMEM;
data->ssl = SSL_new(data->ssl_ctx);
if(!data->ssl) return IKS_NOMEM;
if( SSL_set_fd(data->ssl, (int)data->sock) != 1 ) return IKS_NOMEM;
/* Set both the read and write BIO's to non-blocking mode */
BIO_set_nbio(SSL_get_rbio(data->ssl), 1);
BIO_set_nbio(SSL_get_wbio(data->ssl), 1);
finished = 0;
do
{
ret = SSL_connect(data->ssl);
if( ret != 1 )
{
if( wait_for_data(data, ret, 1) != IKS_OK )
{
finished = 1;
SSL_free(data->ssl);
}
}
} while( ret != 1 && finished != 1 );
if( ret == 1 )
{
data->flags &= (~SF_TRY_SECURE);
data->flags |= SF_SECURE;
iks_send_header (data->prs, data->server);
}
return ret == 1 ? IKS_OK : IKS_NET_TLSFAIL;
}
#endif
@ -295,6 +442,15 @@ tagHook (struct stream_data *data, char *name, char **atts, int type)
return IKS_NET_TLSFAIL;
}
}
#elif HAVE_SSL
if (data->flags & SF_TRY_SECURE) {
if (strcmp (name, "proceed") == 0) {
err = handshake (data);
return err;
} else if (strcmp (name, "failure") == 0){
return IKS_NET_TLSFAIL;
}
}
#endif
if (data->current) {
x = iks_insert (data->current, name);
@ -351,6 +507,11 @@ deleteHook (struct stream_data *data)
gnutls_deinit (data->sess);
gnutls_certificate_free_credentials (data->cred);
}
#elif HAVE_SSL
if (data->flags & SF_SECURE) {
if( SSL_shutdown(data->ssl) == 0 ) SSL_shutdown(data->ssl);
SSL_free(data->ssl);
}
#endif
if (data->trans) data->trans->close (data->sock);
data->trans = NULL;
@ -507,6 +668,12 @@ iks_recv (iksparser *prs, int timeout)
{
struct stream_data *data = iks_user_data (prs);
int len, ret;
#ifdef HAVE_SSL
int err;
struct timeval tv;
fd_set fds;
#endif
while (1) {
#ifdef HAVE_GNUTLS
@ -514,6 +681,34 @@ iks_recv (iksparser *prs, int timeout)
len = gnutls_record_recv (data->sess, data->buf, NET_IO_BUF_SIZE - 1);
if (len == 0) len = -1;
} else
#elif HAVE_SSL
if (data->flags & SF_SECURE) {
ret = sock_read_ready(data, timeout*1000);
if (ret == -1) {
return IKS_NET_TLSFAIL;
} else if( ret == 0 ) {
return IKS_OK;
} else {
len = SSL_read(data->ssl, data->buf, NET_IO_BUF_SIZE - 1);
}
if( len <= 0 )
{
switch( err = SSL_get_error(data->ssl, len) )
{
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
return IKS_OK;
break;
default:
if(data->logHook)
data->logHook(data->user_data, ERR_error_string(err, NULL), strlen(ERR_error_string(err, NULL)), 1);
return IKS_NET_TLSFAIL;
break;
}
}
} else
#endif
{
len = data->trans->recv (data->sock, data->buf, NET_IO_BUF_SIZE - 1, timeout);
@ -523,6 +718,7 @@ iks_recv (iksparser *prs, int timeout)
data->buf[len] = '\0';
if (data->logHook) data->logHook (data->user_data, data->buf, len, 1);
ret = iks_parse (prs, data->buf, len, 0);
if (ret != IKS_OK) return ret;
if (!data->trans) {
/* stream hook called iks_disconnect */
@ -569,6 +765,10 @@ iks_send_raw (iksparser *prs, const char *xmlstr)
if (data->flags & SF_SECURE) {
if (gnutls_record_send (data->sess, xmlstr, strlen (xmlstr)) < 0) return IKS_NET_RWERR;
} else
#elif HAVE_SSL
if (data->flags & SF_SECURE) {
if (SSL_write(data->ssl, xmlstr, strlen (xmlstr)) < 0) return IKS_NET_RWERR;
} else
#endif
{
ret = data->trans->send (data->sock, xmlstr, strlen (xmlstr));
@ -591,6 +791,8 @@ iks_has_tls (void)
{
#ifdef HAVE_GNUTLS
return 1;
#elif HAVE_SSL
return 1;
#else
return 0;
#endif
@ -602,6 +804,10 @@ iks_is_secure (iksparser *prs)
#ifdef HAVE_GNUTLS
struct stream_data *data = iks_user_data (prs);
return data->flags & SF_SECURE;
#elif HAVE_SSL
struct stream_data *data = iks_user_data (prs);
return data->flags & SF_SECURE;
#else
return 0;
@ -641,6 +847,14 @@ iks_start_tls (iksparser *prs)
int ret;
struct stream_data *data = iks_user_data (prs);
ret = iks_send_raw (prs, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>");
if (ret) return ret;
data->flags |= SF_TRY_SECURE;
return IKS_OK;
#elif HAVE_SSL
int ret;
struct stream_data *data = iks_user_data (prs);
ret = iks_send_raw (prs, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>");
if (ret) return ret;
data->flags |= SF_TRY_SECURE;

View File

@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
scriptversion=2010-02-06.18; # UTC
scriptversion=2009-04-28.21; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@ -200,11 +200,7 @@ if test $# -eq 0; then
fi
if test -z "$dir_arg"; then
do_exit='(exit $ret); exit $ret'
trap "ret=129; $do_exit" 1
trap "ret=130; $do_exit" 2
trap "ret=141; $do_exit" 13
trap "ret=143; $do_exit" 15
trap '(exit $?); exit' 1 2 13 15
# Set umask so as not to create temps with too-generous modes.
# However, 'strip' requires both read and write access to temps.

View File

@ -1,5 +1,5 @@
AM_CFLAGS = -Isrc -Wall -lm
AUTOMAKE_OPTS = gnu
AUTOMAKE_OPTIONS = gnu
NAME = libcodec2
AM_CPPFLAGS = $(AM_CFLAGS)

View File

@ -1,5 +1,5 @@
AM_CFLAGS = -I../src -Wall -DFLOATING_POINT -DVAR_ARRAYS
AUTOMAKE_OPTS = gnu
AUTOMAKE_OPTIONS = gnu
NAME = libcodec2
AM_CPPFLAGS = $(AM_CFLAGS)

View File

@ -1,5 +1,5 @@
AM_CFLAGS = -I../src -g -DFLOATING_POINT -DVAR_ARRAYS
AUTOMAKE_OPTS = gnu
AUTOMAKE_OPTIONS = gnu
NAME = libcodec2
AM_CPPFLAGS = $(AM_CFLAGS)

View File

@ -1,6 +1,6 @@
EXTRA_DIST =
SUBDIRS =
AUTOMAKE_OPTS=foreign
AUTOMAKE_OPTIONS = foreign
NAME=dingaling
PREFIX=$(prefix)
TOUCH_TARGET=@if test -f "$@" ; then touch "$@" ; fi ;

View File

@ -606,7 +606,7 @@ static int on_disco_default(void *user_data, ikspak *pak)
if ((iq = iks_new("iq"))) {
int all = 0;
iks_insert_attrib(iq, "from", handle->login);
iks_insert_attrib(iq, "from", iks_find_attrib(pak->x, "to"));
if (pak->from) {
iks_insert_attrib(iq, "to", pak->from->full);
}
@ -1431,12 +1431,14 @@ static void j_setup_filter(ldl_handle_t *handle)
}
}
static void ldl_flush_queue(ldl_handle_t *handle, int done)
static ldl_queue_t ldl_flush_queue(ldl_handle_t *handle, int done)
{
iks *msg;
void *pop = NULL;
unsigned int len = 0, x = 0;
ldl_queue_t sent_data = LDL_QUEUE_NONE;
apr_thread_mutex_lock(handle->lock);
while(apr_queue_trypop(handle->queue, &pop) == APR_SUCCESS) {
@ -1445,6 +1447,7 @@ static void ldl_flush_queue(ldl_handle_t *handle, int done)
if (!done) iks_send(handle->parser, msg);
iks_delete(msg);
pop = NULL;
sent_data = LDL_QUEUE_SENT;
} else {
break;
}
@ -1473,6 +1476,7 @@ static void ldl_flush_queue(ldl_handle_t *handle, int done)
}
iks_send(handle->parser, packet_node->xml);
packet_node->next = now + 5000000;
sent_data = LDL_QUEUE_SENT;
}
}
if (packet_node->retries == 0 || done) {
@ -1490,51 +1494,15 @@ static void ldl_flush_queue(ldl_handle_t *handle, int done)
}
}
apr_thread_mutex_unlock(handle->lock);
}
static void *APR_THREAD_FUNC queue_thread(apr_thread_t *thread, void *obj)
{
ldl_handle_t *handle = (ldl_handle_t *) obj;
ldl_set_flag_locked(handle, LDL_FLAG_QUEUE_RUNNING);
while (ldl_test_flag(handle, LDL_FLAG_RUNNING) && !ldl_test_flag(handle, LDL_FLAG_QUEUE_STOP)) {
ldl_flush_queue(handle, 0);
if (handle->loop_callback(handle) != LDL_STATUS_SUCCESS || !ldl_test_flag((&globals), LDL_FLAG_READY)) {
int fd;
if ((fd = iks_fd(handle->parser)) > -1) {
shutdown(fd, 0x02);
}
ldl_set_flag_locked(handle, LDL_FLAG_BREAK);
break;
}
microsleep(100);
}
ldl_clear_flag_locked(handle, LDL_FLAG_QUEUE_RUNNING);
ldl_clear_flag_locked(handle, LDL_FLAG_QUEUE_STOP);
return NULL;
}
static void launch_queue_thread(ldl_handle_t *handle)
{
apr_thread_t *thread;
apr_threadattr_t *thd_attr;;
apr_threadattr_create(&thd_attr, handle->pool);
apr_threadattr_detach_set(thd_attr, 1);
apr_threadattr_stacksize_set(thd_attr, 512 * 1024);
apr_thread_create(&thread, thd_attr, queue_thread, handle, handle->pool);
return sent_data;
}
static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass)
{
int timeout_ka = LDL_KEEPALIVE_TIMEOUT;
int count_ka = timeout_ka;
while (ldl_test_flag((&globals), LDL_FLAG_READY) && ldl_test_flag(handle, LDL_FLAG_RUNNING)) {
int e;
char tmp[512], *sl;
@ -1587,13 +1555,18 @@ static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass)
}
handle->counter = opt_timeout;
if (ldl_test_flag(handle, LDL_FLAG_TLS)) {
launch_queue_thread(handle);
}
while (ldl_test_flag((&globals), LDL_FLAG_READY) && ldl_test_flag(handle, LDL_FLAG_RUNNING)) {
e = iks_recv(handle->parser, 1);
if (!ldl_test_flag(handle, LDL_FLAG_TLS) && handle->loop_callback) {
if (count_ka-- <= 0) {
if( iks_send_raw(handle->parser, " ") == IKS_OK) {
count_ka = timeout_ka;
globals.logger(DL_LOG_DEBUG, "Sent keep alive signal\n");
}
}
if (handle->loop_callback) {
if (handle->loop_callback(handle) != LDL_STATUS_SUCCESS) {
ldl_clear_flag_locked(handle, LDL_FLAG_RUNNING);
break;
@ -1614,10 +1587,11 @@ static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass)
goto fail;
}
if (!ldl_test_flag(handle, LDL_FLAG_TLS) && ldl_test_flag(handle, LDL_FLAG_RUNNING)) {
if (ldl_test_flag(handle, LDL_FLAG_RUNNING)) {
ldl_flush_queue(handle, 0);
}
handle->counter--;
if (!ldl_test_flag(handle, LDL_FLAG_CONNECTED)) {
if (IKS_NET_TLSFAIL == e) {
globals.logger(DL_LOG_DEBUG, "tls handshake failed\n");
@ -1631,11 +1605,12 @@ static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass)
break;
}
}
microsleep(100);
}
fail:
ldl_set_flag_locked(handle, LDL_FLAG_QUEUE_STOP);
ldl_clear_flag_locked(handle, LDL_FLAG_CONNECTED);
ldl_clear_flag_locked(handle, LDL_FLAG_AUTHORIZED);
ldl_clear_flag_locked(handle, LDL_FLAG_BREAK);
@ -1645,23 +1620,12 @@ static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass)
shutdown(fd, 0x02);
}
while(ldl_test_flag(handle, LDL_FLAG_QUEUE_RUNNING)) {
microsleep(100);
}
iks_disconnect(handle->parser);
iks_parser_delete(handle->parser);
}
ldl_clear_flag_locked(handle, LDL_FLAG_RUNNING);
if (!ldl_test_flag(handle, LDL_FLAG_TLS)) {
ldl_flush_queue(handle, 1);
}
while(ldl_test_flag(handle, LDL_FLAG_QUEUE_RUNNING)) {
microsleep(100);
}
ldl_flush_queue(handle, 1);
ldl_set_flag_locked(handle, LDL_FLAG_STOPPED);
@ -2512,13 +2476,15 @@ int ldl_handle_authorized(ldl_handle_t *handle)
void ldl_handle_stop(ldl_handle_t *handle)
{
ldl_clear_flag_locked(handle, LDL_FLAG_RUNNING);
#if 0
if (ldl_test_flag(handle, LDL_FLAG_TLS)) {
int fd;
if ((fd = iks_fd(handle->parser)) > -1) {
shutdown(fd, 0x02);
}
}
#endif
while(!ldl_test_flag(handle, LDL_FLAG_STOPPED)) {
microsleep(100);
}

View File

@ -64,6 +64,8 @@ extern "C" {
#define LDL_MAX_PAYLOADS 50
#define LDL_RETRY 3
#define IKS_NS_COMPONENT "jabber:component:accept"
/* period between keep alive signals in 0.1sec units*/
#define LDL_KEEPALIVE_TIMEOUT 6000
/*! \brief A structure to store a jingle candidate */
struct ldl_candidate {
@ -119,10 +121,8 @@ typedef enum {
LDL_FLAG_AUTHORIZED = (1 << 2),
LDL_FLAG_READY = (1 << 3),
LDL_FLAG_CONNECTED = (1 << 4),
LDL_FLAG_QUEUE_RUNNING = (1 << 5),
LDL_FLAG_STOPPED = (1 << 6),
LDL_FLAG_QUEUE_STOP = (1 << 7),
LDL_FLAG_BREAK = (1 << 8)
LDL_FLAG_STOPPED = (1 << 5),
LDL_FLAG_BREAK = (1 << 6)
} ldl_flag_t;
typedef enum {
@ -173,6 +173,11 @@ typedef enum {
LDL_DESCRIPTION_ACCEPT
} ldl_description_t;
typedef enum {
LDL_QUEUE_NONE,
LDL_QUEUE_SENT
} ldl_queue_t;
#define DL_PRE __FILE__, __LDL_FUNC__, __LINE__
#define DL_LOG_DEBUG DL_PRE, 7
#define DL_LOG_INFO DL_PRE, 6

View File

@ -1,6 +1,6 @@
EXTRA_DIST =
SUBDIRS =
AUTOMAKE_OPTS= gnu
AUTOMAKE_OPTIONS = gnu
NAME=teletone
AM_CFLAGS = $(new_AM_CFLAGS) -I./src

View File

@ -155,12 +155,12 @@ for (;;)
if (top <= bot) return -1;
mid = (bot + top) >> 1;
if (c == (ucp_table[mid].f0 & f0_charmask)) break;
if (c < (ucp_table[mid].f0 & f0_charmask)) top = mid;
if (c < (int)(ucp_table[mid].f0 & f0_charmask)) top = mid;
else
{
if ((ucp_table[mid].f0 & f0_rangeflag) != 0 &&
c <= (ucp_table[mid].f0 & f0_charmask) +
(ucp_table[mid].f1 & f1_rangemask)) break;
c <= (int)((ucp_table[mid].f0 & f0_charmask) +
(ucp_table[mid].f1 & f1_rangemask))) break;
bot = mid + 1;
}
}

View File

@ -63,6 +63,7 @@
#include <AudioUnit/AudioUnit.h>
#include <AudioToolbox/AudioToolbox.h>
#include <CoreServices/CoreServices.h>
#include "portaudio.h"

View File

@ -1 +1 @@
Wed Mar 17 11:21:56 CDT 2010
Tue Nov 1 11:51:42 CDT 2011

View File

@ -1,16 +1,25 @@
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
Software Foundation, Inc.
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. This file is offered as-is,
without warranty of any kind.
Basic Installation
==================
These are generic installation instructions.
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package. Some packages provide this
`INSTALL' file but do not implement all of the features documented
below. The lack of an optional feature in a given package is not
necessarily a bug. More recommendations for GNU packages can be found
in *note Makefile Conventions: (standards)Makefile Conventions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
@ -23,9 +32,9 @@ debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. (Caching is
the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
cache files.)
cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
@ -35,30 +44,37 @@ some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You only need
`configure.ac' if you want to change it or regenerate `configure' using
a newer version of `autoconf'.
`configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
The simplest way to compile this package is:
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
`./configure' to configure the package for your system.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
Running `configure' might take a while. While running, it prints
some messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
the package, generally using the just-built uninstalled binaries.
4. Type `make install' to install the programs and any data files and
documentation.
documentation. When installing into a prefix owned by root, it is
recommended that the package be configured and built as a regular
user, and only the `make install' phase executed with root
privileges.
5. You can remove the program binaries and object files from the
5. Optionally, type `make installcheck' to repeat any self-tests, but
this time using the binaries in their final installed location.
This target does not install anything. Running this target as a
regular user, particularly if the prior `make install' required
root privileges, verifies that the installation completed
correctly.
6. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
@ -67,45 +83,69 @@ The simplest way to compile this package is:
all sorts of other programs in order to regenerate files that came
with the distribution.
7. Often, you can also type `make uninstall' to remove the installed
files again. In practice, not all packages have tested that
uninstallation works correctly, even though it is required by the
GNU Coding Standards.
8. Some packages, particularly those that use Automake, provide `make
distcheck', which can by used by developers to test that all other
targets like `make install' and `make uninstall' work correctly.
This target is generally not run by end users.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. Run `./configure --help'
for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
source code in the directory that `configure' is in and in `..'. This
is known as a "VPATH" build.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a
time in the source code directory. After you have installed the
package for one architecture, use `make distclean' before reconfiguring
for another architecture.
With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.
On MacOS X 10.5 and later systems, you can create libraries and
executables that work on multiple system types--known as "fat" or
"universal" binaries--by specifying multiple `-arch' options to the
compiler but only a single `-arch' option to the preprocessor. Like
this:
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CPP="gcc -E" CXXCPP="g++ -E"
This is not guaranteed to produce working output in all cases, you
may have to build one architecture at a time and combine the results
using the `lipo' tool if you have problems.
Installation Names
==================
By default, `make install' installs the package's commands under
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
`configure' the option `--prefix=PREFIX', where PREFIX must be an
absolute file name.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
@ -116,16 +156,47 @@ Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
you can set and what kinds of files go in them. In general, the
default for these options is expressed in terms of `${prefix}', so that
specifying just `--prefix' will affect all of the other directory
specifications that were not explicitly provided.
The most portable way to affect installation locations is to pass the
correct locations to `configure'; however, many packages provide one or
both of the following shortcuts of passing variable assignments to the
`make install' command line to change installation locations without
having to reconfigure or recompile.
The first method involves providing an override variable for each
affected directory. For example, `make install
prefix=/alternate/directory' will choose an alternate location for all
directory configuration variables that were expressed in terms of
`${prefix}'. Any directories that were specified during `configure',
but not in terms of `${prefix}', must each be overridden at install
time for the entire installation to be relocated. The approach of
makefile variable overrides for each directory variable is required by
the GNU Coding Standards, and ideally causes no recompilation.
However, some platforms have known limitations with the semantics of
shared libraries that end up requiring recompilation when using this
method, particularly noticeable in packages that use GNU Libtool.
The second method involves providing the `DESTDIR' variable. For
example, `make install DESTDIR=/alternate/directory' will prepend
`/alternate/directory' before all installation names. The approach of
`DESTDIR' overrides is not required by the GNU Coding Standards, and
does not work on platforms that have drive letters. On the other hand,
it does better at avoiding recompilation issues, and works well even
when some directory options were not specified in terms of `${prefix}'
at `configure' time.
Optional Features
=================
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
@ -137,14 +208,53 @@ find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Some packages offer the ability to configure how verbose the
execution of `make' will be. For these packages, running `./configure
--enable-silent-rules' sets the default to minimal output, which can be
overridden with `make V=1'; while running `./configure
--disable-silent-rules' sets the default to verbose, which can be
overridden with `make V=0'.
Particular systems
==================
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
CC is not installed, it is recommended to use the following options in
order to use an ANSI C compiler:
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
a workaround. If GNU CC is not installed, it is therefore recommended
to try
./configure CC="cc"
and if that doesn't work, try
./configure CC="cc -nodtk"
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
directory contains several dysfunctional programs; working variants of
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
in your `PATH', put it _after_ `/usr/bin'.
On Haiku, software installed for all users goes in `/boot/common',
not `/usr/local'. It is recommended to use the following options:
./configure --prefix=/boot/common
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
@ -152,7 +262,8 @@ type, such as `sun4', or a canonical name which has the form:
where SYSTEM can have one of these forms:
OS KERNEL-OS
OS
KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
@ -170,9 +281,9 @@ eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
@ -181,7 +292,7 @@ A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
@ -190,21 +301,29 @@ them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script). Here is a another example:
overridden in the site shell script).
/bin/bash ./configure CONFIG_SHELL=/bin/bash
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf bug. Until the bug is fixed you can use this workaround:
Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
configuration-related scripts to be executed by `/bin/bash'.
CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`configure' recognizes the following options to control how it
operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
Print a summary of all of the options to `configure', and exit.
`--help=short'
`--help=recursive'
Print a summary of the options unique to this package's
`configure', and exit. The `short' variant lists options used
only in the top level, while the `recursive' variant lists options
also present in any nested packages.
`--version'
`-V'
@ -231,6 +350,16 @@ configuration-related scripts to be executed by `/bin/bash'.
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--prefix=DIR'
Use DIR as the installation prefix. *note Installation Names::
for more details, including other options available for fine-tuning
the installation locations.
`--no-create'
`-n'
Run the configure checks, but stop before creating any output
files.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

View File

@ -1,5 +1,5 @@
AM_CFLAGS = -Isrc -Iinterface -fPIC -O3
AUTOMAKE_OPTS = gnu
AUTOMAKE_OPTIONS = gnu
NAME = libSKP_SILK_SDK
AM_CPPFLAGS = $(AM_CFLAGS)

View File

@ -1 +1 @@
Mon Aug 22 12:22:26 CDT 2011
Fri Dec 16 10:29:41 CST 2011

View File

@ -827,10 +827,10 @@ static int nua_notify_usage_shutdown(nua_handle_t *nh,
nua_dialog_usage_t *du)
{
struct notifier_usage *nu = nua_dialog_usage_private(du);
nua_client_request_t *cr = du->du_cr;
//nua_client_request_t *cr = du->du_cr;
nu->nu_substate = nua_substate_terminated;
#if 0
if (cr) {
SU_DEBUG_5(("%s(%p, %p, %p): using existing cr=%p\n",
"nua_notify_usage_shutdown",
@ -852,7 +852,7 @@ static int nua_notify_usage_shutdown(nua_handle_t *nh,
TAG_END()) >= 0)
return 0;
}
#endif
nua_dialog_usage_remove(nh, ds, du, NULL, NULL);
return 200;
}

View File

@ -158,14 +158,15 @@ int nua_stack_process_request(nua_handle_t *nh,
/* These must be in-dialog */
sm = NULL;
}
else if (initial && sip->sip_to->a_tag) {
else if (initial && sip->sip_to->a_tag && method != sip_method_subscribe) {
/* RFC 3261 section 12.2.2:
If the UAS wishes to reject the request because it does not wish to
recreate the dialog, it MUST respond to the request with a 481
(Call/Transaction Does Not Exist) status code and pass that to the
server transaction.
*/
*/ /* we allow this on subscribes because we have disabled the built-in notify server and we need those messages in the application layer */
if (method == sip_method_info)
/* accept out-of-dialog info */; else
if (method != sip_method_message || !NH_PGET(nh, win_messenger_enable))

View File

@ -4486,14 +4486,13 @@ session_timer_add_headers(struct session_timer *t,
return 1;
sip_add_tl(msg, sip,
TAG_IF(expires != 0, SIPTAG_SESSION_EXPIRES(x)),
TAG_IF(min != 0
/* Min-SE: 0 is optional with initial INVITE */
|| !initial,
SIPTAG_MIN_SE(min_se)),
TAG_IF(refresher == nua_remote_refresher && expires != 0,
SIPTAG_REQUIRE_STR("timer")),
TAG_END());
TAG_IF(expires != 0, SIPTAG_SESSION_EXPIRES(x)),
TAG_IF(min != 0
/* Min-SE: 0 is optional with initial INVITE */
|| !initial,
SIPTAG_MIN_SE(min_se)),
//TAG_IF(refresher == nua_remote_refresher && expires != 0, SIPTAG_REQUIRE_STR("timer")),
TAG_END());
return 1;
}

View File

@ -1389,6 +1389,10 @@ void sdp_media_transport(sdp_media_t *m, char const *s)
else if (su_casematch(s, "udptl"))
/* Lower case - be compatible with people living by T.38 examples */
m->m_proto = sdp_proto_udptl, m->m_proto_name = "udptl";
else if (su_casematch(s, "TCP/MSRP"))
m->m_proto = sdp_proto_msrp, m->m_proto_name = "TCP/MSRP";
else if (su_casematch(s, "TCP/TLS/MSRP"))
m->m_proto = sdp_proto_msrps, m->m_proto_name = "TCP/TLS/MSRP";
else if (su_casematch(s, "UDP"))
m->m_proto = sdp_proto_udp, m->m_proto_name = "UDP";
else if (su_casematch(s, "TCP"))

View File

@ -591,6 +591,8 @@ static void print_media(sdp_printer_t *p,
case sdp_proto_rtp: proto = "RTP/AVP"; break;
case sdp_proto_srtp: proto = "RTP/SAVP"; break;
case sdp_proto_udptl: proto = "udptl"; break;
case sdp_proto_msrp: proto = "TCP/MSRP"; break;
case sdp_proto_msrps: proto = "TCP/TLS/MSRP"; break;
case sdp_proto_tls: proto = "tls"; break;
default: proto = m->m_proto_name; break;
}

View File

@ -243,6 +243,8 @@ typedef enum
sdp_proto_rtp = 256, /**< RTP/AVP */
sdp_proto_srtp = 257, /**< RTP/SAVP */
sdp_proto_udptl = 258, /**< UDPTL. @NEW_1_12_4. */
sdp_proto_msrp = 259, /**< TCP/MSRP @NEW_MSRP*/
sdp_proto_msrps = 260, /**< TCP/TLS/MSRP @NEW_MSRP*/
sdp_proto_tls = 511, /**< TLS over TCP */
sdp_proto_any = 512 /**< * wildcard */
} sdp_proto_e;

View File

@ -385,7 +385,7 @@ void tport_capt_msg(tport_t const *self, msg_t *msg, size_t n,
else hep_header.hp_p = IPPROTO_UDP; /* DEFAULT UDP */
/* Check destination */
if(strncmp("recv", what, 4) == 0) dst = 1;
if(strncmp("sent", what, 4) == 0) dst = 1;
/* copy destination and source IPs*/
if(su->su_family == AF_INET) {

View File

@ -1 +1 @@
Wed May 4 10:03:23 CDT 2011
Tue Dec 6 17:55:59 CST 2011

View File

@ -47,8 +47,8 @@ AC_DEFUN([AX_C99_FUNC_LRINT],
[AC_CACHE_CHECK(for lrint,
ac_cv_c99_lrint,
[
lrint_save_CFLAGS=$CFLAGS
CFLAGS="-lm"
lrint_save_LIBS=$LIBS
LIBS="-lm"
AC_TRY_LINK([
#define _ISOC9X_SOURCE 1
#define _ISOC99_SOURCE 1
@ -58,7 +58,7 @@ AC_TRY_LINK([
#include <math.h>
], if (!lrint(3.14159)) lrint(2.7183);, ac_cv_c99_lrint=yes, ac_cv_c99_lrint=no)
CFLAGS=$lrint_save_CFLAGS
LIBS=$lrint_save_LIBS
])
@ -84,8 +84,8 @@ AC_DEFUN([AX_C99_FUNC_LRINTF],
[AC_CACHE_CHECK(for lrintf,
ac_cv_c99_lrintf,
[
lrintf_save_CFLAGS=$CFLAGS
CFLAGS="-lm"
lrintf_save_LIBS=$LIBS
LIBS="-lm"
AC_TRY_LINK([
#define _ISOC9X_SOURCE 1
#define _ISOC99_SOURCE 1
@ -95,7 +95,7 @@ AC_TRY_LINK([
#include <math.h>
], if (!lrintf(3.14159)) lrintf(2.7183);, ac_cv_c99_lrintf=yes, ac_cv_c99_lrintf=no)
CFLAGS=$lrintf_save_CFLAGS
LIBS=$lrintf_save_LIBS
])
@ -121,8 +121,8 @@ AC_DEFUN([AX_C99_FUNC_LLRINT],
[AC_CACHE_CHECK(for llrint,
ac_cv_c99_llrint,
[
llrint_save_CFLAGS=$CFLAGS
CFLAGS="-lm"
llrint_save_LIBS=$LIBS
LIBS="-lm"
AC_TRY_LINK([
#define ISOC9X_SOURCE 1
#define _ISOC99_SOURCE 1
@ -132,7 +132,7 @@ AC_TRY_LINK([
#include <math.h>
], long long int x ; x = llrint(3.14159) ;, ac_cv_c99_llrint=yes, ac_cv_c99_llrint=no)
CFLAGS=$llrint_save_CFLAGS
LIBS=$llrint_save_LIBS
])
@ -159,8 +159,8 @@ AC_DEFUN([AX_C99_FUNC_LLRINTF],
[AC_CACHE_CHECK(for llrintf,
ac_cv_c99_llrintf,
[
llrintf_save_CFLAGS=$CFLAGS
CFLAGS="-lm"
llrintf_save_LIBS=$LIBS
LIBS="-lm"
AC_TRY_LINK([
#define _ISOC9X_SOURCE 1
#define _ISOC99_SOURCE 1
@ -170,7 +170,7 @@ AC_TRY_LINK([
#include <math.h>
], long long int x ; x = llrintf(3.14159) ;, ac_cv_c99_llrintf=yes, ac_cv_c99_llrintf=no)
CFLAGS=$llrintf_save_CFLAGS
LIBS=$llrintf_save_LIBS
])

View File

@ -28,8 +28,8 @@ gnu)
)],
[AC_MSG_RESULT([yes])
COMP_VENDOR_CFLAGS="-fvisibility=hidden -DSWITCH_API_VISIBILITY=1 -DHAVE_VISIBILITY=1 $COMP_VENDOR_CFLAGS"
COMP_VENDOR_CXXFLAGS="-fvisibility=hidden -DSWITCH_API_VISIBILITY=1 -DHAVE_VISIBILITY=1 $COMP_VENDOR_CXXFLAGS"
COMP_VENDOR_CFLAGS="-fvisibility=hidden -DHAVE_VISIBILITY=1 $COMP_VENDOR_CFLAGS"
COMP_VENDOR_CXXFLAGS="-fvisibility=hidden -DHAVE_VISIBILITY=1 $COMP_VENDOR_CXXFLAGS"
ac_cv_symbol_export_capability="yes"],
[AC_MSG_RESULT([no])]
@ -47,8 +47,8 @@ sun)
)],
[AC_MSG_RESULT([yes])
COMP_VENDOR_CFLAGS="-xldscope=hidden -DSWITCH_API_VISIBILITY=1 -DHAVE_VISIBILITY=1 $COMP_VENDOR_CFLAGS"
COMP_VENDOR_CXXFLAGS="-xldscope=hidden -DSWITCH_API_VISIBILITY=1 -DHAVE_VISIBILITY=1 $COMP_VENDOR_CXXFLAGS"
COMP_VENDOR_CFLAGS="-xldscope=hidden -DHAVE_VISIBILITY=1 $COMP_VENDOR_CFLAGS"
COMP_VENDOR_CXXFLAGS="-xldscope=hidden -DHAVE_VISIBILITY=1 $COMP_VENDOR_CXXFLAGS"
ac_cv_symbol_export_capability="yes"],
[AC_MSG_RESULT([no])]

View File

@ -319,16 +319,16 @@ nobase_include_HEADERS = spandsp/adsi.h \
nodist_include_HEADERS = spandsp.h
noinst_HEADERS = faxfont.h \
filter_tools.h \
gsm0610_local.h \
lpc10_encdecs.h \
mmx_sse_decs.h \
t30_local.h \
t4_t6_decode_states.h \
v17_v32bis_rx_constellation_maps.h \
v17_v32bis_tx_constellation_maps.h \
v29tx_constellation_maps.h
noinst_HEADERS = faxfont.h \
filter_tools.h \
gsm0610_local.h \
lpc10_encdecs.h \
mmx_sse_decs.h \
t30_local.h \
t4_t6_decode_states.h \
v17_v32bis_rx_constellation_maps.h \
v17_v32bis_tx_constellation_maps.h \
v29tx_constellation_maps.h
make_at_dictionary$(EXEEXT): $(top_srcdir)/src/make_at_dictionary.c
$(CC_FOR_BUILD) -o make_at_dictionary$(EXEEXT) $(top_srcdir)/src/make_at_dictionary.c -DHAVE_CONFIG_H -I$(top_builddir)/src

View File

@ -43,6 +43,7 @@
#include "floating_fudge.h"
#include "spandsp/telephony.h"
#include "spandsp/logging.h"
#include "spandsp/fast_convert.h"
#include "spandsp/queue.h"
#include "spandsp/dc_restore.h"
@ -54,6 +55,7 @@
#include "spandsp/dtmf.h"
#include "spandsp/bell_r2_mf.h"
#include "spandsp/private/logging.h"
#include "spandsp/private/queue.h"
#include "spandsp/private/tone_generate.h"
#include "spandsp/private/bell_r2_mf.h"
@ -786,7 +788,7 @@ SPAN_DECLARE(int) r2_mf_rx(r2_mf_rx_state_t *s, const int16_t amp[], int samples
}
if (s->current_digit != hit_digit && s->callback)
{
i = (hit_digit) ? -99 : -10;
i = (hit_digit) ? -10 : -99;
s->callback(s->callback_data, hit_digit, i, 0);
}
s->current_digit = hit_digit;

View File

@ -42,10 +42,6 @@
#include "spandsp/complex.h"
#include "spandsp/dds.h"
#if !defined(M_PI)
# define M_PI 3.14159265358979323846 /* pi */
#endif
/* In a A-law or u-law channel, a 128 step sine table is adequate to keep the spectral
mess due to the DDS at a similar level to the spectral mess due to the A-law or u-law
compression. */

View File

@ -29,8 +29,8 @@
#include "config.h"
#endif
#include <inttypes.h>
#include <stdlib.h>
#include <inttypes.h>
#if defined(HAVE_TGMATH_H)
#include <tgmath.h>
#endif
@ -38,12 +38,12 @@
#include <math.h>
#endif
#include "floating_fudge.h"
#include <memory.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#include <fcntl.h>
#include <limits.h>
#include "spandsp/telephony.h"
#include "spandsp/logging.h"
#include "spandsp/fast_convert.h"
#include "spandsp/queue.h"
#include "spandsp/complex.h"
@ -53,6 +53,7 @@
#include "spandsp/super_tone_rx.h"
#include "spandsp/dtmf.h"
#include "spandsp/private/logging.h"
#include "spandsp/private/queue.h"
#include "spandsp/private/tone_generate.h"
#include "spandsp/private/dtmf.h"
@ -165,6 +166,8 @@ SPAN_DECLARE(int) dtmf_rx(dtmf_rx_state_t *s, const int16_t amp[], int samples)
goertzel_samplex(&s->row_out[3], xamp);
goertzel_samplex(&s->col_out[3], xamp);
}
if (s->duration < INT_MAX - (limit - sample))
s->duration += (limit - sample);
s->current_sample += (limit - sample);
if (s->current_sample < DTMF_SAMPLES_PER_BLOCK)
continue;
@ -188,29 +191,45 @@ SPAN_DECLARE(int) dtmf_rx(dtmf_rx_state_t *s, const int16_t amp[], int samples)
/* Basic signal level test and the twist test */
if (row_energy[best_row] >= s->threshold
&&
col_energy[best_col] >= s->threshold
&&
col_energy[best_col] < row_energy[best_row]*s->reverse_twist
&&
col_energy[best_col]*s->normal_twist > row_energy[best_row])
col_energy[best_col] >= s->threshold)
{
/* Relative peak test ... */
for (i = 0; i < 4; i++)
if (col_energy[best_col] < row_energy[best_row]*s->reverse_twist
&&
col_energy[best_col]*s->normal_twist > row_energy[best_row])
{
if ((i != best_col && col_energy[i]*DTMF_RELATIVE_PEAK_COL > col_energy[best_col])
||
(i != best_row && row_energy[i]*DTMF_RELATIVE_PEAK_ROW > row_energy[best_row]))
/* Relative peak test ... */
for (i = 0; i < 4; i++)
{
break;
if ((i != best_col && col_energy[i]*DTMF_RELATIVE_PEAK_COL > col_energy[best_col])
||
(i != best_row && row_energy[i]*DTMF_RELATIVE_PEAK_ROW > row_energy[best_row]))
{
break;
}
}
/* ... and fraction of total energy test */
if (i >= 4
&&
(row_energy[best_row] + col_energy[best_col]) > DTMF_TO_TOTAL_ENERGY*s->energy)
{
/* Got a hit */
hit = dtmf_positions[(best_row << 2) + best_col];
}
}
/* ... and fraction of total energy test */
if (i >= 4
&&
(row_energy[best_row] + col_energy[best_col]) > DTMF_TO_TOTAL_ENERGY*s->energy)
if (span_log_test(&s->logging, SPAN_LOG_FLOW))
{
/* Got a hit */
hit = dtmf_positions[(best_row << 2) + best_col];
/* Log information about the quality of the signal, to aid analysis of detection problems */
/* Logging at this point filters the total no-hoper frames out of the log, and leaves
anything which might feasibly be a DTMF digit. The log will then contain a list of the
total, row and coloumn power levels for detailed analysis of detection problems. */
span_log(&s->logging,
SPAN_LOG_FLOW,
"Potentially '%c' - total %.2fdB, row %.2fdB, col %.2fdB - %s\n",
dtmf_positions[(best_row << 2) + best_col],
log10f(s->energy)*10.0f - DTMF_POWER_OFFSET + DBM0_MAX_POWER,
log10f(row_energy[best_row]/DTMF_TO_TOTAL_ENERGY)*10.0f - DTMF_POWER_OFFSET + DBM0_MAX_POWER,
log10f(col_energy[best_col]/DTMF_TO_TOTAL_ENERGY)*10.0f - DTMF_POWER_OFFSET + DBM0_MAX_POWER,
(hit) ? "hit" : "miss");
}
}
/* The logic in the next test should ensure the following for different successive hit patterns:
@ -251,7 +270,8 @@ SPAN_DECLARE(int) dtmf_rx(dtmf_rx_state_t *s, const int16_t amp[], int samples)
if (s->in_digit || hit)
{
i = (s->in_digit && !hit) ? -99 : lfastrintf(log10f(s->energy)*10.0f - DTMF_POWER_OFFSET + DBM0_MAX_POWER);
s->realtime_callback(s->realtime_callback_data, hit, i, 0);
s->realtime_callback(s->realtime_callback_data, hit, i, s->duration);
s->duration = 0;
}
}
else
@ -326,6 +346,7 @@ SPAN_DECLARE(void) dtmf_rx_set_realtime_callback(dtmf_rx_state_t *s,
{
s->realtime_callback = callback;
s->realtime_callback_data = user_data;
s->duration = 0;
}
/*- End of function --------------------------------------------------------*/
@ -357,6 +378,12 @@ SPAN_DECLARE(void) dtmf_rx_parms(dtmf_rx_state_t *s,
}
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE(logging_state_t *) dtmf_rx_get_logging_state(dtmf_rx_state_t *s)
{
return &s->logging;
}
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE(dtmf_rx_state_t *) dtmf_rx_init(dtmf_rx_state_t *s,
digits_rx_callback_t callback,
void *user_data)
@ -369,6 +396,9 @@ SPAN_DECLARE(dtmf_rx_state_t *) dtmf_rx_init(dtmf_rx_state_t *s,
if ((s = (dtmf_rx_state_t *) malloc(sizeof (*s))) == NULL)
return NULL;
}
memset(s, 0, sizeof(*s));
span_log_init(&s->logging, SPAN_LOG_NONE, NULL);
span_log_set_protocol(&s->logging, "DTMF");
s->digits_callback = callback;
s->digits_callback_data = user_data;
s->realtime_callback = NULL;
@ -519,6 +549,7 @@ SPAN_DECLARE(dtmf_tx_state_t *) dtmf_tx_init(dtmf_tx_state_t *s)
if ((s = (dtmf_tx_state_t *) malloc(sizeof (*s))) == NULL)
return NULL;
}
memset(s, 0, sizeof(*s));
if (!dtmf_tx_inited)
dtmf_tx_initialise();
tone_gen_init(&(s->tones), &dtmf_digit_tones[0]);

View File

@ -71,12 +71,21 @@
#include "spandsp/v27ter_rx.h"
#include "spandsp/v17tx.h"
#include "spandsp/v17rx.h"
#include "spandsp/timezone.h"
#include "spandsp/t4_rx.h"
#include "spandsp/t4_tx.h"
#if defined(SPANDSP_SUPPORT_T85)
#if defined(SPANDSP_SUPPORT_T42) || defined(SPANDSP_SUPPORT_T43) || defined(SPANDSP_SUPPORT_T85)
#include "spandsp/t81_t82_arith_coding.h"
#endif
#if defined(SPANDSP_SUPPORT_T85)
#include "spandsp/t85.h"
#endif
#if defined(SPANDSP_SUPPORT_T42)
#include "spandsp/t42.h"
#endif
#if defined(SPANDSP_SUPPORT_T43)
#include "spandsp/t43.h"
#endif
#include "spandsp/t4_t6_decode.h"
#include "spandsp/t4_t6_encode.h"
@ -102,10 +111,19 @@
#include "spandsp/private/v29rx.h"
#include "spandsp/private/hdlc.h"
#include "spandsp/private/fax_modems.h"
#if defined(SPANDSP_SUPPORT_T85)
#include "spandsp/private/timezone.h"
#if defined(SPANDSP_SUPPORT_T42) || defined(SPANDSP_SUPPORT_T43) || defined(SPANDSP_SUPPORT_T85)
#include "spandsp/private/t81_t82_arith_coding.h"
#endif
#if defined(SPANDSP_SUPPORT_T85)
#include "spandsp/private/t85.h"
#endif
#if defined(SPANDSP_SUPPORT_T42)
#include "spandsp/private/t42.h"
#endif
#if defined(SPANDSP_SUPPORT_T43)
#include "spandsp/private/t43.h"
#endif
#include "spandsp/private/t4_t6_decode.h"
#include "spandsp/private/t4_t6_encode.h"
#include "spandsp/private/t4_rx.h"

View File

@ -54,21 +54,38 @@
#include "spandsp/fast_convert.h"
#include "spandsp/logging.h"
#include "spandsp/saturated.h"
#include "spandsp/timezone.h"
#include "spandsp/t4_rx.h"
#include "spandsp/t4_tx.h"
#if defined(SPANDSP_SUPPORT_T85)
#if defined(SPANDSP_SUPPORT_T42) || defined(SPANDSP_SUPPORT_T43) || defined(SPANDSP_SUPPORT_T85)
#include "spandsp/t81_t82_arith_coding.h"
#endif
#if defined(SPANDSP_SUPPORT_T85)
#include "spandsp/t85.h"
#endif
#if defined(SPANDSP_SUPPORT_T42)
#include "spandsp/t42.h"
#endif
#if defined(SPANDSP_SUPPORT_T43)
#include "spandsp/t43.h"
#endif
#include "spandsp/t4_t6_decode.h"
#include "spandsp/t4_t6_encode.h"
#include "spandsp/image_translate.h"
#include "spandsp/private/logging.h"
#if defined(SPANDSP_SUPPORT_T85)
#if defined(SPANDSP_SUPPORT_T42) || defined(SPANDSP_SUPPORT_T43) || defined(SPANDSP_SUPPORT_T85)
#include "spandsp/private/t81_t82_arith_coding.h"
#endif
#if defined(SPANDSP_SUPPORT_T85)
#include "spandsp/private/t85.h"
#endif
#if defined(SPANDSP_SUPPORT_T42)
#include "spandsp/private/t42.h"
#endif
#if defined(SPANDSP_SUPPORT_T43)
#include "spandsp/private/t43.h"
#endif
#include "spandsp/private/t4_t6_decode.h"
#include "spandsp/private/t4_t6_encode.h"
#include "spandsp/private/t4_rx.h"

View File

@ -99,6 +99,7 @@
#include <spandsp/v18.h>
#include <spandsp/v42.h>
#include <spandsp/v42bis.h>
#include <spandsp/timezone.h>
#include <spandsp/t4_rx.h>
#include <spandsp/t4_tx.h>
#include <spandsp/t4_t6_decode.h>

View File

@ -165,8 +165,10 @@ SPAN_DECLARE(int) plc_fillin(plc_state_t *s, int16_t amp[], int len)
float old_weight;
float new_weight;
float gain;
//int16_t *orig_amp;
int orig_len;
//orig_amp = amp;
orig_len = len;
if (s->missing_samples == 0)
{

View File

@ -52,6 +52,7 @@
#include <spandsp/schedule.h>
#include <spandsp/g711.h>
#include <spandsp/timing.h>
#include <spandsp/math_fixed.h>
#include <spandsp/vector_float.h>
#include <spandsp/complex_vector_float.h>
#include <spandsp/vector_int.h>
@ -97,6 +98,7 @@
#include <spandsp/v27ter_tx.h>
/*#include <spandsp/v34.h>*/
#include <spandsp/v18.h>
#include <spandsp/timezone.h>
#include <spandsp/t4_rx.h>
#include <spandsp/t4_tx.h>
#include <spandsp/image_translate.h>
@ -126,7 +128,6 @@
#include <spandsp/gsm0610.h>
#include <spandsp/plc.h>
#include <spandsp/playout.h>
#include <spandsp/timezone.h>
#endif

View File

@ -186,6 +186,11 @@ SPAN_DECLARE(int) dtmf_rx_status(dtmf_rx_state_t *s);
\return The number of digits actually returned. */
SPAN_DECLARE(size_t) dtmf_rx_get(dtmf_rx_state_t *s, char *digits, int max);
/*! \brief Get the logging context associated with a DTMF receiver context.
\param s The DTMF receiver context.
\return A pointer to the logging context */
SPAN_DECLARE(logging_state_t *) dtmf_rx_get_logging_state(dtmf_rx_state_t *s);
/*! \brief Initialise a DTMF receiver context.
\param s The DTMF receiver context.
\param callback An optional callback routine, used to report received digits. If

View File

@ -72,6 +72,7 @@
/*#include <spandsp/private/v34.h>*/
#include <spandsp/private/at_interpreter.h>
#include <spandsp/private/fax_modems.h>
#include <spandsp/private/timezone.h>
#include <spandsp/private/image_translate.h>
#include <spandsp/private/t4_t6_decode.h>
#include <spandsp/private/t4_t6_encode.h>
@ -88,7 +89,6 @@
#include <spandsp/private/t38_gateway.h>
#include <spandsp/private/t38_terminal.h>
#include <spandsp/private/t31.h>
#include <spandsp/private/timezone.h>
#include <spandsp/private/v18.h>
#include <spandsp/private/v42.h>
#include <spandsp/private/v42bis.h>

View File

@ -96,6 +96,9 @@ struct dtmf_rx_state_s
uint8_t in_digit;
/*! The current sample number within a processing block. */
int current_sample;
/*! Tone state duration */
int duration;
/*! The number of digits which have been lost due to buffer overflows. */
int lost_digits;
@ -103,6 +106,9 @@ struct dtmf_rx_state_s
int current_digits;
/*! The received digits buffer. This is a NULL terminated string. */
char digits[MAX_DTMF_DIGITS + 1];
/*! \brief Error and flow logging control */
logging_state_t logging;
};
#endif

View File

@ -40,7 +40,7 @@ struct fax_state_s
/*! \brief The analogue modem front-end */
fax_modems_state_t modems;
/*! \brief V.8 */
//v8_state_t v8;
v8_state_t v8;
/*! \brief Error and flow logging control */
logging_state_t logging;

View File

@ -73,6 +73,11 @@ struct t30_state_s
page image. FALSE for FAX page headers to add to the overall length of
the page. */
int header_overlays_image;
/*! \brief Use private timezone if TRUE */
int use_own_tz;
/*! \brief Optional per instance time zone for the FAX page header timestamp. */
tz_t tz;
/*! \brief TRUE if remote T.30 procedural interrupts are allowed. */
int remote_interrupts_allowed;

View File

@ -33,7 +33,7 @@
typedef struct
{
fax_modems_state_t modems;
//v8_state_t v8;
v8_state_t v8;
/*! The transmit signal handler to be used when the current one has finished sending. */
span_tx_handler_t *next_tx_handler;

View File

@ -96,7 +96,7 @@ typedef struct
/*! \brief The value for samples at the next transmission point. */
int32_t next_tx_samples;
/*! \brief The current transmit timeout. */
//int32_t timeout_tx_samples;
int32_t timeout_tx_samples;
/*! \brief The current receive timeout. */
int32_t timeout_rx_samples;
} t38_terminal_front_end_state_t;

View File

@ -49,8 +49,8 @@ struct t4_state_s
/*! \brief The text which will be used in FAX page header. No text results
in no header line. */
const char *header_info;
/*! \brief Optional per instance time zone for the FAX pager header timestamp. */
struct tz_s *tz;
/*! \brief Optional per instance time zone for the FAX page header timestamp. */
tz_t *tz;
/*! \brief The size of the compressed image on the line side, in bits. */
int line_image_size;

View File

@ -72,77 +72,6 @@ struct v17_rx_state_s
routine. */
void *qam_user_data;
/*! \brief The route raised cosine (RRC) pulse shaping filter buffer. */
#if defined(SPANDSP_USE_FIXED_POINT)
int16_t rrc_filter[V17_RX_FILTER_STEPS];
#else
float rrc_filter[V17_RX_FILTER_STEPS];
#endif
/*! \brief Current offset into the RRC pulse shaping filter buffer. */
int rrc_filter_step;
/*! \brief The state of the differential decoder */
int diff;
/*! \brief The register for the data scrambler. */
uint32_t scramble_reg;
/*! \brief Scrambler tap */
int scrambler_tap;
/*! \brief TRUE if the short training sequence is to be used. */
int short_train;
/*! \brief The section of the training data we are currently in. */
int training_stage;
/*! \brief A count of how far through the current training step we are. */
int training_count;
/*! \brief A measure of how much mismatch there is between the real constellation,
and the decoded symbol positions. */
float training_error;
/*! \brief The value of the last signal sample, using the a simple HPF for signal power estimation. */
int16_t last_sample;
/*! \brief >0 if a signal above the minimum is present. It may or may not be a V.17 signal. */
int signal_present;
/*! \brief Whether or not a carrier drop was detected and the signal delivery is pending. */
int carrier_drop_pending;
/*! \brief A count of the current consecutive samples below the carrier off threshold. */
int low_samples;
/*! \brief A highest magnitude sample seen. */
int16_t high_sample;
/*! \brief The current phase of the carrier (i.e. the DDS parameter). */
uint32_t carrier_phase;
/*! \brief The update rate for the phase of the carrier (i.e. the DDS increment). */
int32_t carrier_phase_rate;
/*! \brief The carrier update rate saved for reuse when using short training. */
int32_t carrier_phase_rate_save;
#if defined(SPANDSP_USE_FIXED_POINTx)
/*! \brief The proportional part of the carrier tracking filter. */
float carrier_track_p;
/*! \brief The integral part of the carrier tracking filter. */
float carrier_track_i;
#else
/*! \brief The proportional part of the carrier tracking filter. */
float carrier_track_p;
/*! \brief The integral part of the carrier tracking filter. */
float carrier_track_i;
#endif
/*! \brief A power meter, to measure the HPF'ed signal power in the channel. */
power_meter_t power;
/*! \brief The power meter level at which carrier on is declared. */
int32_t carrier_on_power;
/*! \brief The power meter level at which carrier off is declared. */
int32_t carrier_off_power;
/*! \brief Current read offset into the equalizer buffer. */
int eq_step;
/*! \brief Current write offset into the equalizer buffer. */
int eq_put_step;
/*! \brief Symbol count to the next equalizer update. */
int eq_skip;
/*! \brief The current half of the baud. */
int baud_half;
#if defined(SPANDSP_USE_FIXED_POINTx)
/*! \brief The scaling factor accessed by the AGC algorithm. */
float agc_scaling;
@ -166,6 +95,20 @@ struct v17_rx_state_s
int32_t symbol_sync_dc_filter[2];
/*! Baud phase for symbol sync. */
int32_t baud_phase;
/*! \brief A measure of how much mismatch there is between the real constellation,
and the decoded symbol positions. */
float training_error;
/*! \brief The proportional part of the carrier tracking filter. */
float carrier_track_p;
/*! \brief The integral part of the carrier tracking filter. */
float carrier_track_i;
/*! \brief The root raised cosine (RRC) pulse shaping filter buffer. */
int16_t rrc_filter[V17_RX_FILTER_STEPS];
/*! \brief A pointer to the current constellation. */
const complexi16_t *constellation;
#else
/*! \brief The scaling factor accessed by the AGC algorithm. */
float agc_scaling;
@ -189,7 +132,71 @@ struct v17_rx_state_s
float symbol_sync_dc_filter[2];
/*! Baud phase for symbol sync. */
float baud_phase;
/*! \brief A measure of how much mismatch there is between the real constellation,
and the decoded symbol positions. */
float training_error;
/*! \brief The proportional part of the carrier tracking filter. */
float carrier_track_p;
/*! \brief The integral part of the carrier tracking filter. */
float carrier_track_i;
/*! \brief The root raised cosine (RRC) pulse shaping filter buffer. */
float rrc_filter[V17_RX_FILTER_STEPS];
/*! \brief A pointer to the current constellation. */
const complexf_t *constellation;
#endif
/*! \brief Current offset into the RRC pulse shaping filter buffer. */
int rrc_filter_step;
/*! \brief The state of the differential decoder */
int diff;
/*! \brief The register for the data scrambler. */
uint32_t scramble_reg;
/*! \brief Scrambler tap */
int scrambler_tap;
/*! \brief TRUE if the short training sequence is to be used. */
int short_train;
/*! \brief The section of the training data we are currently in. */
int training_stage;
/*! \brief A count of how far through the current training step we are. */
int training_count;
/*! \brief The value of the last signal sample, using the a simple HPF for signal power estimation. */
int16_t last_sample;
/*! \brief >0 if a signal above the minimum is present. It may or may not be a V.17 signal. */
int signal_present;
/*! \brief Whether or not a carrier drop was detected and the signal delivery is pending. */
int carrier_drop_pending;
/*! \brief A count of the current consecutive samples below the carrier off threshold. */
int low_samples;
/*! \brief A highest magnitude sample seen. */
int16_t high_sample;
/*! \brief The current phase of the carrier (i.e. the DDS parameter). */
uint32_t carrier_phase;
/*! \brief The update rate for the phase of the carrier (i.e. the DDS increment). */
int32_t carrier_phase_rate;
/*! \brief The carrier update rate saved for reuse when using short training. */
int32_t carrier_phase_rate_save;
/*! \brief A power meter, to measure the HPF'ed signal power in the channel. */
power_meter_t power;
/*! \brief The power meter level at which carrier on is declared. */
int32_t carrier_on_power;
/*! \brief The power meter level at which carrier off is declared. */
int32_t carrier_off_power;
/*! \brief Current read offset into the equalizer buffer. */
int eq_step;
/*! \brief Current write offset into the equalizer buffer. */
int eq_put_step;
/*! \brief Symbol count to the next equalizer update. */
int eq_skip;
/*! \brief The current half of the baud. */
int baud_half;
/*! \brief The total symbol timing correction since the carrier came up.
This is only for performance analysis purposes. */
@ -199,12 +206,7 @@ struct v17_rx_state_s
int32_t start_angles[2];
/*! \brief History list of phase angles for the coarse carrier aquisition step. */
int32_t angles[16];
/*! \brief A pointer to the current constellation. */
#if defined(SPANDSP_USE_FIXED_POINTx)
const complexi16_t *constellation;
#else
const complexf_t *constellation;
#endif
/*! \brief A pointer to the current space map. There is a space map for
each trellis state. */
int space_map;
@ -217,13 +219,16 @@ struct v17_rx_state_s
int full_path_to_past_state_locations[V17_TRELLIS_STORAGE_DEPTH][8];
/*! \brief The trellis. */
int past_state_locations[V17_TRELLIS_STORAGE_DEPTH][8];
#if defined(SPANDSP_USE_FIXED_POINTx)
/*! \brief Euclidean distances (actually the squares of the distances)
from the last states of the trellis. */
#if defined(SPANDSP_USE_FIXED_POINTx)
uint32_t distances[8];
#else
/*! \brief Euclidean distances (actually the squares of the distances)
from the last states of the trellis. */
float distances[8];
#endif
/*! \brief Error and flow logging control */
logging_state_t logging;
};

View File

@ -49,23 +49,24 @@ struct v17_tx_state_s
/*! \brief A user specified opaque pointer passed to the status function. */
void *status_user_data;
#if defined(SPANDSP_USE_FIXED_POINT)
/*! \brief The gain factor needed to achieve the specified output power. */
#if defined(SPANDSP_USE_FIXED_POINT)
int32_t gain;
#else
float gain;
#endif
/*! \brief The route raised cosine (RRC) pulse shaping filter buffer. */
#if defined(SPANDSP_USE_FIXED_POINT)
int16_t gain;
/*! \brief A pointer to the constellation currently in use. */
const complexi16_t *constellation;
/*! \brief The root raised cosine (RRC) pulse shaping filter buffer. */
int16_t rrc_filter_re[V17_TX_FILTER_STEPS];
int16_t rrc_filter_im[V17_TX_FILTER_STEPS];
#else
/*! \brief The gain factor needed to achieve the specified output power. */
float gain;
/*! \brief A pointer to the constellation currently in use. */
const complexf_t *constellation;
/*! \brief The root raised cosine (RRC) pulse shaping filter buffer. */
float rrc_filter_re[V17_TX_FILTER_STEPS];
float rrc_filter_im[V17_TX_FILTER_STEPS];
#endif
/*! \brief Current offset into the RRC pulse shaping filter buffer. */
int rrc_filter_step;
@ -94,12 +95,6 @@ struct v17_tx_state_s
/*! \brief The current fractional phase of the baud timing. */
int baud_phase;
/*! \brief A pointer to the constellation currently in use. */
#if defined(SPANDSP_USE_FIXED_POINT)
const complexi16_t *constellation;
#else
const complexf_t *constellation;
#endif
/*! \brief The current number of data bits per symbol. This does not include
the redundant bit. */
int bits_per_symbol;

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