[Freeswitch-svn] [commit] r1647 - in freeswitch/branches/james: . build conf docs libs libs/codec/gsm libs/codec/ilbc libs/iax libs/iax/src libs/libdingaling libs/libspeakup libs/libteletone libs/srtp libs/srtp/crypto libs/srtp/crypto/include libs/srtp/crypto/test libs/srtp/test scripts/rss src src/include src/mod src/mod/applications src/mod/applications/mod_bridgecall src/mod/applications/mod_commands src/mod/applications/mod_echo src/mod/applications/mod_ivrtest src/mod/applications/mod_playback src/mod/
Author: james Date: Sun Jun 18 11:09:41 2006 New Revision: 1647 Added: freeswitch/branches/james/scripts/rss/ - copied from r1644, /freeswitch/trunk/scripts/rss/ freeswitch/branches/james/scripts/rss/rss2ivr.pl - copied unchanged from r1644, /freeswitch/trunk/scripts/rss/rss2ivr.pl freeswitch/branches/james/src/mod/applications/mod_rss/ (props changed) - copied from r1644, /freeswitch/trunk/src/mod/applications/mod_rss/ freeswitch/branches/james/src/mod/applications/mod_rss/mod_rss.c - copied unchanged from r1644, /freeswitch/trunk/src/mod/applications/mod_rss/mod_rss.c freeswitch/branches/james/src/mod/applications/mod_rss/mod_rss.vcproj - copied unchanged from r1644, /freeswitch/trunk/src/mod/applications/mod_rss/mod_rss.vcproj freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig.i - copied unchanged from r1644, /freeswitch/trunk/src/mod/languages/mod_perl/switch_swig.i Modified: freeswitch/branches/james/ (props changed) freeswitch/branches/james/AUTHORS freeswitch/branches/james/Makefile.am freeswitch/branches/james/Makefile.in freeswitch/branches/james/aclocal.m4 freeswitch/branches/james/build/ (props changed) freeswitch/branches/james/conf/freeswitch.xml freeswitch/branches/james/configure freeswitch/branches/james/configure.in freeswitch/branches/james/docs/ (props changed) freeswitch/branches/james/libs/ (props changed) freeswitch/branches/james/libs/codec/gsm/ (props changed) freeswitch/branches/james/libs/codec/ilbc/ (props changed) freeswitch/branches/james/libs/iax/ (props changed) freeswitch/branches/james/libs/iax/src/ (props changed) freeswitch/branches/james/libs/libdingaling/ (props changed) freeswitch/branches/james/libs/libspeakup/ (props changed) freeswitch/branches/james/libs/libteletone/ (props changed) freeswitch/branches/james/libs/srtp/ (props changed) freeswitch/branches/james/libs/srtp/crypto/ (props changed) freeswitch/branches/james/libs/srtp/crypto/include/ (props changed) freeswitch/branches/james/libs/srtp/crypto/test/ (props changed) freeswitch/branches/james/libs/srtp/test/ (props changed) freeswitch/branches/james/modules.conf.in freeswitch/branches/james/src/include/ (props changed) freeswitch/branches/james/src/include/switch.h freeswitch/branches/james/src/include/switch_am_config.h.in freeswitch/branches/james/src/include/switch_caller.h freeswitch/branches/james/src/include/switch_channel.h freeswitch/branches/james/src/include/switch_core.h freeswitch/branches/james/src/include/switch_ivr.h freeswitch/branches/james/src/include/switch_module_interfaces.h freeswitch/branches/james/src/include/switch_rtp.h freeswitch/branches/james/src/include/switch_types.h freeswitch/branches/james/src/include/switch_xml.h freeswitch/branches/james/src/mod/ (props changed) freeswitch/branches/james/src/mod/applications/ (props changed) freeswitch/branches/james/src/mod/applications/mod_bridgecall/ (props changed) freeswitch/branches/james/src/mod/applications/mod_bridgecall/mod_bridgecall.c freeswitch/branches/james/src/mod/applications/mod_commands/ (props changed) freeswitch/branches/james/src/mod/applications/mod_commands/mod_commands.c freeswitch/branches/james/src/mod/applications/mod_echo/ (props changed) freeswitch/branches/james/src/mod/applications/mod_ivrtest/ (props changed) freeswitch/branches/james/src/mod/applications/mod_ivrtest/mod_ivrtest.c freeswitch/branches/james/src/mod/applications/mod_playback/ (props changed) freeswitch/branches/james/src/mod/applications/mod_playback/mod_playback.c freeswitch/branches/james/src/mod/applications/mod_skel/ (props changed) freeswitch/branches/james/src/mod/asr_tts/ (props changed) freeswitch/branches/james/src/mod/asr_tts/mod_cepstral/ (props changed) freeswitch/branches/james/src/mod/asr_tts/mod_cepstral/mod_cepstral.c freeswitch/branches/james/src/mod/codecs/ (props changed) freeswitch/branches/james/src/mod/codecs/mod_g711/ (props changed) freeswitch/branches/james/src/mod/codecs/mod_g729/ (props changed) freeswitch/branches/james/src/mod/codecs/mod_gsm/ (props changed) freeswitch/branches/james/src/mod/codecs/mod_ilbc/ (props changed) freeswitch/branches/james/src/mod/codecs/mod_l16/ (props changed) freeswitch/branches/james/src/mod/codecs/mod_speex/ (props changed) freeswitch/branches/james/src/mod/dialplans/ (props changed) freeswitch/branches/james/src/mod/dialplans/mod_dialplan_directory/ (props changed) freeswitch/branches/james/src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c freeswitch/branches/james/src/mod/dialplans/mod_dialplan_xml/ (props changed) freeswitch/branches/james/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c freeswitch/branches/james/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.vcproj freeswitch/branches/james/src/mod/directories/ (props changed) freeswitch/branches/james/src/mod/directories/mod_ldap/ (props changed) freeswitch/branches/james/src/mod/endpoints/ (props changed) freeswitch/branches/james/src/mod/endpoints/mod_dingaling/ (props changed) freeswitch/branches/james/src/mod/endpoints/mod_dingaling/mod_dingaling.c freeswitch/branches/james/src/mod/endpoints/mod_exosip/ (props changed) freeswitch/branches/james/src/mod/endpoints/mod_exosip/Makefile freeswitch/branches/james/src/mod/endpoints/mod_exosip/mod_exosip.c freeswitch/branches/james/src/mod/endpoints/mod_iax/ (props changed) freeswitch/branches/james/src/mod/endpoints/mod_iax/mod_iax.c freeswitch/branches/james/src/mod/endpoints/mod_portaudio/ (props changed) freeswitch/branches/james/src/mod/endpoints/mod_portaudio/mod_portaudio.c freeswitch/branches/james/src/mod/endpoints/mod_wanpipe/ (props changed) freeswitch/branches/james/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c freeswitch/branches/james/src/mod/endpoints/mod_woomera/ (props changed) freeswitch/branches/james/src/mod/endpoints/mod_woomera/mod_woomera.c freeswitch/branches/james/src/mod/event_handlers/ (props changed) freeswitch/branches/james/src/mod/event_handlers/mod_event_multicast/ (props changed) freeswitch/branches/james/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c freeswitch/branches/james/src/mod/event_handlers/mod_event_test/ (props changed) freeswitch/branches/james/src/mod/event_handlers/mod_xmpp_event/ (props changed) freeswitch/branches/james/src/mod/event_handlers/mod_xmpp_event/mod_xmpp_event.c freeswitch/branches/james/src/mod/event_handlers/mod_zeroconf/ (props changed) freeswitch/branches/james/src/mod/event_handlers/mod_zeroconf/mod_zeroconf.c freeswitch/branches/james/src/mod/formats/ (props changed) freeswitch/branches/james/src/mod/formats/mod_sndfile/ (props changed) freeswitch/branches/james/src/mod/languages/ (props changed) freeswitch/branches/james/src/mod/languages/mod_perl/ (props changed) freeswitch/branches/james/src/mod/languages/mod_perl/Makefile freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig.c freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig_wrap.c freeswitch/branches/james/src/mod/languages/mod_spidermonkey/ (props changed) freeswitch/branches/james/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c freeswitch/branches/james/src/mod/loggers/ (props changed) freeswitch/branches/james/src/mod/loggers/mod_console/ (props changed) freeswitch/branches/james/src/mod/loggers/mod_console/mod_console.c freeswitch/branches/james/src/mod/loggers/mod_syslog/ (props changed) freeswitch/branches/james/src/mod/timers/ (props changed) freeswitch/branches/james/src/mod/timers/mod_softtimer/ (props changed) freeswitch/branches/james/src/mod/xml_int/ (props changed) freeswitch/branches/james/src/mod/xml_int/mod_xml_rpc/ (props changed) freeswitch/branches/james/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c freeswitch/branches/james/src/switch.c freeswitch/branches/james/src/switch_caller.c freeswitch/branches/james/src/switch_channel.c freeswitch/branches/james/src/switch_config.c freeswitch/branches/james/src/switch_console.c freeswitch/branches/james/src/switch_core.c freeswitch/branches/james/src/switch_event.c freeswitch/branches/james/src/switch_ivr.c freeswitch/branches/james/src/switch_loadable_module.c freeswitch/branches/james/src/switch_log.c freeswitch/branches/james/src/switch_rtp.c freeswitch/branches/james/src/switch_xml.c freeswitch/branches/james/w32/Setup/ (props changed) freeswitch/branches/james/w32/vsnet/ (props changed) freeswitch/branches/james/w32/vsnet/Freeswitch.sln freeswitch/branches/james/w32/vsnet/GetLibs.vbs freeswitch/branches/james/w32/vsnet/Tools/ (props changed) freeswitch/branches/james/w32/vsnet/Tools/pcre/libpcre.vcproj Log: Updating branch to trunk to get back to dev, sorry guys ;( Modified: freeswitch/branches/james/AUTHORS ============================================================================== --- freeswitch/branches/james/AUTHORS (original) +++ freeswitch/branches/james/AUTHORS Sun Jun 18 11:09:41 2006 @@ -21,6 +21,7 @@ and moral support. Michal "cypromis" Bielicki (michal.bielicki AT halo2.pl) - Solaris porting, and autotools enhancements. James Martelletti <james@nerdc0re.com> - All around cool guy (mod_syslog) + Johny Kadarisman <jkr888@gmail.com> A big THANK YOU goes to: Modified: freeswitch/branches/james/Makefile.am ============================================================================== --- freeswitch/branches/james/Makefile.am (original) +++ freeswitch/branches/james/Makefile.am Sun Jun 18 11:09:41 2006 @@ -22,8 +22,10 @@ AM_CFLAGS += -DCRASH_PROT endif +AM_CFGARGS = if IS64BITLINUX -AM_CFLAGS += -m64 -march=k8 -fPIC +AM_CFLAGS += -m64 -march=k8 -fPIC -D_64BIT_MACHINE_ +AM_CFGARGS += --enable-64bit endif #put elsif win here @@ -183,6 +185,7 @@ @./build/addenv.sh build/freeswitch.env LDFLAGS "$(AM_LDFLAGS) -lfreeswitch" @./build/addenv.sh build/freeswitch.env CFLAGS "-Werror $(AM_CFLAGS)" @./build/addenv.sh build/freeswitch.env CC "$(CC)" + @./build/addenv.sh build/freeswitch.env CFGARGS "$(AM_CFGARGS)" @cd src/mod && for i in `cat ../../modules.conf | grep -v \#` ; do echo making $$i ; $(PWD)/build/modmake.sh $(PWD) $$i || exit 1; done @rm -f build/freeswitch.env Modified: freeswitch/branches/james/Makefile.in ============================================================================== --- freeswitch/branches/james/Makefile.in (original) +++ freeswitch/branches/james/Makefile.in Sun Jun 18 11:09:41 2006 @@ -40,8 +40,9 @@ host_triplet = @host@ @ISLINUX_TRUE@am__append_1 = -Wl,-E @CRASHPROT_TRUE@am__append_2 = -DCRASH_PROT -@IS64BITLINUX_TRUE@am__append_3 = -m64 -march=k8 -fPIC -@ISMAC_TRUE@am__append_4 = -DMACOSX +@IS64BITLINUX_TRUE@am__append_3 = -m64 -march=k8 -fPIC -D_64BIT_MACHINE_ +@IS64BITLINUX_TRUE@am__append_4 = --enable-64bit +@ISMAC_TRUE@am__append_5 = -DMACOSX bin_PROGRAMS = freeswitch$(EXEEXT) DIST_COMMON = README $(am__configure_deps) $(library_include_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ @@ -246,7 +247,7 @@ AM_CFLAGS = -I$(PREFIX)/include $(shell $(APR_CONFIG) --cflags \ --cppflags --includes) -I${prefix}/include/srtp $(shell \ $(APU_CONFIG) --includes) $(am__append_2) $(am__append_3) \ - $(am__append_4) -fPIC -Wall -I$(PWD)/src/sqlite -I$(PWD) \ + $(am__append_5) -fPIC -Wall -I$(PWD)/src/sqlite -I$(PWD) \ -I$(PWD)/src/include -I$(PREFIX)/include \ -DSWITCH_MOD_DIR=\"$(PREFIX)/mod\" \ -DSWITCH_PREFIX_DIR=\"$(PREFIX)\" \ @@ -259,6 +260,7 @@ $(shell $(APU_CONFIG) --link-ld --libs ) -lm \ -L/usr/local/lib/db42 -L/usr/local/lib $(am__append_1) OSARCH = $(shell uname -s) +AM_CFGARGS = $(am__append_4) @ISMAC_FALSE@SOLINK = -shared -Xlinker -x #put elsif win here @@ -1090,6 +1092,7 @@ @./build/addenv.sh build/freeswitch.env LDFLAGS "$(AM_LDFLAGS) -lfreeswitch" @./build/addenv.sh build/freeswitch.env CFLAGS "-Werror $(AM_CFLAGS)" @./build/addenv.sh build/freeswitch.env CC "$(CC)" + @./build/addenv.sh build/freeswitch.env CFGARGS "$(AM_CFGARGS)" @cd src/mod && for i in `cat ../../modules.conf | grep -v \#` ; do echo making $$i ; $(PWD)/build/modmake.sh $(PWD) $$i || exit 1; done @rm -f build/freeswitch.env Modified: freeswitch/branches/james/aclocal.m4 ============================================================================== --- freeswitch/branches/james/aclocal.m4 (original) +++ freeswitch/branches/james/aclocal.m4 Sun Jun 18 11:09:41 2006 @@ -143,7 +143,7 @@ default_ofile=libtool can_build_shared=yes -# All known linkers require a `.a' archive for static linking (except M$VC, +# All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" @@ -359,8 +359,8 @@ # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string="`eval $cmd`") 2>/dev/null && - echo_test_string="`eval $cmd`" && + if (echo_test_string=`eval $cmd`) 2>/dev/null && + echo_test_string=`eval $cmd` && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break @@ -529,7 +529,7 @@ # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then - case "`/usr/bin/file conftest.o`" in + case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*linux*) @@ -611,7 +611,7 @@ # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) @@ -650,7 +650,7 @@ LDFLAGS="$LDFLAGS $3" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The compiler can only warn and ignore the option if not recognized + # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. @@ -725,7 +725,7 @@ elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else - lt_cv_sys_max_cmd_len=65536 # usable default for *BSD + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` @@ -737,7 +737,7 @@ # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 - # + # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; @@ -854,7 +854,7 @@ }] EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) 2>/dev/null + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; @@ -1003,7 +1003,7 @@ # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) @@ -1021,7 +1021,7 @@ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi - chmod u+w . + chmod u+w . 2>&AS_MESSAGE_LOG_FD $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation @@ -1281,7 +1281,8 @@ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' @@ -1334,7 +1335,7 @@ soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` @@ -1372,7 +1373,14 @@ freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. - objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) @@ -1417,7 +1425,7 @@ version_type=sunos need_lib_prefix=no need_version=no - case "$host_cpu" in + case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes @@ -1813,7 +1821,7 @@ # AC_LIBTOOL_WIN32_DLL # -------------------- -# declare package support for building win32 dll's +# declare package support for building win32 DLLs AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_WIN32_DLL @@ -1987,7 +1995,7 @@ if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) - file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then @@ -2097,7 +2105,7 @@ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. + # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) @@ -2129,7 +2137,7 @@ AC_DEFUN([AC_PROG_LD_GNU], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +[# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes @@ -2243,7 +2251,7 @@ hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file - case "$host_cpu" in + case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so @@ -2417,13 +2425,13 @@ # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl convenience library and # LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL -# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If -# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will -# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with -# '${top_srcdir}/' (note the single quotes!). If your package is not -# flat and you're not using automake, define top_builddir and -# top_srcdir appropriately in the Makefiles. +# --enable-ltdl-convenience to the configure arguments. Note that +# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, +# it is assumed to be `libltdl'. LIBLTDL will be prefixed with +# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/' +# (note the single quotes!). If your package is not flat and you're not +# using automake, define top_builddir and top_srcdir appropriately in +# the Makefiles. AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl case $enable_ltdl_convenience in @@ -2442,13 +2450,13 @@ # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl installable library and # LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-install to the configure arguments. Note that LIBLTDL -# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If -# DIRECTORY is not provided and an installed libltdl is not found, it is -# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' -# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single -# quotes!). If your package is not flat and you're not using automake, -# define top_builddir and top_srcdir appropriately in the Makefiles. +# --enable-ltdl-install to the configure arguments. Note that +# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, +# and an installed libltdl is not found, it is assumed to be `libltdl'. +# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and top_srcdir +# appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl @@ -2627,7 +2635,7 @@ # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. -case "$host_os" in +case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then @@ -2694,7 +2702,7 @@ _LT_AC_TAGVAR(compiler_lib_search_path, $1)= # Source file extension for C++ test sources. -ac_ext=cc +ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o @@ -2910,7 +2918,7 @@ # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds it's shared libraries. + # This is similar to how AIX traditionally builds its shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi @@ -2949,7 +2957,7 @@ fi ;; darwin* | rhapsody*) - case "$host_os" in + case $host_os in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' ;; @@ -2987,7 +2995,7 @@ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else @@ -3000,7 +3008,7 @@ output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; @@ -3080,7 +3088,7 @@ ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then - case "$host_cpu" in + case $host_cpu in hppa*64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' @@ -3096,7 +3104,7 @@ ;; esac fi - case "$host_cpu" in + case $host_cpu in hppa*64*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no @@ -3122,7 +3130,7 @@ _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC*) - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; @@ -3143,7 +3151,7 @@ *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then - case "$host_cpu" in + case $host_cpu in ia64*|hppa*64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; @@ -3244,7 +3252,7 @@ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ @@ -3476,10 +3484,11 @@ case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no @@ -3499,15 +3508,7 @@ esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is @@ -3664,7 +3665,7 @@ # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. - output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" + output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` for p in `eval $output_verbose_link_cmd`; do case $p in @@ -3740,6 +3741,21 @@ $rm -f confest.$objext +# PORTME: override above test on systems where it is broken +ifelse([$1],[CXX], +[case $host_os in +solaris*) + case $cc_basename in + CC*) + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + _LT_AC_TAGVAR(postdeps,$1)='-lCstd -lCrun' + ;; + esac +esac +]) + case " $_LT_AC_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac @@ -3809,7 +3825,7 @@ # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. -case "$host_os" in +case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then @@ -4708,7 +4724,7 @@ hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) ;; *) @@ -4777,7 +4793,7 @@ aCC*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) # +Z the default ;; @@ -4818,7 +4834,7 @@ # Portland Group C++ compiler. _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ @@ -4982,7 +4998,7 @@ hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) # +Z the default ;; @@ -5029,7 +5045,7 @@ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) # +Z the default ;; @@ -5059,12 +5075,12 @@ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; - pgcc* | pgf77* | pgf90*) + pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' @@ -5147,7 +5163,7 @@ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi -case "$host_os" in +case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= @@ -5243,7 +5259,7 @@ if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' - + # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. @@ -5264,7 +5280,7 @@ *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac - + # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) @@ -5338,11 +5354,11 @@ tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; - pgf77* | pgf90* ) # Portland Group f77 and f90 compilers - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; @@ -5548,7 +5564,7 @@ # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds it's shared libraries. + # This is similar to how AIX traditionally builds its shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi @@ -5588,7 +5604,7 @@ ;; darwin* | rhapsody*) - case "$host_os" in + case $host_os in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' ;; @@ -5617,7 +5633,7 @@ output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else @@ -5626,7 +5642,7 @@ output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; @@ -5692,7 +5708,7 @@ hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; @@ -5701,7 +5717,7 @@ ;; esac else - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; @@ -5711,7 +5727,7 @@ esac fi if test "$with_gnu_ld" = no; then - case "$host_cpu" in + case $host_cpu in hppa*64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' Modified: freeswitch/branches/james/conf/freeswitch.xml ============================================================================== --- freeswitch/branches/james/conf/freeswitch.xml (original) +++ freeswitch/branches/james/conf/freeswitch.xml Sun Jun 18 11:09:41 2006 @@ -58,6 +58,7 @@ <!-- ASR /TTS --> <!-- <load module="mod_cepstral"/> --> + <!-- <load module="mod_rss"/> --> </modules> </configuration> @@ -67,9 +68,9 @@ <!-- <param name="ip" value="1.2.3.4"> --> <param name="port" value="4569"/> <param name="dialplan" value="XML"/> - <param name="codec_prefs" value="PCMU,PCMA,speex,L16"/> - <param name="codec_master" value="us"/> - <param name="codec_rates" value="8"/> + <param name="codec-prefs" value="PCMU,PCMA,speex,L16"/> + <param name="codec-master" value="us"/> + <param name="codec-rates" value="8"/> </settings> </configuration> @@ -104,8 +105,14 @@ <settings> <param name="port" value="5060"/> <param name="dialplan" value="XML"/> - <param name="dtmf_duration" value="100"/> - <param name="codec_prefs" value="PCMU,PCMA"/> + <param name="dtmf-duration" value="100"/> + <param name="codec-prefs" value="PCMU,PCMA"/> + <!-- Payload number to bind DTMF to--> + <param name="rfc2833-pt" value="101"/> + <!-- disable to trade async for more calls --> + <param name="use-rtp-timer" value="true"/> + <!-- auto sense NAT issues and adjust accordingly --> + <param name="use-rtp-auto-adjust" value="true"/> <!-- pick one (default if not specified is 'guess'); --> <param name="rtp-ip" value="guess"/> <!-- <param name-"rtp-ip" value="10.0.0.1"/> --> @@ -139,9 +146,9 @@ <param name="debug" value="1"/> <param name="dialplan" value="XML"/> <param name="mtu" value="320"/> - <param name="dtmf_on" value="800"/> - <param name="dtmf_off" value="100"/> - <param name="supress_dtmf_tone" value="yes"/> + <param name="dtmf-on" value="800"/> + <param name="dtmf-off" value="100"/> + <param name="supress-dtmf-tone" value="yes"/> </settings> <span> <param name="span" value="1"/> @@ -175,8 +182,8 @@ <param name="indev" value="USB"/> <param name="outdev" value="USB"/> - <param name="cid_name" value="FreeSwitch"/> - <param name="cid_num" value="5555551212"/> + <param name="cid-name" value="FreeSwitch"/> + <param name="cid-num" value="5555551212"/> </settings> </configuration> @@ -192,13 +199,13 @@ <param name="#debug" value="1"/> <param name="jid" value="freeswitch@my.jabber.com/me"/> <param name="passwd" value="mypass"/> - <param name="target_jid" value="freeswitch@reader.org/him"/> + <param name="target-jid" value="freeswitch@reader.org/him"/> </settings> </configuration> <configuration name="dialplan_directory.conf" description="Dialplan Directory"> <settings> - <param name="directory_name" value="ldap"/> + <param name="directory-name" value="ldap"/> <param name="host" value="ldap.freeswitch.org"/> <param name="dn" value="cn=Manager,dc=freeswitch,dc=org"/> <param name="pass" value="test"/> @@ -209,7 +216,7 @@ <configuration name="dingaling.conf" description="XMPP Jingle Endpoint"> <settings> <param name="debug" value="0"/> - <param name="codec_prefs" value="PCMU"/> + <param name="codec-prefs" value="PCMU"/> </settings> <!-- *NOTE* your resource (after the /) MUST contain the string "talk" (upper or lower case is ok) --> <!-- *NOTE* as of May 2 2006 you must set"auto-login" to"true" if you want to be able to auto-login on startup"/> --> @@ -221,6 +228,8 @@ <param name="message" value="Jingle all the way"/> <param name="rtp-ip" value="10.0.0.1"/> <param name="auto-login" value="true"/> + <!-- disable to trade async for more calls --> + <param name="use-rtp-timer" value="true"/> <!-- or --> <!-- <param name="rtp-ip" value="my_lan_ip"/> --> <!-- <param name="ext-rtp-ip" value="stun:stun.server.com"/> --> @@ -235,14 +244,27 @@ <configuration name="xml_rpc.conf" description="XML RPC"> <settings> <!-- The port where you want to run the http service (default 8080) --> - <param name="http_port" value="8080"/> + <param name="http-port" value="8080"/> + <!-- if all 3 of the following params exist all http traffic will require auth --> + <param name="auth-realm" value="freeswitch"/> + <param name="auth-user" value="freeswitch"/> + <param name="auth-pass" value="works"/> <!-- The url to a gateway cgi that can generate xml similar to what's in this file only on-the-fly (leave it commented if you dont need it) --> <!-- one or more |-delim of configuration|directory|dialplan --> - <!-- <param name="gateway_url" value="http://www.server.com/gateway.cgi" bindings="configuration"/> --> + <!-- <param name="gateway-url" value="http://www.server.com/gateway.cgi" bindings="configuration"/> --> </settings> </configuration> + + <configuration name="rss.conf" description="RSS Parser"> + <feeds> + <!-- Just download the files to wherever and refer to them here --> + <!-- <feed name="Slash Dot">/home/rss/rss.rss</feed> --> + <!-- <feed name="News Forge">/home/rss/newsforge.rss</feed> --> + </feeds> + </configuration> + </section> <section name="dialplan" description="Regex/XML Dialplan"> <!-- Valid fields in conditions: @@ -252,10 +274,22 @@ <!-- *NOTE* The special context name 'any' will match any context --> <context name="default"> - <extension name="devconf"> - <condition field="destination_number" expression="^888$"> - <action application="bridge" data="exosip/888@66.250.68.194"/> - </condition> + <extension name="tollfree"> + <condition field="destination_number" expression="^(18[0{2}8{2}7{2}6{2}]\d{7})"> + <action application="bridge" data="exosip/$1-freeswitch@voip.trxtel.com"/> + </condition> + </extension> + + <extension name="devconf"> + <condition field="destination_number" expression="^888$"> + <action application="bridge" data="exosip/888@66.250.68.194"/> + </condition> + </extension> + + <!-- if the destination is an exact match on the extension name + you do not need any regex in the condition --> + <extension name="999"> + <condition><action application="bridge" data="exosip/888@66.250.68.194"/></condition> </extension> <!-- extensions starting with 4, all the numbers after 4 form a numeric filename continue=true means keep looking for more extensions to match Modified: freeswitch/branches/james/configure ============================================================================== --- freeswitch/branches/james/configure (original) +++ freeswitch/branches/james/configure Sun Jun 18 11:09:41 2006 @@ -287,8 +287,8 @@ # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string="`eval $cmd`") 2>/dev/null && - echo_test_string="`eval $cmd`" && + if (echo_test_string=`eval $cmd`) 2>/dev/null && + echo_test_string=`eval $cmd` && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break @@ -3463,7 +3463,7 @@ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. + # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) @@ -3497,7 +3497,7 @@ if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - # I'd rather use --version here, but apparently some GNU ld's only accept -v. + # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes @@ -3667,7 +3667,7 @@ hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file - case "$host_cpu" in + case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so @@ -3856,7 +3856,7 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then - case "`/usr/bin/file conftest.o`" in + case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*linux*) @@ -5589,7 +5589,7 @@ elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else - lt_cv_sys_max_cmd_len=65536 # usable default for *BSD + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` @@ -5904,7 +5904,7 @@ default_ofile=libtool can_build_shared=yes -# All known linkers require a `.a' archive for static linking (except M$VC, +# All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" @@ -6225,7 +6225,7 @@ if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) - file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then @@ -6287,7 +6287,7 @@ if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) - file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then @@ -6436,7 +6436,7 @@ LDFLAGS="$LDFLAGS $lt_prog_compiler_static" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The compiler can only warn and ignore the option if not recognized + # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. @@ -6487,7 +6487,7 @@ # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6493: $lt_compile\"" >&5) @@ -6577,7 +6577,7 @@ hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) # +Z the default ;; @@ -6624,7 +6624,7 @@ lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) # +Z the default ;; @@ -6654,12 +6654,12 @@ lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; - pgcc* | pgf77* | pgf90*) + pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-static' + lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' @@ -6749,7 +6749,7 @@ # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6755: $lt_compile\"" >&5) @@ -6783,7 +6783,7 @@ fi fi -case "$host_os" in +case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= @@ -6811,7 +6811,7 @@ # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6817: $lt_compile\"" >&5) @@ -6829,7 +6829,7 @@ lt_cv_prog_compiler_c_o=yes fi fi - chmod u+w . + chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation @@ -7029,11 +7029,11 @@ tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; - pgf77* | pgf90* ) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; @@ -7341,7 +7341,7 @@ # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec=' ' archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds it's shared libraries. + # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi @@ -7381,7 +7381,7 @@ ;; darwin* | rhapsody*) - case "$host_os" in + case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag='${wl}-undefined ${wl}suppress' ;; @@ -7410,7 +7410,7 @@ output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else @@ -7419,7 +7419,7 @@ output_verbose_link_cmd='echo' archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; @@ -7485,7 +7485,7 @@ hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; @@ -7494,7 +7494,7 @@ ;; esac else - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; @@ -7504,7 +7504,7 @@ esac fi if test "$with_gnu_ld" = no; then - case "$host_cpu" in + case $host_cpu in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' @@ -7963,7 +7963,8 @@ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' @@ -8016,7 +8017,7 @@ soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` @@ -8054,7 +8055,14 @@ freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. - objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) @@ -8099,7 +8107,7 @@ version_type=sunos need_lib_prefix=no need_version=no - case "$host_cpu" in + case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes @@ -9054,7 +9062,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<EOF -#line 9057 "configure" +#line 9065 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -9120,7 +9128,7 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) 2>/dev/null + (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; @@ -9152,7 +9160,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<EOF -#line 9155 "configure" +#line 9163 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -9218,7 +9226,7 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) 2>/dev/null + (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; @@ -9268,7 +9276,7 @@ # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. -case "$host_os" in +case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then @@ -9871,7 +9879,7 @@ compiler_lib_search_path_CXX= # Source file extension for C++ test sources. -ac_ext=cc +ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o @@ -10007,7 +10015,7 @@ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. + # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) @@ -10041,7 +10049,7 @@ if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - # I'd rather use --version here, but apparently some GNU ld's only accept -v. + # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes @@ -10321,7 +10329,7 @@ # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX=' ' archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds it's shared libraries. + # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi @@ -10360,7 +10368,7 @@ fi ;; darwin* | rhapsody*) - case "$host_os" in + case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' ;; @@ -10398,7 +10406,7 @@ archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else @@ -10411,7 +10419,7 @@ output_verbose_link_cmd='echo' archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; @@ -10491,7 +10499,7 @@ ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then - case "$host_cpu" in + case $host_cpu in hppa*64*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_CXX='+b $libdir' @@ -10507,7 +10515,7 @@ ;; esac fi - case "$host_cpu" in + case $host_cpu in hppa*64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no @@ -10533,7 +10541,7 @@ ld_shlibs_CXX=no ;; aCC*) - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; @@ -10554,7 +10562,7 @@ *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then - case "$host_cpu" in + case $host_cpu in ia64*|hppa*64*) archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; @@ -10655,7 +10663,7 @@ hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ @@ -10887,10 +10895,11 @@ case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no @@ -10910,15 +10919,7 @@ esac link_all_deplibs_CXX=yes - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is @@ -11022,7 +11023,7 @@ # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. - output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" + output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` for p in `eval $output_verbose_link_cmd`; do case $p in @@ -11098,6 +11099,20 @@ $rm -f confest.$objext +# PORTME: override above test on systems where it is broken +case $host_os in +solaris*) + case $cc_basename in + CC*) + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + postdeps_CXX='-lCstd -lCrun' + ;; + esac +esac + + case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac @@ -11153,7 +11168,7 @@ hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) ;; *) @@ -11222,7 +11237,7 @@ aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) # +Z the default ;; @@ -11263,7 +11278,7 @@ # Portland Group C++ compiler. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-static' + lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ @@ -11397,14 +11412,14 @@ # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11403: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11418: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:11407: \$? = $ac_status" >&5 + echo "$as_me:11422: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -11431,7 +11446,7 @@ fi fi -case "$host_os" in +case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= @@ -11459,14 +11474,14 @@ # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11465: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11480: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:11469: \$? = $ac_status" >&5 + echo "$as_me:11484: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -11477,7 +11492,7 @@ lt_cv_prog_compiler_c_o_CXX=yes fi fi - chmod u+w . + chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation @@ -11740,7 +11755,8 @@ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' @@ -11793,7 +11809,7 @@ soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` @@ -11831,7 +11847,14 @@ freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. - objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) @@ -11876,7 +11899,7 @@ version_type=sunos need_lib_prefix=no need_version=no - case "$host_cpu" in + case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes @@ -12831,7 +12854,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<EOF -#line 12834 "configure" +#line 12857 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12897,7 +12920,7 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) 2>/dev/null + (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; @@ -12929,7 +12952,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<EOF -#line 12932 "configure" +#line 12955 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12995,7 +13018,7 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) 2>/dev/null + (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; @@ -13551,7 +13574,7 @@ # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. -case "$host_os" in +case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then @@ -13639,7 +13662,7 @@ hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) # +Z the default ;; @@ -13686,7 +13709,7 @@ lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) # +Z the default ;; @@ -13716,12 +13739,12 @@ lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; - pgcc* | pgf77* | pgf90*) + pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' - lt_prog_compiler_static_F77='-static' + lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' @@ -13811,14 +13834,14 @@ # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13817: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13840: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:13821: \$? = $ac_status" >&5 + echo "$as_me:13844: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -13845,7 +13868,7 @@ fi fi -case "$host_os" in +case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= @@ -13873,14 +13896,14 @@ # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13879: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13902: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13883: \$? = $ac_status" >&5 + echo "$as_me:13906: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -13891,7 +13914,7 @@ lt_cv_prog_compiler_c_o_F77=yes fi fi - chmod u+w . + chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation @@ -14091,11 +14114,11 @@ tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler - whole_archive_flag_spec_F77='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; - pgf77* | pgf90* ) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_F77='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; @@ -14383,7 +14406,7 @@ # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77=' ' archive_cmds_need_lc_F77=yes - # This is similar to how AIX traditionally builds it's shared libraries. + # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi @@ -14423,7 +14446,7 @@ ;; darwin* | rhapsody*) - case "$host_os" in + case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' ;; @@ -14452,7 +14475,7 @@ output_verbose_link_cmd='echo' archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else @@ -14461,7 +14484,7 @@ output_verbose_link_cmd='echo' archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; @@ -14527,7 +14550,7 @@ hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; @@ -14536,7 +14559,7 @@ ;; esac else - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; @@ -14546,7 +14569,7 @@ esac fi if test "$with_gnu_ld" = no; then - case "$host_cpu" in + case $host_cpu in hppa*64*) hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_F77='+b $libdir' @@ -15005,7 +15028,8 @@ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' @@ -15058,7 +15082,7 @@ soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` @@ -15096,7 +15120,14 @@ freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. - objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) @@ -15141,7 +15172,7 @@ version_type=sunos need_lib_prefix=no need_version=no - case "$host_cpu" in + case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes @@ -15995,14 +16026,14 @@ # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16001: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16032: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:16005: \$? = $ac_status" >&5 + echo "$as_me:16036: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -16085,7 +16116,7 @@ hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) # +Z the default ;; @@ -16132,7 +16163,7 @@ lt_prog_compiler_wl_GCJ='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) # +Z the default ;; @@ -16162,12 +16193,12 @@ lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; - pgcc* | pgf77* | pgf90*) + pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-fpic' - lt_prog_compiler_static_GCJ='-static' + lt_prog_compiler_static_GCJ='-Bstatic' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' @@ -16257,14 +16288,14 @@ # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16263: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16294: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:16267: \$? = $ac_status" >&5 + echo "$as_me:16298: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -16291,7 +16322,7 @@ fi fi -case "$host_os" in +case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= @@ -16319,14 +16350,14 @@ # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16325: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16356: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:16329: \$? = $ac_status" >&5 + echo "$as_me:16360: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -16337,7 +16368,7 @@ lt_cv_prog_compiler_c_o_GCJ=yes fi fi - chmod u+w . + chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation @@ -16537,11 +16568,11 @@ tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler - whole_archive_flag_spec_GCJ='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; - pgf77* | pgf90* ) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_GCJ='${wl}--whole-archive,`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; @@ -16849,7 +16880,7 @@ # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ=' ' archive_cmds_need_lc_GCJ=yes - # This is similar to how AIX traditionally builds it's shared libraries. + # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi @@ -16889,7 +16920,7 @@ ;; darwin* | rhapsody*) - case "$host_os" in + case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' ;; @@ -16918,7 +16949,7 @@ output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else @@ -16927,7 +16958,7 @@ output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; @@ -16993,7 +17024,7 @@ hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; @@ -17002,7 +17033,7 @@ ;; esac else - case "$host_cpu" in + case $host_cpu in hppa*64*|ia64*) archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; @@ -17012,7 +17043,7 @@ esac fi if test "$with_gnu_ld" = no; then - case "$host_cpu" in + case $host_cpu in hppa*64*) hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' @@ -17471,7 +17502,8 @@ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' @@ -17524,7 +17556,7 @@ soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` @@ -17562,7 +17594,14 @@ freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. - objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) @@ -17607,7 +17646,7 @@ version_type=sunos need_lib_prefix=no need_version=no - case "$host_cpu" in + case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes @@ -18562,7 +18601,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<EOF -#line 18565 "configure" +#line 18604 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -18628,7 +18667,7 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) 2>/dev/null + (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; @@ -18660,7 +18699,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<EOF -#line 18663 "configure" +#line 18702 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -18726,7 +18765,7 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) 2>/dev/null + (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; @@ -21263,7 +21302,9 @@ -for ac_func in gethostname vasprintf mmap + + +for ac_func in gethostname vasprintf mmap mlock mlockall do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 Modified: freeswitch/branches/james/configure.in ============================================================================== --- freeswitch/branches/james/configure.in (original) +++ freeswitch/branches/james/configure.in Sun Jun 18 11:09:41 2006 @@ -34,7 +34,7 @@ AC_FUNC_MALLOC AC_TYPE_SIGNAL AC_FUNC_STRFTIME -AC_CHECK_FUNCS([gethostname vasprintf mmap]) +AC_CHECK_FUNCS([gethostname vasprintf mmap mlock mlockall]) AC_C_BIGENDIAN(AC_DEFINE([__BYTE_ORDER],__BIG_ENDIAN,[Big Endian]),AC_DEFINE([__BYTE_ORDER],__LITTLE_ENDIAN,[Little Endian])) AC_DEFINE([__LITTLE_ENDIAN],1234,[for the places where it is not defined]) Modified: freeswitch/branches/james/modules.conf.in ============================================================================== --- freeswitch/branches/james/modules.conf.in (original) +++ freeswitch/branches/james/modules.conf.in Sun Jun 18 11:09:41 2006 @@ -6,12 +6,12 @@ applications/mod_ivrtest applications/mod_playback applications/mod_skel +#applications/mod_rss #asr_tts/mod_cepstral codecs/mod_g711 codecs/mod_ilbc #codecs/mod_g729 codecs/mod_gsm -#codecs/mod_ilbc codecs/mod_l16 #codecs/mod_speex #dialplans/mod_dialplan_directory Modified: freeswitch/branches/james/src/include/switch.h ============================================================================== --- freeswitch/branches/james/src/include/switch.h (original) +++ freeswitch/branches/james/src/include/switch.h Sun Jun 18 11:09:41 2006 @@ -101,7 +101,6 @@ * Additionally, the experimental external modules make use of several external modules: * * mod_Exosip: - * - JRTPlib (http://research.edm.luc.ac.be/jori/jrtplib/jrtplib.html) * - eXoSIP (http://savannah.nongnu.org/projects/exosip/) * * mod_iaxchan: Modified: freeswitch/branches/james/src/include/switch_am_config.h.in ============================================================================== --- freeswitch/branches/james/src/include/switch_am_config.h.in (original) +++ freeswitch/branches/james/src/include/switch_am_config.h.in Sun Jun 18 11:09:41 2006 @@ -20,6 +20,12 @@ /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H +/* Define to 1 if you have the `mlock' function. */ +#undef HAVE_MLOCK + +/* Define to 1 if you have the `mlockall' function. */ +#undef HAVE_MLOCKALL + /* Define to 1 if you have the `mmap' function. */ #undef HAVE_MMAP Modified: freeswitch/branches/james/src/include/switch_caller.h ============================================================================== --- freeswitch/branches/james/src/include/switch_caller.h (original) +++ freeswitch/branches/james/src/include/switch_caller.h Sun Jun 18 11:09:41 2006 @@ -60,6 +60,8 @@ /*! \brief Call Specific Data */ struct switch_caller_profile { + /*! The Call's User Name */ + char *username; /*! The name of the dialplan */ char *dialplan; /*! Caller ID Name */ @@ -110,6 +112,7 @@ switch_caller_application_t *last_application; /*! Pointer to the entire stack of applications for this extension */ switch_caller_application_t *applications; + struct switch_caller_extension *next; }; /*! @@ -148,6 +151,7 @@ /*! \brief Create a new caller profile object \param pool memory pool to use + \param username tne username of the caller \param dialplan name of the dialplan module in use \param caller_id_name caller ID name \param caller_id_number caller ID number @@ -161,16 +165,17 @@ \return a new profile object allocated from the session's memory pool */ SWITCH_DECLARE(switch_caller_profile_t *) switch_caller_profile_new(switch_memory_pool_t *pool, - char *dialplan, - char *caller_id_name, - char *caller_id_number, - char *network_addr, - char *ani, - char *ani2, - char *rdnis, - char *source, - char *context, - char *destination_number); + char *username, + char *dialplan, + char *caller_id_name, + char *caller_id_number, + char *network_addr, + char *ani, + char *ani2, + char *rdnis, + char *source, + char *context, + char *destination_number); /*! \brief Clone an existing caller profile object Modified: freeswitch/branches/james/src/include/switch_channel.h ============================================================================== --- freeswitch/branches/james/src/include/switch_channel.h (original) +++ freeswitch/branches/james/src/include/switch_channel.h Sun Jun 18 11:09:41 2006 @@ -204,6 +204,15 @@ SWITCH_DECLARE(char *) switch_channel_get_variable(switch_channel_t *channel, char *varname); /*! + * Start iterating over the entries in the channel variable list. + * @param channel the channel to intterate the variales for + * @param pool The pool to allocate the switch_hash_index_t iterator. If this + * pool is NULL, then an internal, non-thread-safe iterator is used. + * @remark Use switch_hash_next and switch_hash_this with this function to iterate all the channel variables + */ +SWITCH_DECLARE(switch_hash_index_t *) switch_channel_variable_first(switch_channel_t *channel, switch_memory_pool_t *pool); + +/*! \brief Assign a caller extension to a given channel \param channel channel to assign extension to \param caller_extension extension to assign @@ -361,6 +370,13 @@ \return the string representation of the state */ SWITCH_DECLARE(const char *) switch_channel_state_name(switch_channel_state_t state); + +/*! + \brief Render the enum of the provided state name + \param name the name of the state + \return the enum value (numeric) +*/ +SWITCH_DECLARE(switch_channel_state_t) switch_channel_name_state(char *name); /*! \brief Add information about a given channel to an event object Modified: freeswitch/branches/james/src/include/switch_core.h ============================================================================== --- freeswitch/branches/james/src/include/switch_core.h (original) +++ freeswitch/branches/james/src/include/switch_core.h Sun Jun 18 11:09:41 2006 @@ -111,9 +111,10 @@ /*! \brief Initilize the core \param console optional FILE stream for output + \param err a pointer to set any errors to \note to be called at application startup */ -SWITCH_DECLARE(switch_status_t) switch_core_init(char *console); +SWITCH_DECLARE(switch_status_t) switch_core_init(char *console, const char **err); /*! \brief Destroy the core @@ -433,6 +434,12 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, int stream_id); /*! + \brief Reset the buffers and resampler on a session + \param session the session to reset +*/ +SWITCH_DECLARE(void) switch_core_session_reset(switch_core_session_t *session); + +/*! \brief Write a frame to a session \param session the session to write to \param frame the frame to write @@ -887,6 +894,36 @@ \return SWITCH_STATUS_SUCCESS with len adjusted to the bytes written if successful */ SWITCH_DECLARE(switch_status_t) switch_core_speech_feed_tts(switch_speech_handle_t *sh, char *text, switch_speech_flag_t *flags); + +/*! + \brief Flush TTS audio on a given handle + \param sh the speech handle +*/ +SWITCH_DECLARE(void) switch_core_speech_flush_tts(switch_speech_handle_t *sh); + +/*! + \brief Set a text parameter on a TTS handle + \param sh the speech handle + \param param the parameter + \param val the value +*/ +SWITCH_DECLARE(void) switch_core_speech_text_param_tts(switch_speech_handle_t *sh, char *param, char *val); + +/*! + \brief Set a numeric parameter on a TTS handle + \param sh the speech handle + \param param the parameter + \param val the value +*/ +SWITCH_DECLARE(void) switch_core_speech_numeric_param_tts(switch_speech_handle_t *sh, char *param, int val); + +/*! + \brief Set a float parameter on a TTS handle + \param sh the speech handle + \param param the parameter + \param val the value +*/ +SWITCH_DECLARE(void) switch_core_speech_float_param_tts(switch_speech_handle_t *sh, char *param, double val); /*! \brief Read rendered audio from the TTS module Modified: freeswitch/branches/james/src/include/switch_ivr.h ============================================================================== --- freeswitch/branches/james/src/include/switch_ivr.h (original) +++ freeswitch/branches/james/src/include/switch_ivr.h Sun Jun 18 11:09:41 2006 @@ -72,17 +72,15 @@ \param terminators digits to end the collection \param terminator actual digit that caused the collection to end (if any) \param timeout timeout in ms - \param poll_channel flag to specify if you want the function to poll the channel while running \return SWITCH_STATUS_SUCCESS to keep the collection moving. */ SWITCH_DECLARE(switch_status_t) switch_ivr_collect_digits_count(switch_core_session_t *session, - char *buf, - unsigned int buflen, - unsigned int maxdigits, - const char *terminators, - char *terminator, - unsigned int timeout, - unsigned int poll_channel); + char *buf, + unsigned int buflen, + unsigned int maxdigits, + const char *terminators, + char *terminator, + unsigned int timeout); /*! \brief play a file from the disk to the session @@ -125,6 +123,15 @@ unsigned int buflen); +SWITCH_DECLARE(switch_status_t) switch_ivr_speak_text_handle(switch_core_session_t *session, + switch_speech_handle_t *sh, + switch_codec_t *codec, + switch_timer_t *timer, + switch_dtmf_callback_function_t dtmf_callback, + char *text, + void *buf, + unsigned int buflen); + /*! \brief Speak given text with given tts engine \param session the session to speak on @@ -139,14 +146,15 @@ \return SWITCH_STATUS_SUCCESS if all is well */ SWITCH_DECLARE(switch_status_t) switch_ivr_speak_text(switch_core_session_t *session, - char *tts_name, - char *voice_name, - char *timer_name, - uint32_t rate, - switch_dtmf_callback_function_t dtmf_callback, - char *text, - void *buf, - unsigned int buflen); + char *tts_name, + char *voice_name, + char *timer_name, + uint32_t rate, + switch_dtmf_callback_function_t dtmf_callback, + char *text, + void *buf, + unsigned int buflen); + /*! \brief Bridge Audio from one session to another Modified: freeswitch/branches/james/src/include/switch_module_interfaces.h ============================================================================== --- freeswitch/branches/james/src/include/switch_module_interfaces.h (original) +++ freeswitch/branches/james/src/include/switch_module_interfaces.h Sun Jun 18 11:09:41 2006 @@ -327,6 +327,10 @@ switch_size_t *datalen, uint32_t *rate, switch_speech_flag_t *flags); + void (*speech_flush_tts)(switch_speech_handle_t *sh); + void (*speech_text_param_tts)(switch_speech_handle_t *sh, char *param, char *val); + void (*speech_numeric_param_tts)(switch_speech_handle_t *sh, char *param, int val); + void (*speech_float_param_tts)(switch_speech_handle_t *sh, char *param, double val); const struct switch_speech_interface *next; }; @@ -338,7 +342,13 @@ const switch_speech_interface_t *speech_interface; /*! flags to control behaviour */ uint32_t flags; - + /*! The Name*/ + char *name; + /*! The Rate*/ + uint32_t rate; + uint32_t speed; + char voice[80]; + char engine[80]; /*! the handle's memory pool */ switch_memory_pool_t *memory_pool; /*! private data for the format module to store handle specific info */ Modified: freeswitch/branches/james/src/include/switch_rtp.h ============================================================================== --- freeswitch/branches/james/src/include/switch_rtp.h (original) +++ freeswitch/branches/james/src/include/switch_rtp.h Sun Jun 18 11:09:41 2006 @@ -349,6 +349,13 @@ SWITCH_DECLARE(void) switch_rtp_set_private(switch_rtp_t *rtp_session, void *private_data); /*! + \brief Set the payload type to consider RFC2833 DTMF + \param rtp_session the RTP session to modify + \param te the payload type +*/ +SWITCH_DECLARE(void) switch_rtp_set_telephony_event(switch_rtp_t *rtp_session, switch_payload_t te); + +/*! \brief Retrieve the private data from a given RTP session \param rtp_session the RTP session to retrieve the data from \return the pointer to the private data Modified: freeswitch/branches/james/src/include/switch_types.h ============================================================================== --- freeswitch/branches/james/src/include/switch_types.h (original) +++ freeswitch/branches/james/src/include/switch_types.h Sun Jun 18 11:09:41 2006 @@ -92,8 +92,8 @@ #define SWITCH_MAX_STATE_HANDLERS 30 #define SWITCH_TRUE 1 #define SWITCH_FALSE 0 +#define SWITCH_CORE_QUEUE_LEN 20000 - typedef enum { SWITCH_XML_SECTION_RESULT = 0, SWITCH_XML_SECTION_CONFIG = (1 << 0), @@ -229,7 +229,9 @@ SWITCH_STATUS_GENERR - A general Error SWITCH_STATUS_INUSE - An indication that requested resource is in use SWITCH_STATUS_BREAK - A non-fatal break of an operation - SWITCH_STATUS_SOCKERR - A socket error + SWITCH_STATUS_SOCKERR - A socket error + SWITCH_STATUS_MORE_DATA - Need More Data + SWITCH_STATUS_NOTFOUND - Not Found </pre> */ typedef enum { @@ -245,7 +247,9 @@ SWITCH_STATUS_GENERR, SWITCH_STATUS_INUSE, SWITCH_STATUS_BREAK, - SWITCH_STATUS_SOCKERR + SWITCH_STATUS_SOCKERR, + SWITCH_STATUS_MORE_DATA, + SWITCH_STATUS_NOTFOUND } switch_status_t; @@ -340,6 +344,7 @@ CF_LOCK_THREAD = (1 << 6) - Prevent the channel thread from exiting while this flag is set CF_BRIDGED = (1 << 7) - Channel in a bridge CF_HOLD = (1 << 8) - Channel is on hold +CF_SERVICE = (1 << 9) - Channel has a service thread </pre> */ @@ -352,7 +357,8 @@ CF_ACCEPT_CNG = (1 << 5), CF_LOCK_THREAD = (1 << 6), CF_BRIDGED = (1 << 7), - CF_HOLD = (1 << 8) + CF_HOLD = (1 << 8), + CF_SERVICE = (1 << 9) } switch_channel_flag_t; @@ -366,6 +372,7 @@ </pre> */ typedef enum { + SFF_NONE = 0, SFF_CNG = (1 << 0), SFF_RAW_RTP = (1 << 1) } switch_frame_flag_t; @@ -419,6 +426,7 @@ SWITCH_SPEECH_FLAG_PEEK = (1 << 3) - Read data but do not erase it. SWITCH_SPEECH_FLAG_FREE_POOL = (1 << 4) - Free interface's pool on destruction. SWITCH_SPEECH_FLAG_BLOCKING = (1 << 5) - Indicate that a blocking call is desired +SWITCH_SPEECH_FLAG_PAUSE = (1 << 6) - Pause toggle for playback </pre> */ typedef enum { @@ -428,6 +436,7 @@ SWITCH_SPEECH_FLAG_PEEK = (1 << 3), SWITCH_SPEECH_FLAG_FREE_POOL = (1 << 4), SWITCH_SPEECH_FLAG_BLOCKING = (1 << 5), + SWITCH_SPEECH_FLAG_PAUSE = (1 << 6) } switch_speech_flag_t; Modified: freeswitch/branches/james/src/include/switch_xml.h ============================================================================== --- freeswitch/branches/james/src/include/switch_xml.h (original) +++ freeswitch/branches/james/src/include/switch_xml.h Sun Jun 18 11:09:41 2006 @@ -172,6 +172,12 @@ ///\return the value SWITCH_DECLARE(const char *) switch_xml_attr(switch_xml_t xml, const char *attr); +///\brief returns the value of the requested tag attribute, or "" if not found +///\param xml the xml node +///\param attr the attribute +///\return the value +SWITCH_DECLARE(const char *) switch_xml_attr_soft(switch_xml_t xml, const char *attr); + ///\brief Traverses the switch_xml sturcture to retrieve a specific subtag. Takes a ///\ variable length list of tag names and indexes. The argument list must be ///\ terminated by either an index of -1 or an empty string tag name. Example: @@ -271,13 +277,15 @@ ///\brief open the Core xml root ///\param reload if it's is already open close it and open it again as soon as permissable (blocking) +///\param err a pointer to set error strings ///\return the xml root node or NULL -SWITCH_DECLARE(switch_xml_t) switch_xml_open_root(uint8_t reload); +SWITCH_DECLARE(switch_xml_t) switch_xml_open_root(uint8_t reload, const char **err); ///\brief initilize the core XML backend ///\param pool a memory pool to use +///\param err a pointer to set error strings ///\return SWITCH_STATUS_SUCCESS if successful -SWITCH_DECLARE(switch_status_t) switch_xml_init(switch_memory_pool_t *pool); +SWITCH_DECLARE(switch_status_t) switch_xml_init(switch_memory_pool_t *pool, const char **err); SWITCH_DECLARE(switch_status_t) switch_xml_destroy(void); Modified: freeswitch/branches/james/src/mod/applications/mod_bridgecall/mod_bridgecall.c ============================================================================== --- freeswitch/branches/james/src/mod/applications/mod_bridgecall/mod_bridgecall.c (original) +++ freeswitch/branches/james/src/mod/applications/mod_bridgecall/mod_bridgecall.c Sun Jun 18 11:09:41 2006 @@ -56,6 +56,7 @@ caller_caller_profile = switch_channel_get_caller_profile(caller_channel); caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session), + caller_caller_profile->username, caller_caller_profile->dialplan, caller_caller_profile->caller_id_name, caller_caller_profile->caller_id_number, Modified: freeswitch/branches/james/src/mod/applications/mod_commands/mod_commands.c ============================================================================== --- freeswitch/branches/james/src/mod/applications/mod_commands/mod_commands.c (original) +++ freeswitch/branches/james/src/mod/applications/mod_commands/mod_commands.c Sun Jun 18 11:09:41 2006 @@ -24,6 +24,8 @@ * Contributor(s): * * Anthony Minessale II <anthmct@yahoo.com> + * Michael Jerris <mike@jerris.com> + * Johny Kadarisman <jkr888@gmail.com> * * * mod_commands.c -- Misc. Command Module @@ -80,6 +82,20 @@ return SWITCH_STATUS_SUCCESS; } + +static switch_status_t reload_function(char *mod, switch_stream_handle_t *stream) +{ + const char *err; + switch_xml_t xml_root; + + if ((xml_root = switch_xml_open_root(1, &err))) { + switch_xml_free(xml_root); + } + + stream->write_function(stream, "OK [%s]\n", err); + return SWITCH_STATUS_SUCCESS; +} + static switch_status_t kill_function(char *dest, switch_stream_handle_t *stream) { switch_core_session_t *session = NULL; @@ -171,7 +187,7 @@ static int show_callback(void *pArg, int argc, char **argv, char **columnNames){ switch_stream_handle_t *stream = (switch_stream_handle_t *) pArg; - stream->write_function(stream, "%s\n", argv[1]); + stream->write_function(stream, "%s|%s\n", argv[0], argv[1] ? argv[1] : "NULL"); return 0; } @@ -182,7 +198,22 @@ char *errmsg; switch_core_db_t *db = switch_core_db_handle(); - sprintf (sql, "select * from interfaces"); + if (!cmd) { + sprintf (sql, "select * from interfaces"); + } + else if ( !strcmp(cmd,"codec") || !strcmp(cmd,"application") || + !strcmp(cmd,"api") || !strcmp(cmd,"dialplan") || + !strcmp(cmd,"file") || !strcmp(cmd,"timer") + ) { + sprintf (sql, "select * from interfaces where type = '%s'", cmd); + } + else { + stream->write_function(stream, "Invalid interfaces type!\n"); + stream->write_function(stream, "Example:\n"); + stream->write_function(stream, "show <blank>|codec|application|api|dialplan|file|timer\n"); + return SWITCH_STATUS_SUCCESS; + } + switch_core_db_exec(db, sql, show_callback, stream, &errmsg); if (errmsg) { @@ -231,12 +262,19 @@ /*.next */ &transfer_api_interface }; +static switch_api_interface_t reload_api_interface = { + /*.interface_name */ "reloadxml", + /*.desc */ "Reload XML", + /*.function */ reload_function, + /*.next */ &load_api_interface, +}; + static switch_api_interface_t commands_api_interface = { /*.interface_name */ "killchan", /*.desc */ "Kill Channel", /*.function */ kill_function, - /*.next */ &load_api_interface + /*.next */ &reload_api_interface }; static const switch_loadable_module_interface_t mod_commands_module_interface = { Modified: freeswitch/branches/james/src/mod/applications/mod_ivrtest/mod_ivrtest.c ============================================================================== --- freeswitch/branches/james/src/mod/applications/mod_ivrtest/mod_ivrtest.c (original) +++ freeswitch/branches/james/src/mod/applications/mod_ivrtest/mod_ivrtest.c Sun Jun 18 11:09:41 2006 @@ -63,7 +63,7 @@ const char *teamname; for (team = switch_xml_child(f1, "team"); team; team = team->next) { - teamname = switch_xml_attr(team, "name"); + teamname = switch_xml_attr_soft(team, "name"); for (driver = switch_xml_child(team, "driver"); driver; driver = driver->next) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s, %s: %s\n", switch_xml_child(driver, "name")->txt, teamname, @@ -183,7 +183,7 @@ } } - if (switch_ivr_collect_digits_count(session, buf, sizeof(buf), 10, "#*", &term, 10000, 1) != SWITCH_STATUS_SUCCESS) { + if (switch_ivr_collect_digits_count(session, buf, sizeof(buf), 10, "#*", &term, 10000) != SWITCH_STATUS_SUCCESS) { switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); break; } Modified: freeswitch/branches/james/src/mod/applications/mod_playback/mod_playback.c ============================================================================== --- freeswitch/branches/james/src/mod/applications/mod_playback/mod_playback.c (original) +++ freeswitch/branches/james/src/mod/applications/mod_playback/mod_playback.c Sun Jun 18 11:09:41 2006 @@ -49,6 +49,43 @@ } +static void speak_function(switch_core_session_t *session, char *data) +{ + switch_channel_t *channel; + char buf[10]; + char *argv[4] = {0}; + int argc; + char *engine = NULL; + char *voice = NULL; + char *text = NULL; + char *timer_name = NULL; + char *mydata = NULL; + switch_codec_t *codec; + + codec = switch_core_session_get_read_codec(session); + assert(codec != NULL); + + channel = switch_core_session_get_channel(session); + assert(channel != NULL); + + mydata = switch_core_session_strdup(session, data); + argc = switch_separate_string(mydata, '|', argv, sizeof(argv)/sizeof(argv[0])); + + engine = argv[0]; + voice = argv[1]; + text = argv[2]; + timer_name = argv[3]; + + if (!(engine && voice && text)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Params!\n"); + switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + } + + switch_channel_answer(channel); + switch_ivr_speak_text(session, engine, voice, timer_name, codec->implementation->samples_per_second, on_dtmf, text, buf, sizeof(buf)); + +} + static void playback_function(switch_core_session_t *session, char *data) { switch_channel_t *channel; @@ -85,9 +122,17 @@ } + +static const switch_application_interface_t speak_application_interface = { + /*.interface_name */ "speak", + /*.application_function */ speak_function +}; + static const switch_application_interface_t record_application_interface = { /*.interface_name */ "record", - /*.application_function */ record_function + /*.application_function */ record_function, + NULL,NULL,NULL, + &speak_application_interface }; static const switch_application_interface_t playback_application_interface = { Modified: freeswitch/branches/james/src/mod/asr_tts/mod_cepstral/mod_cepstral.c ============================================================================== --- freeswitch/branches/james/src/mod/asr_tts/mod_cepstral/mod_cepstral.c (original) +++ freeswitch/branches/james/src/mod/asr_tts/mod_cepstral/mod_cepstral.c Sun Jun 18 11:09:41 2006 @@ -36,6 +36,8 @@ #include <swift.h> #include <switch.h> +#define MY_BUF_LEN 1024 * 256 + static const char modname[] = "mod_cepstral"; static swift_engine *engine; @@ -59,22 +61,42 @@ cepstral_t *cepstral; swift_event_t rv = SWIFT_SUCCESS; void *buf = NULL; - int len = 0; + int len = 0, i = 0; cepstral = udata; assert(cepstral != NULL); + if (!cepstral->port || cepstral->done || cepstral->done_gen) { + return SWIFT_UNKNOWN_ERROR; + } + /* Only proceed when we have success */ if (!SWIFT_FAILED((rv = swift_event_get_audio(event, &buf, &len)))) { - switch_mutex_lock(cepstral->audio_lock); - if (switch_buffer_write(cepstral->audio_buffer, buf, len) <= 0) { - rv = SWIFT_UNKNOWN_ERROR; + while(!cepstral->done) { + switch_mutex_lock(cepstral->audio_lock); + if (switch_buffer_write(cepstral->audio_buffer, buf, len) > 0) { + switch_mutex_unlock(cepstral->audio_lock); + break; + } + switch_mutex_unlock(cepstral->audio_lock); + if (!cepstral->done) { + for (i = 0; i < 10; i++) { + switch_yield(10000); + if (cepstral->done) { + break; + } + } + } + } - switch_mutex_unlock(cepstral->audio_lock); } else { cepstral->done = 1; } + if (cepstral->done) { + rv = SWIFT_UNKNOWN_ERROR; + } + return rv; } @@ -91,7 +113,7 @@ return SWITCH_STATUS_MEMERR; } - if (switch_buffer_create(sh->memory_pool, &cepstral->audio_buffer, SWITCH_RECCOMMENDED_BUFFER_SIZE) != SWITCH_STATUS_SUCCESS) { + if (switch_buffer_create(sh->memory_pool, &cepstral->audio_buffer, MY_BUF_LEN) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Write Buffer Failed!\n"); return SWITCH_STATUS_MEMERR; } @@ -130,8 +152,14 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to set voice.\n"); goto all_done; } + + voice_name = (char *) swift_voice_get_attribute(cepstral->voice, "name"); } + if (voice_name) { + switch_copy_string(sh->voice, voice_name, sizeof(sh->voice)); + } + swift_port_set_callback(cepstral->port, &write_audio, SWIFT_EVENT_AUDIO, cepstral); sh->private_info = cepstral; @@ -150,6 +178,10 @@ cepstral = sh->private_info; assert(cepstral != NULL); + + cepstral->done = 1; + cepstral->done_gen = 1; + swift_port_stop(cepstral->port, SWIFT_ASYNC_ANY, SWIFT_EVENT_NOW); /* Close the Swift Port and Engine */ if (NULL != cepstral->port) swift_port_close(cepstral->port); //if (NULL != cepstral->engine) swift_engine_close(cepstral->engine); @@ -163,19 +195,45 @@ static switch_status_t cepstral_speech_feed_tts(switch_speech_handle_t *sh, char *text, switch_speech_flag_t *flags) { cepstral_t *cepstral; + const char *fp = "file:"; + int len = strlen(fp); assert(sh != NULL); cepstral = sh->private_info; assert(cepstral != NULL); + cepstral->done_gen = 0; + cepstral->done = 0; - swift_port_speak_text(cepstral->port, text, 0, NULL, &cepstral->tts_stream, NULL); - //swift_port_speak_text(cepstral->port, text, 0, NULL, NULL, NULL); - + cepstral->tts_stream = NULL; + if (!strncasecmp(text, fp, len)) { + text += len; + swift_port_speak_file(cepstral->port, text, NULL, &cepstral->tts_stream, NULL); + } else { + swift_port_speak_text(cepstral->port, text, 0, NULL, &cepstral->tts_stream, NULL); + } + return SWITCH_STATUS_FALSE; } +static void cepstral_speech_flush_tts(switch_speech_handle_t *sh) +{ + cepstral_t *cepstral; + + cepstral = sh->private_info; + assert(cepstral != NULL); + + cepstral->done_gen = 1; + cepstral->done = 1; + if (cepstral->audio_buffer) { + switch_mutex_lock(cepstral->audio_lock); + switch_buffer_zero(cepstral->audio_buffer); + switch_mutex_unlock(cepstral->audio_lock); + } + swift_port_stop(cepstral->port, SWIFT_ASYNC_ANY, SWIFT_EVENT_NOW); +} + static switch_status_t cepstral_speech_read_tts(switch_speech_handle_t *sh, void *data, size_t *datalen, @@ -193,20 +251,23 @@ while(!cepstral->done) { if (!cepstral->done_gen) { - int check = (SWIFT_STATUS_RUNNING == swift_port_status(cepstral->port, cepstral->tts_stream)); - if (!check) { + int check = swift_port_status(cepstral->port, cepstral->tts_stream); + + if (!check == SWIFT_STATUS_RUNNING) { cepstral->done_gen = 1; } } + switch_mutex_lock(cepstral->audio_lock); used = switch_buffer_inuse(cepstral->audio_buffer); - - + switch_mutex_unlock(cepstral->audio_lock); + if (!used && cepstral->done_gen) { + + status = SWITCH_STATUS_BREAK; break; } - /* wait for the right amount of data (unless there is no blocking flag) */ if (used < desired) { @@ -245,6 +306,83 @@ return status; } +static void cepstral_text_param_tts(switch_speech_handle_t *sh, char *param, char *val) +{ + cepstral_t *cepstral; + + cepstral = sh->private_info; + assert(cepstral != NULL); + + if (!strcasecmp(param, "voice")) { + char *voice_name = val; + if (!strcasecmp(voice_name, "next")) { + if ((cepstral->voice = swift_port_find_next_voice(cepstral->port))) { + if ( SWIFT_FAILED(swift_port_set_voice(cepstral->port, cepstral->voice)) ) { + cepstral->done = cepstral->done_gen = 1; + return; + } + voice_name = (char *) swift_voice_get_attribute(cepstral->voice, "name"); + } else { + voice_name = NULL; + } + } else { + if (voice_name && SWIFT_FAILED(swift_port_set_voice_by_name(cepstral->port, voice_name))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Invalid voice %s!\n", voice_name); + voice_name = NULL; + } + } + + if (!voice_name) { + /* Find the first voice on the system */ + if ((cepstral->voice = swift_port_find_first_voice(cepstral->port, NULL, NULL)) == NULL) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to find any voices!\n"); + cepstral->done = cepstral->done_gen = 1; + return; + } + + /* Set the voice found by find_first_voice() as the port's current voice */ + if ( SWIFT_FAILED(swift_port_set_voice(cepstral->port, cepstral->voice)) ) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to set voice.\n"); + cepstral->done = cepstral->done_gen = 1; + return; + } + + voice_name = (char *) swift_voice_get_attribute(cepstral->voice, "name"); + } + + if (voice_name) { + switch_copy_string(sh->voice, voice_name, sizeof(sh->voice)); + } + + return; + } + + swift_port_set_param_string(cepstral->port, param, val, NULL); +} + +static void cepstral_numeric_param_tts(switch_speech_handle_t *sh, char *param, int val) +{ + cepstral_t *cepstral; + + cepstral = sh->private_info; + assert(cepstral != NULL); + + swift_port_set_param_int(cepstral->port, param, val, NULL); + +} + + +static void cepstral_float_param_tts(switch_speech_handle_t *sh, char *param, double val) +{ + cepstral_t *cepstral; + + cepstral = sh->private_info; + assert(cepstral != NULL); + + swift_port_set_param_float(cepstral->port, param, val, NULL); + +} + static const switch_speech_interface_t cepstral_speech_interface = { /*.interface_name*/ "cepstral", /*.speech_open*/ cepstral_speech_open, @@ -252,8 +390,11 @@ /*.speech_feed_asr*/ NULL, /*.speech_interpret_asr*/ NULL, /*.speech_feed_tts*/ cepstral_speech_feed_tts, - /*.speech_read_tts*/ cepstral_speech_read_tts - + /*.speech_read_tts*/ cepstral_speech_read_tts, + /*.speech_flush_tts*/ cepstral_speech_flush_tts, + /*.speech_text_param_tts*/ cepstral_text_param_tts, + /*.speech_numeric_param_tts*/ cepstral_numeric_param_tts, + /*.speech_numeric_param_tts*/ cepstral_float_param_tts }; static const switch_loadable_module_interface_t cepstral_module_interface = { Modified: freeswitch/branches/james/src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c ============================================================================== --- freeswitch/branches/james/src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c (original) +++ freeswitch/branches/james/src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c Sun Jun 18 11:09:41 2006 @@ -64,12 +64,10 @@ if ((settings = switch_xml_child(cfg, "settings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); - if (!strcmp(var, "directory_name") && val) { - set_global_directory_name(val); - } else if (!strcmp(var, "directory_name") && val) { + if (!strcmp(var, "directory-name") && val) { set_global_directory_name(val); } else if (!strcmp(var, "host") && val) { set_global_host(val); Modified: freeswitch/branches/james/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c ============================================================================== --- freeswitch/branches/james/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c (original) +++ freeswitch/branches/james/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c Sun Jun 18 11:09:41 2006 @@ -122,13 +122,80 @@ substituted[y++] = '\0'; } +static int parse_exten(switch_core_session_t *session, switch_xml_t xexten, switch_caller_extension_t **extension) +{ + switch_xml_t xcond, xaction; + switch_caller_profile_t *caller_profile; + switch_channel_t *channel; + char *exten_name = (char *) switch_xml_attr_soft(xexten, "name"); + int proceed = 0; + + channel = switch_core_session_get_channel(session); + caller_profile = switch_channel_get_caller_profile(channel); + + for (xcond = switch_xml_child(xexten, "condition"); xcond; xcond = xcond->next) { + char *field = NULL; + char *expression = NULL; + char *field_data = NULL; + pcre *re = NULL; + int ovector[30]; + + field = (char *) switch_xml_attr(xcond, "field"); + expression = (char *) switch_xml_attr_soft(xcond, "expression"); + + if (field) { + if (*field == '$') { + field_data = switch_channel_get_variable(channel, field + 1); + } else { + field_data = switch_caller_get_field_by_name(caller_profile, field); + } + if (!field_data) { + field_data = ""; + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "test conditions %s(%s) =~ /%s/\n", field, field_data, expression); + if (!(proceed = perform_regex(channel, field_data, expression, &re, ovector, sizeof(ovector) / sizeof(ovector[0])))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Regex mismatch\n"); + break; + } + assert(re != NULL); + } + + + for (xaction = switch_xml_child(xcond, "action"); xaction; xaction = xaction->next) { + char *application = (char*) switch_xml_attr_soft(xaction, "application"); + char *data = (char *) switch_xml_attr_soft(xaction, "data"); + char substituted[1024] = ""; + char *app_data = NULL; + + if (field && strchr(expression, '(')) { + perform_substitution(re, proceed, data, field_data, substituted, sizeof(substituted), ovector); + app_data = substituted; + } else { + app_data = data; + } + + if (!*extension) { + if ((*extension = + switch_caller_extension_new(session, exten_name, caller_profile->destination_number)) == 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "memory error!\n"); + return 0; + } + } + + switch_caller_extension_add_application(session, *extension, application, app_data); + } + + cleanre(re); + } + return proceed; +} + static switch_caller_extension_t *dialplan_hunt(switch_core_session_t *session) { switch_caller_profile_t *caller_profile; switch_caller_extension_t *extension = NULL; switch_channel_t *channel; - char *exten_name = NULL; - switch_xml_t cfg, xml, xcontext, xexten, xaction, xcond; + switch_xml_t cfg, xml, xcontext, xexten; char *context = NULL; char params[1024]; @@ -143,7 +210,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Processing %s->%s!\n", caller_profile->caller_id_name, caller_profile->destination_number); - snprintf(params, sizeof(params), "dest=%s", caller_profile->destination_number); + snprintf(params, sizeof(params), "context=%s&dest=%s", caller_profile->context, caller_profile->destination_number); if (switch_xml_locate("dialplan", NULL, NULL, NULL, &xml, &cfg, params) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of dialplan failed\n"); @@ -159,55 +226,21 @@ } } - for (xexten = switch_xml_child(xcontext, "extension"); xexten; xexten = xexten->next) { + if (!(xexten = switch_xml_find_child(xcontext, "extension", "name", caller_profile->destination_number))) { + xexten = switch_xml_child(xcontext, "extension"); + } + + while(xexten) { int proceed = 0; - char *cont = (char *) switch_xml_attr(xexten, "continue"); + char *cont = (char *) switch_xml_attr_soft(xexten, "continue"); - for (xcond = switch_xml_child(xexten, "condition"); xcond; xcond = xcond->next) { - char *field = (char *) switch_xml_attr(xcond, "field"); - char *expression = (char *) switch_xml_attr(xcond, "expression"); - char *field_data = switch_caller_get_field_by_name(caller_profile, field); - pcre *re = NULL; - int ovector[30]; - - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "test conditions %s(%s) =~ /%s/\n", field, field_data, expression); - if (!(proceed = perform_regex(channel, field_data, expression, &re, ovector, sizeof(ovector) / sizeof(ovector[0])))) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Regex mismatch\n"); - break; - } + proceed = parse_exten(session, xexten, &extension); - assert(re != NULL); - - for (xaction = switch_xml_child(xcond, "action"); xaction; xaction = xaction->next) { - char *application = (char*) switch_xml_attr(xaction, "application"); - char *data = (char *) switch_xml_attr(xaction, "data"); - char substituted[1024] = ""; - char *app_data = NULL; - - if (strchr(expression, '(')) { - perform_substitution(re, proceed, data, field_data, substituted, sizeof(substituted), ovector); - app_data = substituted; - } else { - app_data = data; - } - - if (!extension) { - if ((extension = - switch_caller_extension_new(session, exten_name, caller_profile->destination_number)) == 0) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "memory error!\n"); - return NULL; - } - } - - switch_caller_extension_add_application(session, extension, application, app_data); - } - - cleanre(re); - } - if (proceed && !switch_true(cont)) { break; } + + xexten = xexten->next; } Modified: freeswitch/branches/james/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.vcproj ============================================================================== --- freeswitch/branches/james/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.vcproj (original) +++ freeswitch/branches/james/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.vcproj Sun Jun 18 11:09:41 2006 @@ -42,8 +42,8 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories=""$(InputDir)..\..\..\include";"$(InputDir)include";"$(InputDir)..\..\..\..\libs\include";"$(InputDir)..\..\..\..\libs\pcre";"$(InputDir)..\..\..\..\libs\pcre\win32"" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;PCRE_STATIC" + AdditionalIncludeDirectories=""$(InputDir)..\..\..\include";"$(InputDir)include";"$(InputDir)..\..\..\..\libs\include"" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="1" @@ -67,7 +67,7 @@ AdditionalDependencies="libpcre.lib" OutputFile="..\..\..\..\w32\vsnet\$(OutDir)/mod/mod_dialplan_xml.dll" LinkIncremental="2" - AdditionalLibraryDirectories="$(InputDir)..\..\..\..\libs\pcre\win32\$(OutDir);..\..\..\..\w32\vsnet\$(OutDir)" + AdditionalLibraryDirectories=""..\..\..\..\w32\vsnet\$(OutDir)"" GenerateDebugInformation="true" ProgramDatabaseFile="$(OutDir)/mod_dialplan_xml.pdb" SubSystem="2" @@ -125,8 +125,8 @@ /> <Tool Name="VCCLCompilerTool" - AdditionalIncludeDirectories=""$(InputDir)..\..\..\include";"$(InputDir)include";"$(InputDir)..\..\..\..\libs\include";"$(InputDir)..\..\..\..\libs\pcre";"$(InputDir)..\..\..\..\libs\pcre\win32"" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;PCRE_STATIC" + AdditionalIncludeDirectories=""$(InputDir)..\..\..\include";"$(InputDir)include";"$(InputDir)..\..\..\..\libs\include"" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS" RuntimeLibrary="0" UsePrecompiledHeader="0" WarningLevel="4" @@ -147,7 +147,7 @@ AdditionalDependencies="libpcre.lib" OutputFile="..\..\..\..\w32\vsnet\$(OutDir)/mod/mod_dialplan_xml.dll" LinkIncremental="1" - AdditionalLibraryDirectories="$(InputDir)..\..\..\..\libs\pcre\win32\$(OutDir);..\..\..\..\w32\vsnet\$(OutDir)" + AdditionalLibraryDirectories=""..\..\..\..\w32\vsnet\$(OutDir)"" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" Modified: freeswitch/branches/james/src/mod/endpoints/mod_dingaling/mod_dingaling.c ============================================================================== --- freeswitch/branches/james/src/mod/endpoints/mod_dingaling/mod_dingaling.c (original) +++ freeswitch/branches/james/src/mod/endpoints/mod_dingaling/mod_dingaling.c Sun Jun 18 11:09:41 2006 @@ -63,7 +63,8 @@ TFLAG_DO_DESC = (1 << 15), TFLAG_LANADDR = (1 << 16), TFLAG_AUTO = (1 << 17), - TFLAG_DTMF = (1 << 18) + TFLAG_DTMF = (1 << 18), + TFLAG_TIMER = ( 1 << 19) } TFLAGS; typedef enum { @@ -236,6 +237,7 @@ switch_channel_t *channel = switch_core_session_get_channel(tech_pvt->session); const char *err; int ms = 20; + switch_rtp_flag_t flags; if (tech_pvt->rtp_session) { return 0; @@ -246,12 +248,12 @@ } if (switch_core_codec_init(&tech_pvt->read_codec, - tech_pvt->codec_name, - 8000, - ms, - 1, - SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, - NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) { + tech_pvt->codec_name, + 8000, + ms, + 1, + SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, + NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Can't load codec?\n"); switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); return -1; @@ -260,14 +262,14 @@ tech_pvt->read_frame.codec = &tech_pvt->read_codec; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Set Read Codec to %s\n", tech_pvt->codec_name); - + if (switch_core_codec_init(&tech_pvt->write_codec, - tech_pvt->codec_name, - 8000, - ms, - 1, - SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, - NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) { + tech_pvt->codec_name, + 8000, + ms, + 1, + SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, + NULL, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Can't load codec?\n"); switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); return -1; @@ -279,17 +281,23 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SETUP RTP %s:%d -> %s:%d\n", tech_pvt->profile->ip, tech_pvt->local_port, tech_pvt->remote_ip, tech_pvt->remote_port); + + flags = SWITCH_RTP_FLAG_GOOGLEHACK | SWITCH_RTP_FLAG_AUTOADJ; + if (switch_test_flag(tech_pvt->profile, TFLAG_TIMER)) { + flags |= SWITCH_RTP_FLAG_USE_TIMER; + } + if (!(tech_pvt->rtp_session = switch_rtp_new(tech_pvt->profile->ip, - tech_pvt->local_port, - tech_pvt->remote_ip, - tech_pvt->remote_port, - tech_pvt->codec_num, - tech_pvt->read_codec.implementation->encoded_bytes_per_frame, - tech_pvt->read_codec.implementation->microseconds_per_frame, - SWITCH_RTP_FLAG_USE_TIMER | SWITCH_RTP_FLAG_AUTOADJ | SWITCH_RTP_FLAG_GOOGLEHACK, - NULL, - &err, switch_core_session_get_pool(tech_pvt->session)))) { + tech_pvt->local_port, + tech_pvt->remote_ip, + tech_pvt->remote_port, + tech_pvt->codec_num, + tech_pvt->read_codec.implementation->encoded_bytes_per_frame, + tech_pvt->read_codec.implementation->microseconds_per_frame, + flags, + NULL, + &err, switch_core_session_get_pool(tech_pvt->session)))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "RTP ERROR %s\n", err); switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); return -1; @@ -881,14 +889,14 @@ switch (msg->message_id) { case SWITCH_MESSAGE_INDICATE_BRIDGE: - if (tech_pvt->rtp_session) { + if (tech_pvt->rtp_session && switch_test_flag(tech_pvt->profile, TFLAG_TIMER)) { switch_rtp_clear_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_USE_TIMER); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "De-activate timed RTP!\n"); //switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_TIMER_RECLOCK); } break; case SWITCH_MESSAGE_INDICATE_UNBRIDGE: - if (tech_pvt->rtp_session) { + if (tech_pvt->rtp_session && switch_test_flag(tech_pvt->profile, TFLAG_TIMER)) { switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_USE_TIMER); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Re-activate timed RTP!\n"); //switch_rtp_clear_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_TIMER_RECLOCK); @@ -1188,6 +1196,8 @@ profile->login = switch_core_strdup(module_pool, val); } else if (!strcasecmp(var, "password")) { profile->password = switch_core_strdup(module_pool, val); + } else if (!strcasecmp(var, "use-rtp-timer") && switch_true(val)) { + switch_set_flag(profile, TFLAG_TIMER); } else if (!strcasecmp(var, "dialplan")) { profile->dialplan = switch_core_strdup(module_pool, val); } else if (!strcasecmp(var, "name")) { @@ -1225,6 +1235,12 @@ static switch_status_t dl_logout(char *profile_name, switch_stream_handle_t *stream) { struct mdl_profile *profile; + + if (!profile_name) { + stream->write_function(stream, "NO PROFILE NAME SPECIFIED\n"); + return SWITCH_STATUS_SUCCESS; + } + if ((profile = switch_core_hash_find(globals.profile_hash, profile_name))) { ldl_handle_stop(profile->handle); stream->write_function(stream, "OK\n"); @@ -1305,16 +1321,16 @@ if ((settings = switch_xml_child(cfg, "settings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcasecmp(var, "debug")) { globals.debug = atoi(val); - } else if (!strcasecmp(var, "codec_prefs")) { + } else if (!strcasecmp(var, "codec-prefs")) { set_global_codec_string(val); globals.codec_order_last = switch_separate_string(globals.codec_string, ',', globals.codec_order, SWITCH_MAX_CODECS); - } else if (!strcasecmp(var, "codec_rates")) { + } else if (!strcasecmp(var, "codec-rates")) { set_global_codec_rates_string(val); globals.codec_rates_last = switch_separate_string(globals.codec_rates_string, ',', globals.codec_rates, SWITCH_MAX_CODECS); @@ -1324,8 +1340,8 @@ for (xmlint = switch_xml_child(cfg, "interface"); xmlint; xmlint = xmlint->next) { for (param = switch_xml_child(xmlint, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); if (!globals.init) { ldl_global_init(globals.debug); @@ -1623,6 +1639,7 @@ ldl_session_get_id(dlsession), cid_name, cid_num, exten); if ((tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session), + profile->login, profile->dialplan, cid_name, cid_num, Modified: freeswitch/branches/james/src/mod/endpoints/mod_exosip/Makefile ============================================================================== --- freeswitch/branches/james/src/mod/endpoints/mod_exosip/Makefile (original) +++ freeswitch/branches/james/src/mod/endpoints/mod_exosip/Makefile Sun Jun 18 11:09:41 2006 @@ -11,8 +11,8 @@ depends: #MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install jrtplib --prefix=$(PREFIX) --disable-gst - MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install libosip2-2.2.2.tar.gz --prefix=$(PREFIX) - MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install libeXosip2-2.2.3-pre1.tar.gz --disable-josua --prefix=$(PREFIX) + MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install libosip2-2.2.3.tar.gz --prefix=$(PREFIX) + MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install libeXosip2-2.2.3.tar.gz --disable-josua --prefix=$(PREFIX) %.o: %.c Modified: freeswitch/branches/james/src/mod/endpoints/mod_exosip/mod_exosip.c ============================================================================== --- freeswitch/branches/james/src/mod/endpoints/mod_exosip/mod_exosip.c (original) +++ freeswitch/branches/james/src/mod/endpoints/mod_exosip/mod_exosip.c Sun Jun 18 11:09:41 2006 @@ -75,7 +75,9 @@ TFLAG_SECURE = (1 << 11), TFLAG_VAD_IN = ( 1 << 12), TFLAG_VAD_OUT = ( 1 << 13), - TFLAG_VAD = ( 1 << 14) + TFLAG_VAD = ( 1 << 14), + TFLAG_TIMER = ( 1 << 15), + TFLAG_AA = (1 << 16) } TFLAGS; @@ -108,6 +110,7 @@ unsigned int flags; switch_mutex_t *reg_mutex; switch_core_db_t *db; + switch_payload_t te; } globals; struct private_object { @@ -135,6 +138,9 @@ int ssrc; switch_time_t last_read; char *realm; + switch_codec_interface_t *codecs[SWITCH_MAX_CODECS]; + int num_codecs; + switch_payload_t te; }; @@ -166,12 +172,30 @@ static switch_status_t exosip_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id); static int config_exosip(int reload); -static switch_status_t parse_sdp_media(sdp_media_t * media, char **dname, char **drate, char **dpayload); +static switch_status_t parse_sdp_media(struct private_object *tech_pvt, sdp_media_t * media, char **dname, char **drate, char **dpayload); static switch_status_t exosip_kill_channel(switch_core_session_t *session, int sig); static switch_status_t activate_rtp(struct private_object *tech_pvt); static void deactivate_rtp(struct private_object *tech_pvt); -static void sdp_add_rfc2833(struct osip_rfc3264 *cnf, int rate); +static void tech_set_codecs(struct private_object *tech_pvt) +{ + if (tech_pvt->num_codecs) { + return; + } + + if (globals.codec_string) { + tech_pvt->num_codecs = switch_loadable_module_get_codecs_sorted(tech_pvt->codecs, + SWITCH_MAX_CODECS, + globals.codec_order, + globals.codec_order_last); + + } else { + tech_pvt->num_codecs = switch_loadable_module_get_codecs(switch_core_session_get_pool(tech_pvt->session), tech_pvt->codecs, + sizeof(tech_pvt->codecs) / sizeof(tech_pvt->codecs[0])); + } +} + + static struct private_object *get_pvt_by_call_id(int id) { char name[50]; @@ -254,8 +278,8 @@ char *dest_uri; char *ip, *err; switch_port_t sdp_port; - switch_codec_interface_t *codecs[SWITCH_MAX_CODECS]; - int num_codecs = 0; + char dbuf[256]; + /* do SIP Goodies... */ /* Decide on local IP and rtp port */ @@ -315,36 +339,33 @@ snprintf(port, sizeof(port), "%i", sdp_port); sdp_message_m_media_add(tech_pvt->local_sdp, "audio", port, NULL, "RTP/AVP"); /* Add in every codec we support on this outbound call */ - if (globals.codec_string) { - num_codecs = switch_loadable_module_get_codecs_sorted(codecs, - SWITCH_MAX_CODECS, - globals.codec_order, - globals.codec_order_last); - - } else { - num_codecs = - switch_loadable_module_get_codecs(switch_core_session_get_pool(session), codecs, - sizeof(codecs) / sizeof(codecs[0])); - } - + tech_set_codecs(tech_pvt); - if (num_codecs > 0) { + + sprintf(dbuf, "%u", tech_pvt->te); + sdp_message_m_payload_add(tech_pvt->local_sdp, 0, osip_strdup(dbuf)); + sdp_add_codec(tech_pvt->sdp_config, SWITCH_CODEC_TYPE_AUDIO, tech_pvt->te, "telephone-event", 8000, 0); + sprintf(dbuf, "%u telephone-event/8000", tech_pvt->te); + sdp_message_a_attribute_add(tech_pvt->local_sdp, 0, "rtpmap", osip_strdup(dbuf)); + + + if (tech_pvt->num_codecs > 0) { int i; static const switch_codec_implementation_t *imp; - for (i = 0; i < num_codecs; i++) { + for (i = 0; i < tech_pvt->num_codecs; i++) { int x = 0; - snprintf(tmp, sizeof(tmp), "%u", codecs[i]->ianacode); + snprintf(tmp, sizeof(tmp), "%u", tech_pvt->codecs[i]->ianacode); sdp_message_m_payload_add(tech_pvt->local_sdp, 0, osip_strdup(tmp)); - imp = codecs[i]->implementations; + imp = tech_pvt->codecs[i]->implementations; while(NULL != imp) { uint32_t sps = imp->samples_per_second; /* Add to SDP config */ - sdp_add_codec(tech_pvt->sdp_config, codecs[i]->codec_type, codecs[i]->ianacode, codecs[i]->iananame, sps, x++); + sdp_add_codec(tech_pvt->sdp_config, tech_pvt->codecs[i]->codec_type, tech_pvt->codecs[i]->ianacode, tech_pvt->codecs[i]->iananame, sps, x++); /* Add to SDP message */ - snprintf(tmp, sizeof(tmp), "%u %s/%d", codecs[i]->ianacode, codecs[i]->iananame, sps); + snprintf(tmp, sizeof(tmp), "%u %s/%d", tech_pvt->codecs[i]->ianacode, tech_pvt->codecs[i]->iananame, sps); sdp_message_a_attribute_add(tech_pvt->local_sdp, 0, "rtpmap", osip_strdup(tmp)); memset(tmp, 0, sizeof(tmp)); if (imp) { @@ -354,8 +375,8 @@ } } - sdp_add_rfc2833(tech_pvt->sdp_config, 8000); + /* Setup our INVITE */ eXosip_lock(); if ((dest_uri = @@ -367,9 +388,11 @@ eXosip_call_build_initial_invite(&invite, dest_uri, from_uri, NULL, NULL); osip_message_set_supported(invite, "100rel, replaces"); /* Add SDP to the INVITE */ + sdp_message_to_str(tech_pvt->local_sdp, &buf); osip_message_set_body(invite, buf, strlen(buf)); osip_message_set_content_type(invite, "application/sdp"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "OUTBOUND SDP:\n%s\n", buf); free(buf); /* Send the INVITE */ @@ -475,6 +498,7 @@ switch_channel_t *channel; const char *err; char *key = NULL; + switch_rtp_flag_t flags; assert(tech_pvt != NULL); @@ -511,17 +535,25 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "using Realm %s\n", tech_pvt->realm); } } + flags = SWITCH_RTP_FLAG_MINI | SWITCH_RTP_FLAG_RAW_WRITE; + if (switch_test_flag(tech_pvt, TFLAG_TIMER)) { + flags |= SWITCH_RTP_FLAG_USE_TIMER; + } + if (switch_test_flag(tech_pvt, TFLAG_AA)) { + flags |= SWITCH_RTP_FLAG_AUTOADJ; + } + tech_pvt->rtp_session = switch_rtp_new(tech_pvt->local_sdp_audio_ip, - tech_pvt->local_sdp_audio_port, - tech_pvt->remote_sdp_audio_ip, - tech_pvt->remote_sdp_audio_port, - tech_pvt->read_codec.codec_interface->ianacode, - tech_pvt->read_codec.implementation->encoded_bytes_per_frame, - ms, - SWITCH_RTP_FLAG_MINI | SWITCH_RTP_FLAG_USE_TIMER | SWITCH_RTP_FLAG_TIMER_RECLOCK | SWITCH_RTP_FLAG_RAW_WRITE, - key, - &err, switch_core_session_get_pool(tech_pvt->session)); + tech_pvt->local_sdp_audio_port, + tech_pvt->remote_sdp_audio_ip, + tech_pvt->remote_sdp_audio_port, + tech_pvt->read_codec.codec_interface->ianacode, + tech_pvt->read_codec.implementation->encoded_bytes_per_frame, + ms, + flags, + key, + &err, switch_core_session_get_pool(tech_pvt->session)); if (tech_pvt->rtp_session) { uint8_t vad_in = switch_test_flag(tech_pvt, TFLAG_VAD_IN) ? 1 : 0; @@ -530,7 +562,11 @@ tech_pvt->ssrc = switch_rtp_get_ssrc(tech_pvt->rtp_session); switch_set_flag(tech_pvt, TFLAG_RTP); - + + if (tech_pvt->te > 96) { + switch_rtp_set_telephony_event(tech_pvt->rtp_session, tech_pvt->te); + } + if ((vad_in && inb) || (vad_out && !inb)) { switch_rtp_enable_vad(tech_pvt->rtp_session, tech_pvt->session, &tech_pvt->read_codec, SWITCH_VAD_FLAG_TALKING); switch_set_flag(tech_pvt, TFLAG_VAD); @@ -819,51 +855,51 @@ switch (msg->message_id) { case SWITCH_MESSAGE_INDICATE_BRIDGE: - if (tech_pvt->rtp_session) { - switch_rtp_clear_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_USE_TIMER); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "De-activate timed RTP!\n"); - } - break; + if (tech_pvt->rtp_session && switch_test_flag(tech_pvt, TFLAG_TIMER)) { + switch_rtp_clear_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_USE_TIMER); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "De-activate timed RTP!\n"); + } + break; case SWITCH_MESSAGE_INDICATE_UNBRIDGE: - if (tech_pvt->rtp_session) { - switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_USE_TIMER); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Re-activate timed RTP!\n"); - } - break; + if (tech_pvt->rtp_session && switch_test_flag(tech_pvt, TFLAG_TIMER)) { + switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_USE_TIMER); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Re-activate timed RTP!\n"); + } + break; case SWITCH_MESSAGE_INDICATE_PROGRESS: - if (msg) { - struct private_object *tech_pvt; - switch_channel_t *channel = NULL; - - channel = switch_core_session_get_channel(session); - assert(channel != NULL); + if (msg) { + struct private_object *tech_pvt; + switch_channel_t *channel = NULL; + + channel = switch_core_session_get_channel(session); + assert(channel != NULL); - tech_pvt = switch_core_session_get_private(session); - assert(tech_pvt != NULL); + tech_pvt = switch_core_session_get_private(session); + assert(tech_pvt != NULL); - if (!switch_test_flag(tech_pvt, TFLAG_EARLY_MEDIA)) { - char *buf = NULL; - osip_message_t *progress = NULL; + if (!switch_test_flag(tech_pvt, TFLAG_EARLY_MEDIA)) { + char *buf = NULL; + osip_message_t *progress = NULL; - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Asked to send early media by %s\n", msg->from); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Asked to send early media by %s\n", msg->from); - /* Transmit 183 Progress with SDP */ - eXosip_lock(); - eXosip_call_build_answer(tech_pvt->tid, 183, &progress); - if (progress) { - sdp_message_to_str(tech_pvt->local_sdp, &buf); - osip_message_set_body(progress, buf, strlen(buf)); - osip_message_set_content_type(progress, "application/sdp"); - free(buf); - eXosip_call_send_answer(tech_pvt->tid, 183, progress); - switch_set_flag(tech_pvt, TFLAG_EARLY_MEDIA); - switch_channel_set_flag(channel, CF_EARLY_MEDIA); - } - eXosip_unlock(); - } - } + /* Transmit 183 Progress with SDP */ + eXosip_lock(); + eXosip_call_build_answer(tech_pvt->tid, 183, &progress); + if (progress) { + sdp_message_to_str(tech_pvt->local_sdp, &buf); + osip_message_set_body(progress, buf, strlen(buf)); + osip_message_set_content_type(progress, "application/sdp"); + free(buf); + eXosip_call_send_answer(tech_pvt->tid, 183, progress); + switch_set_flag(tech_pvt, TFLAG_EARLY_MEDIA); + switch_channel_set_flag(channel, CF_EARLY_MEDIA); + } + eXosip_unlock(); + } + } - break; + break; default: break; } @@ -995,6 +1031,7 @@ channel = switch_core_session_get_channel(*new_session); switch_core_session_set_private(*new_session, tech_pvt); tech_pvt->session = *new_session; + tech_pvt->te = globals.te; } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Hey where is my memory pool?\n"); switch_core_session_destroy(new_session); @@ -1097,26 +1134,6 @@ return SWITCH_STATUS_SUCCESS; } -static void sdp_add_rfc2833(struct osip_rfc3264 *cnf, int rate) -{ - sdp_media_t *med = NULL; - sdp_attribute_t *attr = NULL; - char tmp[128]; - - sdp_media_init(&med); - sdp_attribute_init(&attr); - attr->a_att_field = osip_strdup("rtpmap"); - snprintf(tmp, sizeof(tmp), "101 telephony-event/%d", rate); - attr->a_att_value = osip_strdup(tmp); - osip_list_add(med->a_attributes, attr, -1); - - - med->m_media = osip_strdup("telephony-event"); - osip_rfc3264_add_audio_media(cnf, med, -1); - -} - - static switch_status_t exosip_create_call(eXosip_event_t * event) { switch_core_session_t *session; @@ -1127,13 +1144,12 @@ int mline = 0, pos = 0; switch_channel_t *channel = NULL; char name[128]; - char *dpayload, *dname = NULL, *drate = NULL; + char *dpayload = NULL, *dname = NULL, *drate = NULL; char *remote_sdp_str = NULL; + char dbuf[256]; if ((session = switch_core_session_request(&exosip_endpoint_interface, NULL)) != 0) { struct private_object *tech_pvt; - switch_codec_interface_t *codecs[SWITCH_MAX_CODECS]; - int num_codecs = 0; switch_port_t sdp_port; char *ip, *err; osip_uri_t *uri; @@ -1149,6 +1165,7 @@ channel = switch_core_session_get_channel(session); switch_core_session_set_private(session, tech_pvt); tech_pvt->session = session; + tech_pvt->te = globals.te; } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Hey where is my memory pool?\n"); switch_core_session_destroy(&session); @@ -1169,7 +1186,7 @@ if (!(val = osip_from_get_displayname(from))) { val = event->request->from->url->username; if (!val) { - val = "n/a"; + val = "FreeSWITCH"; } } @@ -1191,6 +1208,7 @@ } if ((tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session), + username, globals.dialplan, displayname, username, @@ -1254,37 +1272,35 @@ } osip_rfc3264_init(&tech_pvt->sdp_config); /* Add in what codecs we support locally */ + tech_set_codecs(tech_pvt); + + sdp_message_init(&tech_pvt->local_sdp); + sprintf(dbuf, "%u", tech_pvt->te); + sdp_message_m_payload_add(tech_pvt->local_sdp, 0, osip_strdup(dbuf)); + sdp_add_codec(tech_pvt->sdp_config, SWITCH_CODEC_TYPE_AUDIO, tech_pvt->te, "telephone-event", 8000, 0); + sprintf(dbuf, "%u telephone-event/8000", tech_pvt->te); + sdp_message_a_attribute_add(tech_pvt->local_sdp, 0, "rtpmap", osip_strdup(dbuf)); - if (globals.codec_string) { - num_codecs = switch_loadable_module_get_codecs_sorted(codecs, - SWITCH_MAX_CODECS, - globals.codec_order, - globals.codec_order_last); - - } else { - num_codecs = switch_loadable_module_get_codecs(switch_core_session_get_pool(session), codecs, - sizeof(codecs) / sizeof(codecs[0])); - } - - if (num_codecs > 0) { + + if (tech_pvt->num_codecs > 0) { int i; static const switch_codec_implementation_t *imp; - for (i = 0; i < num_codecs; i++) { + for (i = 0; i < tech_pvt->num_codecs; i++) { int x = 0; - for (imp = codecs[i]->implementations; imp; imp = imp->next) { - sdp_add_codec(tech_pvt->sdp_config, codecs[i]->codec_type, codecs[i]->ianacode, codecs[i]->iananame, + for (imp = tech_pvt->codecs[i]->implementations; imp; imp = imp->next) { + sdp_add_codec(tech_pvt->sdp_config, tech_pvt->codecs[i]->codec_type, tech_pvt->codecs[i]->ianacode, tech_pvt->codecs[i]->iananame, imp->samples_per_second, x++); } } } - sdp_add_rfc2833(tech_pvt->sdp_config, 8000); + osip_rfc3264_prepare_answer(tech_pvt->sdp_config, remote_sdp, local_sdp_str, 8192); - sdp_message_init(&tech_pvt->local_sdp); + sdp_message_parse(tech_pvt->local_sdp, local_sdp_str); sdp_message_to_str(remote_sdp, &remote_sdp_str); @@ -1300,7 +1316,7 @@ for (pos = 0; audio_tab[pos] != NULL; pos++) { osip_rfc3264_complete_answer(tech_pvt->sdp_config, remote_sdp, tech_pvt->local_sdp, audio_tab[pos], mline); - if (parse_sdp_media(audio_tab[pos], &dname, &drate, &dpayload) == SWITCH_STATUS_SUCCESS) { + if (parse_sdp_media(tech_pvt, audio_tab[pos], &dname, &drate, &dpayload) == SWITCH_STATUS_SUCCESS) { tech_pvt->payload_num = atoi(dpayload); break; } @@ -1444,39 +1460,73 @@ } -static switch_status_t parse_sdp_media(sdp_media_t * media, char **dname, char **drate, char **dpayload) +static switch_status_t parse_sdp_media(struct private_object *tech_pvt, sdp_media_t * media, char **dname, char **drate, char **dpayload) { int pos = 0; sdp_attribute_t *attr = NULL; - char *name, *rate, *payload; + char *name, *payload, *rate; switch_status_t status = SWITCH_STATUS_GENERR; + char workspace[512]; while (osip_list_eol(media->a_attributes, pos) == 0) { attr = (sdp_attribute_t *) osip_list_get(media->a_attributes, pos); if (attr != NULL && strcasecmp(attr->a_att_field, "rtpmap") == 0) { - payload = attr->a_att_value; - if ((name = strchr(payload, ' ')) != 0) { - *(name++) = '\0'; - /* Name and payload are required */ - *dpayload = strdup(payload); - status = SWITCH_STATUS_SUCCESS; - if ((rate = strchr(name, '/')) != 0) { - *(rate++) = '\0'; - *drate = strdup(rate); - *dname = strdup(name); + switch_payload_t pt; + uint32_t r; + int32_t i; + uint8_t match = 0; + name = rate = payload = NULL; + + switch_copy_string(workspace, attr->a_att_value, sizeof(workspace)); + payload = workspace; + if ((name = strchr(workspace, ' ')) != 0) { + *(name++) = '\0'; + } + if ((rate = strchr(name, '/'))) { + *rate++ = '\0'; + } + pt = (switch_payload_t)atoi(payload); + r = atoi(rate); + + if (!strcasecmp(name, "telephone-event")) { + tech_pvt->te = pt; + attr = NULL; + pos++; + continue; + } + + for(i = 0; !match && i < tech_pvt->num_codecs; i++) { + const switch_codec_implementation_t *imp; + + if (pt < 97) { + match = (pt == tech_pvt->codecs[i]->ianacode) ? 1 : 0; } else { - *dname = strdup(name); - *drate = strdup("8000"); + match = strcasecmp(name, tech_pvt->codecs[i]->iananame) ? 0 : 1; } - } else { - *dpayload = strdup("10"); - *dname = strdup("L16"); - *drate = strdup("8000"); + + if (match) { + match = 0; + + for (imp = tech_pvt->codecs[i]->implementations; imp; imp = imp->next) { + if ((r == imp->samples_per_second)) { + match = 1; + break; + } + } + } } - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Found negotiated codec Payload: %s Name: %s Rate: %s\n", - *dpayload, *dname, *drate); - break; + + if (match) { + *dname = strdup(name); + *drate = strdup(rate); + *dpayload = strdup(payload); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Found negotiated codec Payload: %s Name: %s Rate: %s\n", + *dpayload, *dname, *drate); + break; + } + } + attr = NULL; pos++; } @@ -1525,8 +1575,11 @@ } - expires = get_header_value(je, "expires"); - exptime = time(NULL) + atoi(expires) + 20; + if ((expires = get_header_value(je, "expires"))) { + exptime = time(NULL) + atoi(expires) + 20; + } else { + exptime = time(NULL) + 3600; + } if (!find_reg_url(globals.db, je->request->from->url->username, sql, sizeof(sql))) { @@ -1608,7 +1661,7 @@ snprintf(tech_pvt->remote_sdp_audio_ip, 50, conn->c_addr); /* Grab codec elements */ - if (parse_sdp_media(remote_med, &dname, &drate, &dpayload) == SWITCH_STATUS_SUCCESS) { + if (parse_sdp_media(tech_pvt, remote_med, &dname, &drate, &dpayload) == SWITCH_STATUS_SUCCESS) { tech_pvt->payload_num = atoi(dpayload); } @@ -1877,16 +1930,23 @@ } globals.dtmf_duration = 100; + globals.te = 101; if ((settings = switch_xml_child(cfg, "settings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcmp(var, "debug")) { globals.debug = atoi(val); + } else if (!strcmp(var, "use-rtp-timer") && switch_true(val)) { + switch_set_flag(&globals, TFLAG_TIMER); + } else if (!strcmp(var, "use-rtp-auto-adjust") && switch_true(val)) { + switch_set_flag(&globals, TFLAG_AA); } else if (!strcmp(var, "port")) { globals.port = atoi(val); + } else if (!strcmp(var, "rfc2833-pt")) { + globals.te = (switch_payload_t) atoi(val); } else if (!strcmp(var, "vad")) { if (!strcasecmp(val, "in")) { switch_set_flag(&globals, TFLAG_VAD_IN); @@ -1912,12 +1972,12 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Add Realm [%s][%s]\n", name, val); switch_core_hash_insert(globals.srtp_hash, switch_core_strdup(module_pool, name), switch_core_strdup(module_pool, val)); } - } else if (!strcmp(var, "codec_prefs")) { + } else if (!strcmp(var, "codec-prefs")) { set_global_codec_string(val); globals.codec_order_last = switch_separate_string(globals.codec_string, ',', globals.codec_order, SWITCH_MAX_CODECS); - } else if (!strcmp(var, "codec_ms")) { + } else if (!strcmp(var, "codec-ms")) { globals.codec_ms = atoi(val); - } else if (!strcmp(var, "dtmf_duration")) { + } else if (!strcmp(var, "dtmf-duration")) { int dur = atoi(val); if (dur > 10 && dur < 8000) { globals.dtmf_duration = dur; Modified: freeswitch/branches/james/src/mod/endpoints/mod_iax/mod_iax.c ============================================================================== --- freeswitch/branches/james/src/mod/endpoints/mod_iax/mod_iax.c (original) +++ freeswitch/branches/james/src/mod/endpoints/mod_iax/mod_iax.c Sun Jun 18 11:09:41 2006 @@ -829,8 +829,8 @@ if ((settings = switch_xml_child(cfg, "settings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcmp(var, "debug")) { globals.debug = atoi(val); @@ -838,17 +838,17 @@ globals.port = atoi(val); } else if (!strcmp(var, "ip")) { set_global_ip(val); - } else if (!strcmp(var, "codec_master")) { + } else if (!strcmp(var, "codec-master")) { if (!strcasecmp(val, "us")) { switch_set_flag(&globals, GFLAG_MY_CODEC_PREFS); } } else if (!strcmp(var, "dialplan")) { set_global_dialplan(val); - } else if (!strcmp(var, "codec_prefs")) { + } else if (!strcmp(var, "codec-prefs")) { set_global_codec_string(val); globals.codec_order_last = switch_separate_string(globals.codec_string, ',', globals.codec_order, SWITCH_MAX_CODECS); - } else if (!strcmp(var, "codec_rates")) { + } else if (!strcmp(var, "codec-rates")) { set_global_codec_rates_string(val); globals.codec_rates_last = switch_separate_string(globals.codec_rates_string, ',', globals.codec_rates, SWITCH_MAX_CODECS); @@ -999,6 +999,7 @@ if ((tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session), + iaxevent->ies.username, globals.dialplan, iaxevent->ies.calling_name, iaxevent->ies.calling_number, @@ -1007,7 +1008,7 @@ NULL, NULL, (char *)modname, - NULL, + iaxevent->ies.called_context, iaxevent->ies.called_number)) != 0) { char name[128]; snprintf(name, sizeof(name), "IAX/%s-%04x", tech_pvt->caller_profile->destination_number, Modified: freeswitch/branches/james/src/mod/endpoints/mod_portaudio/mod_portaudio.c ============================================================================== --- freeswitch/branches/james/src/mod/endpoints/mod_portaudio/mod_portaudio.c (original) +++ freeswitch/branches/james/src/mod/endpoints/mod_portaudio/mod_portaudio.c Sun Jun 18 11:09:41 2006 @@ -409,7 +409,31 @@ return SWITCH_STATUS_SUCCESS; } +static switch_status_t channel_receive_message(switch_core_session_t *session, switch_core_session_message_t *msg) +{ + switch_channel_t *channel; + struct private_object *tech_pvt; + + channel = switch_core_session_get_channel(session); + assert(channel != NULL); + + tech_pvt = switch_core_session_get_private(session); + assert(tech_pvt != NULL); + + switch (msg->message_id) { + case SWITCH_MESSAGE_INDICATE_PROGRESS: + { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Engage Early Media\n"); + switch_set_flag(tech_pvt, TFLAG_IO); + } + default: + break; + } + return SWITCH_STATUS_SUCCESS; +} + + static switch_api_interface_t send_dtmf_interface = { /*.interface_name */ "padtmf", /*.desc */ "PortAudio Dial DTMF", @@ -462,7 +486,8 @@ /*.kill_channel */ channel_kill_channel, /*.waitfor_read */ channel_waitfor_read, /*.waitfor_write */ channel_waitfor_write, - /*.send_dtmf */ channel_send_dtmf + /*.send_dtmf */ channel_send_dtmf, + /*.receive_message*/ channel_receive_message }; static const switch_endpoint_interface_t channel_endpoint_interface = { @@ -578,18 +603,18 @@ if ((settings = switch_xml_child(cfg, "settings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcmp(var, "debug")) { globals.debug = atoi(val); - } else if (!strcmp(var, "sample_rate")) { + } else if (!strcmp(var, "sample-rate")) { globals.sample_rate = atoi(val); } else if (!strcmp(var, "dialplan")) { set_global_dialplan(val); - } else if (!strcmp(var, "cid_name")) { + } else if (!strcmp(var, "cid-name")) { set_global_cid_name(val); - } else if (!strcmp(var, "cid_num")) { + } else if (!strcmp(var, "cid-num")) { set_global_cid_num(val); } else if (!strcmp(var, "indev")) { if (*val == '#') { @@ -823,6 +848,7 @@ } if ((tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session), + NULL, globals.dialplan, globals.cid_name, globals.cid_num, NULL, NULL, NULL, NULL, (char *)modname, NULL, dest)) != 0) { @@ -860,7 +886,7 @@ void *val; int i = 0; - for (hi = apr_hash_first(module_pool, globals.call_hash); hi; hi = switch_hash_next(hi)) { + for (hi = switch_hash_first(module_pool, globals.call_hash); hi; hi = switch_hash_next(hi)) { switch_hash_this(hi, NULL, NULL, &val); tech_pvt = val; channel = switch_core_session_get_channel(tech_pvt->session); @@ -951,7 +977,7 @@ switch_hash_index_t *hi; void *val; if (!callid || !strcasecmp(callid, "all")) { - for (hi = apr_hash_first(module_pool, globals.call_hash); hi; hi = switch_hash_next(hi)) { + for (hi = switch_hash_first(module_pool, globals.call_hash); hi; hi = switch_hash_next(hi)) { switch_hash_this(hi, NULL, NULL, &val); tech_pvt = val; print_info(tech_pvt, stream); Modified: freeswitch/branches/james/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c ============================================================================== --- freeswitch/branches/james/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c (original) +++ freeswitch/branches/james/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c Sun Jun 18 11:09:41 2006 @@ -566,8 +566,8 @@ while (bytes > 0) { unsigned int towrite; -#if 0 - if (sangoma_socket_waitfor(tech_pvt->socket, -1, POLLOUT | POLLERR | POLLHUP) <= 0) { +#if 1 + if (sangoma_socket_waitfor(tech_pvt->socket, 1000, POLLOUT | POLLERR | POLLHUP) <= 0) { return SWITCH_STATUS_GENERR; } #endif @@ -577,11 +577,17 @@ #endif towrite = bytes >= globals.mtu ? globals.mtu : bytes; + if (towrite < globals.mtu) { + int diff = globals.mtu - towrite; + memset(bp + towrite, 0, diff); + towrite = globals.mtu; + } + result = sangoma_sendmsg_socket(tech_pvt->socket, &tech_pvt->hdrframe, sizeof(tech_pvt->hdrframe), bp, towrite, 0); if (result < 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "Bad Write frame len %u write %d bytes returned %d (%s)!\n", frame->datalen, + "Bad Write frame len %u write %d bytes returned %d (%s)!\n", towrite, globals.mtu, result, strerror(errno)); if (errno == EBUSY) { continue; @@ -1128,8 +1134,9 @@ } if ((tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session), + NULL, globals.dialplan, - "N/A", + "FreeSWITCH", event->ring.callingnum, event->ring.callingani, switch_strlen_zero(ani2str) ? NULL : ani2str, @@ -1302,18 +1309,18 @@ if ((settings = switch_xml_child(cfg, "settings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcmp(var, "debug")) { globals.debug = atoi(val); } else if (!strcmp(var, "mtu")) { globals.mtu = atoi(val); - } else if (!strcmp(var, "dtmf_on")) { + } else if (!strcmp(var, "dtmf-on")) { globals.dtmf_on = atoi(val); - } else if (!strcmp(var, "dtmf_off")) { + } else if (!strcmp(var, "dtmf-off")) { globals.dtmf_off = atoi(val); - } else if (!strcmp(var, "supress_dtmf_tone")) { + } else if (!strcmp(var, "supress-dtmf-tone")) { globals.supress_dtmf_tone = switch_true(val); } } @@ -1322,8 +1329,8 @@ for (span = switch_xml_child(cfg, "span"); span; span = span->next) { for (param = switch_xml_child(span, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcmp(var, "span")) { current_span = atoi(val); Modified: freeswitch/branches/james/src/mod/endpoints/mod_woomera/mod_woomera.c ============================================================================== --- freeswitch/branches/james/src/mod/endpoints/mod_woomera/mod_woomera.c (original) +++ freeswitch/branches/james/src/mod/endpoints/mod_woomera/mod_woomera.c Sun Jun 18 11:09:41 2006 @@ -1065,6 +1065,7 @@ ip = woomera_message_header(&wmsg, "Remote-Address"); if ((tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session), + NULL, tech_pvt->profile->dialplan, cid_name, cid_num, ip, NULL, NULL, NULL, (char *)modname, NULL, exten)) != 0) { char name[128]; @@ -1317,8 +1318,8 @@ if ((settings = switch_xml_child(cfg, "settings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcmp(var, "noload") && atoi(val)) { return SWITCH_STATUS_TERM; @@ -1331,8 +1332,8 @@ for (xmlp = switch_xml_child(cfg, "interface"); xmlp; xmlp = xmlp->next) { for (param = switch_xml_child(xmlp, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcmp(var, "audio_ip")) { strncpy(profile->audio_ip, val, sizeof(profile->audio_ip) - 1); } else if (!strcmp(var, "host")) { Modified: freeswitch/branches/james/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c ============================================================================== --- freeswitch/branches/james/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c (original) +++ freeswitch/branches/james/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c Sun Jun 18 11:09:41 2006 @@ -66,8 +66,8 @@ if ((settings = switch_xml_child(cfg, "settings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcasecmp(var, "address")) { set_global_address(val); Modified: freeswitch/branches/james/src/mod/event_handlers/mod_xmpp_event/mod_xmpp_event.c ============================================================================== --- freeswitch/branches/james/src/mod/event_handlers/mod_xmpp_event/mod_xmpp_event.c (original) +++ freeswitch/branches/james/src/mod/event_handlers/mod_xmpp_event/mod_xmpp_event.c Sun Jun 18 11:09:41 2006 @@ -111,13 +111,13 @@ if ((settings = switch_xml_child(cfg, "settings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcmp(var, "jid")) { set_global_jid(val); count++; - } else if (!strcmp(var, "target_jid")) { + } else if (!strcmp(var, "target-jid")) { set_global_target_jid(val); count++; } else if (!strcmp(var, "passwd")) { Modified: freeswitch/branches/james/src/mod/event_handlers/mod_zeroconf/mod_zeroconf.c ============================================================================== --- freeswitch/branches/james/src/mod/event_handlers/mod_zeroconf/mod_zeroconf.c (original) +++ freeswitch/branches/james/src/mod/event_handlers/mod_zeroconf/mod_zeroconf.c Sun Jun 18 11:09:41 2006 @@ -206,8 +206,8 @@ if ((settings = switch_xml_child(cfg, "settings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcmp(var, "browse")) { if ((oid = switch_core_alloc(module_pool, sizeof(*oid))) != 0) { Modified: freeswitch/branches/james/src/mod/languages/mod_perl/Makefile ============================================================================== --- freeswitch/branches/james/src/mod/languages/mod_perl/Makefile (original) +++ freeswitch/branches/james/src/mod/languages/mod_perl/Makefile Sun Jun 18 11:09:41 2006 @@ -23,7 +23,7 @@ reswig: rm switch_swig_wrap.c - swig -DMULTIPLICITY -perl5 -module fs_perl switch_swig.c + swig -lswitch_swig.i -ignoremissing -DMULTIPLICITY -perl5 -module fs_perl switch_swig.c switch_swig_wrap.o: switch_swig_wrap.c $(CC) -w $(CFLAGS) -c $< -o $@ Modified: freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig.c ============================================================================== --- freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig.c (original) +++ freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig.c Sun Jun 18 11:09:41 2006 @@ -18,12 +18,13 @@ int fs_core_init(char *path) { switch_status_t status; + const char *err = NULL; if (switch_strlen_zero(path)) { path = NULL; } - status = switch_core_init(path); + status = switch_core_init(path, &err); return status == SWITCH_STATUS_SUCCESS ? 1 : 0; } @@ -81,10 +82,10 @@ switch_channel_pre_answer(channel); } -void fs_channel_hangup(switch_core_session_t *session) +void fs_channel_hangup(switch_core_session_t *session, char *cause) { switch_channel_t *channel = switch_core_session_get_channel(session); - switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); + switch_channel_hangup(channel, switch_channel_str2cause(cause)); } void fs_channel_set_variable(switch_core_session_t *session, char *var, char *val) @@ -104,16 +105,17 @@ switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_state_t fs_state = switch_channel_get_state(channel); - if (!strcmp(state, "EXECUTE")) { - fs_state = CS_EXECUTE; - } else if (!strcmp(state, "TRANSMIT")) { - fs_state = CS_TRANSMIT; + if ((fs_state = switch_channel_name_state(state)) < CS_HANGUP) { + switch_channel_set_state(channel, fs_state); } - - switch_channel_set_state(channel, fs_state); } -int fs_ivr_play_file(switch_core_session_t *session, char *file, char *timer_name) +int fs_ivr_play_file(switch_core_session_t *session, + char *file, + char *timer_name, + switch_dtmf_callback_function_t dtmf_callback, + void *buf, + unsigned int buflen) { switch_status_t status; if (switch_strlen_zero(timer_name)) { Modified: freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig_wrap.c ============================================================================== --- freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig_wrap.c (original) +++ freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig_wrap.c Sun Jun 18 11:09:41 2006 @@ -991,9 +991,10 @@ /* -------- TYPES TABLE (BEGIN) -------- */ -#define SWIGTYPE_p_switch_core_session swig_types[0] -static swig_type_info *swig_types[2]; -static swig_module_info swig_module = {swig_types, 1, 0, 0, 0, 0}; +#define SWIGTYPE_p_switch_core_session_t swig_types[0] +#define SWIGTYPE_p_switch_dtmf_callback_function_t swig_types[1] +static swig_type_info *swig_types[3]; +static swig_module_info swig_module = {swig_types, 2, 0, 0, 0, 0}; #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) @@ -1017,6 +1018,9 @@ SWIGEXPORT void SWIG_init (CV *cv, CPerlObj *); #endif + +#include <switch.h> + #ifdef PERL_OBJECT #define MAGIC_CLASS _wrap_fs_perl_var:: class _wrap_fs_perl_var : public CPerlObj { @@ -1044,6 +1048,9 @@ int argvi = 0; dXSARGS; + if ((items < 0) || (items > 0)) { + SWIG_croak("Usage: fs_core_set_globals();"); + } fs_core_set_globals(); @@ -1085,6 +1092,9 @@ int argvi = 0; dXSARGS; + if ((items < 0) || (items > 0)) { + SWIG_croak("Usage: fs_core_destroy();"); + } result = (int)fs_core_destroy(); ST(argvi) = sv_newmortal(); @@ -1103,6 +1113,9 @@ int argvi = 0; dXSARGS; + if ((items < 0) || (items > 0)) { + SWIG_croak("Usage: fs_loadable_module_init();"); + } result = (int)fs_loadable_module_init(); ST(argvi) = sv_newmortal(); @@ -1121,6 +1134,9 @@ int argvi = 0; dXSARGS; + if ((items < 0) || (items > 0)) { + SWIG_croak("Usage: fs_loadable_module_shutdown();"); + } result = (int)fs_loadable_module_shutdown(); ST(argvi) = sv_newmortal(); @@ -1139,7 +1155,9 @@ int argvi = 0; dXSARGS; - + if ((items < 0) || (items > 0)) { + SWIG_croak("Usage: fs_console_loop();"); + } result = (int)fs_console_loop(); ST(argvi) = sv_newmortal(); @@ -1199,7 +1217,7 @@ XS(_wrap_fs_core_session_locate) { { char *arg1 = (char *) 0 ; - struct switch_core_session *result; + switch_core_session_t *result; int argvi = 0; dXSARGS; @@ -1208,10 +1226,10 @@ } if (!SvOK((SV*) ST(0))) arg1 = 0; else arg1 = (char *) SvPV(ST(0), PL_na); - result = (struct switch_core_session *)fs_core_session_locate(arg1); + result = (switch_core_session_t *)fs_core_session_locate(arg1); ST(argvi) = sv_newmortal(); - SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_switch_core_session, 0|0); + SWIG_MakePtr(ST(argvi++), (void *) result, SWIGTYPE_p_switch_core_session_t, 0|0); XSRETURN(argvi); fail: ; @@ -1222,7 +1240,7 @@ XS(_wrap_fs_channel_answer) { { - struct switch_core_session *arg1 = (struct switch_core_session *) 0 ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; int argvi = 0; dXSARGS; @@ -1230,8 +1248,8 @@ SWIG_croak("Usage: fs_channel_answer(session);"); } { - if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session,0) < 0) { - SWIG_croak("Type error in argument 1 of fs_channel_answer. Expected _p_switch_core_session"); + if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session_t,0) < 0) { + SWIG_croak("Type error in argument 1 of fs_channel_answer. Expected _p_switch_core_session_t"); } } fs_channel_answer(arg1); @@ -1247,7 +1265,7 @@ XS(_wrap_fs_channel_pre_answer) { { - struct switch_core_session *arg1 = (struct switch_core_session *) 0 ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; int argvi = 0; dXSARGS; @@ -1255,8 +1273,8 @@ SWIG_croak("Usage: fs_channel_pre_answer(session);"); } { - if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session,0) < 0) { - SWIG_croak("Type error in argument 1 of fs_channel_pre_answer. Expected _p_switch_core_session"); + if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session_t,0) < 0) { + SWIG_croak("Type error in argument 1 of fs_channel_pre_answer. Expected _p_switch_core_session_t"); } } fs_channel_pre_answer(arg1); @@ -1272,19 +1290,22 @@ XS(_wrap_fs_channel_hangup) { { - struct switch_core_session *arg1 = (struct switch_core_session *) 0 ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; int argvi = 0; dXSARGS; - if ((items < 1) || (items > 1)) { - SWIG_croak("Usage: fs_channel_hangup(session);"); + if ((items < 2) || (items > 2)) { + SWIG_croak("Usage: fs_channel_hangup(session,cause);"); } { - if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session,0) < 0) { - SWIG_croak("Type error in argument 1 of fs_channel_hangup. Expected _p_switch_core_session"); + if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session_t,0) < 0) { + SWIG_croak("Type error in argument 1 of fs_channel_hangup. Expected _p_switch_core_session_t"); } } - fs_channel_hangup(arg1); + if (!SvOK((SV*) ST(1))) arg2 = 0; + else arg2 = (char *) SvPV(ST(1), PL_na); + fs_channel_hangup(arg1,arg2); XSRETURN(argvi); @@ -1297,7 +1318,7 @@ XS(_wrap_fs_channel_set_variable) { { - struct switch_core_session *arg1 = (struct switch_core_session *) 0 ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; char *arg2 = (char *) 0 ; char *arg3 = (char *) 0 ; int argvi = 0; @@ -1307,8 +1328,8 @@ SWIG_croak("Usage: fs_channel_set_variable(session,var,val);"); } { - if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session,0) < 0) { - SWIG_croak("Type error in argument 1 of fs_channel_set_variable. Expected _p_switch_core_session"); + if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session_t,0) < 0) { + SWIG_croak("Type error in argument 1 of fs_channel_set_variable. Expected _p_switch_core_session_t"); } } if (!SvOK((SV*) ST(1))) arg2 = 0; @@ -1328,7 +1349,7 @@ XS(_wrap_fs_channel_get_variable) { { - struct switch_core_session *arg1 = (struct switch_core_session *) 0 ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; char *arg2 = (char *) 0 ; int argvi = 0; dXSARGS; @@ -1337,8 +1358,8 @@ SWIG_croak("Usage: fs_channel_get_variable(session,var);"); } { - if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session,0) < 0) { - SWIG_croak("Type error in argument 1 of fs_channel_get_variable. Expected _p_switch_core_session"); + if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session_t,0) < 0) { + SWIG_croak("Type error in argument 1 of fs_channel_get_variable. Expected _p_switch_core_session_t"); } } if (!SvOK((SV*) ST(1))) arg2 = 0; @@ -1356,7 +1377,7 @@ XS(_wrap_fs_channel_set_state) { { - struct switch_core_session *arg1 = (struct switch_core_session *) 0 ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; char *arg2 = (char *) 0 ; int argvi = 0; dXSARGS; @@ -1365,8 +1386,8 @@ SWIG_croak("Usage: fs_channel_set_state(session,state);"); } { - if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session,0) < 0) { - SWIG_croak("Type error in argument 1 of fs_channel_set_state. Expected _p_switch_core_session"); + if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session_t,0) < 0) { + SWIG_croak("Type error in argument 1 of fs_channel_set_state. Expected _p_switch_core_session_t"); } } if (!SvOK((SV*) ST(1))) arg2 = 0; @@ -1384,26 +1405,42 @@ XS(_wrap_fs_ivr_play_file) { { - struct switch_core_session *arg1 = (struct switch_core_session *) 0 ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; char *arg2 = (char *) 0 ; char *arg3 = (char *) 0 ; + switch_dtmf_callback_function_t arg4 ; + void *arg5 = (void *) 0 ; + unsigned int arg6 ; int result; int argvi = 0; dXSARGS; - if ((items < 3) || (items > 3)) { - SWIG_croak("Usage: fs_ivr_play_file(session,file,timer_name_in);"); + if ((items < 6) || (items > 6)) { + SWIG_croak("Usage: fs_ivr_play_file(session,file,timer_name,dtmf_callback,buf,buflen);"); } { - if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session,0) < 0) { - SWIG_croak("Type error in argument 1 of fs_ivr_play_file. Expected _p_switch_core_session"); + if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session_t,0) < 0) { + SWIG_croak("Type error in argument 1 of fs_ivr_play_file. Expected _p_switch_core_session_t"); } } if (!SvOK((SV*) ST(1))) arg2 = 0; else arg2 = (char *) SvPV(ST(1), PL_na); if (!SvOK((SV*) ST(2))) arg3 = 0; else arg3 = (char *) SvPV(ST(2), PL_na); - result = (int)fs_ivr_play_file(arg1,arg2,arg3); + { + switch_dtmf_callback_function_t * argp; + if (SWIG_ConvertPtr(ST(3),(void **) &argp, SWIGTYPE_p_switch_dtmf_callback_function_t,0) < 0) { + SWIG_croak("Type error in argument 4 of fs_ivr_play_file. Expected _p_switch_dtmf_callback_function_t"); + } + arg4 = *argp; + } + { + if (SWIG_ConvertPtr(ST(4), (void **) &arg5, 0,0) < 0) { + SWIG_croak("Type error in argument 5 of fs_ivr_play_file. Expected _p_void"); + } + } + arg6 = (unsigned int) SvUV(ST(5)); + result = (int)fs_ivr_play_file(arg1,arg2,arg3,arg4,arg5,arg6); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++), (IV) result); @@ -1418,16 +1455,20 @@ /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ -static swig_type_info _swigt__p_switch_core_session = {"_p_switch_core_session", "struct switch_core_session *", 0, 0, 0}; +static swig_type_info _swigt__p_switch_core_session_t = {"_p_switch_core_session_t", "switch_core_session_t *", 0, 0, 0}; +static swig_type_info _swigt__p_switch_dtmf_callback_function_t = {"_p_switch_dtmf_callback_function_t", "switch_dtmf_callback_function_t *", 0, 0, 0}; static swig_type_info *swig_type_initial[] = { - &_swigt__p_switch_core_session, + &_swigt__p_switch_core_session_t, + &_swigt__p_switch_dtmf_callback_function_t, }; -static swig_cast_info _swigc__p_switch_core_session[] = { {&_swigt__p_switch_core_session, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_core_session_t[] = { {&_swigt__p_switch_core_session_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_dtmf_callback_function_t[] = { {&_swigt__p_switch_dtmf_callback_function_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info *swig_cast_initial[] = { - _swigc__p_switch_core_session, + _swigc__p_switch_core_session_t, + _swigc__p_switch_dtmf_callback_function_t, }; Modified: freeswitch/branches/james/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c ============================================================================== --- freeswitch/branches/james/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c (original) +++ freeswitch/branches/james/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c Sun Jun 18 11:09:41 2006 @@ -559,9 +559,7 @@ char *buf; int digits; int32 timeout = 5000; - int32 poll_chan = 1; - if (argc > 0) { char term; digits = atoi(JS_GetStringBytes(JS_ValueToString(cx, argv[0]))); @@ -571,11 +569,9 @@ if (argc > 2) { JS_ValueToInt32(cx, argv[2], &timeout); } - if (argc > 3) { - JS_ValueToInt32(cx, argv[3], &poll_chan); - } + buf = switch_core_session_alloc(jss->session, digits); - switch_ivr_collect_digits_count(jss->session, buf, digits, digits, terminators, &term, timeout, poll_chan ? SWITCH_TRUE : SWITCH_FALSE); + switch_ivr_collect_digits_count(jss->session, buf, digits, digits, terminators, &term, timeout); *rval = STRING_TO_JSVAL ( JS_NewStringCopyZ(cx, buf) ); return JS_TRUE; } @@ -988,7 +984,7 @@ char *ani2 = ""; char *rdnis = ""; char *context = ""; - + char *username = NULL; *rval = BOOLEAN_TO_JSVAL( JS_FALSE ); if (JS_ValueToObject(cx, argv[0], &session_obj)) { @@ -1025,6 +1021,9 @@ if (argc > 10) { rdnis = JS_GetStringBytes(JS_ValueToString(cx, argv[10])); } + if (argc > 11) { + username = JS_GetStringBytes(JS_ValueToString(cx, argv[11])); + } if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) { @@ -1032,7 +1031,7 @@ return JS_FALSE; } - caller_profile = switch_caller_profile_new(pool, dialplan, cid_name, cid_num, network_addr, ani, ani2, rdnis, (char *)modname, context, dest); + caller_profile = switch_caller_profile_new(pool, username, dialplan, cid_name, cid_num, network_addr, ani, ani2, rdnis, (char *)modname, context, dest); if (switch_core_session_outgoing_channel(session, channel_type, caller_profile, &peer_session, pool) == SWITCH_STATUS_SUCCESS) { jss = switch_core_session_alloc(peer_session, sizeof(*jss)); jss->session = peer_session; @@ -2000,7 +1999,7 @@ if (code[0] == '/') { script = JS_CompileFile(cx, obj, code); } else { - snprintf(path, sizeof(path), "%s/%s", SWITCH_GLOBAL_dirs.script_dir, code); + snprintf(path, sizeof(path), "%s%s%s", SWITCH_GLOBAL_dirs.script_dir, SWITCH_PATH_SEPARATOR, code); script = JS_CompileFile(cx, obj, path); } } Modified: freeswitch/branches/james/src/mod/loggers/mod_console/mod_console.c ============================================================================== --- freeswitch/branches/james/src/mod/loggers/mod_console/mod_console.c (original) +++ freeswitch/branches/james/src/mod/loggers/mod_console/mod_console.c Sun Jun 18 11:09:41 2006 @@ -93,8 +93,8 @@ if ((settings = switch_xml_child(cfg, "mappings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); add_mapping(var, val); } Modified: freeswitch/branches/james/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c ============================================================================== --- freeswitch/branches/james/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c (original) +++ freeswitch/branches/james/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c Sun Jun 18 11:09:41 2006 @@ -50,10 +50,16 @@ uint8_t running; char *url; char *bindings; + char *realm; + char *user; + char *pass; } globals; SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_url, globals.url); SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_bindings, globals.bindings); +SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_realm, globals.realm); +SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_user, globals.user); +SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_pass, globals.pass); struct config_data { char *name; @@ -138,7 +144,9 @@ { char *cf = "xml_rpc.conf"; switch_xml_t cfg, xml, settings, param; - + char *realm, *user, *pass; + + realm = user = pass = NULL; if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf); return SWITCH_STATUS_TERM; @@ -146,14 +154,20 @@ if ((settings = switch_xml_child(cfg, "settings"))) { for (param = switch_xml_child(settings, "param"); param; param = param->next) { - char *var = (char *) switch_xml_attr(param, "name"); - char *val = (char *) switch_xml_attr(param, "value"); + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); - if (!strcasecmp(var, "gateway_url")) { - char *bindings = (char *) switch_xml_attr(param, "bindings"); + if (!strcasecmp(var, "auth-realm")) { + realm = val; + } else if (!strcasecmp(var, "auth-user")) { + user = val; + } else if (!strcasecmp(var, "auth-pass")) { + pass = val; + } else if (!strcasecmp(var, "gateway-url")) { + char *bindings = (char *) switch_xml_attr_soft(param, "bindings"); set_global_bindings(bindings); set_global_url(val); - } else if (!strcasecmp(var, "http_port")) { + } else if (!strcasecmp(var, "http-port")) { globals.port = (uint16_t)atoi(val); } } @@ -162,7 +176,11 @@ if (!globals.port) { globals.port = 8080; } - + if (user && pass && realm) { + set_global_realm(realm); + set_global_user(user); + set_global_pass(pass); + } switch_xml_free(xml); return globals.url ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE; @@ -214,12 +232,24 @@ return ret ? SWITCH_STATUS_FALSE : SWITCH_STATUS_SUCCESS; } + abyss_bool HandleHook(TSession *r) { char *m = "text/html"; switch_stream_handle_t stream = {0}; char *command; + stream.data = r; + stream.write_function = http_stream_write; + + if (globals.realm) { + if (!RequestAuth(r,globals.realm, globals.user, globals.pass)) { + return TRUE; + } + } + + + if(strncmp(r->uri, "/api/", 5)) { return FALSE; } @@ -242,8 +272,6 @@ ResponseStatus(r,200); ResponseContentType(r, m); ResponseWrite(r); - stream.data = r; - stream.write_function = http_stream_write; switch_api_execute(command, r->query, &stream); HTTPWriteEnd(r); return TRUE; @@ -295,7 +323,7 @@ MIMETypeInit(); MIMETypeAdd("text/html", "html"); - snprintf(logfile, sizeof(logfile), "%s/%s", SWITCH_GLOBAL_dirs.log_dir, "freeswitch_http.log"); + snprintf(logfile, sizeof(logfile), "%s%s%s", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR, "freeswitch_http.log"); ServerCreate(&abyssServer, "XmlRpcServer", globals.port, SWITCH_GLOBAL_dirs.htdocs_dir, logfile); xmlrpc_server_abyss_set_handler(&env, &abyssServer, "/RPC2", registryP); Modified: freeswitch/branches/james/src/switch.c ============================================================================== --- freeswitch/branches/james/src/switch.c (original) +++ freeswitch/branches/james/src/switch.c Sun Jun 18 11:09:41 2006 @@ -32,6 +32,9 @@ #include <switch.h> #include <switch_version.h> +#ifdef HAVE_MLOCKALL +#include <sys/mman.h> +#endif static int RUNNING = 0; @@ -70,7 +73,7 @@ char *pfile = "freeswitch.pid"; char path[256] = ""; char *ppath = NULL; - char *err = NULL; + const char *err = NULL; switch_event_t *event; int bg = 0; FILE *f; @@ -78,9 +81,13 @@ SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); #else int pid; - nice(-20); + //nice(-20); #endif +#ifdef HAVE_MLOCKALL + mlockall(MCL_CURRENT|MCL_FUTURE); +#endif + #ifndef WIN32 if (argv[1] && !strcmp(argv[1], "-stop")) { pid_t pid = 0; @@ -124,8 +131,8 @@ } - if (switch_core_init(ppath) != SWITCH_STATUS_SUCCESS) { - fprintf(stderr, "Cannot Initilize\n"); + if (switch_core_init(ppath, &err) != SWITCH_STATUS_SUCCESS) { + fprintf(stderr, "Cannot Initilize [%s]\n", err); return 255; } @@ -156,8 +163,6 @@ fprintf(f, "%d", getpid()); fclose(f); - - if (!err) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Bringing up environment.\n"); Modified: freeswitch/branches/james/src/switch_caller.c ============================================================================== --- freeswitch/branches/james/src/switch_caller.c (original) +++ freeswitch/branches/james/src/switch_caller.c Sun Jun 18 11:09:41 2006 @@ -33,16 +33,17 @@ #include <switch_caller.h> SWITCH_DECLARE(switch_caller_profile_t *) switch_caller_profile_new(switch_memory_pool_t *pool, - char *dialplan, - char *caller_id_name, - char *caller_id_number, - char *network_addr, - char *ani, - char *ani2, - char *rdnis, - char *source, - char *context, - char *destination_number) + char *username, + char *dialplan, + char *caller_id_name, + char *caller_id_number, + char *network_addr, + char *ani, + char *ani2, + char *rdnis, + char *source, + char *context, + char *destination_number) { @@ -52,6 +53,7 @@ if (!context) { context = "default"; } + profile->username = switch_core_strdup(pool, username); profile->dialplan = switch_core_strdup(pool, dialplan); profile->caller_id_name = switch_core_strdup(pool, caller_id_name); profile->caller_id_number = switch_core_strdup(pool, caller_id_number); @@ -73,6 +75,7 @@ { switch_caller_profile_t *profile = NULL; if ((profile = switch_core_session_alloc(session, sizeof(switch_caller_profile_t))) != 0) { + profile->username = switch_core_session_strdup(session, tocopy->username); profile->dialplan = switch_core_session_strdup(session, tocopy->dialplan); profile->caller_id_name = switch_core_session_strdup(session, tocopy->caller_id_name); profile->ani = switch_core_session_strdup(session, tocopy->ani); @@ -95,6 +98,9 @@ if (!strcasecmp(name, "dialplan")) { return caller_profile->dialplan; } + if (!strcasecmp(name, "username")) { + return caller_profile->username; + } if (!strcasecmp(name, "caller_id_name")) { return caller_profile->caller_id_name; } @@ -136,6 +142,11 @@ { char header_name[1024]; + + if (caller_profile->username) { + snprintf(header_name, sizeof(header_name), "%s-Username", prefix); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->username); + } if (caller_profile->dialplan) { snprintf(header_name, sizeof(header_name), "%s-Dialplan", prefix); switch_event_add_header(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->dialplan); Modified: freeswitch/branches/james/src/switch_channel.c ============================================================================== --- freeswitch/branches/james/src/switch_channel.c (original) +++ freeswitch/branches/james/src/switch_channel.c Sun Jun 18 11:09:41 2006 @@ -141,11 +141,13 @@ SWITCH_DECLARE(switch_call_cause_t) switch_channel_get_cause(switch_channel_t *channel) { + assert(channel != NULL); return channel->hangup_cause; } SWITCH_DECLARE(switch_channel_timetable_t *) switch_channel_get_timetable(switch_channel_t *channel) { + assert(channel != NULL); return channel->times; } @@ -289,9 +291,16 @@ SWITCH_DECLARE(char *) switch_channel_get_variable(switch_channel_t *channel, char *varname) { + assert(channel != NULL); return switch_core_hash_find(channel->variables, varname); } +SWITCH_DECLARE(switch_hash_index_t *) switch_channel_variable_first(switch_channel_t *channel, switch_memory_pool_t *pool) +{ + assert(channel != NULL); + return switch_hash_first(pool, channel->variables); +} + SWITCH_DECLARE(switch_status_t) switch_channel_set_private(switch_channel_t *channel, void *private_info) { assert(channel != NULL); @@ -336,16 +345,19 @@ SWITCH_DECLARE(int) switch_channel_test_flag(switch_channel_t *channel, switch_channel_flag_t flags) { + assert(channel != NULL); return switch_test_flag(channel, flags) ? 1 : 0; } SWITCH_DECLARE(void) switch_channel_set_flag(switch_channel_t *channel, switch_channel_flag_t flags) { + assert(channel != NULL); switch_set_flag(channel, flags); } SWITCH_DECLARE(void) switch_channel_clear_flag(switch_channel_t *channel, switch_channel_flag_t flags) { + assert(channel != NULL); switch_clear_flag(channel, flags); } @@ -370,7 +382,8 @@ "CS_LOOPBACK", "CS_HOLD", "CS_HANGUP", - "CS_DONE" + "CS_DONE", + NULL }; SWITCH_DECLARE(const char *) switch_channel_state_name(switch_channel_state_t state) @@ -378,6 +391,19 @@ return state_names[state]; } + +SWITCH_DECLARE(switch_channel_state_t) switch_channel_name_state(char *name) +{ + uint32_t x = 0; + for(x = 0; state_names[x]; x++) { + if (!strcasecmp(state_names[x], name)) { + return (switch_channel_state_t) x; + } + } + + return CS_DONE; +} + SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_set_state(switch_channel_t *channel, const char *file, const char *func, @@ -757,7 +783,11 @@ switch_caller_extension_t *caller_extension) { assert(channel != NULL); + + switch_mutex_lock(channel->profile_mutex); + caller_extension->next = channel->caller_extension; channel->caller_extension = caller_extension; + switch_mutex_unlock(channel->profile_mutex); } @@ -837,6 +867,10 @@ if (channel->state >= CS_HANGUP) { return SWITCH_STATUS_FALSE; + } + + if (switch_channel_test_flag(channel, CF_ANSWERED)) { + return SWITCH_STATUS_SUCCESS; } if (switch_core_session_answer_channel(channel->session) == SWITCH_STATUS_SUCCESS) { Modified: freeswitch/branches/james/src/switch_config.c ============================================================================== --- freeswitch/branches/james/src/switch_config.c (original) +++ freeswitch/branches/james/src/switch_config.c Sun Jun 18 11:09:41 2006 @@ -41,7 +41,7 @@ if (file_path[0] == '/') { path = file_path; } else { - snprintf(path_buf, sizeof(path_buf), "%s/%s", SWITCH_GLOBAL_dirs.conf_dir, file_path); + snprintf(path_buf, sizeof(path_buf), "%s%s%s", SWITCH_GLOBAL_dirs.conf_dir, SWITCH_PATH_SEPARATOR, file_path); path = path_buf; } @@ -57,7 +57,7 @@ int last = -1; char *var, *val; - snprintf(path_buf, sizeof(path_buf), "%s/freeswitch.conf", SWITCH_GLOBAL_dirs.conf_dir); + snprintf(path_buf, sizeof(path_buf), "%s%sfreeswitch.conf", SWITCH_GLOBAL_dirs.conf_dir, SWITCH_PATH_SEPARATOR); path = path_buf; if ((f = fopen(path, "r")) == 0) { Modified: freeswitch/branches/james/src/switch_console.c ============================================================================== --- freeswitch/branches/james/src/switch_console.c (original) +++ freeswitch/branches/james/src/switch_console.c Sun Jun 18 11:09:41 2006 @@ -198,7 +198,7 @@ } memset(&cmd, 0, sizeof(cmd)); - for (x = 0; x < sizeof(cmd); x++) { + for (x = 0; x < (sizeof(cmd)-1); x++) { cmd[x] = (char) getchar(); if (cmd[x] == '\n') { cmd[x] = '\0'; Modified: freeswitch/branches/james/src/switch_core.c ============================================================================== --- freeswitch/branches/james/src/switch_core.c (original) +++ freeswitch/branches/james/src/switch_core.c Sun Jun 18 11:09:41 2006 @@ -117,7 +117,7 @@ if (strchr(dbname, '/')) { strncpy(buf, dbname, size); } else { - snprintf(buf, size, "%s/%s.db", SWITCH_DB_DIR, dbname); + snprintf(buf, size, "%s%s%s.db", SWITCH_DB_DIR, SWITCH_PATH_SEPARATOR, dbname); } } @@ -565,11 +565,11 @@ } SWITCH_DECLARE(switch_status_t) switch_core_speech_open(switch_speech_handle_t *sh, - char *module_name, - char *voice_name, - unsigned int rate, - switch_speech_flag_t *flags, - switch_memory_pool_t *pool) + char *module_name, + char *voice_name, + unsigned int rate, + switch_speech_flag_t *flags, + switch_memory_pool_t *pool) { switch_status_t status; @@ -578,6 +578,7 @@ return SWITCH_STATUS_GENERR; } + switch_copy_string(sh->engine, module_name, sizeof(sh->engine)); sh->flags = *flags; if (pool) { sh->memory_pool = pool; @@ -587,7 +588,8 @@ } switch_set_flag(sh, SWITCH_SPEECH_FLAG_FREE_POOL); } - + sh->rate = rate; + sh->name = switch_core_strdup(pool, module_name); return sh->speech_interface->speech_open(sh, voice_name, rate, flags); } @@ -612,6 +614,42 @@ return sh->speech_interface->speech_feed_tts(sh, text, flags); } +SWITCH_DECLARE(void) switch_core_speech_flush_tts(switch_speech_handle_t *sh) +{ + assert(sh != NULL); + + if (sh->speech_interface->speech_flush_tts) { + sh->speech_interface->speech_flush_tts(sh); + } +} + +SWITCH_DECLARE(void) switch_core_speech_text_param_tts(switch_speech_handle_t *sh, char *param, char *val) +{ + assert(sh != NULL); + + if (sh->speech_interface->speech_text_param_tts) { + sh->speech_interface->speech_text_param_tts(sh, param, val); + } +} + +SWITCH_DECLARE(void) switch_core_speech_numeric_param_tts(switch_speech_handle_t *sh, char *param, int val) +{ + assert(sh != NULL); + + if (sh->speech_interface->speech_numeric_param_tts) { + sh->speech_interface->speech_numeric_param_tts(sh, param, val); + } +} + +SWITCH_DECLARE(void) switch_core_speech_float_param_tts(switch_speech_handle_t *sh, char *param, double val) +{ + assert(sh != NULL); + + if (sh->speech_interface->speech_float_param_tts) { + sh->speech_interface->speech_float_param_tts(sh, param, val); + } +} + SWITCH_DECLARE(switch_status_t) switch_core_speech_read_tts(switch_speech_handle_t *sh, void *data, switch_size_t *datalen, @@ -705,20 +743,20 @@ channel = switch_core_session_get_channel(session); assert(channel != NULL); + switch_channel_set_flag(channel, CF_SERVICE); while (data->running > 0) { switch (switch_core_session_read_frame(session, &read_frame, -1, stream_id)) { case SWITCH_STATUS_SUCCESS: - break; case SWITCH_STATUS_TIMEOUT: + case SWITCH_STATUS_BREAK: break; default: data->running = -1; continue; } - - switch_yield(10000); } + switch_channel_clear_flag(channel, CF_SERVICE); data->running = 0; return NULL; } @@ -1203,6 +1241,17 @@ return status; } +SWITCH_DECLARE(void) switch_core_session_reset(switch_core_session_t *session) +{ + /* sweep theese under the rug, they wont be leaked they will be reclaimed + when the session ends. + */ + session->raw_write_buffer = NULL; + session->raw_read_buffer = NULL; + session->read_resampler = NULL; + session->write_resampler = NULL; +} + SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, int stream_id) { @@ -1284,15 +1333,21 @@ if (session->write_resampler) { short *data = write_frame->data; - session->write_resampler->from_len = - switch_short_to_float(data, session->write_resampler->from, (int) write_frame->datalen / 2); + session->write_resampler->from_len = write_frame->datalen / 2; + switch_short_to_float(data, session->write_resampler->from, session->write_resampler->from_len); + + + session->write_resampler->to_len = (uint32_t) switch_resample_process(session->write_resampler, session->write_resampler->from, session->write_resampler->from_len, session->write_resampler->to, session->write_resampler->to_size, 0); - switch_float_to_short(session->write_resampler->to, data, write_frame->datalen * 2); + + + switch_float_to_short(session->write_resampler->to, data, session->write_resampler->to_len); + write_frame->samples = session->write_resampler->to_len; - write_frame->datalen = session->write_resampler->to_len * 2; + write_frame->datalen = write_frame->samples * 2; write_frame->rate = session->write_resampler->to_rate; } @@ -1308,20 +1363,20 @@ bytes, write_frame->datalen, session->write_codec->implementation->bytes_per_frame); if ((status = - switch_buffer_create(session->pool, &session->raw_write_buffer, - bytes)) != SWITCH_STATUS_SUCCESS) { + switch_buffer_create(session->pool, &session->raw_write_buffer, bytes)) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Write Buffer Failed!\n"); return status; } } + if (!(switch_buffer_write(session->raw_write_buffer, write_frame->data, write_frame->datalen))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Write Buffer %u bytes Failed!\n", write_frame->datalen); return SWITCH_STATUS_MEMERR; } } + if (perfect) { - enc_frame = write_frame; session->enc_write_frame.datalen = session->enc_write_frame.buflen; @@ -1333,7 +1388,7 @@ session->enc_write_frame.data, &session->enc_write_frame.datalen, &session->enc_write_frame.rate, &flag); - + switch (status) { case SWITCH_STATUS_RESAMPLE: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "fixme 2\n"); @@ -1357,14 +1412,15 @@ switch_size_t used = switch_buffer_inuse(session->raw_write_buffer); uint32_t bytes = session->write_codec->implementation->bytes_per_frame; switch_size_t frames = (used / bytes); - + status = SWITCH_STATUS_SUCCESS; - if (frames) { + if (!frames) { + return status; + } else { switch_size_t x; for (x = 0; x < frames; x++) { if ((session->raw_write_frame.datalen = (uint32_t) switch_buffer_read(session->raw_write_buffer, session->raw_write_frame.data, bytes)) != 0) { - enc_frame = &session->raw_write_frame; session->raw_write_frame.rate = session->write_codec->implementation->samples_per_second; session->enc_write_frame.datalen = session->enc_write_frame.buflen; @@ -1449,7 +1505,7 @@ switch_io_event_hook_kill_channel_t *ptr; switch_status_t status = SWITCH_STATUS_FALSE; - switch_log_printf(SWITCH_CHANNEL_ID_LOG, (char *) file, func, line, SWITCH_LOG_NOTICE, "Kill %s [%d]\n", switch_channel_get_name(session->channel), sig); + switch_log_printf(SWITCH_CHANNEL_ID_LOG, (char *) file, func, line, SWITCH_LOG_INFO, "Kill %s [%d]\n", switch_channel_get_name(session->channel), sig); if (session->endpoint_interface->io_routines->kill_channel) { if ((status = session->endpoint_interface->io_routines->kill_channel(session, sig)) == SWITCH_STATUS_SUCCESS) { @@ -1717,7 +1773,7 @@ assert(runtime.memory_pool != NULL); - if ((apr_pool_create(pool, runtime.memory_pool)) != SWITCH_STATUS_SUCCESS) { + if ((apr_pool_create(pool, NULL)) != SWITCH_STATUS_SUCCESS) { *pool = NULL; return SWITCH_STATUS_MEMERR; } @@ -2740,9 +2796,8 @@ #endif } -SWITCH_DECLARE(switch_status_t) switch_core_init(char *console) +SWITCH_DECLARE(switch_status_t) switch_core_init(char *console, const char **err) { - memset(&runtime, 0, sizeof(runtime)); switch_core_set_globals(); @@ -2750,29 +2805,34 @@ /* INIT APR and Create the pool context */ if (apr_initialize() != SWITCH_STATUS_SUCCESS) { apr_terminate(); - fprintf(stderr, "FATAL ERROR! Could not initilize APR\n"); + *err = "FATAL ERROR! Could not initilize APR\n"; return SWITCH_STATUS_MEMERR; } if (apr_pool_create(&runtime.memory_pool, NULL) != SWITCH_STATUS_SUCCESS) { - fprintf(stderr, "FATAL ERROR! Could not allocate memory pool\n"); - switch_core_destroy(); + apr_terminate(); + *err = "FATAL ERROR! Could not allocate memory pool\n"; return SWITCH_STATUS_MEMERR; } - if (switch_xml_init(runtime.memory_pool) != SWITCH_STATUS_SUCCESS) { - fprintf(stderr, "FATAL ERROR! Could not open XML Registry\n"); - switch_core_destroy(); + if (switch_xml_init(runtime.memory_pool, err) != SWITCH_STATUS_SUCCESS) { + apr_terminate(); return SWITCH_STATUS_MEMERR; } + *err = NULL; + if(console) { if (*console != '/') { char path[265]; snprintf(path, sizeof(path), "%s%s%s", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR, console); console = path; } - switch_core_set_console(console); + if (switch_core_set_console(console) != SWITCH_STATUS_SUCCESS) { + *err = "FATAL ERROR! Could not open console\n"; + apr_terminate(); + return SWITCH_STATUS_GENERR; + } } else { runtime.console = stdout; } Modified: freeswitch/branches/james/src/switch_event.c ============================================================================== --- freeswitch/branches/james/src/switch_event.c (original) +++ freeswitch/branches/james/src/switch_event.c Sun Jun 18 11:09:41 2006 @@ -40,7 +40,7 @@ //static switch_memory_pool_t *BPOOL = NULL; static switch_memory_pool_t *THRUNTIME_POOL = NULL; static switch_queue_t *EVENT_QUEUE[3] = {0,0,0}; -static int POOL_COUNT_MAX = 2000; +static int POOL_COUNT_MAX = SWITCH_CORE_QUEUE_LEN; static switch_hash_t *CUSTOM_HASH = NULL; static int THREAD_RUNNING = 0; Modified: freeswitch/branches/james/src/switch_ivr.c ============================================================================== --- freeswitch/branches/james/src/switch_ivr.c (original) +++ freeswitch/branches/james/src/switch_ivr.c Sun Jun 18 11:09:41 2006 @@ -63,7 +63,11 @@ break; } - status = switch_core_session_read_frame(session, &read_frame, -1, 0); + if (switch_channel_test_flag(channel, CF_SERVICE)) { + switch_yield(1000); + } else { + status = switch_core_session_read_frame(session, &read_frame, -1, 0); + } if (!SWITCH_READ_ACCEPTABLE(status)) { break; @@ -75,14 +79,12 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_collect_digits_count(switch_core_session_t *session, - char *buf, - unsigned int buflen, - unsigned int maxdigits, - const char *terminators, - char *terminator, - unsigned int timeout, - unsigned int poll_channel - ) + char *buf, + unsigned int buflen, + unsigned int maxdigits, + const char *terminators, + char *terminator, + unsigned int timeout) { unsigned int i = 0, x = (unsigned int) strlen(buf); switch_channel_t *channel; @@ -135,14 +137,14 @@ } } } - if (poll_channel) { + + if (switch_channel_test_flag(channel, CF_SERVICE)) { + switch_yield(1000); + } else { status = switch_core_session_read_frame(session, &read_frame, -1, 0); - if (!SWITCH_READ_ACCEPTABLE(status)) { break; } - } else { - switch_yield(1000); } } @@ -186,6 +188,7 @@ SWITCH_FILE_FLAG_WRITE | SWITCH_FILE_DATA_SHORT, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) { switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + switch_core_session_reset(session); return SWITCH_STATUS_GENERR; } @@ -206,6 +209,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Raw Codec Activation Failed %s@%uhz %u channels %dms\n", codec_name, fh->samplerate, fh->channels, read_codec->implementation->microseconds_per_frame / 1000); switch_core_file_close(fh); + switch_core_session_reset(session); return SWITCH_STATUS_GENERR; } @@ -245,7 +249,7 @@ switch_core_session_set_read_codec(session, read_codec); switch_core_file_close(fh); - + switch_core_session_reset(session); return status; } @@ -261,7 +265,7 @@ short abuf[960]; char dtmf[128]; uint32_t interval = 0, samples = 0; - uint32_t len = 0, ilen = 0; + uint32_t ilen = 0; switch_size_t olen = 0; switch_frame_t write_frame = {0}; switch_timer_t timer; @@ -286,8 +290,8 @@ file, SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) { - switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); - return SWITCH_STATUS_GENERR; + switch_core_session_reset(session); + return SWITCH_STATUS_NOTFOUND; } @@ -298,8 +302,8 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "OPEN FILE %s %uhz %u channels\n", file, fh->samplerate, fh->channels); interval = read_codec->implementation->microseconds_per_frame / 1000; - samples = read_codec->implementation->bytes_per_frame / 2; - len = samples * 2; + + codec_name = "L16"; if (switch_core_codec_init(&codec, @@ -315,14 +319,21 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Raw Codec Activation Failed %s@%uhz %u channels %dms\n", codec_name, fh->samplerate, fh->channels, interval); switch_core_file_close(fh); + switch_core_session_reset(session); return SWITCH_STATUS_GENERR; } + samples = codec.implementation->bytes_per_frame / 2; + if (timer_name) { + uint32_t len; + + len = samples * 2; if (switch_core_timer_init(&timer, timer_name, interval, samples, pool) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup timer failed!\n"); switch_core_codec_destroy(&codec); switch_core_file_close(fh); + switch_core_session_reset(session); return SWITCH_STATUS_GENERR; } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "setup timer success %u bytes per %d ms!\n", len, interval); @@ -437,8 +448,12 @@ #endif for (stream_id = 0; stream_id < switch_core_session_get_stream_count(session); stream_id++) { + status = switch_core_session_write_frame(session, &write_frame, -1, stream_id); - if (switch_core_session_write_frame(session, &write_frame, -1, stream_id) != SWITCH_STATUS_SUCCESS) { + if (status == SWITCH_STATUS_MORE_DATA) { + status = SWITCH_STATUS_SUCCESS; + continue; + } else if (status != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Bad Write\n"); done = 1; break; @@ -447,6 +462,7 @@ break; } } + if (timer_name) { if (switch_core_timer_next(&timer) < 0) { break; @@ -474,110 +490,63 @@ switch_core_timer_destroy(&timer); } + switch_core_session_reset(session); return status; } -SWITCH_DECLARE(switch_status_t) switch_ivr_speak_text(switch_core_session_t *session, - char *tts_name, - char *voice_name, - char *timer_name, - uint32_t rate, - switch_dtmf_callback_function_t dtmf_callback, - char *text, - void *buf, - unsigned int buflen) +SWITCH_DECLARE(switch_status_t) switch_ivr_speak_text_handle(switch_core_session_t *session, + switch_speech_handle_t *sh, + switch_codec_t *codec, + switch_timer_t *timer, + switch_dtmf_callback_function_t dtmf_callback, + char *text, + void *buf, + unsigned int buflen) { switch_channel_t *channel; short abuf[960]; char dtmf[128]; - int interval = 0; - uint32_t samples = 0; uint32_t len = 0; switch_size_t ilen = 0; switch_frame_t write_frame = {0}; - switch_timer_t timer; - switch_core_thread_session_t thread_session; - switch_codec_t codec; - switch_memory_pool_t *pool = switch_core_session_get_pool(session); - char *codec_name; int x; int stream_id; int done = 0; int lead_in_out = 10; - switch_status_t status = SWITCH_STATUS_SUCCESS; - switch_speech_handle_t sh; switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_TTS; + uint32_t rate = 0, samples = 0; - - memset(&sh, 0, sizeof(sh)); - channel = switch_core_session_get_channel(session); assert(channel != NULL); - if (switch_core_speech_open(&sh, - tts_name, - voice_name, - (unsigned int)rate, - &flags, - switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid TTS module!\n"); + if (!sh) { return SWITCH_STATUS_FALSE; } - + switch_channel_answer(channel); write_frame.data = abuf; write_frame.buflen = sizeof(abuf); + samples = (uint32_t)(sh->rate / 50); + len = samples * 2; - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "OPEN TTS %s\n", tts_name); - - interval = 20; - samples = (uint32_t)(rate / 50); - len = samples * 2; - - codec_name = "L16"; - - if (switch_core_codec_init(&codec, - codec_name, - (int)rate, - interval, - 1, - SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, - NULL, pool) == SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Raw Codec Activated\n"); - write_frame.codec = &codec; - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Raw Codec Activation Failed %s@%uhz 1 channel %dms\n", - codec_name, rate, interval); - flags = 0; - switch_core_speech_close(&sh, &flags); - return SWITCH_STATUS_GENERR; - } - - if (timer_name) { - if (switch_core_timer_init(&timer, timer_name, interval, (int)samples, pool) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup timer failed!\n"); - switch_core_codec_destroy(&codec); - flags = 0; - switch_core_speech_close(&sh, &flags); - return SWITCH_STATUS_GENERR; - } - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "setup timer success %u bytes per %d ms!\n", len, interval); - } - flags = 0; - switch_core_speech_feed_tts(&sh, text, &flags); - write_frame.rate = rate; + switch_sleep(200000); + switch_core_speech_feed_tts(sh, text, &flags); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Speaking text: %s\n", text); + write_frame.rate = sh->rate; + memset(write_frame.data, 0, len); write_frame.datalen = len; write_frame.samples = len / 2; - + write_frame.codec = codec; + for( x = 0; !done && x < lead_in_out; x++) { for (stream_id = 0; stream_id < switch_core_session_get_stream_count(session); stream_id++) { if (switch_core_session_write_frame(session, &write_frame, -1, stream_id) != SWITCH_STATUS_SUCCESS) { @@ -588,29 +557,25 @@ } } - if (timer_name) { - /* start a thread to absorb incoming audio */ - for (stream_id = 0; stream_id < switch_core_session_get_stream_count(session); stream_id++) { - switch_core_service_session(session, &thread_session, stream_id); - } - } - ilen = len; while(switch_channel_ready(channel)) { - if (dtmf_callback || buf) { - + if (dtmf_callback || buf) { /* dtmf handler function you can hook up to be executed when a digit is dialed during playback if you return anything but SWITCH_STATUS_SUCCESS the playback will stop. */ if (switch_channel_has_dtmf(channel)) { - switch_channel_dequeue_dtmf(channel, dtmf, sizeof(dtmf)); - if (dtmf_callback) { - status = dtmf_callback(session, dtmf, buf, buflen); - } else { - switch_copy_string((char *)buf, dtmf, buflen); + if (buf && !strcasecmp(buf, "_break_")) { status = SWITCH_STATUS_BREAK; + } else { + switch_channel_dequeue_dtmf(channel, dtmf, sizeof(dtmf)); + if (dtmf_callback) { + status = dtmf_callback(session, dtmf, buf, buflen); + } else { + switch_copy_string((char *)buf, dtmf, buflen); + status = SWITCH_STATUS_BREAK; + } } } @@ -619,9 +584,29 @@ break; } } + + if (switch_test_flag(sh, SWITCH_SPEECH_FLAG_PAUSE)) { + if (timer) { + if ((x = switch_core_timer_next(timer)) < 0) { + break; + } + } else { + switch_frame_t *read_frame; + switch_status_t status = switch_core_session_read_frame(session, &read_frame, -1, 0); + while (switch_channel_test_flag(channel, CF_HOLD)) { + switch_yield(10000); + } + + if (!SWITCH_READ_ACCEPTABLE(status)) { + break; + } + } + continue; + } + flags = SWITCH_SPEECH_FLAG_BLOCKING; - status = switch_core_speech_read_tts(&sh, + status = switch_core_speech_read_tts(sh, abuf, &ilen, &rate, @@ -637,10 +622,13 @@ } } } + if (status == SWITCH_STATUS_BREAK) { + status = SWITCH_STATUS_SUCCESS; + } done = 1; } - if (done || ilen <= 0) { + if (done) { break; } @@ -658,8 +646,9 @@ break; } } - if (timer_name) { - if ((x = switch_core_timer_next(&timer)) < 0) { + + if (timer) { + if ((x = switch_core_timer_next(timer)) < 0) { break; } } else { /* time off the channel (if you must) */ @@ -674,10 +663,106 @@ break; } } - } + } + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "done speaking text\n"); flags = 0; + switch_core_speech_flush_tts(sh); + return status; +} + + +SWITCH_DECLARE(switch_status_t) switch_ivr_speak_text(switch_core_session_t *session, + char *tts_name, + char *voice_name, + char *timer_name, + uint32_t rate, + switch_dtmf_callback_function_t dtmf_callback, + char *text, + void *buf, + unsigned int buflen) +{ + switch_channel_t *channel; + int interval = 0; + uint32_t samples = 0; + uint32_t len = 0; + switch_frame_t write_frame = {0}; + switch_timer_t timer; + switch_core_thread_session_t thread_session; + switch_codec_t codec; + switch_memory_pool_t *pool = switch_core_session_get_pool(session); + char *codec_name; + int stream_id; + switch_status_t status = SWITCH_STATUS_SUCCESS; + switch_speech_handle_t sh; + switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_TTS; + + + channel = switch_core_session_get_channel(session); + assert(channel != NULL); + + + memset(&sh, 0, sizeof(sh)); + if (switch_core_speech_open(&sh, + tts_name, + voice_name, + (unsigned int)rate, + &flags, + switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid TTS module!\n"); + switch_core_session_reset(session); + return SWITCH_STATUS_FALSE; + } + + switch_channel_answer(channel); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "OPEN TTS %s\n", tts_name); + + interval = 20; + samples = (uint32_t)(rate / 50); + len = samples * 2; + + codec_name = "L16"; + + if (switch_core_codec_init(&codec, + codec_name, + (int)rate, + interval, + 1, + SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, + NULL, pool) == SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Raw Codec Activated\n"); + write_frame.codec = &codec; + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Raw Codec Activation Failed %s@%uhz 1 channel %dms\n", + codec_name, rate, interval); + flags = 0; + switch_core_speech_close(&sh, &flags); + switch_core_session_reset(session); + return SWITCH_STATUS_GENERR; + } + + if (timer_name) { + if (switch_core_timer_init(&timer, timer_name, interval, (int)samples, pool) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup timer failed!\n"); + switch_core_codec_destroy(&codec); + flags = 0; + switch_core_speech_close(&sh, &flags); + + switch_core_session_reset(session); + return SWITCH_STATUS_GENERR; + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "setup timer success %u bytes per %d ms!\n", len, interval); + + /* start a thread to absorb incoming audio */ + for (stream_id = 0; stream_id < switch_core_session_get_stream_count(session); stream_id++) { + switch_core_service_session(session, &thread_session, stream_id); + } + } + + switch_ivr_speak_text_handle(session, &sh, &codec, timer_name ? &timer : NULL, dtmf_callback, text, buf, buflen); + flags = 0; switch_core_speech_close(&sh, &flags); switch_core_codec_destroy(&codec); @@ -687,6 +772,7 @@ switch_core_timer_destroy(&timer); } + switch_core_session_reset(session); return status; } Modified: freeswitch/branches/james/src/switch_loadable_module.c ============================================================================== --- freeswitch/branches/james/src/switch_loadable_module.c (original) +++ freeswitch/branches/james/src/switch_loadable_module.c Sun Jun 18 11:09:41 2006 @@ -476,7 +476,7 @@ if ((mods = switch_xml_child(cfg, "modules"))) { for (ld = switch_xml_child(mods, "load"); ld; ld = ld->next) { - const char *val = switch_xml_attr(ld, "module"); + const char *val = switch_xml_attr_soft(ld, "module"); if (strchr(val, '.') && !strstr(val, ext) && !strstr(val, EXT)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Invalid extension for %s\n", val); continue; @@ -496,7 +496,7 @@ if ((mods = switch_xml_child(cfg, "modules"))) { for (ld = switch_xml_child(mods, "load"); ld; ld = ld->next) { - const char *val = switch_xml_attr(ld, "module"); + const char *val = switch_xml_attr_soft(ld, "module"); if (strchr(val, '.') && !strstr(val, ext) && !strstr(val, EXT)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Invalid extension for %s\n", val); continue; Modified: freeswitch/branches/james/src/switch_log.c ============================================================================== --- freeswitch/branches/james/src/switch_log.c (original) +++ freeswitch/branches/james/src/switch_log.c Sun Jun 18 11:09:41 2006 @@ -263,7 +263,7 @@ switch_threadattr_detach_set(thd_attr, 1); - switch_queue_create(&LOG_QUEUE, 2000, LOG_POOL); + switch_queue_create(&LOG_QUEUE, SWITCH_CORE_QUEUE_LEN, LOG_POOL); switch_mutex_init(&BINDLOCK, SWITCH_MUTEX_NESTED, LOG_POOL); switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); switch_thread_create(&thread, thd_attr, log_thread, NULL, LOG_POOL); Modified: freeswitch/branches/james/src/switch_rtp.c ============================================================================== --- freeswitch/branches/james/src/switch_rtp.c (original) +++ freeswitch/branches/james/src/switch_rtp.c Sun Jun 18 11:09:41 2006 @@ -169,6 +169,7 @@ struct switch_rtp_vad_data vad_data; struct switch_rtp_rfc2833_data dtmf_data; uint8_t mini; + switch_payload_t te; }; static int global_init = 0; @@ -379,6 +380,7 @@ rtp_session->pool = pool; rtp_session->flags = flags; + rtp_session->te = 101; switch_mutex_init(&rtp_session->dtmf_data.dtmf_mutex, SWITCH_MUTEX_NESTED, rtp_session->pool); switch_buffer_create(rtp_session->pool, &rtp_session->dtmf_data.dtmf_buffer, 128); /* for from address on recvfrom calls */ @@ -473,16 +475,16 @@ } SWITCH_DECLARE(switch_rtp_t *)switch_rtp_new(char *rx_host, - switch_port_t rx_port, - char *tx_host, - switch_port_t tx_port, - switch_payload_t payload, - uint32_t packet_size, - uint32_t ms_per_packet, - switch_rtp_flag_t flags, - char *crypto_key, - const char **err, - switch_memory_pool_t *pool) + switch_port_t rx_port, + char *tx_host, + switch_port_t tx_port, + switch_payload_t payload, + uint32_t packet_size, + uint32_t ms_per_packet, + switch_rtp_flag_t flags, + char *crypto_key, + const char **err, + switch_memory_pool_t *pool) { switch_rtp_t *rtp_session; @@ -506,6 +508,12 @@ return rtp_session; } +SWITCH_DECLARE(void) switch_rtp_set_telephony_event(switch_rtp_t *rtp_session, switch_payload_t te) +{ + if (te > 96) { + rtp_session->te = te; + } +} SWITCH_DECLARE(switch_status_t) switch_rtp_activate_ice(switch_rtp_t *rtp_session, char *login, char *rlogin) { @@ -608,7 +616,7 @@ uint32_t samples = rtp_session->packet_size; if (rtp_session->dtmf_data.out_digit_dur > 0) { - int x, ts, loops = 1, duration; + int x, loops = 1, duration; rtp_session->dtmf_data.out_digit_sofar += samples; if (rtp_session->dtmf_data.out_digit_sofar >= rtp_session->dtmf_data.out_digit_dur) { @@ -620,19 +628,19 @@ duration = rtp_session->dtmf_data.out_digit_sofar; } - ts = rtp_session->dtmf_data.timestamp_dtmf += samples; + //ts = rtp_session->dtmf_data.timestamp_dtmf += samples; rtp_session->dtmf_data.out_digit_packet[2] = (unsigned char) (duration >> 8); rtp_session->dtmf_data.out_digit_packet[3] = (unsigned char) duration; for (x = 0; x < loops; x++) { switch_rtp_write_manual(rtp_session, - rtp_session->dtmf_data.out_digit_packet, 4, 0, 101, ts, - loops == 1 ? rtp_session->dtmf_data.out_digit_seq++ : rtp_session->dtmf_data.out_digit_seq, &flags); + rtp_session->dtmf_data.out_digit_packet, 4, 0, rtp_session->te, rtp_session->dtmf_data.timestamp_dtmf, + rtp_session->dtmf_data.out_digit_seq++, &flags); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Send %s packet for [%c] ts=%d sofar=%u dur=%d\n", loops == 1 ? "middle" : "end", rtp_session->dtmf_data.out_digit, - ts, + rtp_session->dtmf_data.timestamp_dtmf, rtp_session->dtmf_data.out_digit_sofar, duration); } @@ -642,7 +650,7 @@ void *pop; if (switch_queue_trypop(rtp_session->dtmf_data.dtmf_queue, &pop) == SWITCH_STATUS_SUCCESS) { - int x, ts; + int x; struct rfc2833_digit *rdigit = pop; memset(rtp_session->dtmf_data.out_digit_packet, 0, 4); @@ -652,22 +660,24 @@ rtp_session->dtmf_data.out_digit_packet[0] = (unsigned char)switch_char_to_rfc2833(rdigit->digit); rtp_session->dtmf_data.out_digit_packet[1] = 7; - ts = rtp_session->dtmf_data.timestamp_dtmf += samples; - rtp_session->dtmf_data.out_digit_seq++; + //ts = rtp_session->dtmf_data.timestamp_dtmf += samples; + rtp_session->dtmf_data.timestamp_dtmf++; + + for (x = 0; x < 3; x++) { switch_rtp_write_manual(rtp_session, rtp_session->dtmf_data.out_digit_packet, 4, 1, - 101, - ts, - rtp_session->dtmf_data.out_digit_seq, + rtp_session->te, + rtp_session->dtmf_data.timestamp_dtmf, + rtp_session->dtmf_data.out_digit_seq++, &flags); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Send start packet for [%c] ts=%d sofar=%u dur=%d\n", rtp_session->dtmf_data.out_digit, - ts, + rtp_session->dtmf_data.timestamp_dtmf, rtp_session->dtmf_data.out_digit_sofar, 0); } @@ -682,10 +692,10 @@ switch_size_t bytes; switch_status_t status; + for(;;) { bytes = sizeof(rtp_msg_t); status = switch_socket_recvfrom(rtp_session->from_addr, rtp_session->sock, 0, (void *)&rtp_session->recv_msg, &bytes); - if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BREAK)) { switch_clear_flag(rtp_session, SWITCH_RTP_FLAG_BREAK); @@ -777,19 +787,21 @@ if (rtp_session->recv_msg.header.version) { - if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_AUTOADJ) && rtp_session->from_addr->port && - (rtp_session->from_addr->port != rtp_session->remote_port)) { - const char *err; - char *tx_host; - uint32_t old = rtp_session->remote_port; - char *old_host; + if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_AUTOADJ) && rtp_session->from_addr->port) { + if ((rtp_session->from_addr->port != rtp_session->remote_port)) { + const char *err; + char *tx_host; + uint32_t old = rtp_session->remote_port; + char *old_host; - switch_sockaddr_ip_get(&tx_host, rtp_session->from_addr); - switch_sockaddr_ip_get(&old_host, rtp_session->remote_addr); - - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Auto Changing port from %s:%u to %s:%u\n", - old_host, old, tx_host, rtp_session->from_addr->port); - switch_rtp_set_remote_address(rtp_session, tx_host, rtp_session->from_addr->port, &err); + switch_sockaddr_ip_get(&tx_host, rtp_session->from_addr); + switch_sockaddr_ip_get(&old_host, rtp_session->remote_addr); + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Auto Changing port from %s:%u to %s:%u\n", + old_host, old, tx_host, rtp_session->from_addr->port); + switch_rtp_set_remote_address(rtp_session, tx_host, rtp_session->from_addr->port, &err); + } + switch_clear_flag(rtp_session, SWITCH_RTP_FLAG_AUTOADJ); } } @@ -811,7 +823,7 @@ } /* RFC2833 ... TBD try harder to honor the duration etc.*/ - if (rtp_session->recv_msg.header.pt == 101) { + if (rtp_session->recv_msg.header.pt == rtp_session->te) { unsigned char *packet = (unsigned char *) rtp_session->recv_msg.body; int end = packet[1]&0x80; int duration = (packet[2]<<8) + packet[3]; @@ -1313,7 +1325,7 @@ rtp_session->ts += ts; rtp_session->send_msg.header.seq = htons(mseq); - rtp_session->send_msg.header.ts = htonl(rtp_session->ts); + rtp_session->send_msg.header.ts = htonl(ts); return rtp_common_write(rtp_session, data, datalen, m, payload, flags); } Modified: freeswitch/branches/james/src/switch_xml.c ============================================================================== --- freeswitch/branches/james/src/switch_xml.c (original) +++ freeswitch/branches/james/src/switch_xml.c Sun Jun 18 11:09:41 2006 @@ -94,6 +94,7 @@ static switch_memory_pool_t *XML_MEMORY_POOL; static switch_mutex_t *XML_LOCK; static switch_thread_rwlock_t *RWLOCK; +static uint32_t lock_count = 0; struct xml_section_t { const char *name; @@ -192,6 +193,14 @@ return xml; } +// returns the value of the requested tag attribute or "" if not found +SWITCH_DECLARE(const char *) switch_xml_attr_soft(switch_xml_t xml, const char *attr) +{ + const char *ret = switch_xml_attr(xml, attr); + + return ret ? ret : ""; +} + // returns the value of the requested tag attribute or NULL if not found SWITCH_DECLARE(const char *) switch_xml_attr(switch_xml_t xml, const char *attr) { @@ -836,7 +845,7 @@ for(;;) { if (!xml) { - if (!(xml = MAIN_XML_ROOT)) { + if (!(xml = switch_xml_root())) { *node = NULL; *root = NULL; return SWITCH_STATUS_FALSE; @@ -862,17 +871,19 @@ return SWITCH_STATUS_FALSE; } + SWITCH_DECLARE(switch_xml_t) switch_xml_root(void) { + lock_count++; switch_thread_rwlock_rdlock(RWLOCK); return MAIN_XML_ROOT; } -SWITCH_DECLARE(switch_xml_t) switch_xml_open_root(uint8_t reload) +SWITCH_DECLARE(switch_xml_t) switch_xml_open_root(uint8_t reload, const char **err) { char path_buf[1024]; uint8_t hasmain = 0; - + switch_mutex_lock(XML_LOCK); if (MAIN_XML_ROOT) { @@ -889,9 +900,17 @@ switch_xml_free(xml); } - snprintf(path_buf, sizeof(path_buf), "%s/%s", SWITCH_GLOBAL_dirs.conf_dir, "freeswitch.xml"); + snprintf(path_buf, sizeof(path_buf), "%s%s%s", SWITCH_GLOBAL_dirs.conf_dir, SWITCH_PATH_SEPARATOR, "freeswitch.xml"); if ((MAIN_XML_ROOT = switch_xml_parse_file(path_buf))) { - switch_set_flag(MAIN_XML_ROOT, SWITCH_XML_ROOT); + *err = switch_xml_error(MAIN_XML_ROOT); + + if (!switch_strlen_zero(*err)) { + switch_xml_free(MAIN_XML_ROOT); + MAIN_XML_ROOT = NULL; + } else { + *err = "Success"; + switch_set_flag(MAIN_XML_ROOT, SWITCH_XML_ROOT); + } } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot Open XML Root!\n"); } @@ -900,20 +919,23 @@ switch_thread_rwlock_unlock(RWLOCK); } switch_mutex_unlock(XML_LOCK); + return switch_xml_root(); } -SWITCH_DECLARE(switch_status_t) switch_xml_init(switch_memory_pool_t *pool) +SWITCH_DECLARE(switch_status_t) switch_xml_init(switch_memory_pool_t *pool, const char **err) { switch_xml_t xml; XML_MEMORY_POOL = pool; + *err = "Success"; + switch_mutex_init(&XML_LOCK, SWITCH_MUTEX_NESTED, XML_MEMORY_POOL); switch_thread_rwlock_create(&RWLOCK, XML_MEMORY_POOL); assert(pool != NULL); - if((xml=switch_xml_open_root(FALSE))) { + if((xml=switch_xml_open_root(FALSE, err))) { switch_xml_free(xml); return SWITCH_STATUS_SUCCESS; } else { @@ -1083,7 +1105,10 @@ if (! xml ) return; if (switch_test_flag(xml, SWITCH_XML_ROOT)) { - switch_thread_rwlock_unlock(RWLOCK); + if (lock_count > 0) { + switch_thread_rwlock_unlock(RWLOCK); + lock_count--; + } } if (xml == MAIN_XML_ROOT) { Modified: freeswitch/branches/james/w32/vsnet/Freeswitch.sln ============================================================================== --- freeswitch/branches/james/w32/vsnet/Freeswitch.sln (original) +++ freeswitch/branches/james/w32/vsnet/Freeswitch.sln Sun Jun 18 11:09:41 2006 @@ -146,8 +146,8 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey", "..\..\src\mod\languages\mod_spidermonkey\mod_spidermonkey.vcproj", "{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}" ProjectSection(ProjectDependencies) = postProject - {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ASR-TTS", "ASR-TTS", "{4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0}" @@ -207,10 +207,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "XML Interfaces", "XML Interfaces", "{F69A4A6B-9360-4EBB-A280-22AA3C455AC5}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xml_rpc", "..\..\src\mod\xml_int\mod_xml_rpc\mod_xml_rpc.vcproj", "{CBEC7225-0C21-4DA8-978E-1F158F8AD950}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{99D6D74B-32A8-4441-A417-551B0E0A4510}" - ProjectSection(SolutionItems) = preProject - GetLibs.vbs = GetLibs.vbs +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_rss", "..\..\src\mod\applications\mod_rss\mod_rss.vcproj", "{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} EndProjectSection EndProject Global @@ -603,6 +608,10 @@ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Win32.Build.0 = Debug|Win32 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.ActiveCfg = Release|Win32 {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.Build.0 = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.ActiveCfg = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.Build.0 = Debug|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.ActiveCfg = Release|Win32 + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -624,6 +633,7 @@ {419AA391-5F3F-4BFE-A869-9D154D62A792} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {0E2C6395-13B9-46E5-9264-8859D346018D} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {30A5B29C-983E-4580-9FD0-D647CCDCC7EB} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} + {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {3A5B9131-F20C-4A85-9447-6C1610941CEE} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {5FD31A25-5D83-4794-8BEE-904DAD84CE71} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {FE3540C5-3303-46E0-A69E-D92F775687F1} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} Modified: freeswitch/branches/james/w32/vsnet/GetLibs.vbs ============================================================================== --- freeswitch/branches/james/w32/vsnet/GetLibs.vbs (original) +++ freeswitch/branches/james/w32/vsnet/GetLibs.vbs Sun Jun 18 11:09:41 2006 @@ -767,18 +767,23 @@ FSO.CopyFile Utilsdir & "pcre\pcre_chartables.c.vcproj", LibDestDir & "pcre\win32\", True FSO.CopyFile Utilsdir & "pcre\pcre.h", LibDestDir & "pcre\win32\", True FSO.CopyFile Utilsdir & "pcre\config.h", LibDestDir & "pcre\win32\", True + FSO.CopyFile Utilsdir & "pcre\pcre.h", LibDestDir & "include\", True End If If FSO.FolderExists(LibDestDir & "pcre") Then If BuildDebug Then - If Not FSO.FileExists(LibDestDir & "pcre\win32\Debug\libpcre.lib") Then + If Not FSO.FileExists(LibDestDir & "pcre\win32\Debug DLL\libpcre.lib") Then BuildViaVCBuild LibDestDir & "pcre\win32\pcre_chartables.c.vcproj", "Debug" - BuildViaVCBuild LibDestDir & "pcre\win32\libpcre.vcproj", "Debug" + BuildViaVCBuild LibDestDir & "pcre\win32\libpcre.vcproj", "Debug DLL" + FSO.CopyFile LibDestDir & "pcre\win32\Debug DLL\libpcre.lib", ScriptDir & "Debug\", True + FSO.CopyFile LibDestDir & "pcre\win32\Debug DLL\libpcre.dll", ScriptDir & "Debug\", True End If End If If BuildRelease Then - If Not FSO.FileExists(LibDestDir & "pcre\win32\Release\libpcre.lib") Then + If Not FSO.FileExists(LibDestDir & "pcre\win32\Release DLL\libpcre.lib") Then BuildViaVCBuild LibDestDir & "pcre\win32\pcre_chartables.c.vcproj", "Release" - BuildViaVCBuild LibDestDir & "pcre\win32\libpcre.vcproj", "Release" + BuildViaVCBuild LibDestDir & "pcre\win32\libpcre.vcproj", "Release DLL" + FSO.CopyFile LibDestDir & "pcre\win32\Release DLL\libpcre.lib", ScriptDir & "Release\", True + FSO.CopyFile LibDestDir & "pcre\win32\Release DLL\libpcre.dll", ScriptDir & "Release\", True End If End If Else Modified: freeswitch/branches/james/w32/vsnet/Tools/pcre/libpcre.vcproj ============================================================================== --- freeswitch/branches/james/w32/vsnet/Tools/pcre/libpcre.vcproj (original) +++ freeswitch/branches/james/w32/vsnet/Tools/pcre/libpcre.vcproj Sun Jun 18 11:09:41 2006 @@ -25,7 +25,6 @@ > <Tool Name="VCPreBuildEventTool" - Description="" CommandLine="" /> <Tool @@ -111,7 +110,6 @@ > <Tool Name="VCPreBuildEventTool" - Description="" CommandLine="" /> <Tool @@ -198,7 +196,6 @@ > <Tool Name="VCPreBuildEventTool" - Description="" CommandLine="" /> <Tool @@ -256,7 +253,7 @@ OutputFile="$(OutDir)\$(ProjectName).dll" LinkIncremental="2" SuppressStartupBanner="true" - ModuleDefinitionFile="" + ModuleDefinitionFile="$(InputDir)..\pcre.def" GenerateDebugInformation="true" ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb" ImportLibrary="$(OutDir)\$(ProjectName).lib" @@ -300,7 +297,6 @@ > <Tool Name="VCPreBuildEventTool" - Description="" CommandLine="" /> <Tool @@ -358,7 +354,7 @@ OutputFile="$(OutDir)\$(ProjectName).dll" LinkIncremental="1" SuppressStartupBanner="true" - ModuleDefinitionFile="" + ModuleDefinitionFile="$(InputDir)..\pcre.def" ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb" ImportLibrary="$(OutDir)\$(ProjectName).lib" TargetMachine="1"
participants (1)
-
jamesï¼ freeswitch.org