diff --git a/.router_version b/.router_version index e6f80bd..cd42f37 100644 --- a/.router_version +++ b/.router_version @@ -1 +1 @@ -wanpipe-3.5.18 +wanpipe-3.5.19 diff --git a/ChangeLog.3.5 b/ChangeLog.3.5 index 38d54d3..64f00ce 100644 --- a/ChangeLog.3.5 +++ b/ChangeLog.3.5 @@ -3,12 +3,36 @@ WANPIPE TDM VOICE - IP/WAN Package ------------------------------------------------------------------------------ Author: Nenad Corbic -Copyright (c) 1995-2010 Sangoma Technologies Inc. +Copyright (c) 1995-2011 Sangoma Technologies Inc. For more info visit: http://wiki.sangoma.com ------------------------------------------------------------------------------ +* Fri Mar 1 2011 Nenad Corbic - 3.5.19 +================================================================== + +- Fixed scripts for Ubuntu +- TDM API updated Tone Event API to include tone type + DTMF, FAX_1100, FAX_2100, FAX_2100_WSPR +- Fixes for latest 2.6.36 linux kernel +- Fixes for TTY Driver for 2.6.32 linux kernel +- BRI default idle set to 0xFF so it does not interfere + with multi-port mode. +- BRI NT & TE activation/deactivation logic update. +- Dahdi Yellow alarm reporting fix + Wanpipe driver did not report yellow alarms properly to dahdi +- T1 Automatic AIS on LOS option now optional + Previoulsy the T1 code enabled automatic AIS on LOS by default. + This is now an option TE_AIS_AUTO_ON_LOS=YES|NO + Default behaviour is to send Yellow alarm on link down. +- Fixed a TE1 startup race condition bug. + It was possible for T1/E1 interrupt to occour before + configuration was completel +- Fixed wanpipe.spec for dahdi RPM build +- Added serial clock recovery feature + + * Fri Nov 22 2010 Nenad Corbic - 3.5.18 ================================================================== diff --git a/Makefile b/Makefile index d9de5c7..0a3713e 100644 --- a/Makefile +++ b/Makefile @@ -124,7 +124,7 @@ else ifneq (,$(wildcard $(ZAPDIR)/kernel/zaptel.h)) ZAPDIR_PRIV=$(ZAPDIR) ENABLE_WANPIPEMON_ZAP=YES - DHADI_CFLAGS+= -DSTANDALONE_ZAPATA -DBUILDING_TONEZONE -I$(ZAPDIR)/kernel + DAHDI_CFLAGS+= -DSTANDALONE_ZAPATA -DBUILDING_TONEZONE -I$(ZAPDIR)/kernel ZAP_OPTS= --zaptel-path=$(ZAPDIR) ZAP_PROT=TDM PROTS=DEF-TDM @@ -165,39 +165,35 @@ else #This will check for zaptel, kenrel source and build utilites and kernel modules #within local directory structure -all: freetdm +all: freetdm -all_wan: cleanup_local _checkzap _checksrc all_bin_kmod all_util +all_wan: cleanup_local _checkzap _checksrc all_bin_kmod all_util all_lib -all_src_dahdi: cleanup_local _checkzap _checksrc all_kmod_dahdi all_util +all_src_dahdi: cleanup_local _checkzap _checksrc all_kmod_dahdi all_util all_lib -all_src: cleanup_local _checksrc all_kmod all_util +all_src: cleanup_local _checksrc all_kmod all_util all_lib -all_src_ss7: cleanup_local _checkzap _checksrc all_kmod_ss7 all_util +all_src_ss7: cleanup_local _checkzap _checksrc all_kmod_ss7 all_util all_lib dahdi: all_src_dahdi zaptel: dahdi -freetdm: all_src all_lib - @touch .all_lib .freetdm +freetdm: all_src + @touch .no_legacy_smg openzap:freetdm smg: freetdm fs: freetdm - -g3ti: all_src all_lib - @touch .all_lib .freetdm +g3ti: freetdm openzap_ss7: all_src_ss7 all_lib - @touch .all_lib tdmapi: all_src all_lib - @touch .all_lib cleanup_local: @rm -f .all* 2> /dev/null; - @rm -f .freetdm 2> /dev/null; + @rm -f .no_legacy_smg 2> /dev/null; @@ -231,8 +227,8 @@ clean: cleanup_local clean_util _cleanoldwanpipe $(MAKE) -C api SUBDIRS=$(WAN_DIR) clean @find patches/kdrivers -name '.*.cmd' | xargs rm -f @find . -name 'Module.symver*' | xargs rm -f - @if [ -e .freetdm ]; then \ - rm -f .freetdm; \ + @if [ -e .no_legacy_smg ]; then \ + rm -f .no_legacy_smg; \ fi @@ -315,7 +311,7 @@ _checkzap: @sleep 2; #Install all utilities etc and modules -install: install_util install_etc install_kmod install_inc +install: install_etc install_util install_kmod install_inc @if [ -e .all_lib ] ; then \ $(MAKE) -C api/libsangoma install DESTDIR=$(INSTALLPREFIX); \ $(MAKE) -C api/libstelephony install DESTDIR=$(INSTALLPREFIX); \ @@ -354,8 +350,8 @@ endif all_util: install_inc $(MAKE) -C util all EXTRA_FLAGS="$(EXTRA_UTIL_FLAGS)" SYSINC="$(PWD)/$(WINCLUDE) -I $(PWD)/api/libsangoma/include" CC=$(CC) \ PREFIX=$(INSTALLPREFIX) HOSTCFLAGS="$(EXTRA_UTIL_FLAGS)" ARCH=$(WARCH) - $(MAKE) -C util all_wancfg EXTRA_FLAGS="$(EXTRA_UTIL_FLAGS)" SYSINC="$(PWD)/$(WINCLUDE) -I$(PWD)/api/libsangoma/include" CC=$(CC) \ - PREFIX=$(INSTALLPREFIX) HOSTCFLAGS="$(EXTRA_UTIL_FLAGS)" HOSTCFLAGS="$(EXTRA_UTIL_FLAGS)" ARCH=$(WARCH) + $(MAKE) -C util all_wancfg EXTRA_FLAGS="$(EXTRA_UTIL_FLAGS)" SYSINC="$(PWD)/$(WINCLUDE) -I$(PWD)/api/libsangoma/include" CC=$(CC) \ + PREFIX=$(INSTALLPREFIX) HOSTCFLAGS="$(EXTRA_UTIL_FLAGS)" HOSTCFLAGS="$(EXTRA_UTIL_FLAGS)" ARCH=$(WARCH) 2> /dev/null all_lib: $(shell cd api/libsangoma; ./init-automake.sh >> $(PWD)/.cfg_log; ./configure --prefix=$(LIBPREFIX) >> $(PWD)/.cfg_log;) @@ -364,6 +360,7 @@ all_lib: $(shell cd api/libstelephony; ./init-automake.sh >> $(PWD)/.cfg_log; ./configure --prefix=$(LIBPREFIX) >> $(PWD)/.cfg_log;) $(MAKE) -C api/libstelephony clean $(MAKE) -C api/libstelephony all + @touch .all_lib install_lib: $(MAKE) -C api/libsangoma install DESTDIR=$(INSTALLPREFIX) @@ -387,7 +384,7 @@ install_bri: install_smgpri: $(MAKE) -C ssmg/sangoma_pri/ install SYSINC=$(PWD)/$(WINCLUDE) CC=$(CC) DESTDIR=$(INSTALLPREFIX) - @if [ ! -e .freetdm ]; then \ + @if [ ! -e .no_legacy_smg ]; then \ @echo "Installing Sangoma MGD"; \ $(MAKE) -C ssmg/sangoma_mgd.trunk/ install SYSINC=$(PWD)/$(WINCLUDE) CC=$(CC) PRI=YES DESTDIR=$(INSTALLPREFIX) ; \ fi @@ -412,6 +409,7 @@ install_pri_update: install_etc: @if [ ! -e $(INSTALLPREFIX)/etc/wanpipe ]; then \ mkdir -p $(INSTALLPREFIX)/etc/wanpipe; \ + mkdir -p $(INSTALLPREFIX)/etc/wanpipe/util; \ fi @if [ ! -e $(INSTALLPREFIX)/etc/wanpipe/wanrouter.rc ]; then \ install -D -m 644 samples/wanrouter.rc $(INSTALLPREFIX)/etc/wanpipe/wanrouter.rc; \ @@ -429,6 +427,9 @@ install_etc: mkdir -p $(INSTALLPREFIX)/etc/wanpipe/scripts; \ fi @\cp -rf wan_ec $(INSTALLPREFIX)/etc/wanpipe/ + @\cp -rf api $(INSTALLPREFIX)/etc/wanpipe/ + @\cp -rf util/wan_aftup $(INSTALLPREFIX)/etc/wanpipe/util/ + @\cp -rf util/wanec_apilib $(INSTALLPREFIX)/etc/wanpipe/util/ @install -D -m 755 samples/wanrouter $(INSTALLPREFIX)/usr/sbin/wanrouter @echo @echo "Wanpipe etc installed in $(INSTALLPREFIX)/etc/wanpipe"; diff --git a/Setup b/Setup index 69e3ecc..7707597 100755 --- a/Setup +++ b/Setup @@ -1456,7 +1456,7 @@ create_mataconf() # Select directory for the log file. if [ -d /var/log ]; then LOG_FILE=/var/log/$PROD - elif [ -d /var/adm wanpipe1]; then + elif [ -d /var/adm ]; then LOG_FILE=/var/adm/$PROD else LOG_FILE=/etc/wanpipe/$PROD.log @@ -1903,7 +1903,7 @@ WARNING: The Linux source in $SOURCEDIR has not been configured. wanpipe utilities (ex: make menuconfig and make dep)." echo pause - return 0 + #return 0 fi if [ ! -e $SOURCEDIR/include/linux/version.h ]; then @@ -1913,7 +1913,7 @@ WARNING: The Linux source in $SOURCEDIR has not been configured. wanpipe utilities (ex: make menuconfig and make dep)." echo pause - return 0 + #return 0 fi @@ -2157,7 +2157,6 @@ clean_up () [ -f "/etc/router.rc" ] && rm -f /etc/router.rc - eval "./patches/restore_wanrouter.sh" } get_distrib() @@ -7283,7 +7282,7 @@ KERNEL_UNAME=`uname -r` PKG_NAME=wanpipe DISTR_NAME="WANPIPE" PROD=wanrouter -PROD_VER=3.5.18 +PROD_VER=3.5.19 PROD_HOME=`pwd` META_CONF=$PROD_HOME/$PROD.rc WAN_INTR_DIR=$PROD_HOME/interfaces @@ -7545,11 +7544,6 @@ if [ "$setup_cmd" = "install_init" ]; then exit; fi -if [ "$setup_cmd" = "uninstall" ] || [ "$setup_cmd" = "remove" ]; then - remove; - uninstall_all - exit; -fi if [ "$setup_cmd" = "zaptel" ] || [ "$setup_cmd" = "dahdi" ] ; then zaptel_auto_install="YES" @@ -7835,7 +7829,7 @@ if [ "$PKG_NAME" != "wanpipe-lite" ]; then --arch*) ARCH=`echo $arg | cut -d'=' -f2`; - if [ $ARCH != "i686" ] && [ $ARCH != "i586" ] && [ $ARCH != "i486" ] && [ $ARCH != "i386" ] && [$ARCH !="x86_64" ]; then + if [ $ARCH != "i686" ] && [ $ARCH != "i586" ] && [ $ARCH != "i486" ] && [ $ARCH != "i386" ] && [ $ARCH != "x86_64" ]; then echo "Error: Invalid Architecture [i686|i586|i486|i386|x86_64]\n" exit 1; fi @@ -8231,6 +8225,13 @@ ENDOFTEXT fi +if [ "$setup_cmd" = "uninstall" ] || [ "$setup_cmd" = "remove" ]; then + remove; + uninstall_all + exit; +fi + + if [ "$setup_cmd" != "install" ] && [ "$setup_cmd" != "upgrade" ]; then usage exit 1 diff --git a/api/lib/hdlc/wanpipe_hdlc.h b/api/lib/hdlc/wanpipe_hdlc.h index 1cd09e8..b497e2f 100644 --- a/api/lib/hdlc/wanpipe_hdlc.h +++ b/api/lib/hdlc/wanpipe_hdlc.h @@ -8,7 +8,6 @@ #include #include #include -#include #if defined(__WINDOWS__) # define wan_inline __inline diff --git a/api/libsangoma/.svn/all-wcprops b/api/libsangoma/.svn/all-wcprops index 6066963..b3b086f 100644 --- a/api/libsangoma/.svn/all-wcprops +++ b/api/libsangoma/.svn/all-wcprops @@ -1,257 +1,257 @@ K 25 svn:wc:ra_dav:version-url -V 34 -/svn/libsangoma/!svn/ver/322/trunk +V 66 +/svn/libsangoma/!svn/ver/333/branches/unified_rlease_Win6.0_Lnx3.5 END init-automake.sh K 25 svn:wc:ra_dav:version-url -V 51 -/svn/libsangoma/!svn/ver/222/trunk/init-automake.sh +V 83 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/init-automake.sh END configure K 25 svn:wc:ra_dav:version-url -V 44 -/svn/libsangoma/!svn/ver/316/trunk/configure +V 76 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/configure END Makefile.in K 25 svn:wc:ra_dav:version-url -V 46 -/svn/libsangoma/!svn/ver/311/trunk/Makefile.in +V 78 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/Makefile.in END libsangoma_config.c K 25 svn:wc:ra_dav:version-url -V 54 -/svn/libsangoma/!svn/ver/314/trunk/libsangoma_config.c +V 86 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libsangoma_config.c END sources K 25 svn:wc:ra_dav:version-url -V 42 -/svn/libsangoma/!svn/ver/314/trunk/sources -END -AUTHORS -K 25 -svn:wc:ra_dav:version-url -V 40 -/svn/libsangoma/!svn/ver/1/trunk/AUTHORS +V 74 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sources END libhpsangoma_priv.c K 25 svn:wc:ra_dav:version-url -V 54 -/svn/libsangoma/!svn/ver/222/trunk/libhpsangoma_priv.c +V 86 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libhpsangoma_priv.c +END +AUTHORS +K 25 +svn:wc:ra_dav:version-url +V 74 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/AUTHORS END depcomp K 25 svn:wc:ra_dav:version-url -V 40 -/svn/libsangoma/!svn/ver/1/trunk/depcomp +V 74 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/depcomp END compile K 25 svn:wc:ra_dav:version-url -V 40 -/svn/libsangoma/!svn/ver/1/trunk/compile +V 74 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/compile END libhpsangoma_priv.h K 25 svn:wc:ra_dav:version-url -V 54 -/svn/libsangoma/!svn/ver/222/trunk/libhpsangoma_priv.h +V 86 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libhpsangoma_priv.h END libsangoma-doxygen.config K 25 svn:wc:ra_dav:version-url -V 60 -/svn/libsangoma/!svn/ver/135/trunk/libsangoma-doxygen.config -END -libsangoma.c -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/libsangoma/!svn/ver/322/trunk/libsangoma.c +V 92 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libsangoma-doxygen.config END compile.bat K 25 svn:wc:ra_dav:version-url -V 45 -/svn/libsangoma/!svn/ver/32/trunk/compile.bat +V 78 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/compile.bat +END +libsangoma.c +K 25 +svn:wc:ra_dav:version-url +V 79 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libsangoma.c END cleanup.sh K 25 svn:wc:ra_dav:version-url -V 45 -/svn/libsangoma/!svn/ver/244/trunk/cleanup.sh +V 77 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/cleanup.sh END libsangoma.h K 25 svn:wc:ra_dav:version-url -V 47 -/svn/libsangoma/!svn/ver/311/trunk/libsangoma.h +V 79 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libsangoma.h END libsangoma_hwec.c K 25 svn:wc:ra_dav:version-url -V 52 -/svn/libsangoma/!svn/ver/279/trunk/libsangoma_hwec.c +V 84 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libsangoma_hwec.c END g711.h K 25 svn:wc:ra_dav:version-url -V 41 -/svn/libsangoma/!svn/ver/222/trunk/g711.h +V 73 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/g711.h END INSTALL K 25 svn:wc:ra_dav:version-url -V 40 -/svn/libsangoma/!svn/ver/1/trunk/INSTALL +V 74 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/INSTALL END build.sh K 25 svn:wc:ra_dav:version-url -V 43 -/svn/libsangoma/!svn/ver/222/trunk/build.sh +V 75 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/build.sh END COPYING K 25 svn:wc:ra_dav:version-url -V 40 -/svn/libsangoma/!svn/ver/1/trunk/COPYING +V 74 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/COPYING END NEWS K 25 svn:wc:ra_dav:version-url -V 37 -/svn/libsangoma/!svn/ver/1/trunk/NEWS +V 71 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/NEWS END bootstrap K 25 svn:wc:ra_dav:version-url -V 44 -/svn/libsangoma/!svn/ver/199/trunk/bootstrap +V 76 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/bootstrap END libsangoma.rc K 25 svn:wc:ra_dav:version-url -V 48 -/svn/libsangoma/!svn/ver/146/trunk/libsangoma.rc -END -sangoma_pri.c -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/libsangoma/!svn/ver/222/trunk/sangoma_pri.c +V 80 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libsangoma.rc END libsangoma.so.conf K 25 svn:wc:ra_dav:version-url -V 51 -/svn/libsangoma/!svn/ver/1/trunk/libsangoma.so.conf +V 85 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libsangoma.so.conf +END +sangoma_pri.c +K 25 +svn:wc:ra_dav:version-url +V 80 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sangoma_pri.c END libhpsangoma-doxygen.config K 25 svn:wc:ra_dav:version-url -V 61 -/svn/libsangoma/!svn/ver/50/trunk/libhpsangoma-doxygen.config -END -sangoma_pri.h -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/libsangoma/!svn/ver/222/trunk/sangoma_pri.h +V 94 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libhpsangoma-doxygen.config END version K 25 svn:wc:ra_dav:version-url -V 40 -/svn/libsangoma/!svn/ver/1/trunk/version +V 74 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/version +END +sangoma_pri.h +K 25 +svn:wc:ra_dav:version-url +V 80 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sangoma_pri.h END libhpsangoma.c K 25 svn:wc:ra_dav:version-url -V 49 -/svn/libsangoma/!svn/ver/222/trunk/libhpsangoma.c +V 81 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libhpsangoma.c END configure.in K 25 svn:wc:ra_dav:version-url -V 47 -/svn/libsangoma/!svn/ver/316/trunk/configure.in +V 79 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/configure.in END ChangeLog K 25 svn:wc:ra_dav:version-url -V 42 -/svn/libsangoma/!svn/ver/1/trunk/ChangeLog +V 76 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/ChangeLog END libhpsangoma.h K 25 svn:wc:ra_dav:version-url -V 49 -/svn/libsangoma/!svn/ver/222/trunk/libhpsangoma.h +V 81 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libhpsangoma.h END README K 25 svn:wc:ra_dav:version-url -V 39 -/svn/libsangoma/!svn/ver/1/trunk/README +V 73 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/README END config.h.in K 25 svn:wc:ra_dav:version-url -V 46 -/svn/libsangoma/!svn/ver/222/trunk/config.h.in +V 78 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/config.h.in END libsangoma.sln K 25 svn:wc:ra_dav:version-url -V 49 -/svn/libsangoma/!svn/ver/235/trunk/libsangoma.sln -END -Makefile.am -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/libsangoma/!svn/ver/311/trunk/Makefile.am -END -missing -K 25 -svn:wc:ra_dav:version-url -V 40 -/svn/libsangoma/!svn/ver/1/trunk/missing -END -libsangoma.def -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/libsangoma/!svn/ver/322/trunk/libsangoma.def +V 81 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libsangoma.sln END libsangoma-pvt.h K 25 svn:wc:ra_dav:version-url -V 51 -/svn/libsangoma/!svn/ver/314/trunk/libsangoma-pvt.h +V 83 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libsangoma-pvt.h +END +libsangoma.def +K 25 +svn:wc:ra_dav:version-url +V 81 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libsangoma.def +END +Makefile.am +K 25 +svn:wc:ra_dav:version-url +V 78 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/Makefile.am +END +missing +K 25 +svn:wc:ra_dav:version-url +V 74 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/missing END libsangoma_utils.c K 25 svn:wc:ra_dav:version-url -V 53 -/svn/libsangoma/!svn/ver/307/trunk/libsangoma_utils.c -END -install-sh -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/libsangoma/!svn/ver/1/trunk/install-sh +V 85 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libsangoma_utils.c END libsangoma.vcproj K 25 svn:wc:ra_dav:version-url -V 52 -/svn/libsangoma/!svn/ver/322/trunk/libsangoma.vcproj +V 84 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/libsangoma.vcproj +END +install-sh +K 25 +svn:wc:ra_dav:version-url +V 77 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/install-sh END diff --git a/api/libsangoma/.svn/entries b/api/libsangoma/.svn/entries index 09df091..9eb74f6 100644 --- a/api/libsangoma/.svn/entries +++ b/api/libsangoma/.svn/entries @@ -1,14 +1,14 @@ 8 dir -322 -https://www.sangomapbx.com/svn/libsangoma/trunk -https://www.sangomapbx.com/svn/libsangoma +342 +http://192.168.1.168/svn/libsangoma/branches/unified_rlease_Win6.0_Lnx3.5 +http://192.168.1.168/svn/libsangoma -2010-11-11T19:01:32.713267Z -322 +2011-01-19T21:27:38.629735Z +333 davidr has-props @@ -32,7 +32,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 3accc8de43673675a4464508f1b14a6a 2009-08-12T18:36:20.606028Z 222 @@ -45,7 +45,7 @@ file -2010-10-08T20:01:04.000000Z +2011-01-28T17:40:50.000000Z 26519856dd60c05ce26bcad1c142f37c 2010-10-08T21:37:17.977975Z 316 @@ -58,7 +58,7 @@ file -2010-10-08T20:01:03.000000Z +2011-01-28T17:40:50.000000Z 5ae53af68fd79b1265e8dd17d417a0a1 2010-09-27T18:07:21.223585Z 311 @@ -70,7 +70,7 @@ file -2010-10-01T21:04:29.000000Z +2011-01-28T17:40:50.000000Z de99c99d999b3c9d39337397856a839f 2010-09-28T19:41:22.543877Z 314 @@ -85,73 +85,73 @@ file -2010-10-01T21:04:29.000000Z +2011-01-28T17:40:50.000000Z 84884475da0ed63ae785369108234305 2010-09-28T19:41:22.543877Z 314 davidr -AUTHORS -file - - - - -2009-08-25T20:44:41.000000Z -d41d8cd98f00b204e9800998ecf8427e -2008-02-28T18:51:53.196120Z -1 -root - libhpsangoma_priv.c file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 6311c0e89812fa88c9a1f2ef7784a3f3 2009-08-12T18:36:20.606028Z 222 ncorbic has-props +AUTHORS +file + + + + +2011-01-28T17:40:50.000000Z +d41d8cd98f00b204e9800998ecf8427e +2008-02-28T18:51:53.196120Z +1 +root + depcomp file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z e181e2c8720c60522c4c4c981108e367 2008-02-28T18:51:53.196120Z 1 root has-props -compile -file - - - - -2009-08-25T20:44:41.000000Z -a7ecc032b527a0d578545f19d3418073 -2008-02-28T18:51:53.196120Z -1 -root -has-props - docs dir +compile +file + + + + +2011-01-28T17:40:50.000000Z +a7ecc032b527a0d578545f19d3418073 +2008-02-28T18:51:53.196120Z +1 +root +has-props + libhpsangoma_priv.h file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 53f977038b3fb8b3a679e9fbd43e620e 2009-08-12T18:36:20.606028Z 222 @@ -164,44 +164,44 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z fd2f056fa00d98b918d141f218a000f8 2009-04-01T21:38:17.305658Z 135 ncorbic -compile.bat -file - - - - -2009-08-25T20:44:41.000000Z -5b82f62f87e4700af9b7e48c658b2cfc -2008-11-28T23:21:04.815499Z -32 -davidr - libsangoma.c file -2010-11-16T17:51:09.000000Z -559385f94244193b33ee08804b1025ec -2010-11-11T19:01:32.713267Z -322 +2011-01-28T17:40:50.000000Z +31ccff782c4a26dd5da47661a6d08573 +2011-01-06T17:30:24.762134Z +329 davidr has-props +compile.bat +file + + + + +2011-01-28T17:40:50.000000Z +5b82f62f87e4700af9b7e48c658b2cfc +2008-11-28T23:21:04.815499Z +32 +davidr + cleanup.sh file -2010-01-11T23:26:54.000000Z +2011-01-28T17:40:50.000000Z 692904ce7758fc035273cbe52fb10127 2010-01-12T01:27:55.842408Z 244 @@ -214,11 +214,11 @@ file -2010-09-27T20:07:44.000000Z -a411c1867d91f266792ae40429c57416 -2010-09-27T18:07:21.223585Z -311 -ncorbic +2011-01-28T17:40:50.000000Z +20fe03549343f6c4cc937be854da7328 +2011-01-06T17:30:24.762134Z +329 +davidr has-props libsangoma_hwec.c @@ -227,7 +227,7 @@ file -2010-06-04T16:18:07.000000Z +2011-01-28T17:40:50.000000Z 59eb5313edc41327b1bcef36b70bb9d4 2010-05-28T23:22:41.955986Z 279 @@ -239,7 +239,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 0f725f95ced42af15dcaef21f3a1722b 2009-08-12T18:36:20.606028Z 222 @@ -252,7 +252,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 40539bd3eff06e4b82f380103145415b 2008-02-28T18:51:53.196120Z 1 @@ -264,7 +264,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z f9109b55d1a9940209c4430121564f71 2009-08-12T18:36:20.606028Z 222 @@ -277,7 +277,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z d41d8cd98f00b204e9800998ecf8427e 2008-02-28T18:51:53.196120Z 1 @@ -289,7 +289,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z d41d8cd98f00b204e9800998ecf8427e 2008-02-28T18:51:53.196120Z 1 @@ -301,7 +301,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 9fb7603b06c96163344636bf36410d64 2009-06-26T19:39:04.828119Z 199 @@ -313,72 +313,59 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 5f46b82087b742e186dea4a23a18fc88 2009-04-22T20:41:57.677943Z 146 davidr -sangoma_pri.c -file - - - - -2009-08-25T20:44:41.000000Z -59210eaa3523ca8fdc605f5651fe2533 -2009-08-12T18:36:20.606028Z -222 -ncorbic -has-props - libsangoma.so.conf file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z bcdcb23c5d5fb460cee2ce315ef7bd32 2008-02-28T18:51:53.196120Z 1 root +sangoma_pri.c +file + + + + +2011-01-28T17:40:50.000000Z +59210eaa3523ca8fdc605f5651fe2533 +2009-08-12T18:36:20.606028Z +222 +ncorbic +has-props + +sample_c +dir + libhpsangoma-doxygen.config file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 85429a0c83986ff69262848d5a5d453f 2008-12-10T01:33:45.806759Z 50 ncorbic -sample_c -dir - -libhpsangoma.c -file - - - - -2009-08-25T20:44:41.000000Z -f487a2c347c2ff3e6633ea7022b649e3 -2009-08-12T18:36:20.606028Z -222 -ncorbic -has-props - sangoma_pri.h file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 7e23f30d22f5d2542866f5b9a81bcc80 2009-08-12T18:36:20.606028Z 222 @@ -391,19 +378,32 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 35f672d1fb01b542f667952c9dbb26fe 2008-02-28T18:51:53.196120Z 1 root +libhpsangoma.c +file + + + + +2011-01-28T17:40:50.000000Z +f487a2c347c2ff3e6633ea7022b649e3 +2009-08-12T18:36:20.606028Z +222 +ncorbic +has-props + configure.in file -2010-10-08T20:00:58.000000Z +2011-01-28T17:40:50.000000Z 75141da81ea6073c199e7ee14bafd972 2010-10-08T21:37:17.977975Z 316 @@ -415,7 +415,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z d41d8cd98f00b204e9800998ecf8427e 2008-02-28T18:51:53.196120Z 1 @@ -427,7 +427,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 9e95e25bbf705718d18c5c00cc7c8efe 2009-08-12T18:36:20.606028Z 222 @@ -440,7 +440,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z e8a0abce86211364eb60bbe6e07d4b05 2008-02-28T18:51:53.196120Z 1 @@ -452,7 +452,7 @@ file -2010-10-08T20:01:10.000000Z +2011-01-28T17:40:50.000000Z 1a4d975497bfcde75e3cbf4a54f1d72e 2009-08-12T18:36:20.606028Z 222 @@ -464,69 +464,69 @@ file -2009-12-04T21:21:35.000000Z +2011-01-28T17:40:50.000000Z fe647b1212e15d68672bbc21737980b8 2009-12-01T20:38:57.462038Z 235 davidr -missing -file - - - - -2009-08-25T20:44:41.000000Z -fd5dd60aa8cefab9462677280ea74a61 -2008-02-28T18:51:53.196120Z -1 -root -has-props - -Makefile.am -file - - - - -2010-09-27T20:07:44.000000Z -1bbbf5b7de6b78b3533af596815351ba -2010-09-27T18:07:21.223585Z -311 -ncorbic - -libsangoma.def -file - - - - -2010-11-16T17:51:09.000000Z -3af0e52d20c13e18c41c19abb41138a3 -2010-11-11T19:01:32.713267Z -322 -davidr - libsangoma-pvt.h file -2010-10-01T21:04:29.000000Z -40bd58c5c94df8e3af7cb755afda81c5 -2010-09-28T19:41:22.543877Z -314 +2011-01-28T17:40:50.000000Z +c165482dbdeef534dc6baa6b719cb50d +2011-01-06T17:30:24.762134Z +329 davidr has-props +libsangoma.def +file + + + + +2011-01-28T17:40:50.000000Z +3af0e52d20c13e18c41c19abb41138a3 +2010-11-11T19:01:32.713267Z +322 +davidr + +Makefile.am +file + + + + +2011-01-28T17:40:50.000000Z +1bbbf5b7de6b78b3533af596815351ba +2010-09-27T18:07:21.223585Z +311 +ncorbic + +missing +file + + + + +2011-01-28T17:40:50.000000Z +fd5dd60aa8cefab9462677280ea74a61 +2008-02-28T18:51:53.196120Z +1 +root +has-props + libsangoma_utils.c file -2010-08-19T22:39:57.000000Z +2011-01-28T17:40:50.000000Z 4e6cc58c45255d7146cfd349385a7f51 2010-08-18T18:12:26.768369Z 307 @@ -535,28 +535,28 @@ jpatel examples dir -install-sh -file - - - - -2009-08-25T20:44:41.000000Z -92067666ddce97609bd0ec67d36460cd -2008-02-28T18:51:53.196120Z -1 -root -has-props - libsangoma.vcproj file -2010-11-16T17:51:09.000000Z -f4e0fca1a12c0420233dbf18b29034fc -2010-11-11T19:01:32.713267Z -322 +2011-01-28T17:40:50.000000Z +c914564e42c778d099839a48c17a317b +2010-12-17T23:39:12.255685Z +327 davidr +install-sh +file + + + + +2011-01-28T17:40:50.000000Z +92067666ddce97609bd0ec67d36460cd +2008-02-28T18:51:53.196120Z +1 +root +has-props + diff --git a/api/libsangoma/.svn/text-base/libsangoma-pvt.h.svn-base b/api/libsangoma/.svn/text-base/libsangoma-pvt.h.svn-base index 0f03d30..5366ae9 100644 --- a/api/libsangoma/.svn/text-base/libsangoma-pvt.h.svn-base +++ b/api/libsangoma/.svn/text-base/libsangoma-pvt.h.svn-base @@ -147,7 +147,6 @@ extern int libsng_dbg_level; #define DBG_INIT if(libsng_dbg_level)libsng_dbg /**** Prototypes of Function used internally by libsangoma ****/ -sng_fd_t sangoma_open_dev_by_name(const char *dev_name); #if defined(__WINDOWS__) int UdpManagementCommand(sng_fd_t fd, wan_udp_hdr_t* wan_udp); LONG registry_set_integer_value(HKEY hkey, LPTSTR szKeyname, IN int iValue); diff --git a/api/libsangoma/.svn/text-base/libsangoma.c.svn-base b/api/libsangoma/.svn/text-base/libsangoma.c.svn-base index a872025..e8e23b6 100644 --- a/api/libsangoma/.svn/text-base/libsangoma.c.svn-base +++ b/api/libsangoma/.svn/text-base/libsangoma.c.svn-base @@ -1702,7 +1702,7 @@ sng_fd_t _LIBSNG_CALL sangoma_open_api_span_chan(int span, int chan) return fd; } -sng_fd_t sangoma_open_dev_by_name(const char *dev_name) +sng_fd_t _LIBSNG_CALL sangoma_open_dev_by_name(const char *dev_name) { char fname[FNAME_LEN]; diff --git a/api/libsangoma/.svn/text-base/libsangoma.h.svn-base b/api/libsangoma/.svn/text-base/libsangoma.h.svn-base index eb31c7c..d45928b 100644 --- a/api/libsangoma/.svn/text-base/libsangoma.h.svn-base +++ b/api/libsangoma/.svn/text-base/libsangoma.h.svn-base @@ -37,8 +37,8 @@ * sangoma_get_cpld_version functions,sangoma_get_stats,sangoma_flush_stats */ -#ifndef _LIBSNAGOMA_H -#define _LIBSNAGOMA_H +#ifndef _LIBSANGOMA_H +#define _LIBSANGOMA_H #ifdef __linux__ #ifndef __LINUX__ @@ -268,7 +268,8 @@ typedef pthread_mutex_t CRITICAL_SECTION; typedef unsigned int UINT; #define EnterCriticalSection(arg) pthread_mutex_lock(arg) -#define TryEnterCriticalSection(arg) pthread_mutex_trylock(arg) +/* On success, pthread_mutex_trylock() returns 0. On error, non-zero value is returned. */ +#define TryEnterCriticalSection(arg) (pthread_mutex_trylock(arg)==0 ? 1 : 0) #define LeaveCriticalSection(arg) pthread_mutex_unlock(arg) #define InitializeCriticalSection(arg) pthread_mutex_init(arg, NULL); @@ -426,6 +427,14 @@ sng_fd_t _LIBSNG_CALL __sangoma_open_api_span_chan(int span, int chan); */ sng_fd_t _LIBSNG_CALL sangoma_open_api_span(int span); +/*! + \fn sng_fd_t sangoma_open_dev_by_name(const char *dev_name) + \brief Open API device using it's name. For example: Linux: w1g1, Windows wanpipe1_if1. + \param dev_name API device name + \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor +*/ +sng_fd_t _LIBSNG_CALL sangoma_open_dev_by_name(const char *dev_name); + /*! \def sangoma_create_socket_intr @@ -1528,7 +1537,7 @@ int _LIBSNG_CALL sangoma_set_tx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, float \brief set driver rx gain for this tdm device \param fd device file descriptor \param tdm_api tdm api command structure - \param value txgain (0.0 - 10.0) db + \param value rxgain (0.0 - 10.0) db \return non-zero = error, 0 = ok */ int _LIBSNG_CALL sangoma_set_rx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, float gain_val); @@ -2160,5 +2169,5 @@ sangoma_status_t _LIBSNG_CALL sangoma_set_driver_mode_of_all_hw_devices(int driv #define sangoma_create_socket_intr sangoma_open_api_span_chan #endif -#endif /* _LIBSNAGOMA_H */ +#endif /* _LIBSANGOMA_H */ diff --git a/api/libsangoma/.svn/text-base/libsangoma.vcproj.svn-base b/api/libsangoma/.svn/text-base/libsangoma.vcproj.svn-base index 4d4e273..b195b7e 100644 --- a/api/libsangoma/.svn/text-base/libsangoma.vcproj.svn-base +++ b/api/libsangoma/.svn/text-base/libsangoma.vcproj.svn-base @@ -214,6 +214,10 @@ RelativePath=".\libsangoma_hwec.c" > + + - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - ******************************************************************************* - */ - -#include "libsangoma-pvt.h" - -static void libsng_dbg(const char * fmt, ...) -{ - va_list args; - char buf[1024]; - va_start(args, fmt); - _vsnprintf(buf, sizeof(buf), fmt, args); -#if defined(__WINDOWS__) - OutputDebugString(buf); -#else - printf(buf); -#endif - va_end(args); -} - -/*********************************************************************//** - * WINDOWS Only Section - *************************************************************************/ - -#define DBG_POLL if(0)libsng_dbg -#define DBG_EVNT if(0)libsng_dbg -#define DBG_ERR if(0)libsng_dbg("Error: %s() line: %d : ", __FUNCTION__, __LINE__);if(0)libsng_dbg -#define DBG_INIT if(0)libsng_dbg - -#if defined(__WINDOWS__) - -/* - \fn static void DecodeLastError(LPSTR lpszFunction) - \brief Decodes the Error in radable format. - \param lpszFunction error string - - Private Windows Only Function - */ -static void DecodeLastError(LPSTR lpszFunction) -{ - LPVOID lpMsgBuf; - DWORD dwLastErr = GetLastError(); - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - dwLastErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPTSTR) &lpMsgBuf, - 0, - NULL - ); - // Display the string. - DBG_POLL("Last Error in %s(): %s (%d)\n", lpszFunction, lpMsgBuf, dwLastErr); - // Free the buffer. - LocalFree( lpMsgBuf ); -} - -/* - \fn static int handle_device_ioctl_result(int bResult) - \brief Checks result code of ioctl - \param bResult result of ioctl call - - Private Windows Only Function - */ -static u16 handle_device_ioctl_result(int bResult, char *caller_name) -{ - if(bResult == 0){ - //error - DecodeLastError(caller_name); - return 1; - - }else{ - return 0; - } -} - -/* - \fn static int DoManagementCommand(HANDLE fd, wan_udp_hdr_t* wan_udp) - \brief Executes Driver Management Command - \param fd device file descriptor - \param wan_udp managemet cmd structure - - Private Windows Function - */ -static int DoManagementCommand(HANDLE fd, wan_udp_hdr_t* wan_udp) -{ - DWORD ln, bIoResult; - unsigned char id = 0; - - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - bIoResult = DeviceIoControl( - fd, - IoctlManagementCommand, - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int DoTdmvApiCommand(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) - \brief Executes Driver TDM API Command - \param fd device file descriptor - \param api_cmd tdm_api managemet cmd structure - - Private Windows Function - */ -static int DoTdmvApiCommand(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlTdmApiCommand, - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int tdmv_api_ioctl(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) - \brief Executes Driver TDM API Command Wrapper Function - \param fd device file descriptor - \param api_cmd tdm_api managemet cmd structure - - Private Windows Function - */ -static int tdmv_api_ioctl(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - if(DoTdmvApiCommand(fd, api_cmd)){ - return SANG_STATUS_GENERAL_ERROR; - } - - return api_cmd->result; -} - -/* - \fn static USHORT DoReadCommand(HANDLE drv, RX_DATA_STRUCT * pRx) - \brief API READ Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - This function will NOT block because using IoctlReadCommandNonBlocking. - */ -static USHORT DoReadCommand(HANDLE drv, RX_DATA_STRUCT * pRx) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlReadCommandNonBlocking, - (LPVOID)NULL,//NO input buffer! - 0, - (LPVOID)pRx, - sizeof(RX_DATA_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static UCHAR DoWriteCommand(HANDLE drv, TX_DATA_STRUCT * pTx) - \brief API Write Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - In Legacy API mode this fuction will Block if data is busy. - In API mode no function is allowed to Block - */ -static UCHAR DoWriteCommand(HANDLE drv, - void *input_data_buffer, u32 size_of_input_data_buffer, - void *output_data_buffer, u32 size_of_output_data_buffer - ) -{ - DWORD BytesReturned, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlWriteCommand, - (LPVOID)input_data_buffer, - size_of_input_data_buffer, - (LPVOID)output_data_buffer, - size_of_output_data_buffer, - (LPDWORD)(&BytesReturned), - (LPOVERLAPPED)NULL); - - return (UCHAR)handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static USHORT sangoma_poll_fd(HANDLE drv, API_POLL_STRUCT *api_poll_ptr) - \brief Non Blocking API Poll function used to find out if Rx Data, Events or - Free Tx buffer available - \param drv device file descriptor - \param api_poll_ptr poll device that stores polling information read/write/event - \param overlapped pointer to system overlapped io structure. - - Private Windows Function - */ -static USHORT sangoma_poll_fd(sng_fd_t fd, API_POLL_STRUCT *api_poll_ptr) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlApiPoll, - (LPVOID)NULL, - 0L, - (LPVOID)api_poll_ptr, - sizeof(API_POLL_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -static USHORT DoSetSharedEventCommand(HANDLE drv, PREGISTER_EVENT event) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlSetSharedEvent, - (LPVOID)event, - sizeof(REGISTER_EVENT), - (LPVOID)event, - sizeof(REGISTER_EVENT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -static int init_sangoma_event_object(sangoma_wait_obj_t *sng_wait_obj, int flags_in) -{ - int event_index = -1; - - if(flags_in & POLLIN){ - event_index = LIBSNG_EVENT_INDEX_POLLIN; - } - - if(flags_in & POLLOUT){ - event_index = LIBSNG_EVENT_INDEX_POLLOUT; - } - - if(flags_in & POLLPRI){ - event_index = LIBSNG_EVENT_INDEX_POLLPRI; - } - - if(event_index == -1){ - /* invalid 'flags_in', this should be an assert */ - return SANG_STATUS_GENERAL_ERROR; - } - - sng_wait_obj->sng_event_objects[event_index].hEvent = CreateEvent( NULL, FALSE, FALSE, NULL); - if(!sng_wait_obj->sng_event_objects[event_index].hEvent){ - //error - return SANG_STATUS_GENERAL_ERROR; - } - - sng_wait_obj->sng_event_objects[event_index].user_flags_bitmap = flags_in; - if(DoSetSharedEventCommand(sng_wait_obj->fd, &sng_wait_obj->sng_event_objects[event_index])){ - //error - return SANG_STATUS_GENERAL_ERROR; - } - - return sng_wait_obj->sng_event_objects[event_index].operation_status; -} - -static void sangoma_reset_wait_obj(sangoma_wait_obj_t *sng_wait_obj, int flags_in) -{ - if(flags_in & POLLIN){ - if(sng_wait_obj->sng_event_objects[LIBSNG_EVENT_INDEX_POLLIN].hEvent){ - ResetEvent(sng_wait_obj->sng_event_objects[LIBSNG_EVENT_INDEX_POLLIN].hEvent); - } - } - - if(flags_in & POLLOUT){ - if(sng_wait_obj->sng_event_objects[LIBSNG_EVENT_INDEX_POLLOUT].hEvent){ - ResetEvent(sng_wait_obj->sng_event_objects[LIBSNG_EVENT_INDEX_POLLOUT].hEvent); - } - } - - if(flags_in & POLLPRI){ - if(sng_wait_obj->sng_event_objects[LIBSNG_EVENT_INDEX_POLLPRI].hEvent){ - ResetEvent(sng_wait_obj->sng_event_objects[LIBSNG_EVENT_INDEX_POLLPRI].hEvent); - } - } -} - -static sangoma_status_t _SAPI_CALL sangoma_wait_obj_poll(sangoma_wait_obj_t *sangoma_wait_object, int flags_in, int *flags_out) -{ - int err; - sangoma_wait_obj_t *sng_wait_obj = sangoma_wait_object; - /*! api structure used by windows IoctlApiPoll call */ - API_POLL_STRUCT api_poll; - - *flags_out = 0; - - memset(&api_poll, 0x00, sizeof(API_POLL_STRUCT)); - api_poll.user_flags_bitmap = flags_in; - - /* This call is non-blocking - it will return immediatly. */ - if(sangoma_poll_fd(sng_wait_obj->fd, &api_poll)){ - /* error - ioctl failed */ - return SANG_STATUS_IO_ERROR; - } - - if(api_poll.operation_status == SANG_STATUS_SUCCESS){ - *flags_out = api_poll.poll_events_bitmap; - err = 0; - }else{ - /* error - command failed */ - err = api_poll.operation_status; - } - - if(*flags_out == 0){ - DBG_POLL("======%s(): *flags_out: 0x%X, flags_in: 0x%X\n", __FUNCTION__, *flags_out, flags_in); - } - return err; -} - -static int check_number_of_wait_objects(uint32_t number_of_objects, const char *caller_function, int lineno) -{ - if(number_of_objects >= MAXIMUM_WAIT_OBJECTS){ - DBG_ERR("Caller: %s(): Line: %d: 'number_of_objects': %d is greater than the Maximum of: %d\n", - caller_function, lineno, number_of_objects, MAXIMUM_WAIT_OBJECTS); - return 1; - } - return 0; -} - -static sangoma_status_t get_out_flags(IN sangoma_wait_obj_t *sng_wait_objects[], - IN uint32_t in_flags[], OUT uint32_t out_flags[], - IN uint32_t number_of_sangoma_wait_objects, - IN BOOL reset_events_if_out_flags_set, - OUT BOOL *at_least_one_poll_set_flags_out) -{ - uint32_t i, j; - - if(at_least_one_poll_set_flags_out){ - *at_least_one_poll_set_flags_out = FALSE; - } - - for(i = 0; i < number_of_sangoma_wait_objects; i++) { - - sangoma_wait_obj_t *sangoma_wait_object = sng_wait_objects[i]; - if (!SANGOMA_OBJ_HAS_DEVICE(sangoma_wait_object)) { - continue; - } - - for(j = 0; j < LIBSNG_NUMBER_OF_EVENT_OBJECTS; j++){ - - if(!sangoma_wait_object->sng_event_objects[j].hEvent) { - continue; - } - - if(sangoma_wait_obj_poll(sangoma_wait_object, in_flags[i], &out_flags[i])){ - return SANG_STATUS_GENERAL_ERROR; - } - - if( out_flags[i] & in_flags[i] ){ - if(TRUE == reset_events_if_out_flags_set){ - sangoma_reset_wait_obj(sangoma_wait_object, out_flags[i]);/* since we are NOT going to wait on this event, reset it 'manually' */ - } - if(at_least_one_poll_set_flags_out){ - *at_least_one_poll_set_flags_out = TRUE; - } - } - } - } - - return SANG_STATUS_SUCCESS; -} -#endif /* __WINDOWS__ */ - - -/*********************************************************************//** - * Common Linux & Windows Code - *************************************************************************/ - - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - -/*! - \fn sangoma_status_t sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) - \brief Create a wait object that will be used with sangoma_waitfor_many() API - \param sangoma_wait_object pointer a single device object - \param fd device file descriptor - \param object_type type of the wait object. see sangoma_wait_obj_type_t for types - \see sangoma_wait_obj_type_t - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) -{ - int err = 0; - sangoma_wait_obj_t *sng_wait_obj; - - if (!sangoma_wait_object) { - return SANG_STATUS_INVALID_DEVICE; - } - *sangoma_wait_object = NULL; - sng_wait_obj = malloc(sizeof(**sangoma_wait_object)); - if (!sng_wait_obj) { - return SANG_STATUS_FAILED_ALLOCATE_MEMORY; - } - - memset(sng_wait_obj, 0x00, sizeof(*sng_wait_obj)); - /* it is a first initialization of the object */ - sng_wait_obj->init_flag = LIBSNG_MAGIC_NO; - - sng_wait_obj->fd = fd; - sng_wait_obj->object_type = object_type; - -#if defined(__WINDOWS__) - DBG_INIT("%s(): sng_wait_obj ptr: 0x%p\n", __FUNCTION__, sng_wait_obj); - DBG_INIT("%s(): fd: 0x%X, object_type: %s\n", __FUNCTION__, fd, DECODE_SANGOMA_WAIT_OBJECT_TYPE(object_type)); - DBG_INIT("%s(): sizeof(**sangoma_wait_object): %d\n", __FUNCTION__, sizeof(**sangoma_wait_object)); - - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sng_wait_obj->generic_event_object.hEvent = CreateEvent( NULL, FALSE, FALSE, NULL); - if(!sng_wait_obj->generic_event_object.hEvent){ - return SANG_STATUS_GENERAL_ERROR; - } - } - - if(SANGOMA_GENERIC_WAIT_OBJ == object_type){ - /* everything is done for the generic wait object */ - return SANG_STATUS_SUCCESS; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLIN /* must be a SINGLE bit because there is a signaling object for each bit */); - if(SANG_STATUS_SUCCESS != err){ - return err; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLOUT /* must be a SINGLE bit because there is a signaling object for each bit */); - if(SANG_STATUS_SUCCESS != err){ - return err; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLPRI /* must be a SINGLE bit because there is a signaling object for each bit */); - if(SANG_STATUS_SUCCESS != err) { - return err; - } - - DBG_INIT("%s(): returning: %d", __FUNCTION__, err); -#else - int filedes[2]; - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sng_wait_obj->signal_read_fd = INVALID_HANDLE_VALUE; - sng_wait_obj->signal_write_fd = INVALID_HANDLE_VALUE; - /* if we want cross-process event notification we can use a named pipe with mkfifo() */ - if (pipe(filedes)) { - return -1; - } - sng_wait_obj->signal_read_fd = filedes[0]; - sng_wait_obj->signal_write_fd = filedes[1]; - } -#endif - *sangoma_wait_object = sng_wait_obj; - return err; -} - -/*! - \fn sangoma_status_t sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) - \brief De-allocate all resources in a wait object - \param sangoma_wait_object pointer to a pointer to a single device object - \return SANG_STATUS_SUCCESS on success or some sangoma status error -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) -{ -<<<<<<< .mine - if(sng_wait_obj->fd != INVALID_HANDLE_VALUE){ - /* sangoma_close takes care of setting the fd value itself to invalid */ - sangoma_close(&sng_wait_obj->fd); -#ifndef WIN32 - sangoma_close(&sng_wait_obj->signal_read_fd); - sangoma_close(&sng_wait_obj->signal_write_fd); -#else - if (sng_wait_obj->SharedEvent.hEvent != INVALID_HANDLE_VALUE) { - CloseHandle(sng_wait_obj->SharedEvent.hEvent); - } -======= - sangoma_wait_obj_t *sng_wait_obj = *sangoma_wait_object; -#if defined(__WINDOWS__) - int index = 0; ->>>>>>> .r191 -#endif - - if(sng_wait_obj->init_flag != LIBSNG_MAGIC_NO){ - /* error. object was not initialized by sangoma_wait_obj_init() */ - return SANG_STATUS_INVALID_DEVICE; - } - -#if defined(__WINDOWS__) - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sangoma_close(&sng_wait_obj->generic_event_object.hEvent); - } - if (SANGOMA_OBJ_HAS_DEVICE(sng_wait_obj)) { - for(index = 0; index < LIBSNG_NUMBER_OF_EVENT_OBJECTS; index++){ - sangoma_close(&sng_wait_obj->sng_event_objects[index].hEvent); - } - } -#else - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sangoma_close(&sng_wait_obj->signal_read_fd); - sangoma_close(&sng_wait_obj->signal_write_fd); - } -#endif - sng_wait_obj->init_flag = 0; - sng_wait_obj->object_type = UNKNOWN_WAIT_OBJ; - *sangoma_wait_object = NULL; - return SANG_STATUS_SUCCESS; -} - -/*! - \fn void sangoma_wait_obj_signal(void *sangoma_wait_object) - \brief Set wait object to a signaled state - \param sangoma_wait_object pointer a single device object - \return 0 on success, non-zero on error -*/ -int _SAPI_CALL sangoma_wait_obj_signal(sangoma_wait_obj_t *sng_wait_obj) -{ - if (!SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - /* even when Windows objects are always signalable for the sake of providing - * a consistent interface to the user we downgrade the capabilities of Windows - * objects unless the sangoma wait object is explicitly initialized as signalable - * */ - return SANG_STATUS_INVALID_DEVICE; - } -#if defined(__WINDOWS__) - if(sng_wait_obj->generic_event_object.hEvent){ - if (!SetEvent(sng_wait_obj->generic_event_object.hEvent)) { - return SANG_STATUS_GENERAL_ERROR; - } - } -#else -<<<<<<< .mine - if (sng_wait_obj->signal_write_fd >= 0) { - return write(sng_wait_obj->signal_write_fd, "s", 1); -======= - /* at this point we know is a signalable object and has a signal_write_fd */ - if (write(sng_wait_obj->signal_write_fd, "s", 1) < 1) { - return SANG_STATUS_GENERAL_ERROR; ->>>>>>> .r191 - } -#endif - return SANG_STATUS_SUCCESS; -} - -/*! - \fn sng_fd_t sangoma_wait_obj_get_fd(void *sangoma_wait_object) - \brief Retrieve fd device file descriptor which was the 'fd' parameter for sangoma_wait_obj_init() - \param sangoma_wait_object pointer a single device object - \return fd - device file descriptor -*/ -sng_fd_t _SAPI_CALL sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sng_wait_obj) -{ - return sng_wait_obj->fd; -} - -/*! - \fn void sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Store the given context into provided sangoma wait object. - \brief This function is useful to associate a context with a sangoma wait object. - \param sangoma_wait_object pointer a single device object - \param context void pointer to user context - \return void -*/ -void _SAPI_CALL sangoma_wait_obj_set_context(sangoma_wait_obj_t *sng_wait_obj, void *context) -{ - sng_wait_obj->context = context; -} - -/*! - \fn void *sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Retrieve the user context (if any) that was set via sangoma_wait_obj_set_context. - \param sangoma_wait_object pointer a single device object - \return void* -*/ -void* _SAPI_CALL sangoma_wait_obj_get_context(sangoma_wait_obj_t *sng_wait_obj) -{ - return sng_wait_obj->context; -} - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], int32_t in_flags[], int32_t out_flags[] uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - \brief Wait for multiple sangoma waitable objects - \param sangoma_wait_objects pointer to array of wait objects previously created with sangoma_wait_obj_create - \param in_flags array of flags corresponding to the flags the user is interested on for each waitable object - \param out_flags array of flags corresponding to the flags that are ready in the waitable objects - \param number_of_sangoma_wait_objects size of the array of waitable objects and flags - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured check in sangoma_wait_objects, any other return code is some error -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sng_wait_objects[], uint32_t in_flags[], uint32_t out_flags[], - uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout) -{ -#if defined(__WINDOWS__) - HANDLE hEvents[MAXIMUM_WAIT_OBJECTS]; - int at_least_one_poll_set_flags_out, number_of_internal_signaling_objects, err; -#endif - uint32_t i = 0, j = 0; - - memset(out_flags, 0x00, number_of_sangoma_wait_objects * sizeof(out_flags[0])); -#if defined(__WINDOWS__) - /* This loop will calculate 'number_of_internal_signaling_objects' and will initialize 'hEvents' - * based on 'number_of_sangoma_wait_objects' and 'in_flags'. */ - number_of_internal_signaling_objects = 0; - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - sangoma_wait_obj_t *sangoma_wait_object = sng_wait_objects[i]; - - /* if SANGOMA_OBJ_IS_SIGNALABLE add the generic_event_object.hEvent to the hEvents */ - if(sangoma_wait_object->generic_event_object.hEvent){ - if(check_number_of_wait_objects(number_of_internal_signaling_objects, __FUNCTION__, __LINE__)){ - return SANG_STATUS_NO_FREE_BUFFERS; - } - hEvents[number_of_internal_signaling_objects] = sangoma_wait_object->generic_event_object.hEvent; - number_of_internal_signaling_objects++; - } - - for(j = 0; j < LIBSNG_NUMBER_OF_EVENT_OBJECTS; j++){ - if(sangoma_wait_object->sng_event_objects[j].hEvent){ - if( ((j == LIBSNG_EVENT_INDEX_POLLIN) && (in_flags[i] & POLLIN)) || - ((j == LIBSNG_EVENT_INDEX_POLLOUT) && (in_flags[i] & POLLOUT)) || - ((j == LIBSNG_EVENT_INDEX_POLLPRI) && (in_flags[i] & POLLPRI)) ){ - - if(check_number_of_wait_objects(number_of_internal_signaling_objects, __FUNCTION__, __LINE__)){ - return SANG_STATUS_NO_FREE_BUFFERS; - } - hEvents[number_of_internal_signaling_objects] = sangoma_wait_object->sng_event_objects[j].hEvent; - number_of_internal_signaling_objects++; - } - }/* if () */ - }/* for() */ - }/* for() */ - - if(number_of_internal_signaling_objects < 1){ - DBG_ERR("'number_of_internal_signaling_objects': %d is less than the Minimum of: 1!\n", - number_of_internal_signaling_objects); - /* error - most likely the user did not initialize sng_wait_objects[] */ - return SANG_STATUS_INVALID_PARAMETER; - } - - at_least_one_poll_set_flags_out = FALSE; - - /* It is important to get 'out flags' BEFORE the WaitForMultipleObjects() - * because it allows to keep API driver's transmit queue full. */ - err = get_out_flags(sng_wait_objects, in_flags, out_flags, number_of_sangoma_wait_objects, TRUE, &at_least_one_poll_set_flags_out); - if(SANG_ERROR(err)){ - return err; - } - - if(TRUE == at_least_one_poll_set_flags_out){ - return SANG_STATUS_SUCCESS; - } - - /* wait untill at least one of the events is signaled OR a 'system_wait_timeout' occured */ - if (WAIT_TIMEOUT == WaitForMultipleObjects(number_of_internal_signaling_objects, &hEvents[0], FALSE, system_wait_timeout)){ - return SANG_STATUS_APIPOLL_TIMEOUT; - } - - /* WaitForMultipleObjects() was waken by a Sangoma or by a non-Sangoma wait object. */ - err = get_out_flags(sng_wait_objects, in_flags, out_flags, number_of_sangoma_wait_objects, TRUE, NULL); - if(SANG_ERROR(err)){ - return err; - } - - return SANG_STATUS_SUCCESS; -#else - struct pollfd pfds[number_of_sangoma_wait_objects*2]; /* we need twice as many polls because of the sangoma signalable objects */ - char dummy_buf[1]; - int res; - j = 0; - - memset(pfds, 0, sizeof(pfds)); - - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - - if (SANGOMA_OBJ_HAS_DEVICE(sng_wait_objects[i])) { - pfds[i].fd = sng_wait_objects[i]->fd; - pfds[i].events = in_flags[i]; - } - - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_objects[i])) { - pfds[number_of_sangoma_wait_objects+j].fd = sng_wait_objects[i]->signal_read_fd; - pfds[number_of_sangoma_wait_objects+j].events = POLLIN; - j++; - } - } - - poll_try_again: - - res = poll(pfds, (number_of_sangoma_wait_objects + j), system_wait_timeout); - if (res > 0) { - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - out_flags[i] = pfds[i].revents; - } - for(i = 0; i < j; i++){ - /* TODO: we must do something extra for signalled objects like setting a flag. - * current user of the SANGOMA_OBJ_IS_SIGNALABLE feature is Netborder and they dont - * need to know which object was signaled. If we want to know which object was signaled - * we need a new libsangoma API sangoma_wait_obj_is_signaled() where in Windows we can - * use WaitForSingleObject to test the signaled state and in Linux we can set a flag in - * sng_wait_obj - * */ - if (pfds[number_of_sangoma_wait_objects+i].revents & POLLIN) { - /* read and discard the signal byte */ - read(pfds[number_of_sangoma_wait_objects+i].fd, &dummy_buf, 1); - } - } - } else if (res < 0 && errno == EINTR) { - /* TODO: decrement system_wait_timeout */ - goto poll_try_again; - } - if (res < 0) { - return SANG_STATUS_GENERAL_ERROR; - } - if (res == 0) { - return SANG_STATUS_APIPOLL_TIMEOUT; - } - return SANG_STATUS_SUCCESS; -#endif -} - - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int32_t inflags, int32_t *outflags, int32_t timeout) - \brief Wait for a single waitable object - \param sangoma_wait_obj pointer to array of file descriptors to wait for - \param timeout timeout in miliseconds in case of no event - \return SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured use sangoma_wait_obj_get_out_flags to check or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, uint32_t inflags, uint32_t *outflags, int32_t timeout) -{ - return sangoma_waitfor_many(&sangoma_wait_obj, &inflags, outflags, 1, timeout); -} - - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - - -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name) -{ -#if defined(__WINDOWS__) -/* FIXME: Not implemented */ - return -1; -#else - sprintf(interface_name,"s%ic%i",span,chan); -#endif - return 0; -} - -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan) -{ - char *p=NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'g') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 'w') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -int _SAPI_CALL sangoma_interface_wait_up(int span, int chan, int sectimeout) -{ -#if defined(__WINDOWS__) - /* Windows does not need to wait for interfaces to come up */ - return 0; -#else - char interface_name[FNAME_LEN]; - struct stat statbuf; - struct timeval endtime = {0,0}; - struct timeval curtime = {0,0}; - int counter; - int rc; - if (sectimeout >= 0 && gettimeofday(&endtime, NULL)) { - return -1; - } - snprintf(interface_name, sizeof(interface_name), "/dev/" WP_INTERFACE_NAME_FORM, span, chan); - endtime.tv_sec += sectimeout; - do { - counter = 0; - while ((rc = stat(interface_name, &statbuf)) && errno == ENOENT && counter != 10) { - poll(0, 0, 100); // test in 100ms increments - counter++; - } - if (!rc || errno != ENOENT) break; - if (gettimeofday(&curtime, NULL)) { - return -1; - } - } while (sectimeout < 0 || timercmp(&endtime, &curtime,>)); - return rc; -#endif -} - -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) -{ - char *p = NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'c') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 's') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -sng_fd_t _SAPI_CALL sangoma_open_api_span_chan(int span, int chan) -{ - sng_fd_t fd = INVALID_HANDLE_VALUE; - wanpipe_api_t tdm_api; - int err; - - fd = __sangoma_open_api_span_chan(span, chan); - -#if defined(__WINDOWS__) - if(fd == INVALID_HANDLE_VALUE){ - return fd; - } -#else - if (fd < 0) { - return fd; - } -#endif - - memset(&tdm_api,0,sizeof(tdm_api)); - tdm_api.wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - err=sangoma_cmd_exec(fd,&tdm_api); - if (err){ - sangoma_close(&fd); - return fd; - } - - if (tdm_api.wp_cmd.open_cnt > 1) { - /* this is NOT the first open request for this span/chan */ - sangoma_close(&fd); - fd = INVALID_HANDLE_VALUE;/* fd is NOT valid anymore */ - } - - return fd; -} - -/* no checks done for multiple open */ -sng_fd_t _SAPI_CALL __sangoma_open_api_span_chan(int span, int chan) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - - /* Form the Interface Name from span and chan number (i.e. wanpipe1_if1). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_INTERFACE_NAME_FORM, span, chan); - -#if defined(__WINDOWS__) - _snprintf(fname , FNAME_LEN, "\\\\.\\%s", tmp_fname); - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - -sng_fd_t _SAPI_CALL sangoma_open_api_ctrl(void) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - - /* Form the Ctrl Device Name. */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_CTRL_DEV_NAME); - -#if defined(__WINDOWS__) - _snprintf(fname , FNAME_LEN, "\\\\.\\%s", tmp_fname); - - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - - -int _SAPI_CALL sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return -1; - } - - return tdm_api->wp_cmd.open_cnt; -} - -sng_fd_t _SAPI_CALL sangoma_create_socket_by_name(char *device, char *card) -{ - int span,chan; - sangoma_interface_toi(device,&span,&chan); - - return sangoma_open_api_span_chan(span,chan); -} - - -sng_fd_t _SAPI_CALL sangoma_open_api_span(int span) -{ - int i=0; - sng_fd_t fd = INVALID_HANDLE_VALUE; - - for(i = 1; i < 32; i++){ - - fd = sangoma_open_api_span_chan(span, i); - -#if defined(__WINDOWS__) - if(fd != INVALID_HANDLE_VALUE){ -#else - if (fd >= 0) { -#endif - - //found free chan - break; - } - - }//for() - - return fd; -} - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void -*/ -void _SAPI_CALL sangoma_close(sng_fd_t *fd) -{ -#if defined(__WINDOWS__) - if( *fd != INVALID_HANDLE_VALUE){ - CloseHandle(*fd); - *fd = INVALID_HANDLE_VALUE; - } -#else - if (*fd >= 0) { - close(*fd); - *fd = -1; - } -#endif -} - - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -int _SAPI_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) -{ - int rx_len=0; - -#if defined(__WINDOWS__) - wp_api_hdr_t *rx_hdr = (wp_api_hdr_t*)hdrbuf; - wp_api_element_t wp_api_element; - - if(hdrlen != sizeof(wp_api_hdr_t)){ - //error - DBG_ERR("hdrlen (%i) != sizeof(wp_api_hdr_t) (%i)\n", hdrlen, sizeof(wp_api_hdr_t)); - return -1; - } - - if(DoReadCommand(fd, &wp_api_element)){ - //error - DBG_ERR("DoReadCommand() failed! Check messages log.\n"); - return -4; - } - - memcpy(rx_hdr, &wp_api_element.hdr, sizeof(wp_api_hdr_t)); - - switch(rx_hdr->operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: - /* ok */ - if(rx_hdr->data_length <= datalen){ - memcpy(databuf, wp_api_element.data, rx_hdr->data_length); - }else{ - rx_hdr->operation_status = SANG_STATUS_BUFFER_TOO_SMALL; - } - break; - default: - /* note that SANG_STATUS_NO_DATA_AVAILABLE is NOT an error! */ - if(0)DBG_ERR("Operation Status: %s(%d)\n", - SDLA_DECODE_SANG_STATUS(rx_hdr->operation_status), rx_hdr->operation_status); - return -5; - } - - rx_len = rx_hdr->data_length; -#else - struct msghdr msg; - struct iovec iov[2]; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - rx_len = read(fd,&msg,sizeof(msg)); - - if (rx_len <= sizeof(wp_api_hdr_t)){ - return -EINVAL; - } - - rx_len-=sizeof(wp_api_hdr_t); -#endif - return rx_len; -} - -int _SAPI_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) -{ - int bsent=-1; - wp_api_hdr_t *wp_api_hdr = hdrbuf; - - if (hdrlen != sizeof(wp_api_hdr_t)) { - /* error. Possible cause is a mismatch between versions of API header files. */ - DBG_ERR("hdrlen (%i) != sizeof(wp_api_hdr_t) (%i)\n", hdrlen, sizeof(wp_api_hdr_t)); - return -1; - } - -#if defined(__WINDOWS__) - //queue data for transmission - if(DoWriteCommand(fd, databuf, datalen, hdrbuf, hdrlen)){ - //error - DBG_ERR("DoWriteCommand() failed!! Check messages log.\n"); - return -1; - } - - bsent=0; - //check that frame was transmitted - switch(wp_api_hdr->operation_status) - { - case SANG_STATUS_SUCCESS: - bsent = datalen; - break; - default: - DBG_ERR("Operation Status: %s(%d)\n", - SDLA_DECODE_SANG_STATUS(wp_api_hdr->operation_status), wp_api_hdr->operation_status); - break; - }//switch() -#else - struct msghdr msg; - struct iovec iov[2]; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - bsent = write(fd,&msg,datalen+hdrlen); - - if (bsent == (datalen+hdrlen)){ - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_SUCCESS; - bsent-=sizeof(wp_api_hdr_t); - } else if (errno == EBUSY){ - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_DEVICE_BUSY; - } else { - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_IO_ERROR; - } - wp_api_hdr->wp_api_hdr_data_length=bsent; - - //FIXME - THIS SHOULD BE DONE IN KERNEL - wp_api_hdr->wp_api_tx_hdr_max_queue_length=16; - wp_api_hdr->wp_api_tx_hdr_number_of_frames_in_queue=0; - -#endif - return bsent; -} - - -#ifdef WANPIPE_TDM_API - - -/************************************************************//** - * Device API COMMAND Functions - ***************************************************************/ - - - -/*======================================================== - * Execute TDM command - * - */ -int _SAPI_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - -#if defined(__WINDOWS__) - err = tdmv_api_ioctl(fd, &tdm_api->wp_cmd); -#else - err = ioctl(fd,WANPIPE_IOCTL_API_CMD,&tdm_api->wp_cmd); - if (err < 0){ - char tmp[50]; - sprintf(tmp,"TDM API: CMD: %i\n",tdm_api->wp_cmd.cmd); - perror(tmp); - return -1; - } -#endif - return err; -} - -/*======================================================== - * Get Full TDM API configuration per channel - * - */ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FULL_CFG; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - -#if 0 - printf("TDM API CFG:\n"); - printf("\thw_tdm_coding:\t%d\n",tdm_api->wp_cmd.hw_tdm_coding); - printf("\thw_mtu_mru:\t%d\n",tdm_api->wp_cmd.hw_mtu_mru); - printf("\tusr_period:\t%d\n",tdm_api->wp_cmd.usr_period); - printf("\ttdm_codec:\t%d\n",tdm_api->wp_cmd.tdm_codec); - printf("\tpower_level:\t%d\n",tdm_api->wp_cmd.power_level); - printf("\trx_disable:\t%d\n",tdm_api->wp_cmd.rx_disable); - printf("\ttx_disable:\t%d\n",tdm_api->wp_cmd.tx_disable); - printf("\tusr_mtu_mru:\t%d\n",tdm_api->wp_cmd.usr_mtu_mru); - printf("\tidle flag:\t0x%02X\n",tdm_api->wp_cmd.idle_flag); - -#ifdef WP_API_FEATURE_FE_ALARM - printf("\tfe alarms:\t0x%02X\n",tdm_api->wp_cmd.fe_alarms); -#endif - - printf("\trx pkt\t%d\ttx pkt\t%d\n",tdm_api->wp_cmd.stats.rx_packets, - tdm_api->wp_cmd.stats.tx_packets); - printf("\trx err\t%d\ttx err\t%d\n", - tdm_api->wp_cmd.stats.rx_errors, - tdm_api->wp_cmd.stats.tx_errors); -#ifndef __WINDOWS__ - printf("\trx ovr\t%d\ttx idl\t%d\n", - tdm_api->wp_cmd.stats.rx_fifo_errors, - tdm_api->wp_cmd.stats.tx_carrier_errors); -#endif -#endif - - return 0; -} - -/*======================================================== - * SET Codec on a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_CODEC; - tdm_api->wp_cmd.tdm_codec = codec; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Codec from a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_CODEC; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.tdm_codec; -} - -/*======================================================== - * SET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_USR_PERIOD; - tdm_api->wp_cmd.usr_period = period; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_PERIOD; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_period; -} - -/*======================================================== - * GET Current User Hardware Coding Format - * - * Coding Format will be ULAW/ALAW based on T1/E1 - */ - -int _SAPI_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_CODING; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_tdm_coding; -} - -#ifdef WP_API_FEATURE_DTMF_EVENTS -/*======================================================== - * GET Current User Hardware DTMF Enabled/Disabled - * - * Will return true if HW DTMF is enabled on Octasic - */ - -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_DTMF; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_dtmf; -} -#endif - -/*======================================================== - * GET Current User MTU/MRU values in bytes. - * - * The USER MTU/MRU values will change each time a PERIOD - * or CODEC is adjusted. - */ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_MTU_MRU; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_mtu_mru; -} - -/*======================================================== - * SET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_POWER_LEVEL; - tdm_api->wp_cmd.power_level = power; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_POWER_LEVEL; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.power_level; -} - -int _SAPI_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_BUFFERS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_RBS_EVENTS; - tdm_api->wp_cmd.rbs_poll=poll_in_sec; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_RBS_EVENTS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs) -{ - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_WRITE_RBS_BITS; - tdm_api->wp_cmd.chan = (unsigned char)channel; - tdm_api->wp_cmd.rbs_tx_bits=rbs; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs) -{ - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_RBS_BITS; - tdm_api->wp_cmd.chan = (unsigned char)channel; - tdm_api->wp_cmd.rbs_tx_bits=0; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *rbs=(unsigned char)tdm_api->wp_cmd.rbs_rx_bits; - - return 0; -} - -int _SAPI_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - -#ifdef WP_API_FEATURE_EVENTS - wp_api_event_t *rx_event; - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_EVENT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - rx_event = &tdm_api->wp_cmd.event; - - - /* - The use of callbacks here is purely optional and is left - here for backward compatibility purposes. By default user - should handle events outside this funciton. This function - should only be used to read the event - */ - - switch (rx_event->wp_api_event_type){ - - case WP_API_EVENT_RBS: - if (tdm_api->wp_callback.wp_rbs_event) { - tdm_api->wp_callback.wp_rbs_event(fd,rx_event->wp_api_event_rbs_bits); - } - - break; - -#ifdef WP_API_FEATURE_DTMF_EVENTS - case WP_API_EVENT_DTMF: - if (tdm_api->wp_callback.wp_dtmf_event) { - tdm_api->wp_callback.wp_dtmf_event(fd, - rx_event->wp_api_event_dtmf_digit, - rx_event->wp_api_event_dtmf_type, - rx_event->wp_api_event_dtmf_port); - } - break; -#endif - - case WP_API_EVENT_RXHOOK: - if (tdm_api->wp_callback.wp_rxhook_event) { - tdm_api->wp_callback.wp_rxhook_event(fd, - rx_event->wp_api_event_hook_state); - } - break; - - case WP_API_EVENT_RING_DETECT: - if (tdm_api->wp_callback.wp_ring_detect_event) { - tdm_api->wp_callback.wp_ring_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - - case WP_API_EVENT_RING_TRIP_DETECT: - if (tdm_api->wp_callback.wp_ring_trip_detect_event) { - tdm_api->wp_callback.wp_ring_trip_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - -#ifdef WP_API_FEATURE_FE_ALARM - case WP_API_EVENT_ALARM: - if (tdm_api->wp_callback.wp_fe_alarm_event) { - tdm_api->wp_callback.wp_fe_alarm_event(fd, - rx_event->wp_api_event_alarm); - } - break; -#endif - -#ifdef WP_API_FEATURE_LINK_STATUS - /* Link Status */ - case WP_API_EVENT_LINK_STATUS: - if(tdm_api->wp_callback.wp_link_status_event){ - tdm_api->wp_callback.wp_link_status_event(fd, - rx_event->wp_api_event_link_status); - } - - break; -#endif - -#ifdef WP_API_FEATURE_POL_REV - case WP_API_EVENT_POLARITY_REVERSE: - break; -#endif - default: -#ifdef __WINDOWS__ - printf("libsangoma: %s fd=0x%p: Unknown TDM event!", __FUNCTION__,fd); -#else - printf("libsangoma: %s fd=%d: Unknown TDM event!", __FUNCTION__, fd); -#endif - break; - } - - return 0; -#else - printf("Error: Read Event not supported!\n"); - return -1; -#endif -} - -#ifdef WP_API_FEATURE_DTMF_EVENTS -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return err; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_TRIP_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_KEWL; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_START; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_ONHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_OFFHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = tone_id; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = 0x00; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - -#endif - -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_HWEC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_HWEC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -/*======================================================== - * GET Front End Alarms - * - */ -#ifdef WP_API_FEATURE_FE_ALARM -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_ALARMS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *alarms=tdm_api->wp_cmd.fe_alarms; - - return 0; -} - -/* get current Line Connection state - Connected/Disconnected */ -int _SAPI_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} -#endif - -/* get current Line Connection state - Connected/Disconnected */ -#ifdef WP_API_FEATURE_LINK_STATUS -int _SAPI_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} - -/* set current Line Connection state - Connected/Disconnected. valid only for ISDN BRI */ -int _SAPI_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_FE_STATUS; - tdm_api->wp_cmd.fe_status = new_status; - - return sangoma_cmd_exec(fd, tdm_api); -} -#endif - -int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.channel = (unsigned char)channel; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.channel = (unsigned char)channel; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd, tdm_api); -} - - -int _SAPI_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.tx_queue_sz; -} - -int _SAPI_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = size; - - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.rx_queue_sz; - -} - -int _SAPI_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = size; - - return sangoma_cmd_exec(fd, tdm_api); - -} - -int _SAPI_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_DRIVER_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(wan_driver_version_t)) { - if (drv_ver) { - memcpy(drv_ver,&tdm_api->wp_cmd.version,sizeof(wan_driver_version_t)); - } - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_FIRMWARE_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(unsigned char)) { - *ver = tdm_api->wp_cmd.data[0]; - } else { - return -1; - } - } - - return err; -} - - -int _SAPI_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_CPLD_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(unsigned char)) { - *ver = tdm_api->wp_cmd.data[0]; - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_STATS; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (stats) { - memcpy(stats,&tdm_api->wp_cmd.stats,sizeof(wanpipe_chan_stats_t)); - } - } - - return err; -} - -int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_RESET_STATS; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RM_RXFLASHTIME; - tdm_api->wp_cmd.rxflashtime=rxflashtime; - err = sangoma_cmd_exec(fd, tdm_api); - return err; -} - - -#ifndef LIBSANGOMA_LIGHT - - -/************************************************************//** - * Device PORT Control Functions - ***************************************************************/ - -static int sangoma_port_mgmnt_ioctl(sng_fd_t fd, port_management_struct_t *port_management) -{ - -#if defined(__WINDOWS__) - DWORD ln; - if(DeviceIoControl( - fd, - IoctlPortManagementCommand, - (LPVOID)port_management, - sizeof(port_management_struct_t), - (LPVOID)port_management, - sizeof(port_management_struct_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - //check messages log - printf("%s():Error: IoctlPortManagementCommand failed!!\n", __FUNCTION__); - return -1; - }else { - return 0; - } -#else - int err; - err=ioctl(fd,WANPIPE_IOCTL_PORT_MGMT,port_management); - if (err) { - return -1; - } else { - return 0; - } -#endif -} - -static int sangoma_port_cfg_ioctl(sng_fd_t fd, port_cfg_t *port_cfg) -{ - -#if defined(__WINDOWS__) - DWORD ln; - if(DeviceIoControl( - fd, - IoctlPortConfigurationCommand, - (LPVOID)port_cfg, - sizeof(port_cfg_t), - (LPVOID)port_cfg, - sizeof(port_cfg_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - //check messages log - printf("%s():Error: IoctlSetDriverConfiguration failed!!\n", __FUNCTION__); - return 1; - }else{ - return 0; - } -#else - int err; - err=ioctl(fd,WANPIPE_IOCTL_PORT_CONFIG,port_cfg); - if (err) { - return -1; - } else { - return 0; - } -#endif -} - -/* open wanpipe configuration device */ -sng_fd_t _SAPI_CALL sangoma_open_driver_ctrl(int port_no) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - -#if defined(__WINDOWS__) - /* Form the Config Device Name (i.e. wanpipe1, wanpipe2,...). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_PORT_NAME_FORM, port_no); - _snprintf(fname, FNAME_LEN, "\\\\.\\%s", tmp_fname); - - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - /* Form the Config Device Name. ("/dev/wanpipe") */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_CONFIG_DEV_NAME); - - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - - -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) -{ -#if defined(__WINDOWS__) - if(DoManagementCommand(fd, wan_udp)){ - return 1; - } -#else - unsigned char id = 0; - int err=0; - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - err=ioctl(fd,WANPIPE_IOCTL_PIPEMON,wan_udp); - if (err < 0) { - return 1; - } -#endif - - if(wan_udp->wan_udphdr_return_code != WAN_CMD_OK){ - return 2; - } - return 0; -} - -int _SAPI_CALL sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = START_PORT_VOLATILE_CONFIG; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - return err; - } - - if (port_mgmnt->operation_status != SANG_STATUS_SUCCESS ) { - err=port_mgmnt->operation_status; - } - - return err; -} - -int _SAPI_CALL sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = STOP_PORT; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - return err; - } - - if (port_mgmnt->operation_status != SANG_STATUS_SUCCESS){ - - if(port_mgmnt->operation_status == SANG_STATUS_CAN_NOT_STOP_DEVICE_WHEN_ALREADY_STOPPED) { - err = 0; - }else{ - err = port_mgmnt->operation_status; - } - } - - return err; -} - -int _SAPI_CALL sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = GET_HARDWARE_INFO; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - port_mgmnt->operation_status = SANG_STATUS_INVALID_DEVICE; - return err; - } - - if (port_mgmnt->operation_status != SANG_STATUS_SUCCESS ) { - err=port_mgmnt->operation_status; - } - - return err; -} - -int _SAPI_CALL sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) -{ - port_cfg->command_code = SET_PORT_VOLATILE_CONFIG; - port_cfg->port_no = port_no; - - return sangoma_port_cfg_ioctl(fd, port_cfg); -} - -int _SAPI_CALL sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) -{ - - port_cfg->command_code = GET_PORT_VOLATILE_CONFIG; - port_cfg->port_no = port_no; - - return sangoma_port_cfg_ioctl(fd, port_cfg); -} - -#endif - - -#endif /* WANPIPE_TDM_API */ diff --git a/api/libsangoma/.svn/tmp/tempfile.11.tmp b/api/libsangoma/.svn/tmp/tempfile.11.tmp deleted file mode 100644 index b58c361..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.11.tmp +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh - -PWD=$(pwd) - -eval "autoheader" -if [ $? -ne 0 ]; then - exit $? -fi -eval "libtoolize --force" -if [ $? -ne 0 ]; then - exit $? -fi -eval "aclocal" -if [ $? -ne 0 ]; then - exit $? -fi -<<<<<<< .mine -eval "automake" -if [ $? -ne 0 ]; then - exit $? -fi -eval "autoconf" -if [ $? -ne 0 ]; then - exit $? -fi -======= -eval "automake --add-missing" -if [ $? -ne 0 ]; then - exit $? -fi -eval "autoconf" -if [ $? -ne 0 ]; then - exit $? -fi ->>>>>>> .r196 - -cd sample_c -if [ -f Makefile ]; then - rm -f Makefile -fi -ln -s Makefile.Linux Makefile - -cd .. - -cd sample_cpp -if [ -f Makefile ]; then - rm -f Makefile -fi -ln -s Makefile.Linux Makefile - -echo "Automake Init Done" -echo - -echo "Please run " -echo " -> ./configure --prefix=/usr" -echo " -> make " -echo " -> make install" - diff --git a/api/libsangoma/.svn/tmp/tempfile.12.tmp b/api/libsangoma/.svn/tmp/tempfile.12.tmp deleted file mode 100644 index 3bf543b..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.12.tmp +++ /dev/null @@ -1,60 +0,0 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -# Package and LT (libtool) versions are not the same (they can match sometimes though) -# see http://sources.redhat.com/autobook/autobook/autobook_91.html for details -# more info on versioning: http://www.nondot.org/sabre/Mirrored/libtool-2.1a/libtool_6.html#SEC33 - -# before libsangoma 3.0.0 we really did not follow libtool versioning mechanism -# starting with 3.0.0 package and LT version of libsangoma we should NOT increment -# both the package version (specified in AC_INIT) and the libtool (LIBSANGOMA_LT_*) versions -# together just to have them match, they are not meant to match (but may do so by coincidence). -# Libtool version must be incremented just when there are library interface changes or bug fixes -# according to the libtool rules (read the document mentioned at the top of this file) -# the package version changes more feely as we wish (we put the rules there about when to change) -# for example, if we ever fix a bug in priserver.c and we want to make a release we can do so -# without incrementing libsangoma LT version - -AC_PREREQ(2.59) -AC_INIT([libsangoma],[3.0.0],[ncorbic@sangoma.com]) -AC_CONFIG_HEADERS(config.h) -AM_INIT_AUTOMAKE - -LIBSANGOMA_LT_CURRENT=3 # interface 3 -LIBSANGOMA_LT_REVISION=0 # first revision of this interface -LIBSANGOMA_LT_AGE=0 #not backwards compatible (0 previous interfaces are compatible) - -<<<<<<< .mine - -======= -AC_CONFIG_MACRO_DIR([m4]) - ->>>>>>> .r196 -AC_SUBST(LIBSANGOMA_LT_CURRENT) -AC_SUBST(LIBSANGOMA_LT_REVISION) -AC_SUBST(LIBSANGOMA_LT_AGE) - -# Checks for programs. -AC_PROG_CC -AC_PROG_LIBTOOL -AC_CHECK_PROG(AR, ar, ar, no) - - -# Checks for library headers -AC_CHECK_HEADERS(fcntl.h netinet/in.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h unistd.h math.h) - -# Checks for libpri support -AC_ARG_WITH(libpri, - [ --with-libpri= enable pri support],[LIBPRI_PATH="$withval"]) -AM_CONDITIONAL([LIBPRI],[test -d "$LIBPRI_PATH" ]) -AC_SUBST([LIBPRI_PATH]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_HEADER_TIME - -# Checks for library functions. -AC_FUNC_SELECT_ARGTYPES -AC_CHECK_FUNCS([gettimeofday memset select socket]) -AC_CONFIG_FILES([Makefile]) -AC_OUTPUT - diff --git a/api/libsangoma/.svn/tmp/tempfile.13.tmp b/api/libsangoma/.svn/tmp/tempfile.13.tmp deleted file mode 100644 index 6be76a4..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.13.tmp +++ /dev/null @@ -1,2375 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.c - * \brief Wanpipe API Code Library for Sangoma AFT T1/E1/Analog/BRI/Serial hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - ******************************************************************************* - */ - -#include "libsangoma-pvt.h" - -static void libsng_dbg(const char * fmt, ...) -{ - va_list args; - char buf[1024]; - va_start(args, fmt); - _vsnprintf(buf, sizeof(buf), fmt, args); -#if defined(__WINDOWS__) - OutputDebugString(buf); -#else - printf(buf); -#endif - va_end(args); -} - -/*********************************************************************//** - * WINDOWS Only Section - *************************************************************************/ - -#define DBG_POLL if(0)libsng_dbg -#define DBG_EVNT if(0)libsng_dbg -#define DBG_ERR if(0)libsng_dbg("Error: %s() line: %d : ", __FUNCTION__, __LINE__);if(0)libsng_dbg -#define DBG_INIT if(0)libsng_dbg - -#if defined(__WINDOWS__) - -/* - \fn static void DecodeLastError(LPSTR lpszFunction) - \brief Decodes the Error in radable format. - \param lpszFunction error string - - Private Windows Only Function - */ -static void DecodeLastError(LPSTR lpszFunction) -{ - LPVOID lpMsgBuf; - DWORD dwLastErr = GetLastError(); - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - dwLastErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPTSTR) &lpMsgBuf, - 0, - NULL - ); - // Display the string. - DBG_POLL("Last Error in %s(): %s (%d)\n", lpszFunction, lpMsgBuf, dwLastErr); - // Free the buffer. - LocalFree( lpMsgBuf ); -} - -/* - \fn static int handle_device_ioctl_result(int bResult) - \brief Checks result code of ioctl - \param bResult result of ioctl call - - Private Windows Only Function - */ -static u16 handle_device_ioctl_result(int bResult, char *caller_name) -{ - if(bResult == 0){ - //error - DecodeLastError(caller_name); - return 1; - - }else{ - return 0; - } -} - -/* - \fn static int DoManagementCommand(HANDLE fd, wan_udp_hdr_t* wan_udp) - \brief Executes Driver Management Command - \param fd device file descriptor - \param wan_udp managemet cmd structure - - Private Windows Function - */ -static int DoManagementCommand(HANDLE fd, wan_udp_hdr_t* wan_udp) -{ - DWORD ln, bIoResult; - unsigned char id = 0; - - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - bIoResult = DeviceIoControl( - fd, - IoctlManagementCommand, - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int DoTdmvApiCommand(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) - \brief Executes Driver TDM API Command - \param fd device file descriptor - \param api_cmd tdm_api managemet cmd structure - - Private Windows Function - */ -static int DoTdmvApiCommand(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlTdmApiCommand, - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int tdmv_api_ioctl(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) - \brief Executes Driver TDM API Command Wrapper Function - \param fd device file descriptor - \param api_cmd tdm_api managemet cmd structure - - Private Windows Function - */ -static int tdmv_api_ioctl(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - if(DoTdmvApiCommand(fd, api_cmd)){ - return SANG_STATUS_GENERAL_ERROR; - } - - return api_cmd->result; -} - -/* - \fn static USHORT DoReadCommand(HANDLE drv, RX_DATA_STRUCT * pRx) - \brief API READ Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - This function will NOT block because using IoctlReadCommandNonBlocking. - */ -static USHORT DoReadCommand(HANDLE drv, RX_DATA_STRUCT * pRx) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlReadCommandNonBlocking, - (LPVOID)NULL,//NO input buffer! - 0, - (LPVOID)pRx, - sizeof(RX_DATA_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static UCHAR DoWriteCommand(HANDLE drv, TX_DATA_STRUCT * pTx) - \brief API Write Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - In Legacy API mode this fuction will Block if data is busy. - In API mode no function is allowed to Block - */ -static UCHAR DoWriteCommand(HANDLE drv, - void *input_data_buffer, u32 size_of_input_data_buffer, - void *output_data_buffer, u32 size_of_output_data_buffer - ) -{ - DWORD BytesReturned, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlWriteCommand, - (LPVOID)input_data_buffer, - size_of_input_data_buffer, - (LPVOID)output_data_buffer, - size_of_output_data_buffer, - (LPDWORD)(&BytesReturned), - (LPOVERLAPPED)NULL); - - return (UCHAR)handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static USHORT sangoma_poll_fd(HANDLE drv, API_POLL_STRUCT *api_poll_ptr) - \brief Non Blocking API Poll function used to find out if Rx Data, Events or - Free Tx buffer available - \param drv device file descriptor - \param api_poll_ptr poll device that stores polling information read/write/event - \param overlapped pointer to system overlapped io structure. - - Private Windows Function - */ -static USHORT sangoma_poll_fd(sng_fd_t fd, API_POLL_STRUCT *api_poll_ptr) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlApiPoll, - (LPVOID)NULL, - 0L, - (LPVOID)api_poll_ptr, - sizeof(API_POLL_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -static USHORT DoSetSharedEventCommand(HANDLE drv, PREGISTER_EVENT event) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlSetSharedEvent, - (LPVOID)event, - sizeof(REGISTER_EVENT), - (LPVOID)event, - sizeof(REGISTER_EVENT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -static int init_sangoma_event_object(sangoma_wait_obj_t *sng_wait_obj, int flags_in) -{ - int event_index = -1; - - if(flags_in & POLLIN){ - event_index = LIBSNG_EVENT_INDEX_POLLIN; - } - - if(flags_in & POLLOUT){ - event_index = LIBSNG_EVENT_INDEX_POLLOUT; - } - - if(flags_in & POLLPRI){ - event_index = LIBSNG_EVENT_INDEX_POLLPRI; - } - - if(event_index == -1){ - /* invalid 'flags_in', this should be an assert */ - return SANG_STATUS_GENERAL_ERROR; - } - - sng_wait_obj->sng_event_objects[event_index].hEvent = CreateEvent( NULL, FALSE, FALSE, NULL); - if(!sng_wait_obj->sng_event_objects[event_index].hEvent){ - //error - return SANG_STATUS_GENERAL_ERROR; - } - - sng_wait_obj->sng_event_objects[event_index].user_flags_bitmap = flags_in; - if(DoSetSharedEventCommand(sng_wait_obj->fd, &sng_wait_obj->sng_event_objects[event_index])){ - //error - return SANG_STATUS_GENERAL_ERROR; - } - - return sng_wait_obj->sng_event_objects[event_index].operation_status; -} - -static void sangoma_reset_wait_obj(sangoma_wait_obj_t *sng_wait_obj, int flags_in) -{ - if(flags_in & POLLIN){ - if(sng_wait_obj->sng_event_objects[LIBSNG_EVENT_INDEX_POLLIN].hEvent){ - ResetEvent(sng_wait_obj->sng_event_objects[LIBSNG_EVENT_INDEX_POLLIN].hEvent); - } - } - - if(flags_in & POLLOUT){ - if(sng_wait_obj->sng_event_objects[LIBSNG_EVENT_INDEX_POLLOUT].hEvent){ - ResetEvent(sng_wait_obj->sng_event_objects[LIBSNG_EVENT_INDEX_POLLOUT].hEvent); - } - } - - if(flags_in & POLLPRI){ - if(sng_wait_obj->sng_event_objects[LIBSNG_EVENT_INDEX_POLLPRI].hEvent){ - ResetEvent(sng_wait_obj->sng_event_objects[LIBSNG_EVENT_INDEX_POLLPRI].hEvent); - } - } -} - -static sangoma_status_t _SAPI_CALL sangoma_wait_obj_poll(sangoma_wait_obj_t *sangoma_wait_object, int flags_in, int *flags_out) -{ - int err; - sangoma_wait_obj_t *sng_wait_obj = sangoma_wait_object; - /*! api structure used by windows IoctlApiPoll call */ - API_POLL_STRUCT api_poll; - - *flags_out = 0; - - memset(&api_poll, 0x00, sizeof(API_POLL_STRUCT)); - api_poll.user_flags_bitmap = flags_in; - - /* This call is non-blocking - it will return immediatly. */ - if(sangoma_poll_fd(sng_wait_obj->fd, &api_poll)){ - /* error - ioctl failed */ - return SANG_STATUS_IO_ERROR; - } - - if(api_poll.operation_status == SANG_STATUS_SUCCESS){ - *flags_out = api_poll.poll_events_bitmap; - err = 0; - }else{ - /* error - command failed */ - err = api_poll.operation_status; - } - - if(*flags_out == 0){ - DBG_POLL("======%s(): *flags_out: 0x%X, flags_in: 0x%X\n", __FUNCTION__, *flags_out, flags_in); - } - return err; -} - -static int check_number_of_wait_objects(uint32_t number_of_objects, const char *caller_function, int lineno) -{ - if(number_of_objects >= MAXIMUM_WAIT_OBJECTS){ - DBG_ERR("Caller: %s(): Line: %d: 'number_of_objects': %d is greater than the Maximum of: %d\n", - caller_function, lineno, number_of_objects, MAXIMUM_WAIT_OBJECTS); - return 1; - } - return 0; -} - -static sangoma_status_t get_out_flags(IN sangoma_wait_obj_t *sng_wait_objects[], - IN uint32_t in_flags[], OUT uint32_t out_flags[], - IN uint32_t number_of_sangoma_wait_objects, - IN BOOL reset_events_if_out_flags_set, - OUT BOOL *at_least_one_poll_set_flags_out) -{ - uint32_t i, j; - - if(at_least_one_poll_set_flags_out){ - *at_least_one_poll_set_flags_out = FALSE; - } - - for(i = 0; i < number_of_sangoma_wait_objects; i++) { - - sangoma_wait_obj_t *sangoma_wait_object = sng_wait_objects[i]; - if (!SANGOMA_OBJ_HAS_DEVICE(sangoma_wait_object)) { - continue; - } - - for(j = 0; j < LIBSNG_NUMBER_OF_EVENT_OBJECTS; j++){ - - if(!sangoma_wait_object->sng_event_objects[j].hEvent) { - continue; - } - - if(sangoma_wait_obj_poll(sangoma_wait_object, in_flags[i], &out_flags[i])){ - return SANG_STATUS_GENERAL_ERROR; - } - - if( out_flags[i] & in_flags[i] ){ - if(TRUE == reset_events_if_out_flags_set){ - sangoma_reset_wait_obj(sangoma_wait_object, out_flags[i]);/* since we are NOT going to wait on this event, reset it 'manually' */ - } - if(at_least_one_poll_set_flags_out){ - *at_least_one_poll_set_flags_out = TRUE; - } - } - } - } - - return SANG_STATUS_SUCCESS; -} -#endif /* __WINDOWS__ */ - - -/*********************************************************************//** - * Common Linux & Windows Code - *************************************************************************/ - - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - -/*! - \fn sangoma_status_t sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) - \brief Create a wait object that will be used with sangoma_waitfor_many() API - \param sangoma_wait_object pointer a single device object - \param fd device file descriptor - \param object_type type of the wait object. see sangoma_wait_obj_type_t for types - \see sangoma_wait_obj_type_t - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) -{ - int err = 0; - sangoma_wait_obj_t *sng_wait_obj; - - if (!sangoma_wait_object) { - return SANG_STATUS_INVALID_DEVICE; - } - *sangoma_wait_object = NULL; - sng_wait_obj = malloc(sizeof(**sangoma_wait_object)); - if (!sng_wait_obj) { - return SANG_STATUS_FAILED_ALLOCATE_MEMORY; - } - - memset(sng_wait_obj, 0x00, sizeof(*sng_wait_obj)); - /* it is a first initialization of the object */ - sng_wait_obj->init_flag = LIBSNG_MAGIC_NO; - - sng_wait_obj->fd = fd; - sng_wait_obj->object_type = object_type; - -#if defined(__WINDOWS__) - DBG_INIT("%s(): sng_wait_obj ptr: 0x%p\n", __FUNCTION__, sng_wait_obj); - DBG_INIT("%s(): fd: 0x%X, object_type: %s\n", __FUNCTION__, fd, DECODE_SANGOMA_WAIT_OBJECT_TYPE(object_type)); - DBG_INIT("%s(): sizeof(**sangoma_wait_object): %d\n", __FUNCTION__, sizeof(**sangoma_wait_object)); - - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sng_wait_obj->generic_event_object.hEvent = CreateEvent( NULL, FALSE, FALSE, NULL); - if(!sng_wait_obj->generic_event_object.hEvent){ - return SANG_STATUS_GENERAL_ERROR; - } - } - - if(SANGOMA_GENERIC_WAIT_OBJ == object_type){ - /* everything is done for the generic wait object */ - *sangoma_wait_object = sng_wait_obj; - return SANG_STATUS_SUCCESS; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLIN /* must be a SINGLE bit because there is a signaling object for each bit */); - if(SANG_STATUS_SUCCESS != err){ - return err; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLOUT /* must be a SINGLE bit because there is a signaling object for each bit */); - if(SANG_STATUS_SUCCESS != err){ - return err; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLPRI /* must be a SINGLE bit because there is a signaling object for each bit */); - if(SANG_STATUS_SUCCESS != err) { - return err; - } - - DBG_INIT("%s(): returning: %d", __FUNCTION__, err); -#else - int filedes[2]; - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sng_wait_obj->signal_read_fd = INVALID_HANDLE_VALUE; - sng_wait_obj->signal_write_fd = INVALID_HANDLE_VALUE; - /* if we want cross-process event notification we can use a named pipe with mkfifo() */ - if (pipe(filedes)) { - return -1; - } - sng_wait_obj->signal_read_fd = filedes[0]; - sng_wait_obj->signal_write_fd = filedes[1]; - } -#endif - *sangoma_wait_object = sng_wait_obj; - return err; -} - -/*! - \fn sangoma_status_t sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) - \brief De-allocate all resources in a wait object - \param sangoma_wait_object pointer to a pointer to a single device object - \return SANG_STATUS_SUCCESS on success or some sangoma status error -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) -{ - sangoma_wait_obj_t *sng_wait_obj = *sangoma_wait_object; -#if defined(__WINDOWS__) - int index = 0; -#endif - - if(sng_wait_obj->init_flag != LIBSNG_MAGIC_NO){ - /* error. object was not initialized by sangoma_wait_obj_init() */ - return SANG_STATUS_INVALID_DEVICE; - } - -#if defined(__WINDOWS__) - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sangoma_close(&sng_wait_obj->generic_event_object.hEvent); - } - if (SANGOMA_OBJ_HAS_DEVICE(sng_wait_obj)) { - for(index = 0; index < LIBSNG_NUMBER_OF_EVENT_OBJECTS; index++){ - sangoma_close(&sng_wait_obj->sng_event_objects[index].hEvent); - } - } -#else - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sangoma_close(&sng_wait_obj->signal_read_fd); - sangoma_close(&sng_wait_obj->signal_write_fd); - } -#endif - sng_wait_obj->init_flag = 0; - sng_wait_obj->object_type = UNKNOWN_WAIT_OBJ; - *sangoma_wait_object = NULL; - return SANG_STATUS_SUCCESS; -} - -/*! - \fn void sangoma_wait_obj_signal(void *sangoma_wait_object) - \brief Set wait object to a signaled state - \param sangoma_wait_object pointer a single device object - \return 0 on success, non-zero on error -*/ -int _SAPI_CALL sangoma_wait_obj_signal(sangoma_wait_obj_t *sng_wait_obj) -{ - if (!SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - /* even when Windows objects are always signalable for the sake of providing - * a consistent interface to the user we downgrade the capabilities of Windows - * objects unless the sangoma wait object is explicitly initialized as signalable - * */ - return SANG_STATUS_INVALID_DEVICE; - } -#if defined(__WINDOWS__) - if(sng_wait_obj->generic_event_object.hEvent){ - if (!SetEvent(sng_wait_obj->generic_event_object.hEvent)) { - return SANG_STATUS_GENERAL_ERROR; - } - } -#else - /* at this point we know is a signalable object and has a signal_write_fd */ - if (write(sng_wait_obj->signal_write_fd, "s", 1) < 1) { - return SANG_STATUS_GENERAL_ERROR; - } -#endif - return SANG_STATUS_SUCCESS; -} - -/*! - \fn sng_fd_t sangoma_wait_obj_get_fd(void *sangoma_wait_object) - \brief Retrieve fd device file descriptor which was the 'fd' parameter for sangoma_wait_obj_init() - \param sangoma_wait_object pointer a single device object - \return fd - device file descriptor -*/ -sng_fd_t _SAPI_CALL sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sng_wait_obj) -{ - return sng_wait_obj->fd; -} - -/*! - \fn void sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Store the given context into provided sangoma wait object. - \brief This function is useful to associate a context with a sangoma wait object. - \param sangoma_wait_object pointer a single device object - \param context void pointer to user context - \return void -*/ -void _SAPI_CALL sangoma_wait_obj_set_context(sangoma_wait_obj_t *sng_wait_obj, void *context) -{ - sng_wait_obj->context = context; -} - -/*! - \fn void *sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Retrieve the user context (if any) that was set via sangoma_wait_obj_set_context. - \param sangoma_wait_object pointer a single device object - \return void* -*/ -void* _SAPI_CALL sangoma_wait_obj_get_context(sangoma_wait_obj_t *sng_wait_obj) -{ - return sng_wait_obj->context; -} - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], int32_t in_flags[], int32_t out_flags[] uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - \brief Wait for multiple sangoma waitable objects - \param sangoma_wait_objects pointer to array of wait objects previously created with sangoma_wait_obj_create - \param in_flags array of flags corresponding to the flags the user is interested on for each waitable object - \param out_flags array of flags corresponding to the flags that are ready in the waitable objects - \param number_of_sangoma_wait_objects size of the array of waitable objects and flags - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured check in sangoma_wait_objects, any other return code is some error -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sng_wait_objects[], uint32_t in_flags[], uint32_t out_flags[], - uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout) -{ -#if defined(__WINDOWS__) - HANDLE hEvents[MAXIMUM_WAIT_OBJECTS]; - int at_least_one_poll_set_flags_out, number_of_internal_signaling_objects, err; -#endif - uint32_t i = 0, j = 0; - - memset(out_flags, 0x00, number_of_sangoma_wait_objects * sizeof(out_flags[0])); -#if defined(__WINDOWS__) - /* This loop will calculate 'number_of_internal_signaling_objects' and will initialize 'hEvents' - * based on 'number_of_sangoma_wait_objects' and 'in_flags'. */ - number_of_internal_signaling_objects = 0; - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - sangoma_wait_obj_t *sangoma_wait_object = sng_wait_objects[i]; - - /* if SANGOMA_OBJ_IS_SIGNALABLE add the generic_event_object.hEvent to the hEvents */ - if(sangoma_wait_object->generic_event_object.hEvent){ - if(check_number_of_wait_objects(number_of_internal_signaling_objects, __FUNCTION__, __LINE__)){ - return SANG_STATUS_NO_FREE_BUFFERS; - } - hEvents[number_of_internal_signaling_objects] = sangoma_wait_object->generic_event_object.hEvent; - number_of_internal_signaling_objects++; - } - - for(j = 0; j < LIBSNG_NUMBER_OF_EVENT_OBJECTS; j++){ - if(sangoma_wait_object->sng_event_objects[j].hEvent){ - if( ((j == LIBSNG_EVENT_INDEX_POLLIN) && (in_flags[i] & POLLIN)) || - ((j == LIBSNG_EVENT_INDEX_POLLOUT) && (in_flags[i] & POLLOUT)) || - ((j == LIBSNG_EVENT_INDEX_POLLPRI) && (in_flags[i] & POLLPRI)) ){ - - if(check_number_of_wait_objects(number_of_internal_signaling_objects, __FUNCTION__, __LINE__)){ - return SANG_STATUS_NO_FREE_BUFFERS; - } - hEvents[number_of_internal_signaling_objects] = sangoma_wait_object->sng_event_objects[j].hEvent; - number_of_internal_signaling_objects++; - } - }/* if () */ - }/* for() */ - }/* for() */ - - if(number_of_internal_signaling_objects < 1){ - DBG_ERR("'number_of_internal_signaling_objects': %d is less than the Minimum of: 1!\n", - number_of_internal_signaling_objects); - /* error - most likely the user did not initialize sng_wait_objects[] */ - return SANG_STATUS_INVALID_PARAMETER; - } - - at_least_one_poll_set_flags_out = FALSE; - - /* It is important to get 'out flags' BEFORE the WaitForMultipleObjects() - * because it allows to keep API driver's transmit queue full. */ - err = get_out_flags(sng_wait_objects, in_flags, out_flags, number_of_sangoma_wait_objects, TRUE, &at_least_one_poll_set_flags_out); - if(SANG_ERROR(err)){ - return err; - } - - if(TRUE == at_least_one_poll_set_flags_out){ - return SANG_STATUS_SUCCESS; - } - - /* wait untill at least one of the events is signaled OR a 'system_wait_timeout' occured */ - if (WAIT_TIMEOUT == WaitForMultipleObjects(number_of_internal_signaling_objects, &hEvents[0], FALSE, system_wait_timeout)){ - return SANG_STATUS_APIPOLL_TIMEOUT; - } - - /* WaitForMultipleObjects() was waken by a Sangoma or by a non-Sangoma wait object. */ - err = get_out_flags(sng_wait_objects, in_flags, out_flags, number_of_sangoma_wait_objects, TRUE, NULL); - if(SANG_ERROR(err)){ - return err; - } - - return SANG_STATUS_SUCCESS; -#else - struct pollfd pfds[number_of_sangoma_wait_objects*2]; /* we need twice as many polls because of the sangoma signalable objects */ - char dummy_buf[1]; - int res; - j = 0; - - memset(pfds, 0, sizeof(pfds)); - - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - - if (SANGOMA_OBJ_HAS_DEVICE(sng_wait_objects[i])) { - pfds[i].fd = sng_wait_objects[i]->fd; - pfds[i].events = in_flags[i]; - } - - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_objects[i])) { - pfds[number_of_sangoma_wait_objects+j].fd = sng_wait_objects[i]->signal_read_fd; - pfds[number_of_sangoma_wait_objects+j].events = POLLIN; - j++; - } - } - - poll_try_again: - - res = poll(pfds, (number_of_sangoma_wait_objects + j), system_wait_timeout); - if (res > 0) { - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - out_flags[i] = pfds[i].revents; - } - for(i = 0; i < j; i++){ - /* TODO: we must do something extra for signalled objects like setting a flag. - * current user of the SANGOMA_OBJ_IS_SIGNALABLE feature is Netborder and they dont - * need to know which object was signaled. If we want to know which object was signaled - * we need a new libsangoma API sangoma_wait_obj_is_signaled() where in Windows we can - * use WaitForSingleObject to test the signaled state and in Linux we can set a flag in - * sng_wait_obj - * */ - if (pfds[number_of_sangoma_wait_objects+i].revents & POLLIN) { - /* read and discard the signal byte */ - read(pfds[number_of_sangoma_wait_objects+i].fd, &dummy_buf, 1); - } - } - } else if (res < 0 && errno == EINTR) { - /* TODO: decrement system_wait_timeout */ - goto poll_try_again; - } - if (res < 0) { - return SANG_STATUS_GENERAL_ERROR; - } - if (res == 0) { - return SANG_STATUS_APIPOLL_TIMEOUT; - } - return SANG_STATUS_SUCCESS; -#endif -} - - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int32_t inflags, int32_t *outflags, int32_t timeout) - \brief Wait for a single waitable object - \param sangoma_wait_obj pointer to array of file descriptors to wait for - \param timeout timeout in miliseconds in case of no event - \return SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured use sangoma_wait_obj_get_out_flags to check or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, uint32_t inflags, uint32_t *outflags, int32_t timeout) -{ - return sangoma_waitfor_many(&sangoma_wait_obj, &inflags, outflags, 1, timeout); -} - - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - - -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name) -{ -#if defined(__WINDOWS__) -/* FIXME: Not implemented */ - return -1; -#else - sprintf(interface_name,"s%ic%i",span,chan); -#endif - return 0; -} - -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan) -{ - char *p=NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'g') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 'w') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -int _SAPI_CALL sangoma_interface_wait_up(int span, int chan, int sectimeout) -{ -#if defined(__WINDOWS__) - /* Windows does not need to wait for interfaces to come up */ - return 0; -#else - char interface_name[FNAME_LEN]; - struct stat statbuf; - struct timeval endtime = {0,0}; - struct timeval curtime = {0,0}; - int counter; - int rc; - if (sectimeout >= 0 && gettimeofday(&endtime, NULL)) { - return -1; - } - snprintf(interface_name, sizeof(interface_name), "/dev/" WP_INTERFACE_NAME_FORM, span, chan); - endtime.tv_sec += sectimeout; - do { - counter = 0; - while ((rc = stat(interface_name, &statbuf)) && errno == ENOENT && counter != 10) { - poll(0, 0, 100); // test in 100ms increments - counter++; - } - if (!rc || errno != ENOENT) break; - if (gettimeofday(&curtime, NULL)) { - return -1; - } - } while (sectimeout < 0 || timercmp(&endtime, &curtime,>)); - return rc; -#endif -} - -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) -{ - char *p = NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'c') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 's') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -sng_fd_t _SAPI_CALL sangoma_open_api_span_chan(int span, int chan) -{ - sng_fd_t fd = INVALID_HANDLE_VALUE; - wanpipe_api_t tdm_api; - int err; - - fd = __sangoma_open_api_span_chan(span, chan); - -#if defined(__WINDOWS__) - if(fd == INVALID_HANDLE_VALUE){ - return fd; - } -#else - if (fd < 0) { - return fd; - } -#endif - - memset(&tdm_api,0,sizeof(tdm_api)); - tdm_api.wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - err=sangoma_cmd_exec(fd,&tdm_api); - if (err){ - sangoma_close(&fd); - return fd; - } - - if (tdm_api.wp_cmd.open_cnt > 1) { - /* this is NOT the first open request for this span/chan */ - sangoma_close(&fd); - fd = INVALID_HANDLE_VALUE;/* fd is NOT valid anymore */ - } - - return fd; -} - -/* no checks done for multiple open */ -sng_fd_t _SAPI_CALL __sangoma_open_api_span_chan(int span, int chan) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - - /* Form the Interface Name from span and chan number (i.e. wanpipe1_if1). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_INTERFACE_NAME_FORM, span, chan); - -#if defined(__WINDOWS__) - _snprintf(fname , FNAME_LEN, "\\\\.\\%s", tmp_fname); - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - -sng_fd_t _SAPI_CALL sangoma_open_api_ctrl(void) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - - /* Form the Ctrl Device Name. */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_CTRL_DEV_NAME); - -#if defined(__WINDOWS__) - _snprintf(fname , FNAME_LEN, "\\\\.\\%s", tmp_fname); - - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - - -int _SAPI_CALL sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return -1; - } - - return tdm_api->wp_cmd.open_cnt; -} - -sng_fd_t _SAPI_CALL sangoma_create_socket_by_name(char *device, char *card) -{ - int span,chan; - sangoma_interface_toi(device,&span,&chan); - - return sangoma_open_api_span_chan(span,chan); -} - - -sng_fd_t _SAPI_CALL sangoma_open_api_span(int span) -{ - int i=0; - sng_fd_t fd = INVALID_HANDLE_VALUE; - - for(i = 1; i < 32; i++){ - - fd = sangoma_open_api_span_chan(span, i); - -#if defined(__WINDOWS__) - if(fd != INVALID_HANDLE_VALUE){ -#else - if (fd >= 0) { -#endif - - //found free chan - break; - } - - }//for() - - return fd; -} - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void -*/ -void _SAPI_CALL sangoma_close(sng_fd_t *fd) -{ -#if defined(__WINDOWS__) - if( *fd != INVALID_HANDLE_VALUE){ - CloseHandle(*fd); - *fd = INVALID_HANDLE_VALUE; - } -#else - if (*fd >= 0) { - close(*fd); - *fd = -1; - } -#endif -} - - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -int _SAPI_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) -{ - int rx_len=0; - -#if defined(__WINDOWS__) - wp_api_hdr_t *rx_hdr = (wp_api_hdr_t*)hdrbuf; - wp_api_element_t wp_api_element; - - if(hdrlen != sizeof(wp_api_hdr_t)){ - //error - DBG_ERR("hdrlen (%i) != sizeof(wp_api_hdr_t) (%i)\n", hdrlen, sizeof(wp_api_hdr_t)); - return -1; - } - - if(DoReadCommand(fd, &wp_api_element)){ - //error - DBG_ERR("DoReadCommand() failed! Check messages log.\n"); - return -4; - } - - memcpy(rx_hdr, &wp_api_element.hdr, sizeof(wp_api_hdr_t)); - - switch(rx_hdr->operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: - /* ok */ - if(rx_hdr->data_length <= datalen){ - memcpy(databuf, wp_api_element.data, rx_hdr->data_length); - }else{ - rx_hdr->operation_status = SANG_STATUS_BUFFER_TOO_SMALL; - } - break; - default: - /* note that SANG_STATUS_NO_DATA_AVAILABLE is NOT an error! */ - if(0)DBG_ERR("Operation Status: %s(%d)\n", - SDLA_DECODE_SANG_STATUS(rx_hdr->operation_status), rx_hdr->operation_status); - return -5; - } - - rx_len = rx_hdr->data_length; -#else - struct msghdr msg; - struct iovec iov[2]; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - rx_len = read(fd,&msg,sizeof(msg)); - - if (rx_len <= sizeof(wp_api_hdr_t)){ - return -EINVAL; - } - - rx_len-=sizeof(wp_api_hdr_t); -#endif - return rx_len; -} - -int _SAPI_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) -{ - int bsent=-1; - wp_api_hdr_t *wp_api_hdr = hdrbuf; - - if (hdrlen != sizeof(wp_api_hdr_t)) { - /* error. Possible cause is a mismatch between versions of API header files. */ - DBG_ERR("hdrlen (%i) != sizeof(wp_api_hdr_t) (%i)\n", hdrlen, sizeof(wp_api_hdr_t)); - return -1; - } - -#if defined(__WINDOWS__) - //queue data for transmission - if(DoWriteCommand(fd, databuf, datalen, hdrbuf, hdrlen)){ - //error - DBG_ERR("DoWriteCommand() failed!! Check messages log.\n"); - return -1; - } - - bsent=0; - //check that frame was transmitted - switch(wp_api_hdr->operation_status) - { - case SANG_STATUS_SUCCESS: - bsent = datalen; - break; - default: - DBG_ERR("Operation Status: %s(%d)\n", - SDLA_DECODE_SANG_STATUS(wp_api_hdr->operation_status), wp_api_hdr->operation_status); - break; - }//switch() -#else - struct msghdr msg; - struct iovec iov[2]; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - bsent = write(fd,&msg,datalen+hdrlen); - - if (bsent == (datalen+hdrlen)){ - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_SUCCESS; - bsent-=sizeof(wp_api_hdr_t); - } else if (errno == EBUSY){ - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_DEVICE_BUSY; - } else { - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_IO_ERROR; - } - wp_api_hdr->wp_api_hdr_data_length=bsent; - - //FIXME - THIS SHOULD BE DONE IN KERNEL - wp_api_hdr->wp_api_tx_hdr_max_queue_length=16; - wp_api_hdr->wp_api_tx_hdr_number_of_frames_in_queue=0; - -#endif - return bsent; -} - - -#ifdef WANPIPE_TDM_API - - -/************************************************************//** - * Device API COMMAND Functions - ***************************************************************/ - - - -/*======================================================== - * Execute TDM command - * - */ -int _SAPI_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - -#if defined(__WINDOWS__) - err = tdmv_api_ioctl(fd, &tdm_api->wp_cmd); -#else - err = ioctl(fd,WANPIPE_IOCTL_API_CMD,&tdm_api->wp_cmd); - if (err < 0){ - char tmp[50]; - sprintf(tmp,"TDM API: CMD: %i\n",tdm_api->wp_cmd.cmd); - perror(tmp); - return -1; - } -#endif - return err; -} - -/*======================================================== - * Get Full TDM API configuration per channel - * - */ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FULL_CFG; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - -#if 0 - printf("TDM API CFG:\n"); - printf("\thw_tdm_coding:\t%d\n",tdm_api->wp_cmd.hw_tdm_coding); - printf("\thw_mtu_mru:\t%d\n",tdm_api->wp_cmd.hw_mtu_mru); - printf("\tusr_period:\t%d\n",tdm_api->wp_cmd.usr_period); - printf("\ttdm_codec:\t%d\n",tdm_api->wp_cmd.tdm_codec); - printf("\tpower_level:\t%d\n",tdm_api->wp_cmd.power_level); - printf("\trx_disable:\t%d\n",tdm_api->wp_cmd.rx_disable); - printf("\ttx_disable:\t%d\n",tdm_api->wp_cmd.tx_disable); - printf("\tusr_mtu_mru:\t%d\n",tdm_api->wp_cmd.usr_mtu_mru); - printf("\tidle flag:\t0x%02X\n",tdm_api->wp_cmd.idle_flag); - -#ifdef WP_API_FEATURE_FE_ALARM - printf("\tfe alarms:\t0x%02X\n",tdm_api->wp_cmd.fe_alarms); -#endif - - printf("\trx pkt\t%d\ttx pkt\t%d\n",tdm_api->wp_cmd.stats.rx_packets, - tdm_api->wp_cmd.stats.tx_packets); - printf("\trx err\t%d\ttx err\t%d\n", - tdm_api->wp_cmd.stats.rx_errors, - tdm_api->wp_cmd.stats.tx_errors); -#ifndef __WINDOWS__ - printf("\trx ovr\t%d\ttx idl\t%d\n", - tdm_api->wp_cmd.stats.rx_fifo_errors, - tdm_api->wp_cmd.stats.tx_carrier_errors); -#endif -#endif - - return 0; -} - -/*======================================================== - * SET Codec on a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_CODEC; - tdm_api->wp_cmd.tdm_codec = codec; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Codec from a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_CODEC; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.tdm_codec; -} - -/*======================================================== - * SET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_USR_PERIOD; - tdm_api->wp_cmd.usr_period = period; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_PERIOD; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_period; -} - -/*======================================================== - * GET Current User Hardware Coding Format - * - * Coding Format will be ULAW/ALAW based on T1/E1 - */ - -int _SAPI_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_CODING; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_tdm_coding; -} - -#ifdef WP_API_FEATURE_DTMF_EVENTS -/*======================================================== - * GET Current User Hardware DTMF Enabled/Disabled - * - * Will return true if HW DTMF is enabled on Octasic - */ - -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_DTMF; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_dtmf; -} - -/*======================================================== - * GET Current User Hardware EC Enabled/Disabled - * - * Will return true if HW EC is enabled - */ - -int _SAPI_CALL sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_EC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_ec; -} -#endif - -/*======================================================== - * GET Current User MTU/MRU values in bytes. - * - * The USER MTU/MRU values will change each time a PERIOD - * or CODEC is adjusted. - */ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_MTU_MRU; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_mtu_mru; -} - -/*======================================================== - * SET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_POWER_LEVEL; - tdm_api->wp_cmd.power_level = power; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_POWER_LEVEL; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.power_level; -} - -int _SAPI_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_BUFFERS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_RBS_EVENTS; - tdm_api->wp_cmd.rbs_poll=poll_in_sec; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_RBS_EVENTS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs) -{ - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_WRITE_RBS_BITS; - tdm_api->wp_cmd.chan = (unsigned char)channel; - tdm_api->wp_cmd.rbs_tx_bits=rbs; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs) -{ - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_RBS_BITS; - tdm_api->wp_cmd.chan = (unsigned char)channel; - tdm_api->wp_cmd.rbs_tx_bits=0; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *rbs=(unsigned char)tdm_api->wp_cmd.rbs_rx_bits; - - return 0; -} - -int _SAPI_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - -#ifdef WP_API_FEATURE_EVENTS - wp_api_event_t *rx_event; - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_EVENT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - rx_event = &tdm_api->wp_cmd.event; - - - /* - The use of callbacks here is purely optional and is left - here for backward compatibility purposes. By default user - should handle events outside this funciton. This function - should only be used to read the event - */ - - switch (rx_event->wp_api_event_type){ - - case WP_API_EVENT_RBS: - if (tdm_api->wp_callback.wp_rbs_event) { - tdm_api->wp_callback.wp_rbs_event(fd,rx_event->wp_api_event_rbs_bits); - } - - break; - -#ifdef WP_API_FEATURE_DTMF_EVENTS - case WP_API_EVENT_DTMF: - if (tdm_api->wp_callback.wp_dtmf_event) { - tdm_api->wp_callback.wp_dtmf_event(fd, - rx_event->wp_api_event_dtmf_digit, - rx_event->wp_api_event_dtmf_type, - rx_event->wp_api_event_dtmf_port); - } - break; -#endif - - case WP_API_EVENT_RXHOOK: - if (tdm_api->wp_callback.wp_rxhook_event) { - tdm_api->wp_callback.wp_rxhook_event(fd, - rx_event->wp_api_event_hook_state); - } - break; - - case WP_API_EVENT_RING_DETECT: - if (tdm_api->wp_callback.wp_ring_detect_event) { - tdm_api->wp_callback.wp_ring_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - - case WP_API_EVENT_RING_TRIP_DETECT: - if (tdm_api->wp_callback.wp_ring_trip_detect_event) { - tdm_api->wp_callback.wp_ring_trip_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - -#ifdef WP_API_FEATURE_FE_ALARM - case WP_API_EVENT_ALARM: - if (tdm_api->wp_callback.wp_fe_alarm_event) { - tdm_api->wp_callback.wp_fe_alarm_event(fd, - rx_event->wp_api_event_alarm); - } - break; -#endif - -#ifdef WP_API_FEATURE_LINK_STATUS - /* Link Status */ - case WP_API_EVENT_LINK_STATUS: - if(tdm_api->wp_callback.wp_link_status_event){ - tdm_api->wp_callback.wp_link_status_event(fd, - rx_event->wp_api_event_link_status); - } - - break; -#endif - -#ifdef WP_API_FEATURE_POL_REV - case WP_API_EVENT_POLARITY_REVERSE: - break; -#endif - default: -#ifdef __WINDOWS__ - printf("libsangoma: %s fd=0x%p: Unknown TDM event!", __FUNCTION__,fd); -#else - printf("libsangoma: %s fd=%d: Unknown TDM event!", __FUNCTION__, fd); -#endif - break; - } - - return 0; -#else - printf("Error: Read Event not supported!\n"); - return -1; -#endif -} - -#ifdef WP_API_FEATURE_DTMF_EVENTS -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return err; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_TRIP_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_KEWL; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_START; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_ONHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_OFFHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = tone_id; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = 0x00; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - -#endif - -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_HWEC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_HWEC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -/*======================================================== - * GET Front End Alarms - * - */ -#ifdef WP_API_FEATURE_FE_ALARM -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_ALARMS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *alarms=tdm_api->wp_cmd.fe_alarms; - - return 0; -} - -/* get current Line Connection state - Connected/Disconnected */ -int _SAPI_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} -#endif - -/* get current Line Connection state - Connected/Disconnected */ -#ifdef WP_API_FEATURE_LINK_STATUS -int _SAPI_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} - -/* set current Line Connection state - Connected/Disconnected. valid only for ISDN BRI */ -int _SAPI_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_FE_STATUS; - tdm_api->wp_cmd.fe_status = new_status; - - return sangoma_cmd_exec(fd, tdm_api); -} -#endif - -int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.channel = (unsigned char)channel; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.channel = (unsigned char)channel; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd, tdm_api); -} - - -int _SAPI_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.tx_queue_sz; -} - -int _SAPI_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = size; - - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.rx_queue_sz; - -} - -int _SAPI_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = size; - - return sangoma_cmd_exec(fd, tdm_api); - -} - -int _SAPI_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_DRIVER_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(wan_driver_version_t)) { - if (drv_ver) { - memcpy(drv_ver,&tdm_api->wp_cmd.version,sizeof(wan_driver_version_t)); - } - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_FIRMWARE_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(unsigned char)) { - *ver = tdm_api->wp_cmd.data[0]; - } else { - return -1; - } - } - - return err; -} - - -int _SAPI_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_CPLD_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(unsigned char)) { - *ver = tdm_api->wp_cmd.data[0]; - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_STATS; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (stats) { - memcpy(stats,&tdm_api->wp_cmd.stats,sizeof(wanpipe_chan_stats_t)); - } - } - - return err; -} - -int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_RESET_STATS; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RM_RXFLASHTIME; - tdm_api->wp_cmd.rxflashtime=rxflashtime; - err = sangoma_cmd_exec(fd, tdm_api); - return err; -} - - -#ifndef LIBSANGOMA_LIGHT - - -/************************************************************//** - * Device PORT Control Functions - ***************************************************************/ - -static int sangoma_port_mgmnt_ioctl(sng_fd_t fd, port_management_struct_t *port_management) -{ - -#if defined(__WINDOWS__) - DWORD ln; - if(DeviceIoControl( - fd, - IoctlPortManagementCommand, - (LPVOID)port_management, - sizeof(port_management_struct_t), - (LPVOID)port_management, - sizeof(port_management_struct_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - //check messages log - printf("%s():Error: IoctlPortManagementCommand failed!!\n", __FUNCTION__); - return -1; - }else { - return 0; - } -#else - int err; - err=ioctl(fd,WANPIPE_IOCTL_PORT_MGMT,port_management); - if (err) { - return -1; - } else { - return 0; - } -#endif -} - -static int sangoma_port_cfg_ioctl(sng_fd_t fd, port_cfg_t *port_cfg) -{ - -#if defined(__WINDOWS__) - DWORD ln; - if(DeviceIoControl( - fd, - IoctlPortConfigurationCommand, - (LPVOID)port_cfg, - sizeof(port_cfg_t), - (LPVOID)port_cfg, - sizeof(port_cfg_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - //check messages log - printf("%s():Error: IoctlSetDriverConfiguration failed!!\n", __FUNCTION__); - return 1; - }else{ - return 0; - } -#else - int err; - err=ioctl(fd,WANPIPE_IOCTL_PORT_CONFIG,port_cfg); - if (err) { - return -1; - } else { - return 0; - } -#endif -} - -/* open wanpipe configuration device */ -sng_fd_t _SAPI_CALL sangoma_open_driver_ctrl(int port_no) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - -#if defined(__WINDOWS__) - /* Form the Config Device Name (i.e. wanpipe1, wanpipe2,...). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_PORT_NAME_FORM, port_no); - _snprintf(fname, FNAME_LEN, "\\\\.\\%s", tmp_fname); - - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - /* Form the Config Device Name. ("/dev/wanpipe") */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_CONFIG_DEV_NAME); - - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - - -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) -{ -#if defined(__WINDOWS__) - if(DoManagementCommand(fd, wan_udp)){ - return 1; - } -#else - unsigned char id = 0; - int err=0; - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - err=ioctl(fd,WANPIPE_IOCTL_PIPEMON,wan_udp); - if (err < 0) { - return 1; - } -#endif - - if(wan_udp->wan_udphdr_return_code != WAN_CMD_OK){ - return 2; - } - return 0; -} - -int _SAPI_CALL sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = START_PORT_VOLATILE_CONFIG; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - return err; - } - - if (port_mgmnt->operation_status != SANG_STATUS_SUCCESS ) { - err=port_mgmnt->operation_status; - } - - return err; -} - -int _SAPI_CALL sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = STOP_PORT; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - return err; - } - - if (port_mgmnt->operation_status != SANG_STATUS_SUCCESS){ - - if(port_mgmnt->operation_status == SANG_STATUS_CAN_NOT_STOP_DEVICE_WHEN_ALREADY_STOPPED) { - err = 0; - }else{ - err = port_mgmnt->operation_status; - } - } - - return err; -} - -int _SAPI_CALL sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = GET_HARDWARE_INFO; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - port_mgmnt->operation_status = SANG_STATUS_INVALID_DEVICE; - return err; - } - - if (port_mgmnt->operation_status != SANG_STATUS_SUCCESS ) { - err=port_mgmnt->operation_status; - } - - return err; -} - -int _SAPI_CALL sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) -{ - port_cfg->command_code = SET_PORT_VOLATILE_CONFIG; - port_cfg->port_no = port_no; - - return sangoma_port_cfg_ioctl(fd, port_cfg); -} - -int _SAPI_CALL sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) -{ - - port_cfg->command_code = GET_PORT_VOLATILE_CONFIG; - port_cfg->port_no = port_no; - - return sangoma_port_cfg_ioctl(fd, port_cfg); -} - -#endif - - -#endif /* WANPIPE_TDM_API */ diff --git a/api/libsangoma/.svn/tmp/tempfile.14.tmp b/api/libsangoma/.svn/tmp/tempfile.14.tmp deleted file mode 100644 index 8290ef8..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.14.tmp +++ /dev/null @@ -1,1305 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.h - * \brief Wanpipe API Library header for Sangoma AFT T1/E1/Analog/BRI/Serial Hardware - - * \brief Provides User a Unified/OS Agnostic API to Wanpipe/Sangoma Drivers and Hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * =============================================================================== - * v.2.0.0 Nenad Corbic - * Jan 30 2009 - * Added sangoma_get_driver_version, sangoma_get_firmware_version, - * sangoma_get_cpld_version functions,sangoma_get_stats,sangoma_flush_stats - */ - -#ifndef _LIBSNAGOMA_H -#define _LIBSNAGOMA_H - -#ifdef __cplusplus -extern "C" { /* for C++ users */ -#endif - -#include - - -/*! - \def WANPIPE_TDM_API - \brief Used by compiler and driver to enable TDM API -*/ -#define WANPIPE_TDM_API 1 - -/*TODO: LIBSANGOMA_VERSION_CODE should be generated out of LIBSANGOMA_LT_CURRENT and friends in configure.in */ - -/*! - \def LIBSANGOMA_VERSION - \brief LibSangoma Macro to check the Version Number -*/ -#define LIBSANGOMA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) - -/*! - \def LIBSANGOMA_VERSION_CODE - \brief LibSangoma Current Version Number to be checked against the LIBSANGOMA_VERSION Macro -*/ -#define LIBSANGOMA_VERSION_CODE LIBSANGOMA_VERSION(3,0,1) - -/*! - \def LIBSANGOMA_VERSION_STR - \brief LibSangoma Version in string format -*/ -#define LIBSANGOMA_VERSION_STR "3.0.1" - -#ifdef __COMPILING_LIBSANGOMA__ - struct sangoma_wait_obj; - #define sangoma_wait_obj_t struct sangoma_wait_obj -#else - typedef void sangoma_wait_obj_t; -#endif - -#if defined(WIN32) || defined(WIN64) -#ifndef __WINDOWS__ -#define __WINDOWS__ -#endif -#include -#include -#include -#include -#include - -/*! - \def _SAPI_CALL - \brief libsangoma.dll functions exported as __cdecl calling convention -*/ -#define _SAPI_CALL __cdecl - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT (deprecated, use SANGOMA_WAIT_INFINITE instead) - \brief Infinite poll timeout value -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT INFINITE -#define SANGOMA_WAIT_INFINITE INFINITE - -/*! - \def sangoma_msleep(x) - \brief milisecond sleep function -*/ -#define sangoma_msleep(x) Sleep(x) - -#else -/* L I N U X */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/*! - \def _SAPI_CALL - \brief Not used in Linux -*/ -#define _SAPI_CALL - -/*! - \def INVALID_HANDLE_VALUE - \brief Invalid file handle value -1, Ported from Windows -*/ -#define INVALID_HANDLE_VALUE -1 - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT (deprecated, use SANGOMA_WAIT_INFINITE instead) - \brief Infinite poll timeout value -1, Ported from Windows -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT -1 -#define SANGOMA_WAIT_INFINITE -1 - -/*! - \def __cdecl - \brief Ported from Windows - \typedef BOOL - \brief Boolean type int, Ported from Windows - \typedef DWORD - \brief DWORD type is int, Ported from Windows - \def FALSE - \brief FALSE value is 0, Ported from Windows - \def TRUE - \brief TRUE value is 1, Ported from Windows - \def sangoma_msleep(x) - \brief milisecond sleep function - \def _getch - \brief get character, Ported from Windows - \def Sleep - \brief milisecond sleep function - \typedef HANDLE - \brief file handle type int, Ported from Windows - \typedef TCHAR - \brief TCHAN type mapped to char, Ported from Windows - \typedef ULONG - \brief ULONG type mapped to unsigned long, Ported from Windows - \typedef UCHAR - \brief ULONG type mapped to unsigned char, Ported from Windows - \typedef USHORT - \brief USHORT type mapped to unsigned short, Ported from Windows - \typedef LPSTR - \brief LPSTR type mapped to unsigned char *, Ported from Windows - \typedef PUCHAR - \brief PUCHAR type mapped to unsigned char *, Ported from Windows - \typedef LPTHREAD_START_ROUTINE - \brief LPTHREAD_START_ROUTINE type mapped to unsigned char *, Ported from Windows - \def _stricmp - \brief _stricmp type mapped to _stricmp, Ported from Windows - \def _snprintf - \brief _snprintf type mapped to snprintf, Ported from Windows -*/ - -#define __cdecl - -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - -#define sangoma_msleep(x) usleep(x*1000) -#define _getch getchar -#define Sleep sangoma_msleep -#define _stricmp strcmp -#define _snprintf snprintf -#define _vsnprintf vsnprintf - -typedef int HANDLE; -typedef int BOOL; -typedef int DWORD; -typedef char TCHAR; -typedef unsigned char UCHAR; -typedef unsigned long ULONG; -typedef unsigned short USHORT; -typedef unsigned char * LPSTR; -typedef unsigned char * PUCHAR; -typedef void * LPTHREAD_START_ROUTINE; -typedef pthread_mutex_t CRITICAL_SECTION; - -#define EnterCriticalSection(arg) pthread_mutex_lock(arg) -#define LeaveCriticalSection(arg) pthread_mutex_unlock(arg) -#define InitializeCriticalSection(arg) pthread_mutex_init(arg, NULL); - -typedef struct tm SYSTEMTIME; -typedef char * LPCTSTR; - -#endif/* WIN32 */ - - -/*! - LIBSANGOMA_LIGHT can be used to enable only IO and EVENT - libsangoma functions. The DRIVER configuration/start/stop - functions are not compiled. - - LIBSANGOMA_LIGHT depends only on 3 header files. Instead - of all wanpipe header files needed for DRIVER management - - LIBSANGMOA_LIGHT is NOT enabled by default. -*/ - -#ifdef LIBSANGOMA_LIGHT -#include "wanpipe_api_iface.h" -#include "wanpipe_api_hdr.h" -#include "sdla_te1.h" -#include "wanpipe_events.h" -#include "wanpipe_api_deprecated.h" -#else -#include "wanpipe_api.h" -#endif - -/*! - * As of now this typedef maps exactly to SANG_STATUS_T, however that - * is a kernel type, ugly, ugly, uglyyyyy, we should have strictly - * minimum set of shared data structures between kernel and user - * many return codes specified in SANG_STATUS_T are kernel specific - * like FAILED_TO_LOCK_USER_MEMORY or INVALID_IRQL, the libsangoma - * user does not need that much information, and even if ever needs - * it we should provide simpler defaults - * \brief return status from sangoma APIs - */ -typedef int32_t sangoma_status_t; - -/*! - \def FNAME_LEN - \brief string length of a file name - \def FUNC_DBG(x) - \brief function debug print function - \def DBG_PRINT - \brief debug print function -*/ -#define FNAME_LEN 100 -#define FUNC_DBG(x) if(0)printf("%s():%d\n", x, __LINE__) -#define DBG_PRINT if(1)printf - -/*! - \typedef sangoma_api_hdr_t - \brief Backward comaptible define of wp_api_hdr_t -*/ -typedef wp_api_hdr_t sangoma_api_hdr_t; - -/*! - \enum _sangoma_wait_obj_type_t - \brief Wait object type definition - \typedef sangoma_wait_obj_type_t - \brief Wait object type definition -*/ -typedef enum _sangoma_wait_obj_type -{ - /*! \brief deprecated, use SANGOMA_GENERIC_WAIT_OBJ */ - UNKNOWN_WAIT_OBJ = 0, - /*! \brief Generic object that can be signaled but is not associated to any sangoma device */ - SANGOMA_GENERIC_WAIT_OBJ = 0, - /*! \brief Sangoma object associated to some device which cannot be signaled (cannot call sangoma_wait_obj_signal on it) */ - SANGOMA_DEVICE_WAIT_OBJ, - /*! \brief Sangoma object that is associated to a device AND can be signaled */ - SANGOMA_DEVICE_WAIT_OBJ_SIG, -} sangoma_wait_obj_type_t; - -#define DECODE_SANGOMA_WAIT_OBJECT_TYPE(type)\ - type == SANGOMA_GENERIC_WAIT_OBJ ? "SANGOMA_GENERIC_WAIT_OBJ" :\ - type == SANGOMA_DEVICE_WAIT_OBJ ? "SANGOMA_DEVICE_WAIT_OBJ" :\ - type == SANGOMA_DEVICE_WAIT_OBJ_SIG ? "SANGOMA_DEVICE_WAIT_OBJ_SIG" :\ - "Invalid Wait Object type!" - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - -/*! - \fn sng_fd_t sangoma_open_api_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Restriced open, device will allowed to be open only once. -*/ -sng_fd_t _SAPI_CALL sangoma_open_api_span_chan(int span, int chan); - - -/*! - \fn sng_fd_t __sangoma_open_api_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _SAPI_CALL __sangoma_open_api_span_chan(int span, int chan); -#define __sangoma_open_tdmapi_span_chan __sangoma_open_api_span_chan - -/*! - \fn sng_fd_t sangoma_open_tdmapi_span(int span) - \brief Open a first available device on a Span - \param span span number starting from 1 to 255 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _SAPI_CALL sangoma_open_api_span(int span); - - -/*! - \def sangoma_create_socket_intr - \brief Backward compatible open span chan call -*/ - - - -/*! - \def LIBSANGOMA_TDMAPI_CTRL - \brief Global control device feature -*/ -#ifndef LIBSANGOMA_TDMAPI_CTRL -#define LIBSANGOMA_TDMAPI_CTRL 1 -#endif - -/*! - \fn sng_fd_t sangoma_open_api_ctrl(void) - \brief Open a Global Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t _SAPI_CALL sangoma_open_api_ctrl(void); - - -/*! - \fn sng_fd_t sangoma_open_driver_ctrl(int port_no) - \brief Open a Global Driver Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t _SAPI_CALL sangoma_open_driver_ctrl(int port_no); - - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void - -*/ -void _SAPI_CALL sangoma_close(sng_fd_t *fd); - - - -/*! - \fn int sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get device open count - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative or 0: error, greater than 1 : open count -*/ - -int _SAPI_CALL sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -/*! - \fn int sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) - \brief Write Data to device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be transmitted - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return transmit size, must be equal to datalen, anything else is error - - In case of error return code, one must check the header operation_status - variable to identify the reason of an error. Please refer to the error codes. -*/ - -int _SAPI_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, unsigned short datalen, int flag); - - -/*! - \fn int sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) - \brief Read Data from device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be received - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return received size, must be equal to datalen, anything else is error or busy - - In case of error return code, one must check the header operation_status - variable to identify the reason of error. Please refer to the error codes. -*/ -int _SAPI_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, int datalen, int flag); - - - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int32_t inflags, int32_t *outflags, int32_t timeout) - \brief Wait for a single waitable object - \param sangoma_wait_obj pointer to array of file descriptors to wait for - \param timeout timeout in miliseconds in case of no event - \return SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured use sangoma_wait_obj_get_out_flags to check or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, uint32_t inflags, uint32_t *outflags, int32_t timeout); - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], int32_t in_flags[], int32_t out_flags[] uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - \brief Wait for multiple sangoma waitable objects - \param sangoma_wait_objects pointer to array of wait objects previously created with sangoma_wait_obj_create - \param in_flags array of flags corresponding to the flags the user is interested on for each waitable object - \param out_flags array of flags corresponding to the flags that are ready in the waitable objects - \param number_of_sangoma_wait_objects size of the array of waitable objects and flags - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured check in sangoma_wait_objects, any other return code is some error -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], uint32_t in_flags[], uint32_t out_flags[], - uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - -/*! - Users should be careful when using this function. You should just call this function once per sangoma device. If you attempt to use this function - twice on the same device (even if different sng_fd_t are used) you will end up with a waitable object that no longer gets notified about events - This is a fair limitation though, since there is no point on creating more than one waitable object per sangoma device. Even if you have one thread - for signaling, one for reading and one for writing, the 3 threads can use the same sangoma waitable object. However you can delete the waitable - object and create a new one if you need it. - \fn sangoma_status_t sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) - \brief Create a wait object that will be used with sangoma_waitfor_many() API - \param sangoma_wait_object pointer a single device object - \param fd device file descriptor - \param object_type type of the wait object. see sangoma_wait_obj_type_t for types - \see sangoma_wait_obj_type_t - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type); - -/*! - \fn sangoma_status_t sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) - \brief De-allocate all resources inside a wait object which were allocated by sangoma_wait_obj_init(). - \param sangoma_wait_object pointer to a pointer to a single device object - \return SANG_STATUS_SUCCESS on success or some sangoma status error -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object); - -/*! - \fn void sangoma_wait_obj_signal(sangoma_wait_obj_t *sangoma_wait_object) - \brief Set wait object to a signaled state - \param sangoma_wait_object pointer a single device object that can be signaled - \return sangoma_status_t -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_signal(sangoma_wait_obj_t *sangoma_wait_object); - -/*! - \fn sng_fd_t sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sangoma_wait_object) - \brief Get fd device file descriptor which was the 'fd' parameter for sangoma_wait_obj_create(), not useful for generic objects - \param sangoma_wait_object pointer a single device object - \return sng_fd_t - device file descriptor -*/ -sng_fd_t _SAPI_CALL sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sangoma_wait_object); - -/*! - \fn void sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Store the given context into provided sangoma wait object. - \brief This function is useful to associate a context with a sangoma wait object. - \param sangoma_wait_object pointer a single device object - \param context void pointer to user context - \return void -*/ -void _SAPI_CALL sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object, void *context); - -/*! - \fn void *sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Retrieve the user context (if any) that was set via sangoma_wait_obj_set_context. - \param sangoma_wait_object pointer a single device object - \return void* -*/ -void* _SAPI_CALL sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object); - - -/************************************************************//** - * Device API COMMAND Functions - ***************************************************************/ - -/*! - \fn int sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Execute Sangoma API Command - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Read tdm api device configuration - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) - \brief Set Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \param period value in miliseconds (1,2,5,10) - \return non-zero: error, 0: ok - - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period); - -/*! - \fn int sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured period value -*/ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx/Rx MTU/MRU in bytes - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured mtu/mru in bytes -*/ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) - \brief Enable RBS Events on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param poll_in_sec driver poll period for rbs events - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec); - -/*! - \fn int sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RBS Events for a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs) - \brief Write RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel t1/e1 timeslot - \param rbs rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs); - -/*! - \fn int sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs) - \brief Read RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel t1/e1 timeslot - \param rbs pointer to rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ - -int _SAPI_CALL sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs); - -/*! - \fn int sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) - \brief Transmit a TONE on this device (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param tone_id tone type to transmit - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id); - -/*! - \fn int sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable TONE Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG ON HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG OFF HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG KEWL START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms); - \brief Get Front End Alarms (T1/E1 Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param alarms bit map status of T1/E1 alarms - \return non-zero: error, 0: ok - - Supported only on T1/E1 Cards -*/ -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms); - - - -#ifdef WP_API_FEATURE_LINK_STATUS -# ifndef LIBSANGOMA_GET_LINKSTATUS -/*! - \def LIBSANGOMA_GET_LINKSTATUS - \brief Get Link Status feature -*/ -# define LIBSANGOMA_GET_LINKSTATUS 1 -# endif - -/*! - \fn int sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - -*/ -int _SAPI_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status); - -#endif - -/* set current Line Connection state - Connected/Disconnected */ -#ifndef LIBSANGOMA_GET_FESTATUS -/*! - \def LIBSANGOMA_GET_FESTATUS - \brief Get Front End Status feature -*/ -#define LIBSANGOMA_GET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) - \brief Set Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param new_status new status 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status); - - -/*! - \fn int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) - \brief Enable BRI Bchannel loopback - used when debugging bri device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel bri bchannel 1 or 2 - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel); - -/*! - \fn int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) - \brief Disable BRI Bchannel loopback - used when debugging bri device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel bri bchannel 1 or 2 - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel); - - -/*! - \fn int sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \param size tx queue size (minimum value of 1) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size); - -/*! - \fn int sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Rx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \param size rx queue size (minimum value of 1) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size); - - -#ifndef LIBSANGOMA_GET_HWCODING -/*! - \def LIBSANGOMA_GET_HWCODING - \brief Get HW Coding Feature -*/ -#define LIBSANGOMA_GET_HWCODING 1 -#endif - -/*! - \fn int sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get HW Voice Coding (ulaw/alaw) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will return the low level voice coding - depending on configuration. (ulaw or alaw) -*/ -int _SAPI_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api); - - - -#ifndef LIBSANGOMA_GET_HWDTMF -/*! - \def LIBSANGOMA_GET_HWDTMF - \brief HW DTMF Feature -*/ -#define LIBSANGOMA_GET_HWDTMF 1 -#endif -/*! - \fn int sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if hwdtmf support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW DTMF. -*/ -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if hw echo cancelation support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW EC. -*/ -int _SAPI_CALL sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_span_chan_toif(int span, int chan, char *interface_name) - \brief Convert Span & Chan to interface name - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \param interface_name pointer to string where interface name will be written - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name); - -/*! - \fn int sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) - \brief Convert Interace Name to Span & Chan - \param interface_name pointer to string containing interface name - \param span integer pointer where to write span value - \param chan integer pointer where to write chan value - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_interface_wait_up(int span, int chan, int sectimeout) - \brief Wait for a sangoma device to come up (ie: Linux wait for /dev/wanpipex_1 to come up) - \param span span number of the device to wait - \param chan chan number of the device to wait - \param sectimeout how many seconds to wait for the device to come up, -1 to wait forever - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_interface_wait_up(int span, int chan, int sectimeout); - -/*! - \fn int sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver) - \brief Get Device Driver Version Number - \param fd device file descriptor - \param tdm_api tdm api command structure - \param drv_ver driver version structure that will contain the driver version - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver); - -/*! - \fn int sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) - \brief Get Hardware/Firmware Version - \param fd device file descriptor - \param tdm_api tdm api command structure - \param ver hardware/firmware version number - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver); - -/*! - \fn int sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) - \brief Get Hardare/CPLD Version - \param fd device file descriptor - \param tdm_api tdm api command structure - \param ver hardware/cpld version number - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver); - - -/*! - \fn int sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats) - \brief Get Device Statistics. Statistics will be available in tdm_api->wp_cmd.stats structure. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param stats stats structure will be filled with device stats. (Optional, can be left NULL) - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats); - -/*! - \fn int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush/Reset device statistics - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime) - \brief Set rxflashtime for FXS module Wink-Flash Event - \param fd device file descriptor - \param tdm_api tdm api command structure - \param rxflashtime time value - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime); - - - -/************************************************************//** - * Device EVENT Function - ***************************************************************/ - - -/*! - \fn int sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Read API Events - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - The TDM API structure will be populated with a TDM API or WAN Event. - This function usually used after wait() function indicated that event - has occured. -*/ -int _SAPI_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api); - - - -#ifndef LIBSANGOMA_LIGHT - -/************************************************************//** - * Device PORT Control Functions - ***************************************************************/ - -int _SAPI_CALL sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); -int _SAPI_CALL sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); -int _SAPI_CALL sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no); -int _SAPI_CALL sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no); -int _SAPI_CALL sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/************************************************************//** - * Device MANAGEMENT Functions - ***************************************************************/ - -/*! - \fn int sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) - \brief Execute Sangoma Management Command - \param fd device file descriptor - \param wan_udp management command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp); - - -#endif /* LIBSANGOMA_LIGHT */ - - -/*================================================================ - * DEPRECATED Function Calls - Not to be used any more - * Here for backward compatibility - *================================================================*/ - - -#ifndef LIBSANGOMA_SET_FESTATUS -/*! - \def LIBSANGOMA_SET_FESTATUS - \brief Set Front End Status Feature -*/ -#define LIBSANGOMA_SET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - - Deprecated - replaced by sangoma_tdm_get_link_status function -*/ -int _SAPI_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status); - - - -/*! - \fn int sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) - \brief Set TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \param codec codec to set (ulaw/alaw/slinear) - \return non-zero: error, 0: ok - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec); - -/*! - \fn int sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Configured TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured codec value - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn sng_fd_t sangoma_create_socket_by_name(char *device, char *card) - \brief Open a device based on a interface and card name - \param device interface name - \param card card name - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Deprecated - here for backward compatibility -*/ -sng_fd_t _SAPI_CALL sangoma_create_socket_by_name(char *device, char *card); - -/*! - \fn int sangoma_interface_toi(char *interface_name, int *span, int *chan) - \brief Convert Span & Chan to interface name - \param interface_name pointer to string where interface name will be written - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return non-zero = error, 0 = ok - Deprecated - here for backward compatibility -*/ -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) - \brief Set Power Level - so only data matching the power level would be passed up. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param power value of power - \return non-zero: error, 0: ok - - Deprecated - not used/implemented -*/ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power); - -/*! - \fn int sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Configured Power Level - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured power level - - Deprecated - not used/implemented -*/ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef __cplusplus -} -#endif - -/*! Backward compabile defines */ -#if !defined(__WINDOWS__) -#define sangoma_open_tdmapi_span_chan sangoma_open_api_span_chan -#define sangoma_open_tdmapi_span sangoma_open_api_span -#define sangoma_open_tdmapi_ctrl sangoma_open_api_ctrl -#define sangoma_tdm_get_fe_status sangoma_get_fe_status -#define sangoma_socket_close sangoma_close -#define sangoma_tdm_get_hw_coding sangoma_get_hw_coding -#define sangoma_tdm_set_fe_status sangoma_set_fe_status -#define sangoma_tdm_get_link_status sangoma_get_link_status -#define sangoma_tdm_flush_bufs sangoma_flush_bufs -#define sangoma_tdm_cmd_exec sangoma_cmd_exec -#define sangoma_tdm_read_event sangoma_read_event -#define sangoma_readmsg_tdm sangoma_readmsg -#define sangoma_readmsg_socket sangoma_readmsg -#define sangoma_sendmsg_socket sangoma_writemsg -#define sangoma_writemsg_tdm sangoma_writemsg -#define sangoma_create_socket_intr sangoma_open_api_span_chan -#endif - -#endif /* _LIBSNAGOMA_H */ - diff --git a/api/libsangoma/.svn/tmp/tempfile.15.tmp b/api/libsangoma/.svn/tmp/tempfile.15.tmp deleted file mode 100644 index a50df39..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.15.tmp +++ /dev/null @@ -1,55 +0,0 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -# Package and LT (libtool) versions are not the same (they can match sometimes though) -# see http://sources.redhat.com/autobook/autobook/autobook_91.html for details -# more info on versioning: http://www.nondot.org/sabre/Mirrored/libtool-2.1a/libtool_6.html#SEC33 - -# before libsangoma 3.0.0 we really did not follow libtool versioning mechanism -# starting with 3.0.0 package and LT version of libsangoma we should NOT increment -# both the package version (specified in AC_INIT) and the libtool (LIBSANGOMA_LT_*) versions -# together just to have them match, they are not meant to match (but may do so by coincidence). -# Libtool version must be incremented just when there are library interface changes or bug fixes -# according to the libtool rules (read the document mentioned at the top of this file) -# the package version changes more feely as we wish (we put the rules there about when to change) -# for example, if we ever fix a bug in priserver.c and we want to make a release we can do so -# without incrementing libsangoma LT version - -AC_INIT([libsangoma],[3.0.1],[ncorbic@sangoma.com]) -AC_CONFIG_HEADERS(config.h) -AM_INIT_AUTOMAKE - -LIBSANGOMA_LT_CURRENT=3 # interface 3 -LIBSANGOMA_LT_REVISION=0 # first revision of this interface -LIBSANGOMA_LT_AGE=1 #not backwards compatible (0 previous interfaces are compatible) - -#AC_CONFIG_MACRO_DIR([m4]) - -AC_SUBST(LIBSANGOMA_LT_CURRENT) -AC_SUBST(LIBSANGOMA_LT_REVISION) -AC_SUBST(LIBSANGOMA_LT_AGE) - -# Checks for programs. -AC_PROG_CC -AC_PROG_LIBTOOL -AC_CHECK_PROG(AR, ar, ar, no) - - -# Checks for library headers -AC_CHECK_HEADERS(fcntl.h netinet/in.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h unistd.h math.h) - -# Checks for libpri support -AC_ARG_WITH(libpri, - [ --with-libpri= enable pri support],[LIBPRI_PATH="$withval"]) -AM_CONDITIONAL([LIBPRI],[test -d "$LIBPRI_PATH" ]) -AC_SUBST([LIBPRI_PATH]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_HEADER_TIME - -# Checks for library functions. -AC_FUNC_SELECT_ARGTYPES -AC_CHECK_FUNCS([gettimeofday memset select socket]) -AC_CONFIG_FILES([Makefile]) -AC_OUTPUT - diff --git a/api/libsangoma/.svn/tmp/tempfile.16.tmp b/api/libsangoma/.svn/tmp/tempfile.16.tmp deleted file mode 100644 index 59ed4b6..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.16.tmp +++ /dev/null @@ -1,2384 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.c - * \brief Wanpipe API Code Library for Sangoma AFT T1/E1/Analog/BRI/Serial hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - ******************************************************************************* - */ - -#include "libsangoma-pvt.h" - -static void libsng_dbg(const char * fmt, ...) -{ - va_list args; - char buf[1024]; - va_start(args, fmt); - _vsnprintf(buf, sizeof(buf), fmt, args); -#if defined(__WINDOWS__) - OutputDebugString(buf); -#else - printf(buf); -#endif - va_end(args); -} - -/*********************************************************************//** - * WINDOWS Only Section - *************************************************************************/ - -#define DBG_POLL if(0)libsng_dbg -#define DBG_EVNT if(0)libsng_dbg -#define DBG_ERR if(0)libsng_dbg("Error: %s() line: %d : ", __FUNCTION__, __LINE__);if(0)libsng_dbg -#define DBG_INIT if(0)libsng_dbg - -#if defined(__WINDOWS__) - -/* - \fn static void DecodeLastError(LPSTR lpszFunction) - \brief Decodes the Error in radable format. - \param lpszFunction error string - - Private Windows Only Function - */ -static void DecodeLastError(LPSTR lpszFunction) -{ - LPVOID lpMsgBuf; - DWORD dwLastErr = GetLastError(); - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - dwLastErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPTSTR) &lpMsgBuf, - 0, - NULL - ); - // Display the string. - DBG_POLL("Last Error in %s(): %s (%d)\n", lpszFunction, lpMsgBuf, dwLastErr); - // Free the buffer. - LocalFree( lpMsgBuf ); -} - -/* - \fn static int handle_device_ioctl_result(int bResult) - \brief Checks result code of ioctl - \param bResult result of ioctl call - - Private Windows Only Function - */ -static u16 handle_device_ioctl_result(int bResult, char *caller_name) -{ - if(bResult == 0){ - //error - DecodeLastError(caller_name); - return 1; - - }else{ - return 0; - } -} - -/* - \fn static int DoManagementCommand(sng_fd_t fd, wan_udp_hdr_t* wan_udp) - \brief Executes Driver Management Command - \param fd device file descriptor - \param wan_udp managemet cmd structure - - Private Windows Function - */ -static int DoManagementCommand(sng_fd_t fd, wan_udp_hdr_t* wan_udp) -{ - DWORD ln, bIoResult; - unsigned char id = 0; - - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - bIoResult = DeviceIoControl( - fd, - IoctlManagementCommand, - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int DoTdmvApiCommand(sng_fd_t fd, wanpipe_tdm_api_cmd_t *api_cmd) - \brief Executes Driver TDM API Command - \param fd device file descriptor - \param api_cmd tdm_api managemet cmd structure - - Private Windows Function - */ -static int DoTdmvApiCommand(sng_fd_t fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlTdmApiCommand, - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int tdmv_api_ioctl(sng_fd_t fd, wanpipe_tdm_api_cmd_t *api_cmd) - \brief Executes Driver TDM API Command Wrapper Function - \param fd device file descriptor - \param api_cmd tdm_api managemet cmd structure - - Private Windows Function - */ -static int tdmv_api_ioctl(sng_fd_t fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - if(DoTdmvApiCommand(fd, api_cmd)){ - return SANG_STATUS_GENERAL_ERROR; - } - - return api_cmd->result; -} - -/* - \fn static USHORT DoReadCommand(sng_fd_t fd, RX_DATA_STRUCT * pRx) - \brief API READ Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - This function will NOT block because using IoctlReadCommandNonBlocking. - */ -static USHORT DoReadCommand(sng_fd_t fd, RX_DATA_STRUCT * pRx) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlReadCommandNonBlocking, - (LPVOID)NULL,//NO input buffer! - 0, - (LPVOID)pRx, - sizeof(RX_DATA_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static UCHAR DoWriteCommand(sng_fd_t fd, TX_DATA_STRUCT * pTx) - \brief API Write Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - In Legacy API mode this fuction will Block if data is busy. - In API mode no function is allowed to Block - */ -static UCHAR DoWriteCommand(sng_fd_t fd, - void *input_data_buffer, u32 size_of_input_data_buffer, - void *output_data_buffer, u32 size_of_output_data_buffer - ) -{ - DWORD BytesReturned, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlWriteCommand, - (LPVOID)input_data_buffer, - size_of_input_data_buffer, - (LPVOID)output_data_buffer, - size_of_output_data_buffer, - (LPDWORD)(&BytesReturned), - (LPOVERLAPPED)NULL); - - return (UCHAR)handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static USHORT sangoma_poll_fd(sng_fd_t fd, API_POLL_STRUCT *api_poll_ptr) - \brief Non Blocking API Poll function used to find out if Rx Data, Events or - Free Tx buffer available - \param drv device file descriptor - \param api_poll_ptr poll device that stores polling information read/write/event - \param overlapped pointer to system overlapped io structure. - - Private Windows Function - */ -static USHORT sangoma_poll_fd(sng_fd_t fd, API_POLL_STRUCT *api_poll_ptr) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlApiPoll, - (LPVOID)NULL, - 0L, - (LPVOID)api_poll_ptr, - sizeof(API_POLL_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -static int CdevCtrlCommand(sng_fd_t fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlCdevControlCommand, - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* This function is exported only for debugging purposes and NOT a part of API. */ -sangoma_status_t _SAPI_CALL sangoma_cdev_ctrl_cmd(sng_fd_t fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - if(CdevCtrlCommand(fd, api_cmd)){ - return SANG_STATUS_GENERAL_ERROR; - } - return api_cmd->result; -} - -static sangoma_status_t init_sangoma_event_object(sangoma_wait_obj_t *sng_wait_obj, int flags_in, sng_fd_t fd) -{ - int event_index = -1; - wanpipe_tdm_api_cmd_t tdm_api_cmd; - sangoma_status_t sng_status; - char event_name[200], tmp_event_name[200]; - - memset(&tdm_api_cmd, 0x00, sizeof(tdm_api_cmd)); - - tdm_api_cmd.cmd = WP_CDEV_CMD_GET_INTERFACE_NAME; - sng_status = sangoma_cdev_ctrl_cmd(fd, &tdm_api_cmd); - if(SANG_ERROR(sng_status)){ - DBG_ERR("sangoma_cdev_ctrl_cmd() failed!\n"); - return sng_status; - } - - DBG_EVNT("%s(): interface name: %s\n", __FUNCTION__, tdm_api_cmd.data); - - if(flags_in & POLLIN){ - event_index = LIBSNG_EVENT_INDEX_POLLIN; - /* Form the Event Name from Interface Name and Event Type (i.e. wanpipe1_if1_pollin). */ - _snprintf(tmp_event_name, sizeof(tmp_event_name), "%s_pollin", tdm_api_cmd.data); - } - - if(flags_in & POLLOUT){ - event_index = LIBSNG_EVENT_INDEX_POLLOUT; - /* Form the Event Name from Interface Name and Event Type (i.e. wanpipe1_if1_pollout). */ - _snprintf(tmp_event_name, sizeof(tmp_event_name), "%s_pollout", tdm_api_cmd.data); - } - - if(flags_in & POLLPRI){ - event_index = LIBSNG_EVENT_INDEX_POLLPRI; - /* Form the Event Name from Interface Name and Event Type (i.e. wanpipe1_if1_pollpri). */ - _snprintf(tmp_event_name, sizeof(tmp_event_name), "%s_pollpri", tdm_api_cmd.data); - } - - if(event_index == -1){ - /* invalid 'flags_in', this should be an assert */ - return SANG_STATUS_GENERAL_ERROR; - } - - /* 1. The Sangoma Device Driver creates Notification Events in "\\BaseNamedObjects\\Global\\" - * when first CreateFile() was called by a process. That means the Events will inherit - * the security attributes of the calling process, so the calling process will have - * the permissions to open the Events by calling OpenEvent(). Since Events are created - * "Global" subdirectory, the calling process does NOT need Administrator priveleges. - * 2. The Events are deleted when the last HANDLE for a device is closed by CloseHandle() - * or automatically by the system when calling process exits. */ - _snprintf(event_name, sizeof(event_name), "Global\\%s", tmp_event_name); - - sng_wait_obj->sng_event_objects[event_index] = OpenEvent(EVENT_ALL_ACCESS, TRUE, event_name); - if(NULL == sng_wait_obj->sng_event_objects[event_index]){ - /* error */ - DecodeLastError(__FUNCTION__); - return SANG_STATUS_GENERAL_ERROR; - } - - return SANG_STATUS_SUCCESS; -} - -static sangoma_status_t _SAPI_CALL sangoma_wait_obj_poll(sangoma_wait_obj_t *sangoma_wait_object, int flags_in, int *flags_out) -{ - int err; - sangoma_wait_obj_t *sng_wait_obj = sangoma_wait_object; - /*! api structure used by windows IoctlApiPoll call */ - API_POLL_STRUCT api_poll; - - *flags_out = 0; - - memset(&api_poll, 0x00, sizeof(API_POLL_STRUCT)); - api_poll.user_flags_bitmap = flags_in; - - /* This call is non-blocking - it will return immediatly. */ - if(sangoma_poll_fd(sng_wait_obj->fd, &api_poll)){ - /* error - ioctl failed */ - return SANG_STATUS_IO_ERROR; - } - - if(api_poll.operation_status == SANG_STATUS_SUCCESS){ - *flags_out = api_poll.poll_events_bitmap; - err = 0; - }else{ - /* error - command failed */ - err = api_poll.operation_status; - } - - if(*flags_out == 0){ - DBG_POLL("======%s(): *flags_out: 0x%X, flags_in: 0x%X\n", __FUNCTION__, *flags_out, flags_in); - } - return err; -} - -static int check_number_of_wait_objects(uint32_t number_of_objects, const char *caller_function, int lineno) -{ - if(number_of_objects >= MAXIMUM_WAIT_OBJECTS){ - DBG_ERR("Caller: %s(): Line: %d: 'number_of_objects': %d is greater than the Maximum of: %d\n", - caller_function, lineno, number_of_objects, MAXIMUM_WAIT_OBJECTS); - return 1; - } - return 0; -} - -static sangoma_status_t get_out_flags(IN sangoma_wait_obj_t *sng_wait_objects[], - IN uint32_t in_flags[], OUT uint32_t out_flags[], - IN uint32_t number_of_sangoma_wait_objects, - OUT BOOL *at_least_one_poll_set_flags_out) -{ - uint32_t i, j; - - if(at_least_one_poll_set_flags_out){ - *at_least_one_poll_set_flags_out = FALSE; - } - - for(i = 0; i < number_of_sangoma_wait_objects; i++) { - - sangoma_wait_obj_t *sangoma_wait_object = sng_wait_objects[i]; - if (!SANGOMA_OBJ_HAS_DEVICE(sangoma_wait_object)) { - continue; - } - - for(j = 0; j < LIBSNG_NUMBER_OF_EVENT_OBJECTS; j++){ - - if(!sangoma_wait_object->sng_event_objects[j]) { - continue; - } - - if(sangoma_wait_obj_poll(sangoma_wait_object, in_flags[i], &out_flags[i])){ - return SANG_STATUS_GENERAL_ERROR; - } - - if( out_flags[i] & in_flags[i] ){ - if(at_least_one_poll_set_flags_out){ - *at_least_one_poll_set_flags_out = TRUE; - } - } - } - } - - return SANG_STATUS_SUCCESS; -} -#endif /* __WINDOWS__ */ - - -/*********************************************************************//** - * Common Linux & Windows Code - *************************************************************************/ - - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - -/*! - \fn sangoma_status_t sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) - \brief Create a wait object that will be used with sangoma_waitfor_many() API - \param sangoma_wait_object pointer a single device object - \param fd device file descriptor - \param object_type type of the wait object. see sangoma_wait_obj_type_t for types - \see sangoma_wait_obj_type_t - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) -{ - int err = 0; - sangoma_wait_obj_t *sng_wait_obj; - - if (!sangoma_wait_object) { - return SANG_STATUS_INVALID_DEVICE; - } - *sangoma_wait_object = NULL; - sng_wait_obj = malloc(sizeof(**sangoma_wait_object)); - if (!sng_wait_obj) { - return SANG_STATUS_FAILED_ALLOCATE_MEMORY; - } - - memset(sng_wait_obj, 0x00, sizeof(*sng_wait_obj)); - /* it is a first initialization of the object */ - sng_wait_obj->init_flag = LIBSNG_MAGIC_NO; - - sng_wait_obj->fd = fd; - sng_wait_obj->object_type = object_type; - -#if defined(__WINDOWS__) - DBG_INIT("%s(): sng_wait_obj ptr: 0x%p\n", __FUNCTION__, sng_wait_obj); - DBG_INIT("%s(): fd: 0x%X, object_type: %s\n", __FUNCTION__, fd, DECODE_SANGOMA_WAIT_OBJECT_TYPE(object_type)); - DBG_INIT("%s(): sizeof(**sangoma_wait_object): %d\n", __FUNCTION__, sizeof(**sangoma_wait_object)); - - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sng_wait_obj->generic_event_object = CreateEvent( NULL, FALSE, FALSE, NULL); - if(!sng_wait_obj->generic_event_object){ - return SANG_STATUS_GENERAL_ERROR; - } - } - - if(SANGOMA_GENERIC_WAIT_OBJ == object_type){ - /* everything is done for the generic wait object */ - *sangoma_wait_object = sng_wait_obj; - return SANG_STATUS_SUCCESS; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLIN, fd); - if(SANG_STATUS_SUCCESS != err){ - return err; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLOUT, fd); - if(SANG_STATUS_SUCCESS != err){ - return err; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLPRI, fd); - if(SANG_STATUS_SUCCESS != err) { - return err; - } - - DBG_INIT("%s(): returning: %d", __FUNCTION__, err); -#else - int filedes[2]; - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sng_wait_obj->signal_read_fd = INVALID_HANDLE_VALUE; - sng_wait_obj->signal_write_fd = INVALID_HANDLE_VALUE; - /* if we want cross-process event notification we can use a named pipe with mkfifo() */ - if (pipe(filedes)) { - return -1; - } - sng_wait_obj->signal_read_fd = filedes[0]; - sng_wait_obj->signal_write_fd = filedes[1]; - } -#endif - *sangoma_wait_object = sng_wait_obj; - return err; -} - -/*! - \fn sangoma_status_t sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) - \brief De-allocate all resources in a wait object - \param sangoma_wait_object pointer to a pointer to a single device object - \return SANG_STATUS_SUCCESS on success or some sangoma status error -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) -{ - sangoma_wait_obj_t *sng_wait_obj = *sangoma_wait_object; -#if defined(__WINDOWS__) - int index = 0; -#endif - - if(sng_wait_obj->init_flag != LIBSNG_MAGIC_NO){ - /* error. object was not initialized by sangoma_wait_obj_init() */ - return SANG_STATUS_INVALID_DEVICE; - } - -#if defined(__WINDOWS__) - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sangoma_close(&sng_wait_obj->generic_event_object); - } - if (SANGOMA_OBJ_HAS_DEVICE(sng_wait_obj)) { - for(index = 0; index < LIBSNG_NUMBER_OF_EVENT_OBJECTS; index++){ - sangoma_close(&sng_wait_obj->sng_event_objects[index]); - } - } -#else - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sangoma_close(&sng_wait_obj->signal_read_fd); - sangoma_close(&sng_wait_obj->signal_write_fd); - } -#endif - sng_wait_obj->init_flag = 0; - sng_wait_obj->object_type = UNKNOWN_WAIT_OBJ; - *sangoma_wait_object = NULL; - return SANG_STATUS_SUCCESS; -} - -/*! - \fn void sangoma_wait_obj_signal(void *sangoma_wait_object) - \brief Set wait object to a signaled state - \param sangoma_wait_object pointer a single device object - \return 0 on success, non-zero on error -*/ -int _SAPI_CALL sangoma_wait_obj_signal(sangoma_wait_obj_t *sng_wait_obj) -{ - if (!SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - /* even when Windows objects are always signalable for the sake of providing - * a consistent interface to the user we downgrade the capabilities of Windows - * objects unless the sangoma wait object is explicitly initialized as signalable - * */ - return SANG_STATUS_INVALID_DEVICE; - } -#if defined(__WINDOWS__) - if(sng_wait_obj->generic_event_object){ - if (!SetEvent(sng_wait_obj->generic_event_object)) { - return SANG_STATUS_GENERAL_ERROR; - } - } -#else - /* at this point we know is a signalable object and has a signal_write_fd */ - if (write(sng_wait_obj->signal_write_fd, "s", 1) < 1) { - return SANG_STATUS_GENERAL_ERROR; - } -#endif - return SANG_STATUS_SUCCESS; -} - -/*! - \fn sng_fd_t sangoma_wait_obj_get_fd(void *sangoma_wait_object) - \brief Retrieve fd device file descriptor which was the 'fd' parameter for sangoma_wait_obj_init() - \param sangoma_wait_object pointer a single device object - \return fd - device file descriptor -*/ -sng_fd_t _SAPI_CALL sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sng_wait_obj) -{ - return sng_wait_obj->fd; -} - -/*! - \fn void sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Store the given context into provided sangoma wait object. - \brief This function is useful to associate a context with a sangoma wait object. - \param sangoma_wait_object pointer a single device object - \param context void pointer to user context - \return void -*/ -void _SAPI_CALL sangoma_wait_obj_set_context(sangoma_wait_obj_t *sng_wait_obj, void *context) -{ - sng_wait_obj->context = context; -} - -/*! - \fn void *sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Retrieve the user context (if any) that was set via sangoma_wait_obj_set_context. - \param sangoma_wait_object pointer a single device object - \return void* -*/ -void* _SAPI_CALL sangoma_wait_obj_get_context(sangoma_wait_obj_t *sng_wait_obj) -{ - return sng_wait_obj->context; -} - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], int32_t in_flags[], int32_t out_flags[] uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - \brief Wait for multiple sangoma waitable objects - \param sangoma_wait_objects pointer to array of wait objects previously created with sangoma_wait_obj_create - \param in_flags array of flags corresponding to the flags the user is interested on for each waitable object - \param out_flags array of flags corresponding to the flags that are ready in the waitable objects - \param number_of_sangoma_wait_objects size of the array of waitable objects and flags - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured check in sangoma_wait_objects, any other return code is some error -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sng_wait_objects[], uint32_t in_flags[], uint32_t out_flags[], - uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout) -{ -#if defined(__WINDOWS__) - HANDLE hEvents[MAXIMUM_WAIT_OBJECTS]; - int at_least_one_poll_set_flags_out, number_of_internal_signaling_objects, err; -#endif - uint32_t i = 0, j = 0; - - memset(out_flags, 0x00, number_of_sangoma_wait_objects * sizeof(out_flags[0])); -#if defined(__WINDOWS__) - /* This loop will calculate 'number_of_internal_signaling_objects' and will initialize 'hEvents' - * based on 'number_of_sangoma_wait_objects' and 'in_flags'. */ - number_of_internal_signaling_objects = 0; - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - sangoma_wait_obj_t *sangoma_wait_object = sng_wait_objects[i]; - - /* if SANGOMA_OBJ_IS_SIGNALABLE add the generic_event_object.hEvent to the hEvents */ - if(sangoma_wait_object->generic_event_object){ - if(check_number_of_wait_objects(number_of_internal_signaling_objects, __FUNCTION__, __LINE__)){ - return SANG_STATUS_NO_FREE_BUFFERS; - } - hEvents[number_of_internal_signaling_objects] = sangoma_wait_object->generic_event_object; - number_of_internal_signaling_objects++; - } - - for(j = 0; j < LIBSNG_NUMBER_OF_EVENT_OBJECTS; j++){ - if(sangoma_wait_object->sng_event_objects[j]){ - if( ((j == LIBSNG_EVENT_INDEX_POLLIN) && (in_flags[i] & POLLIN)) || - ((j == LIBSNG_EVENT_INDEX_POLLOUT) && (in_flags[i] & POLLOUT)) || - ((j == LIBSNG_EVENT_INDEX_POLLPRI) && (in_flags[i] & POLLPRI)) ){ - - if(check_number_of_wait_objects(number_of_internal_signaling_objects, __FUNCTION__, __LINE__)){ - return SANG_STATUS_NO_FREE_BUFFERS; - } - hEvents[number_of_internal_signaling_objects] = sangoma_wait_object->sng_event_objects[j]; - number_of_internal_signaling_objects++; - } - }/* if () */ - }/* for() */ - }/* for() */ - - if(number_of_internal_signaling_objects < 1){ - DBG_ERR("'number_of_internal_signaling_objects': %d is less than the Minimum of: 1!\n", - number_of_internal_signaling_objects); - /* error - most likely the user did not initialize sng_wait_objects[] */ - return SANG_STATUS_INVALID_PARAMETER; - } - - at_least_one_poll_set_flags_out = FALSE; - - /* It is important to get 'out flags' BEFORE the WaitForMultipleObjects() - * because it allows to keep API driver's transmit queue full. */ - err = get_out_flags(sng_wait_objects, in_flags, out_flags, number_of_sangoma_wait_objects, &at_least_one_poll_set_flags_out); - if(SANG_ERROR(err)){ - return err; - } - - if(TRUE == at_least_one_poll_set_flags_out){ - return SANG_STATUS_SUCCESS; - } - - /* wait untill at least one of the events is signaled OR a 'system_wait_timeout' occured */ - if (WAIT_TIMEOUT == WaitForMultipleObjects(number_of_internal_signaling_objects, &hEvents[0], FALSE, system_wait_timeout)){ - return SANG_STATUS_APIPOLL_TIMEOUT; - } - - /* WaitForMultipleObjects() was waken by a Sangoma or by a non-Sangoma wait object. */ - err = get_out_flags(sng_wait_objects, in_flags, out_flags, number_of_sangoma_wait_objects, NULL); - if(SANG_ERROR(err)){ - return err; - } - - return SANG_STATUS_SUCCESS; -#else - struct pollfd pfds[number_of_sangoma_wait_objects*2]; /* we need twice as many polls because of the sangoma signalable objects */ - char dummy_buf[1]; - int res; - j = 0; - - memset(pfds, 0, sizeof(pfds)); - - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - - if (SANGOMA_OBJ_HAS_DEVICE(sng_wait_objects[i])) { - pfds[i].fd = sng_wait_objects[i]->fd; - pfds[i].events = in_flags[i]; - } - - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_objects[i])) { - pfds[number_of_sangoma_wait_objects+j].fd = sng_wait_objects[i]->signal_read_fd; - pfds[number_of_sangoma_wait_objects+j].events = POLLIN; - j++; - } - } - - poll_try_again: - - res = poll(pfds, (number_of_sangoma_wait_objects + j), system_wait_timeout); - if (res > 0) { - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - out_flags[i] = pfds[i].revents; - } - for(i = 0; i < j; i++){ - /* TODO: we must do something extra for signalled objects like setting a flag. - * current user of the SANGOMA_OBJ_IS_SIGNALABLE feature is Netborder and they dont - * need to know which object was signaled. If we want to know which object was signaled - * we need a new libsangoma API sangoma_wait_obj_is_signaled() where in Windows we can - * use WaitForSingleObject to test the signaled state and in Linux we can set a flag in - * sng_wait_obj - * */ - if (pfds[number_of_sangoma_wait_objects+i].revents & POLLIN) { - /* read and discard the signal byte */ - read(pfds[number_of_sangoma_wait_objects+i].fd, &dummy_buf, 1); - } - } - } else if (res < 0 && errno == EINTR) { - /* TODO: decrement system_wait_timeout */ - goto poll_try_again; - } - if (res < 0) { - return SANG_STATUS_GENERAL_ERROR; - } - if (res == 0) { - return SANG_STATUS_APIPOLL_TIMEOUT; - } - return SANG_STATUS_SUCCESS; -#endif -} - - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int32_t inflags, int32_t *outflags, int32_t timeout) - \brief Wait for a single waitable object - \param sangoma_wait_obj pointer to array of file descriptors to wait for - \param timeout timeout in miliseconds in case of no event - \return SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured use sangoma_wait_obj_get_out_flags to check or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, uint32_t inflags, uint32_t *outflags, int32_t timeout) -{ - return sangoma_waitfor_many(&sangoma_wait_obj, &inflags, outflags, 1, timeout); -} - - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - - -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name) -{ -#if defined(__WINDOWS__) -/* FIXME: Not implemented */ - return -1; -#else - sprintf(interface_name,"s%ic%i",span,chan); -#endif - return 0; -} - -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan) -{ - char *p=NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'g') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 'w') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -int _SAPI_CALL sangoma_interface_wait_up(int span, int chan, int sectimeout) -{ -#if defined(__WINDOWS__) - /* Windows does not need to wait for interfaces to come up */ - return 0; -#else - char interface_name[FNAME_LEN]; - struct stat statbuf; - struct timeval endtime = {0,0}; - struct timeval curtime = {0,0}; - int counter; - int rc; - if (sectimeout >= 0 && gettimeofday(&endtime, NULL)) { - return -1; - } - snprintf(interface_name, sizeof(interface_name), "/dev/" WP_INTERFACE_NAME_FORM, span, chan); - endtime.tv_sec += sectimeout; - do { - counter = 0; - while ((rc = stat(interface_name, &statbuf)) && errno == ENOENT && counter != 10) { - poll(0, 0, 100); // test in 100ms increments - counter++; - } - if (!rc || errno != ENOENT) break; - if (gettimeofday(&curtime, NULL)) { - return -1; - } - } while (sectimeout < 0 || timercmp(&endtime, &curtime,>)); - return rc; -#endif -} - -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) -{ - char *p = NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'c') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 's') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -sng_fd_t _SAPI_CALL sangoma_open_api_span_chan(int span, int chan) -{ - sng_fd_t fd = INVALID_HANDLE_VALUE; - wanpipe_api_t tdm_api; - int err; - - fd = __sangoma_open_api_span_chan(span, chan); - -#if defined(__WINDOWS__) - if(fd == INVALID_HANDLE_VALUE){ - return fd; - } -#else - if (fd < 0) { - return fd; - } -#endif - - memset(&tdm_api,0,sizeof(tdm_api)); - tdm_api.wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - err=sangoma_cmd_exec(fd,&tdm_api); - if (err){ - sangoma_close(&fd); - return fd; - } - - if (tdm_api.wp_cmd.open_cnt > 1) { - /* this is NOT the first open request for this span/chan */ - sangoma_close(&fd); - fd = INVALID_HANDLE_VALUE;/* fd is NOT valid anymore */ - } - - return fd; -} - -/* no checks done for multiple open */ -sng_fd_t _SAPI_CALL __sangoma_open_api_span_chan(int span, int chan) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - - /* Form the Interface Name from span and chan number (i.e. wanpipe1_if1). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_INTERFACE_NAME_FORM, span, chan); - -#if defined(__WINDOWS__) - _snprintf(fname , FNAME_LEN, "\\\\.\\%s", tmp_fname); - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - -sng_fd_t _SAPI_CALL sangoma_open_api_ctrl(void) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - - /* Form the Ctrl Device Name. */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_CTRL_DEV_NAME); - -#if defined(__WINDOWS__) - _snprintf(fname , FNAME_LEN, "\\\\.\\%s", tmp_fname); - - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - - -int _SAPI_CALL sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return -1; - } - - return tdm_api->wp_cmd.open_cnt; -} - -sng_fd_t _SAPI_CALL sangoma_create_socket_by_name(char *device, char *card) -{ - int span,chan; - sangoma_interface_toi(device,&span,&chan); - - return sangoma_open_api_span_chan(span,chan); -} - - -sng_fd_t _SAPI_CALL sangoma_open_api_span(int span) -{ - int i=0; - sng_fd_t fd = INVALID_HANDLE_VALUE; - - for(i = 1; i < 32; i++){ - - fd = sangoma_open_api_span_chan(span, i); - -#if defined(__WINDOWS__) - if(fd != INVALID_HANDLE_VALUE){ -#else - if (fd >= 0) { -#endif - - //found free chan - break; - } - - }//for() - - return fd; -} - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void -*/ -void _SAPI_CALL sangoma_close(sng_fd_t *fd) -{ -#if defined(__WINDOWS__) - if( *fd != INVALID_HANDLE_VALUE){ - CloseHandle(*fd); - *fd = INVALID_HANDLE_VALUE; - } -#else - if (*fd >= 0) { - close(*fd); - *fd = -1; - } -#endif -} - - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -int _SAPI_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) -{ - int rx_len=0; - -#if defined(__WINDOWS__) - wp_api_hdr_t *rx_hdr = (wp_api_hdr_t*)hdrbuf; - wp_api_element_t wp_api_element; - - if(hdrlen != sizeof(wp_api_hdr_t)){ - //error - DBG_ERR("hdrlen (%i) != sizeof(wp_api_hdr_t) (%i)\n", hdrlen, sizeof(wp_api_hdr_t)); - return -1; - } - - if(DoReadCommand(fd, &wp_api_element)){ - //error - DBG_ERR("DoReadCommand() failed! Check messages log.\n"); - return -4; - } - - memcpy(rx_hdr, &wp_api_element.hdr, sizeof(wp_api_hdr_t)); - - switch(rx_hdr->operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: - /* ok */ - if(rx_hdr->data_length <= datalen){ - memcpy(databuf, wp_api_element.data, rx_hdr->data_length); - }else{ - rx_hdr->operation_status = SANG_STATUS_BUFFER_TOO_SMALL; - } - break; - default: - /* note that SANG_STATUS_NO_DATA_AVAILABLE is NOT an error! */ - if(0)DBG_ERR("Operation Status: %s(%d)\n", - SDLA_DECODE_SANG_STATUS(rx_hdr->operation_status), rx_hdr->operation_status); - return -5; - } - - rx_len = rx_hdr->data_length; -#else - wan_msghdr_t msg; - wan_iovec_t iov[2]; - - memset(&msg,0,sizeof(wan_msghdr_t)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - rx_len = read(fd,&msg,sizeof(msg)); - - if (rx_len <= sizeof(wp_api_hdr_t)){ - return -EINVAL; - } - - rx_len-=sizeof(wp_api_hdr_t); -#endif - return rx_len; -} - -int _SAPI_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) -{ - int bsent=-1; - wp_api_hdr_t *wp_api_hdr = hdrbuf; - - if (hdrlen != sizeof(wp_api_hdr_t)) { - /* error. Possible cause is a mismatch between versions of API header files. */ - DBG_ERR("hdrlen (%i) != sizeof(wp_api_hdr_t) (%i)\n", hdrlen, sizeof(wp_api_hdr_t)); - return -1; - } - -#if defined(__WINDOWS__) - //queue data for transmission - if(DoWriteCommand(fd, databuf, datalen, hdrbuf, hdrlen)){ - //error - DBG_ERR("DoWriteCommand() failed!! Check messages log.\n"); - return -1; - } - - bsent=0; - //check that frame was transmitted - switch(wp_api_hdr->operation_status) - { - case SANG_STATUS_SUCCESS: - bsent = datalen; - break; - default: - DBG_ERR("Operation Status: %s(%d)\n", - SDLA_DECODE_SANG_STATUS(wp_api_hdr->operation_status), wp_api_hdr->operation_status); - break; - }//switch() -#else - wan_msghdr_t msg; - wan_iovec_t iov[2]; - - memset(&msg,0,sizeof(wan_msghdr_t)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - bsent = write(fd,&msg,datalen+hdrlen); - - if (bsent == (datalen+hdrlen)){ - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_SUCCESS; - bsent-=sizeof(wp_api_hdr_t); - } else if (errno == EBUSY){ - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_DEVICE_BUSY; - } else { - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_IO_ERROR; - } - wp_api_hdr->wp_api_hdr_data_length=bsent; - - //FIXME - THIS SHOULD BE DONE IN KERNEL - wp_api_hdr->wp_api_tx_hdr_max_queue_length=16; - wp_api_hdr->wp_api_tx_hdr_number_of_frames_in_queue=0; - -#endif - return bsent; -} - - -#ifdef WANPIPE_TDM_API - - -/************************************************************//** - * Device API COMMAND Functions - ***************************************************************/ - - - -/*======================================================== - * Execute TDM command - * - */ -int _SAPI_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - -#if defined(__WINDOWS__) - err = tdmv_api_ioctl(fd, &tdm_api->wp_cmd); -#else - err = ioctl(fd,WANPIPE_IOCTL_API_CMD,&tdm_api->wp_cmd); - if (err < 0){ - char tmp[50]; - sprintf(tmp,"TDM API: CMD: %i\n",tdm_api->wp_cmd.cmd); - perror(tmp); - return -1; - } -#endif - return err; -} - -/*======================================================== - * Get Full TDM API configuration per channel - * - */ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FULL_CFG; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - -#if 0 - printf("TDM API CFG:\n"); - printf("\thw_tdm_coding:\t%d\n",tdm_api->wp_cmd.hw_tdm_coding); - printf("\thw_mtu_mru:\t%d\n",tdm_api->wp_cmd.hw_mtu_mru); - printf("\tusr_period:\t%d\n",tdm_api->wp_cmd.usr_period); - printf("\ttdm_codec:\t%d\n",tdm_api->wp_cmd.tdm_codec); - printf("\tpower_level:\t%d\n",tdm_api->wp_cmd.power_level); - printf("\trx_disable:\t%d\n",tdm_api->wp_cmd.rx_disable); - printf("\ttx_disable:\t%d\n",tdm_api->wp_cmd.tx_disable); - printf("\tusr_mtu_mru:\t%d\n",tdm_api->wp_cmd.usr_mtu_mru); - printf("\tidle flag:\t0x%02X\n",tdm_api->wp_cmd.idle_flag); - -#ifdef WP_API_FEATURE_FE_ALARM - printf("\tfe alarms:\t0x%02X\n",tdm_api->wp_cmd.fe_alarms); -#endif - - printf("\trx pkt\t%d\ttx pkt\t%d\n",tdm_api->wp_cmd.stats.rx_packets, - tdm_api->wp_cmd.stats.tx_packets); - printf("\trx err\t%d\ttx err\t%d\n", - tdm_api->wp_cmd.stats.rx_errors, - tdm_api->wp_cmd.stats.tx_errors); -#ifndef __WINDOWS__ - printf("\trx ovr\t%d\ttx idl\t%d\n", - tdm_api->wp_cmd.stats.rx_fifo_errors, - tdm_api->wp_cmd.stats.tx_carrier_errors); -#endif -#endif - - return 0; -} - -/*======================================================== - * SET Codec on a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_CODEC; - tdm_api->wp_cmd.tdm_codec = codec; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Codec from a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_CODEC; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.tdm_codec; -} - -/*======================================================== - * SET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_USR_PERIOD; - tdm_api->wp_cmd.usr_period = period; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_PERIOD; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_period; -} - -/*======================================================== - * GET Current User Hardware Coding Format - * - * Coding Format will be ULAW/ALAW based on T1/E1 - */ - -int _SAPI_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_CODING; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_tdm_coding; -} - -#ifdef WP_API_FEATURE_DTMF_EVENTS -/*======================================================== - * GET Current User Hardware DTMF Enabled/Disabled - * - * Will return true if HW DTMF is enabled on Octasic - */ - -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_DTMF; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_dtmf; -} - -/*======================================================== - * GET Current User Hardware EC Enabled/Disabled - * - * Will return true if HW EC is enabled - */ - -int _SAPI_CALL sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_EC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_ec; -} -#endif - -/*======================================================== - * GET Current User MTU/MRU values in bytes. - * - * The USER MTU/MRU values will change each time a PERIOD - * or CODEC is adjusted. - */ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_MTU_MRU; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_mtu_mru; -} - -/*======================================================== - * SET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_POWER_LEVEL; - tdm_api->wp_cmd.power_level = power; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_POWER_LEVEL; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.power_level; -} - -int _SAPI_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_BUFFERS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_RBS_EVENTS; - tdm_api->wp_cmd.rbs_poll=poll_in_sec; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_RBS_EVENTS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs) -{ - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_WRITE_RBS_BITS; - tdm_api->wp_cmd.chan = (unsigned char)channel; - tdm_api->wp_cmd.rbs_tx_bits=rbs; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs) -{ - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_RBS_BITS; - tdm_api->wp_cmd.chan = (unsigned char)channel; - tdm_api->wp_cmd.rbs_tx_bits=0; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *rbs=(unsigned char)tdm_api->wp_cmd.rbs_rx_bits; - - return 0; -} - -int _SAPI_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - -#ifdef WP_API_FEATURE_EVENTS - wp_api_event_t *rx_event; - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_EVENT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - rx_event = &tdm_api->wp_cmd.event; - - - /* - The use of callbacks here is purely optional and is left - here for backward compatibility purposes. By default user - should handle events outside this funciton. This function - should only be used to read the event - */ - - switch (rx_event->wp_api_event_type){ - - case WP_API_EVENT_RBS: - if (tdm_api->wp_callback.wp_rbs_event) { - tdm_api->wp_callback.wp_rbs_event(fd,rx_event->wp_api_event_rbs_bits); - } - - break; - -#ifdef WP_API_FEATURE_DTMF_EVENTS - case WP_API_EVENT_DTMF: - if (tdm_api->wp_callback.wp_dtmf_event) { - tdm_api->wp_callback.wp_dtmf_event(fd, - rx_event->wp_api_event_dtmf_digit, - rx_event->wp_api_event_dtmf_type, - rx_event->wp_api_event_dtmf_port); - } - break; -#endif - - case WP_API_EVENT_RXHOOK: - if (tdm_api->wp_callback.wp_rxhook_event) { - tdm_api->wp_callback.wp_rxhook_event(fd, - rx_event->wp_api_event_hook_state); - } - break; - - case WP_API_EVENT_RING_DETECT: - if (tdm_api->wp_callback.wp_ring_detect_event) { - tdm_api->wp_callback.wp_ring_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - - case WP_API_EVENT_RING_TRIP_DETECT: - if (tdm_api->wp_callback.wp_ring_trip_detect_event) { - tdm_api->wp_callback.wp_ring_trip_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - -#ifdef WP_API_FEATURE_FE_ALARM - case WP_API_EVENT_ALARM: - if (tdm_api->wp_callback.wp_fe_alarm_event) { - tdm_api->wp_callback.wp_fe_alarm_event(fd, - rx_event->wp_api_event_alarm); - } - break; -#endif - -#ifdef WP_API_FEATURE_LINK_STATUS - /* Link Status */ - case WP_API_EVENT_LINK_STATUS: - if(tdm_api->wp_callback.wp_link_status_event){ - tdm_api->wp_callback.wp_link_status_event(fd, - rx_event->wp_api_event_link_status); - } - - break; -#endif - -#ifdef WP_API_FEATURE_POL_REV - case WP_API_EVENT_POLARITY_REVERSE: - break; -#endif - default: -#ifdef __WINDOWS__ - printf("libsangoma: %s fd=0x%p: Unknown TDM event!", __FUNCTION__,fd); -#else - printf("libsangoma: %s fd=%d: Unknown TDM event!", __FUNCTION__, fd); -#endif - break; - } - - return 0; -#else - printf("Error: Read Event not supported!\n"); - return -1; -#endif -} - -#ifdef WP_API_FEATURE_DTMF_EVENTS -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return err; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_TRIP_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_KEWL; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_START; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_ONHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_OFFHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = tone_id; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = 0x00; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - -#endif - -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_HWEC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_HWEC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -/*======================================================== - * GET Front End Alarms - * - */ -#ifdef WP_API_FEATURE_FE_ALARM -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_ALARMS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *alarms=tdm_api->wp_cmd.fe_alarms; - - return 0; -} - -/* get current Line Connection state - Connected/Disconnected */ -int _SAPI_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} -#endif - -/* get current Line Connection state - Connected/Disconnected */ -#ifdef WP_API_FEATURE_LINK_STATUS -int _SAPI_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} - -/* set current Line Connection state - Connected/Disconnected. valid only for ISDN BRI */ -int _SAPI_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_FE_STATUS; - tdm_api->wp_cmd.fe_status = new_status; - - return sangoma_cmd_exec(fd, tdm_api); -} -#endif - -int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.channel = (unsigned char)channel; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.channel = (unsigned char)channel; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd, tdm_api); -} - - -int _SAPI_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.tx_queue_sz; -} - -int _SAPI_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = size; - - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.rx_queue_sz; - -} - -int _SAPI_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = size; - - return sangoma_cmd_exec(fd, tdm_api); - -} - -int _SAPI_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_DRIVER_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(wan_driver_version_t)) { - if (drv_ver) { - memcpy(drv_ver,&tdm_api->wp_cmd.version,sizeof(wan_driver_version_t)); - } - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_FIRMWARE_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(unsigned char)) { - *ver = tdm_api->wp_cmd.data[0]; - } else { - return -1; - } - } - - return err; -} - - -int _SAPI_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_CPLD_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(unsigned char)) { - *ver = tdm_api->wp_cmd.data[0]; - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_STATS; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (stats) { - memcpy(stats,&tdm_api->wp_cmd.stats,sizeof(wanpipe_chan_stats_t)); - } - } - - return err; -} - -int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_RESET_STATS; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RM_RXFLASHTIME; - tdm_api->wp_cmd.rxflashtime=rxflashtime; - err = sangoma_cmd_exec(fd, tdm_api); - return err; -} - - -#ifndef LIBSANGOMA_LIGHT - - -/************************************************************//** - * Device PORT Control Functions - ***************************************************************/ - -static int sangoma_port_mgmnt_ioctl(sng_fd_t fd, port_management_struct_t *port_management) -{ - -#if defined(__WINDOWS__) - DWORD ln; - if(DeviceIoControl( - fd, - IoctlPortManagementCommand, - (LPVOID)port_management, - sizeof(port_management_struct_t), - (LPVOID)port_management, - sizeof(port_management_struct_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - //check messages log - printf("%s():Error: IoctlPortManagementCommand failed!!\n", __FUNCTION__); - return -1; - }else { - return 0; - } -#else - int err; - err=ioctl(fd,WANPIPE_IOCTL_PORT_MGMT,port_management); - if (err) { - return -1; - } else { - return 0; - } -#endif -} - -static int sangoma_port_cfg_ioctl(sng_fd_t fd, port_cfg_t *port_cfg) -{ - -#if defined(__WINDOWS__) - DWORD ln; - if(DeviceIoControl( - fd, - IoctlPortConfigurationCommand, - (LPVOID)port_cfg, - sizeof(port_cfg_t), - (LPVOID)port_cfg, - sizeof(port_cfg_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - //check messages log - printf("%s():Error: IoctlSetDriverConfiguration failed!!\n", __FUNCTION__); - return 1; - }else{ - return 0; - } -#else - int err; - err=ioctl(fd,WANPIPE_IOCTL_PORT_CONFIG,port_cfg); - if (err) { - return -1; - } else { - return 0; - } -#endif -} - -/* open wanpipe configuration device */ -sng_fd_t _SAPI_CALL sangoma_open_driver_ctrl(int port_no) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - -#if defined(__WINDOWS__) - /* Form the Config Device Name (i.e. wanpipe1, wanpipe2,...). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_PORT_NAME_FORM, port_no); - _snprintf(fname, FNAME_LEN, "\\\\.\\%s", tmp_fname); - - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - /* Form the Config Device Name. ("/dev/wanpipe") */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_CONFIG_DEV_NAME); - - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - - -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) -{ -#if defined(__WINDOWS__) - if(DoManagementCommand(fd, wan_udp)){ - return 1; - } -#else - unsigned char id = 0; - int err=0; - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - err=ioctl(fd,WANPIPE_IOCTL_PIPEMON,wan_udp); - if (err < 0) { - return 1; - } -#endif - - if(wan_udp->wan_udphdr_return_code != WAN_CMD_OK){ - return 2; - } - return 0; -} - -int _SAPI_CALL sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = START_PORT_VOLATILE_CONFIG; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - return err; - } - - if (port_mgmnt->operation_status != SANG_STATUS_SUCCESS ) { - err=port_mgmnt->operation_status; - } - - return err; -} - -int _SAPI_CALL sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = STOP_PORT; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - return err; - } - - if (port_mgmnt->operation_status != SANG_STATUS_SUCCESS){ - - if(port_mgmnt->operation_status == SANG_STATUS_CAN_NOT_STOP_DEVICE_WHEN_ALREADY_STOPPED) { - err = 0; - }else{ - err = port_mgmnt->operation_status; - } - } - - return err; -} - -int _SAPI_CALL sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = GET_HARDWARE_INFO; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - port_mgmnt->operation_status = SANG_STATUS_INVALID_DEVICE; - return err; - } - - if (port_mgmnt->operation_status != SANG_STATUS_SUCCESS ) { - err=port_mgmnt->operation_status; - } - - return err; -} - -int _SAPI_CALL sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) -{ - port_cfg->command_code = SET_PORT_VOLATILE_CONFIG; - port_cfg->port_no = port_no; - - return sangoma_port_cfg_ioctl(fd, port_cfg); -} - -int _SAPI_CALL sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) -{ - - port_cfg->command_code = GET_PORT_VOLATILE_CONFIG; - port_cfg->port_no = port_no; - - return sangoma_port_cfg_ioctl(fd, port_cfg); -} - -#endif - - -#endif /* WANPIPE_TDM_API */ diff --git a/api/libsangoma/.svn/tmp/tempfile.17.tmp b/api/libsangoma/.svn/tmp/tempfile.17.tmp deleted file mode 100644 index 6bb1ae7..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.17.tmp +++ /dev/null @@ -1,3060 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.c - * \brief Wanpipe API Code Library for Sangoma AFT T1/E1/Analog/BRI/Serial hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - ******************************************************************************* - */ - -#include "libsangoma-pvt.h" - -#if defined(__WINDOWS__) -# include /* SetupDiXXX() functions */ -# include /* GUID instantination */ -# include /* DEFINE_GUID() */ -# include "public.h" /* GUID_DEVCLASS_SANGOMA_ADAPTER */ - -# define MAX_COMP_INSTID 2096 -# define MAX_COMP_DESC 2096 -# define MAX_FRIENDLY 2096 -# define TMP_BUFFER_LEN 256 - -/*!+! jpboily used to tell get_out_flags no objects were signaled */ -# define INVALID_INDEX (uint32_t) -1 -# define WP_ALL_BITS_SET ((uint32_t)-1) -#endif - -static void libsng_dbg(const char * fmt, ...) -{ - va_list args; - char buf[1024]; - va_start(args, fmt); - _vsnprintf(buf, sizeof(buf), fmt, args); -#if defined(__WINDOWS__) - OutputDebugString(buf); -#else - printf(buf); -#endif - va_end(args); -} - -/*********************************************************************//** - * WINDOWS Only Section - *************************************************************************/ - -#define DBG_POLL if(0)libsng_dbg -#define DBG_EVNT if(0)libsng_dbg -#define DBG_ERR if(0)libsng_dbg("Error: %s() line: %d : ", __FUNCTION__, __LINE__);if(0)libsng_dbg -#define DBG_INIT if(0)libsng_dbg - -#if defined(__WINDOWS__) -#define DBG_REGISTRY if(0)libsng_dbg - -/* - \fn static void DecodeLastError(LPSTR lpszFunction) - \brief Decodes the Error in radable format. - \param lpszFunction error string - - Private Windows Only Function - */ -static void LibSangomaDecodeLastError(LPSTR lpszFunction) -{ - LPVOID lpMsgBuf; - DWORD dwLastErr = GetLastError(); - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - dwLastErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */ - (LPTSTR) &lpMsgBuf, - 0, - NULL - ); - /* Display the string. */ - DBG_POLL("Last Error in %s(): %s (%d)\n", lpszFunction, lpMsgBuf, dwLastErr); - /* Free the buffer. */ - LocalFree( lpMsgBuf ); -} - -/* - \fn static int handle_device_ioctl_result(int bResult) - \brief Checks result code of ioctl - \param bResult result of ioctl call - - Private Windows Only Function - */ -static u16 handle_device_ioctl_result(int bResult, char *caller_name) -{ - if(bResult == 0){ - /*error*/ - LibSangomaDecodeLastError(caller_name); - return SANG_STATUS_IO_ERROR; - }else{ - return SANG_STATUS_SUCCESS; - } -} - -/* - \fn static int UdpManagementCommand(sng_fd_t fd, wan_udp_hdr_t* wan_udp) - \brief Executes Driver Management Command - \param fd device file descriptor - \param wan_udp managemet cmd structure - - Private Windows Function - */ -static int UdpManagementCommand(sng_fd_t fd, wan_udp_hdr_t* wan_udp) -{ - DWORD ln, bIoResult; - unsigned char id = 0; - - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - bIoResult = DeviceIoControl( - fd, - IoctlManagementCommand, - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int tdmv_api_ioctl(sng_fd_t fd, wanpipe_tdm_api_cmd_t *api_cmd) - \brief Executes Driver TDM API Command Wrapper Function - \param fd device file descriptor - \param api_cmd tdm_api managemet cmd structure - - Private Windows Function - */ -static int tdmv_api_ioctl(sng_fd_t fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlTdmApiCommand, - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static USHORT DoReadCommand(sng_fd_t fd, RX_DATA_STRUCT * pRx) - \brief API READ Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - This function will NOT block because using IoctlReadCommandNonBlocking. - */ -static USHORT DoReadCommand(sng_fd_t fd, RX_DATA_STRUCT * pRx) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlReadCommandNonBlocking, - (LPVOID)NULL,/*NO input buffer!*/ - 0, - (LPVOID)pRx, - sizeof(RX_DATA_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static UCHAR DoWriteCommand(sng_fd_t fd, TX_DATA_STRUCT * pTx) - \brief API Write Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - In Legacy API mode this fuction will Block if data is busy. - In API mode no function is allowed to Block - */ -static UCHAR DoWriteCommand(sng_fd_t fd, - void *input_data_buffer, u32 size_of_input_data_buffer, - void *output_data_buffer, u32 size_of_output_data_buffer - ) -{ - DWORD BytesReturned, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlWriteCommand, - (LPVOID)input_data_buffer, - size_of_input_data_buffer, - (LPVOID)output_data_buffer, - size_of_output_data_buffer, - (LPDWORD)(&BytesReturned), - (LPOVERLAPPED)NULL); - - return (UCHAR)handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static USHORT sangoma_poll_fd(sng_fd_t fd, API_POLL_STRUCT *api_poll_ptr) - \brief Non Blocking API Poll function used to find out if Rx Data, Events or - Free Tx buffer available - \param drv device file descriptor - \param api_poll_ptr poll device that stores polling information read/write/event - \param overlapped pointer to system overlapped io structure. - - Private Windows Function - */ -static USHORT sangoma_poll_fd(sng_fd_t fd, API_POLL_STRUCT *api_poll_ptr) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlApiPoll, - (LPVOID)NULL, - 0L, - (LPVOID)api_poll_ptr, - sizeof(API_POLL_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int logger_api_ioctl(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Executes Logger API IOCTL - \param fd device file descriptor - \param logger_cmd Logger API command structure - - Private Windows Function - */ -static sangoma_status_t logger_api_ioctl(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlLoggerApiCommand, - (LPVOID)logger_cmd, - sizeof(wp_logger_cmd_t), - (LPVOID)logger_cmd, - sizeof(wp_logger_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* This function is exported only for debugging purposes and NOT a part of API. */ -sangoma_status_t _SAPI_CALL sangoma_cdev_ctrl_cmd(sng_fd_t fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlCdevControlCommand, - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -static sangoma_status_t init_sangoma_event_object(sangoma_wait_obj_t *sng_wait_obj, int flags_in, sng_fd_t fd) -{ - int event_index = -1; - wanpipe_tdm_api_cmd_t tdm_api_cmd; - sangoma_status_t sng_status; - char event_name[200], tmp_event_name[200]; - - memset(&tdm_api_cmd, 0x00, sizeof(tdm_api_cmd)); - - tdm_api_cmd.cmd = WP_CDEV_CMD_GET_INTERFACE_NAME; - sng_status = sangoma_cdev_ctrl_cmd(fd, &tdm_api_cmd); - if(SANG_ERROR(sng_status)){ - DBG_ERR("sangoma_cdev_ctrl_cmd() failed!\n"); - return sng_status; - } - - DBG_EVNT("%s(): interface name: %s\n", __FUNCTION__, tdm_api_cmd.data); - - if(flags_in & POLLIN){ - event_index = LIBSNG_EVENT_INDEX_POLLIN; - /* Form the Event Name from Interface Name and Event Type (i.e. wanpipe1_if1_pollin). */ - _snprintf(tmp_event_name, sizeof(tmp_event_name), "%s_pollin", tdm_api_cmd.data); - } - - if(flags_in & POLLOUT){ - event_index = LIBSNG_EVENT_INDEX_POLLOUT; - /* Form the Event Name from Interface Name and Event Type (i.e. wanpipe1_if1_pollout). */ - _snprintf(tmp_event_name, sizeof(tmp_event_name), "%s_pollout", tdm_api_cmd.data); - } - - if(flags_in & POLLPRI){ - event_index = LIBSNG_EVENT_INDEX_POLLPRI; - /* Form the Event Name from Interface Name and Event Type (i.e. wanpipe1_if1_pollpri). */ - _snprintf(tmp_event_name, sizeof(tmp_event_name), "%s_pollpri", tdm_api_cmd.data); - } - - if(event_index == -1){ - /* invalid 'flags_in', this should be an assert */ - return SANG_STATUS_GENERAL_ERROR; - } - - /* 1. The Sangoma Device Driver creates Notification Events in "\\BaseNamedObjects\\Global\\" - * when first CreateFile() was called by a process. That means the Events will inherit - * the security attributes of the calling process, so the calling process will have - * the permissions to open the Events by calling OpenEvent(). Since Events are created - * "Global" subdirectory, the calling process does NOT need Administrator priveleges. - * 2. The Events are deleted when the last HANDLE for a device is closed by CloseHandle() - * or automatically by the system when calling process exits. */ - _snprintf(event_name, sizeof(event_name), "Global\\%s", tmp_event_name); - - sng_wait_obj->sng_event_objects[event_index] = OpenEvent(EVENT_ALL_ACCESS, TRUE, event_name); - if(NULL == sng_wait_obj->sng_event_objects[event_index]){ - /* error */ - LibSangomaDecodeLastError(__FUNCTION__); - return SANG_STATUS_GENERAL_ERROR; - } - - return SANG_STATUS_SUCCESS; -} - -static sangoma_status_t _SAPI_CALL sangoma_wait_obj_poll(sangoma_wait_obj_t *sangoma_wait_object, int flags_in, int *flags_out) -{ - int err; - sangoma_wait_obj_t *sng_wait_obj = sangoma_wait_object; - /*! api structure used by windows IoctlApiPoll call */ - API_POLL_STRUCT api_poll; - - *flags_out = 0; - - memset(&api_poll, 0x00, sizeof(API_POLL_STRUCT)); - api_poll.user_flags_bitmap = flags_in; - - /* This call is non-blocking - it will return immediatly. */ - if(sangoma_poll_fd(sng_wait_obj->fd, &api_poll)){ - /* error - ioctl failed */ - return SANG_STATUS_IO_ERROR; - } - - if(api_poll.operation_status == SANG_STATUS_SUCCESS){ - *flags_out = api_poll.poll_events_bitmap; - err = 0; - }else{ - /* error - command failed */ - err = api_poll.operation_status; - } - - if(*flags_out == 0){ - /*DBG_POLL("======%s(): *flags_out: 0x%X, flags_in: 0x%X\n", __FUNCTION__, *flags_out, flags_in);*/ - } - return err; -} - -static int check_number_of_wait_objects(uint32_t number_of_objects, const char *caller_function, int lineno) -{ - if(number_of_objects >= MAXIMUM_WAIT_OBJECTS){ - DBG_ERR("Caller: %s(): Line: %d: 'number_of_objects': %d is greater than the Maximum of: %d\n", - caller_function, lineno, number_of_objects, MAXIMUM_WAIT_OBJECTS); - return 1; - } - return 0; -} - -static sangoma_status_t get_out_flags(IN sangoma_wait_obj_t *sng_wait_objects[], - IN uint32_t first_signaled_obj_index, - IN uint32_t in_flags[], OUT uint32_t out_flags[], - IN uint32_t number_of_sangoma_wait_objects, - OUT BOOL *at_least_one_poll_set_flags_out) -{ - uint32_t i, j; - - if(at_least_one_poll_set_flags_out){ - *at_least_one_poll_set_flags_out = FALSE; - } - - for(i = 0; i < number_of_sangoma_wait_objects; i++) { - - sangoma_wait_obj_t *sangoma_wait_object = sng_wait_objects[i]; - - if (!SANGOMA_OBJ_HAS_DEVICE(sangoma_wait_object)) { - - /* This object does not has a device, but, may have been signaled via sangoma_wait_obj_signal() - * test if the object is signaled, if it is, set SANG_WAIT_OBJ_IS_SIGNALED */ - - if((i == first_signaled_obj_index) || (WaitForSingleObject(sangoma_wait_object->generic_event_object, 0) == WAIT_OBJECT_0)) { - /* !+! jpboily : Since WaitForMultipleObjects cleared the status - * of the first signaled object, we make sure that the out_flag - * for this object is set */ - out_flags[i] |= SANG_WAIT_OBJ_IS_SIGNALED; - } - continue; - } - - for(j = 0; j < LIBSNG_NUMBER_OF_EVENT_OBJECTS; j++){ - - if(!sangoma_wait_object->sng_event_objects[j]) { - continue; - } - - if(sangoma_wait_obj_poll(sangoma_wait_object, in_flags[i], &out_flags[i])){ - return SANG_STATUS_GENERAL_ERROR; - } - - if( out_flags[i] & in_flags[i] ){ - if(at_least_one_poll_set_flags_out){ - *at_least_one_poll_set_flags_out = TRUE; - } - } -#if 0 - /* Check if a device-related object was signalled, if it is, set SANG_WAIT_OBJ_IS_SIGNALED. */ - if (WaitForSingleObject(sangoma_wait_object->sng_event_objects[j], 0) == WAIT_OBJECT_0) { - out_flags[i] |= SANG_WAIT_OBJ_IS_SIGNALED; - } -#endif - }/* for(j = 0; j < LIBSNG_NUMBER_OF_EVENT_OBJECTS; j++) */ - }/* for(i = 0; i < number_of_sangoma_wait_objects; i++) */ - - return SANG_STATUS_SUCCESS; -} - -/*! - \brief Brief description - */ -static LONG registry_get_string_value(HKEY hkey, LPTSTR szKeyname, OUT LPSTR szValue, OUT DWORD *pdwSize) -{ - LONG iReturnCode; - - /* reading twice to set pdwSize to needed value */ - RegQueryValueEx(hkey, szKeyname, NULL, NULL, (unsigned char *)szValue, pdwSize); - - iReturnCode = RegQueryValueEx(hkey, szKeyname, NULL, NULL, (unsigned char *)szValue, pdwSize); - if(ERROR_SUCCESS == iReturnCode){ - iReturnCode = 0; - } - DBG_REGISTRY("%s(): %s: %s: iReturnCode: %d\n", __FUNCTION__, szKeyname, szValue, iReturnCode); - return iReturnCode; -} - -/*! - \brief Brief description - */ -static LONG registry_set_string_value(HKEY hkey, LPTSTR szKeyname, IN LPSTR szValue) -{ - DWORD dwSize; - LONG iReturnCode; - - dwSize = strlen(szValue) + 1; - - iReturnCode = RegSetValueEx(hkey, szKeyname, 0, REG_SZ, (unsigned char *)szValue, dwSize); - DBG_REGISTRY("%s(): %s: %s\n", __FUNCTION__, szKeyname, szValue); - - if(ERROR_SUCCESS == iReturnCode){ - iReturnCode = 0; - } - return iReturnCode; -} - -/*! - \brief Convert an integer (iValue) to string and write it to registry - */ -static LONG registry_set_integer_value(HKEY hkey, LPTSTR szKeyname, IN int iValue) -{ - DWORD dwSize; - char szTemp[TMP_BUFFER_LEN]; - LONG iReturnCode; - - sprintf(szTemp, "%u", iValue); - - dwSize = strlen(szTemp) + 1; - iReturnCode = RegSetValueEx(hkey, szKeyname, 0, REG_SZ, (unsigned char *)szTemp, dwSize); - - if(ERROR_SUCCESS == iReturnCode){ - iReturnCode = 0; - } - - DBG_REGISTRY("%s(): %s: %d: iReturnCode: %d\n", __FUNCTION__, szKeyname, iValue, iReturnCode); - return iReturnCode; -} - -/*! - * \brief Go through the list of ALL "Sangoma Hardware Abstraction Driver" ports installed on the system. - * Read Bus/Slot/Port information for a port and copare with what is searched for. - */ -static HKEY registry_open_port_key(hardware_info_t *hardware_info) -{ - int i, iRegistryReturnCode; - SP_DEVINFO_DATA deid={sizeof(SP_DEVINFO_DATA)}; - HDEVINFO hdi = SetupDiGetClassDevs((struct _GUID *)&GUID_DEVCLASS_SANGOMA_ADAPTER, NULL,NULL, DIGCF_PRESENT); - char DeviceName[TMP_BUFFER_LEN], PCI_Bus[TMP_BUFFER_LEN], PCI_Slot[TMP_BUFFER_LEN], Port_Number[TMP_BUFFER_LEN]; - DWORD dwTemp; - HKEY hKeyTmp = (struct HKEY__ *)INVALID_HANDLE_VALUE; - HKEY hPortRegistryKey = (struct HKEY__ *)INVALID_HANDLE_VALUE; - - TCHAR name[MAX_FRIENDLY]; - char szCompInstanceId[MAX_COMP_INSTID]; - TCHAR szCompDescription[MAX_COMP_DESC]; - DWORD dwRegType; - - /* Possible Port Names (refer to sdladrv.inf): - Sangoma Hardware Abstraction Driver (Port 1) - Sangoma Hardware Abstraction Driver (Port 2) - Sangoma Hardware Abstraction Driver (Port 3) - Sangoma Hardware Abstraction Driver (Port 4) - Sangoma Hardware Abstraction Driver (Port 5) - Sangoma Hardware Abstraction Driver (Port 6) - Sangoma Hardware Abstraction Driver (Port 7) - Sangoma Hardware Abstraction Driver (Port 8) - Sangoma Hardware Abstraction Driver (Analog) - Sangoma Hardware Abstraction Driver (ISDN BRI) */ - - /* search for all (AFT) ports: */ - sprintf(name," Sangoma Hardware Abstraction Driver"); - - for (i = 0; SetupDiEnumDeviceInfo(hdi, i, &deid); i++){ - - BOOL fSuccess = SetupDiGetDeviceInstanceId(hdi, &deid, (PSTR)szCompInstanceId, MAX_COMP_INSTID, NULL); - if (!fSuccess){ - continue; - } - - fSuccess = SetupDiGetDeviceRegistryProperty(hdi, &deid,SPDRP_DEVICEDESC, &dwRegType, (BYTE*)szCompDescription, MAX_COMP_DESC, NULL); - if (!fSuccess){ - continue; - } - - if (strncmp(szCompDescription, name, strlen(name)) != 0) { /* Windows can add #2 etc - do NOT consider */ - /* This is a "Sangoma Card" device, we are interested only in "Sangoma Port" devices. */ - continue; - } - - DBG_REGISTRY("* %s\n", szCompDescription); - - hKeyTmp = SetupDiOpenDevRegKey(hdi, &deid, DICS_FLAG_GLOBAL, 0, DIREG_DRV, KEY_READ | KEY_SET_VALUE ); - if(hKeyTmp == INVALID_HANDLE_VALUE){ - DBG_REGISTRY("Error: Failed to open Registry key!!\n"); - continue; - } - - PCI_Bus[0] = '\0'; - iRegistryReturnCode = registry_get_string_value(hKeyTmp, "PCI_Bus", PCI_Bus, &dwTemp); - if(iRegistryReturnCode){ - continue; - } - - PCI_Slot[0] = '\0'; - iRegistryReturnCode = registry_get_string_value(hKeyTmp, "PCI_Slot", PCI_Slot, &dwTemp); - if(iRegistryReturnCode){ - continue; - } - - Port_Number[0] = '\0'; - iRegistryReturnCode = registry_get_string_value(hKeyTmp, "Port_Number", Port_Number, &dwTemp); - if(iRegistryReturnCode){ - continue; - } - - if( atoi(PCI_Bus) == hardware_info->pci_bus_number && - atoi(PCI_Slot) == hardware_info->pci_slot_number && - atoi(Port_Number) == hardware_info->port_number ){ - - hPortRegistryKey = hKeyTmp; - - /* read device name for debugging only */ - DeviceName[0] = '\0'; - registry_get_string_value(hPortRegistryKey, "DeviceName", DeviceName, &dwTemp); - - DBG_REGISTRY("Found Port's Registry key: DeviceName: %s, PCI_Bus: %s, PCI_Slot: %s, Port_Number: %s\n", - DeviceName, PCI_Bus, PCI_Slot, Port_Number); - break; - }/* if() */ - }/* for() */ - - SetupDiDestroyDeviceInfoList(hdi); - - DBG_REGISTRY("hPortRegistryKey: 0x%X\n", hPortRegistryKey); - - return hPortRegistryKey; -} - -static char* timeslot_bitmap_to_string(int bitmap) -{ - int i = 0, range_counter = 0; - int start_channel = -1, stop_channel = -1; - static char tmp_string[256]; - - if( WP_ALL_BITS_SET == bitmap ){ - return "ALL"; /* If all bits are set, use the "ALL" keyword. */ - } - - tmp_string[0] = '\0'; - - /* all ranges between two zeros is what we will look for */ - for(i = 0; i < sizeof(bitmap) * 8; i++){ - - if(start_channel < 0){ - /* found a starting one of a range */ - if(bitmap & (1 << i)){ - start_channel = i + 1; - } - } - - if(start_channel >= 0){ - if((bitmap & (1 << i)) == 0){ - - /* we hit a zero, that means the previous channel is one */ - stop_channel = i; - - }else if(i == (sizeof(bitmap) * 8 - 1)){ - /* The most significant bit is set - there will be no delimiting zero. - * It will also take care of "all channels" which is a special - * case - there is a start but no stop channel because all bits - * are set. result will be 1-32 */ - stop_channel = (sizeof(bitmap) * 8); - } - } - - if(start_channel >= 0 && stop_channel >= 0){ - - if(range_counter){ - /* put '.' separator from the previous range */ - _snprintf(&tmp_string[strlen(tmp_string)], sizeof(tmp_string) - strlen(tmp_string), "."); - } - - if(start_channel == stop_channel){ - /* the range contains a SINGLE channel */ - _snprintf(&tmp_string[strlen(tmp_string)], sizeof(tmp_string) - strlen(tmp_string), - "%d", start_channel); - }else{ - /* the range contains MULTIPLE channels */ - _snprintf(&tmp_string[strlen(tmp_string)], sizeof(tmp_string) - strlen(tmp_string), - "%d-%d", start_channel, stop_channel); - } - - start_channel = stop_channel = -1; - range_counter++; - } - }/* for() */ - - return tmp_string; -} - -static int registry_write_front_end_cfg(HKEY hPortRegistryKey, port_cfg_t *port_cfg) -{ - wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; - sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; - sdla_te_cfg_t *te_cfg = &sdla_fe_cfg->cfg.te_cfg; - sdla_remora_cfg_t *analog_cfg = &sdla_fe_cfg->cfg.remora; - sdla_bri_cfg_t *bri_cfg = &sdla_fe_cfg->cfg.bri; - int iReturnCode = 0; - - /* set Media specific values. */ - switch(sdla_fe_cfg->media) - { - case WAN_MEDIA_T1: - case WAN_MEDIA_J1: /* the same as T1 */ - case WAN_MEDIA_E1: - /* only T1/E1 Port can change the Media, all other ports ignore this parameter. */ - iReturnCode = registry_set_integer_value(hPortRegistryKey, "Media", sdla_fe_cfg->media /*WAN_MEDIA_T1*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "LDecoding", sdla_fe_cfg->lcode /*WAN_LCODE_B8ZS*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "Framing", sdla_fe_cfg->frame /*WAN_FR_ESF*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "ClkRefPort", te_cfg->te_ref_clock); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "TE_IGNORE_YEL", te_cfg->ignore_yel_alarm); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "ACTIVE_CH", ENABLE_ALL_CHANNELS /*must be hardcoded*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "TE_RBS_CH", te_cfg->te_rbs_ch); /*not used by DS chip code, only by PMC */ - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "LBO", te_cfg->lbo /*WAN_T1_LBO_0_DB*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "ClkMode", te_cfg->te_clock /*WAN_NORMAL_CLK*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "HighImpedanceMode",te_cfg->high_impedance_mode /*WANOPT_NO*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "TE_RX_SLEVEL", te_cfg->rx_slevel /*WAN_TE1_RX_SLEVEL_12_DB*/); - if(iReturnCode){ - break; - } - - /* write E1 signalling for both T1 and E1 */ - iReturnCode = registry_set_integer_value(hPortRegistryKey, "E1Signalling", te_cfg->sig_mode /*WAN_TE1_SIG_CCS*/); - if(iReturnCode){ - break; - } - break; - - case WAN_MEDIA_56K: - /* do nothing */ - iReturnCode = 0; - break; - - case WAN_MEDIA_FXOFXS: - /* Analog global (per-card) settings */ - iReturnCode = registry_set_string_value(hPortRegistryKey, "remora_fxo_operation_mode_name", analog_cfg->opermode_name); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "RM_BATTTHRESH", analog_cfg->battthresh); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "RM_BATTDEBOUNCE", analog_cfg->battdebounce); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "RM_FXO_TAPPING", analog_cfg->rm_mode); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "RM_FXO_TAPPING_OFF_HOOK_THRESHOLD",analog_cfg->ohthresh); - if(iReturnCode){ - break; - } - break; - - case WAN_MEDIA_BRI: - iReturnCode = registry_set_integer_value(hPortRegistryKey, "aft_bri_clock_mode", bri_cfg->clock_mode); - if(iReturnCode){ - break; - } - break; - - case WAN_MEDIA_SERIAL: - iReturnCode = registry_set_integer_value(hPortRegistryKey, "clock_source", wandev_conf->clocking); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "BaudRate", wandev_conf->bps); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "serial_connection_type", wandev_conf->connection); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "serial_line_coding", wandev_conf->line_coding); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "serial_line_idle", wandev_conf->line_idle); - if(iReturnCode){ - break; - } - break; - - default: - DBG_ERR("Invalid Media Type %d!\n", sdla_fe_cfg->media); - iReturnCode = 1; - } - - return iReturnCode; -} - -static int registry_write_wan_tdmv_conf(HKEY hPortRegistryKey, port_cfg_t *port_cfg) -{ - wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; - sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; - wan_tdmv_conf_t *tdmv_conf = &wandev_conf->tdmv_conf; - int iReturnCode = 1; - - /* set Media specific values. */ - switch(sdla_fe_cfg->media) - { - case WAN_MEDIA_T1: - case WAN_MEDIA_J1: /* the same as T1 */ - case WAN_MEDIA_E1: - /* write dchannel bitmap as a string (the same way as active channels) */ - iReturnCode = registry_set_string_value(hPortRegistryKey, "TDMV_DCHAN", timeslot_bitmap_to_string(tdmv_conf->dchan)); - break; - - case WAN_MEDIA_56K: - case WAN_MEDIA_FXOFXS: - case WAN_MEDIA_BRI: - case WAN_MEDIA_SERIAL: - /* do nothing */ - iReturnCode = 0; - break; - - default: - DBG_ERR("Invalid Media Type %d!\n", sdla_fe_cfg->media); - iReturnCode = 2; - break; - } - - return iReturnCode; -} - -static int registry_write_channel_group_cfg(HKEY hPortRegistryKey, port_cfg_t *port_cfg, int interface_index, wanif_conf_t wanif_conf) -{ - char szTemp[TMP_BUFFER_LEN]; - int iReturnCode = 0; - - do{ - // Line mode - _snprintf(szTemp, TMP_BUFFER_LEN, "aft_logic_channel_%d_line_mode", interface_index); - iReturnCode = registry_set_string_value(hPortRegistryKey, szTemp, - (wanif_conf.hdlc_streaming == WANOPT_YES ? MODE_OPTION_HDLC : MODE_OPTION_BITSTRM)); - if(iReturnCode){ - break; - } - - // MTU - _snprintf(szTemp, TMP_BUFFER_LEN, "aft_logic_channel_%d_mtu", interface_index); - iReturnCode = registry_set_integer_value(hPortRegistryKey, szTemp, wanif_conf.mtu); - if(iReturnCode){ - break; - } - - // Operational mode - _snprintf(szTemp, TMP_BUFFER_LEN, "aft_logic_channel_%d_operational_mode", interface_index); - iReturnCode = registry_set_string_value(hPortRegistryKey, szTemp, wanif_conf.usedby); - if(iReturnCode){ - break; - } - - // Active Timeslots for the Group - _snprintf(szTemp, TMP_BUFFER_LEN, "aft_logic_channel_%d_active_ch", interface_index); - iReturnCode = registry_set_string_value(hPortRegistryKey, szTemp, timeslot_bitmap_to_string(wanif_conf.active_ch)); - if(iReturnCode){ - break; - } - - // Idle char. - _snprintf(szTemp, TMP_BUFFER_LEN, "aft_logic_channel_%d_idle_char", interface_index); - iReturnCode = registry_set_integer_value(hPortRegistryKey, szTemp, wanif_conf.u.aft.idle_flag); - if(iReturnCode){ - break; - } - - }while(0); - - return iReturnCode; -} - -#endif /* __WINDOWS__ */ - - -/*********************************************************************//** - * Common Linux & Windows Code - *************************************************************************/ - - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - -/*! - \fn sangoma_status_t sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) - \brief Create a wait object that will be used with sangoma_waitfor_many() API - \param sangoma_wait_object pointer a single device object - \param fd device file descriptor - \param object_type type of the wait object. see sangoma_wait_obj_type_t for types - \see sangoma_wait_obj_type_t - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) -{ - int err = 0; - sangoma_wait_obj_t *sng_wait_obj = NULL; - - if (!sangoma_wait_object) { - return SANG_STATUS_INVALID_DEVICE; - } - *sangoma_wait_object = NULL; - sng_wait_obj = malloc(sizeof(**sangoma_wait_object)); - if (!sng_wait_obj) { - return SANG_STATUS_FAILED_ALLOCATE_MEMORY; - } - - memset(sng_wait_obj, 0x00, sizeof(*sng_wait_obj)); - /* it is a first initialization of the object */ - sng_wait_obj->init_flag = LIBSNG_MAGIC_NO; - - sng_wait_obj->fd = fd; - sng_wait_obj->object_type = object_type; - -#if defined(__WINDOWS__) - DBG_INIT("%s(): sng_wait_obj ptr: 0x%p\n", __FUNCTION__, sng_wait_obj); - DBG_INIT("%s(): fd: 0x%X, object_type: %s\n", __FUNCTION__, fd, DECODE_SANGOMA_WAIT_OBJECT_TYPE(object_type)); - DBG_INIT("%s(): sizeof(**sangoma_wait_object): %d\n", __FUNCTION__, sizeof(**sangoma_wait_object)); - - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sng_wait_obj->generic_event_object = CreateEvent( NULL, FALSE, FALSE, NULL); - if(!sng_wait_obj->generic_event_object){ - err = SANG_STATUS_GENERAL_ERROR; - goto failed; - } - } - - if(SANGOMA_GENERIC_WAIT_OBJ == object_type){ - /* everything is done for the generic wait object */ - *sangoma_wait_object = sng_wait_obj; - return SANG_STATUS_SUCCESS; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLIN, fd); - if(SANG_STATUS_SUCCESS != err){ - goto failed; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLOUT, fd); - if(SANG_STATUS_SUCCESS != err){ - goto failed; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLPRI, fd); - if(SANG_STATUS_SUCCESS != err) { - goto failed; - } - - DBG_INIT("%s(): returning: %d", __FUNCTION__, err); -#else - int filedes[2]; - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sng_wait_obj->signal_read_fd = INVALID_HANDLE_VALUE; - sng_wait_obj->signal_write_fd = INVALID_HANDLE_VALUE; - /* if we want cross-process event notification we can use a named pipe with mkfifo() */ - if (pipe(filedes)) { - err = SANG_STATUS_GENERAL_ERROR; - goto failed; - } - sng_wait_obj->signal_read_fd = filedes[0]; - sng_wait_obj->signal_write_fd = filedes[1]; - } -#endif - *sangoma_wait_object = sng_wait_obj; - return err; - -failed: - if (sng_wait_obj) { - sangoma_wait_obj_delete(&sng_wait_obj); - } - return err; -} - -/*! - \fn sangoma_status_t sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) - \brief De-allocate all resources in a wait object - \param sangoma_wait_object pointer to a pointer to a single device object - \return SANG_STATUS_SUCCESS on success or some sangoma status error -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) -{ - sangoma_wait_obj_t *sng_wait_obj = *sangoma_wait_object; -#if defined(__WINDOWS__) - int index = 0; -#endif - - if(sng_wait_obj->init_flag != LIBSNG_MAGIC_NO){ - /* error. object was not initialized by sangoma_wait_obj_init() */ - return SANG_STATUS_INVALID_DEVICE; - } - -#if defined(__WINDOWS__) - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sangoma_close(&sng_wait_obj->generic_event_object); - } - if (SANGOMA_OBJ_HAS_DEVICE(sng_wait_obj)) { - for(index = 0; index < LIBSNG_NUMBER_OF_EVENT_OBJECTS; index++){ - sangoma_close(&sng_wait_obj->sng_event_objects[index]); - } - } -#else - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sangoma_close(&sng_wait_obj->signal_read_fd); - sangoma_close(&sng_wait_obj->signal_write_fd); - } -#endif - sng_wait_obj->init_flag = 0; - sng_wait_obj->object_type = UNKNOWN_WAIT_OBJ; - free(sng_wait_obj); - *sangoma_wait_object = NULL; - return SANG_STATUS_SUCCESS; -} - -/*! - \fn void sangoma_wait_obj_signal(void *sangoma_wait_object) - \brief Set wait object to a signaled state - \param sangoma_wait_object pointer a single device object - \return 0 on success, non-zero on error -*/ -int _SAPI_CALL sangoma_wait_obj_signal(sangoma_wait_obj_t *sng_wait_obj) -{ - if (!SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - /* even when Windows objects are always signalable for the sake of providing - * a consistent interface to the user we downgrade the capabilities of Windows - * objects unless the sangoma wait object is explicitly initialized as signalable - * */ - return SANG_STATUS_INVALID_DEVICE; - } -#if defined(__WINDOWS__) - if(sng_wait_obj->generic_event_object){ - if (!SetEvent(sng_wait_obj->generic_event_object)) { - return SANG_STATUS_GENERAL_ERROR; - } - } -#else - /* at this point we know is a signalable object and has a signal_write_fd */ - if (write(sng_wait_obj->signal_write_fd, "s", 1) < 1) { - return SANG_STATUS_GENERAL_ERROR; - } -#endif - return SANG_STATUS_SUCCESS; -} - -/*! - \fn sng_fd_t sangoma_wait_obj_get_fd(void *sangoma_wait_object) - \brief Retrieve fd device file descriptor which was the 'fd' parameter for sangoma_wait_obj_init() - \param sangoma_wait_object pointer a single device object - \return fd - device file descriptor -*/ -sng_fd_t _SAPI_CALL sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sng_wait_obj) -{ - return sng_wait_obj->fd; -} - -/*! - \fn void sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Store the given context into provided sangoma wait object. - \brief This function is useful to associate a context with a sangoma wait object. - \param sangoma_wait_object pointer a single device object - \param context void pointer to user context - \return void -*/ -void _SAPI_CALL sangoma_wait_obj_set_context(sangoma_wait_obj_t *sng_wait_obj, void *context) -{ - sng_wait_obj->context = context; -} - -/*! - \fn void *sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Retrieve the user context (if any) that was set via sangoma_wait_obj_set_context. - \param sangoma_wait_object pointer a single device object - \return void* -*/ -void* _SAPI_CALL sangoma_wait_obj_get_context(sangoma_wait_obj_t *sng_wait_obj) -{ - return sng_wait_obj->context; -} - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], int32_t in_flags[], int32_t out_flags[] uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - \brief Wait for multiple sangoma waitable objects - \param sangoma_wait_objects pointer to array of wait objects previously created with sangoma_wait_obj_create - \param in_flags array of flags corresponding to the flags the user is interested on for each waitable object - \param out_flags array of flags corresponding to the flags that are ready in the waitable objects - \param number_of_sangoma_wait_objects size of the array of waitable objects and flags - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured check in sangoma_wait_objects, any other return code is some error -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sng_wait_objects[], uint32_t in_flags[], uint32_t out_flags[], - uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout) -{ -#if defined(__WINDOWS__) - HANDLE hEvents[MAXIMUM_WAIT_OBJECTS]; - uint32_t uiMapEventIndexToWaitObjectIndex[MAXIMUM_WAIT_OBJECTS]; - DWORD dwResult; - int at_least_one_poll_set_flags_out, number_of_internal_signaling_objects, err; -#endif - uint32_t i = 0, j = 0; - - memset(out_flags, 0x00, number_of_sangoma_wait_objects * sizeof(out_flags[0])); -#if defined(__WINDOWS__) - /* This loop will calculate 'number_of_internal_signaling_objects' and will initialize 'hEvents' - * based on 'number_of_sangoma_wait_objects' and 'in_flags'. */ - number_of_internal_signaling_objects = 0; - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - sangoma_wait_obj_t *sangoma_wait_object = sng_wait_objects[i]; - - /* if SANGOMA_OBJ_IS_SIGNALABLE add the generic_event_object.hEvent to the hEvents */ - if(sangoma_wait_object->generic_event_object){ - if(check_number_of_wait_objects(number_of_internal_signaling_objects, __FUNCTION__, __LINE__)){ - return SANG_STATUS_NO_FREE_BUFFERS; - } - hEvents[number_of_internal_signaling_objects] = sangoma_wait_object->generic_event_object; - uiMapEventIndexToWaitObjectIndex[number_of_internal_signaling_objects] = i; - number_of_internal_signaling_objects++; - } - - for(j = 0; j < LIBSNG_NUMBER_OF_EVENT_OBJECTS; j++){ - if(sangoma_wait_object->sng_event_objects[j]){ - if( ((j == LIBSNG_EVENT_INDEX_POLLIN) && (in_flags[i] & POLLIN)) || - ((j == LIBSNG_EVENT_INDEX_POLLOUT) && (in_flags[i] & POLLOUT)) || - ((j == LIBSNG_EVENT_INDEX_POLLPRI) && (in_flags[i] & POLLPRI)) ){ - - if(check_number_of_wait_objects(number_of_internal_signaling_objects, __FUNCTION__, __LINE__)){ - return SANG_STATUS_NO_FREE_BUFFERS; - } - hEvents[number_of_internal_signaling_objects] = sangoma_wait_object->sng_event_objects[j]; - uiMapEventIndexToWaitObjectIndex[number_of_internal_signaling_objects] = i; - number_of_internal_signaling_objects++; - } - }/* if () */ - }/* for() */ - }/* for() */ - - if(number_of_internal_signaling_objects < 1){ - DBG_ERR("'number_of_internal_signaling_objects': %d is less than the Minimum of: 1!\n", - number_of_internal_signaling_objects); - /* error - most likely the user did not initialize sng_wait_objects[] */ - return SANG_STATUS_INVALID_PARAMETER; - } - - at_least_one_poll_set_flags_out = FALSE; - - /* It is important to get 'out flags' BEFORE the WaitForMultipleObjects() - * because it allows to keep API driver's transmit queue full. */ - err = get_out_flags(sng_wait_objects, INVALID_INDEX, in_flags, out_flags, number_of_sangoma_wait_objects, &at_least_one_poll_set_flags_out); - if(SANG_ERROR(err)){ - return err; - } - - if(TRUE == at_least_one_poll_set_flags_out){ - return SANG_STATUS_SUCCESS; - } - - /* wait untill at least one of the events is signaled OR a 'system_wait_timeout' occured */ - dwResult = WaitForMultipleObjects(number_of_internal_signaling_objects, &hEvents[0], FALSE, system_wait_timeout); - if (WAIT_TIMEOUT == dwResult){ - return SANG_STATUS_APIPOLL_TIMEOUT; - } - - if( dwResult >= (DWORD)number_of_internal_signaling_objects ) { - return SANG_STATUS_GENERAL_ERROR; - } - - /* WaitForMultipleObjects() was waken by a Sangoma or by a non-Sangoma wait object. */ - err = get_out_flags(sng_wait_objects, - uiMapEventIndexToWaitObjectIndex[dwResult],/* This is the index of first signaled object in - * the original sng_wait_objects[] array, not in hEvents[] array. */ - in_flags, out_flags, number_of_sangoma_wait_objects, NULL); - if(SANG_ERROR(err)){ - return err; - } - - return SANG_STATUS_SUCCESS; -#else - struct pollfd pfds[number_of_sangoma_wait_objects*2]; /* we need twice as many polls because of the sangoma signalable objects */ - char dummy_buf[1]; - int res; - j = 0; - - memset(pfds, 0, sizeof(pfds)); - - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - - if (SANGOMA_OBJ_HAS_DEVICE(sng_wait_objects[i])) { - pfds[i].fd = sng_wait_objects[i]->fd; - pfds[i].events = in_flags[i]; - } - - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_objects[i])) { - pfds[number_of_sangoma_wait_objects+j].fd = sng_wait_objects[i]->signal_read_fd; - pfds[number_of_sangoma_wait_objects+j].events = POLLIN; - j++; - } - } - - poll_try_again: - - res = poll(pfds, (number_of_sangoma_wait_objects + j), system_wait_timeout); - if (res > 0) { - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - out_flags[i] = pfds[i].revents; - /* POLLIN, POLLOUT, POLLPRI have same values as SANG_WAIT_OBJ_ HAS_INPUT, CAN_OUTPUT and HAS_EVENTS, no need to set them */ - } - for(i = 0; i < j; i++){ - if (pfds[number_of_sangoma_wait_objects+i].revents & POLLIN) { - /* read and discard the signal byte */ - read(pfds[number_of_sangoma_wait_objects+i].fd, &dummy_buf, 1); - /* set the proper flag so users may know this object was signaled */ - out_flags[i] |= SANG_WAIT_OBJ_IS_SIGNALED; - } - } - } else if (res < 0 && errno == EINTR) { - /* TODO: decrement system_wait_timeout */ - goto poll_try_again; - } - if (res < 0) { - return SANG_STATUS_GENERAL_ERROR; - } - if (res == 0) { - return SANG_STATUS_APIPOLL_TIMEOUT; - } - return SANG_STATUS_SUCCESS; -#endif -} - - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int32_t inflags, int32_t *outflags, int32_t timeout) - \brief Wait for a single waitable object - \param sangoma_wait_obj pointer to a wait object previously created with sangoma_wait_obj_create - \param timeout timeout in miliseconds in case of no event - \return SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured use sangoma_wait_obj_get_out_flags to check or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, uint32_t inflags, uint32_t *outflags, int32_t timeout) -{ - return sangoma_waitfor_many(&sangoma_wait_obj, &inflags, outflags, 1, timeout); -} - - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - - -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name) -{ -#if defined(__WINDOWS__) -/* FIXME: Not implemented */ - return -1; -#else - sprintf(interface_name,"s%ic%i",span,chan); -#endif - return 0; -} - -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan) -{ - char *p=NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'g') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 'w') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -int _SAPI_CALL sangoma_interface_wait_up(int span, int chan, int sectimeout) -{ -#if defined(__WINDOWS__) - /* Windows does not need to wait for interfaces to come up */ - return 0; -#else - char interface_name[FNAME_LEN]; - struct stat statbuf; - struct timeval endtime = {0,0}; - struct timeval curtime = {0,0}; - int counter; - int rc; - if (sectimeout >= 0 && gettimeofday(&endtime, NULL)) { - return -1; - } - snprintf(interface_name, sizeof(interface_name), "/dev/" WP_INTERFACE_NAME_FORM, span, chan); - endtime.tv_sec += sectimeout; - do { - counter = 0; - while ((rc = stat(interface_name, &statbuf)) && errno == ENOENT && counter != 10) { - poll(0, 0, 100); // test in 100ms increments - counter++; - } - if (!rc || errno != ENOENT) break; - if (gettimeofday(&curtime, NULL)) { - return -1; - } - } while (sectimeout < 0 || timercmp(&endtime, &curtime,>)); - return rc; -#endif -} - -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) -{ - char *p = NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'c') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 's') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -sng_fd_t _SAPI_CALL sangoma_open_api_span_chan(int span, int chan) -{ - sng_fd_t fd = INVALID_HANDLE_VALUE; - wanpipe_api_t tdm_api; - int err; - - fd = __sangoma_open_api_span_chan(span, chan); - -#if defined(__WINDOWS__) - if(fd == INVALID_HANDLE_VALUE){ - return fd; - } -#else - if (fd < 0) { - return fd; - } -#endif - - memset(&tdm_api,0,sizeof(tdm_api)); - tdm_api.wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - err=sangoma_cmd_exec(fd,&tdm_api); - if (err){ - sangoma_close(&fd); - return fd; - } - - if (tdm_api.wp_cmd.open_cnt > 1) { - /* this is NOT the first open request for this span/chan */ - sangoma_close(&fd); - fd = INVALID_HANDLE_VALUE;/* fd is NOT valid anymore */ - } - - return fd; -} - -static sng_fd_t _SAPI_CALL sangoma_open_dev_by_name(const char *dev_name) -{ - char fname[FNAME_LEN]; - -#if defined(__WINDOWS__) - _snprintf(fname , FNAME_LEN, "\\\\.\\%s", dev_name); - - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - sprintf(fname,"/dev/%s", dev_name); - - return open(fname, O_RDWR); -#endif -} - -/* no checks done for multiple open */ -sng_fd_t _SAPI_CALL __sangoma_open_api_span_chan(int span, int chan) -{ - char tmp_fname[FNAME_LEN]; - - /* Form the Interface Name from span and chan number (i.e. wanpipe1_if1). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_INTERFACE_NAME_FORM, span, chan); - - return sangoma_open_dev_by_name(tmp_fname); -} - -sng_fd_t _SAPI_CALL sangoma_open_api_ctrl(void) -{ - return sangoma_open_dev_by_name(WP_CTRL_DEV_NAME); -} - -#ifdef WP_API_FEATURE_LOGGER -sng_fd_t _SAPI_CALL sangoma_logger_open(void) -{ - return sangoma_open_dev_by_name(WP_LOGGER_DEV_NAME); -} -#endif - -int _SAPI_CALL sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return -1; - } - - return tdm_api->wp_cmd.open_cnt; -} - -sng_fd_t _SAPI_CALL sangoma_create_socket_by_name(char *device, char *card) -{ - int span,chan; - sangoma_interface_toi(device,&span,&chan); - - return sangoma_open_api_span_chan(span,chan); -} - - -sng_fd_t _SAPI_CALL sangoma_open_api_span(int span) -{ - int i=0; - sng_fd_t fd = INVALID_HANDLE_VALUE; - - for(i = 1; i < 32; i++){ - - fd = sangoma_open_api_span_chan(span, i); - -#if defined(__WINDOWS__) - if(fd != INVALID_HANDLE_VALUE){ -#else - if (fd >= 0) { -#endif - - /* found free chan */ - break; - } - - }/*for()*/ - - return fd; -} - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void -*/ -void _SAPI_CALL sangoma_close(sng_fd_t *fd) -{ - if (!fd) { - return; - } -#if defined(__WINDOWS__) - if (*fd != INVALID_HANDLE_VALUE){ - CloseHandle(*fd); - *fd = INVALID_HANDLE_VALUE; - } -#else - if (*fd >= 0) { - close(*fd); - *fd = -1; - } -#endif -} - - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -int _SAPI_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) -{ - int rx_len=0; - -#if defined(__WINDOWS__) - wp_api_hdr_t *rx_hdr = (wp_api_hdr_t*)hdrbuf; - wp_api_element_t wp_api_element; - - if(hdrlen != sizeof(wp_api_hdr_t)){ - /*error*/ - DBG_ERR("hdrlen (%i) != sizeof(wp_api_hdr_t) (%i)\n", hdrlen, sizeof(wp_api_hdr_t)); - return -1; - } - - if(DoReadCommand(fd, &wp_api_element)){ - /*error*/ - DBG_ERR("DoReadCommand() failed! Check messages log.\n"); - return -4; - } - - memcpy(rx_hdr, &wp_api_element.hdr, sizeof(wp_api_hdr_t)); - - switch(rx_hdr->operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: - /* ok */ - if(rx_hdr->data_length <= datalen){ - memcpy(databuf, wp_api_element.data, rx_hdr->data_length); - }else{ - rx_hdr->operation_status = SANG_STATUS_BUFFER_TOO_SMALL; - } - break; - default: - /* note that SANG_STATUS_NO_DATA_AVAILABLE is NOT an error! */ - if(0)DBG_ERR("Operation Status: %s(%d)\n", - SDLA_DECODE_SANG_STATUS(rx_hdr->operation_status), rx_hdr->operation_status); - return -5; - } - - rx_len = rx_hdr->data_length; -#else - wan_msghdr_t msg; - wan_iovec_t iov[2]; - - memset(&msg,0,sizeof(msg)); - memset(&iov[0],0,sizeof(iov[0])*2); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - rx_len = read(fd,&msg,sizeof(msg)); - - if (rx_len <= sizeof(wp_api_hdr_t)){ - return -EINVAL; - } - - rx_len-=sizeof(wp_api_hdr_t); -#endif - return rx_len; -} - -int _SAPI_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) -{ - int bsent=-1; - wp_api_hdr_t *wp_api_hdr = hdrbuf; - - if (hdrlen != sizeof(wp_api_hdr_t)) { - /* error. Possible cause is a mismatch between versions of API header files. */ - DBG_ERR("hdrlen (%i) != sizeof(wp_api_hdr_t) (%i)\n", hdrlen, sizeof(wp_api_hdr_t)); - return -1; - } - -#if defined(__WINDOWS__) - - wp_api_hdr->data_length = datalen; - - /*queue data for transmission*/ - if(DoWriteCommand(fd, databuf, datalen, hdrbuf, hdrlen)){ - /*error*/ - DBG_ERR("DoWriteCommand() failed!! Check messages log.\n"); - return -1; - } - - bsent=0; - /*check that frame was transmitted*/ - switch(wp_api_hdr->operation_status) - { - case SANG_STATUS_SUCCESS: - bsent = datalen; - break; - default: - DBG_ERR("Operation Status: %s(%d)\n", - SDLA_DECODE_SANG_STATUS(wp_api_hdr->operation_status), wp_api_hdr->operation_status); - break; - }/*switch()*/ -#else - wan_msghdr_t msg; - wan_iovec_t iov[2]; - - memset(&msg,0,sizeof(msg)); - memset(&iov[0],0,sizeof(iov[0])*2); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - bsent = write(fd,&msg,sizeof(msg)); - - if (bsent == (datalen+hdrlen)){ - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_SUCCESS; - bsent-=sizeof(wp_api_hdr_t); - } else if (errno == EBUSY){ - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_DEVICE_BUSY; - } else { - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_IO_ERROR; - } - wp_api_hdr->wp_api_hdr_data_length=bsent; - -#endif - return bsent; -} - - -#ifdef WANPIPE_TDM_API - - -/************************************************************//** - * Device API COMMAND Functions - ***************************************************************/ - - - -/*======================================================== - * Execute TDM command - * - */ -int _SAPI_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - -#if defined(__WINDOWS__) - err = tdmv_api_ioctl(fd, &tdm_api->wp_cmd); -#else - err = ioctl(fd,WANPIPE_IOCTL_API_CMD,&tdm_api->wp_cmd); - if (err < 0){ - char tmp[50]; - sprintf(tmp,"TDM API: CMD: %i\n",tdm_api->wp_cmd.cmd); - perror(tmp); - return -1; - } -#endif - return err; -} - -/*======================================================== - * Get Full TDM API configuration per channel - * - */ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FULL_CFG; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - -#if 0 - printf("TDM API CFG:\n"); - printf("\thw_tdm_coding:\t%d\n",tdm_api->wp_cmd.hw_tdm_coding); - printf("\thw_mtu_mru:\t%d\n",tdm_api->wp_cmd.hw_mtu_mru); - printf("\tusr_period:\t%d\n",tdm_api->wp_cmd.usr_period); - printf("\ttdm_codec:\t%d\n",tdm_api->wp_cmd.tdm_codec); - printf("\tpower_level:\t%d\n",tdm_api->wp_cmd.power_level); - printf("\trx_disable:\t%d\n",tdm_api->wp_cmd.rx_disable); - printf("\ttx_disable:\t%d\n",tdm_api->wp_cmd.tx_disable); - printf("\tusr_mtu_mru:\t%d\n",tdm_api->wp_cmd.usr_mtu_mru); - printf("\tidle flag:\t0x%02X\n",tdm_api->wp_cmd.idle_flag); - -#ifdef WP_API_FEATURE_FE_ALARM - printf("\tfe alarms:\t0x%02X\n",tdm_api->wp_cmd.fe_alarms); -#endif - - printf("\trx pkt\t%d\ttx pkt\t%d\n",tdm_api->wp_cmd.stats.rx_packets, - tdm_api->wp_cmd.stats.tx_packets); - printf("\trx err\t%d\ttx err\t%d\n", - tdm_api->wp_cmd.stats.rx_errors, - tdm_api->wp_cmd.stats.tx_errors); -#ifndef __WINDOWS__ - printf("\trx ovr\t%d\ttx idl\t%d\n", - tdm_api->wp_cmd.stats.rx_fifo_errors, - tdm_api->wp_cmd.stats.tx_carrier_errors); -#endif -#endif - - return 0; -} - -/*======================================================== - * SET Codec on a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_CODEC; - tdm_api->wp_cmd.tdm_codec = codec; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Codec from a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_CODEC; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.tdm_codec; -} - -/*======================================================== - * SET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_USR_PERIOD; - tdm_api->wp_cmd.usr_period = period; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_PERIOD; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_period; -} - -/*======================================================== - * GET Current User Hardware Coding Format - * - * Coding Format will be ULAW/ALAW based on T1/E1 - */ - -int _SAPI_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_CODING; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_tdm_coding; -} - -#ifdef WP_API_FEATURE_FAX_EVENTS -/*======================================================== - * GET Current User Hardware FAX Detect Enabled/Disabled - * - * Will return true if HW FAX Detect is enabled on Octasic - */ - -int _SAPI_CALL sangoma_tdm_get_hw_fax(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_FAX_DETECT; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_dtmf; -} - -int _SAPI_CALL sangoma_tdm_enable_fax_detect(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_FAX_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_fax_detect(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_FAX_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -#endif - -#ifdef WP_API_FEATURE_DTMF_EVENTS -/*======================================================== - * GET Current User Hardware DTMF Enabled/Disabled - * - * Will return true if HW DTMF is enabled on Octasic - */ - -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_DTMF; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_dtmf; -} - -/*======================================================== - * GET Current User Hardware EC Enabled/Disabled - * - * Will return true if HW EC is enabled - */ - -int _SAPI_CALL sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_EC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_ec; -} -#endif - -/*======================================================== - * GET Current User MTU/MRU values in bytes. - * - * The USER MTU/MRU values will change each time a PERIOD - * or CODEC is adjusted. - */ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_MTU_MRU; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_mtu_mru; -} - -/*======================================================== - * SET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_POWER_LEVEL; - tdm_api->wp_cmd.power_level = power; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_POWER_LEVEL; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.power_level; -} - -int _SAPI_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_BUFFERS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_flush_rx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_RX_BUFFERS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_flush_tx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_TX_BUFFERS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_flush_event_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_EVENT_BUFFERS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_RBS_EVENTS; - tdm_api->wp_cmd.rbs_poll=poll_in_sec; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_RBS_EVENTS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs) -{ - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_WRITE_RBS_BITS; - tdm_api->wp_cmd.chan = (unsigned char)channel; - tdm_api->wp_cmd.rbs_tx_bits=rbs; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs) -{ - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_RBS_BITS; - tdm_api->wp_cmd.chan = (unsigned char)channel; - tdm_api->wp_cmd.rbs_tx_bits=0; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *rbs=(unsigned char)tdm_api->wp_cmd.rbs_rx_bits; - - return 0; -} - -int _SAPI_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - -#ifdef WP_API_FEATURE_EVENTS - wp_api_event_t *rx_event; - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_EVENT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - rx_event = &tdm_api->wp_cmd.event; - - - /* - The use of callbacks here is purely optional and is left - here for backward compatibility purposes. By default user - should handle events outside this funciton. This function - should only be used to read the event - */ - - switch (rx_event->wp_api_event_type){ - - case WP_API_EVENT_RBS: - if (tdm_api->wp_callback.wp_rbs_event) { - tdm_api->wp_callback.wp_rbs_event(fd,rx_event->wp_api_event_rbs_bits); - } - break; - -#ifdef WP_API_FEATURE_DTMF_EVENTS - case WP_API_EVENT_DTMF: - if (tdm_api->wp_callback.wp_dtmf_event) { - tdm_api->wp_callback.wp_dtmf_event(fd, - rx_event->wp_api_event_dtmf_digit, - rx_event->wp_api_event_dtmf_type, - rx_event->wp_api_event_dtmf_port); - } - break; -#endif - - case WP_API_EVENT_RXHOOK: - if (tdm_api->wp_callback.wp_rxhook_event) { - tdm_api->wp_callback.wp_rxhook_event(fd, - rx_event->wp_api_event_hook_state); - } - break; - - case WP_API_EVENT_RING_DETECT: - if (tdm_api->wp_callback.wp_ring_detect_event) { - tdm_api->wp_callback.wp_ring_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - - case WP_API_EVENT_RING_TRIP_DETECT: - if (tdm_api->wp_callback.wp_ring_trip_detect_event) { - tdm_api->wp_callback.wp_ring_trip_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - -#ifdef WP_API_FEATURE_FE_ALARM - case WP_API_EVENT_ALARM: - if (tdm_api->wp_callback.wp_fe_alarm_event) { - tdm_api->wp_callback.wp_fe_alarm_event(fd, - rx_event->wp_api_event_alarm); - } - break; -#endif - -#ifdef WP_API_FEATURE_LINK_STATUS - /* Link Status */ - case WP_API_EVENT_LINK_STATUS: - if(tdm_api->wp_callback.wp_link_status_event){ - tdm_api->wp_callback.wp_link_status_event(fd, - rx_event->wp_api_event_link_status); - } - - break; -#endif - -#ifdef WP_API_FEATURE_POL_REV - case WP_API_EVENT_POLARITY_REVERSE: - break; -#endif - default: -#ifdef __WINDOWS__ - if(0)printf("Warning: libsangoma: %s fd=0x%p: Unknown TDM event!", __FUNCTION__,fd); -#else - if(0)printf("Warning: libsangoma: %s fd=%d: Unknown TDM event!", __FUNCTION__, fd); -#endif - break; - } - - return 0; -#else - printf("Error: Read Event not supported!\n"); - return -1; -#endif -} - - -#ifdef WP_API_FEATURE_LOGGER -/*======================================================== - * Execute Wanpipe Logger command - */ -sangoma_status_t _SAPI_CALL sangoma_logger_cmd_exec(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ -#if defined(__WINDOWS__) - return logger_api_ioctl(fd, logger_cmd); -#else - /* FIXME: not implemented! */ - return -1; -#endif -} - -sangoma_status_t _SAPI_CALL sangoma_logger_read_event(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_READ_EVENT; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -sangoma_status_t _SAPI_CALL sangoma_logger_flush_buffers(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_FLUSH_BUFFERS; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -sangoma_status_t _SAPI_CALL sangoma_logger_get_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_GET_STATS; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -sangoma_status_t _SAPI_CALL sangoma_logger_reset_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_RESET_STATS; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -sangoma_status_t _SAPI_CALL sangoma_logger_get_open_handle_counter(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_OPEN_CNT; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -sangoma_status_t _SAPI_CALL sangoma_logger_get_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_GET_LOGGER_LEVEL; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -sangoma_status_t _SAPI_CALL sangoma_logger_set_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_SET_LOGGER_LEVEL; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -#endif /* WP_API_FEATURE_LOGGER */ - -#ifdef WP_API_FEATURE_DTMF_EVENTS -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return err; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_TRIP_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_KEWL; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_START; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_ONHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_OFFHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = tone_id; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = 0x00; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - -#endif - -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_HWEC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_HWEC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -/*======================================================== - * GET Front End Alarms - * - */ -#ifdef WP_API_FEATURE_FE_ALARM -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_ALARMS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *alarms=tdm_api->wp_cmd.fe_alarms; - - return 0; -} - -/* get current Line Connection state - Connected/Disconnected */ -int _SAPI_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} -#endif - -/* get current Line Connection state - Connected/Disconnected */ -#ifdef WP_API_FEATURE_LINK_STATUS -int _SAPI_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} - -/* set current Line Connection state - Connected/Disconnected. valid only for ISDN BRI */ -int _SAPI_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_FE_STATUS; - tdm_api->wp_cmd.fe_status = new_status; - - return sangoma_cmd_exec(fd, tdm_api); -} -#endif - -int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.channel = (unsigned char)channel; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.channel = (unsigned char)channel; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd, tdm_api); -} - - -int _SAPI_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.tx_queue_sz; -} - -int _SAPI_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = size; - - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.rx_queue_sz; - -} - -int _SAPI_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = size; - - return sangoma_cmd_exec(fd, tdm_api); - -} - -int _SAPI_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_DRIVER_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(wan_driver_version_t)) { - if (drv_ver) { - memcpy(drv_ver,&tdm_api->wp_cmd.version,sizeof(wan_driver_version_t)); - } - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_FIRMWARE_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(unsigned char)) { - *ver = tdm_api->wp_cmd.data[0]; - } else { - return -1; - } - } - - return err; -} - - -int _SAPI_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_CPLD_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(unsigned char)) { - *ver = tdm_api->wp_cmd.data[0]; - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_STATS; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (stats) { - memcpy(stats,&tdm_api->wp_cmd.stats,sizeof(wanpipe_chan_stats_t)); - } - } - - return err; -} - -int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_RESET_STATS; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RM_RXFLASHTIME; - tdm_api->wp_cmd.rxflashtime=rxflashtime; - err = sangoma_cmd_exec(fd, tdm_api); - return err; -} - - -#ifndef LIBSANGOMA_LIGHT - - -/************************************************************//** - * Device PORT Control Functions - ***************************************************************/ - -static int sangoma_port_mgmnt_ioctl(sng_fd_t fd, port_management_struct_t *port_management) -{ - int err = 0; -#if defined(__WINDOWS__) - DWORD ln; - if(DeviceIoControl( - fd, - IoctlPortManagementCommand, - (LPVOID)port_management, - sizeof(port_management_struct_t), - (LPVOID)port_management, - sizeof(port_management_struct_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - /* Call OS specific code to find cause of the error and check messages log. */ - DBG_ERR("%s():Error: IoctlPortManagementCommand failed!!\n", __FUNCTION__); - err = -1; - } -#else - err=ioctl(fd,WANPIPE_IOCTL_PORT_MGMT,port_management); - if (err) { - err = -1; - } -#endif - if(err){ - port_management->operation_status = SANG_STATUS_INVALID_DEVICE; - } - - return err; -} - -static int sangoma_port_cfg_ioctl(sng_fd_t fd, port_cfg_t *port_cfg) -{ - int err = 0; -#if defined(__WINDOWS__) - DWORD ln; - if(DeviceIoControl( - fd, - IoctlPortConfigurationCommand, - (LPVOID)port_cfg, - sizeof(port_cfg_t), - (LPVOID)port_cfg, - sizeof(port_cfg_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - /* Call OS specific code to find cause of the error and check messages log. */ - DBG_ERR("%s():Error: IoctlPortConfigurationCommand failed!!\n", __FUNCTION__); - err = -1; - } -#else - err=ioctl(fd,WANPIPE_IOCTL_PORT_CONFIG,port_cfg); - if (err) { - err = -1; - } -#endif - if(err){ - port_cfg->operation_status = SANG_STATUS_INVALID_DEVICE; - } - - return err; -} - -/* open wanpipe configuration device */ -sng_fd_t _SAPI_CALL sangoma_open_driver_ctrl(int port_no) -{ - char tmp_fname[FNAME_LEN]; - -#if defined(__WINDOWS__) - /* Form the Config Device Name (i.e. wanpipe1, wanpipe2,...). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_PORT_NAME_FORM, port_no); -#else - /* Form the Config Device Name. ("/dev/wanpipe") */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_CONFIG_DEV_NAME); -#endif - return sangoma_open_dev_by_name(tmp_fname); -} - - -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) -{ -#if defined(__WINDOWS__) - if(UdpManagementCommand(fd, wan_udp)){ - return 1; - } -#else - unsigned char id = 0; - int err=0; - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - err=ioctl(fd,WANPIPE_IOCTL_PIPEMON,wan_udp); - if (err < 0) { - return 1; - } -#endif - - if(wan_udp->wan_udphdr_return_code != WAN_CMD_OK){ - return 2; - } - return 0; -} - -int _SAPI_CALL sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = START_PORT_VOLATILE_CONFIG; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - /* ioctl failed */ - return err; - } - - return port_mgmnt->operation_status; -} - -int _SAPI_CALL sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = STOP_PORT; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - /* ioctl failed */ - return err; - } - - switch(port_mgmnt->operation_status) - { - case SANG_STATUS_CAN_NOT_STOP_DEVICE_WHEN_ALREADY_STOPPED: - /* This is not an error, rather a state indication. - * Return SANG_STATUS_SUCCESS, but real return code will be available - * for the caller at port_mgmnt->operation_status. */ - err = SANG_STATUS_SUCCESS; - break; - default: - err = port_mgmnt->operation_status; - break; - } - - return err; -} - -int _SAPI_CALL sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = GET_HARDWARE_INFO; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - return err; - } - - return port_mgmnt->operation_status; -} - -int _SAPI_CALL sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) -{ - port_cfg->command_code = SET_PORT_VOLATILE_CONFIG; - port_cfg->port_no = port_no; - - return sangoma_port_cfg_ioctl(fd, port_cfg); -} - -int _SAPI_CALL sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) -{ - - port_cfg->command_code = GET_PORT_VOLATILE_CONFIG; - port_cfg->port_no = port_no; - - return sangoma_port_cfg_ioctl(fd, port_cfg); -} - -int _SAPI_CALL sangoma_write_port_config_on_persistent_storage(hardware_info_t *hardware_info, port_cfg_t *port_cfg, unsigned short port_no) -{ - int err = 0; -#if defined(__WINDOWS__) - HKEY hPortRegistryKey = registry_open_port_key(hardware_info); - wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; - sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; - unsigned int ind; - - if(hPortRegistryKey == INVALID_HANDLE_VALUE){ - return 1; - } - - /* write T1/E1/BRI/Analog configuration */ - if(registry_write_front_end_cfg(hPortRegistryKey, port_cfg)){ - return 2; - } - - /* write TDM Voice configuration */ - if(registry_write_wan_tdmv_conf(hPortRegistryKey, port_cfg)){ - return 3; - } - - /* write number of groups */ - err = registry_set_integer_value(hPortRegistryKey, "aft_number_of_logic_channels", port_cfg->num_of_ifs); - if(err){ - return err; - } - - /* write configuration of each group */ - for(ind = 0; ind < port_cfg->num_of_ifs; ind++){ - registry_write_channel_group_cfg(hPortRegistryKey, port_cfg, ind, port_cfg->if_cfg[ind]); - } - -#else - printf("%s(): Warning: function not implemented\n", __FUNCTION__); - err = 1; -#endif - return err; -} - -#endif /* #ifndef LIBSANGOMA_LIGHT */ - -#endif /* WANPIPE_TDM_API */ diff --git a/api/libsangoma/.svn/tmp/tempfile.18.tmp b/api/libsangoma/.svn/tmp/tempfile.18.tmp deleted file mode 100644 index fd5d59e..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.18.tmp +++ /dev/null @@ -1,1574 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.h - * \brief Wanpipe API Library header for Sangoma AFT T1/E1/Analog/BRI/Serial Hardware - - * \brief Provides User a Unified/OS Agnostic API to Wanpipe/Sangoma Drivers and Hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * =============================================================================== - * v.2.0.0 Nenad Corbic - * Jan 30 2009 - * Added sangoma_get_driver_version, sangoma_get_firmware_version, - * sangoma_get_cpld_version functions,sangoma_get_stats,sangoma_flush_stats - */ - -#ifndef _LIBSNAGOMA_H -#define _LIBSNAGOMA_H - -#ifdef __linux__ -#ifndef __LINUX__ -/* most wanpipe driver headers require __LINUX__ to be defined */ -#define __LINUX__ -#endif -#endif - -#ifdef __cplusplus -extern "C" { /* for C++ users */ -#endif - -#include - - -/*! - \def WANPIPE_TDM_API - \brief Used by compiler and driver to enable TDM API -*/ -#define WANPIPE_TDM_API 1 - -/*TODO: LIBSANGOMA_VERSION_CODE should be generated out of LIBSANGOMA_LT_CURRENT and friends in configure.in */ - -/*! - \def LIBSANGOMA_VERSION - \brief LibSangoma Macro to check the Version Number -*/ -#define LIBSANGOMA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) - -/*! - \def LIBSANGOMA_VERSION_CODE - \brief LibSangoma Current Version Number to be checked against the LIBSANGOMA_VERSION Macro -*/ -#define LIBSANGOMA_VERSION_CODE LIBSANGOMA_VERSION(3,3,0) - -/*! - \def LIBSANGOMA_VERSION_STR - \brief LibSangoma Version in string format -*/ -#define LIBSANGOMA_VERSION_STR "3.3.0" - -struct sangoma_wait_obj; -#define sangoma_wait_obj_t struct sangoma_wait_obj - -#if defined(WIN32) || defined(WIN64) -#ifndef __WINDOWS__ -#define __WINDOWS__ -#endif -#include -#include -#include -#include -#include - -/*! - \def _SAPI_CALL - \brief libsangoma.dll functions exported as __cdecl calling convention -*/ -#define _SAPI_CALL __cdecl - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT (deprecated, use SANGOMA_WAIT_INFINITE instead) - \brief Infinite poll timeout value -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT INFINITE -#define SANGOMA_WAIT_INFINITE INFINITE - -/*! - \def sangoma_msleep(x) - \brief milisecond sleep function -*/ -#define sangoma_msleep(x) Sleep(x) - -/*! - \def sangoma_ctime(time_val) - \brief Convert a time value to a string - \param time_val pointer to 64-bit time value -*/ -#define sangoma_ctime(time) _ctime64(time) - -#else -/* L I N U X */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/*! - \def _SAPI_CALL - \brief Not used in Linux -*/ -#define _SAPI_CALL - -/*! - \def INVALID_HANDLE_VALUE - \brief Invalid file handle value -1, Ported from Windows -*/ -#define INVALID_HANDLE_VALUE -1 - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT (deprecated, use SANGOMA_WAIT_INFINITE instead) - \brief Infinite poll timeout value -1, Ported from Windows -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT -1 -#define SANGOMA_WAIT_INFINITE -1 - -/*! - \def __cdecl - \brief Ported from Windows - \typedef BOOL - \brief Boolean type int, Ported from Windows - \typedef DWORD - \brief DWORD type is int, Ported from Windows - \def FALSE - \brief FALSE value is 0, Ported from Windows - \def TRUE - \brief TRUE value is 1, Ported from Windows - \def sangoma_msleep(x) - \brief milisecond sleep function - \def _getch - \brief get character, Ported from Windows - \def Sleep - \brief milisecond sleep function - \typedef HANDLE - \brief file handle type int, Ported from Windows - \typedef TCHAR - \brief TCHAN type mapped to char, Ported from Windows - \typedef ULONG - \brief ULONG type mapped to unsigned long, Ported from Windows - \typedef UCHAR - \brief ULONG type mapped to unsigned char, Ported from Windows - \typedef USHORT - \brief USHORT type mapped to unsigned short, Ported from Windows - \typedef LPSTR - \brief LPSTR type mapped to unsigned char *, Ported from Windows - \typedef PUCHAR - \brief PUCHAR type mapped to unsigned char *, Ported from Windows - \typedef LPTHREAD_START_ROUTINE - \brief LPTHREAD_START_ROUTINE type mapped to unsigned char *, Ported from Windows - \def _stricmp - \brief _stricmp type mapped to _stricmp, Ported from Windows - \def _snprintf - \brief _snprintf type mapped to snprintf, Ported from Windows -*/ - -#define __cdecl - -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - -#define sangoma_msleep(x) usleep(x*1000) -#define _getch getchar -#define Sleep sangoma_msleep -#define _stricmp strcmp -#define _snprintf snprintf -#define _vsnprintf vsnprintf - -typedef int HANDLE; -typedef int BOOL; -typedef int DWORD; -typedef char TCHAR; -typedef unsigned char UCHAR; -typedef unsigned long ULONG; -typedef unsigned short USHORT; -typedef unsigned char * LPSTR; -typedef unsigned char * PUCHAR; -typedef void * LPTHREAD_START_ROUTINE; -typedef pthread_mutex_t CRITICAL_SECTION; - -#define EnterCriticalSection(arg) pthread_mutex_lock(arg) -#define LeaveCriticalSection(arg) pthread_mutex_unlock(arg) -#define InitializeCriticalSection(arg) pthread_mutex_init(arg, NULL); - -typedef struct tm SYSTEMTIME; -typedef char * LPCTSTR; - -/*! - \def sangoma_ctime(time_val) - \brief Convert a time value to a string - \param time_val pointer to time value -*/ -#define sangoma_ctime(time) ctime(time) - -#endif/* WIN32 */ - - -/*! - LIBSANGOMA_LIGHT can be used to enable only IO and EVENT - libsangoma functions. The DRIVER configuration/start/stop - functions are not compiled. - - LIBSANGOMA_LIGHT depends only on 3 header files. Instead - of all wanpipe header files needed for DRIVER management - - LIBSANGMOA_LIGHT is NOT enabled by default. -*/ - -#ifdef LIBSANGOMA_LIGHT -#include "wanpipe_api_iface.h" -#include "wanpipe_api_hdr.h" -#include "sdla_te1.h" -#include "wanpipe_events.h" -#include "wanpipe_api_deprecated.h" -#else -#include "wanpipe_api.h" -#endif - -#ifdef __LINUX__ -#include "wanpipe_kernel.h" -#endif - -/*! - * As of now this typedef maps exactly to SANG_STATUS_T, however that - * is a kernel type, ugly, ugly, uglyyyyy, we should have strictly - * minimum set of shared data structures between kernel and user - * many return codes specified in SANG_STATUS_T are kernel specific - * like FAILED_TO_LOCK_USER_MEMORY or INVALID_IRQL, the libsangoma - * user does not need that much information, and even if ever needs - * it we should provide simpler defaults - * \brief return status from sangoma APIs - */ -typedef int32_t sangoma_status_t; - -/*! - \def FNAME_LEN - \brief string length of a file name - \def FUNC_DBG(x) - \brief function debug print function - \def DBG_PRINT - \brief debug print function -*/ -#define FNAME_LEN 100 -#define FUNC_DBG(x) if(0)printf("%s():%d\n", x, __LINE__) -#define DBG_PRINT if(1)printf - -/*! - \typedef sangoma_api_hdr_t - \brief Backward comaptible define of wp_api_hdr_t -*/ -typedef wp_api_hdr_t sangoma_api_hdr_t; - -/*! - \enum _sangoma_wait_obj_type_t - \brief Wait object type definition - \typedef sangoma_wait_obj_type_t - \brief Wait object type definition -*/ -typedef enum _sangoma_wait_obj_type -{ - /*! \brief deprecated, use SANGOMA_GENERIC_WAIT_OBJ */ - UNKNOWN_WAIT_OBJ = 0, - /*! \brief Generic object that can be signaled but is not associated to any sangoma device */ - SANGOMA_GENERIC_WAIT_OBJ = 0, - /*! \brief Sangoma object associated to some device which cannot be signaled (cannot call sangoma_wait_obj_signal on it) */ - SANGOMA_DEVICE_WAIT_OBJ, - /*! \brief Sangoma object that is associated to a device AND can be signaled */ - SANGOMA_DEVICE_WAIT_OBJ_SIG, -} sangoma_wait_obj_type_t; - -#define DECODE_SANGOMA_WAIT_OBJECT_TYPE(type)\ - type == SANGOMA_GENERIC_WAIT_OBJ ? "SANGOMA_GENERIC_WAIT_OBJ" :\ - type == SANGOMA_DEVICE_WAIT_OBJ ? "SANGOMA_DEVICE_WAIT_OBJ" :\ - type == SANGOMA_DEVICE_WAIT_OBJ_SIG ? "SANGOMA_DEVICE_WAIT_OBJ_SIG" :\ - "Invalid Wait Object type!" - -/* - * Possible flags for sangoma waitable objects - * this definitions MUST match POLLIN, POLLOUT and POLLPRI - * SANG_WAIT_OBJ_IS_SIGNALED has no posix equivalent though - * Users are encouraged to use this flags instead of the system ones - */ -typedef enum _sangoma_wait_obj_flags { - SANG_WAIT_OBJ_HAS_INPUT = POLLIN, - SANG_WAIT_OBJ_HAS_OUTPUT = POLLOUT, - SANG_WAIT_OBJ_HAS_EVENTS = POLLPRI, - SANG_WAIT_OBJ_IS_SIGNALED = 0x400 /* matches GNU extension POLLMSG */ -} sangoma_wait_obj_flags_t; - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - -/*! - \fn sng_fd_t sangoma_open_api_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Restriced open, device will allowed to be open only once. -*/ -sng_fd_t _SAPI_CALL sangoma_open_api_span_chan(int span, int chan); - - -/*! - \fn sng_fd_t __sangoma_open_api_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _SAPI_CALL __sangoma_open_api_span_chan(int span, int chan); -#define __sangoma_open_tdmapi_span_chan __sangoma_open_api_span_chan - -/*! - \fn sng_fd_t sangoma_open_tdmapi_span(int span) - \brief Open a first available device on a Span - \param span span number starting from 1 to 255 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _SAPI_CALL sangoma_open_api_span(int span); - - -/*! - \def sangoma_create_socket_intr - \brief Backward compatible open span chan call -*/ - - - -/*! - \def LIBSANGOMA_TDMAPI_CTRL - \brief Global control device feature -*/ -#ifndef LIBSANGOMA_TDMAPI_CTRL -#define LIBSANGOMA_TDMAPI_CTRL 1 -#endif - -/*! - \fn sng_fd_t sangoma_open_api_ctrl(void) - \brief Open a Global Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t _SAPI_CALL sangoma_open_api_ctrl(void); - -/*! - \fn sng_fd_t sangoma_logger_open(void) - \brief Open a Global Logger Device - \return File Descriptor - negative=error 0 or greater = fd - - The global Logger device receives Logger Events for all devices - configured. -*/ -sng_fd_t _SAPI_CALL sangoma_logger_open(void); - -/*! - \fn sng_fd_t sangoma_open_driver_ctrl(int port_no) - \brief Open a Global Driver Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t _SAPI_CALL sangoma_open_driver_ctrl(int port_no); - - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void - -*/ -void _SAPI_CALL sangoma_close(sng_fd_t *fd); - - - -/*! - \fn int sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get device open count - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative or 0: error, greater than 1 : open count -*/ - -int _SAPI_CALL sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -/*! - \fn int sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) - \brief Write Data to device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be transmitted - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return transmit size, must be equal to datalen, anything else is error - - In case of error return code, one must check the header operation_status - variable to identify the reason of an error. Please refer to the error codes. -*/ - -int _SAPI_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, unsigned short datalen, int flag); - - -/*! - \fn int sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) - \brief Read Data from device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be received - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return received size, must be equal to datalen, anything else is error or busy - - In case of error return code, one must check the header operation_status - variable to identify the reason of error. Please refer to the error codes. -*/ -int _SAPI_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, int datalen, int flag); - - - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int32_t inflags, int32_t *outflags, int32_t timeout) - \brief Wait for a single waitable object - \param sangoma_wait_obj pointer to a wait object previously created with sangoma_wait_obj_create - \param timeout timeout in miliseconds in case of no event - \return SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured use sangoma_wait_obj_get_out_flags to check or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, uint32_t inflags, uint32_t *outflags, int32_t timeout); - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], int32_t in_flags[], int32_t out_flags[] uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - \brief Wait for multiple sangoma waitable objects - \param sangoma_wait_objects pointer to array of wait objects previously created with sangoma_wait_obj_create - \param in_flags array of flags corresponding to the flags the user is interested on for each waitable object - \param out_flags array of flags corresponding to the flags that are ready in the waitable objects - \param number_of_sangoma_wait_objects size of the array of waitable objects and flags - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured check in sangoma_wait_objects, any other return code is some error -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], uint32_t in_flags[], uint32_t out_flags[], - uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - -/*! - \fn sangoma_status_t sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) - \brief Create a wait object that will be used with sangoma_waitfor_many() API - \param sangoma_wait_object pointer a single device object - \param fd device file descriptor - \param object_type type of the wait object. see sangoma_wait_obj_type_t for types - \see sangoma_wait_obj_type_t - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type); - -/*! - \fn sangoma_status_t sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) - \brief De-allocate all resources inside a wait object which were allocated by sangoma_wait_obj_init(). - \param sangoma_wait_object pointer to a pointer to a single device object - \return SANG_STATUS_SUCCESS on success or some sangoma status error -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object); - -/*! - \fn void sangoma_wait_obj_signal(sangoma_wait_obj_t *sangoma_wait_object) - \brief Set wait object to a signaled state - \param sangoma_wait_object pointer a single device object that can be signaled - \return sangoma_status_t -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_signal(sangoma_wait_obj_t *sangoma_wait_object); - -/*! - \fn sng_fd_t sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sangoma_wait_object) - \brief Get fd device file descriptor which was the 'fd' parameter for sangoma_wait_obj_create(), not useful for generic objects - \param sangoma_wait_object pointer a single device object - \return sng_fd_t - device file descriptor -*/ -sng_fd_t _SAPI_CALL sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sangoma_wait_object); - -/*! - \fn void sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Store the given context into provided sangoma wait object. - \brief This function is useful to associate a context with a sangoma wait object. - \param sangoma_wait_object pointer a single device object - \param context void pointer to user context - \return void -*/ -void _SAPI_CALL sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object, void *context); - -/*! - \fn void *sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Retrieve the user context (if any) that was set via sangoma_wait_obj_set_context. - \param sangoma_wait_object pointer a single device object - \return void* -*/ -void* _SAPI_CALL sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object); - - -/************************************************************//** - * Device API COMMAND Functions - ***************************************************************/ - -/*! - \fn int sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Execute Sangoma API Command - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Read tdm api device configuration - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) - \brief Set Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \param period value in miliseconds (1,2,5,10) - \return non-zero: error, 0: ok - - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period); - -/*! - \fn int sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured period value -*/ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx/Rx MTU/MRU in bytes - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured mtu/mru in bytes -*/ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush all (tx/rx/event) buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_flush_rx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only rx buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_rx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); -/*! - \fn int sangoma_flush_tx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only tx buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_tx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_flush_event_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only event buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_event_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) - \brief Enable RBS Events on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param poll_in_sec driver poll period for rbs events - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec); - -/*! - \fn int sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RBS Events for a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs) - \brief Write RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel t1/e1 timeslot - \param rbs rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs); - -/*! - \fn int sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs) - \brief Read RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel t1/e1 timeslot - \param rbs pointer to rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ - -int _SAPI_CALL sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs); - -/*! - \fn int sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef WP_API_FEATURE_FAX_EVENTS -/*! - \fn int sangoma_tdm_get_hw_fax(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if HW FAX detect is enabled or disabled (Octasic only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Cards with Octasic HWEC -*/ -int _SAPI_CALL sangoma_tdm_get_hw_fax(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_fax_detect(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable HW FAX detect (Octasic only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Cards with Octasic HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_fax_detect(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_fax_detect(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable HW FAX detect (Octasic only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Cards with Octasic HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_fax_detect(sng_fd_t fd, wanpipe_api_t *tdm_api) - - -#endif - -/*! - \fn int sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) - \brief Transmit a TONE on this device (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param tone_id tone type to transmit - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id); - -/*! - \fn int sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable TONE Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG ON HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG OFF HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG KEWL START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms); - \brief Get Front End Alarms (T1/E1 Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param alarms bit map status of T1/E1 alarms - \return non-zero: error, 0: ok - - Supported only on T1/E1 Cards -*/ -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms); - - - -#ifdef WP_API_FEATURE_LINK_STATUS -# ifndef LIBSANGOMA_GET_LINKSTATUS -/*! - \def LIBSANGOMA_GET_LINKSTATUS - \brief Get Link Status feature -*/ -# define LIBSANGOMA_GET_LINKSTATUS 1 -# endif - -/*! - \fn int sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - -*/ -int _SAPI_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status); - -#endif - -/* set current Line Connection state - Connected/Disconnected */ -#ifndef LIBSANGOMA_GET_FESTATUS -/*! - \def LIBSANGOMA_GET_FESTATUS - \brief Get Front End Status feature -*/ -#define LIBSANGOMA_GET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) - \brief Set Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param new_status new status 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status); - - -/*! - \fn int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) - \brief Enable BRI Bchannel loopback - used when debugging bri device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel bri bchannel 1 or 2 - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel); - -/*! - \fn int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) - \brief Disable BRI Bchannel loopback - used when debugging bri device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel bri bchannel 1 or 2 - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel); - - -/*! - \fn int sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \param size tx queue size (minimum value of 1) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size); - -/*! - \fn int sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Rx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \param size rx queue size (minimum value of 1) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size); - - -#ifndef LIBSANGOMA_GET_HWCODING -/*! - \def LIBSANGOMA_GET_HWCODING - \brief Get HW Coding Feature -*/ -#define LIBSANGOMA_GET_HWCODING 1 -#endif - -/*! - \fn int sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get HW Voice Coding (ulaw/alaw) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will return the low level voice coding - depending on configuration. (ulaw or alaw) -*/ -int _SAPI_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api); - - - -#ifndef LIBSANGOMA_GET_HWDTMF -/*! - \def LIBSANGOMA_GET_HWDTMF - \brief HW DTMF Feature -*/ -#define LIBSANGOMA_GET_HWDTMF 1 -#endif -/*! - \fn int sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if hwdtmf support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW DTMF. -*/ -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if hw echo cancelation support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW EC. -*/ -int _SAPI_CALL sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_span_chan_toif(int span, int chan, char *interface_name) - \brief Convert Span & Chan to interface name - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \param interface_name pointer to string where interface name will be written - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name); - -/*! - \fn int sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) - \brief Convert Interace Name to Span & Chan - \param interface_name pointer to string containing interface name - \param span integer pointer where to write span value - \param chan integer pointer where to write chan value - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_interface_wait_up(int span, int chan, int sectimeout) - \brief Wait for a sangoma device to come up (ie: Linux wait for /dev/wanpipex_1 to come up) - \param span span number of the device to wait - \param chan chan number of the device to wait - \param sectimeout how many seconds to wait for the device to come up, -1 to wait forever - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_interface_wait_up(int span, int chan, int sectimeout); - -/*! - \fn int sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver) - \brief Get Device Driver Version Number - \param fd device file descriptor - \param tdm_api tdm api command structure - \param drv_ver driver version structure that will contain the driver version - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver); - -/*! - \fn int sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) - \brief Get Hardware/Firmware Version - \param fd device file descriptor - \param tdm_api tdm api command structure - \param ver hardware/firmware version number - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver); - -/*! - \fn int sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) - \brief Get Hardare/CPLD Version - \param fd device file descriptor - \param tdm_api tdm api command structure - \param ver hardware/cpld version number - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver); - - -/*! - \fn int sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats) - \brief Get Device Statistics. Statistics will be available in tdm_api->wp_cmd.stats structure. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param stats stats structure will be filled with device stats. (Optional, can be left NULL) - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats); - -/*! - \fn int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush/Reset device statistics - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime) - \brief Set rxflashtime for FXS module Wink-Flash Event - \param fd device file descriptor - \param tdm_api tdm api command structure - \param rxflashtime time value - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime); - - - -/************************************************************//** - * Device EVENT Function - ***************************************************************/ - - -/*! - \fn int sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Read API Events - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - The TDM API structure will be populated with a TDM API or WAN Event. - This function usually used after wait() function indicated that event - has occured. -*/ -int _SAPI_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api); - -#ifdef WP_API_FEATURE_LOGGER -/*! - \fn sangoma_status_t sangoma_logger_read_event(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Read Wanpipe Logger Events - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error - - The Logger API structure will be populated with a Logger Event. - This function usually used after wait() function indicated that - an event has occured. -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_read_event(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_flush_buffers(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Flush Wanpipe Logger internal buffers - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_flush_buffers(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get Wanpipe Logger statistics - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_get_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_reset_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Reset Wanpipe Logger statistics - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_reset_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_open_handle_counter(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get Counter of open Handles/File Descriptors of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_get_open_handle_counter(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get current level (types of events) of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_get_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_set_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Set current level (types of events) of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_set_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -#endif /* WP LOGGER FEATURE */ - -#ifndef LIBSANGOMA_LIGHT - -/************************************************************//** - * Device PORT Control Functions - ***************************************************************/ - -/*! - \fn int sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Start a Port, create Sangoma Communication interfaces. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to a port_management_struct_t structure. - On return, sangoma_driver_port_start() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _SAPI_CALL sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Start a Port, create Sangoma Communication interfaces. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to a port_management_struct_t structure. - On return, sangoma_driver_port_stop() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _SAPI_CALL sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) - \brief Set Port's "Volatile" configuration. The configuration will not persist between system restarts. - Before calling this function please stop the port by calling sangoma_driver_port_stop(). - After calling this function please start the port by calling sangoma_driver_port_start(). - \param[in] fd Port Device file descriptor - \param[in, out] port_cfg pointer to port_cfg_t structure that specifies complete Port configuration. - On return, sangoma_driver_port_set_config() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_cfg->operation_status. -*/ -int _SAPI_CALL sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) - \brief Retrieve Port's "Volatile" configuration. - \param[in] fd Port Device file descriptor - \param[out] port_cfg pointer to port_cfg_t structure. - On return, sangoma_driver_port_get_config() will copy current Port configuration - into this structure. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_cfg->operation_status. -*/ -int _SAPI_CALL sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no); - - -/*! - \fn int sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Retrieve information about a single instance of Sangoma hardware. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to port_management_struct_t structure which will contain hardware_info_t at - it's "data" field, when this function returns. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _SAPI_CALL sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_write_port_config_on_persistent_storage(hardware_info_t *hardware_info, port_cfg_t *port_cfg) - \brief Write Port's configuration on the hard disk. - Linux Specific: the "Persistent" configuration of a Port N (e.g. WANPIPE1) is stored in - /etc/wanpipe/wanpipeN.conf (e.g. wanpipe1.conf). - Configuration can be manualy viewed/changed by editing the ".conf" file. - Currently this functionality is not implemented. - Windows Specific: the "Persistent" configuration of a Port (e.g. WANPIPE1) is stored in - Windows Registry. - Configuration can be manualy viewed/changed in the Device Manager. - \param[in] hardware_info pointer to hardware_info_t structure containing information about a - single instance of Sangoma hardware. - \param[in] port_cfg pointer to structure containing complete Port configuration. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_write_port_config_on_persistent_storage(hardware_info_t *hardware_info, port_cfg_t *port_cfg, unsigned short port_no); - - -/************************************************************//** - * Device MANAGEMENT Functions - ***************************************************************/ - -/*! - \fn int sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) - \brief Execute Sangoma Management Command - \param fd device file descriptor - \param wan_udp management command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp); - - -#endif /* LIBSANGOMA_LIGHT */ - - -/*================================================================ - * DEPRECATED Function Calls - Not to be used any more - * Here for backward compatibility - *================================================================*/ - - -#ifndef LIBSANGOMA_SET_FESTATUS -/*! - \def LIBSANGOMA_SET_FESTATUS - \brief Set Front End Status Feature -*/ -#define LIBSANGOMA_SET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - - Deprecated - replaced by sangoma_tdm_get_link_status function -*/ -int _SAPI_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status); - - - -/*! - \fn int sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) - \brief Set TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \param codec codec to set (ulaw/alaw/slinear) - \return non-zero: error, 0: ok - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec); - -/*! - \fn int sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Configured TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured codec value - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn sng_fd_t sangoma_create_socket_by_name(char *device, char *card) - \brief Open a device based on a interface and card name - \param device interface name - \param card card name - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Deprecated - here for backward compatibility -*/ -sng_fd_t _SAPI_CALL sangoma_create_socket_by_name(char *device, char *card); - -/*! - \fn int sangoma_interface_toi(char *interface_name, int *span, int *chan) - \brief Convert Span & Chan to interface name - \param interface_name pointer to string where interface name will be written - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return non-zero = error, 0 = ok - Deprecated - here for backward compatibility -*/ -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) - \brief Set Power Level - so only data matching the power level would be passed up. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param power value of power - \return non-zero: error, 0: ok - - Deprecated - not used/implemented -*/ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power); - -/*! - \fn int sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Configured Power Level - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured power level - - Deprecated - not used/implemented -*/ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef __cplusplus -} -#endif - -/*! Backward compabile defines */ -#if !defined(__WINDOWS__) -#define sangoma_open_tdmapi_span_chan sangoma_open_api_span_chan -#define sangoma_open_tdmapi_span sangoma_open_api_span -#define sangoma_open_tdmapi_ctrl sangoma_open_api_ctrl -#define sangoma_tdm_get_fe_status sangoma_get_fe_status -#define sangoma_socket_close sangoma_close -#define sangoma_tdm_get_hw_coding sangoma_get_hw_coding -#define sangoma_tdm_set_fe_status sangoma_set_fe_status -#define sangoma_tdm_get_link_status sangoma_get_link_status -#define sangoma_tdm_flush_bufs sangoma_flush_bufs -#define sangoma_tdm_cmd_exec sangoma_cmd_exec -#define sangoma_tdm_read_event sangoma_read_event -#define sangoma_readmsg_tdm sangoma_readmsg -#define sangoma_readmsg_socket sangoma_readmsg -#define sangoma_sendmsg_socket sangoma_writemsg -#define sangoma_writemsg_tdm sangoma_writemsg -#define sangoma_create_socket_intr sangoma_open_api_span_chan -#endif - -#endif /* _LIBSNAGOMA_H */ - diff --git a/api/libsangoma/.svn/tmp/tempfile.19.tmp b/api/libsangoma/.svn/tmp/tempfile.19.tmp deleted file mode 100644 index 72c0c9c..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.19.tmp +++ /dev/null @@ -1,2982 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.c - * \brief Wanpipe API Code Library for Sangoma AFT T1/E1/Analog/BRI/Serial hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - ******************************************************************************* - */ - -#include "libsangoma-pvt.h" - -#if defined(__WINDOWS__) -# include /* SetupDiXXX() functions */ -# include /* GUID instantination */ -# include /* DEFINE_GUID() */ -# include "public.h" /* GUID_DEVCLASS_SANGOMA_ADAPTER */ - -# define MAX_COMP_INSTID 2096 -# define MAX_COMP_DESC 2096 -# define MAX_FRIENDLY 2096 -# define TMP_BUFFER_LEN 256 - -/*!+! jpboily used to tell get_out_flags no objects were signaled */ -# define INVALID_INDEX (uint32_t) -1 -# define WP_ALL_BITS_SET ((uint32_t)-1) -#endif - -static void libsng_dbg(const char * fmt, ...) -{ - va_list args; - char buf[1024]; - va_start(args, fmt); - _vsnprintf(buf, sizeof(buf), fmt, args); -#if defined(__WINDOWS__) - OutputDebugString(buf); -#else - printf(buf); -#endif - va_end(args); -} - -/*********************************************************************//** - * WINDOWS Only Section - *************************************************************************/ - -#define DBG_POLL if(0)libsng_dbg -#define DBG_EVNT if(0)libsng_dbg -#define DBG_ERR if(0)libsng_dbg("Error: %s() line: %d : ", __FUNCTION__, __LINE__);if(0)libsng_dbg -#define DBG_INIT if(0)libsng_dbg - -#if defined(__WINDOWS__) -#define DBG_REGISTRY if(0)libsng_dbg - -/* - \fn static void DecodeLastError(LPSTR lpszFunction) - \brief Decodes the Error in radable format. - \param lpszFunction error string - - Private Windows Only Function - */ -static void LibSangomaDecodeLastError(LPSTR lpszFunction) -{ - LPVOID lpMsgBuf; - DWORD dwLastErr = GetLastError(); - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - dwLastErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */ - (LPTSTR) &lpMsgBuf, - 0, - NULL - ); - /* Display the string. */ - DBG_POLL("Last Error in %s(): %s (%d)\n", lpszFunction, lpMsgBuf, dwLastErr); - /* Free the buffer. */ - LocalFree( lpMsgBuf ); -} - -/* - \fn static int handle_device_ioctl_result(int bResult) - \brief Checks result code of ioctl - \param bResult result of ioctl call - - Private Windows Only Function - */ -static u16 handle_device_ioctl_result(int bResult, char *caller_name) -{ - if(bResult == 0){ - /*error*/ - LibSangomaDecodeLastError(caller_name); - return SANG_STATUS_IO_ERROR; - }else{ - return SANG_STATUS_SUCCESS; - } -} - -/* - \fn static int UdpManagementCommand(sng_fd_t fd, wan_udp_hdr_t* wan_udp) - \brief Executes Driver Management Command - \param fd device file descriptor - \param wan_udp managemet cmd structure - - Private Windows Function - */ -static int UdpManagementCommand(sng_fd_t fd, wan_udp_hdr_t* wan_udp) -{ - DWORD ln, bIoResult; - unsigned char id = 0; - - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - bIoResult = DeviceIoControl( - fd, - IoctlManagementCommand, - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int tdmv_api_ioctl(sng_fd_t fd, wanpipe_tdm_api_cmd_t *api_cmd) - \brief Executes Driver TDM API Command Wrapper Function - \param fd device file descriptor - \param api_cmd tdm_api managemet cmd structure - - Private Windows Function - */ -static int tdmv_api_ioctl(sng_fd_t fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlTdmApiCommand, - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static USHORT DoReadCommand(sng_fd_t fd, RX_DATA_STRUCT * pRx) - \brief API READ Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - This function will NOT block because using IoctlReadCommandNonBlocking. - */ -static USHORT DoReadCommand(sng_fd_t fd, RX_DATA_STRUCT * pRx) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlReadCommandNonBlocking, - (LPVOID)NULL,/*NO input buffer!*/ - 0, - (LPVOID)pRx, - sizeof(RX_DATA_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static UCHAR DoWriteCommand(sng_fd_t fd, TX_DATA_STRUCT * pTx) - \brief API Write Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - In Legacy API mode this fuction will Block if data is busy. - In API mode no function is allowed to Block - */ -static UCHAR DoWriteCommand(sng_fd_t fd, - void *input_data_buffer, u32 size_of_input_data_buffer, - void *output_data_buffer, u32 size_of_output_data_buffer - ) -{ - DWORD BytesReturned, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlWriteCommand, - (LPVOID)input_data_buffer, - size_of_input_data_buffer, - (LPVOID)output_data_buffer, - size_of_output_data_buffer, - (LPDWORD)(&BytesReturned), - (LPOVERLAPPED)NULL); - - return (UCHAR)handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static USHORT sangoma_poll_fd(sng_fd_t fd, API_POLL_STRUCT *api_poll_ptr) - \brief Non Blocking API Poll function used to find out if Rx Data, Events or - Free Tx buffer available - \param drv device file descriptor - \param api_poll_ptr poll device that stores polling information read/write/event - \param overlapped pointer to system overlapped io structure. - - Private Windows Function - */ -static USHORT sangoma_poll_fd(sng_fd_t fd, API_POLL_STRUCT *api_poll_ptr) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlApiPoll, - (LPVOID)NULL, - 0L, - (LPVOID)api_poll_ptr, - sizeof(API_POLL_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int logger_api_ioctl(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Executes Logger API IOCTL - \param fd device file descriptor - \param logger_cmd Logger API command structure - - Private Windows Function - */ -static sangoma_status_t logger_api_ioctl(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlLoggerApiCommand, - (LPVOID)logger_cmd, - sizeof(wp_logger_cmd_t), - (LPVOID)logger_cmd, - sizeof(wp_logger_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* This function is exported only for debugging purposes and NOT a part of API. */ -sangoma_status_t _SAPI_CALL sangoma_cdev_ctrl_cmd(sng_fd_t fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlCdevControlCommand, - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -static sangoma_status_t init_sangoma_event_object(sangoma_wait_obj_t *sng_wait_obj, int flags_in, sng_fd_t fd) -{ - int event_index = -1; - wanpipe_tdm_api_cmd_t tdm_api_cmd; - sangoma_status_t sng_status; - char event_name[200], tmp_event_name[200]; - - memset(&tdm_api_cmd, 0x00, sizeof(tdm_api_cmd)); - - tdm_api_cmd.cmd = WP_CDEV_CMD_GET_INTERFACE_NAME; - sng_status = sangoma_cdev_ctrl_cmd(fd, &tdm_api_cmd); - if(SANG_ERROR(sng_status)){ - DBG_ERR("sangoma_cdev_ctrl_cmd() failed!\n"); - return sng_status; - } - - DBG_EVNT("%s(): interface name: %s\n", __FUNCTION__, tdm_api_cmd.data); - - if(flags_in & POLLIN){ - event_index = LIBSNG_EVENT_INDEX_POLLIN; - /* Form the Event Name from Interface Name and Event Type (i.e. wanpipe1_if1_pollin). */ - _snprintf(tmp_event_name, sizeof(tmp_event_name), "%s_pollin", tdm_api_cmd.data); - } - - if(flags_in & POLLOUT){ - event_index = LIBSNG_EVENT_INDEX_POLLOUT; - /* Form the Event Name from Interface Name and Event Type (i.e. wanpipe1_if1_pollout). */ - _snprintf(tmp_event_name, sizeof(tmp_event_name), "%s_pollout", tdm_api_cmd.data); - } - - if(flags_in & POLLPRI){ - event_index = LIBSNG_EVENT_INDEX_POLLPRI; - /* Form the Event Name from Interface Name and Event Type (i.e. wanpipe1_if1_pollpri). */ - _snprintf(tmp_event_name, sizeof(tmp_event_name), "%s_pollpri", tdm_api_cmd.data); - } - - if(event_index == -1){ - /* invalid 'flags_in', this should be an assert */ - return SANG_STATUS_GENERAL_ERROR; - } - - /* 1. The Sangoma Device Driver creates Notification Events in "\\BaseNamedObjects\\Global\\" - * when first CreateFile() was called by a process. That means the Events will inherit - * the security attributes of the calling process, so the calling process will have - * the permissions to open the Events by calling OpenEvent(). Since Events are created - * "Global" subdirectory, the calling process does NOT need Administrator priveleges. - * 2. The Events are deleted when the last HANDLE for a device is closed by CloseHandle() - * or automatically by the system when calling process exits. */ - _snprintf(event_name, sizeof(event_name), "Global\\%s", tmp_event_name); - - sng_wait_obj->sng_event_objects[event_index] = OpenEvent(EVENT_ALL_ACCESS, TRUE, event_name); - if(NULL == sng_wait_obj->sng_event_objects[event_index]){ - /* error */ - LibSangomaDecodeLastError(__FUNCTION__); - return SANG_STATUS_GENERAL_ERROR; - } - - return SANG_STATUS_SUCCESS; -} - -static sangoma_status_t _SAPI_CALL sangoma_wait_obj_poll(sangoma_wait_obj_t *sangoma_wait_object, int flags_in, int *flags_out) -{ - int err; - sangoma_wait_obj_t *sng_wait_obj = sangoma_wait_object; - /*! api structure used by windows IoctlApiPoll call */ - API_POLL_STRUCT api_poll; - - *flags_out = 0; - - memset(&api_poll, 0x00, sizeof(API_POLL_STRUCT)); - api_poll.user_flags_bitmap = flags_in; - - /* This call is non-blocking - it will return immediatly. */ - if(sangoma_poll_fd(sng_wait_obj->fd, &api_poll)){ - /* error - ioctl failed */ - return SANG_STATUS_IO_ERROR; - } - - if(api_poll.operation_status == SANG_STATUS_SUCCESS){ - *flags_out = api_poll.poll_events_bitmap; - err = 0; - }else{ - /* error - command failed */ - err = api_poll.operation_status; - } - - if(*flags_out == 0){ - /*DBG_POLL("======%s(): *flags_out: 0x%X, flags_in: 0x%X\n", __FUNCTION__, *flags_out, flags_in);*/ - } - return err; -} - -static int check_number_of_wait_objects(uint32_t number_of_objects, const char *caller_function, int lineno) -{ - if(number_of_objects >= MAXIMUM_WAIT_OBJECTS){ - DBG_ERR("Caller: %s(): Line: %d: 'number_of_objects': %d is greater than the Maximum of: %d\n", - caller_function, lineno, number_of_objects, MAXIMUM_WAIT_OBJECTS); - return 1; - } - return 0; -} - -static sangoma_status_t get_out_flags(IN sangoma_wait_obj_t *sng_wait_objects[], - IN uint32_t first_signaled_obj_index, - IN uint32_t in_flags[], OUT uint32_t out_flags[], - IN uint32_t number_of_sangoma_wait_objects, - OUT BOOL *at_least_one_poll_set_flags_out) -{ - uint32_t i, j; - - if(at_least_one_poll_set_flags_out){ - *at_least_one_poll_set_flags_out = FALSE; - } - - for(i = 0; i < number_of_sangoma_wait_objects; i++) { - - sangoma_wait_obj_t *sangoma_wait_object = sng_wait_objects[i]; - - if (!SANGOMA_OBJ_HAS_DEVICE(sangoma_wait_object)) { - - /* This object does not has a device, but, may have been signaled via sangoma_wait_obj_signal() - * test if the object is signaled, if it is, set SANG_WAIT_OBJ_IS_SIGNALED */ - - if((i == first_signaled_obj_index) || (WaitForSingleObject(sangoma_wait_object->generic_event_object, 0) == WAIT_OBJECT_0)) { - /* !+! jpboily : Since WaitForMultipleObjects cleared the status - * of the first signaled object, we make sure that the out_flag - * for this object is set */ - out_flags[i] |= SANG_WAIT_OBJ_IS_SIGNALED; - } - continue; - } - - for(j = 0; j < LIBSNG_NUMBER_OF_EVENT_OBJECTS; j++){ - - if(!sangoma_wait_object->sng_event_objects[j]) { - continue; - } - - if(sangoma_wait_obj_poll(sangoma_wait_object, in_flags[i], &out_flags[i])){ - return SANG_STATUS_GENERAL_ERROR; - } - - if( out_flags[i] & in_flags[i] ){ - if(at_least_one_poll_set_flags_out){ - *at_least_one_poll_set_flags_out = TRUE; - } - } -#if 0 - /* Check if a device-related object was signalled, if it is, set SANG_WAIT_OBJ_IS_SIGNALED. */ - if (WaitForSingleObject(sangoma_wait_object->sng_event_objects[j], 0) == WAIT_OBJECT_0) { - out_flags[i] |= SANG_WAIT_OBJ_IS_SIGNALED; - } -#endif - }/* for(j = 0; j < LIBSNG_NUMBER_OF_EVENT_OBJECTS; j++) */ - }/* for(i = 0; i < number_of_sangoma_wait_objects; i++) */ - - return SANG_STATUS_SUCCESS; -} - -/*! - \brief Brief description - */ -static LONG registry_get_string_value(HKEY hkey, LPTSTR szKeyname, OUT LPSTR szValue, OUT DWORD *pdwSize) -{ - LONG iReturnCode; - - /* reading twice to set pdwSize to needed value */ - RegQueryValueEx(hkey, szKeyname, NULL, NULL, (unsigned char *)szValue, pdwSize); - - iReturnCode = RegQueryValueEx(hkey, szKeyname, NULL, NULL, (unsigned char *)szValue, pdwSize); - if(ERROR_SUCCESS == iReturnCode){ - iReturnCode = 0; - } - DBG_REGISTRY("%s(): %s: %s: iReturnCode: %d\n", __FUNCTION__, szKeyname, szValue, iReturnCode); - return iReturnCode; -} - -/*! - \brief Brief description - */ -static LONG registry_set_string_value(HKEY hkey, LPTSTR szKeyname, IN LPSTR szValue) -{ - DWORD dwSize; - LONG iReturnCode; - - dwSize = strlen(szValue) + 1; - - iReturnCode = RegSetValueEx(hkey, szKeyname, 0, REG_SZ, (unsigned char *)szValue, dwSize); - DBG_REGISTRY("%s(): %s: %s\n", __FUNCTION__, szKeyname, szValue); - - if(ERROR_SUCCESS == iReturnCode){ - iReturnCode = 0; - } - return iReturnCode; -} - -/*! - \brief Convert an integer (iValue) to string and write it to registry - */ -static LONG registry_set_integer_value(HKEY hkey, LPTSTR szKeyname, IN int iValue) -{ - DWORD dwSize; - char szTemp[TMP_BUFFER_LEN]; - LONG iReturnCode; - - sprintf(szTemp, "%u", iValue); - - dwSize = strlen(szTemp) + 1; - iReturnCode = RegSetValueEx(hkey, szKeyname, 0, REG_SZ, (unsigned char *)szTemp, dwSize); - - if(ERROR_SUCCESS == iReturnCode){ - iReturnCode = 0; - } - - DBG_REGISTRY("%s(): %s: %d: iReturnCode: %d\n", __FUNCTION__, szKeyname, iValue, iReturnCode); - return iReturnCode; -} - -/*! - * \brief Go through the list of ALL "Sangoma Hardware Abstraction Driver" ports installed on the system. - * Read Bus/Slot/Port information for a port and compare with what is searched for. - */ -static HKEY registry_open_port_key(hardware_info_t *hardware_info) -{ - int i, iRegistryReturnCode; - SP_DEVINFO_DATA deid={sizeof(SP_DEVINFO_DATA)}; - HDEVINFO hdi = SetupDiGetClassDevs((struct _GUID *)&GUID_DEVCLASS_SANGOMA_ADAPTER, NULL,NULL, DIGCF_PRESENT); - char DeviceName[TMP_BUFFER_LEN], PCI_Bus[TMP_BUFFER_LEN], PCI_Slot[TMP_BUFFER_LEN], Port_Number[TMP_BUFFER_LEN]; - DWORD dwTemp; - HKEY hKeyTmp = (struct HKEY__ *)INVALID_HANDLE_VALUE; - HKEY hPortRegistryKey = (struct HKEY__ *)INVALID_HANDLE_VALUE; - - char szCompInstanceId[MAX_COMP_INSTID]; - TCHAR szCompDescription[MAX_COMP_DESC]; - DWORD dwRegType; - /* Possible Sangoma Port Names (refer to sdladrv.inf): - Sangoma Hardware Abstraction Driver (Port 1) - Sangoma Hardware Abstraction Driver (Port 2) - Sangoma Hardware Abstraction Driver (Port 3) - Sangoma Hardware Abstraction Driver (Port 4) - Sangoma Hardware Abstraction Driver (Port 5) - Sangoma Hardware Abstraction Driver (Port 6) - Sangoma Hardware Abstraction Driver (Port 7) - Sangoma Hardware Abstraction Driver (Port 8) - Sangoma Hardware Abstraction Driver (Analog) - Sangoma Hardware Abstraction Driver (ISDN BRI) */ - const TCHAR *search_SubStr = "Sangoma Hardware Abstraction Driver"; - - /* search for all (AFT) ports: */ - for (i = 0; SetupDiEnumDeviceInfo(hdi, i, &deid); i++){ - - BOOL fSuccess = SetupDiGetDeviceInstanceId(hdi, &deid, (PSTR)szCompInstanceId, MAX_COMP_INSTID, NULL); - if (!fSuccess){ - continue; - } - - fSuccess = SetupDiGetDeviceRegistryProperty(hdi, &deid, SPDRP_DEVICEDESC, &dwRegType, (BYTE*)szCompDescription, MAX_COMP_DESC, NULL); - if (!fSuccess){ - continue; - } - - if (strstr(szCompDescription, search_SubStr)) { /* Windows can add #2 etc - do NOT consider */ - /* This is a "Sangoma Card" device, we are interested only in "Sangoma Port" devices. */ - continue; - } - - DBG_REGISTRY("* %s\n", szCompDescription); - - hKeyTmp = SetupDiOpenDevRegKey(hdi, &deid, DICS_FLAG_GLOBAL, 0, DIREG_DRV, KEY_READ | KEY_SET_VALUE ); - if(hKeyTmp == INVALID_HANDLE_VALUE){ - DBG_REGISTRY("Error: Failed to open Registry key!!\n"); - continue; - } - - PCI_Bus[0] = '\0'; - iRegistryReturnCode = registry_get_string_value(hKeyTmp, "PCI_Bus", PCI_Bus, &dwTemp); - if(iRegistryReturnCode){ - continue; - } - - PCI_Slot[0] = '\0'; - iRegistryReturnCode = registry_get_string_value(hKeyTmp, "PCI_Slot", PCI_Slot, &dwTemp); - if(iRegistryReturnCode){ - continue; - } - - Port_Number[0] = '\0'; - iRegistryReturnCode = registry_get_string_value(hKeyTmp, "Port_Number", Port_Number, &dwTemp); - if(iRegistryReturnCode){ - continue; - } - - if( atoi(PCI_Bus) == hardware_info->pci_bus_number && - atoi(PCI_Slot) == hardware_info->pci_slot_number && - atoi(Port_Number) == hardware_info->port_number ){ - - hPortRegistryKey = hKeyTmp; - - /* read device name for debugging only */ - DeviceName[0] = '\0'; - registry_get_string_value(hPortRegistryKey, "DeviceName", DeviceName, &dwTemp); - - DBG_REGISTRY("Found Port's Registry key: DeviceName: %s, PCI_Bus: %s, PCI_Slot: %s, Port_Number: %s\n", - DeviceName, PCI_Bus, PCI_Slot, Port_Number); - break; - }/* if() */ - }/* for() */ - - SetupDiDestroyDeviceInfoList(hdi); - - DBG_REGISTRY("hPortRegistryKey: 0x%X\n", hPortRegistryKey); - - return hPortRegistryKey; -} - -static char* timeslot_bitmap_to_string(int bitmap) -{ - int i = 0, range_counter = 0; - int start_channel = -1, stop_channel = -1; - static char tmp_string[256]; - - if( WP_ALL_BITS_SET == bitmap ){ - return "ALL"; /* If all bits are set, use the "ALL" keyword. */ - } - - tmp_string[0] = '\0'; - - /* all ranges between two zeros is what we will look for */ - for(i = 0; i < sizeof(bitmap) * 8; i++){ - - if(start_channel < 0){ - /* found a starting one of a range */ - if(bitmap & (1 << i)){ - start_channel = i + 1; - } - } - - if(start_channel >= 0){ - if((bitmap & (1 << i)) == 0){ - - /* we hit a zero, that means the previous channel is one */ - stop_channel = i; - - }else if(i == (sizeof(bitmap) * 8 - 1)){ - /* The most significant bit is set - there will be no delimiting zero. - * It will also take care of "all channels" which is a special - * case - there is a start but no stop channel because all bits - * are set. result will be 1-32 */ - stop_channel = (sizeof(bitmap) * 8); - } - } - - if(start_channel >= 0 && stop_channel >= 0){ - - if(range_counter){ - /* put '.' separator from the previous range */ - _snprintf(&tmp_string[strlen(tmp_string)], sizeof(tmp_string) - strlen(tmp_string), "."); - } - - if(start_channel == stop_channel){ - /* the range contains a SINGLE channel */ - _snprintf(&tmp_string[strlen(tmp_string)], sizeof(tmp_string) - strlen(tmp_string), - "%d", start_channel); - }else{ - /* the range contains MULTIPLE channels */ - _snprintf(&tmp_string[strlen(tmp_string)], sizeof(tmp_string) - strlen(tmp_string), - "%d-%d", start_channel, stop_channel); - } - - start_channel = stop_channel = -1; - range_counter++; - } - }/* for() */ - - return tmp_string; -} - -static int registry_write_front_end_cfg(HKEY hPortRegistryKey, port_cfg_t *port_cfg) -{ - wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; - sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; - sdla_te_cfg_t *te_cfg = &sdla_fe_cfg->cfg.te_cfg; - sdla_remora_cfg_t *analog_cfg = &sdla_fe_cfg->cfg.remora; - sdla_bri_cfg_t *bri_cfg = &sdla_fe_cfg->cfg.bri; - int iReturnCode = 0; - - /* set Media specific values. */ - switch(sdla_fe_cfg->media) - { - case WAN_MEDIA_T1: - case WAN_MEDIA_J1: /* the same as T1 */ - case WAN_MEDIA_E1: - /* only T1/E1 Port can change the Media, all other ports ignore this parameter. */ - iReturnCode = registry_set_integer_value(hPortRegistryKey, "Media", sdla_fe_cfg->media /*WAN_MEDIA_T1*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "LDecoding", sdla_fe_cfg->lcode /*WAN_LCODE_B8ZS*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "Framing", sdla_fe_cfg->frame /*WAN_FR_ESF*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "ClkRefPort", te_cfg->te_ref_clock); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "TE_IGNORE_YEL", te_cfg->ignore_yel_alarm); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "ACTIVE_CH", ENABLE_ALL_CHANNELS /*must be hardcoded*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "TE_RBS_CH", te_cfg->te_rbs_ch); /*not used by DS chip code, only by PMC */ - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "LBO", te_cfg->lbo /*WAN_T1_LBO_0_DB*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "ClkMode", te_cfg->te_clock /*WAN_NORMAL_CLK*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "HighImpedanceMode",te_cfg->high_impedance_mode /*WANOPT_NO*/); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "TE_RX_SLEVEL", te_cfg->rx_slevel /*WAN_TE1_RX_SLEVEL_12_DB*/); - if(iReturnCode){ - break; - } - - /* write E1 signalling for both T1 and E1 */ - iReturnCode = registry_set_integer_value(hPortRegistryKey, "E1Signalling", te_cfg->sig_mode /*WAN_TE1_SIG_CCS*/); - if(iReturnCode){ - break; - } - break; - - case WAN_MEDIA_56K: - /* do nothing */ - iReturnCode = 0; - break; - - case WAN_MEDIA_FXOFXS: - /* Analog global (per-card) settings */ - iReturnCode = registry_set_string_value(hPortRegistryKey, "remora_fxo_operation_mode_name", analog_cfg->opermode_name); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "RM_BATTTHRESH", analog_cfg->battthresh); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "RM_BATTDEBOUNCE", analog_cfg->battdebounce); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "RM_FXO_TAPPING", analog_cfg->rm_mode); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "RM_FXO_TAPPING_OFF_HOOK_THRESHOLD",analog_cfg->ohthresh); - if(iReturnCode){ - break; - } - break; - - case WAN_MEDIA_BRI: - iReturnCode = registry_set_integer_value(hPortRegistryKey, "aft_bri_clock_mode", bri_cfg->clock_mode); - if(iReturnCode){ - break; - } - break; - - case WAN_MEDIA_SERIAL: - iReturnCode = registry_set_integer_value(hPortRegistryKey, "clock_source", wandev_conf->clocking); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "BaudRate", wandev_conf->bps); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "serial_connection_type", wandev_conf->connection); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "serial_line_coding", wandev_conf->line_coding); - if(iReturnCode){ - break; - } - - iReturnCode = registry_set_integer_value(hPortRegistryKey, "serial_line_idle", wandev_conf->line_idle); - if(iReturnCode){ - break; - } - break; - - default: - DBG_ERR("Invalid Media Type %d!\n", sdla_fe_cfg->media); - iReturnCode = 1; - } - - return iReturnCode; -} - -static int registry_write_wan_tdmv_conf(HKEY hPortRegistryKey, port_cfg_t *port_cfg) -{ - wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; - sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; - wan_tdmv_conf_t *tdmv_conf = &wandev_conf->tdmv_conf; - int iReturnCode = 1; - - /* set Media specific values. */ - switch(sdla_fe_cfg->media) - { - case WAN_MEDIA_T1: - case WAN_MEDIA_J1: /* the same as T1 */ - case WAN_MEDIA_E1: - /* write dchannel bitmap as a string (the same way as active channels) */ - iReturnCode = registry_set_string_value(hPortRegistryKey, "TDMV_DCHAN", timeslot_bitmap_to_string(tdmv_conf->dchan)); - break; - - case WAN_MEDIA_56K: - case WAN_MEDIA_FXOFXS: - case WAN_MEDIA_BRI: - case WAN_MEDIA_SERIAL: - /* do nothing */ - iReturnCode = 0; - break; - - default: - DBG_ERR("Invalid Media Type %d!\n", sdla_fe_cfg->media); - iReturnCode = 2; - break; - } - - return iReturnCode; -} - -static int registry_write_channel_group_cfg(HKEY hPortRegistryKey, port_cfg_t *port_cfg, int interface_index, wanif_conf_t wanif_conf) -{ - char szTemp[TMP_BUFFER_LEN]; - int iReturnCode = 0; - - do{ - // Line mode - _snprintf(szTemp, TMP_BUFFER_LEN, "aft_logic_channel_%d_line_mode", interface_index); - iReturnCode = registry_set_string_value(hPortRegistryKey, szTemp, - (wanif_conf.hdlc_streaming == WANOPT_YES ? MODE_OPTION_HDLC : MODE_OPTION_BITSTRM)); - if(iReturnCode){ - break; - } - - // MTU - _snprintf(szTemp, TMP_BUFFER_LEN, "aft_logic_channel_%d_mtu", interface_index); - iReturnCode = registry_set_integer_value(hPortRegistryKey, szTemp, wanif_conf.mtu); - if(iReturnCode){ - break; - } - - // Operational mode - _snprintf(szTemp, TMP_BUFFER_LEN, "aft_logic_channel_%d_operational_mode", interface_index); - iReturnCode = registry_set_string_value(hPortRegistryKey, szTemp, wanif_conf.usedby); - if(iReturnCode){ - break; - } - - // Active Timeslots for the Group - _snprintf(szTemp, TMP_BUFFER_LEN, "aft_logic_channel_%d_active_ch", interface_index); - iReturnCode = registry_set_string_value(hPortRegistryKey, szTemp, timeslot_bitmap_to_string(wanif_conf.active_ch)); - if(iReturnCode){ - break; - } - - // Idle char. - _snprintf(szTemp, TMP_BUFFER_LEN, "aft_logic_channel_%d_idle_char", interface_index); - iReturnCode = registry_set_integer_value(hPortRegistryKey, szTemp, wanif_conf.u.aft.idle_flag); - if(iReturnCode){ - break; - } - - }while(0); - - return iReturnCode; -} - -/*! - * \brief Go through the list of ALL Sangoma PCI Adapters (Cards) on the system. - * Enable or Disable each one of them (state change will be visible in the Device Manager). - */ -static sangoma_status_t _SAPI_CALL sangoma_control_cards(DWORD StateChange) -{ - sangoma_status_t rc; - int i; - SP_DEVINFO_DATA deid = {sizeof(SP_DEVINFO_DATA)}; - HDEVINFO hdi; - DWORD dwTemp, dwRegType; - TCHAR szInstanceId[MAX_COMP_INSTID]; - - const TCHAR *szAftSearchSubStr = "PCI\\VEN_1923"; /* Sangoma PCI Vendor ID is 1923 */ - /*const TCHAR *szS518AdslSearchSubStr = "PCI\\VEN_14BC&DEV_D002";*/ /* Note: S518 is end-of-life */ - - SP_PROPCHANGE_PARAMS pcp; - - hdi = SetupDiGetClassDevs((struct _GUID *)&GUID_DEVCLASS_SANGOMA_ADAPTER, NULL, NULL, DIGCF_PRESENT); - if(INVALID_HANDLE_VALUE == hdi){ - /* no sangoma cards installed on the system */ - return SANG_STATUS_INVALID_DEVICE; - } - - /* search for all AFT Cards: */ - for (i = 0; SetupDiEnumDeviceInfo(hdi, i, &deid); i++){ - - BOOL fSuccess = SetupDiGetDeviceInstanceId(hdi, &deid, (PSTR)szInstanceId, sizeof(szInstanceId), NULL); - if (!fSuccess){ - rc = SANG_STATUS_REGISTRY_ERROR; - break; - } - if(!strstr(szInstanceId, szAftSearchSubStr)){ - /* Found Sangoma Port, but we are interested only Cards. */ - continue; - } - - memset(&pcp, 0x00, sizeof(pcp)); - //Set the PropChangeParams structure. - pcp.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); - pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; - pcp.Scope = DICS_FLAG_GLOBAL; /* DICS_FLAG_CONFIGSPECIFIC will enable ALL cards, including - * those explicetly DISABLED by the user in the Device Manager, - * and we don't want to force anything on the user, hence we - * use DICS_FLAG_GLOBAL. */ - pcp.StateChange = StateChange; - - if(!SetupDiSetClassInstallParams(hdi, &deid, (SP_CLASSINSTALL_HEADER *)&pcp, sizeof(pcp))){ - rc = SANG_STATUS_REGISTRY_ERROR; - break; - } - - if(!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hdi, &deid)){ - rc = SANG_STATUS_REGISTRY_ERROR; - break; - } - - }/* for() */ - - SetupDiDestroyDeviceInfoList(hdi); - - return SANG_STATUS_SUCCESS; -} - -sangoma_status_t _SAPI_CALL sangoma_unload_driver() -{ - return sangoma_control_cards(DICS_DISABLE); -} - -sangoma_status_t _SAPI_CALL sangoma_load_driver() -{ - return sangoma_control_cards(DICS_ENABLE); -} - -#endif /* __WINDOWS__ */ - - -/*********************************************************************//** - * Common Linux & Windows Code - *************************************************************************/ - - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - -/*! - \fn sangoma_status_t sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) - \brief Create a wait object that will be used with sangoma_waitfor_many() API - \param sangoma_wait_object pointer a single device object - \param fd device file descriptor - \param object_type type of the wait object. see sangoma_wait_obj_type_t for types - \see sangoma_wait_obj_type_t - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) -{ - int err = 0; - sangoma_wait_obj_t *sng_wait_obj = NULL; - - if (!sangoma_wait_object) { - return SANG_STATUS_INVALID_DEVICE; - } - *sangoma_wait_object = NULL; - sng_wait_obj = malloc(sizeof(**sangoma_wait_object)); - if (!sng_wait_obj) { - return SANG_STATUS_FAILED_ALLOCATE_MEMORY; - } - - memset(sng_wait_obj, 0x00, sizeof(*sng_wait_obj)); - /* it is a first initialization of the object */ - sng_wait_obj->init_flag = LIBSNG_MAGIC_NO; - - sng_wait_obj->fd = fd; - sng_wait_obj->object_type = object_type; - -#if defined(__WINDOWS__) - DBG_INIT("%s(): sng_wait_obj ptr: 0x%p\n", __FUNCTION__, sng_wait_obj); - DBG_INIT("%s(): fd: 0x%X, object_type: %s\n", __FUNCTION__, fd, DECODE_SANGOMA_WAIT_OBJECT_TYPE(object_type)); - DBG_INIT("%s(): sizeof(**sangoma_wait_object): %d\n", __FUNCTION__, sizeof(**sangoma_wait_object)); - - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sng_wait_obj->generic_event_object = CreateEvent( NULL, FALSE, FALSE, NULL); - if(!sng_wait_obj->generic_event_object){ - err = SANG_STATUS_GENERAL_ERROR; - goto failed; - } - } - - if(SANGOMA_GENERIC_WAIT_OBJ == object_type){ - /* everything is done for the generic wait object */ - *sangoma_wait_object = sng_wait_obj; - return SANG_STATUS_SUCCESS; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLIN, fd); - if(SANG_STATUS_SUCCESS != err){ - goto failed; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLOUT, fd); - if(SANG_STATUS_SUCCESS != err){ - goto failed; - } - - err = init_sangoma_event_object(sng_wait_obj, POLLPRI, fd); - if(SANG_STATUS_SUCCESS != err) { - goto failed; - } - - DBG_INIT("%s(): returning: %d", __FUNCTION__, err); -#else - int filedes[2]; - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sng_wait_obj->signal_read_fd = INVALID_HANDLE_VALUE; - sng_wait_obj->signal_write_fd = INVALID_HANDLE_VALUE; - /* if we want cross-process event notification we can use a named pipe with mkfifo() */ - if (pipe(filedes)) { - err = SANG_STATUS_GENERAL_ERROR; - goto failed; - } - sng_wait_obj->signal_read_fd = filedes[0]; - sng_wait_obj->signal_write_fd = filedes[1]; - } -#endif - *sangoma_wait_object = sng_wait_obj; - return err; - -failed: - if (sng_wait_obj) { - sangoma_wait_obj_delete(&sng_wait_obj); - } - return err; -} - -/*! - \fn sangoma_status_t sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) - \brief De-allocate all resources in a wait object - \param sangoma_wait_object pointer to a pointer to a single device object - \return SANG_STATUS_SUCCESS on success or some sangoma status error -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) -{ - sangoma_wait_obj_t *sng_wait_obj = *sangoma_wait_object; -#if defined(__WINDOWS__) - int index = 0; -#endif - - if(sng_wait_obj->init_flag != LIBSNG_MAGIC_NO){ - /* error. object was not initialized by sangoma_wait_obj_init() */ - return SANG_STATUS_INVALID_DEVICE; - } - -#if defined(__WINDOWS__) - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sangoma_close(&sng_wait_obj->generic_event_object); - } - if (SANGOMA_OBJ_HAS_DEVICE(sng_wait_obj)) { - for(index = 0; index < LIBSNG_NUMBER_OF_EVENT_OBJECTS; index++){ - sangoma_close(&sng_wait_obj->sng_event_objects[index]); - } - } -#else - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - sangoma_close(&sng_wait_obj->signal_read_fd); - sangoma_close(&sng_wait_obj->signal_write_fd); - } -#endif - sng_wait_obj->init_flag = 0; - sng_wait_obj->object_type = UNKNOWN_WAIT_OBJ; - free(sng_wait_obj); - *sangoma_wait_object = NULL; - return SANG_STATUS_SUCCESS; -} - -/*! - \fn void sangoma_wait_obj_signal(void *sangoma_wait_object) - \brief Set wait object to a signaled state - \param sangoma_wait_object pointer a single device object - \return 0 on success, non-zero on error -*/ -int _SAPI_CALL sangoma_wait_obj_signal(sangoma_wait_obj_t *sng_wait_obj) -{ - if (!SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_obj)) { - /* even when Windows objects are always signalable for the sake of providing - * a consistent interface to the user we downgrade the capabilities of Windows - * objects unless the sangoma wait object is explicitly initialized as signalable - * */ - return SANG_STATUS_INVALID_DEVICE; - } -#if defined(__WINDOWS__) - if(sng_wait_obj->generic_event_object){ - if (!SetEvent(sng_wait_obj->generic_event_object)) { - return SANG_STATUS_GENERAL_ERROR; - } - } -#else - /* at this point we know is a signalable object and has a signal_write_fd */ - if (write(sng_wait_obj->signal_write_fd, "s", 1) < 1) { - return SANG_STATUS_GENERAL_ERROR; - } -#endif - return SANG_STATUS_SUCCESS; -} - -/*! - \fn sng_fd_t sangoma_wait_obj_get_fd(void *sangoma_wait_object) - \brief Retrieve fd device file descriptor which was the 'fd' parameter for sangoma_wait_obj_init() - \param sangoma_wait_object pointer a single device object - \return fd - device file descriptor -*/ -sng_fd_t _SAPI_CALL sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sng_wait_obj) -{ - return sng_wait_obj->fd; -} - -/*! - \fn void sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Store the given context into provided sangoma wait object. - \brief This function is useful to associate a context with a sangoma wait object. - \param sangoma_wait_object pointer a single device object - \param context void pointer to user context - \return void -*/ -void _SAPI_CALL sangoma_wait_obj_set_context(sangoma_wait_obj_t *sng_wait_obj, void *context) -{ - sng_wait_obj->context = context; -} - -/*! - \fn void *sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Retrieve the user context (if any) that was set via sangoma_wait_obj_set_context. - \param sangoma_wait_object pointer a single device object - \return void* -*/ -void* _SAPI_CALL sangoma_wait_obj_get_context(sangoma_wait_obj_t *sng_wait_obj) -{ - return sng_wait_obj->context; -} - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], int32_t in_flags[], int32_t out_flags[] uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - \brief Wait for multiple sangoma waitable objects - \param sangoma_wait_objects pointer to array of wait objects previously created with sangoma_wait_obj_create - \param in_flags array of flags corresponding to the flags the user is interested on for each waitable object - \param out_flags array of flags corresponding to the flags that are ready in the waitable objects - \param number_of_sangoma_wait_objects size of the array of waitable objects and flags - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured check in sangoma_wait_objects, any other return code is some error -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sng_wait_objects[], uint32_t in_flags[], uint32_t out_flags[], - uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout) -{ -#if defined(__WINDOWS__) - HANDLE hEvents[MAXIMUM_WAIT_OBJECTS]; - uint32_t uiMapEventIndexToWaitObjectIndex[MAXIMUM_WAIT_OBJECTS]; - DWORD dwResult; - int at_least_one_poll_set_flags_out, number_of_internal_signaling_objects, err; -#endif - uint32_t i = 0, j = 0; - - memset(out_flags, 0x00, number_of_sangoma_wait_objects * sizeof(out_flags[0])); -#if defined(__WINDOWS__) - /* This loop will calculate 'number_of_internal_signaling_objects' and will initialize 'hEvents' - * based on 'number_of_sangoma_wait_objects' and 'in_flags'. */ - number_of_internal_signaling_objects = 0; - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - sangoma_wait_obj_t *sangoma_wait_object = sng_wait_objects[i]; - - /* if SANGOMA_OBJ_IS_SIGNALABLE add the generic_event_object.hEvent to the hEvents */ - if(sangoma_wait_object->generic_event_object){ - if(check_number_of_wait_objects(number_of_internal_signaling_objects, __FUNCTION__, __LINE__)){ - return SANG_STATUS_NO_FREE_BUFFERS; - } - hEvents[number_of_internal_signaling_objects] = sangoma_wait_object->generic_event_object; - uiMapEventIndexToWaitObjectIndex[number_of_internal_signaling_objects] = i; - number_of_internal_signaling_objects++; - } - - for(j = 0; j < LIBSNG_NUMBER_OF_EVENT_OBJECTS; j++){ - if(sangoma_wait_object->sng_event_objects[j]){ - if( ((j == LIBSNG_EVENT_INDEX_POLLIN) && (in_flags[i] & POLLIN)) || - ((j == LIBSNG_EVENT_INDEX_POLLOUT) && (in_flags[i] & POLLOUT)) || - ((j == LIBSNG_EVENT_INDEX_POLLPRI) && (in_flags[i] & POLLPRI)) ){ - - if(check_number_of_wait_objects(number_of_internal_signaling_objects, __FUNCTION__, __LINE__)){ - return SANG_STATUS_NO_FREE_BUFFERS; - } - hEvents[number_of_internal_signaling_objects] = sangoma_wait_object->sng_event_objects[j]; - uiMapEventIndexToWaitObjectIndex[number_of_internal_signaling_objects] = i; - number_of_internal_signaling_objects++; - } - }/* if () */ - }/* for() */ - }/* for() */ - - if(number_of_internal_signaling_objects < 1){ - DBG_ERR("'number_of_internal_signaling_objects': %d is less than the Minimum of: 1!\n", - number_of_internal_signaling_objects); - /* error - most likely the user did not initialize sng_wait_objects[] */ - return SANG_STATUS_INVALID_PARAMETER; - } - - at_least_one_poll_set_flags_out = FALSE; - - /* It is important to get 'out flags' BEFORE the WaitForMultipleObjects() - * because it allows to keep API driver's transmit queue full. */ - err = get_out_flags(sng_wait_objects, INVALID_INDEX, in_flags, out_flags, number_of_sangoma_wait_objects, &at_least_one_poll_set_flags_out); - if(SANG_ERROR(err)){ - return err; - } - - if(TRUE == at_least_one_poll_set_flags_out){ - return SANG_STATUS_SUCCESS; - } - - /* wait untill at least one of the events is signaled OR a 'system_wait_timeout' occured */ - dwResult = WaitForMultipleObjects(number_of_internal_signaling_objects, &hEvents[0], FALSE, system_wait_timeout); - if (WAIT_TIMEOUT == dwResult){ - return SANG_STATUS_APIPOLL_TIMEOUT; - } - - if( dwResult >= (DWORD)number_of_internal_signaling_objects ) { - return SANG_STATUS_GENERAL_ERROR; - } - - /* WaitForMultipleObjects() was waken by a Sangoma or by a non-Sangoma wait object. */ - err = get_out_flags(sng_wait_objects, - uiMapEventIndexToWaitObjectIndex[dwResult],/* This is the index of first signaled object in - * the original sng_wait_objects[] array, not in hEvents[] array. */ - in_flags, out_flags, number_of_sangoma_wait_objects, NULL); - if(SANG_ERROR(err)){ - return err; - } - - return SANG_STATUS_SUCCESS; -#else - struct pollfd pfds[number_of_sangoma_wait_objects*2]; /* we need twice as many polls because of the sangoma signalable objects */ - char dummy_buf[1]; - int res; - j = 0; - - memset(pfds, 0, sizeof(pfds)); - - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - - if (SANGOMA_OBJ_HAS_DEVICE(sng_wait_objects[i])) { - pfds[i].fd = sng_wait_objects[i]->fd; - pfds[i].events = in_flags[i]; - } - - if (SANGOMA_OBJ_IS_SIGNALABLE(sng_wait_objects[i])) { - pfds[number_of_sangoma_wait_objects+j].fd = sng_wait_objects[i]->signal_read_fd; - pfds[number_of_sangoma_wait_objects+j].events = POLLIN; - j++; - } - } - - poll_try_again: - - res = poll(pfds, (number_of_sangoma_wait_objects + j), system_wait_timeout); - if (res > 0) { - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - out_flags[i] = pfds[i].revents; - /* POLLIN, POLLOUT, POLLPRI have same values as SANG_WAIT_OBJ_ HAS_INPUT, CAN_OUTPUT and HAS_EVENTS, no need to set them */ - } - for(i = 0; i < j; i++){ - if (pfds[number_of_sangoma_wait_objects+i].revents & POLLIN) { - /* read and discard the signal byte */ - read(pfds[number_of_sangoma_wait_objects+i].fd, &dummy_buf, 1); - /* set the proper flag so users may know this object was signaled */ - out_flags[i] |= SANG_WAIT_OBJ_IS_SIGNALED; - } - } - } else if (res < 0 && errno == EINTR) { - /* TODO: decrement system_wait_timeout */ - goto poll_try_again; - } - if (res < 0) { - return SANG_STATUS_GENERAL_ERROR; - } - if (res == 0) { - return SANG_STATUS_APIPOLL_TIMEOUT; - } - return SANG_STATUS_SUCCESS; -#endif -} - - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int32_t inflags, int32_t *outflags, int32_t timeout) - \brief Wait for a single waitable object - \param sangoma_wait_obj pointer to a wait object previously created with sangoma_wait_obj_create - \param timeout timeout in miliseconds in case of no event - \return SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured use sangoma_wait_obj_get_out_flags to check or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, uint32_t inflags, uint32_t *outflags, int32_t timeout) -{ - return sangoma_waitfor_many(&sangoma_wait_obj, &inflags, outflags, 1, timeout); -} - - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - - -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name) -{ -#if defined(__WINDOWS__) -/* FIXME: Not implemented */ - return -1; -#else - sprintf(interface_name,"s%ic%i",span,chan); -#endif - return 0; -} - -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan) -{ - char *p=NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'g') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 'w') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -int _SAPI_CALL sangoma_interface_wait_up(int span, int chan, int sectimeout) -{ -#if defined(__WINDOWS__) - /* Windows does not need to wait for interfaces to come up */ - return 0; -#else - char interface_name[FNAME_LEN]; - struct stat statbuf; - struct timeval endtime = {0,0}; - struct timeval curtime = {0,0}; - int counter; - int rc; - if (sectimeout >= 0 && gettimeofday(&endtime, NULL)) { - return -1; - } - snprintf(interface_name, sizeof(interface_name), "/dev/" WP_INTERFACE_NAME_FORM, span, chan); - endtime.tv_sec += sectimeout; - do { - counter = 0; - while ((rc = stat(interface_name, &statbuf)) && errno == ENOENT && counter != 10) { - poll(0, 0, 100); // test in 100ms increments - counter++; - } - if (!rc || errno != ENOENT) break; - if (gettimeofday(&curtime, NULL)) { - return -1; - } - } while (sectimeout < 0 || timercmp(&endtime, &curtime,>)); - return rc; -#endif -} - -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) -{ - char *p = NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'c') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 's') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -sng_fd_t _SAPI_CALL sangoma_open_api_span_chan(int span, int chan) -{ - sng_fd_t fd = INVALID_HANDLE_VALUE; - wanpipe_api_t tdm_api; - int err; - - fd = __sangoma_open_api_span_chan(span, chan); - -#if defined(__WINDOWS__) - if(fd == INVALID_HANDLE_VALUE){ - return fd; - } -#else - if (fd < 0) { - return fd; - } -#endif - - memset(&tdm_api,0,sizeof(tdm_api)); - tdm_api.wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - err=sangoma_cmd_exec(fd,&tdm_api); - if (err){ - sangoma_close(&fd); - return fd; - } - - if (tdm_api.wp_cmd.open_cnt > 1) { - /* this is NOT the first open request for this span/chan */ - sangoma_close(&fd); - fd = INVALID_HANDLE_VALUE;/* fd is NOT valid anymore */ - } - - return fd; -} - -static sng_fd_t _SAPI_CALL sangoma_open_dev_by_name(const char *dev_name) -{ - char fname[FNAME_LEN]; - -#if defined(__WINDOWS__) - _snprintf(fname , FNAME_LEN, "\\\\.\\%s", dev_name); - - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - sprintf(fname,"/dev/%s", dev_name); - - return open(fname, O_RDWR); -#endif -} - -/* no checks done for multiple open */ -sng_fd_t _SAPI_CALL __sangoma_open_api_span_chan(int span, int chan) -{ - char tmp_fname[FNAME_LEN]; - - /* Form the Interface Name from span and chan number (i.e. wanpipe1_if1). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_INTERFACE_NAME_FORM, span, chan); - - return sangoma_open_dev_by_name(tmp_fname); -} - -sng_fd_t _SAPI_CALL sangoma_open_api_ctrl(void) -{ - return sangoma_open_dev_by_name(WP_CTRL_DEV_NAME); -} - -#ifdef WP_API_FEATURE_LOGGER -sng_fd_t _SAPI_CALL sangoma_logger_open(void) -{ - return sangoma_open_dev_by_name(WP_LOGGER_DEV_NAME); -} -#endif - -int _SAPI_CALL sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return -1; - } - - return tdm_api->wp_cmd.open_cnt; -} - -sng_fd_t _SAPI_CALL sangoma_create_socket_by_name(char *device, char *card) -{ - int span,chan; - sangoma_interface_toi(device,&span,&chan); - - return sangoma_open_api_span_chan(span,chan); -} - - -sng_fd_t _SAPI_CALL sangoma_open_api_span(int span) -{ - int i=0; - sng_fd_t fd = INVALID_HANDLE_VALUE; - - for(i = 1; i < 32; i++){ - - fd = sangoma_open_api_span_chan(span, i); - -#if defined(__WINDOWS__) - if(fd != INVALID_HANDLE_VALUE){ -#else - if (fd >= 0) { -#endif - - /* found free chan */ - break; - } - - }/*for()*/ - - return fd; -} - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void -*/ -void _SAPI_CALL sangoma_close(sng_fd_t *fd) -{ - if (!fd) { - return; - } -#if defined(__WINDOWS__) - if (*fd != INVALID_HANDLE_VALUE){ - CloseHandle(*fd); - *fd = INVALID_HANDLE_VALUE; - } -#else - if (*fd >= 0) { - close(*fd); - *fd = -1; - } -#endif -} - - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -int _SAPI_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) -{ - int rx_len=0; - -#if defined(__WINDOWS__) - wp_api_hdr_t *rx_hdr = (wp_api_hdr_t*)hdrbuf; - wp_api_element_t wp_api_element; - - if(hdrlen != sizeof(wp_api_hdr_t)){ - /*error*/ - DBG_ERR("hdrlen (%i) != sizeof(wp_api_hdr_t) (%i)\n", hdrlen, sizeof(wp_api_hdr_t)); - return -1; - } - - if(DoReadCommand(fd, &wp_api_element)){ - /*error*/ - DBG_ERR("DoReadCommand() failed! Check messages log.\n"); - return -4; - } - - memcpy(rx_hdr, &wp_api_element.hdr, sizeof(wp_api_hdr_t)); - - switch(rx_hdr->operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: - /* ok */ - if(rx_hdr->data_length <= datalen){ - memcpy(databuf, wp_api_element.data, rx_hdr->data_length); - }else{ - rx_hdr->operation_status = SANG_STATUS_BUFFER_TOO_SMALL; - } - break; - default: - /* note that SANG_STATUS_NO_DATA_AVAILABLE is NOT an error! */ - if(0)DBG_ERR("Operation Status: %s(%d)\n", - SDLA_DECODE_SANG_STATUS(rx_hdr->operation_status), rx_hdr->operation_status); - return -5; - } - - rx_len = rx_hdr->data_length; -#else - wan_msghdr_t msg; - wan_iovec_t iov[2]; - - memset(&msg,0,sizeof(msg)); - memset(&iov[0],0,sizeof(iov[0])*2); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - rx_len = read(fd,&msg,sizeof(msg)); - - if (rx_len <= sizeof(wp_api_hdr_t)){ - return -EINVAL; - } - - rx_len-=sizeof(wp_api_hdr_t); -#endif - return rx_len; -} - -int _SAPI_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) -{ - int bsent=-1; - wp_api_hdr_t *wp_api_hdr = hdrbuf; - - if (hdrlen != sizeof(wp_api_hdr_t)) { - /* error. Possible cause is a mismatch between versions of API header files. */ - DBG_ERR("hdrlen (%i) != sizeof(wp_api_hdr_t) (%i)\n", hdrlen, sizeof(wp_api_hdr_t)); - return -1; - } - -#if defined(__WINDOWS__) - - wp_api_hdr->data_length = datalen; - - /*queue data for transmission*/ - if(DoWriteCommand(fd, databuf, datalen, hdrbuf, hdrlen)){ - /*error*/ - DBG_ERR("DoWriteCommand() failed!! Check messages log.\n"); - return -1; - } - - bsent=0; - /*check that frame was transmitted*/ - switch(wp_api_hdr->operation_status) - { - case SANG_STATUS_SUCCESS: - bsent = datalen; - break; - default: - DBG_ERR("Operation Status: %s(%d)\n", - SDLA_DECODE_SANG_STATUS(wp_api_hdr->operation_status), wp_api_hdr->operation_status); - break; - }/*switch()*/ -#else - wan_msghdr_t msg; - wan_iovec_t iov[2]; - - memset(&msg,0,sizeof(msg)); - memset(&iov[0],0,sizeof(iov[0])*2); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - bsent = write(fd,&msg,sizeof(msg)); - - if (bsent == (datalen+hdrlen)){ - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_SUCCESS; - bsent-=sizeof(wp_api_hdr_t); - } else if (errno == EBUSY){ - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_DEVICE_BUSY; - } else { - wp_api_hdr->wp_api_hdr_operation_status=SANG_STATUS_IO_ERROR; - } - wp_api_hdr->wp_api_hdr_data_length=bsent; - -#endif - return bsent; -} - - -#ifdef WANPIPE_TDM_API - - -/************************************************************//** - * Device API COMMAND Functions - ***************************************************************/ - - - -/*======================================================== - * Execute TDM command - * - */ -int _SAPI_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - -#if defined(__WINDOWS__) - err = tdmv_api_ioctl(fd, &tdm_api->wp_cmd); -#else - err = ioctl(fd,WANPIPE_IOCTL_API_CMD,&tdm_api->wp_cmd); - if (err < 0){ - char tmp[50]; - sprintf(tmp,"TDM API: CMD: %i\n",tdm_api->wp_cmd.cmd); - perror(tmp); - return -1; - } -#endif - return err; -} - -/*======================================================== - * Get Full TDM API configuration per channel - * - */ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FULL_CFG; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - -#if 0 - printf("TDM API CFG:\n"); - printf("\thw_tdm_coding:\t%d\n",tdm_api->wp_cmd.hw_tdm_coding); - printf("\thw_mtu_mru:\t%d\n",tdm_api->wp_cmd.hw_mtu_mru); - printf("\tusr_period:\t%d\n",tdm_api->wp_cmd.usr_period); - printf("\ttdm_codec:\t%d\n",tdm_api->wp_cmd.tdm_codec); - printf("\tpower_level:\t%d\n",tdm_api->wp_cmd.power_level); - printf("\trx_disable:\t%d\n",tdm_api->wp_cmd.rx_disable); - printf("\ttx_disable:\t%d\n",tdm_api->wp_cmd.tx_disable); - printf("\tusr_mtu_mru:\t%d\n",tdm_api->wp_cmd.usr_mtu_mru); - printf("\tidle flag:\t0x%02X\n",tdm_api->wp_cmd.idle_flag); - -#ifdef WP_API_FEATURE_FE_ALARM - printf("\tfe alarms:\t0x%02X\n",tdm_api->wp_cmd.fe_alarms); -#endif - - printf("\trx pkt\t%d\ttx pkt\t%d\n",tdm_api->wp_cmd.stats.rx_packets, - tdm_api->wp_cmd.stats.tx_packets); - printf("\trx err\t%d\ttx err\t%d\n", - tdm_api->wp_cmd.stats.rx_errors, - tdm_api->wp_cmd.stats.tx_errors); -#ifndef __WINDOWS__ - printf("\trx ovr\t%d\ttx idl\t%d\n", - tdm_api->wp_cmd.stats.rx_fifo_errors, - tdm_api->wp_cmd.stats.tx_carrier_errors); -#endif -#endif - - return 0; -} - -/*======================================================== - * SET Codec on a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_CODEC; - tdm_api->wp_cmd.tdm_codec = codec; - return sangoma_cmd_exec(fd,tdm_api); -} - -/*======================================================== - * GET Codec from a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_CODEC; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.tdm_codec; -} - -/*======================================================== - * SET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_USR_PERIOD; - tdm_api->wp_cmd.usr_period = period; - return sangoma_cmd_exec(fd,tdm_api); -} - -/*======================================================== - * GET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_PERIOD; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_period; -} - -/*======================================================== - * GET Current User Hardware Coding Format - * - * Coding Format will be ULAW/ALAW based on T1/E1 - */ - -int _SAPI_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_CODING; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_tdm_coding; -} - -#ifdef WP_API_FEATURE_DTMF_EVENTS -/*======================================================== - * GET Current User Hardware DTMF Enabled/Disabled - * - * Will return true if HW DTMF is enabled on Octasic - */ - -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_DTMF; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_dtmf; -} - -/*======================================================== - * GET Current User Hardware EC Enabled/Disabled - * - * Will return true if HW EC is enabled - */ - -int _SAPI_CALL sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_EC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_ec; -} -#endif - -/*======================================================== - * GET Current User MTU/MRU values in bytes. - * - * The USER MTU/MRU values will change each time a PERIOD - * or CODEC is adjusted. - */ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_MTU_MRU; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_mtu_mru; -} - -/*======================================================== - * SET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_POWER_LEVEL; - tdm_api->wp_cmd.power_level = power; - return sangoma_cmd_exec(fd,tdm_api); -} - -/*======================================================== - * GET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_POWER_LEVEL; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.power_level; -} - -int _SAPI_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_BUFFERS; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_flush_rx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_RX_BUFFERS; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_flush_tx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_TX_BUFFERS; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_flush_event_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_EVENT_BUFFERS; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_RBS_EVENTS; - tdm_api->wp_cmd.rbs_poll = poll_in_sec; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_RBS_EVENTS; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs) -{ - WANPIPE_API_INIT_CHAN(tdm_api, channel); - tdm_api->wp_cmd.cmd = WP_API_CMD_WRITE_RBS_BITS; - tdm_api->wp_cmd.rbs_tx_bits=rbs; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs) -{ - int err; - WANPIPE_API_INIT_CHAN(tdm_api, channel); - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_RBS_BITS; - tdm_api->wp_cmd.rbs_tx_bits=0; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *rbs=(unsigned char)tdm_api->wp_cmd.rbs_rx_bits; - return 0; -} - -int _SAPI_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - -#ifdef WP_API_FEATURE_EVENTS - wp_api_event_t *rx_event; - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_EVENT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - rx_event = &tdm_api->wp_cmd.event; - - /* - The use of callbacks here is purely optional and is left - here for backward compatibility purposes. By default user - should handle events outside this funciton. This function - should only be used to read the event - */ - - switch (rx_event->wp_api_event_type){ - - case WP_API_EVENT_RBS: - if (tdm_api->wp_callback.wp_rbs_event) { - tdm_api->wp_callback.wp_rbs_event(fd,rx_event->wp_api_event_rbs_bits); - } - break; - -#ifdef WP_API_FEATURE_DTMF_EVENTS - case WP_API_EVENT_DTMF: - if (tdm_api->wp_callback.wp_dtmf_event) { - tdm_api->wp_callback.wp_dtmf_event(fd, - rx_event->wp_api_event_dtmf_digit, - rx_event->wp_api_event_dtmf_type, - rx_event->wp_api_event_dtmf_port); - } - break; -#endif - - case WP_API_EVENT_RXHOOK: - if (tdm_api->wp_callback.wp_rxhook_event) { - tdm_api->wp_callback.wp_rxhook_event(fd, - rx_event->wp_api_event_hook_state); - } - break; - - case WP_API_EVENT_RING_DETECT: - if (tdm_api->wp_callback.wp_ring_detect_event) { - tdm_api->wp_callback.wp_ring_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - - case WP_API_EVENT_RING_TRIP_DETECT: - if (tdm_api->wp_callback.wp_ring_trip_detect_event) { - tdm_api->wp_callback.wp_ring_trip_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - -#ifdef WP_API_FEATURE_FE_ALARM - case WP_API_EVENT_ALARM: - if (tdm_api->wp_callback.wp_fe_alarm_event) { - tdm_api->wp_callback.wp_fe_alarm_event(fd, - rx_event->wp_api_event_alarm); - } - break; -#endif - -#ifdef WP_API_FEATURE_LINK_STATUS - /* Link Status */ - case WP_API_EVENT_LINK_STATUS: - if(tdm_api->wp_callback.wp_link_status_event){ - tdm_api->wp_callback.wp_link_status_event(fd, - rx_event->wp_api_event_link_status); - } - - break; -#endif - -#ifdef WP_API_FEATURE_POL_REV - case WP_API_EVENT_POLARITY_REVERSE: - break; -#endif - default: -#ifdef __WINDOWS__ - if(0)printf("Warning: libsangoma: %s fd=0x%p: Unknown TDM event!", __FUNCTION__,fd); -#else - if(0)printf("Warning: libsangoma: %s fd=%d: Unknown TDM event!", __FUNCTION__, fd); -#endif - break; - } - - return 0; -#else - printf("Error: Read Event not supported!\n"); - return -1; -#endif -} - - -#ifdef WP_API_FEATURE_LOGGER -/*======================================================== - * Execute Wanpipe Logger command - */ -sangoma_status_t _SAPI_CALL sangoma_logger_cmd_exec(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ -#if defined(__WINDOWS__) - return logger_api_ioctl(fd, logger_cmd); -#else - /* FIXME: not implemented! */ - return -1; -#endif -} - -sangoma_status_t _SAPI_CALL sangoma_logger_read_event(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_READ_EVENT; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -sangoma_status_t _SAPI_CALL sangoma_logger_flush_buffers(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_FLUSH_BUFFERS; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -sangoma_status_t _SAPI_CALL sangoma_logger_get_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_GET_STATS; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -sangoma_status_t _SAPI_CALL sangoma_logger_reset_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_RESET_STATS; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -sangoma_status_t _SAPI_CALL sangoma_logger_get_open_handle_counter(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_OPEN_CNT; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -sangoma_status_t _SAPI_CALL sangoma_logger_get_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_GET_LOGGER_LEVEL; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -sangoma_status_t _SAPI_CALL sangoma_logger_set_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) -{ - logger_cmd->cmd = WP_API_LOGGER_CMD_SET_LOGGER_LEVEL; - return sangoma_logger_cmd_exec(fd, logger_cmd); -} - -#endif /* WP_API_FEATURE_LOGGER */ - -#ifdef WP_API_FEATURE_FAX_EVENTS -int _SAPI_CALL sangoma_tdm_enable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_FAX_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_disable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_FAX_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_get_hw_fax(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_FAX_DETECT; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_fax; -} -#endif - -#ifdef WP_API_FEATURE_DTMF_EVENTS -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_TRIP_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_TRIP_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_KEWL; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_START; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_ONHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_OFFHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = tone_id; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = 0x00; - return sangoma_cmd_exec(fd,tdm_api); -} -#endif - -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_HWEC; - return sangoma_cmd_exec(fd,tdm_api); -} - -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_HWEC; - return sangoma_cmd_exec(fd,tdm_api); -} - - -/*======================================================== - * GET Front End Alarms - * - */ -#ifdef WP_API_FEATURE_FE_ALARM -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_ALARMS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *alarms=tdm_api->wp_cmd.fe_alarms; - - return 0; -} - -/* get current Line Connection state - Connected/Disconnected */ -int _SAPI_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} -#endif - -/* get current Line Connection state - Connected/Disconnected */ -#ifdef WP_API_FEATURE_LINK_STATUS -int _SAPI_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} - -/* set current Line Connection state - Connected/Disconnected. valid only for ISDN BRI */ -int _SAPI_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_FE_STATUS; - tdm_api->wp_cmd.fe_status = new_status; - return sangoma_cmd_exec(fd, tdm_api); -} -#endif - -int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.channel = (unsigned char)channel; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.channel = (unsigned char)channel; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.tx_queue_sz; -} - -int _SAPI_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = size; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.rx_queue_sz; - -} - -int _SAPI_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = size; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_DRIVER_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(wan_driver_version_t)) { - if (drv_ver) { - memcpy(drv_ver,&tdm_api->wp_cmd.version,sizeof(wan_driver_version_t)); - } - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_FIRMWARE_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(unsigned char)) { - *ver = tdm_api->wp_cmd.data[0]; - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_CPLD_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(unsigned char)) { - *ver = tdm_api->wp_cmd.data[0]; - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_STATS; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (stats) { - memcpy(stats, &tdm_api->wp_cmd.stats, sizeof(wanpipe_chan_stats_t)); - } - } - - return err; -} - -int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_RESET_STATS; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RM_RXFLASHTIME; - tdm_api->wp_cmd.rxflashtime=rxflashtime; - return sangoma_cmd_exec(fd, tdm_api); -} - -<<<<<<< .mine -#ifdef WP_API_FEATURE_RM_TX_GAIN -======= -#ifdef WP_API_FEATURE_RM_GAIN ->>>>>>> .r251 -int _SAPI_CALL sangoma_set_rm_tx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_SET_RM_TX_GAIN; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - tdm_api->wp_cmd.event.wp_api_event_gain_value = value; - return sangoma_cmd_exec(fd, tdm_api); -} - - -int _SAPI_CALL sangoma_set_rm_rx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) -{ - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_SET_RM_RX_GAIN; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - tdm_api->wp_cmd.event.wp_api_event_gain_value = value; - return sangoma_cmd_exec(fd, tdm_api); -} -#endif /* WP_API_FEATURE_RM_GAIN */ - -int _SAPI_CALL sangoma_tdm_set_polarity(sng_fd_t fd, wanpipe_api_t *tdm_api, int polarity) -{ - int err; - - WANPIPE_API_INIT_CHAN(tdm_api, 0); - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_SETPOLARITY; - tdm_api->wp_cmd.event.wp_api_event_polarity = polarity; - err = sangoma_cmd_exec(fd, tdm_api); - return err; - -} -<<<<<<< .mine -#endif - -======= - ->>>>>>> .r251 -#ifndef LIBSANGOMA_LIGHT - -/************************************************************//** - * Device PORT Control Functions - ***************************************************************/ - -static int sangoma_port_mgmnt_ioctl(sng_fd_t fd, port_management_struct_t *port_management) -{ - int err = 0; -#if defined(__WINDOWS__) - DWORD ln; - if(DeviceIoControl( - fd, - IoctlPortManagementCommand, - (LPVOID)port_management, - sizeof(port_management_struct_t), - (LPVOID)port_management, - sizeof(port_management_struct_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - /* Call OS specific code to find cause of the error and check messages log. */ - DBG_ERR("%s():Error: IoctlPortManagementCommand failed!!\n", __FUNCTION__); - err = -1; - } -#else - err=ioctl(fd,WANPIPE_IOCTL_PORT_MGMT,port_management); - if (err) { - err = -1; - } -#endif - if(err){ - port_management->operation_status = SANG_STATUS_INVALID_DEVICE; - } - - return err; -} - -static int sangoma_port_cfg_ioctl(sng_fd_t fd, port_cfg_t *port_cfg) -{ - int err = 0; -#if defined(__WINDOWS__) - DWORD ln; - if(DeviceIoControl( - fd, - IoctlPortConfigurationCommand, - (LPVOID)port_cfg, - sizeof(port_cfg_t), - (LPVOID)port_cfg, - sizeof(port_cfg_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - /* Call OS specific code to find cause of the error and check messages log. */ - DBG_ERR("%s():Error: IoctlPortConfigurationCommand failed!!\n", __FUNCTION__); - err = -1; - } -#else - err=ioctl(fd,WANPIPE_IOCTL_PORT_CONFIG,port_cfg); - if (err) { - err = -1; - } -#endif - if(err){ - port_cfg->operation_status = SANG_STATUS_INVALID_DEVICE; - } - - return err; -} - -/* open wanpipe configuration device */ -sng_fd_t _SAPI_CALL sangoma_open_driver_ctrl(int port_no) -{ - char tmp_fname[FNAME_LEN]; - -#if defined(__WINDOWS__) - /* Form the Config Device Name (i.e. wanpipe1, wanpipe2,...). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_PORT_NAME_FORM, port_no); -#else - /* Form the Config Device Name. ("/dev/wanpipe") */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_CONFIG_DEV_NAME); -#endif - return sangoma_open_dev_by_name(tmp_fname); -} - -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) -{ -#if defined(__WINDOWS__) - if(UdpManagementCommand(fd, wan_udp)){ - return 1; - } -#else - unsigned char id = 0; - int err=0; - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - err=ioctl(fd,WANPIPE_IOCTL_PIPEMON,wan_udp); - if (err < 0) { - return 1; - } -#endif - - if(wan_udp->wan_udphdr_return_code != WAN_CMD_OK){ - return 2; - } - return 0; -} - -int _SAPI_CALL sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = START_PORT_VOLATILE_CONFIG; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - /* ioctl failed */ - return err; - } - - return port_mgmnt->operation_status; -} - -int _SAPI_CALL sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = STOP_PORT; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - /* ioctl failed */ - return err; - } - - switch(port_mgmnt->operation_status) - { - case SANG_STATUS_CAN_NOT_STOP_DEVICE_WHEN_ALREADY_STOPPED: - /* This is not an error, rather a state indication. - * Return SANG_STATUS_SUCCESS, but real return code will be available - * for the caller at port_mgmnt->operation_status. */ - err = SANG_STATUS_SUCCESS; - break; - default: - err = port_mgmnt->operation_status; - break; - } - - return err; -} - -int _SAPI_CALL sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = GET_HARDWARE_INFO; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - return err; - } - - return port_mgmnt->operation_status; -} - -int _SAPI_CALL sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) -{ - port_cfg->command_code = SET_PORT_VOLATILE_CONFIG; - port_cfg->port_no = port_no; - - return sangoma_port_cfg_ioctl(fd, port_cfg); -} - -int _SAPI_CALL sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) -{ - port_cfg->command_code = GET_PORT_VOLATILE_CONFIG; - port_cfg->port_no = port_no; - return sangoma_port_cfg_ioctl(fd, port_cfg); -} - -int _SAPI_CALL sangoma_write_port_config_on_persistent_storage(hardware_info_t *hardware_info, port_cfg_t *port_cfg, unsigned short port_no) -{ - int err = 0; -#if defined(__WINDOWS__) - HKEY hPortRegistryKey = registry_open_port_key(hardware_info); - wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; - sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; - unsigned int ind; - - if(hPortRegistryKey == INVALID_HANDLE_VALUE){ - return 1; - } - - /* write T1/E1/BRI/Analog configuration */ - if(registry_write_front_end_cfg(hPortRegistryKey, port_cfg)){ - return 2; - } - - /* write TDM Voice configuration */ - if(registry_write_wan_tdmv_conf(hPortRegistryKey, port_cfg)){ - return 3; - } - - /* write number of groups */ - err = registry_set_integer_value(hPortRegistryKey, "aft_number_of_logic_channels", port_cfg->num_of_ifs); - if(err){ - return err; - } - - /* write configuration of each group */ - for(ind = 0; ind < port_cfg->num_of_ifs; ind++){ - registry_write_channel_group_cfg(hPortRegistryKey, port_cfg, ind, port_cfg->if_cfg[ind]); - } - -#else - printf("%s(): Warning: function not implemented\n", __FUNCTION__); - err = 1; -#endif - return err; -} -#endif /* #ifndef LIBSANGOMA_LIGHT */ - -#endif /* WANPIPE_TDM_API */ diff --git a/api/libsangoma/.svn/tmp/tempfile.2.tmp b/api/libsangoma/.svn/tmp/tempfile.2.tmp deleted file mode 100644 index b29ccc1..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.2.tmp +++ /dev/null @@ -1,1221 +0,0 @@ -/***************************************************************************** - * libsangoma.c AFT T1/E1: HDLC API Code Library - * - * Author(s): Anthony Minessale II - * Nenad Corbic - * David Rokhvarg - * Michael Jerris - * - * Copyright: (c) 2005 Anthony Minessale II - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * ============================================================================ - * - * Aug 15, 2006 David Rokhvarg Ported to MS Windows 2000/XP - * Sep 24, 2006 Michael Jerris Windows port, standardize api, cleanup - * - */ - -#include "libsangoma.h" -#define DFT_CARD "wanpipe1" - -#ifndef WP_TDM_FEATURE_FE_ALARM -#warning "Warning: TDM FE ALARM not supported by driver" -#endif - -#ifndef WP_TDM_FEATURE_DTMF_EVENTS -#warning "Warning: TDM DTMF not supported by driver" -#endif - -#ifndef WP_TDM_FEATURE_EVENTS -#warning "Warning: TDM EVENTS not supported by driver" -#endif - - -#if defined(WIN32) -//extern int verbose; - -#define DEV_NAME_LEN 100 -char device_name[DEV_NAME_LEN]; - -/* IOCTL management structures and variables*/ -wan_udp_hdr_t wan_udp; - -#include "win_api_common.h" - -static wan_cmd_api_t api_cmd; -static api_tx_hdr_t *tx_hdr = (api_tx_hdr_t *)api_cmd.data; - -/* keeps the LAST (and single) event received */ -static wp_tdm_api_rx_hdr_t last_tdm_api_event_buffer; - -#endif /* WIN32 */ - -void sangoma_socket_close(sng_fd_t *sp) -{ -#if defined(WIN32) - if( *sp != INVALID_HANDLE_VALUE){ - CloseHandle(*sp); - *sp = INVALID_HANDLE_VALUE; - } -#else - if (*sp > -1) { - close(*sp); - *sp = -1; - } -#endif -} - -int sangoma_socket_waitfor(sng_fd_t fd, int timeout, int flags) -{ -#if defined(WIN32) - API_POLL_STRUCT api_poll; - - memset(&api_poll, 0x00, sizeof(API_POLL_STRUCT)); - - api_poll.user_flags_bitmap = flags; - - if(DoApiPollCommand(fd, &api_poll)){ - //failed - return 0; - } - - switch(api_poll.operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: - break; - - default: - prn(1, "Error: sangoma_socket_waitfor(): Unknown Operation Status: %d\n", - api_poll.operation_status); - return 0; - }//switch() - - if(api_poll.poll_events_bitmap == 0){ - prn(1, "Error: invalid Poll Events bitmap: 0x%X\n", - api_poll.poll_events_bitmap); - } - return api_poll.poll_events_bitmap; -#else - struct pollfd pfds[1]; - int res; - - memset(&pfds[0], 0, sizeof(pfds[0])); - pfds[0].fd = fd; - pfds[0].events = flags; - res = poll(pfds, 1, timeout); - if (res > 0) { - if ((pfds[0].revents & POLLERR)) { - res = -1; - } else if((pfds[0].revents)) { - res = 1; - } - } - - return res; -#endif -} - - -int sangoma_span_chan_toif(int span, int chan, char *interface_name) -{ - sprintf(interface_name,"s%ic%i",span,chan); - return 0; -} - -int sangoma_interface_toi(char *interface_name, int *span, int *chan) -{ - char *p=NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'g') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 'w') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -int sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) -{ - char *p = NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'c') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 's') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -sng_fd_t sangoma_open_tdmapi_span_chan(int span, int chan) -{ - char fname[FNAME_LEN]; -#if defined(WIN32) - - //NOTE: under Windows Interfaces are zero based but 'chan' is 1 based. - // Subtract 1 from 'chan'. - _snprintf(fname , FNAME_LEN, "\\\\.\\WANPIPE%d_IF%d", span, chan - 1); - - //prn(verbose, "Opening device: %s...\n", fname); - - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - int fd=-1; - - sprintf(fname,"/dev/wptdm_s%dc%d",span,chan); - - fd = open(fname, O_RDWR); - - return fd; -#endif -} - -sng_fd_t sangoma_create_socket_by_name(char *device, char *card) -{ - int span,chan; - sangoma_interface_toi(device,&span,&chan); - - return sangoma_open_tdmapi_span_chan(span,chan); -} - - -sng_fd_t sangoma_open_tdmapi_span(int span) -{ - int i=0; -#if defined(WIN32) - sng_fd_t fd = INVALID_HANDLE_VALUE; - - for(i = 1; i < 32; i++){ - if((fd = sangoma_open_tdmapi_span_chan(span, i)) == INVALID_HANDLE_VALUE){ - //prn(verbose, "Span: %d, chan: %d: is not running, consider 'busy'\n", - // span, i); - continue; - } - - //get the open handle counter - wan_udp.wan_udphdr_command = GET_OPEN_HANDLES_COUNTER; - wan_udp.wan_udphdr_data_len = 0; - - DoManagementCommand(fd, &wan_udp); - if(wan_udp.wan_udphdr_return_code){ - prn(1, "Error: command GET_OPEN_HANDLES_COUNTER failed! Span: %d, chan: %d\n", - span, i); - //don't forget to close!! otherwize counter will stay incremented. - sangoma_socket_close(&fd); - continue; - } - - //prn(verbose, "open handles counter: %d\n", *(int*)&wan_udp.wan_udphdr_data[0]); - if(*(int*)&wan_udp.wan_udphdr_data[0] == 1){ - //this is the only process using this chan/span, so it is 'free' - //prn(verbose, "Found 'free' Span: %d, chan: %d\n",span, i); - break; - } - //don't forget to close!! otherwize counter will stay incremented. - sangoma_socket_close(&fd); - }//for() - -#else - char fname[FNAME_LEN]; - int fd=0; - for (i=1;i<32;i++){ - sprintf(fname,"/dev/wptdm_s%dc%d",span,i); - fd = open(fname, O_RDWR); - if (fd < 0){ - continue; - } - break; - } -#endif - return fd; -} - -int sangoma_readmsg_tdm(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) -{ - int rx_len=0; - -#if defined(WIN32) - static RX_DATA_STRUCT rx_data; - api_header_t *pri; - wp_tdm_api_rx_hdr_t *tdm_api_rx_hdr; - wp_tdm_api_rx_hdr_t *user_buf = (wp_tdm_api_rx_hdr_t*)hdrbuf; - - if(hdrlen != sizeof(wp_tdm_api_rx_hdr_t)){ - //error - prn(1, "Error: sangoma_readmsg_tdm(): invalid size of user's 'header buffer'.\ -Should be 'sizeof(wp_tdm_api_rx_hdr_t)'.\n"); - return -1; - } - - if(DoReadCommand(fd, &rx_data) ){ - //error - prn(1, "Error: DoReadCommand() failed! Check messages log.\n"); - return -1; - } - - //use our special buffer at rxdata to hold received data - pri = &rx_data.api_header; - tdm_api_rx_hdr = (wp_tdm_api_rx_hdr_t*)rx_data.data; - - user_buf->wp_tdm_api_event_type = pri->operation_status; - - switch(pri->operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: - //prn(verbose, "SANG_STATUS_RX_DATA_AVAILABLE\n"); - - if(pri->data_length > datalen){ - rx_len=0; - break; - } - memcpy(databuf, rx_data.data, pri->data_length); - rx_len = pri->data_length; - break; - - case SANG_STATUS_TDM_EVENT_AVAILABLE: - //prn(verbose, "SANG_STATUS_TDM_EVENT_AVAILABLE\n"); - - //make event is accessable for the caller directly: - memcpy(databuf, rx_data.data, pri->data_length); - rx_len = pri->data_length; - - //make copy for use with sangoma_tdm_read_event() - indirect access. - memcpy( &last_tdm_api_event_buffer, tdm_api_rx_hdr, sizeof(wp_tdm_api_rx_hdr_t)); - break; - - default: - switch(pri->operation_status) - { - case SANG_STATUS_RX_DATA_TIMEOUT: - //no data in READ_CMD_TIMEOUT, try again. - prn(1, "Error: Timeout on read.\n"); - break; - - case SANG_STATUS_BUFFER_TOO_SMALL: - //Recieved data longer than the pre-configured maximum. - //Maximum length is set in 'Interface Properties', - //in the 'Device Manager'. - prn(1, "Error: Received data longer than buffer passed to API.\n"); - break; - - case SANG_STATUS_LINE_DISCONNECTED: - //Front end monitoring is enabled and Line is - //in disconnected state. - //Check the T1/E1 line is in "Connected" state, - //alse check the Alarms and the message log. - prn(1, "Error: Line disconnected.\n"); - break; - - default: - prn(1, "Rx:Unknown Operation Status: %d\n", pri->operation_status); - break; - }//switch() - return 0; - }//switch() - -#else - struct msghdr msg; - struct iovec iov[2]; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - rx_len = read(fd,&msg,datalen+hdrlen); - - if (rx_len <= sizeof(wp_tdm_api_rx_hdr_t)){ - return -EINVAL; - } - - rx_len-=sizeof(wp_tdm_api_rx_hdr_t); -#endif - return rx_len; -} - -int sangoma_writemsg_tdm(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) -{ - int bsent; - -#if defined(WIN32) - static TX_DATA_STRUCT local_tx_data; - api_header_t *pri; - - pri = &local_tx_data.api_header; - - pri->data_length = datalen; - memcpy(local_tx_data.data, databuf, pri->data_length); - - //queue data for transmission - if( DoWriteCommand(fd, &local_tx_data)){ - //error - prn(1, "Error: DoWriteCommand() failed!! Check messages log.\n"); - return -1; - } - - bsent=0; - //check that frame was transmitted - switch(local_tx_data.api_header.operation_status) - { - case SANG_STATUS_SUCCESS: - bsent = datalen; - break; - - case SANG_STATUS_TX_TIMEOUT: - //error - prn(1, "****** Error: SANG_STATUS_TX_TIMEOUT ******\n"); - //Check messages log or look at statistics. - break; - - case SANG_STATUS_TX_DATA_TOO_LONG: - //Attempt to transmit data longer than the pre-configured maximum. - //Maximum length is set in 'Interface Properties', - //in the 'Device Manager'. - prn(1, "****** SANG_STATUS_TX_DATA_TOO_LONG ******\n"); - break; - - case SANG_STATUS_TX_DATA_TOO_SHORT: - //Minimum is 1 byte for Primary port, - // 2 bytes for Secondary port - prn(1, "****** SANG_STATUS_TX_DATA_TOO_SHORT ******\n"); - break; - - case SANG_STATUS_LINE_DISCONNECTED: - //Front end monitoring is enabled and Line is - //in disconnected state. - //Check the T1/E1 line is in "Connected" state, - //alse check the Alarms and the message log. - prn(1, "****** SANG_STATUS_LINE_DISCONNECTED ******\n"); - break; - - default: - prn(1, "Unknown return code (0x%X) on transmission!\n", - local_tx_data.api_header.operation_status); - break; - }//switch() -#else - struct msghdr msg; - struct iovec iov[2]; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - bsent = write(fd,&msg,datalen+hdrlen); - if (bsent > 0){ - bsent-=sizeof(wp_tdm_api_tx_hdr_t); - } -#endif - return bsent; -} - - -#ifdef WANPIPE_TDM_API - -/*======================================================== - * Execute TDM command - * - */ -static int sangoma_tdm_cmd_exec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - -#if defined(WIN32) - err = tdmv_api_ioctl(fd, &tdm_api->wp_tdm_cmd); -#else - err = ioctl(fd,SIOC_WANPIPE_TDM_API,&tdm_api->wp_tdm_cmd); - if (err < 0){ - char tmp[50]; - sprintf(tmp,"TDM API: CMD: %i\n",tdm_api->wp_tdm_cmd.cmd); - perror(tmp); - return -1; - } -#endif - return err; -} - -/*======================================================== - * Get Full TDM API configuration per channel - * - */ -int sangoma_get_full_cfg(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_FULL_CFG; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - printf("TDM API CFG:\n"); - printf("\thw_tdm_coding:\t%d\n",tdm_api->wp_tdm_cmd.hw_tdm_coding); - printf("\tusr_mtu_mru:\t%d\n",tdm_api->wp_tdm_cmd.hw_mtu_mru); - printf("\tusr_period:\t%d\n",tdm_api->wp_tdm_cmd.usr_period); - printf("\ttdm_codec:\t%d\n",tdm_api->wp_tdm_cmd.tdm_codec); - printf("\tpower_level:\t%d\n",tdm_api->wp_tdm_cmd.power_level); - printf("\trx_disable:\t%d\n",tdm_api->wp_tdm_cmd.rx_disable); - printf("\ttx_disable:\t%d\n",tdm_api->wp_tdm_cmd.tx_disable); - printf("\tusr_mtu_mru:\t%d\n",tdm_api->wp_tdm_cmd.usr_mtu_mru); - printf("\tidle flag:\t0x%02X\n",tdm_api->wp_tdm_cmd.idle_flag); - -#ifdef WP_TDM_FEATURE_FE_ALARM - printf("\tfe alarms:\t0x%02X\n",tdm_api->wp_tdm_cmd.fe_alarms); -#endif - - printf("\trx pkt\t%d\ttx pkt\t%d\n",tdm_api->wp_tdm_cmd.stats.rx_packets, - tdm_api->wp_tdm_cmd.stats.tx_packets); - printf("\trx err\t%d\ttx err\t%d\n", - tdm_api->wp_tdm_cmd.stats.rx_errors, - tdm_api->wp_tdm_cmd.stats.tx_errors); -#ifndef __WINDOWS__ - printf("\trx ovr\t%d\ttx idl\t%d\n", - tdm_api->wp_tdm_cmd.stats.rx_fifo_errors, - tdm_api->wp_tdm_cmd.stats.tx_carrier_errors); -#endif - - return 0; -} - -/*======================================================== - * SET Codec on a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int codec) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_CODEC; - tdm_api->wp_tdm_cmd.tdm_codec = codec; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Codec from a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_CODEC; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.tdm_codec; -} - -/*======================================================== - * SET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int period) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_USR_PERIOD; - tdm_api->wp_tdm_cmd.usr_period = period; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_USR_PERIOD; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.usr_period; -} - -/*======================================================== - * GET Current User Hardware Coding Format - * - * Coding Format will be ULAW/ALAW based on T1/E1 - */ - -int sangoma_tdm_get_hw_coding(int fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_HW_CODING; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_tdm_cmd.hw_tdm_coding; -} - -/*======================================================== - * GET Current User Hardware DTMF Enabled/Disabled - * - * Will return true if HW DTMF is enabled on Octasic - */ - -int sangoma_tdm_get_hw_dtmf(int fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_HW_DTMF; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_tdm_cmd.hw_dtmf; -} - -/*======================================================== - * GET Current User MTU/MRU values in bytes. - * - * The USER MTU/MRU values will change each time a PERIOD - * or CODEC is adjusted. - */ -int sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_USR_MTU_MRU; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.usr_mtu_mru; -} - -/*======================================================== - * SET TDM Power Level - * - * This option is not implemented yet - * - */ -int sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int power) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_POWER_LEVEL; - tdm_api->wp_tdm_cmd.power_level = power; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET TDM Power Level - * - * This option is not implemented yet - * - */ -int sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_POWER_LEVEL; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.power_level; -} - -int sangoma_tdm_flush_bufs(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ -#if 0 - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_FLUSH_BUFFERS; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } -#endif - return 0; -} - -int sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int poll_in_sec) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_ENABLE_RBS_EVENTS; - tdm_api->wp_tdm_cmd.rbs_poll=poll_in_sec; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - - -int sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_DISABLE_RBS_EVENTS; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char rbs) -{ - - int err; - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_WRITE_RBS_BITS; - tdm_api->wp_tdm_cmd.rbs_tx_bits=rbs; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_read_event(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - -#ifdef WP_TDM_FEATURE_EVENTS - - wp_tdm_api_event_t *rx_event; - -#if defined(WIN32) - rx_event = &last_tdm_api_event_buffer; -#else - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_READ_EVENT; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - rx_event = &tdm_api->wp_tdm_cmd.event; -#endif - - switch (rx_event->wp_tdm_api_event_type){ - - case WP_TDMAPI_EVENT_RBS: - printf("%d: GOT RBS EVENT %p\n",(int)fd,tdm_api->wp_tdm_event.wp_rbs_event); - if (tdm_api->wp_tdm_event.wp_rbs_event) { - tdm_api->wp_tdm_event.wp_rbs_event(fd,rx_event->wp_tdm_api_event_rbs_bits); - } - - break; - -#ifdef WP_TDM_FEATURE_DTMF_EVENTS - case WP_TDMAPI_EVENT_DTMF: - printf("%d: GOT DTMF EVENT\n",(int)fd); - if (tdm_api->wp_tdm_event.wp_dtmf_event) { - tdm_api->wp_tdm_event.wp_dtmf_event(fd, - rx_event->wp_tdm_api_event_dtmf_digit, - rx_event->wp_tdm_api_event_dtmf_type, - rx_event->wp_tdm_api_event_dtmf_port); - } - break; -#endif - - case WP_TDMAPI_EVENT_RXHOOK: - printf("%d: GOT RXHOOK EVENT\n",(int)fd); - if (tdm_api->wp_tdm_event.wp_rxhook_event) { - tdm_api->wp_tdm_event.wp_rxhook_event(fd, - rx_event->wp_tdm_api_event_hook_state); - } - break; - - case WP_TDMAPI_EVENT_RING_DETECT: - printf("%d: GOT RXRING EVENT\n",(int)fd); - if (tdm_api->wp_tdm_event.wp_ring_detect_event) { - tdm_api->wp_tdm_event.wp_ring_detect_event(fd, - rx_event->wp_tdm_api_event_ring_state); - } - break; - - case WP_TDMAPI_EVENT_RING_TRIP_DETECT: - printf("%d: GOT RING TRIP EVENT\n",(int)fd); - if (tdm_api->wp_tdm_event.wp_ring_trip_detect_event) { - tdm_api->wp_tdm_event.wp_ring_trip_detect_event(fd, - rx_event->wp_tdm_api_event_ring_state); - } - break; - -#ifdef WP_TDM_FEATURE_FE_ALARM - case WP_TDMAPI_EVENT_ALARM: - printf("%d: GOT FE ALARMS EVENT %i\n",(int)fd, - rx_event->wp_tdm_api_event_alarm); - if (tdm_api->wp_tdm_event.wp_fe_alarm_event) { - tdm_api->wp_tdm_event.wp_fe_alarm_event(fd, - rx_event->wp_tdm_api_event_alarm); - } - break; -#endif - - default: - printf("%d: Unknown TDM event!", (int)fd); - break; - } - - return 0; -#else - printf("Error: Read Event not supported!\n"); - return -1; -#endif -} - -#ifdef WP_TDM_FEATURE_DTMF_EVENTS -int sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_DTMF; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_DTMF; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RM_DTMF; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RM_DTMF; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} -#endif - -int sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RXHOOK; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RXHOOK; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - - -int sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING_DETECT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - - -int sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING_DETECT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING_TRIP_DETECT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - - -int sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING_DETECT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TXSIG_KEWL; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TXSIG_START; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TXSIG_ONHOOK; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TXSIG_OFFHOOK; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int tone_id) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TONE; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_tone_type = tone_id; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - -int sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TONE; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_tone_type = 0x00; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - -int sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_ENABLE_HWEC; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_DISABLE_HWEC; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -/*======================================================== - * GET Front End Alarms - * - */ -#ifdef WP_TDM_FEATURE_FE_ALARM -int sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_FE_ALARMS; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.fe_alarms; -} -#endif - -/* get current Line Connection state - Connected/Disconnected */ -int sangoma_tdm_get_fe_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_FE_STATUS; - err = sangoma_tdm_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_tdm_cmd.fe_status; - - return err; -} - - -/* set current Line Connection state - Connected/Disconnected. valid only for ISDN BRI */ -int sangoma_tdm_set_fe_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char new_status) -{ - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_FE_STATUS; - tdm_api->wp_tdm_cmd.fe_status = new_status; - - return sangoma_tdm_cmd_exec(fd, tdm_api); -} - -#endif /* WANPIPE_TDM_API */ diff --git a/api/libsangoma/.svn/tmp/tempfile.20.tmp b/api/libsangoma/.svn/tmp/tempfile.20.tmp deleted file mode 100644 index 8ea2bb1..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.20.tmp +++ /dev/null @@ -1,1623 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.h - * \brief Wanpipe API Library header for Sangoma AFT T1/E1/Analog/BRI/Serial Hardware - - * \brief Provides User a Unified/OS Agnostic API to Wanpipe/Sangoma Drivers and Hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * =============================================================================== - * v.2.0.0 Nenad Corbic - * Jan 30 2009 - * Added sangoma_get_driver_version, sangoma_get_firmware_version, - * sangoma_get_cpld_version functions,sangoma_get_stats,sangoma_flush_stats - */ - -#ifndef _LIBSNAGOMA_H -#define _LIBSNAGOMA_H - -#ifdef __linux__ -#ifndef __LINUX__ -/* most wanpipe driver headers require __LINUX__ to be defined */ -#define __LINUX__ -#endif -#endif - -#ifdef __cplusplus -extern "C" { /* for C++ users */ -#endif - -#include - - -/*! - \def WANPIPE_TDM_API - \brief Used by compiler and driver to enable TDM API -*/ -#define WANPIPE_TDM_API 1 - -/*TODO: LIBSANGOMA_VERSION_CODE should be generated out of LIBSANGOMA_LT_CURRENT and friends in configure.in */ - -/*! - \def LIBSANGOMA_VERSION - \brief LibSangoma Macro to check the Version Number -*/ -#define LIBSANGOMA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) - -/*! - \def LIBSANGOMA_VERSION_CODE - \brief LibSangoma Current Version Number to be checked against the LIBSANGOMA_VERSION Macro -*/ -#define LIBSANGOMA_VERSION_CODE LIBSANGOMA_VERSION(3,3,0) - -/*! - \def LIBSANGOMA_VERSION_STR - \brief LibSangoma Version in string format -*/ -#define LIBSANGOMA_VERSION_STR "3.3.0" - -struct sangoma_wait_obj; -#define sangoma_wait_obj_t struct sangoma_wait_obj - -#if defined(WIN32) || defined(WIN64) -#ifndef __WINDOWS__ -#define __WINDOWS__ -#endif -#include -#include -#include -#include -#include - -/*! - \def _SAPI_CALL - \brief libsangoma.dll functions exported as __cdecl calling convention -*/ -#define _SAPI_CALL __cdecl - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT (deprecated, use SANGOMA_WAIT_INFINITE instead) - \brief Infinite poll timeout value -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT INFINITE -#define SANGOMA_WAIT_INFINITE INFINITE - -/*! - \def sangoma_msleep(x) - \brief milisecond sleep function -*/ -#define sangoma_msleep(x) Sleep(x) - -/*! - \def sangoma_ctime(time_val) - \brief Convert a time value to a string - \param time_val pointer to 64-bit time value -*/ -#define sangoma_ctime(time) _ctime64(time) - -#else -/* L I N U X */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/*! - \def _SAPI_CALL - \brief Not used in Linux -*/ -#define _SAPI_CALL - -/*! - \def INVALID_HANDLE_VALUE - \brief Invalid file handle value -1, Ported from Windows -*/ -#define INVALID_HANDLE_VALUE -1 - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT (deprecated, use SANGOMA_WAIT_INFINITE instead) - \brief Infinite poll timeout value -1, Ported from Windows -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT -1 -#define SANGOMA_WAIT_INFINITE -1 - -/*! - \def __cdecl - \brief Ported from Windows - \typedef BOOL - \brief Boolean type int, Ported from Windows - \typedef DWORD - \brief DWORD type is int, Ported from Windows - \def FALSE - \brief FALSE value is 0, Ported from Windows - \def TRUE - \brief TRUE value is 1, Ported from Windows - \def sangoma_msleep(x) - \brief milisecond sleep function - \def _getch - \brief get character, Ported from Windows - \def Sleep - \brief milisecond sleep function - \typedef HANDLE - \brief file handle type int, Ported from Windows - \typedef TCHAR - \brief TCHAN type mapped to char, Ported from Windows - \typedef ULONG - \brief ULONG type mapped to unsigned long, Ported from Windows - \typedef UCHAR - \brief ULONG type mapped to unsigned char, Ported from Windows - \typedef USHORT - \brief USHORT type mapped to unsigned short, Ported from Windows - \typedef LPSTR - \brief LPSTR type mapped to unsigned char *, Ported from Windows - \typedef PUCHAR - \brief PUCHAR type mapped to unsigned char *, Ported from Windows - \typedef LPTHREAD_START_ROUTINE - \brief LPTHREAD_START_ROUTINE type mapped to unsigned char *, Ported from Windows - \def _stricmp - \brief _stricmp type mapped to _stricmp, Ported from Windows - \def _snprintf - \brief _snprintf type mapped to snprintf, Ported from Windows -*/ - -#define __cdecl - -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - -#define sangoma_msleep(x) usleep(x*1000) -#define _getch getchar -#define Sleep sangoma_msleep -#define _stricmp strcmp -#define _snprintf snprintf -#define _vsnprintf vsnprintf - -typedef int HANDLE; -typedef int BOOL; -typedef int DWORD; -typedef char TCHAR; -typedef unsigned char UCHAR; -typedef unsigned long ULONG; -typedef unsigned short USHORT; -typedef unsigned char * LPSTR; -typedef unsigned char * PUCHAR; -typedef void * LPTHREAD_START_ROUTINE; -typedef pthread_mutex_t CRITICAL_SECTION; - -#define EnterCriticalSection(arg) pthread_mutex_lock(arg) -#define LeaveCriticalSection(arg) pthread_mutex_unlock(arg) -#define InitializeCriticalSection(arg) pthread_mutex_init(arg, NULL); - -typedef struct tm SYSTEMTIME; -typedef char * LPCTSTR; - -/*! - \def sangoma_ctime(time_val) - \brief Convert a time value to a string - \param time_val pointer to time value -*/ -#define sangoma_ctime(time) ctime((time_t*)time) - -#endif/* WIN32 */ - - -/*! - LIBSANGOMA_LIGHT can be used to enable only IO and EVENT - libsangoma functions. The DRIVER configuration/start/stop - functions are not compiled. - - LIBSANGOMA_LIGHT depends only on 3 header files. Instead - of all wanpipe header files needed for DRIVER management - - LIBSANGMOA_LIGHT is NOT enabled by default. -*/ - -#ifdef LIBSANGOMA_LIGHT -#include "wanpipe_api_iface.h" -#include "wanpipe_api_hdr.h" -#include "sdla_te1.h" -#include "wanpipe_events.h" -#include "wanpipe_api_deprecated.h" -#else -#include "wanpipe_api.h" -#endif - -#ifdef __LINUX__ -#include "wanpipe_kernel.h" -#endif - -/*! - * As of now this typedef maps exactly to SANG_STATUS_T, however that - * is a kernel type, ugly, ugly, uglyyyyy, we should have strictly - * minimum set of shared data structures between kernel and user - * many return codes specified in SANG_STATUS_T are kernel specific - * like FAILED_TO_LOCK_USER_MEMORY or INVALID_IRQL, the libsangoma - * user does not need that much information, and even if ever needs - * it we should provide simpler defaults - * \brief return status from sangoma APIs - */ -typedef int32_t sangoma_status_t; - -/*! - \def FNAME_LEN - \brief string length of a file name - \def FUNC_DBG(x) - \brief function debug print function - \def DBG_PRINT - \brief debug print function -*/ -#define FNAME_LEN 100 -#define LIBSNG_FUNC_DBG() if(0)printf("%s(): line:%d\n", __FUNCTION__, __LINE__) -#define LIBSNG_DBG_PRINT if(0)printf - -/*! - \typedef sangoma_api_hdr_t - \brief Backward comaptible define of wp_api_hdr_t -*/ -typedef wp_api_hdr_t sangoma_api_hdr_t; - -/*! - \enum _sangoma_wait_obj_type_t - \brief Wait object type definition - \typedef sangoma_wait_obj_type_t - \brief Wait object type definition -*/ -typedef enum _sangoma_wait_obj_type -{ - /*! \brief deprecated, use SANGOMA_GENERIC_WAIT_OBJ */ - UNKNOWN_WAIT_OBJ = 0, - /*! \brief Generic object that can be signaled but is not associated to any sangoma device */ - SANGOMA_GENERIC_WAIT_OBJ = 0, - /*! \brief Sangoma object associated to some device which cannot be signaled (cannot call sangoma_wait_obj_signal on it) */ - SANGOMA_DEVICE_WAIT_OBJ, - /*! \brief Sangoma object that is associated to a device AND can be signaled */ - SANGOMA_DEVICE_WAIT_OBJ_SIG, -} sangoma_wait_obj_type_t; - -#define DECODE_SANGOMA_WAIT_OBJECT_TYPE(type)\ - type == SANGOMA_GENERIC_WAIT_OBJ ? "SANGOMA_GENERIC_WAIT_OBJ" :\ - type == SANGOMA_DEVICE_WAIT_OBJ ? "SANGOMA_DEVICE_WAIT_OBJ" :\ - type == SANGOMA_DEVICE_WAIT_OBJ_SIG ? "SANGOMA_DEVICE_WAIT_OBJ_SIG" :\ - "Invalid Wait Object type!" - -/* - * Possible flags for sangoma waitable objects - * this definitions MUST match POLLIN, POLLOUT and POLLPRI - * SANG_WAIT_OBJ_IS_SIGNALED has no posix equivalent though - * Users are encouraged to use this flags instead of the system ones - */ -typedef enum _sangoma_wait_obj_flags { - SANG_WAIT_OBJ_HAS_INPUT = POLLIN, - SANG_WAIT_OBJ_HAS_OUTPUT = POLLOUT, - SANG_WAIT_OBJ_HAS_EVENTS = POLLPRI, - SANG_WAIT_OBJ_IS_SIGNALED = 0x400 /* matches GNU extension POLLMSG */ -} sangoma_wait_obj_flags_t; - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - -/*! - \fn sng_fd_t sangoma_open_api_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Restriced open, device will allowed to be open only once. -*/ -sng_fd_t _SAPI_CALL sangoma_open_api_span_chan(int span, int chan); - - -/*! - \fn sng_fd_t __sangoma_open_api_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _SAPI_CALL __sangoma_open_api_span_chan(int span, int chan); -#define __sangoma_open_tdmapi_span_chan __sangoma_open_api_span_chan - -/*! - \fn sng_fd_t sangoma_open_tdmapi_span(int span) - \brief Open a first available device on a Span - \param span span number starting from 1 to 255 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _SAPI_CALL sangoma_open_api_span(int span); - - -/*! - \def sangoma_create_socket_intr - \brief Backward compatible open span chan call -*/ - - - -/*! - \def LIBSANGOMA_TDMAPI_CTRL - \brief Global control device feature -*/ -#ifndef LIBSANGOMA_TDMAPI_CTRL -#define LIBSANGOMA_TDMAPI_CTRL 1 -#endif - -/*! - \fn sng_fd_t sangoma_open_api_ctrl(void) - \brief Open a Global Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t _SAPI_CALL sangoma_open_api_ctrl(void); - -/*! - \fn sng_fd_t sangoma_logger_open(void) - \brief Open a Global Logger Device - \return File Descriptor - negative=error 0 or greater = fd - - The global Logger device receives Logger Events for all devices - configured. -*/ -sng_fd_t _SAPI_CALL sangoma_logger_open(void); - -/*! - \fn sng_fd_t sangoma_open_driver_ctrl(int port_no) - \brief Open a Global Driver Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t _SAPI_CALL sangoma_open_driver_ctrl(int port_no); - - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void - -*/ -void _SAPI_CALL sangoma_close(sng_fd_t *fd); - - - -/*! - \fn int sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get device open count - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative or 0: error, greater than 1 : open count -*/ - -int _SAPI_CALL sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -/*! - \fn int sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) - \brief Write Data to device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be transmitted - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return transmit size, must be equal to datalen, anything else is error - - In case of error return code, one must check the header operation_status - variable to identify the reason of an error. Please refer to the error codes. -*/ - -int _SAPI_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, unsigned short datalen, int flag); - - -/*! - \fn int sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) - \brief Read Data from device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be received - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return received size, must be equal to datalen, anything else is error or busy - - In case of error return code, one must check the header operation_status - variable to identify the reason of error. Please refer to the error codes. -*/ -int _SAPI_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, int datalen, int flag); - - - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int32_t inflags, int32_t *outflags, int32_t timeout) - \brief Wait for a single waitable object - \param sangoma_wait_obj pointer to a wait object previously created with sangoma_wait_obj_create - \param timeout timeout in miliseconds in case of no event - \return SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured use sangoma_wait_obj_get_out_flags to check or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, uint32_t inflags, uint32_t *outflags, int32_t timeout); - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], int32_t in_flags[], int32_t out_flags[] uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - \brief Wait for multiple sangoma waitable objects - \param sangoma_wait_objects pointer to array of wait objects previously created with sangoma_wait_obj_create - \param in_flags array of flags corresponding to the flags the user is interested on for each waitable object - \param out_flags array of flags corresponding to the flags that are ready in the waitable objects - \param number_of_sangoma_wait_objects size of the array of waitable objects and flags - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured check in sangoma_wait_objects, any other return code is some error -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], uint32_t in_flags[], uint32_t out_flags[], - uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - -/*! - \fn sangoma_status_t sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) - \brief Create a wait object that will be used with sangoma_waitfor_many() API - \param sangoma_wait_object pointer a single device object - \param fd device file descriptor - \param object_type type of the wait object. see sangoma_wait_obj_type_t for types - \see sangoma_wait_obj_type_t - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type); - -/*! - \fn sangoma_status_t sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) - \brief De-allocate all resources inside a wait object which were allocated by sangoma_wait_obj_init(). - \param sangoma_wait_object pointer to a pointer to a single device object - \return SANG_STATUS_SUCCESS on success or some sangoma status error -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object); - -/*! - \fn void sangoma_wait_obj_signal(sangoma_wait_obj_t *sangoma_wait_object) - \brief Set wait object to a signaled state - \param sangoma_wait_object pointer a single device object that can be signaled - \return sangoma_status_t -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_signal(sangoma_wait_obj_t *sangoma_wait_object); - -/*! - \fn sng_fd_t sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sangoma_wait_object) - \brief Get fd device file descriptor which was the 'fd' parameter for sangoma_wait_obj_create(), not useful for generic objects - \param sangoma_wait_object pointer a single device object - \return sng_fd_t - device file descriptor -*/ -sng_fd_t _SAPI_CALL sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sangoma_wait_object); - -/*! - \fn void sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Store the given context into provided sangoma wait object. - \brief This function is useful to associate a context with a sangoma wait object. - \param sangoma_wait_object pointer a single device object - \param context void pointer to user context - \return void -*/ -void _SAPI_CALL sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object, void *context); - -/*! - \fn void *sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Retrieve the user context (if any) that was set via sangoma_wait_obj_set_context. - \param sangoma_wait_object pointer a single device object - \return void* -*/ -void* _SAPI_CALL sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object); - - -/************************************************************//** - * Device API COMMAND Functions - ***************************************************************/ - -/*! - \fn int sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Execute Sangoma API Command - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Read tdm api device configuration - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) - \brief Set Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \param period value in miliseconds (1,2,5,10) - \return non-zero: error, 0: ok - - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period); - -/*! - \fn int sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured period value -*/ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx/Rx MTU/MRU in bytes - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured mtu/mru in bytes -*/ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush all (tx/rx/event) buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_flush_rx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only rx buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_rx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); -/*! - \fn int sangoma_flush_tx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only tx buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_tx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_flush_event_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only event buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_event_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) - \brief Enable RBS Events on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param poll_in_sec driver poll period for rbs events - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec); - -/*! - \fn int sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RBS Events for a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs) - \brief Write RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel t1/e1 timeslot - \param rbs rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs); - -/*! - \fn int sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs) - \brief Read RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel t1/e1 timeslot - \param rbs pointer to rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ - -int _SAPI_CALL sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs); - -/*! - \fn int sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef WP_API_FEATURE_FAX_EVENTS -/*! - \fn int sangoma_tdm_enable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable FAX Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable FAX Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_hw_fax(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get HW FAX Detection State (Enable or Disabled) on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: Disabled, 1: Enabled - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_get_hw_fax(sng_fd_t fd, wanpipe_api_t *tdm_api); - -#endif - - -/*! - \fn int sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) - \brief Transmit a TONE on this device (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param tone_id tone type to transmit - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id); - -/*! - \fn int sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable TONE Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG ON HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG OFF HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG KEWL START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms); - \brief Get Front End Alarms (T1/E1 Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param alarms bit map status of T1/E1 alarms - \return non-zero: error, 0: ok - - Supported only on T1/E1 Cards -*/ -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms); - - - -#ifdef WP_API_FEATURE_LINK_STATUS -# ifndef LIBSANGOMA_GET_LINKSTATUS -/*! - \def LIBSANGOMA_GET_LINKSTATUS - \brief Get Link Status feature -*/ -# define LIBSANGOMA_GET_LINKSTATUS 1 -# endif - -/*! - \fn int sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - -*/ -int _SAPI_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status); - -#endif - -/* set current Line Connection state - Connected/Disconnected */ -#ifndef LIBSANGOMA_GET_FESTATUS -/*! - \def LIBSANGOMA_GET_FESTATUS - \brief Get Front End Status feature -*/ -#define LIBSANGOMA_GET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) - \brief Set Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param new_status new status 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status); - - -/*! - \fn int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) - \brief Enable BRI Bchannel loopback - used when debugging bri device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel bri bchannel 1 or 2 - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel); - -/*! - \fn int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) - \brief Disable BRI Bchannel loopback - used when debugging bri device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel bri bchannel 1 or 2 - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel); - - -/*! - \fn int sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \param size tx queue size (minimum value of 1) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size); - -/*! - \fn int sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Rx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \param size rx queue size (minimum value of 1) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size); - - -#ifndef LIBSANGOMA_GET_HWCODING -/*! - \def LIBSANGOMA_GET_HWCODING - \brief Get HW Coding Feature -*/ -#define LIBSANGOMA_GET_HWCODING 1 -#endif - -/*! - \fn int sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get HW Voice Coding (ulaw/alaw) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will return the low level voice coding - depending on configuration. (ulaw or alaw) -*/ -int _SAPI_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api); - - - -#ifndef LIBSANGOMA_GET_HWDTMF -/*! - \def LIBSANGOMA_GET_HWDTMF - \brief HW DTMF Feature -*/ -#define LIBSANGOMA_GET_HWDTMF 1 -#endif -/*! - \fn int sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if hwdtmf support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW DTMF. -*/ -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if hw echo cancelation support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW EC. -*/ -int _SAPI_CALL sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_span_chan_toif(int span, int chan, char *interface_name) - \brief Convert Span & Chan to interface name - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \param interface_name pointer to string where interface name will be written - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name); - -/*! - \fn int sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) - \brief Convert Interace Name to Span & Chan - \param interface_name pointer to string containing interface name - \param span integer pointer where to write span value - \param chan integer pointer where to write chan value - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_interface_wait_up(int span, int chan, int sectimeout) - \brief Wait for a sangoma device to come up (ie: Linux wait for /dev/wanpipex_1 to come up) - \param span span number of the device to wait - \param chan chan number of the device to wait - \param sectimeout how many seconds to wait for the device to come up, -1 to wait forever - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_interface_wait_up(int span, int chan, int sectimeout); - -/*! - \fn int sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver) - \brief Get Device Driver Version Number - \param fd device file descriptor - \param tdm_api tdm api command structure - \param drv_ver driver version structure that will contain the driver version - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver); - -/*! - \fn int sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) - \brief Get Hardware/Firmware Version - \param fd device file descriptor - \param tdm_api tdm api command structure - \param ver hardware/firmware version number - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver); - -/*! - \fn int sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) - \brief Get Hardare/CPLD Version - \param fd device file descriptor - \param tdm_api tdm api command structure - \param ver hardware/cpld version number - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver); - - -/*! - \fn int sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats) - \brief Get Device Statistics. Statistics will be available in tdm_api->wp_cmd.stats structure. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param stats stats structure will be filled with device stats. (Optional, can be left NULL) - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats); - -/*! - \fn int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush/Reset device statistics - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime) - \brief Set rxflashtime for FXS module Wink-Flash Event - \param fd device file descriptor - \param tdm_api tdm api command structure - \param rxflashtime time value - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime); - -<<<<<<< .mine -#ifdef WP_API_FEATURE_RM_TX_GAIN -======= -#ifdef WP_API_FEATURE_RM_GAIN ->>>>>>> .r251 -/*! - \fn int sangoma_set_rm_tx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) - \brief set tx gaom for FXO/FXS module - \param fd device file descriptor - \param tdm_api tdm api command structure - \param value txgain (FXO - txgain value ranges from -150 to 120 , FXS - txgain value 35,-35) - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_set_rm_tx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value); - -/*! - \fn int sangoma_set_rm_rx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) - \brief set rx gaom for FXO/FXS module - \param fd device file descriptor - \param tdm_api tdm api command structure - \param value rxgain (FXO - rxgain value ranges from -150 to 120 , FXS -rxgain value 35,-35) - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_set_rm_rx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value); -#endif - -#endif /* WP RM GAIN feature */ - -/*! - \fn int sangoma_set_polarity(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) - \brief set rx gaom for FXO/FXS module - \param fd device file descriptor - \param tdm_api tdm api command structure - \param value 0 fwd, 1 rev - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_tdm_set_polarity(sng_fd_t fd, wanpipe_api_t *tdm_api, int polarity); - - -/************************************************************//** - * Device EVENT Function - ***************************************************************/ - - -/*! - \fn int sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Read API Events - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - The TDM API structure will be populated with a TDM API or WAN Event. - This function usually used after wait() function indicated that event - has occured. -*/ -int _SAPI_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api); - -#ifdef WP_API_FEATURE_LOGGER -/*! - \fn sangoma_status_t sangoma_logger_read_event(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Read Wanpipe Logger Events - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error - - The Logger API structure will be populated with a Logger Event. - This function usually used after wait() function indicated that - an event has occured. -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_read_event(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_flush_buffers(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Flush Wanpipe Logger internal buffers - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_flush_buffers(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get Wanpipe Logger statistics - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_get_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_reset_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Reset Wanpipe Logger statistics - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_reset_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_open_handle_counter(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get Counter of open Handles/File Descriptors of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_get_open_handle_counter(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get current level (types of events) of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_get_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_set_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Set current level (types of events) of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_set_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -#endif /* WP LOGGER FEATURE */ - -#ifndef LIBSANGOMA_LIGHT - -/************************************************************//** - * Device PORT Control Functions - ***************************************************************/ - -/*! - \fn int sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Start a Port, create Sangoma Communication interfaces. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to a port_management_struct_t structure. - On return, sangoma_driver_port_start() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _SAPI_CALL sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Start a Port, create Sangoma Communication interfaces. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to a port_management_struct_t structure. - On return, sangoma_driver_port_stop() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _SAPI_CALL sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) - \brief Set Port's "Volatile" configuration. The configuration will not persist between system restarts. - Before calling this function please stop the port by calling sangoma_driver_port_stop(). - After calling this function please start the port by calling sangoma_driver_port_start(). - \param[in] fd Port Device file descriptor - \param[in, out] port_cfg pointer to port_cfg_t structure that specifies complete Port configuration. - On return, sangoma_driver_port_set_config() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_cfg->operation_status. -*/ -int _SAPI_CALL sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) - \brief Retrieve Port's "Volatile" configuration. - \param[in] fd Port Device file descriptor - \param[out] port_cfg pointer to port_cfg_t structure. - On return, sangoma_driver_port_get_config() will copy current Port configuration - into this structure. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_cfg->operation_status. -*/ -int _SAPI_CALL sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no); - - -/*! - \fn int sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Retrieve information about a single instance of Sangoma hardware. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to port_management_struct_t structure which will contain hardware_info_t at - it's "data" field, when this function returns. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _SAPI_CALL sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_write_port_config_on_persistent_storage(hardware_info_t *hardware_info, port_cfg_t *port_cfg) - \brief Write Port's configuration on the hard disk. - Linux Specific: the "Persistent" configuration of a Port N (e.g. WANPIPE1) is stored in - /etc/wanpipe/wanpipeN.conf (e.g. wanpipe1.conf). - Configuration can be manualy viewed/changed by editing the ".conf" file. - Currently this functionality is not implemented. - Windows Specific: the "Persistent" configuration of a Port (e.g. WANPIPE1) is stored in - Windows Registry. - Configuration can be manualy viewed/changed in the Device Manager. - \param[in] hardware_info pointer to hardware_info_t structure containing information about a - single instance of Sangoma hardware. - \param[in] port_cfg pointer to structure containing complete Port configuration. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_write_port_config_on_persistent_storage(hardware_info_t *hardware_info, port_cfg_t *port_cfg, unsigned short port_no); - - -/************************************************************//** - * Device MANAGEMENT Functions - ***************************************************************/ - -/*! - \fn int sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) - \brief Execute Sangoma Management Command - \param fd device file descriptor - \param wan_udp management command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp); - - -#endif /* LIBSANGOMA_LIGHT */ - - -/*================================================================ - * DEPRECATED Function Calls - Not to be used any more - * Here for backward compatibility - *================================================================*/ - - -#ifndef LIBSANGOMA_SET_FESTATUS -/*! - \def LIBSANGOMA_SET_FESTATUS - \brief Set Front End Status Feature -*/ -#define LIBSANGOMA_SET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - - Deprecated - replaced by sangoma_tdm_get_link_status function -*/ -int _SAPI_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status); - - - -/*! - \fn int sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) - \brief Set TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \param codec codec to set (ulaw/alaw/slinear) - \return non-zero: error, 0: ok - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec); - -/*! - \fn int sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Configured TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured codec value - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn sng_fd_t sangoma_create_socket_by_name(char *device, char *card) - \brief Open a device based on a interface and card name - \param device interface name - \param card card name - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Deprecated - here for backward compatibility -*/ -sng_fd_t _SAPI_CALL sangoma_create_socket_by_name(char *device, char *card); - -/*! - \fn int sangoma_interface_toi(char *interface_name, int *span, int *chan) - \brief Convert Span & Chan to interface name - \param interface_name pointer to string where interface name will be written - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return non-zero = error, 0 = ok - Deprecated - here for backward compatibility -*/ -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) - \brief Set Power Level - so only data matching the power level would be passed up. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param power value of power - \return non-zero: error, 0: ok - - Deprecated - not used/implemented -*/ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power); - -/*! - \fn int sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Configured Power Level - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured power level - - Deprecated - not used/implemented -*/ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef __cplusplus -} -#endif/* __WINDOWS__ */ - - -#if defined(__WINDOWS__) -/*! Windows specific API */ -#ifdef __cplusplus -extern "C" { /* for C++ users */ -#endif - -sangoma_status_t _SAPI_CALL sangoma_unload_driver(); -sangoma_status_t _SAPI_CALL sangoma_load_driver(); - -#ifdef __cplusplus -} -#endif/* __WINDOWS__ */ -#else -/*! Backward compabile defines */ -#define sangoma_open_tdmapi_span_chan sangoma_open_api_span_chan -#define sangoma_open_tdmapi_span sangoma_open_api_span -#define sangoma_open_tdmapi_ctrl sangoma_open_api_ctrl -#define sangoma_tdm_get_fe_status sangoma_get_fe_status -#define sangoma_socket_close sangoma_close -#define sangoma_tdm_get_hw_coding sangoma_get_hw_coding -#define sangoma_tdm_set_fe_status sangoma_set_fe_status -#define sangoma_tdm_get_link_status sangoma_get_link_status -#define sangoma_tdm_flush_bufs sangoma_flush_bufs -#define sangoma_tdm_cmd_exec sangoma_cmd_exec -#define sangoma_tdm_read_event sangoma_read_event -#define sangoma_readmsg_tdm sangoma_readmsg -#define sangoma_readmsg_socket sangoma_readmsg -#define sangoma_sendmsg_socket sangoma_writemsg -#define sangoma_writemsg_tdm sangoma_writemsg -#define sangoma_create_socket_intr sangoma_open_api_span_chan -#endif - -#endif /* _LIBSNAGOMA_H */ - diff --git a/api/libsangoma/.svn/tmp/tempfile.21.tmp b/api/libsangoma/.svn/tmp/tempfile.21.tmp deleted file mode 100644 index e7909c2..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.21.tmp +++ /dev/null @@ -1,1667 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.h - * \brief Wanpipe API Library header for Sangoma AFT T1/E1/Analog/BRI/Serial Hardware - - * \brief Provides User a Unified/OS Agnostic API to Wanpipe/Sangoma Drivers and Hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * =============================================================================== - * v.2.0.0 Nenad Corbic - * Jan 30 2009 - * Added sangoma_get_driver_version, sangoma_get_firmware_version, - * sangoma_get_cpld_version functions,sangoma_get_stats,sangoma_flush_stats - */ - -#ifndef _LIBSNAGOMA_H -#define _LIBSNAGOMA_H - -#ifdef __linux__ -#ifndef __LINUX__ -/* most wanpipe driver headers require __LINUX__ to be defined */ -#define __LINUX__ -#endif -#endif - -#ifdef __cplusplus -extern "C" { /* for C++ users */ -#endif - -#include - - -/*! - \def WANPIPE_TDM_API - \brief Used by compiler and driver to enable TDM API -*/ -#define WANPIPE_TDM_API 1 - -/*TODO: LIBSANGOMA_VERSION_CODE should be generated out of LIBSANGOMA_LT_CURRENT and friends in configure.in */ - -/*! - \def LIBSANGOMA_VERSION - \brief LibSangoma Macro to check the Version Number -*/ -#define LIBSANGOMA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) - -/*! - \def LIBSANGOMA_VERSION_CODE - \brief LibSangoma Current Version Number to be checked against the LIBSANGOMA_VERSION Macro -*/ -#define LIBSANGOMA_VERSION_CODE LIBSANGOMA_VERSION(3,3,0) - -/*! - \def LIBSANGOMA_VERSION_STR - \brief LibSangoma Version in string format -*/ -#define LIBSANGOMA_VERSION_STR "3.3.0" - -struct sangoma_wait_obj; -#define sangoma_wait_obj_t struct sangoma_wait_obj - - -/*! - \def SANGOMA_DECLARE_TDM_API_CMD - \brief Instantiate/Declare a tdm api cmd strucure - \def SANGOMA_INIT_TDM_API_CMD - \brief Initialize the tdm api cmd structure. Set to 0. - \def SANGOMA_DECLARE_INIT_TDM_API_CMD - \brief Declare and initialize the tdm api cmd structure. -*/ -#define SANGOMA_DECLARE_TDM_API_CMD(_name_) wanpipe_api_t _name_ -#define SANGOMA_INIT_TDM_API_CMD(_name_) memset(&_name_,0,sizeof(_name_)) -#define SANGOMA_DECLARE_INIT_TDM_API_CMD(_name_) wanpipe_tdm_api_t _name_; SANGOMA_INIT_TDM_API_CMD(_name_) - - -#if defined(WIN32) || defined(WIN64) -#ifndef __WINDOWS__ -#define __WINDOWS__ -#endif -#include -#include -#include -#include -#include - -/*! - \def _SAPI_CALL - \brief libsangoma.dll functions exported as __cdecl calling convention -*/ -#define _SAPI_CALL __cdecl - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT (deprecated, use SANGOMA_WAIT_INFINITE instead) - \brief Infinite poll timeout value -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT INFINITE -#define SANGOMA_WAIT_INFINITE INFINITE - -/*! - \def sangoma_msleep(x) - \brief milisecond sleep function -*/ -#define sangoma_msleep(x) Sleep(x) - -/*! - \def sangoma_ctime(time_val) - \brief Convert a time value to a string - \param time_val pointer to 64-bit time value -*/ -#define sangoma_ctime(time) _ctime64(time) - -#else -/* L I N U X */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/*! - \def _SAPI_CALL - \brief Not used in Linux -*/ -#define _SAPI_CALL - -/*! - \def INVALID_HANDLE_VALUE - \brief Invalid file handle value -1, Ported from Windows -*/ -#define INVALID_HANDLE_VALUE -1 - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT (deprecated, use SANGOMA_WAIT_INFINITE instead) - \brief Infinite poll timeout value -1, Ported from Windows -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT -1 -#define SANGOMA_WAIT_INFINITE -1 - -/*! - \def __cdecl - \brief Ported from Windows - \typedef BOOL - \brief Boolean type int, Ported from Windows - \typedef DWORD - \brief DWORD type is int, Ported from Windows - \def FALSE - \brief FALSE value is 0, Ported from Windows - \def TRUE - \brief TRUE value is 1, Ported from Windows - \def sangoma_msleep(x) - \brief milisecond sleep function - \def _getch - \brief get character, Ported from Windows - \def Sleep - \brief milisecond sleep function - \typedef HANDLE - \brief file handle type int, Ported from Windows - \typedef TCHAR - \brief TCHAN type mapped to char, Ported from Windows - \typedef ULONG - \brief ULONG type mapped to unsigned long, Ported from Windows - \typedef UCHAR - \brief ULONG type mapped to unsigned char, Ported from Windows - \typedef USHORT - \brief USHORT type mapped to unsigned short, Ported from Windows - \typedef LPSTR - \brief LPSTR type mapped to unsigned char *, Ported from Windows - \typedef PUCHAR - \brief PUCHAR type mapped to unsigned char *, Ported from Windows - \typedef LPTHREAD_START_ROUTINE - \brief LPTHREAD_START_ROUTINE type mapped to unsigned char *, Ported from Windows - \def _stricmp - \brief _stricmp type mapped to _stricmp, Ported from Windows - \def _snprintf - \brief _snprintf type mapped to snprintf, Ported from Windows -*/ - -#define __cdecl - -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - -#define sangoma_msleep(x) usleep(x*1000) -#define _getch getchar -#define Sleep sangoma_msleep -#define _stricmp strcmp -#define _snprintf snprintf -#define _vsnprintf vsnprintf - -typedef int HANDLE; -typedef int BOOL; -typedef int DWORD; -typedef char TCHAR; -typedef unsigned char UCHAR; -typedef unsigned long ULONG; -typedef unsigned short USHORT; -typedef unsigned char * LPSTR; -typedef unsigned char * PUCHAR; -typedef void * LPTHREAD_START_ROUTINE; -typedef pthread_mutex_t CRITICAL_SECTION; - -#define EnterCriticalSection(arg) pthread_mutex_lock(arg) -#define LeaveCriticalSection(arg) pthread_mutex_unlock(arg) -#define InitializeCriticalSection(arg) pthread_mutex_init(arg, NULL); - -typedef struct tm SYSTEMTIME; -typedef char * LPCTSTR; - -/*! - \def sangoma_ctime(time_val) - \brief Convert a time value to a string - \param time_val pointer to time value -*/ -#define sangoma_ctime(time) ctime((time_t*)time) - -#endif/* WIN32 */ - - -/*! - LIBSANGOMA_LIGHT can be used to enable only IO and EVENT - libsangoma functions. The DRIVER configuration/start/stop - functions are not compiled. - - LIBSANGOMA_LIGHT depends only on 3 header files. Instead - of all wanpipe header files needed for DRIVER management - - LIBSANGMOA_LIGHT is NOT enabled by default. -*/ - -#ifdef LIBSANGOMA_LIGHT -#include "wanpipe_api_iface.h" -#include "wanpipe_api_hdr.h" -#include "sdla_te1.h" -#include "wanpipe_events.h" -#include "wanpipe_api_deprecated.h" -#else -#include "wanpipe_api.h" -#endif - -#ifdef __LINUX__ -#include "wanpipe_kernel.h" -#endif - -/*! - * As of now this typedef maps exactly to SANG_STATUS_T, however that - * is a kernel type, ugly, ugly, uglyyyyy, we should have strictly - * minimum set of shared data structures between kernel and user - * many return codes specified in SANG_STATUS_T are kernel specific - * like FAILED_TO_LOCK_USER_MEMORY or INVALID_IRQL, the libsangoma - * user does not need that much information, and even if ever needs - * it we should provide simpler defaults - * \brief return status from sangoma APIs - */ -typedef int32_t sangoma_status_t; - -/*! - \def FNAME_LEN - \brief string length of a file name - \def FUNC_DBG(x) - \brief function debug print function - \def DBG_PRINT - \brief debug print function -*/ -#define FNAME_LEN 100 -#define LIBSNG_FUNC_DBG() if(0)printf("%s(): line:%d\n", __FUNCTION__, __LINE__) -#define LIBSNG_DBG_PRINT if(0)printf - -/*! - \typedef sangoma_api_hdr_t - \brief Backward comaptible define of wp_api_hdr_t -*/ -typedef wp_api_hdr_t sangoma_api_hdr_t; - -/*! - \enum _sangoma_wait_obj_type_t - \brief Wait object type definition - \typedef sangoma_wait_obj_type_t - \brief Wait object type definition -*/ -typedef enum _sangoma_wait_obj_type -{ - /*! \brief deprecated, use SANGOMA_GENERIC_WAIT_OBJ */ - UNKNOWN_WAIT_OBJ = 0, - /*! \brief Generic object that can be signaled but is not associated to any sangoma device */ - SANGOMA_GENERIC_WAIT_OBJ = 0, - /*! \brief Sangoma object associated to some device which cannot be signaled (cannot call sangoma_wait_obj_signal on it) */ - SANGOMA_DEVICE_WAIT_OBJ, - /*! \brief Sangoma object that is associated to a device AND can be signaled */ - SANGOMA_DEVICE_WAIT_OBJ_SIG, -} sangoma_wait_obj_type_t; - -#define DECODE_SANGOMA_WAIT_OBJECT_TYPE(type)\ - type == SANGOMA_GENERIC_WAIT_OBJ ? "SANGOMA_GENERIC_WAIT_OBJ" :\ - type == SANGOMA_DEVICE_WAIT_OBJ ? "SANGOMA_DEVICE_WAIT_OBJ" :\ - type == SANGOMA_DEVICE_WAIT_OBJ_SIG ? "SANGOMA_DEVICE_WAIT_OBJ_SIG" :\ - "Invalid Wait Object type!" - -/* - * Possible flags for sangoma waitable objects - * this definitions MUST match POLLIN, POLLOUT and POLLPRI - * SANG_WAIT_OBJ_IS_SIGNALED has no posix equivalent though - * Users are encouraged to use this flags instead of the system ones - */ -typedef enum _sangoma_wait_obj_flags { - SANG_WAIT_OBJ_HAS_INPUT = POLLIN, - SANG_WAIT_OBJ_HAS_OUTPUT = POLLOUT, - SANG_WAIT_OBJ_HAS_EVENTS = POLLPRI, - SANG_WAIT_OBJ_IS_SIGNALED = 0x400 /* matches GNU extension POLLMSG */ -} sangoma_wait_obj_flags_t; - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - -/*! - \fn sng_fd_t sangoma_open_api_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Restriced open, device will allowed to be open only once. -*/ -sng_fd_t _SAPI_CALL sangoma_open_api_span_chan(int span, int chan); - - -/*! - \fn sng_fd_t __sangoma_open_api_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _SAPI_CALL __sangoma_open_api_span_chan(int span, int chan); -#define __sangoma_open_tdmapi_span_chan __sangoma_open_api_span_chan - -/*! - \fn sng_fd_t sangoma_open_tdmapi_span(int span) - \brief Open a first available device on a Span - \param span span number starting from 1 to 255 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _SAPI_CALL sangoma_open_api_span(int span); - - -/*! - \def sangoma_create_socket_intr - \brief Backward compatible open span chan call -*/ - - - -/*! - \def LIBSANGOMA_TDMAPI_CTRL - \brief Global control device feature -*/ -#ifndef LIBSANGOMA_TDMAPI_CTRL -#define LIBSANGOMA_TDMAPI_CTRL 1 -#endif - -/*! - \fn sng_fd_t sangoma_open_api_ctrl(void) - \brief Open a Global Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t _SAPI_CALL sangoma_open_api_ctrl(void); - -/*! - \fn sng_fd_t sangoma_logger_open(void) - \brief Open a Global Logger Device - \return File Descriptor - negative=error 0 or greater = fd - - The global Logger device receives Logger Events for all devices - configured. -*/ -sng_fd_t _SAPI_CALL sangoma_logger_open(void); - -/*! - \fn sng_fd_t sangoma_open_driver_ctrl(int port_no) - \brief Open a Global Driver Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t _SAPI_CALL sangoma_open_driver_ctrl(int port_no); - - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void - -*/ -void _SAPI_CALL sangoma_close(sng_fd_t *fd); - - - -/*! - \fn int sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get device open count - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative or 0: error, greater than 1 : open count -*/ - -int _SAPI_CALL sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -/*! - \fn int sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) - \brief Write Data to device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be transmitted - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return transmit size, must be equal to datalen, anything else is error - - In case of error return code, one must check the header operation_status - variable to identify the reason of an error. Please refer to the error codes. -*/ - -int _SAPI_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, unsigned short datalen, int flag); - - -/*! - \fn int sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) - \brief Read Data from device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be received - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return received size, must be equal to datalen, anything else is error or busy - - In case of error return code, one must check the header operation_status - variable to identify the reason of error. Please refer to the error codes. -*/ -int _SAPI_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, int datalen, int flag); - - - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int32_t inflags, int32_t *outflags, int32_t timeout) - \brief Wait for a single waitable object - \param sangoma_wait_obj pointer to a wait object previously created with sangoma_wait_obj_create - \param timeout timeout in miliseconds in case of no event - \return SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured use sangoma_wait_obj_get_out_flags to check or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, uint32_t inflags, uint32_t *outflags, int32_t timeout); - -/*! - \fn sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], int32_t in_flags[], int32_t out_flags[] uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - \brief Wait for multiple sangoma waitable objects - \param sangoma_wait_objects pointer to array of wait objects previously created with sangoma_wait_obj_create - \param in_flags array of flags corresponding to the flags the user is interested on for each waitable object - \param out_flags array of flags corresponding to the flags that are ready in the waitable objects - \param number_of_sangoma_wait_objects size of the array of waitable objects and flags - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured check in sangoma_wait_objects, any other return code is some error -*/ -sangoma_status_t _SAPI_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], uint32_t in_flags[], uint32_t out_flags[], - uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - -/*! - \fn sangoma_status_t sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) - \brief Create a wait object that will be used with sangoma_waitfor_many() API - \param sangoma_wait_object pointer a single device object - \param fd device file descriptor - \param object_type type of the wait object. see sangoma_wait_obj_type_t for types - \see sangoma_wait_obj_type_t - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type); - -/*! - \fn sangoma_status_t sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) - \brief De-allocate all resources inside a wait object which were allocated by sangoma_wait_obj_init(). - \param sangoma_wait_object pointer to a pointer to a single device object - \return SANG_STATUS_SUCCESS on success or some sangoma status error -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object); - -/*! - \fn void sangoma_wait_obj_signal(sangoma_wait_obj_t *sangoma_wait_object) - \brief Set wait object to a signaled state - \param sangoma_wait_object pointer a single device object that can be signaled - \return sangoma_status_t -*/ -sangoma_status_t _SAPI_CALL sangoma_wait_obj_signal(sangoma_wait_obj_t *sangoma_wait_object); - -/*! - \fn sng_fd_t sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sangoma_wait_object) - \brief Get fd device file descriptor which was the 'fd' parameter for sangoma_wait_obj_create(), not useful for generic objects - \param sangoma_wait_object pointer a single device object - \return sng_fd_t - device file descriptor -*/ -sng_fd_t _SAPI_CALL sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sangoma_wait_object); - -/*! - \fn void sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Store the given context into provided sangoma wait object. - \brief This function is useful to associate a context with a sangoma wait object. - \param sangoma_wait_object pointer a single device object - \param context void pointer to user context - \return void -*/ -void _SAPI_CALL sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object, void *context); - -/*! - \fn void *sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Retrieve the user context (if any) that was set via sangoma_wait_obj_set_context. - \param sangoma_wait_object pointer a single device object - \return void* -*/ -void* _SAPI_CALL sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object); - - -/************************************************************//** - * Device API COMMAND Functions - ***************************************************************/ - -/*! - \fn int sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Execute Sangoma API Command - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Read tdm api device configuration - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) - \brief Set Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \param period value in miliseconds (1,2,5,10) - \return non-zero: error, 0: ok - - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period); - -/*! - \fn int sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured period value -*/ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx/Rx MTU/MRU in bytes - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured mtu/mru in bytes -*/ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush all (tx/rx/event) buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_flush_rx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only rx buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_rx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); -/*! - \fn int sangoma_flush_tx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only tx buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_tx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_flush_event_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only event buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_flush_event_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) - \brief Enable RBS Events on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param poll_in_sec driver poll period for rbs events - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec); - -/*! - \fn int sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RBS Events for a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs) - \brief Write RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel t1/e1 timeslot - \param rbs rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs); - -/*! - \fn int sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs) - \brief Read RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel t1/e1 timeslot - \param rbs pointer to rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ - -int _SAPI_CALL sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs); - -/*! - \fn int sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef WP_API_FEATURE_FAX_EVENTS -/*! - \fn int sangoma_tdm_enable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable FAX Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable FAX Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_hw_fax(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get HW FAX Detection State (Enable or Disabled) on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: Disabled, 1: Enabled - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_get_hw_fax(sng_fd_t fd, wanpipe_api_t *tdm_api); - -#endif - - -/*! - \fn int sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) - \brief Transmit a TONE on this device (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param tone_id tone type to transmit - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id); - -/*! - \fn int sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable TONE Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG ON HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG OFF HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG KEWL START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms); - \brief Get Front End Alarms (T1/E1 Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param alarms bit map status of T1/E1 alarms - \return non-zero: error, 0: ok - - Supported only on T1/E1 Cards -*/ -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms); - - - -#ifdef WP_API_FEATURE_LINK_STATUS -# ifndef LIBSANGOMA_GET_LINKSTATUS -/*! - \def LIBSANGOMA_GET_LINKSTATUS - \brief Get Link Status feature -*/ -# define LIBSANGOMA_GET_LINKSTATUS 1 -# endif - -/*! - \fn int sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - -*/ -int _SAPI_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status); - -#endif - -/* set current Line Connection state - Connected/Disconnected */ -#ifndef LIBSANGOMA_GET_FESTATUS -/*! - \def LIBSANGOMA_GET_FESTATUS - \brief Get Front End Status feature -*/ -#define LIBSANGOMA_GET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) - \brief Set Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param new_status new status 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status); - - -/*! - \fn int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) - \brief Enable BRI Bchannel loopback - used when debugging bri device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel bri bchannel 1 or 2 - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel); - -/*! - \fn int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) - \brief Disable BRI Bchannel loopback - used when debugging bri device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel bri bchannel 1 or 2 - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel); - - -/*! - \fn int sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \param size tx queue size (minimum value of 1) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size); - -/*! - \fn int sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Rx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \param size rx queue size (minimum value of 1) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size); - - -#ifndef LIBSANGOMA_GET_HWCODING -/*! - \def LIBSANGOMA_GET_HWCODING - \brief Get HW Coding Feature -*/ -#define LIBSANGOMA_GET_HWCODING 1 -#endif - -/*! - \fn int sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get HW Voice Coding (ulaw/alaw) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will return the low level voice coding - depending on configuration. (ulaw or alaw) -*/ -int _SAPI_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api); - - - -#ifndef LIBSANGOMA_GET_HWDTMF -/*! - \def LIBSANGOMA_GET_HWDTMF - \brief HW DTMF Feature -*/ -#define LIBSANGOMA_GET_HWDTMF 1 -#endif -/*! - \fn int sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if hwdtmf support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW DTMF. -*/ -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if hw echo cancelation support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW EC. -*/ -int _SAPI_CALL sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_span_chan_toif(int span, int chan, char *interface_name) - \brief Convert Span & Chan to interface name - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \param interface_name pointer to string where interface name will be written - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name); - -/*! - \fn int sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) - \brief Convert Interace Name to Span & Chan - \param interface_name pointer to string containing interface name - \param span integer pointer where to write span value - \param chan integer pointer where to write chan value - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_interface_wait_up(int span, int chan, int sectimeout) - \brief Wait for a sangoma device to come up (ie: Linux wait for /dev/wanpipex_1 to come up) - \param span span number of the device to wait - \param chan chan number of the device to wait - \param sectimeout how many seconds to wait for the device to come up, -1 to wait forever - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_interface_wait_up(int span, int chan, int sectimeout); - -/*! - \fn int sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver) - \brief Get Device Driver Version Number - \param fd device file descriptor - \param tdm_api tdm api command structure - \param drv_ver driver version structure that will contain the driver version - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver); - -/*! - \fn int sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) - \brief Get Hardware/Firmware Version - \param fd device file descriptor - \param tdm_api tdm api command structure - \param ver hardware/firmware version number - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver); - -/*! - \fn int sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) - \brief Get Hardare/CPLD Version - \param fd device file descriptor - \param tdm_api tdm api command structure - \param ver hardware/cpld version number - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver); - - -/*! - \fn int sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats) - \brief Get Device Statistics. Statistics will be available in tdm_api->wp_cmd.stats structure. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param stats stats structure will be filled with device stats. (Optional, can be left NULL) - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats); - -/*! - \fn int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush/Reset device statistics - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime) - \brief Set rxflashtime for FXS module Wink-Flash Event - \param fd device file descriptor - \param tdm_api tdm api command structure - \param rxflashtime time value - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime); - -#ifdef WP_API_FEATURE_RM_GAIN -/*! - \fn int sangoma_set_rm_tx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) - \brief set tx gain for FXO/FXS module - \param fd device file descriptor - \param tdm_api tdm api command structure - \param value txgain (FXO - txgain value ranges from -150 to 120 , FXS - txgain value 35,-35) - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_set_rm_tx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value); - - -/*! - \fn int sangoma_set_rm_rx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) - \brief set rx gain for FXO/FXS module - \param fd device file descriptor - \param tdm_api tdm api command structure - \param value rxgain (FXO - rxgain value ranges from -150 to 120 , FXS -rxgain value 35,-35) - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_set_rm_rx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value); - -#endif /* WP RM GAIN feature */ - -/*! - \fn int sangoma_set_polarity(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) - \brief set polarity on FXS (Analog only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param value 0 fwd, 1 rev - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_tdm_set_polarity(sng_fd_t fd, wanpipe_api_t *tdm_api, int polarity); - -/*! - \fn int sangoma_tdm_txsig_onhooktranfer(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG ON HOOK Tranfer (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_onhooktransfer(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef WP_API_FEATURE_LOOP -/*! - \fn int sangoma_tdm_enable_loop(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable channel loop: All rx data will be transmitted back out. - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_tdm_enable_loop(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_loop(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable channel loop - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_tdm_disable_loop(sng_fd_t fd, wanpipe_api_t *tdm_api); -#endif - -/************************************************************//** - * Device EVENT Function - ***************************************************************/ - - -/*! - \fn int sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Read API Events - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - The TDM API structure will be populated with a TDM API or WAN Event. - This function usually used after wait() function indicated that event - has occured. -*/ -int _SAPI_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api); - -#ifdef WP_API_FEATURE_LOGGER - -sangoma_status_t _SAPI_CALL sangoma_logger_cmd_exec(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_read_event(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Read Wanpipe Logger Events - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error - - The Logger API structure will be populated with a Logger Event. - This function usually used after wait() function indicated that - an event has occured. -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_read_event(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_flush_buffers(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Flush Wanpipe Logger internal buffers - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_flush_buffers(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get Wanpipe Logger statistics - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_get_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_reset_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Reset Wanpipe Logger statistics - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_reset_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_open_handle_counter(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get Counter of open Handles/File Descriptors of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_get_open_handle_counter(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get current level (types of events) of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_get_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_set_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Set current level (types of events) of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _SAPI_CALL sangoma_logger_set_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -#endif /* WP LOGGER FEATURE */ - -#ifndef LIBSANGOMA_LIGHT - -/************************************************************//** - * Device PORT Control Functions - ***************************************************************/ - -/*! - \fn int sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Start a Port, create Sangoma Communication interfaces. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to a port_management_struct_t structure. - On return, sangoma_driver_port_start() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _SAPI_CALL sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Start a Port, create Sangoma Communication interfaces. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to a port_management_struct_t structure. - On return, sangoma_driver_port_stop() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _SAPI_CALL sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) - \brief Set Port's "Volatile" configuration. The configuration will not persist between system restarts. - Before calling this function please stop the port by calling sangoma_driver_port_stop(). - After calling this function please start the port by calling sangoma_driver_port_start(). - \param[in] fd Port Device file descriptor - \param[in, out] port_cfg pointer to port_cfg_t structure that specifies complete Port configuration. - On return, sangoma_driver_port_set_config() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_cfg->operation_status. -*/ -int _SAPI_CALL sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) - \brief Retrieve Port's "Volatile" configuration. - \param[in] fd Port Device file descriptor - \param[out] port_cfg pointer to port_cfg_t structure. - On return, sangoma_driver_port_get_config() will copy current Port configuration - into this structure. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_cfg->operation_status. -*/ -int _SAPI_CALL sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no); - - -/*! - \fn int sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Retrieve information about a single instance of Sangoma hardware. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to port_management_struct_t structure which will contain hardware_info_t at - it's "data" field, when this function returns. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _SAPI_CALL sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_write_port_config_on_persistent_storage(hardware_info_t *hardware_info, port_cfg_t *port_cfg) - \brief Write Port's configuration on the hard disk. - Linux Specific: the "Persistent" configuration of a Port N (e.g. WANPIPE1) is stored in - /etc/wanpipe/wanpipeN.conf (e.g. wanpipe1.conf). - Configuration can be manualy viewed/changed by editing the ".conf" file. - Currently this functionality is not implemented. - Windows Specific: the "Persistent" configuration of a Port (e.g. WANPIPE1) is stored in - Windows Registry. - Configuration can be manualy viewed/changed in the Device Manager. - \param[in] hardware_info pointer to hardware_info_t structure containing information about a - single instance of Sangoma hardware. - \param[in] port_cfg pointer to structure containing complete Port configuration. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_write_port_config_on_persistent_storage(hardware_info_t *hardware_info, port_cfg_t *port_cfg, unsigned short port_no); - - -/************************************************************//** - * Device MANAGEMENT Functions - ***************************************************************/ - -/*! - \fn int sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) - \brief Execute Sangoma Management Command - \param fd device file descriptor - \param wan_udp management command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp); - - -#endif /* LIBSANGOMA_LIGHT */ - - -/*================================================================ - * DEPRECATED Function Calls - Not to be used any more - * Here for backward compatibility - *================================================================*/ - - -#ifndef LIBSANGOMA_SET_FESTATUS -/*! - \def LIBSANGOMA_SET_FESTATUS - \brief Set Front End Status Feature -*/ -#define LIBSANGOMA_SET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - - Deprecated - replaced by sangoma_tdm_get_link_status function -*/ -int _SAPI_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status); - - - -/*! - \fn int sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) - \brief Set TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \param codec codec to set (ulaw/alaw/slinear) - \return non-zero: error, 0: ok - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec); - -/*! - \fn int sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Configured TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured codec value - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn sng_fd_t sangoma_create_socket_by_name(char *device, char *card) - \brief Open a device based on a interface and card name - \param device interface name - \param card card name - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Deprecated - here for backward compatibility -*/ -sng_fd_t _SAPI_CALL sangoma_create_socket_by_name(char *device, char *card); - -/*! - \fn int sangoma_interface_toi(char *interface_name, int *span, int *chan) - \brief Convert Span & Chan to interface name - \param interface_name pointer to string where interface name will be written - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return non-zero = error, 0 = ok - Deprecated - here for backward compatibility -*/ -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) - \brief Set Power Level - so only data matching the power level would be passed up. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param power value of power - \return non-zero: error, 0: ok - - Deprecated - not used/implemented -*/ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power); - -/*! - \fn int sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Configured Power Level - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured power level - - Deprecated - not used/implemented -*/ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef __cplusplus -} -#endif/* __WINDOWS__ */ - - -#if defined(__WINDOWS__) -/*! Windows specific API */ -#ifdef __cplusplus -extern "C" { /* for C++ users */ -#endif - -sangoma_status_t _SAPI_CALL sangoma_unload_driver(); -sangoma_status_t _SAPI_CALL sangoma_load_driver(); - -#ifdef __cplusplus -} -#endif/* __WINDOWS__ */ -#else -/*! Backward compabile defines */ -#define sangoma_open_tdmapi_span_chan sangoma_open_api_span_chan -#define sangoma_open_tdmapi_span sangoma_open_api_span -#define sangoma_open_tdmapi_ctrl sangoma_open_api_ctrl -#define sangoma_tdm_get_fe_status sangoma_get_fe_status -#define sangoma_socket_close sangoma_close -#define sangoma_tdm_get_hw_coding sangoma_get_hw_coding -#define sangoma_tdm_set_fe_status sangoma_set_fe_status -#define sangoma_tdm_get_link_status sangoma_get_link_status -#define sangoma_tdm_flush_bufs sangoma_flush_bufs -#define sangoma_tdm_cmd_exec sangoma_cmd_exec -#define sangoma_tdm_read_event sangoma_read_event -#define sangoma_readmsg_tdm sangoma_readmsg -#define sangoma_readmsg_socket sangoma_readmsg -#define sangoma_sendmsg_socket sangoma_writemsg -#define sangoma_writemsg_tdm sangoma_writemsg -#define sangoma_create_socket_intr sangoma_open_api_span_chan -#endif - -#endif /* _LIBSNAGOMA_H */ - diff --git a/api/libsangoma/.svn/tmp/tempfile.22.tmp b/api/libsangoma/.svn/tmp/tempfile.22.tmp deleted file mode 100644 index faf647a..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.22.tmp +++ /dev/null @@ -1,1963 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.h - * \brief Wanpipe API Library header for Sangoma AFT T1/E1/Analog/BRI/Serial Hardware - - * \brief Provides User a Unified/OS Agnostic API to Wanpipe/Sangoma Drivers and Hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * =============================================================================== - * v.2.0.0 Nenad Corbic - * Jan 30 2009 - * Added sangoma_get_driver_version, sangoma_get_firmware_version, - * sangoma_get_cpld_version functions,sangoma_get_stats,sangoma_flush_stats - */ - -#ifndef _LIBSNAGOMA_H -#define _LIBSNAGOMA_H - -#ifdef __linux__ -#ifndef __LINUX__ -/* most wanpipe driver headers require __LINUX__ to be defined */ -#define __LINUX__ -#endif -#endif - -#ifdef __cplusplus -extern "C" { /* for C++ users */ -#endif - -#include - - -/*! - \def WANPIPE_TDM_API - \brief Used by compiler and driver to enable TDM API -*/ -#define WANPIPE_TDM_API 1 - -/*TODO: LIBSANGOMA_VERSION_CODE should be generated out of LIBSANGOMA_LT_CURRENT and friends in configure.in */ - -/*! - \def LIBSANGOMA_VERSION - \brief LibSangoma Macro to check the Version Number -*/ -#define LIBSANGOMA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) - -/*! - \def LIBSANGOMA_VERSION_CODE - \brief LibSangoma Current Version Number to be checked against the LIBSANGOMA_VERSION Macro -*/ -#define LIBSANGOMA_VERSION_CODE LIBSANGOMA_VERSION(3,3,0) - -/*! - \def LIBSANGOMA_VERSION_STR - \brief LibSangoma Version in string format -*/ -#define LIBSANGOMA_VERSION_STR "3.3.0" - -struct sangoma_wait_obj; -#define sangoma_wait_obj_t struct sangoma_wait_obj - - -/*! - \def SANGOMA_DECLARE_TDM_API_CMD - \brief Instantiate/Declare a tdm api cmd strucure - \def SANGOMA_INIT_TDM_API_CMD - \brief Initialize the tdm api cmd structure. Set to 0. - \def SANGOMA_DECLARE_INIT_TDM_API_CMD - \brief Declare and initialize the tdm api cmd structure. -*/ -#define SANGOMA_DECLARE_TDM_API_CMD(_name_) wanpipe_api_t _name_ -#define SANGOMA_INIT_TDM_API_CMD(_name_) memset(&_name_,0,sizeof(_name_)) -#define SANGOMA_DECLARE_INIT_TDM_API_CMD(_name_) wanpipe_tdm_api_t _name_; SANGOMA_INIT_TDM_API_CMD(_name_) - - -#if defined(WIN32) || defined(WIN64) -#ifndef __WINDOWS__ -#define __WINDOWS__ -#endif -#include -#include -#include -#include -#include - -/*! - \def _LIBSNG_CALL - \brief libsangoma.dll functions exported as __cdecl calling convention -*/ -#ifdef __COMPILING_LIBSANGOMA__ -# define _LIBSNG_CALL __declspec(dllexport) __cdecl -#else -# define _LIBSNG_CALL __declspec(dllimport) __cdecl -#endif - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT (deprecated, use SANGOMA_WAIT_INFINITE instead) - \brief Infinite poll timeout value -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT INFINITE -#define SANGOMA_WAIT_INFINITE INFINITE - -/*! - \def sangoma_msleep(x) - \brief milisecond sleep function -*/ -#define sangoma_msleep(x) Sleep(x) - -/*! - \def sangoma_ctime(time_val) - \brief Convert a time value to a string - \param time_val pointer to 64-bit time value -*/ -#define sangoma_ctime(time) _ctime64(time) - -#else -/* L I N U X */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/*! - \def _LIBSNG_CALL - \brief Not used in Linux -*/ -#define _LIBSNG_CALL - -/*! - \def INVALID_HANDLE_VALUE - \brief Invalid file handle value -1, Ported from Windows -*/ -#define INVALID_HANDLE_VALUE -1 - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT (deprecated, use SANGOMA_WAIT_INFINITE instead) - \brief Infinite poll timeout value -1, Ported from Windows -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT -1 -#define SANGOMA_WAIT_INFINITE -1 - -/*! - \def __cdecl - \brief Ported from Windows - \typedef BOOL - \brief Boolean type int, Ported from Windows - \typedef DWORD - \brief DWORD type is int, Ported from Windows - \def FALSE - \brief FALSE value is 0, Ported from Windows - \def TRUE - \brief TRUE value is 1, Ported from Windows - \def sangoma_msleep(x) - \brief milisecond sleep function - \def _getch - \brief get character, Ported from Windows - \def Sleep - \brief milisecond sleep function - \typedef HANDLE - \brief file handle type int, Ported from Windows - \typedef TCHAR - \brief TCHAN type mapped to char, Ported from Windows - \typedef ULONG - \brief ULONG type mapped to unsigned long, Ported from Windows - \typedef UCHAR - \brief ULONG type mapped to unsigned char, Ported from Windows - \typedef USHORT - \brief USHORT type mapped to unsigned short, Ported from Windows - \typedef LPSTR - \brief LPSTR type mapped to unsigned char *, Ported from Windows - \typedef PUCHAR - \brief PUCHAR type mapped to unsigned char *, Ported from Windows - \typedef PVOID - \brief PVOID type mapped to void *, Ported from Windows - \typedef LPTHREAD_START_ROUTINE - \brief LPTHREAD_START_ROUTINE type mapped to unsigned char *, Ported from Windows - \def _stricmp - \brief _stricmp type mapped to _stricmp, Ported from Windows - \def _snprintf - \brief _snprintf type mapped to snprintf, Ported from Windows -*/ - -#define __cdecl - -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - -#define sangoma_msleep(x) usleep(x*1000) -#define _getch getchar -#define Sleep sangoma_msleep -#define _stricmp strcmp -#define _snprintf snprintf -#define _vsnprintf vsnprintf - -typedef int HANDLE; -typedef int BOOL; -typedef int DWORD; -typedef char TCHAR; -typedef unsigned char UCHAR; -typedef unsigned long ULONG; -typedef unsigned short USHORT; -typedef unsigned char * LPSTR; -typedef unsigned char * PUCHAR; -typedef void * PVOID; -typedef void * LPTHREAD_START_ROUTINE; -typedef pthread_mutex_t CRITICAL_SECTION; - -#define EnterCriticalSection(arg) pthread_mutex_lock(arg) -#define LeaveCriticalSection(arg) pthread_mutex_unlock(arg) -#define InitializeCriticalSection(arg) pthread_mutex_init(arg, NULL); - -typedef struct tm SYSTEMTIME; -typedef char * LPCTSTR; - -/*! - \def sangoma_ctime(time_val) - \brief Convert a time value to a string - \param time_val pointer to time value -*/ -#define sangoma_ctime(time) ctime((time_t*)time) - -#endif/* WIN32 */ - - -/*! - LIBSANGOMA_LIGHT can be used to enable only IO and EVENT - libsangoma functions. The DRIVER configuration/start/stop - functions are not compiled. - - LIBSANGOMA_LIGHT depends only on 3 header files. Instead - of all wanpipe header files needed for DRIVER management - - LIBSANGMOA_LIGHT is NOT enabled by default. -*/ - -#ifdef LIBSANGOMA_LIGHT -#include "wanpipe_api_iface.h" -#include "wanpipe_api_hdr.h" -#include "sdla_te1.h" -#include "wanpipe_events.h" -#include "wanpipe_api_deprecated.h" -#else -#include "wanpipe_api.h" -#endif - -#ifdef __LINUX__ -#include "wanpipe_kernel.h" -#endif - -/*! - * As of now this typedef maps exactly to SANG_STATUS_T, however that - * is a kernel type, ugly, ugly, uglyyyyy, we should have strictly - * minimum set of shared data structures between kernel and user - * many return codes specified in SANG_STATUS_T are kernel specific - * like FAILED_TO_LOCK_USER_MEMORY or INVALID_IRQL, the libsangoma - * user does not need that much information, and even if ever needs - * it we should provide simpler defaults - * \brief return status from sangoma APIs - */ -typedef int32_t sangoma_status_t; - -/*! - \def FNAME_LEN - \brief string length of a file name - \def FUNC_DBG(x) - \brief function debug print function - \def DBG_PRINT - \brief debug print function -*/ -#define FNAME_LEN 100 -#define LIBSNG_FUNC_DBG() if(0)printf("%s(): line:%d\n", __FUNCTION__, __LINE__) -#define LIBSNG_DBG_PRINT if(0)printf - -/*! - \typedef sangoma_api_hdr_t - \brief Backward comaptible define of wp_api_hdr_t -*/ -typedef wp_api_hdr_t sangoma_api_hdr_t; - -/*! - \enum _sangoma_wait_obj_type_t - \brief Wait object type definition - \typedef sangoma_wait_obj_type_t - \brief Wait object type definition -*/ -typedef enum _sangoma_wait_obj_type -{ - /*! \brief deprecated, use SANGOMA_GENERIC_WAIT_OBJ */ - UNKNOWN_WAIT_OBJ = 0, - /*! \brief Generic object that can be signaled but is not associated to any sangoma device */ - SANGOMA_GENERIC_WAIT_OBJ = 0, - /*! \brief Sangoma object associated to some device which cannot be signaled (cannot call sangoma_wait_obj_signal on it) */ - SANGOMA_DEVICE_WAIT_OBJ, - /*! \brief Sangoma object that is associated to a device AND can be signaled */ - SANGOMA_DEVICE_WAIT_OBJ_SIG, -} sangoma_wait_obj_type_t; - -#define DECODE_SANGOMA_WAIT_OBJECT_TYPE(type)\ - type == SANGOMA_GENERIC_WAIT_OBJ ? "SANGOMA_GENERIC_WAIT_OBJ" :\ - type == SANGOMA_DEVICE_WAIT_OBJ ? "SANGOMA_DEVICE_WAIT_OBJ" :\ - type == SANGOMA_DEVICE_WAIT_OBJ_SIG ? "SANGOMA_DEVICE_WAIT_OBJ_SIG" :\ - "Invalid Wait Object type!" - -/* - * Possible flags for sangoma waitable objects - * this definitions MUST match POLLIN, POLLOUT and POLLPRI - * SANG_WAIT_OBJ_IS_SIGNALED has no posix equivalent though - * Users are encouraged to use this flags instead of the system ones - */ -typedef enum _sangoma_wait_obj_flags { - SANG_WAIT_OBJ_HAS_INPUT = POLLIN, - SANG_WAIT_OBJ_HAS_OUTPUT = POLLOUT, - SANG_WAIT_OBJ_HAS_EVENTS = POLLPRI, - SANG_WAIT_OBJ_IS_SIGNALED = 0x400 /* matches GNU extension POLLMSG */ -} sangoma_wait_obj_flags_t; - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - -/*! - \fn sng_fd_t sangoma_open_api_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Restriced open, device will allowed to be open only once. -*/ -sng_fd_t _LIBSNG_CALL sangoma_open_api_span_chan(int span, int chan); - - -/*! - \fn sng_fd_t __sangoma_open_api_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _LIBSNG_CALL __sangoma_open_api_span_chan(int span, int chan); -#define __sangoma_open_tdmapi_span_chan __sangoma_open_api_span_chan - -/*! - \fn sng_fd_t sangoma_open_tdmapi_span(int span) - \brief Open a first available device on a Span - \param span span number starting from 1 to 255 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _LIBSNG_CALL sangoma_open_api_span(int span); - - -/*! - \def sangoma_create_socket_intr - \brief Backward compatible open span chan call -*/ - - - -/*! - \def LIBSANGOMA_TDMAPI_CTRL - \brief Global control device feature -*/ -#ifndef LIBSANGOMA_TDMAPI_CTRL -#define LIBSANGOMA_TDMAPI_CTRL 1 -#endif - -/*! - \fn sng_fd_t sangoma_open_api_ctrl(void) - \brief Open a Global Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t _LIBSNG_CALL sangoma_open_api_ctrl(void); - -/*! - \fn sng_fd_t sangoma_logger_open(void) - \brief Open a Global Logger Device - \return File Descriptor - negative=error 0 or greater = fd - - The global Logger device receives Logger Events for all devices - configured. -*/ -sng_fd_t _LIBSNG_CALL sangoma_logger_open(void); - -/*! - \fn sng_fd_t sangoma_open_driver_ctrl(int port_no) - \brief Open a Global Driver Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t _LIBSNG_CALL sangoma_open_driver_ctrl(int port_no); - - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void - -*/ -void _LIBSNG_CALL sangoma_close(sng_fd_t *fd); - - - -/*! - \fn int sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get device open count - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative or 0: error, greater than 1 : open count -*/ - -int _LIBSNG_CALL sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -/*! - \fn int sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) - \brief Write Data to device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be transmitted - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return transmit size, must be equal to datalen, anything else is error - - In case of error return code, one must check the header operation_status - variable to identify the reason of an error. Please refer to the error codes. -*/ - -int _LIBSNG_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, unsigned short datalen, int flag); - - -/*! - \fn int sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) - \brief Read Data from device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be received - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return received size, must be equal to datalen, anything else is error or busy - - In case of error return code, one must check the header operation_status - variable to identify the reason of error. Please refer to the error codes. -*/ -int _LIBSNG_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, int datalen, int flag); - - - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int32_t inflags, int32_t *outflags, int32_t timeout) - \brief Wait for a single waitable object - \param sangoma_wait_obj pointer to a wait object previously created with sangoma_wait_obj_create - \param timeout timeout in miliseconds in case of no event - \return SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured use sangoma_wait_obj_get_out_flags to check or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, uint32_t inflags, uint32_t *outflags, int32_t timeout); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], int32_t in_flags[], int32_t out_flags[] uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - \brief Wait for multiple sangoma waitable objects - \param sangoma_wait_objects pointer to array of wait objects previously created with sangoma_wait_obj_create - \param in_flags array of flags corresponding to the flags the user is interested on for each waitable object - \param out_flags array of flags corresponding to the flags that are ready in the waitable objects - \param number_of_sangoma_wait_objects size of the array of waitable objects and flags - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured check in sangoma_wait_objects, any other return code is some error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], uint32_t in_flags[], uint32_t out_flags[], - uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - -/*! - \fn sangoma_status_t sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) - \brief Create a wait object that will be used with sangoma_waitfor_many() API - \param sangoma_wait_object pointer a single device object - \param fd device file descriptor - \param object_type type of the wait object. see sangoma_wait_obj_type_t for types - \see sangoma_wait_obj_type_t - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type); - -/*! - \fn sangoma_status_t sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) - \brief De-allocate all resources inside a wait object which were allocated by sangoma_wait_obj_init(). - \param sangoma_wait_object pointer to a pointer to a single device object - \return SANG_STATUS_SUCCESS on success or some sangoma status error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object); - -/*! - \fn void sangoma_wait_obj_signal(sangoma_wait_obj_t *sangoma_wait_object) - \brief Set wait object to a signaled state - \param sangoma_wait_object pointer a single device object that can be signaled - \return sangoma_status_t -*/ -sangoma_status_t _LIBSNG_CALL sangoma_wait_obj_signal(sangoma_wait_obj_t *sangoma_wait_object); - -/*! - \fn sng_fd_t sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sangoma_wait_object) - \brief Get fd device file descriptor which was the 'fd' parameter for sangoma_wait_obj_create(), not useful for generic objects - \param sangoma_wait_object pointer a single device object - \return sng_fd_t - device file descriptor -*/ -sng_fd_t _LIBSNG_CALL sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sangoma_wait_object); - -/*! - \fn void sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Store the given context into provided sangoma wait object. - \brief This function is useful to associate a context with a sangoma wait object. - \param sangoma_wait_object pointer a single device object - \param context void pointer to user context - \return void -*/ -void _LIBSNG_CALL sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object, void *context); - -/*! - \fn PVOID sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Retrieve the user context (if any) that was set via sangoma_wait_obj_set_context. - \brief Windows note: must use return type PVOID instead of void* to satisfy WDK compiler. - \param sangoma_wait_object pointer a single device object - \return void* -*/ -PVOID _LIBSNG_CALL sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object); - - -/************************************************************//** - * Device API COMMAND Functions - ***************************************************************/ - -/*! - \fn int sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Execute Sangoma API Command - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Read tdm api device configuration - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) - \brief Set Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \param period value in miliseconds (1,2,5,10) - \return non-zero: error, 0: ok - - Only valid in CHAN Operation Mode -*/ -int _LIBSNG_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period); - -/*! - \fn int sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured period value -*/ -int _LIBSNG_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx/Rx MTU/MRU in bytes - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured mtu/mru in bytes -*/ -int _LIBSNG_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush all (tx/rx/event) buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _LIBSNG_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_flush_rx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only rx buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _LIBSNG_CALL sangoma_flush_rx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); -/*! - \fn int sangoma_flush_tx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only tx buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _LIBSNG_CALL sangoma_flush_tx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_flush_event_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only event buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _LIBSNG_CALL sangoma_flush_event_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) - \brief Enable RBS Events on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param poll_in_sec driver poll period for rbs events - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec); - -/*! - \fn int sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RBS Events for a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs) - \brief Write RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel t1/e1 timeslot - \param rbs rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs); - -/*! - \fn int sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs) - \brief Read RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel t1/e1 timeslot - \param rbs pointer to rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ - -int _LIBSNG_CALL sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs); - -/*! - \fn int sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef WP_API_FEATURE_FAX_EVENTS -/*! - \fn int sangoma_tdm_enable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable FAX Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_enable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable FAX Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_disable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_hw_fax(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get HW FAX Detection State (Enable or Disabled) on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: Disabled, 1: Enabled - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_get_hw_fax(sng_fd_t fd, wanpipe_api_t *tdm_api); - -#endif - - -/*! - \fn int sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) - \brief Transmit a TONE on this device (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param tone_id tone type to transmit - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id); - -/*! - \fn int sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable TONE Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG ON HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG OFF HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG KEWL START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int _LIBSNG_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms); - \brief Get Front End Alarms (T1/E1 Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param alarms bit map status of T1/E1 alarms - \return non-zero: error, 0: ok - - Supported only on T1/E1 Cards -*/ -int _LIBSNG_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms); - - - -#ifdef WP_API_FEATURE_LINK_STATUS -# ifndef LIBSANGOMA_GET_LINKSTATUS -/*! - \def LIBSANGOMA_GET_LINKSTATUS - \brief Get Link Status feature -*/ -# define LIBSANGOMA_GET_LINKSTATUS 1 -# endif - -/*! - \fn int sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - -*/ -int _LIBSNG_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status); - -#endif - -/* set current Line Connection state - Connected/Disconnected */ -#ifndef LIBSANGOMA_GET_FESTATUS -/*! - \def LIBSANGOMA_GET_FESTATUS - \brief Get Front End Status feature -*/ -#define LIBSANGOMA_GET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) - \brief Set Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param new_status new status 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status); - - -/*! - \fn int _LIBSNG_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) - \brief Enable BRI Bchannel loopback - used when debugging bri device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel bri bchannel 1 or 2 - \return non-zero: error, 0: ok - -*/ -int _LIBSNG_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel); - -/*! - \fn int _LIBSNG_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) - \brief Disable BRI Bchannel loopback - used when debugging bri device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel bri bchannel 1 or 2 - \return non-zero: error, 0: ok - -*/ -int _LIBSNG_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel); - - -/*! - \fn int sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \param size tx queue size (minimum value of 1) - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size); - -/*! - \fn int sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Rx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \param size rx queue size (minimum value of 1) - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size); - - -#ifndef LIBSANGOMA_GET_HWCODING -/*! - \def LIBSANGOMA_GET_HWCODING - \brief Get HW Coding Feature -*/ -#define LIBSANGOMA_GET_HWCODING 1 -#endif - -/*! - \fn int sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get HW Voice Coding (ulaw/alaw) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will return the low level voice coding - depending on configuration. (ulaw or alaw) -*/ -int _LIBSNG_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api); - - - -#ifndef LIBSANGOMA_GET_HWDTMF -/*! - \def LIBSANGOMA_GET_HWDTMF - \brief HW DTMF Feature -*/ -#define LIBSANGOMA_GET_HWDTMF 1 -#endif -/*! - \fn int sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if hwdtmf support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW DTMF. -*/ -int _LIBSNG_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if hw echo cancelation support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW EC. -*/ -int _LIBSNG_CALL sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_span_chan_toif(int span, int chan, char *interface_name) - \brief Convert Span & Chan to interface name - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \param interface_name pointer to string where interface name will be written - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name); - -/*! - \fn int sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) - \brief Convert Interace Name to Span & Chan - \param interface_name pointer to string containing interface name - \param span integer pointer where to write span value - \param chan integer pointer where to write chan value - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_interface_wait_up(int span, int chan, int sectimeout) - \brief Wait for a sangoma device to come up (ie: Linux wait for /dev/wanpipex_1 to come up) - \param span span number of the device to wait - \param chan chan number of the device to wait - \param sectimeout how many seconds to wait for the device to come up, -1 to wait forever - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_interface_wait_up(int span, int chan, int sectimeout); - -/*! - \fn int sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver) - \brief Get Device Driver Version Number - \param fd device file descriptor - \param tdm_api tdm api command structure - \param drv_ver driver version structure that will contain the driver version - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver); - -/*! - \fn int sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) - \brief Get Hardware/Firmware Version - \param fd device file descriptor - \param tdm_api tdm api command structure - \param ver hardware/firmware version number - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver); - -/*! - \fn int sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) - \brief Get Hardare/CPLD Version - \param fd device file descriptor - \param tdm_api tdm api command structure - \param ver hardware/cpld version number - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver); - - -/*! - \fn int sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats) - \brief Get Device Statistics. Statistics will be available in tdm_api->wp_cmd.stats structure. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param stats stats structure will be filled with device stats. (Optional, can be left NULL) - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats); - -/*! - \fn int _LIBSNG_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush/Reset device statistics - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime) - \brief Set rxflashtime for FXS module Wink-Flash Event - \param fd device file descriptor - \param tdm_api tdm api command structure - \param rxflashtime time value - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime); - -#ifdef WP_API_FEATURE_RM_GAIN -/*! - \fn int sangoma_set_rm_tx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) - \brief set tx gain for FXO/FXS module - \param fd device file descriptor - \param tdm_api tdm api command structure - \param value txgain (FXO - txgain value ranges from -150 to 120 , FXS - txgain value 35,-35) - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_set_rm_tx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value); - - -/*! - \fn int sangoma_set_rm_rx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) - \brief set rx gain for FXO/FXS module - \param fd device file descriptor - \param tdm_api tdm api command structure - \param value rxgain (FXO - rxgain value ranges from -150 to 120 , FXS -rxgain value 35,-35) - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_set_rm_rx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value); - -#endif /* WP RM GAIN feature */ - -/*! - \fn int sangoma_set_polarity(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) - \brief set polarity on FXS (Analog only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param value 0 fwd, 1 rev - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_tdm_set_polarity(sng_fd_t fd, wanpipe_api_t *tdm_api, int polarity); - -/*! - \fn int sangoma_tdm_txsig_onhooktranfer(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG ON HOOK Tranfer (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_txsig_onhooktransfer(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef WP_API_FEATURE_LOOP -/*! - \fn int sangoma_tdm_enable_loop(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable channel loop: All rx data will be transmitted back out. - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_tdm_enable_loop(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_loop(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable channel loop - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_tdm_disable_loop(sng_fd_t fd, wanpipe_api_t *tdm_api); -#endif - -/************************************************************//** - * Device EVENT Function - ***************************************************************/ - - -/*! - \fn int sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Read API Events - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - The TDM API structure will be populated with a TDM API or WAN Event. - This function usually used after wait() function indicated that event - has occured. -*/ -int _LIBSNG_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api); - -#ifdef WP_API_FEATURE_LOGGER - -sangoma_status_t _LIBSNG_CALL sangoma_logger_cmd_exec(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_read_event(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Read Wanpipe Logger Events - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error - - The Logger API structure will be populated with a Logger Event. - This function usually used after wait() function indicated that - an event has occured. -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_read_event(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_flush_buffers(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Flush Wanpipe Logger internal buffers - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_flush_buffers(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get Wanpipe Logger statistics - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_get_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_reset_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Reset Wanpipe Logger statistics - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_reset_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_open_handle_counter(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get Counter of open Handles/File Descriptors of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_get_open_handle_counter(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get current level (types of events) of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_get_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_set_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Set current level (types of events) of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_set_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -#endif /* WP LOGGER FEATURE */ - -#ifndef LIBSANGOMA_LIGHT - -/************************************************************//** - * Device PORT Control Functions - ***************************************************************/ - -/*! - \fn int sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Start a Port, create Sangoma Communication interfaces. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to a port_management_struct_t structure. - On return, sangoma_driver_port_start() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _LIBSNG_CALL sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Start a Port, create Sangoma Communication interfaces. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to a port_management_struct_t structure. - On return, sangoma_driver_port_stop() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _LIBSNG_CALL sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) - \brief Set Port's "Volatile" configuration. The configuration will not persist between system restarts. - Before calling this function please stop the port by calling sangoma_driver_port_stop(). - After calling this function please start the port by calling sangoma_driver_port_start(). - \param[in] fd Port Device file descriptor - \param[in, out] port_cfg pointer to port_cfg_t structure that specifies complete Port configuration. - On return, sangoma_driver_port_set_config() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_cfg->operation_status. -*/ -int _LIBSNG_CALL sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) - \brief Retrieve Port's "Volatile" configuration. - \param[in] fd Port Device file descriptor - \param[out] port_cfg pointer to port_cfg_t structure. - On return, sangoma_driver_port_get_config() will copy current Port configuration - into this structure. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_cfg->operation_status. -*/ -int _LIBSNG_CALL sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no); - - -/*! - \fn int sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Retrieve information about a single instance of Sangoma hardware. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to port_management_struct_t structure which will contain hardware_info_t at - it's "data" field, when this function returns. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _LIBSNG_CALL sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_write_port_config_on_persistent_storage(hardware_info_t *hardware_info, port_cfg_t *port_cfg) - \brief Write Port's configuration on the hard disk. - Linux Specific: the "Persistent" configuration of a Port N (e.g. WANPIPE1) is stored in - /etc/wanpipe/wanpipeN.conf (e.g. wanpipe1.conf). - Configuration can be manualy viewed/changed by editing the ".conf" file. - Currently this functionality is not implemented. - Windows Specific: the "Persistent" configuration of a Port (e.g. WANPIPE1) is stored in - Windows Registry. - Configuration can be manualy viewed/changed in the Device Manager. - \param[in] hardware_info pointer to hardware_info_t structure containing information about a - single instance of Sangoma hardware. - \param[in] port_cfg pointer to structure containing complete Port configuration. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_write_port_config_on_persistent_storage(hardware_info_t *hardware_info, port_cfg_t *port_cfg, unsigned short port_no); - - -/************************************************************//** - * Device MANAGEMENT Functions - ***************************************************************/ - -/*! - \fn int sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) - \brief Execute Sangoma Management Command - \param fd device file descriptor - \param wan_udp management command structure - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp); - - -#endif /* LIBSANGOMA_LIGHT */ - - -/*================================================================ - * DEPRECATED Function Calls - Not to be used any more - * Here for backward compatibility - *================================================================*/ - - -#ifndef LIBSANGOMA_SET_FESTATUS -/*! - \def LIBSANGOMA_SET_FESTATUS - \brief Set Front End Status Feature -*/ -#define LIBSANGOMA_SET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - - Deprecated - replaced by sangoma_tdm_get_link_status function -*/ -int _LIBSNG_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status); - - - -/*! - \fn int sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) - \brief Set TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \param codec codec to set (ulaw/alaw/slinear) - \return non-zero: error, 0: ok - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _LIBSNG_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec); - -/*! - \fn int sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Configured TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured codec value - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _LIBSNG_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn sng_fd_t sangoma_create_socket_by_name(char *device, char *card) - \brief Open a device based on a interface and card name - \param device interface name - \param card card name - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Deprecated - here for backward compatibility -*/ -sng_fd_t _LIBSNG_CALL sangoma_create_socket_by_name(char *device, char *card); - -/*! - \fn int sangoma_interface_toi(char *interface_name, int *span, int *chan) - \brief Convert Span & Chan to interface name - \param interface_name pointer to string where interface name will be written - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return non-zero = error, 0 = ok - Deprecated - here for backward compatibility -*/ -int _LIBSNG_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) - \brief Set Power Level - so only data matching the power level would be passed up. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param power value of power - \return non-zero: error, 0: ok - - Deprecated - not used/implemented -*/ -int _LIBSNG_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power); - -/*! - \fn int sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Configured Power Level - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured power level - - Deprecated - not used/implemented -*/ -int _LIBSNG_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef WP_API_FEATURE_LIBSNG_HWEC -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_init(char *device_name) - - \brief Load Firmware image onto EC chip. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_init(char *device_name); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_release(char *device_name) - - \brief Reset internal state of HWEC API. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_release(char *device_name); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_operation_mode(char *device_name, int mode, unsigned int fe_chan_map) - - \brief Modify channel operation mode. - - \param mode One of WANEC_API_OPMODE_? values defined in wanpipe_api_iface.h: - WANEC_API_OPMODE_NORMAL, - WANEC_API_OPMODE_HT_FREEZE, - WANEC_API_OPMODE_HT_RESET, - WANEC_API_OPMODE_POWER_DOWN, - WANEC_API_OPMODE_NO_ECHO, - WANEC_API_OPMODE_SPEECH_RECOGNITION. - - \param fe_chan_map Bitmap of channels (timeslots for Digital, - lines for Analog) where the call will take effect. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_operation_mode(char *device_name, int mode, unsigned int fe_chan_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_power_on (char *device_name, unsigned int fe_chan_map) - - \brief Set the channel state in the echo canceller to NORMAL/POWER ON. - This enables echo cancelation logic inside the chip. - The action is internal to EC chip itself, not related to AFT FPGA. - This call is slow and should be used only on startup. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \param fe_chan_map Bitmap of channels (timeslots for Digital, - lines for Analog) where the call will take effect. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_power_on(char *device_name, unsigned int fe_chan_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_power_off (char *device_name, unsigned int fe_chan_map) - - \brief Set the channel state in the echo canceller to POWER OFF. - This disables echo cancellatio logic inside the chip and - data passes unmodified through the ec chip. - The action is internal to EC chip itself, not related - to AFT FPGA. This call is slow and should be used only on startup. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \param fe_chan_map Bitmap of channels (timeslots for Digital, - lines for Analog) where the call will take effect. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_power_off(char *device_name, unsigned int fe_chan_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_enable(char *device_name, unsigned int fe_chan_map) - - \brief Redirect audio stream from AFT FPGA to EC chip. - This command effectively enables echo cancellation since - data is now forced through the EC chip by the FPGA. - Data will be modified by the echo canceller. - This command is recommened for fast enabling of Echo Cancellation. - Note 1: Chip must be configured and in POWER ON state for echo - Chancellation to take place. - Note 2: sangoma_tdm_enable_hwec() function can be use to achive - the same funcitnality based on file descriptor versus - channel map. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \param fe_chan_map Bitmap of channels (timeslots for Digital, lines for Analog) where - the call will take effect. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_enable(char *device_name, unsigned int fe_chan_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_disable(char *device_name, unsigned int fe_chan_map) - - \brief Force AFT FPGA to bypass the echo canceller. - This command effectively disables echo cancellation since - data will not flowing through the ec chip. - Data will not be modified by the echo canceller. - This command is recommened for fast disabling of Echo Cancelation. - Note: sangoma_tdm_disable_hwec() function can be use to achive - the same functionality based on file descriptor versus - channel map. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \param fe_chan_map Bitmap of channels (timeslots for Digital, lines for Analog) where - the call will take effect. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_disable(char *device_name, unsigned int fe_chan_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_channel_parameters(char *device_name, char *parameter, char *parameter_value, unsigned int channel_map) - - \brief Modify channel configuration parameters. - This is list of Echo Cancellation channel parameters: - - Channel parameter Channel parameter value - ================= ======================= - WANEC_EnableNlp TRUE | FALSE - WANEC_EnableTailDisplacement TRUE | FALSE - WANEC_TailDisplacement 0-896 - WANEC_SoutLevelControl TRUE | FALSE - WANEC_RinAutomaticLevelControl TRUE | FALSE - WANEC_SoutAutomaticLevelControl TRUE | FALSE - WANEC_SoutAdaptiveNoiseReduction TRUE | FALSE - WANEC_RoutNoiseReduction TRUE | FALSE - WANEC_ComfortNoiseMode COMFORT_NOISE_NORMAL - COMFORT_NOISE_FAST_LATCH - COMFORT_NOISE_EXTENDED - COMFORT_NOISE_OFF - WANEC_DtmfToneRemoval TRUE | FALSE - WANEC_AcousticEcho TRUE | FALSE - WANEC_NonLinearityBehaviorA 0-13 - WANEC_NonLinearityBehaviorB 0-8 - WANEC_DoubleTalkBehavior DT_BEH_NORMAL - DT_BEH_LESS_AGGRESSIVE - - \param fe_chan_map Bitmap of channels (timeslots for Digital, lines for Analog) where - the call will take effect. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_channel_parameters(char *device_name, char *parameter, char *parameter_value, unsigned int channel_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_tone_detection(char *device_name, int tone_id, int enable, unsigned int fe_chan_map, unsigned char port_map) - - \brief Enable/Disable tone detection (such as DTMF) of channels from channel map. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \param tone_id See wanpipe_api_iface.h for list of valid tones - - \param enable A flag, if 1 - the specified tone will be detected, - if 0 - specified tone will not be detected. - - \param fe_chan_map Bitmap of channels (timeslots for Digital, lines for Analog) where - the call will take effect. - - \param port_map Port\Direction of tone detection - Rx, Tx. See wanpipe_events.h for - list of valid ports (WAN_EC_CHANNEL_PORT_SOUT...). - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_tone_detection(char *device_name, int tone_id, int enable, unsigned int fe_chan_map, unsigned char port_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_print_statistics(char *device_name, int full, unsigned int fe_chan_map) - - \brief Read and print Chip/Channel statistics from EC chip. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \param full Flag to read full statistics, if set to 1. - - \param fe_chan_map Bitmap of channels (timeslots for Digital, lines for Analog) where - the call will read statistics. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_print_statistics(char *device_name, int full, unsigned int fe_chan_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_audio_buffer_load(char *device_name, char *filename, char pcmlaw, int *out_buffer_id) - - \brief Load audio buffer to EC chip. The buffer can be played out using the sangoma_hwec_audio_buffer_playout() function. - - \param filename name of the audio file (without the extension). - Actual file must have .pcm extension. - Location: - Windows: %SystemRoot%\sang_ec_files (ex: c:\WINDOWS\sang_ec_files) - Linux: /etc/wanpipe/buffers - - \param out_buffer_id when the buffer is loaded on the chip, it is assigned an ID. This ID should - be used when requesting to play out the buffer. - - \return SANG_STATUS_SUCCESS: success, or error status - - */ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_audio_buffer_load(char *device_name, char *filename, char pcmlaw, int *out_buffer_id); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_audio_bufferunload(char *device_name, int in_buffer_id) - - \brief Unload/remove an audio buffer from the HWEC chip. - - \param device_name Sangoma wanpipe device name. (ex: wanpipe1 - Linux; wanpipe1_if1 - Windows). - - \param in_buffer_id ID of the buffer which will be unloaded. The ID must be initialized by sangoma_hwec_audio_bufferload(). - - \return SANG_STATUS_SUCCESS - buffer was successfully unloaded/removed, SANG_STATUS_GENERAL_ERROR - error occured -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_audio_buffer_unload(char *device_name, int in_buffer_id); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_audio_buffer_playout(char *device_name, unsigned int fe_chan_map, - unsigned char port_map, int buffer_id, int start, int repeat_cnt, int duration) - - \brief Start\Stop playing out an audio buffer previously loaded by sangoma_hwec_audio_buffer_load(). - - \param fe_chan_map Bitmap of channels (timeslots for Digital, - lines for Analog) where the call will take effect. - - \param port_map Port\Direction where the buffer will be played out. - This is the channel port on which the buffer will be - played (WAN_EC_CHANNEL_PORT_SOUT or WAN_EC_CHANNEL_PORT_ROUT) - - \param in_buffer_id ID of the buffer which will be unloaded. The ID must be initialized by sangoma_hwec_audio_bufferload(). - - \param start If 1 - start the play out, 0 - stop the play out - - \param repeat_cnt Number of times to play out the same buffer - - \param duration Maximum duration of the playout, in milliseconds. If it takes less then 'duration' to - play out the whole buffer this paramter is ignored. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_audio_buffer_playout(char *device_name, unsigned int fe_chan_map, - unsigned char port, int in_buffer_id, int start, - int repeat_cnt, int duration); - -/*! - \fn void _LIBSNG_CALL sangoma_hwec_config_verbosity(int verbosity_level) - - \brief Set Verbosity level of EC API. The level controls amount of data - printed to stdout and wanpipelog.txt for diagnostic purposes. - - \param verbosity_level Valid values are from 0 to 3. - - \return SANG_STATUS_SUCCESS: success - the level was changed to 'verbosity_level', - SANG_STATUS_INVALID_PARAMETER: error - the level was not changed because new level is invalid -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_verbosity(int verbosity_level); - -#endif /* WP_API_FEATURE_LIBSNG_HWEC */ - - -#ifdef __cplusplus -} -#endif/* __WINDOWS__ */ - - -#if defined(__WINDOWS__) -/*! Windows specific API */ -#ifdef __cplusplus -extern "C" { /* for C++ users */ -#endif - -sangoma_status_t _LIBSNG_CALL sangoma_unload_driver(); -sangoma_status_t _LIBSNG_CALL sangoma_load_driver(); -void _LIBSNG_CALL sangoma_reset_port_numbers(); - -#ifdef __cplusplus -} -#endif/* __WINDOWS__ */ - -#else -/*! Backward compabile defines */ -#define sangoma_open_tdmapi_span_chan sangoma_open_api_span_chan -#define sangoma_open_tdmapi_span sangoma_open_api_span -#define sangoma_open_tdmapi_ctrl sangoma_open_api_ctrl -#define sangoma_tdm_get_fe_status sangoma_get_fe_status -#define sangoma_socket_close sangoma_close -#define sangoma_tdm_get_hw_coding sangoma_get_hw_coding -#define sangoma_tdm_set_fe_status sangoma_set_fe_status -#define sangoma_tdm_get_link_status sangoma_get_link_status -#define sangoma_tdm_flush_bufs sangoma_flush_bufs -#define sangoma_tdm_cmd_exec sangoma_cmd_exec -#define sangoma_tdm_read_event sangoma_read_event -#define sangoma_readmsg_tdm sangoma_readmsg -#define sangoma_readmsg_socket sangoma_readmsg -#define sangoma_sendmsg_socket sangoma_writemsg -#define sangoma_writemsg_tdm sangoma_writemsg -#define sangoma_create_socket_intr sangoma_open_api_span_chan -#endif - -#endif /* _LIBSNAGOMA_H */ - diff --git a/api/libsangoma/.svn/tmp/tempfile.23.tmp b/api/libsangoma/.svn/tmp/tempfile.23.tmp deleted file mode 100644 index 58fecf9..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.23.tmp +++ /dev/null @@ -1,1965 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.h - * \brief Wanpipe API Library header for Sangoma AFT T1/E1/Analog/BRI/Serial Hardware - - * \brief Provides User a Unified/OS Agnostic API to Wanpipe/Sangoma Drivers and Hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * =============================================================================== - * v.2.0.0 Nenad Corbic - * Jan 30 2009 - * Added sangoma_get_driver_version, sangoma_get_firmware_version, - * sangoma_get_cpld_version functions,sangoma_get_stats,sangoma_flush_stats - */ - -#ifndef _LIBSNAGOMA_H -#define _LIBSNAGOMA_H - -#ifdef __linux__ -#ifndef __LINUX__ -/* most wanpipe driver headers require __LINUX__ to be defined */ -#define __LINUX__ -#endif -#endif - -#ifdef __cplusplus -extern "C" { /* for C++ users */ -#endif - -#include - - -/*! - \def WANPIPE_TDM_API - \brief Used by compiler and driver to enable TDM API -*/ -#define WANPIPE_TDM_API 1 - -/*TODO: LIBSANGOMA_VERSION_CODE should be generated out of LIBSANGOMA_LT_CURRENT and friends in configure.in */ - -/*! - \def LIBSANGOMA_VERSION - \brief LibSangoma Macro to check the Version Number -*/ -#define LIBSANGOMA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) - -/*! - \def LIBSANGOMA_VERSION_CODE - \brief LibSangoma Current Version Number to be checked against the LIBSANGOMA_VERSION Macro -*/ -#define LIBSANGOMA_VERSION_CODE LIBSANGOMA_VERSION(3,3,0) - -/*! - \def LIBSANGOMA_VERSION_STR - \brief LibSangoma Version in string format -*/ -#define LIBSANGOMA_VERSION_STR "3.3.0" - -struct sangoma_wait_obj; -#define sangoma_wait_obj_t struct sangoma_wait_obj - - -/*! - \def SANGOMA_DECLARE_TDM_API_CMD - \brief Instantiate/Declare a tdm api cmd strucure - \def SANGOMA_INIT_TDM_API_CMD - \brief Initialize the tdm api cmd structure. Set to 0. - \def SANGOMA_DECLARE_INIT_TDM_API_CMD - \brief Declare and initialize the tdm api cmd structure. -*/ -#define SANGOMA_DECLARE_TDM_API_CMD(_name_) wanpipe_api_t _name_ -#define SANGOMA_INIT_TDM_API_CMD(_name_) memset(&_name_,0,sizeof(_name_)) -#define SANGOMA_DECLARE_INIT_TDM_API_CMD(_name_) wanpipe_tdm_api_t _name_; SANGOMA_INIT_TDM_API_CMD(_name_) - - -#if defined(WIN32) || defined(WIN64) -#ifndef __WINDOWS__ -#define __WINDOWS__ -#endif -#include -#include -#include -#include -#include - -/*! - \def _LIBSNG_CALL - \brief libsangoma.dll functions exported as __cdecl calling convention -*/ -#ifdef __COMPILING_LIBSANGOMA__ -# define _LIBSNG_CALL __declspec(dllexport) __cdecl -#else -# define _LIBSNG_CALL __declspec(dllimport) __cdecl -#endif - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT (deprecated, use SANGOMA_WAIT_INFINITE instead) - \brief Infinite poll timeout value -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT INFINITE -#define SANGOMA_WAIT_INFINITE INFINITE - -/*! - \def sangoma_msleep(x) - \brief milisecond sleep function -*/ -#define sangoma_msleep(x) Sleep(x) - -/*! - \def sangoma_ctime(time_val) - \brief Convert a time value to a string - \param time_val pointer to 64-bit time value -*/ -#define sangoma_ctime(time) _ctime64(time) - -#else -/* L I N U X */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/*! - \def _LIBSNG_CALL - \brief Not used in Linux -*/ -#define _LIBSNG_CALL - -/*! - \def INVALID_HANDLE_VALUE - \brief Invalid file handle value -1, Ported from Windows -*/ -#define INVALID_HANDLE_VALUE -1 - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT (deprecated, use SANGOMA_WAIT_INFINITE instead) - \brief Infinite poll timeout value -1, Ported from Windows -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT -1 -#define SANGOMA_WAIT_INFINITE -1 - -/*! - \def __cdecl - \brief Ported from Windows - \typedef BOOL - \brief Boolean type int, Ported from Windows - \typedef DWORD - \brief DWORD type is int, Ported from Windows - \def FALSE - \brief FALSE value is 0, Ported from Windows - \def TRUE - \brief TRUE value is 1, Ported from Windows - \def sangoma_msleep(x) - \brief milisecond sleep function - \def _getch - \brief get character, Ported from Windows - \def Sleep - \brief milisecond sleep function - \typedef HANDLE - \brief file handle type int, Ported from Windows - \typedef TCHAR - \brief TCHAN type mapped to char, Ported from Windows - \typedef ULONG - \brief ULONG type mapped to unsigned long, Ported from Windows - \typedef UCHAR - \brief ULONG type mapped to unsigned char, Ported from Windows - \typedef USHORT - \brief USHORT type mapped to unsigned short, Ported from Windows - \typedef LPSTR - \brief LPSTR type mapped to unsigned char *, Ported from Windows - \typedef PUCHAR - \brief PUCHAR type mapped to unsigned char *, Ported from Windows - \typedef PVOID - \brief PVOID type mapped to void *, Ported from Windows - \typedef LPTHREAD_START_ROUTINE - \brief LPTHREAD_START_ROUTINE type mapped to unsigned char *, Ported from Windows - \def _stricmp - \brief _stricmp type mapped to _stricmp, Ported from Windows - \def _snprintf - \brief _snprintf type mapped to snprintf, Ported from Windows -*/ - -#define __cdecl - -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - -#define sangoma_msleep(x) usleep(x*1000) -#define _getch getchar -#define Sleep sangoma_msleep -#define _stricmp strcmp -#define _snprintf snprintf -#define _vsnprintf vsnprintf - -typedef int HANDLE; -typedef int BOOL; -typedef int DWORD; -typedef char TCHAR; -typedef unsigned char UCHAR; -typedef unsigned long ULONG; -typedef unsigned short USHORT; -typedef unsigned char * LPSTR; -typedef unsigned char * PUCHAR; -typedef void * PVOID; -typedef void * LPTHREAD_START_ROUTINE; -typedef pthread_mutex_t CRITICAL_SECTION; - -#define EnterCriticalSection(arg) pthread_mutex_lock(arg) -#define LeaveCriticalSection(arg) pthread_mutex_unlock(arg) -#define InitializeCriticalSection(arg) pthread_mutex_init(arg, NULL); - -typedef struct tm SYSTEMTIME; -typedef char * LPCTSTR; - -/*! - \def sangoma_ctime(time_val) - \brief Convert a time value to a string - \param time_val pointer to time value -*/ -#define sangoma_ctime(time) ctime((time_t*)time) - -#endif/* WIN32 */ - - -/*! - LIBSANGOMA_LIGHT can be used to enable only IO and EVENT - libsangoma functions. The DRIVER configuration/start/stop - functions are not compiled. - - LIBSANGOMA_LIGHT depends only on 3 header files. Instead - of all wanpipe header files needed for DRIVER management - - LIBSANGMOA_LIGHT is NOT enabled by default. -*/ - -#ifdef LIBSANGOMA_LIGHT -#include "wanpipe_api_iface.h" -#include "wanpipe_api_hdr.h" -#include "sdla_te1.h" -#include "wanpipe_events.h" -#include "wanpipe_api_deprecated.h" -#else -#include "wanpipe_api.h" -#endif - -#ifdef __LINUX__ -#include "wanpipe_kernel.h" -#endif - -/*! - * As of now this typedef maps exactly to SANG_STATUS_T, however that - * is a kernel type, ugly, ugly, uglyyyyy, we should have strictly - * minimum set of shared data structures between kernel and user - * many return codes specified in SANG_STATUS_T are kernel specific - * like FAILED_TO_LOCK_USER_MEMORY or INVALID_IRQL, the libsangoma - * user does not need that much information, and even if ever needs - * it we should provide simpler defaults - * \brief return status from sangoma APIs - */ -typedef int32_t sangoma_status_t; - -/*! - \def FNAME_LEN - \brief string length of a file name - \def FUNC_DBG(x) - \brief function debug print function - \def DBG_PRINT - \brief debug print function -*/ -#define FNAME_LEN 100 -#define LIBSNG_FUNC_DBG() if(0)printf("%s(): line:%d\n", __FUNCTION__, __LINE__) -#define LIBSNG_DBG_PRINT if(0)printf - -/*! - \typedef sangoma_api_hdr_t - \brief Backward comaptible define of wp_api_hdr_t -*/ -typedef wp_api_hdr_t sangoma_api_hdr_t; - -/*! - \enum _sangoma_wait_obj_type_t - \brief Wait object type definition - \typedef sangoma_wait_obj_type_t - \brief Wait object type definition -*/ -typedef enum _sangoma_wait_obj_type -{ - /*! \brief deprecated, use SANGOMA_GENERIC_WAIT_OBJ */ - UNKNOWN_WAIT_OBJ = 0, - /*! \brief Generic object that can be signaled but is not associated to any sangoma device */ - SANGOMA_GENERIC_WAIT_OBJ = 0, - /*! \brief Sangoma object associated to some device which cannot be signaled (cannot call sangoma_wait_obj_signal on it) */ - SANGOMA_DEVICE_WAIT_OBJ, - /*! \brief Sangoma object that is associated to a device AND can be signaled */ - SANGOMA_DEVICE_WAIT_OBJ_SIG, -} sangoma_wait_obj_type_t; - -#define DECODE_SANGOMA_WAIT_OBJECT_TYPE(type)\ - type == SANGOMA_GENERIC_WAIT_OBJ ? "SANGOMA_GENERIC_WAIT_OBJ" :\ - type == SANGOMA_DEVICE_WAIT_OBJ ? "SANGOMA_DEVICE_WAIT_OBJ" :\ - type == SANGOMA_DEVICE_WAIT_OBJ_SIG ? "SANGOMA_DEVICE_WAIT_OBJ_SIG" :\ - "Invalid Wait Object type!" - -/* - * Possible flags for sangoma waitable objects - * this definitions MUST match POLLIN, POLLOUT and POLLPRI - * SANG_WAIT_OBJ_IS_SIGNALED has no posix equivalent though - * Users are encouraged to use this flags instead of the system ones - */ -typedef enum _sangoma_wait_obj_flags { - SANG_WAIT_OBJ_HAS_INPUT = POLLIN, - SANG_WAIT_OBJ_HAS_OUTPUT = POLLOUT, - SANG_WAIT_OBJ_HAS_EVENTS = POLLPRI, - SANG_WAIT_OBJ_IS_SIGNALED = 0x400 /* matches GNU extension POLLMSG */ -} sangoma_wait_obj_flags_t; - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - -/*! - \fn sng_fd_t sangoma_open_api_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Restriced open, device will allowed to be open only once. -*/ -sng_fd_t _LIBSNG_CALL sangoma_open_api_span_chan(int span, int chan); - - -/*! - \fn sng_fd_t __sangoma_open_api_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _LIBSNG_CALL __sangoma_open_api_span_chan(int span, int chan); -#define __sangoma_open_tdmapi_span_chan __sangoma_open_api_span_chan - -/*! - \fn sng_fd_t sangoma_open_tdmapi_span(int span) - \brief Open a first available device on a Span - \param span span number starting from 1 to 255 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _LIBSNG_CALL sangoma_open_api_span(int span); - - -/*! - \def sangoma_create_socket_intr - \brief Backward compatible open span chan call -*/ - - - -/*! - \def LIBSANGOMA_TDMAPI_CTRL - \brief Global control device feature -*/ -#ifndef LIBSANGOMA_TDMAPI_CTRL -#define LIBSANGOMA_TDMAPI_CTRL 1 -#endif - -/*! - \fn sng_fd_t sangoma_open_api_ctrl(void) - \brief Open a Global Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t _LIBSNG_CALL sangoma_open_api_ctrl(void); - -/*! - \fn sng_fd_t sangoma_logger_open(void) - \brief Open a Global Logger Device - \return File Descriptor - negative=error 0 or greater = fd - - The global Logger device receives Logger Events for all devices - configured. -*/ -sng_fd_t _LIBSNG_CALL sangoma_logger_open(void); - -/*! - \fn sng_fd_t sangoma_open_driver_ctrl(int port_no) - \brief Open a Global Driver Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t _LIBSNG_CALL sangoma_open_driver_ctrl(int port_no); - - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void - -*/ -void _LIBSNG_CALL sangoma_close(sng_fd_t *fd); - - - -/*! - \fn int sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get device open count - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative or 0: error, greater than 1 : open count -*/ - -int _LIBSNG_CALL sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -/*! - \fn int sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) - \brief Write Data to device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be transmitted - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return transmit size, must be equal to datalen, anything else is error - - In case of error return code, one must check the header operation_status - variable to identify the reason of an error. Please refer to the error codes. -*/ - -int _LIBSNG_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, unsigned short datalen, int flag); - - -/*! - \fn int sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) - \brief Read Data from device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be received - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return received size, must be equal to datalen, anything else is error or busy - - In case of error return code, one must check the header operation_status - variable to identify the reason of error. Please refer to the error codes. -*/ -int _LIBSNG_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, int datalen, int flag); - - - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int32_t inflags, int32_t *outflags, int32_t timeout) - \brief Wait for a single waitable object - \param sangoma_wait_obj pointer to a wait object previously created with sangoma_wait_obj_create - \param timeout timeout in miliseconds in case of no event - \return SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured use sangoma_wait_obj_get_out_flags to check or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, uint32_t inflags, uint32_t *outflags, int32_t timeout); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], int32_t in_flags[], int32_t out_flags[] uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - \brief Wait for multiple sangoma waitable objects - \param sangoma_wait_objects pointer to array of wait objects previously created with sangoma_wait_obj_create - \param in_flags array of flags corresponding to the flags the user is interested on for each waitable object - \param out_flags array of flags corresponding to the flags that are ready in the waitable objects - \param number_of_sangoma_wait_objects size of the array of waitable objects and flags - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: SANG_STATUS_APIPOLL_TIMEOUT: timeout, SANG_STATUS_SUCCESS: event occured check in sangoma_wait_objects, any other return code is some error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_waitfor_many(sangoma_wait_obj_t *sangoma_wait_objects[], uint32_t in_flags[], uint32_t out_flags[], - uint32_t number_of_sangoma_wait_objects, int32_t system_wait_timeout); - -/*! - \fn sangoma_status_t sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type) - \brief Create a wait object that will be used with sangoma_waitfor_many() API - \param sangoma_wait_object pointer a single device object - \param fd device file descriptor - \param object_type type of the wait object. see sangoma_wait_obj_type_t for types - \see sangoma_wait_obj_type_t - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type); - -/*! - \fn sangoma_status_t sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object) - \brief De-allocate all resources inside a wait object which were allocated by sangoma_wait_obj_init(). - \param sangoma_wait_object pointer to a pointer to a single device object - \return SANG_STATUS_SUCCESS on success or some sangoma status error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object); - -/*! - \fn void sangoma_wait_obj_signal(sangoma_wait_obj_t *sangoma_wait_object) - \brief Set wait object to a signaled state - \param sangoma_wait_object pointer a single device object that can be signaled - \return sangoma_status_t -*/ -sangoma_status_t _LIBSNG_CALL sangoma_wait_obj_signal(sangoma_wait_obj_t *sangoma_wait_object); - -/*! - \fn sng_fd_t sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sangoma_wait_object) - \brief Get fd device file descriptor which was the 'fd' parameter for sangoma_wait_obj_create(), not useful for generic objects - \param sangoma_wait_object pointer a single device object - \return sng_fd_t - device file descriptor -*/ -sng_fd_t _LIBSNG_CALL sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sangoma_wait_object); - -/*! - \fn void sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Store the given context into provided sangoma wait object. - \brief This function is useful to associate a context with a sangoma wait object. - \param sangoma_wait_object pointer a single device object - \param context void pointer to user context - \return void -*/ -void _LIBSNG_CALL sangoma_wait_obj_set_context(sangoma_wait_obj_t *sangoma_wait_object, void *context); - -/*! - \fn PVOID sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object) - \brief Retrieve the user context (if any) that was set via sangoma_wait_obj_set_context. - \brief Windows note: must use return type PVOID instead of void* to satisfy WDK compiler. - \param sangoma_wait_object pointer a single device object - \return void* -*/ -PVOID _LIBSNG_CALL sangoma_wait_obj_get_context(sangoma_wait_obj_t *sangoma_wait_object); - - -/************************************************************//** - * Device API COMMAND Functions - ***************************************************************/ - -/*! - \fn int sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Execute Sangoma API Command - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Read tdm api device configuration - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) - \brief Set Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \param period value in miliseconds (1,2,5,10) - \return non-zero: error, 0: ok - - Only valid in CHAN Operation Mode -*/ -int _LIBSNG_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period); - -/*! - \fn int sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured period value -*/ -int _LIBSNG_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx/Rx MTU/MRU in bytes - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured mtu/mru in bytes -*/ -int _LIBSNG_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush all (tx/rx/event) buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _LIBSNG_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_flush_rx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only rx buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _LIBSNG_CALL sangoma_flush_rx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); -/*! - \fn int sangoma_flush_tx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only tx buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _LIBSNG_CALL sangoma_flush_tx_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_flush_event_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush only event buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _LIBSNG_CALL sangoma_flush_event_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) - \brief Enable RBS Events on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param poll_in_sec driver poll period for rbs events - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec); - -/*! - \fn int sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RBS Events for a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs) - \brief Write RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel t1/e1 timeslot - \param rbs rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs); - -/*! - \fn int sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs) - \brief Read RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel t1/e1 timeslot - \param rbs pointer to rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ - -int _LIBSNG_CALL sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs); - -/*! - \fn int sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef WP_API_FEATURE_FAX_EVENTS -/*! - \fn int sangoma_tdm_enable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable FAX Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_enable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable FAX Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_disable_fax_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_hw_fax(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get HW FAX Detection State (Enable or Disabled) on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: Disabled, 1: Enabled - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_get_hw_fax(sng_fd_t fd, wanpipe_api_t *tdm_api); - -#endif - - -/*! - \fn int sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) - \brief Transmit a TONE on this device (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param tone_id tone type to transmit - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id); - -/*! - \fn int sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable TONE Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG ON HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG OFF HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG KEWL START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _LIBSNG_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int _LIBSNG_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms); - \brief Get Front End Alarms (T1/E1 Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param alarms bit map status of T1/E1 alarms - \return non-zero: error, 0: ok - - Supported only on T1/E1 Cards -*/ -int _LIBSNG_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms); - - - -#ifdef WP_API_FEATURE_LINK_STATUS -# ifndef LIBSANGOMA_GET_LINKSTATUS -/*! - \def LIBSANGOMA_GET_LINKSTATUS - \brief Get Link Status feature -*/ -# define LIBSANGOMA_GET_LINKSTATUS 1 -# endif - -/*! - \fn int sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - -*/ -int _LIBSNG_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status); - -#endif - -/* set current Line Connection state - Connected/Disconnected */ -#ifndef LIBSANGOMA_GET_FESTATUS -/*! - \def LIBSANGOMA_GET_FESTATUS - \brief Get Front End Status feature -*/ -#define LIBSANGOMA_GET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) - \brief Set Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param new_status new status 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status); - - -/*! - \fn int _LIBSNG_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) - \brief Enable BRI Bchannel loopback - used when debugging bri device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel bri bchannel 1 or 2 - \return non-zero: error, 0: ok - -*/ -int _LIBSNG_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel); - -/*! - \fn int _LIBSNG_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) - \brief Disable BRI Bchannel loopback - used when debugging bri device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param channel bri bchannel 1 or 2 - \return non-zero: error, 0: ok - -*/ -int _LIBSNG_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel); - - -/*! - \fn int sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn int sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \param size tx queue size (minimum value of 1) - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size); - -/*! - \fn int sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Rx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) - \brief Get Tx Queue Size for this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \param size rx queue size (minimum value of 1) - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size); - - -#ifndef LIBSANGOMA_GET_HWCODING -/*! - \def LIBSANGOMA_GET_HWCODING - \brief Get HW Coding Feature -*/ -#define LIBSANGOMA_GET_HWCODING 1 -#endif - -/*! - \fn int sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get HW Voice Coding (ulaw/alaw) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will return the low level voice coding - depending on configuration. (ulaw or alaw) -*/ -int _LIBSNG_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api); - - - -#ifndef LIBSANGOMA_GET_HWDTMF -/*! - \def LIBSANGOMA_GET_HWDTMF - \brief HW DTMF Feature -*/ -#define LIBSANGOMA_GET_HWDTMF 1 -#endif -/*! - \fn int sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if hwdtmf support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW DTMF. -*/ -int _LIBSNG_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Check if hw echo cancelation support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW EC. -*/ -int _LIBSNG_CALL sangoma_tdm_get_hw_ec(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_span_chan_toif(int span, int chan, char *interface_name) - \brief Convert Span & Chan to interface name - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \param interface_name pointer to string where interface name will be written - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name); - -/*! - \fn int sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) - \brief Convert Interace Name to Span & Chan - \param interface_name pointer to string containing interface name - \param span integer pointer where to write span value - \param chan integer pointer where to write chan value - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_interface_wait_up(int span, int chan, int sectimeout) - \brief Wait for a sangoma device to come up (ie: Linux wait for /dev/wanpipex_1 to come up) - \param span span number of the device to wait - \param chan chan number of the device to wait - \param sectimeout how many seconds to wait for the device to come up, -1 to wait forever - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_interface_wait_up(int span, int chan, int sectimeout); - -/*! - \fn int sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver) - \brief Get Device Driver Version Number - \param fd device file descriptor - \param tdm_api tdm api command structure - \param drv_ver driver version structure that will contain the driver version - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver); - -/*! - \fn int sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) - \brief Get Hardware/Firmware Version - \param fd device file descriptor - \param tdm_api tdm api command structure - \param ver hardware/firmware version number - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver); - -/*! - \fn int sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) - \brief Get Hardare/CPLD Version - \param fd device file descriptor - \param tdm_api tdm api command structure - \param ver hardware/cpld version number - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver); - - -/*! - \fn int sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats) - \brief Get Device Statistics. Statistics will be available in tdm_api->wp_cmd.stats structure. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param stats stats structure will be filled with device stats. (Optional, can be left NULL) - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats); - -/*! - \fn int _LIBSNG_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Flush/Reset device statistics - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime) - \brief Set rxflashtime for FXS module Wink-Flash Event - \param fd device file descriptor - \param tdm_api tdm api command structure - \param rxflashtime time value - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime); - -#ifdef WP_API_FEATURE_RM_GAIN -/*! - \fn int sangoma_set_rm_tx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) - \brief set tx gain for FXO/FXS module - \param fd device file descriptor - \param tdm_api tdm api command structure - \param value txgain (FXO - txgain value ranges from -150 to 120 , FXS - txgain value 35,-35) - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_set_rm_tx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value); - - -/*! - \fn int sangoma_set_rm_rx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) - \brief set rx gain for FXO/FXS module - \param fd device file descriptor - \param tdm_api tdm api command structure - \param value rxgain (FXO - rxgain value ranges from -150 to 120 , FXS -rxgain value 35,-35) - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_set_rm_rx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, int value); - -#endif /* WP RM GAIN feature */ - -/*! - \fn int sangoma_set_polarity(sng_fd_t fd, wanpipe_api_t *tdm_api, int value) - \brief set polarity on FXS (Analog only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param value 0 fwd, 1 rev - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_tdm_set_polarity(sng_fd_t fd, wanpipe_api_t *tdm_api, int polarity); - -/*! - \fn int sangoma_tdm_txsig_onhooktranfer(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Tranmsmit TX SIG ON HOOK Tranfer (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _LIBSNG_CALL sangoma_tdm_txsig_onhooktransfer(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef WP_API_FEATURE_LOOP -/*! - \fn int sangoma_tdm_enable_loop(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Enable channel loop: All rx data will be transmitted back out. - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_tdm_enable_loop(sng_fd_t fd, wanpipe_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_loop(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Disable channel loop - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero = error, 0 = ok -*/ -int _LIBSNG_CALL sangoma_tdm_disable_loop(sng_fd_t fd, wanpipe_api_t *tdm_api); -#endif - -/************************************************************//** - * Device EVENT Function - ***************************************************************/ - - -/*! - \fn int sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Read API Events - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - The TDM API structure will be populated with a TDM API or WAN Event. - This function usually used after wait() function indicated that event - has occured. -*/ -int _LIBSNG_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api); - -#ifdef WP_API_FEATURE_LOGGER - -sangoma_status_t _LIBSNG_CALL sangoma_logger_cmd_exec(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_read_event(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Read Wanpipe Logger Events - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error - - The Logger API structure will be populated with a Logger Event. - This function usually used after wait() function indicated that - an event has occured. -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_read_event(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_flush_buffers(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Flush Wanpipe Logger internal buffers - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_flush_buffers(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get Wanpipe Logger statistics - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_get_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_reset_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Reset Wanpipe Logger statistics - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_reset_statistics(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_open_handle_counter(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get Counter of open Handles/File Descriptors of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_get_open_handle_counter(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_get_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Get current level (types of events) of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_get_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -/*! - \fn sangoma_status_t sangoma_logger_set_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd) - \brief Set current level (types of events) of Wanpipe Logger - \param fd device file descriptor - \param logger_cmd Logger API command structure - \return SANG_STATUS_SUCCESS: ok, else: error -*/ -sangoma_status_t _LIBSNG_CALL sangoma_logger_set_logger_level(sng_fd_t fd, wp_logger_cmd_t *logger_cmd); - -#endif /* WP LOGGER FEATURE */ - -#ifndef LIBSANGOMA_LIGHT - -/************************************************************//** - * Device PORT Control Functions - ***************************************************************/ - -/*! - \fn int sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Start a Port, create Sangoma Communication interfaces. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to a port_management_struct_t structure. - On return, sangoma_driver_port_start() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _LIBSNG_CALL sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Start a Port, create Sangoma Communication interfaces. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to a port_management_struct_t structure. - On return, sangoma_driver_port_stop() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _LIBSNG_CALL sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) - \brief Set Port's "Volatile" configuration. The configuration will not persist between system restarts. - Before calling this function please stop the port by calling sangoma_driver_port_stop(). - After calling this function please start the port by calling sangoma_driver_port_start(). - \param[in] fd Port Device file descriptor - \param[in, out] port_cfg pointer to port_cfg_t structure that specifies complete Port configuration. - On return, sangoma_driver_port_set_config() updates operation_status field - of this structure. - \param[in] port_no 1-based Port Number. Port numbers correspond to Port Names. - For example, a 2-Port card will have ports named WANPIPE1 and WANPIPE2. - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_cfg->operation_status. -*/ -int _LIBSNG_CALL sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no); - - -/*! - \fn int sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) - \brief Retrieve Port's "Volatile" configuration. - \param[in] fd Port Device file descriptor - \param[out] port_cfg pointer to port_cfg_t structure. - On return, sangoma_driver_port_get_config() will copy current Port configuration - into this structure. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_cfg->operation_status. -*/ -int _LIBSNG_CALL sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no); - - -/*! - \fn int sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) - \brief Retrieve information about a single instance of Sangoma hardware. - \param[in] fd Port Device file descriptor - \param[out] port_mgmnt pointer to port_management_struct_t structure which will contain hardware_info_t at - it's "data" field, when this function returns. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: system error. Call OS specific code to find cause of the error. - Linux example: strerror(errno) - Windows example: combination of GetLastError()/FormatMessage() - zero: no system error. Check port_mgmt->operation_status. -*/ -int _LIBSNG_CALL sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no); - - -/*! - \fn int sangoma_write_port_config_on_persistent_storage(hardware_info_t *hardware_info, port_cfg_t *port_cfg) - \brief Write Port's configuration on the hard disk. - Linux Specific: the "Persistent" configuration of a Port N (e.g. WANPIPE1) is stored in - /etc/wanpipe/wanpipeN.conf (e.g. wanpipe1.conf). - Configuration can be manualy viewed/changed by editing the ".conf" file. - Currently this functionality is not implemented. - Windows Specific: the "Persistent" configuration of a Port (e.g. WANPIPE1) is stored in - Windows Registry. - Configuration can be manualy viewed/changed in the Device Manager. - \param[in] hardware_info pointer to hardware_info_t structure containing information about a - single instance of Sangoma hardware. - \param[in] port_cfg pointer to structure containing complete Port configuration. - \param[in] port_no please see comment of sangoma_driver_port_set_config() - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_write_port_config_on_persistent_storage(hardware_info_t *hardware_info, port_cfg_t *port_cfg, unsigned short port_no); - - -/************************************************************//** - * Device MANAGEMENT Functions - ***************************************************************/ - -/*! - \fn int sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) - \brief Execute Sangoma Management Command - \param fd device file descriptor - \param wan_udp management command structure - \return non-zero: error, 0: ok -*/ -int _LIBSNG_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp); - - -#endif /* LIBSANGOMA_LIGHT */ - - -/*================================================================ - * DEPRECATED Function Calls - Not to be used any more - * Here for backward compatibility - *================================================================*/ - - -#ifndef LIBSANGOMA_SET_FESTATUS -/*! - \def LIBSANGOMA_SET_FESTATUS - \brief Set Front End Status Feature -*/ -#define LIBSANGOMA_SET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - - Deprecated - replaced by sangoma_tdm_get_link_status function -*/ -int _LIBSNG_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status); - - - -/*! - \fn int sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) - \brief Set TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \param codec codec to set (ulaw/alaw/slinear) - \return non-zero: error, 0: ok - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _LIBSNG_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec); - -/*! - \fn int sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Configured TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured codec value - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _LIBSNG_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -/*! - \fn sng_fd_t sangoma_create_socket_by_name(char *device, char *card) - \brief Open a device based on a interface and card name - \param device interface name - \param card card name - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Deprecated - here for backward compatibility -*/ -sng_fd_t _LIBSNG_CALL sangoma_create_socket_by_name(char *device, char *card); - -/*! - \fn int sangoma_interface_toi(char *interface_name, int *span, int *chan) - \brief Convert Span & Chan to interface name - \param interface_name pointer to string where interface name will be written - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return non-zero = error, 0 = ok - Deprecated - here for backward compatibility -*/ -int _LIBSNG_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) - \brief Set Power Level - so only data matching the power level would be passed up. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param power value of power - \return non-zero: error, 0: ok - - Deprecated - not used/implemented -*/ -int _LIBSNG_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power); - -/*! - \fn int sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) - \brief Get Configured Power Level - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured power level - - Deprecated - not used/implemented -*/ -int _LIBSNG_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api); - - -#ifdef WP_API_FEATURE_LIBSNG_HWEC -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_init(char *device_name) - - \brief Load Firmware image onto EC chip. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_init(char *device_name); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_release(char *device_name) - - \brief Reset internal state of HWEC API. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_release(char *device_name); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_operation_mode(char *device_name, int mode, unsigned int fe_chan_map) - - \brief Modify channel operation mode. - - \param mode One of WANEC_API_OPMODE_? values defined in wanpipe_api_iface.h: - WANEC_API_OPMODE_NORMAL, - WANEC_API_OPMODE_HT_FREEZE, - WANEC_API_OPMODE_HT_RESET, - WANEC_API_OPMODE_POWER_DOWN, - WANEC_API_OPMODE_NO_ECHO, - WANEC_API_OPMODE_SPEECH_RECOGNITION. - - \param fe_chan_map Bitmap of channels (timeslots for Digital, - lines for Analog) where the call will take effect. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_operation_mode(char *device_name, int mode, unsigned int fe_chan_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_power_on (char *device_name, unsigned int fe_chan_map) - - \brief Set the channel state in the echo canceller to NORMAL/POWER ON. - This enables echo cancelation logic inside the chip. - The action is internal to EC chip itself, not related to AFT FPGA. - This call is slow and should be used only on startup. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \param fe_chan_map Bitmap of channels (timeslots for Digital, - lines for Analog) where the call will take effect. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_power_on(char *device_name, unsigned int fe_chan_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_power_off (char *device_name, unsigned int fe_chan_map) - - \brief Set the channel state in the echo canceller to POWER OFF. - This disables echo cancellatio logic inside the chip and - data passes unmodified through the ec chip. - The action is internal to EC chip itself, not related - to AFT FPGA. This call is slow and should be used only on startup. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \param fe_chan_map Bitmap of channels (timeslots for Digital, - lines for Analog) where the call will take effect. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_power_off(char *device_name, unsigned int fe_chan_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_enable(char *device_name, unsigned int fe_chan_map) - - \brief Redirect audio stream from AFT FPGA to EC chip. - This command effectively enables echo cancellation since - data is now forced through the EC chip by the FPGA. - Data will be modified by the echo canceller. - This command is recommened for fast enabling of Echo Cancellation. - Note 1: Chip must be configured and in POWER ON state for echo - Chancellation to take place. - Note 2: sangoma_tdm_enable_hwec() function can be use to achive - the same funcitnality based on file descriptor versus - channel map. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \param fe_chan_map Bitmap of channels (timeslots for Digital, lines for Analog) where - the call will take effect. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_enable(char *device_name, unsigned int fe_chan_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_disable(char *device_name, unsigned int fe_chan_map) - - \brief Force AFT FPGA to bypass the echo canceller. - This command effectively disables echo cancellation since - data will not flowing through the ec chip. - Data will not be modified by the echo canceller. - This command is recommened for fast disabling of Echo Cancelation. - Note: sangoma_tdm_disable_hwec() function can be use to achive - the same functionality based on file descriptor versus - channel map. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \param fe_chan_map Bitmap of channels (timeslots for Digital, lines for Analog) where - the call will take effect. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_disable(char *device_name, unsigned int fe_chan_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_channel_parameters(char *device_name, char *parameter, char *parameter_value, unsigned int channel_map) - - \brief Modify channel configuration parameters. - This is list of Echo Cancellation channel parameters: - - Channel parameter Channel parameter value - ================= ======================= - WANEC_EnableNlp TRUE | FALSE - WANEC_EnableTailDisplacement TRUE | FALSE - WANEC_TailDisplacement 0-896 - WANEC_SoutLevelControl TRUE | FALSE - WANEC_RinAutomaticLevelControl TRUE | FALSE - WANEC_SoutAutomaticLevelControl TRUE | FALSE - WANEC_SoutAdaptiveNoiseReduction TRUE | FALSE - WANEC_RoutNoiseReduction TRUE | FALSE - WANEC_ComfortNoiseMode COMFORT_NOISE_NORMAL - COMFORT_NOISE_FAST_LATCH - COMFORT_NOISE_EXTENDED - COMFORT_NOISE_OFF - WANEC_DtmfToneRemoval TRUE | FALSE - WANEC_AcousticEcho TRUE | FALSE - WANEC_NonLinearityBehaviorA 0-13 - WANEC_NonLinearityBehaviorB 0-8 - WANEC_DoubleTalkBehavior DT_BEH_NORMAL - DT_BEH_LESS_AGGRESSIVE - - \param fe_chan_map Bitmap of channels (timeslots for Digital, lines for Analog) where - the call will take effect. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_channel_parameters(char *device_name, char *parameter, char *parameter_value, unsigned int channel_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_tone_detection(char *device_name, int tone_id, int enable, unsigned int fe_chan_map, unsigned char port_map) - - \brief Enable/Disable tone detection (such as DTMF) of channels from channel map. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \param tone_id See wanpipe_api_iface.h for list of valid tones - - \param enable A flag, if 1 - the specified tone will be detected, - if 0 - specified tone will not be detected. - - \param fe_chan_map Bitmap of channels (timeslots for Digital, lines for Analog) where - the call will take effect. - - \param port_map Port\Direction of tone detection - Rx, Tx. See wanpipe_events.h for - list of valid ports (WAN_EC_CHANNEL_PORT_SOUT...). - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_tone_detection(char *device_name, int tone_id, int enable, unsigned int fe_chan_map, unsigned char port_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_print_statistics(char *device_name, int full, unsigned int fe_chan_map) - - \brief Read and print Chip/Channel statistics from EC chip. - - \param device_name Sangoma API device name. - Windows: wanpipe1_if1, wanpipe2_if1... - Linux: wanpipe1, wanpipe2... - - \param full Flag to read full statistics, if set to 1. - - \param fe_chan_map Bitmap of channels (timeslots for Digital, lines for Analog) where - the call will read statistics. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_print_statistics(char *device_name, int full, unsigned int fe_chan_map); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_audio_buffer_load(char *device_name, char *filename, char pcmlaw, int *out_buffer_id) - - \brief Load audio buffer to EC chip. The buffer can be played out using the sangoma_hwec_audio_buffer_playout() function. - - \param filename name of the audio file (without the extension). - Actual file must have .pcm extension. - Location: - Windows: %SystemRoot%\sang_ec_files (ex: c:\WINDOWS\sang_ec_files) - Linux: /etc/wanpipe/buffers - - \param out_buffer_id when the buffer is loaded on the chip, it is assigned an ID. This ID should - be used when requesting to play out the buffer. - - \return SANG_STATUS_SUCCESS: success, or error status - - */ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_audio_buffer_load(char *device_name, char *filename, char pcmlaw, int *out_buffer_id); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_audio_bufferunload(char *device_name, int in_buffer_id) - - \brief Unload/remove an audio buffer from the HWEC chip. - - \param device_name Sangoma wanpipe device name. (ex: wanpipe1 - Linux; wanpipe1_if1 - Windows). - - \param in_buffer_id ID of the buffer which will be unloaded. The ID must be initialized by sangoma_hwec_audio_bufferload(). - - \return SANG_STATUS_SUCCESS - buffer was successfully unloaded/removed, SANG_STATUS_GENERAL_ERROR - error occured -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_audio_buffer_unload(char *device_name, int in_buffer_id); - -/*! - \fn sangoma_status_t _LIBSNG_CALL sangoma_hwec_audio_buffer_playout(char *device_name, unsigned int fe_chan_map, - unsigned char port_map, int buffer_id, int start, int repeat_cnt, int duration) - - \brief Start\Stop playing out an audio buffer previously loaded by sangoma_hwec_audio_buffer_load(). - - \param fe_chan_map Bitmap of channels (timeslots for Digital, - lines for Analog) where the call will take effect. - - \param port_map Port\Direction where the buffer will be played out. - This is the channel port on which the buffer will be - played (WAN_EC_CHANNEL_PORT_SOUT or WAN_EC_CHANNEL_PORT_ROUT) - - \param in_buffer_id ID of the buffer which will be unloaded. The ID must be initialized by sangoma_hwec_audio_bufferload(). - - \param start If 1 - start the play out, 0 - stop the play out - - \param repeat_cnt Number of times to play out the same buffer - - \param duration Maximum duration of the playout, in milliseconds. If it takes less then 'duration' to - play out the whole buffer this paramter is ignored. - - \return SANG_STATUS_SUCCESS: success, or error status -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_audio_buffer_playout(char *device_name, unsigned int fe_chan_map, - unsigned char port, int in_buffer_id, int start, - int repeat_cnt, int duration); - -/*! - \fn void _LIBSNG_CALL sangoma_hwec_config_verbosity(int verbosity_level) - - \brief Set Verbosity level of EC API. The level controls amount of data - printed to stdout and wanpipelog.txt for diagnostic purposes. - - \param verbosity_level Valid values are from 0 to 3. - - \return SANG_STATUS_SUCCESS: success - the level was changed to 'verbosity_level', - SANG_STATUS_INVALID_PARAMETER: error - the level was not changed because new level is invalid -*/ -sangoma_status_t _LIBSNG_CALL sangoma_hwec_config_verbosity(int verbosity_level); - -#endif /* WP_API_FEATURE_LIBSNG_HWEC */ - - -#ifdef __cplusplus -} -#endif/* __WINDOWS__ */ - - -#if defined(__WINDOWS__) -/*! Windows specific API */ -#ifdef __cplusplus -extern "C" { /* for C++ users */ -#endif - -sangoma_status_t _LIBSNG_CALL sangoma_unload_driver(); -sangoma_status_t _LIBSNG_CALL sangoma_load_driver(); -void _LIBSNG_CALL sangoma_reset_port_numbers(); -sangoma_status_t _LIBSNG_CALL sangoma_get_driver_version_from_registry(char *out_buffer, int out_buffer_length); -sangoma_status_t _LIBSNG_CALL sangoma_set_driver_mode_of_all_hw_devices(int driver_mode); - -#ifdef __cplusplus -} -#endif/* __WINDOWS__ */ - -#else -/*! Backward compabile defines */ -#define sangoma_open_tdmapi_span_chan sangoma_open_api_span_chan -#define sangoma_open_tdmapi_span sangoma_open_api_span -#define sangoma_open_tdmapi_ctrl sangoma_open_api_ctrl -#define sangoma_tdm_get_fe_status sangoma_get_fe_status -#define sangoma_socket_close sangoma_close -#define sangoma_tdm_get_hw_coding sangoma_get_hw_coding -#define sangoma_tdm_set_fe_status sangoma_set_fe_status -#define sangoma_tdm_get_link_status sangoma_get_link_status -#define sangoma_tdm_flush_bufs sangoma_flush_bufs -#define sangoma_tdm_cmd_exec sangoma_cmd_exec -#define sangoma_tdm_read_event sangoma_read_event -#define sangoma_readmsg_tdm sangoma_readmsg -#define sangoma_readmsg_socket sangoma_readmsg -#define sangoma_sendmsg_socket sangoma_writemsg -#define sangoma_writemsg_tdm sangoma_writemsg -#define sangoma_create_socket_intr sangoma_open_api_span_chan -#endif - -#endif /* _LIBSNAGOMA_H */ - diff --git a/api/libsangoma/.svn/tmp/tempfile.3.tmp b/api/libsangoma/.svn/tmp/tempfile.3.tmp deleted file mode 100644 index 55f7a23..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.3.tmp +++ /dev/null @@ -1,1254 +0,0 @@ -/***************************************************************************** - * libsangoma.c AFT T1/E1: HDLC API Code Library - * - * Author(s): Anthony Minessale II - * Nenad Corbic - * David Rokhvarg - * Michael Jerris - * - * Copyright: (c) 2005 Anthony Minessale II - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * ============================================================================ - * - * Aug 15, 2006 David Rokhvarg Ported to MS Windows 2000/XP - * Sep 24, 2006 Michael Jerris Windows port, standardize api, cleanup - * - */ - -#include "libsangoma.h" -#define DFT_CARD "wanpipe1" - -#ifndef WP_TDM_FEATURE_FE_ALARM -#warning "Warning: TDM FE ALARM not supported by driver" -#endif - -#ifndef WP_TDM_FEATURE_DTMF_EVENTS -#warning "Warning: TDM DTMF not supported by driver" -#endif - -#ifndef WP_TDM_FEATURE_EVENTS -#warning "Warning: TDM EVENTS not supported by driver" -#endif - -#ifndef WP_TDM_FEATURE_LINK_STATUS -#warning "Warning: TDM LINK STATUS not supported by driver" -#endif - - -#if defined(WIN32) -//extern int verbose; - -#define DEV_NAME_LEN 100 -char device_name[DEV_NAME_LEN]; - -/* IOCTL management structures and variables*/ -wan_udp_hdr_t wan_udp; - -#include "win_api_common.h" - -static wan_cmd_api_t api_cmd; -static api_tx_hdr_t *tx_hdr = (api_tx_hdr_t *)api_cmd.data; - -/* keeps the LAST (and single) event received */ -static wp_tdm_api_rx_hdr_t last_tdm_api_event_buffer; - -#endif /* WIN32 */ - -void sangoma_socket_close(sng_fd_t *sp) -{ -#if defined(WIN32) - if( *sp != INVALID_HANDLE_VALUE){ - CloseHandle(*sp); - *sp = INVALID_HANDLE_VALUE; - } -#else - if (*sp > -1) { - close(*sp); - *sp = -1; - } -#endif -} - -int sangoma_socket_waitfor(sng_fd_t fd, int timeout, int flags) -{ -#if defined(WIN32) - API_POLL_STRUCT api_poll; - - memset(&api_poll, 0x00, sizeof(API_POLL_STRUCT)); - - api_poll.user_flags_bitmap = flags; - - if(DoApiPollCommand(fd, &api_poll)){ - //failed - return 0; - } - - switch(api_poll.operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: - break; - - default: - prn(1, "Error: sangoma_socket_waitfor(): Unknown Operation Status: %d\n", - api_poll.operation_status); - return 0; - }//switch() - - if(api_poll.poll_events_bitmap == 0){ - prn(1, "Error: invalid Poll Events bitmap: 0x%X\n", - api_poll.poll_events_bitmap); - } - return api_poll.poll_events_bitmap; -#else - struct pollfd pfds[1]; - int res; - - memset(&pfds[0], 0, sizeof(pfds[0])); - pfds[0].fd = fd; - pfds[0].events = flags; - res = poll(pfds, 1, timeout); - if (res > 0) { - if ((pfds[0].revents & POLLERR)) { - res = -1; - } else if((pfds[0].revents)) { - res = 1; - } - } - - return res; -#endif -} - - -int sangoma_span_chan_toif(int span, int chan, char *interface_name) -{ - sprintf(interface_name,"s%ic%i",span,chan); - return 0; -} - -int sangoma_interface_toi(char *interface_name, int *span, int *chan) -{ - char *p=NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'g') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 'w') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -int sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) -{ - char *p = NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'c') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 's') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -sng_fd_t sangoma_open_tdmapi_span_chan(int span, int chan) -{ - char fname[FNAME_LEN]; -#if defined(WIN32) - - //NOTE: under Windows Interfaces are zero based but 'chan' is 1 based. - // Subtract 1 from 'chan'. - _snprintf(fname , FNAME_LEN, "\\\\.\\WANPIPE%d_IF%d", span, chan - 1); - - //prn(verbose, "Opening device: %s...\n", fname); - - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - int fd=-1; - - sprintf(fname,"/dev/wptdm_s%dc%d",span,chan); - - fd = open(fname, O_RDWR); - - return fd; -#endif -} - - -sng_fd_t sangoma_open_tdmapi_ctrl(void) -{ - int fd=-1; - - fd = open("/dev/wptdm_ctrl", O_RDWR); - - return fd; -} - -sng_fd_t sangoma_create_socket_by_name(char *device, char *card) -{ - int span,chan; - sangoma_interface_toi(device,&span,&chan); - - return sangoma_open_tdmapi_span_chan(span,chan); -} - - -sng_fd_t sangoma_open_tdmapi_span(int span) -{ - int i=0; -#if defined(WIN32) - sng_fd_t fd = INVALID_HANDLE_VALUE; - - for(i = 1; i < 32; i++){ - if((fd = sangoma_open_tdmapi_span_chan(span, i)) == INVALID_HANDLE_VALUE){ - //prn(verbose, "Span: %d, chan: %d: is not running, consider 'busy'\n", - // span, i); - continue; - } - - //get the open handle counter - wan_udp.wan_udphdr_command = GET_OPEN_HANDLES_COUNTER; - wan_udp.wan_udphdr_data_len = 0; - - DoManagementCommand(fd, &wan_udp); - if(wan_udp.wan_udphdr_return_code){ - prn(1, "Error: command GET_OPEN_HANDLES_COUNTER failed! Span: %d, chan: %d\n", - span, i); - //don't forget to close!! otherwize counter will stay incremented. - sangoma_socket_close(&fd); - continue; - } - - //prn(verbose, "open handles counter: %d\n", *(int*)&wan_udp.wan_udphdr_data[0]); - if(*(int*)&wan_udp.wan_udphdr_data[0] == 1){ - //this is the only process using this chan/span, so it is 'free' - //prn(verbose, "Found 'free' Span: %d, chan: %d\n",span, i); - break; - } - //don't forget to close!! otherwize counter will stay incremented. - sangoma_socket_close(&fd); - }//for() - -#else - char fname[FNAME_LEN]; - int fd=0; - for (i=1;i<32;i++){ - sprintf(fname,"/dev/wptdm_s%dc%d",span,i); - fd = open(fname, O_RDWR); - if (fd < 0){ - continue; - } - break; - } -#endif - return fd; -} - -int sangoma_readmsg_tdm(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) -{ - int rx_len=0; - -#if defined(WIN32) - static RX_DATA_STRUCT rx_data; - api_header_t *pri; - wp_tdm_api_rx_hdr_t *tdm_api_rx_hdr; - wp_tdm_api_rx_hdr_t *user_buf = (wp_tdm_api_rx_hdr_t*)hdrbuf; - - if(hdrlen != sizeof(wp_tdm_api_rx_hdr_t)){ - //error - prn(1, "Error: sangoma_readmsg_tdm(): invalid size of user's 'header buffer'.\ -Should be 'sizeof(wp_tdm_api_rx_hdr_t)'.\n"); - return -1; - } - - if(DoReadCommand(fd, &rx_data) ){ - //error - prn(1, "Error: DoReadCommand() failed! Check messages log.\n"); - return -1; - } - - //use our special buffer at rxdata to hold received data - pri = &rx_data.api_header; - tdm_api_rx_hdr = (wp_tdm_api_rx_hdr_t*)rx_data.data; - - user_buf->wp_tdm_api_event_type = pri->operation_status; - - switch(pri->operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: - //prn(verbose, "SANG_STATUS_RX_DATA_AVAILABLE\n"); - - if(pri->data_length > datalen){ - rx_len=0; - break; - } - memcpy(databuf, rx_data.data, pri->data_length); - rx_len = pri->data_length; - break; - - case SANG_STATUS_TDM_EVENT_AVAILABLE: - //prn(verbose, "SANG_STATUS_TDM_EVENT_AVAILABLE\n"); - - //make event is accessable for the caller directly: - memcpy(databuf, rx_data.data, pri->data_length); - rx_len = pri->data_length; - - //make copy for use with sangoma_tdm_read_event() - indirect access. - memcpy( &last_tdm_api_event_buffer, tdm_api_rx_hdr, sizeof(wp_tdm_api_rx_hdr_t)); - break; - - default: - switch(pri->operation_status) - { - case SANG_STATUS_RX_DATA_TIMEOUT: - //no data in READ_CMD_TIMEOUT, try again. - prn(1, "Error: Timeout on read.\n"); - break; - - case SANG_STATUS_BUFFER_TOO_SMALL: - //Recieved data longer than the pre-configured maximum. - //Maximum length is set in 'Interface Properties', - //in the 'Device Manager'. - prn(1, "Error: Received data longer than buffer passed to API.\n"); - break; - - case SANG_STATUS_LINE_DISCONNECTED: - //Front end monitoring is enabled and Line is - //in disconnected state. - //Check the T1/E1 line is in "Connected" state, - //alse check the Alarms and the message log. - prn(1, "Error: Line disconnected.\n"); - break; - - default: - prn(1, "Rx:Unknown Operation Status: %d\n", pri->operation_status); - break; - }//switch() - return 0; - }//switch() - -#else - struct msghdr msg; - struct iovec iov[2]; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - rx_len = read(fd,&msg,datalen+hdrlen); - - if (rx_len <= sizeof(wp_tdm_api_rx_hdr_t)){ - return -EINVAL; - } - - rx_len-=sizeof(wp_tdm_api_rx_hdr_t); -#endif - return rx_len; -} - -int sangoma_writemsg_tdm(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) -{ - int bsent; - -#if defined(WIN32) - static TX_DATA_STRUCT local_tx_data; - api_header_t *pri; - - pri = &local_tx_data.api_header; - - pri->data_length = datalen; - memcpy(local_tx_data.data, databuf, pri->data_length); - - //queue data for transmission - if( DoWriteCommand(fd, &local_tx_data)){ - //error - prn(1, "Error: DoWriteCommand() failed!! Check messages log.\n"); - return -1; - } - - bsent=0; - //check that frame was transmitted - switch(local_tx_data.api_header.operation_status) - { - case SANG_STATUS_SUCCESS: - bsent = datalen; - break; - - case SANG_STATUS_TX_TIMEOUT: - //error - prn(1, "****** Error: SANG_STATUS_TX_TIMEOUT ******\n"); - //Check messages log or look at statistics. - break; - - case SANG_STATUS_TX_DATA_TOO_LONG: - //Attempt to transmit data longer than the pre-configured maximum. - //Maximum length is set in 'Interface Properties', - //in the 'Device Manager'. - prn(1, "****** SANG_STATUS_TX_DATA_TOO_LONG ******\n"); - break; - - case SANG_STATUS_TX_DATA_TOO_SHORT: - //Minimum is 1 byte for Primary port, - // 2 bytes for Secondary port - prn(1, "****** SANG_STATUS_TX_DATA_TOO_SHORT ******\n"); - break; - - case SANG_STATUS_LINE_DISCONNECTED: - //Front end monitoring is enabled and Line is - //in disconnected state. - //Check the T1/E1 line is in "Connected" state, - //alse check the Alarms and the message log. - prn(1, "****** SANG_STATUS_LINE_DISCONNECTED ******\n"); - break; - - default: - prn(1, "Unknown return code (0x%X) on transmission!\n", - local_tx_data.api_header.operation_status); - break; - }//switch() -#else - struct msghdr msg; - struct iovec iov[2]; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - bsent = write(fd,&msg,datalen+hdrlen); - if (bsent > 0){ - bsent-=sizeof(wp_tdm_api_tx_hdr_t); - } -#endif - return bsent; -} - - -#ifdef WANPIPE_TDM_API - -/*======================================================== - * Execute TDM command - * - */ -static int sangoma_tdm_cmd_exec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - -#if defined(WIN32) - err = tdmv_api_ioctl(fd, &tdm_api->wp_tdm_cmd); -#else - err = ioctl(fd,SIOC_WANPIPE_TDM_API,&tdm_api->wp_tdm_cmd); - if (err < 0){ - char tmp[50]; - sprintf(tmp,"TDM API: CMD: %i\n",tdm_api->wp_tdm_cmd.cmd); - perror(tmp); - return -1; - } -#endif - return err; -} - -/*======================================================== - * Get Full TDM API configuration per channel - * - */ -int sangoma_get_full_cfg(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_FULL_CFG; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - -#if 0 - printf("TDM API CFG:\n"); - printf("\thw_tdm_coding:\t%d\n",tdm_api->wp_tdm_cmd.hw_tdm_coding); - printf("\tusr_mtu_mru:\t%d\n",tdm_api->wp_tdm_cmd.hw_mtu_mru); - printf("\tusr_period:\t%d\n",tdm_api->wp_tdm_cmd.usr_period); - printf("\ttdm_codec:\t%d\n",tdm_api->wp_tdm_cmd.tdm_codec); - printf("\tpower_level:\t%d\n",tdm_api->wp_tdm_cmd.power_level); - printf("\trx_disable:\t%d\n",tdm_api->wp_tdm_cmd.rx_disable); - printf("\ttx_disable:\t%d\n",tdm_api->wp_tdm_cmd.tx_disable); - printf("\tusr_mtu_mru:\t%d\n",tdm_api->wp_tdm_cmd.usr_mtu_mru); - printf("\tidle flag:\t0x%02X\n",tdm_api->wp_tdm_cmd.idle_flag); - -#ifdef WP_TDM_FEATURE_FE_ALARM - printf("\tfe alarms:\t0x%02X\n",tdm_api->wp_tdm_cmd.fe_alarms); -#endif - - printf("\trx pkt\t%d\ttx pkt\t%d\n",tdm_api->wp_tdm_cmd.stats.rx_packets, - tdm_api->wp_tdm_cmd.stats.tx_packets); - printf("\trx err\t%d\ttx err\t%d\n", - tdm_api->wp_tdm_cmd.stats.rx_errors, - tdm_api->wp_tdm_cmd.stats.tx_errors); -#ifndef __WINDOWS__ - printf("\trx ovr\t%d\ttx idl\t%d\n", - tdm_api->wp_tdm_cmd.stats.rx_fifo_errors, - tdm_api->wp_tdm_cmd.stats.tx_carrier_errors); -#endif -#endif - - return 0; -} - -/*======================================================== - * SET Codec on a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int codec) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_CODEC; - tdm_api->wp_tdm_cmd.tdm_codec = codec; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Codec from a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_CODEC; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.tdm_codec; -} - -/*======================================================== - * SET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int period) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_USR_PERIOD; - tdm_api->wp_tdm_cmd.usr_period = period; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_USR_PERIOD; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.usr_period; -} - -/*======================================================== - * GET Current User Hardware Coding Format - * - * Coding Format will be ULAW/ALAW based on T1/E1 - */ - -int sangoma_tdm_get_hw_coding(int fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_HW_CODING; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_tdm_cmd.hw_tdm_coding; -} - -/*======================================================== - * GET Current User Hardware DTMF Enabled/Disabled - * - * Will return true if HW DTMF is enabled on Octasic - */ - -int sangoma_tdm_get_hw_dtmf(int fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_HW_DTMF; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_tdm_cmd.hw_dtmf; -} - -/*======================================================== - * GET Current User MTU/MRU values in bytes. - * - * The USER MTU/MRU values will change each time a PERIOD - * or CODEC is adjusted. - */ -int sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_USR_MTU_MRU; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.usr_mtu_mru; -} - -/*======================================================== - * SET TDM Power Level - * - * This option is not implemented yet - * - */ -int sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int power) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_POWER_LEVEL; - tdm_api->wp_tdm_cmd.power_level = power; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET TDM Power Level - * - * This option is not implemented yet - * - */ -int sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_POWER_LEVEL; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.power_level; -} - -int sangoma_tdm_flush_bufs(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ -#if 0 - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_FLUSH_BUFFERS; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } -#endif - return 0; -} - -int sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int poll_in_sec) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_ENABLE_RBS_EVENTS; - tdm_api->wp_tdm_cmd.rbs_poll=poll_in_sec; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - - -int sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_DISABLE_RBS_EVENTS; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char rbs) -{ - - int err; - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_WRITE_RBS_BITS; - tdm_api->wp_tdm_cmd.rbs_tx_bits=rbs; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_read_event(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - -#ifdef WP_TDM_FEATURE_EVENTS - - wp_tdm_api_event_t *rx_event; - -#if defined(WIN32) - rx_event = &last_tdm_api_event_buffer; -#else - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_READ_EVENT; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - rx_event = &tdm_api->wp_tdm_cmd.event; -#endif - - - switch (rx_event->wp_tdm_api_event_type){ - - case WP_TDMAPI_EVENT_RBS: - if (tdm_api->wp_tdm_event.wp_rbs_event) { - tdm_api->wp_tdm_event.wp_rbs_event(fd,rx_event->wp_tdm_api_event_rbs_bits); - } - - break; - -#ifdef WP_TDM_FEATURE_DTMF_EVENTS - case WP_TDMAPI_EVENT_DTMF: - if (tdm_api->wp_tdm_event.wp_dtmf_event) { - tdm_api->wp_tdm_event.wp_dtmf_event(fd, - rx_event->wp_tdm_api_event_dtmf_digit, - rx_event->wp_tdm_api_event_dtmf_type, - rx_event->wp_tdm_api_event_dtmf_port); - } - break; -#endif - - case WP_TDMAPI_EVENT_RXHOOK: - if (tdm_api->wp_tdm_event.wp_rxhook_event) { - tdm_api->wp_tdm_event.wp_rxhook_event(fd, - rx_event->wp_tdm_api_event_hook_state); - } - break; - - case WP_TDMAPI_EVENT_RING_DETECT: - if (tdm_api->wp_tdm_event.wp_ring_detect_event) { - tdm_api->wp_tdm_event.wp_ring_detect_event(fd, - rx_event->wp_tdm_api_event_ring_state); - } - break; - - case WP_TDMAPI_EVENT_RING_TRIP_DETECT: - if (tdm_api->wp_tdm_event.wp_ring_trip_detect_event) { - tdm_api->wp_tdm_event.wp_ring_trip_detect_event(fd, - rx_event->wp_tdm_api_event_ring_state); - } - break; - -#ifdef WP_TDM_FEATURE_FE_ALARM - case WP_TDMAPI_EVENT_ALARM: - if (tdm_api->wp_tdm_event.wp_fe_alarm_event) { - tdm_api->wp_tdm_event.wp_fe_alarm_event(fd, - rx_event->wp_tdm_api_event_alarm); - } - break; -#endif - -#ifdef WP_TDM_FEATURE_LINK_STATUS - /* Link Status */ - case WP_TDMAPI_EVENT_LINK_STATUS: - if(tdm_api->wp_tdm_event.wp_link_status_event){ - tdm_api->wp_tdm_event.wp_link_status_event(fd, - rx_event->wp_tdm_api_event_link_status); - } - - break; -#endif - default: - printf("%d: Unknown TDM event!", (int)fd); - break; - } - - return 0; -#else - printf("Error: Read Event not supported!\n"); - return -1; -#endif -} - -#ifdef WP_TDM_FEATURE_DTMF_EVENTS -int sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_DTMF; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_DTMF; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RM_DTMF; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RM_DTMF; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} -#endif - -int sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RXHOOK; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RXHOOK; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - - -int sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING_DETECT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - - -int sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING_DETECT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING_TRIP_DETECT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - - -int sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING_DETECT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TXSIG_KEWL; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TXSIG_START; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TXSIG_ONHOOK; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TXSIG_OFFHOOK; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int tone_id) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TONE; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_tone_type = tone_id; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - -int sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TONE; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_tone_type = 0x00; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - -int sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_ENABLE_HWEC; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_DISABLE_HWEC; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -/*======================================================== - * GET Front End Alarms - * - */ -#ifdef WP_TDM_FEATURE_FE_ALARM -int sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_FE_ALARMS; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.fe_alarms; -} -#endif - -/* get current Line Connection state - Connected/Disconnected */ -int sangoma_tdm_get_fe_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_FE_STATUS; - err = sangoma_tdm_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_tdm_cmd.fe_status; - - return err; -} - -/* get current Line Connection state - Connected/Disconnected */ -#ifdef WP_TDM_FEATURE_LINK_STATUS -int sangoma_tdm_get_link_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_LINK_STATUS; - err = sangoma_tdm_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_tdm_cmd.fe_status; - - return err; -} -#endif - -/* set current Line Connection state - Connected/Disconnected. valid only for ISDN BRI */ -int sangoma_tdm_set_fe_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char new_status) -{ - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_FE_STATUS; - tdm_api->wp_tdm_cmd.fe_status = new_status; - - return sangoma_tdm_cmd_exec(fd, tdm_api); -} - -#endif /* WANPIPE_TDM_API */ diff --git a/api/libsangoma/.svn/tmp/tempfile.4.tmp b/api/libsangoma/.svn/tmp/tempfile.4.tmp deleted file mode 100644 index 4d1a16e..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.4.tmp +++ /dev/null @@ -1,234 +0,0 @@ -/***************************************************************************** - * libsangoma.c AFT T1/E1: HDLC API Code Library - * - * Author(s): Anthony Minessale II - * Nenad Corbic - * - * Copyright: (c) 2005 Anthony Minessale II - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * ============================================================================ - */ - -#ifndef _LIBSNAGOMA_H -#define _LIBSNAGOMA_H -#include - -#define WANPIPE_TDM_API 1 - -#ifdef WIN32 -#ifndef __WINDOWS__ -#define __WINDOWS__ -#endif -#include -#include -#include -iinclude //for offsetof() -typedef unsigned __int16 u_int16_t; -typedef unsigned __int32 u_int32_t; -#include //for 'wan_udp_hdr_t' -#include -#ifdef WANPIPE_TDM_API -#include //for TDMV API -#endif -#include //return codes -#include //for IOCTL codes -#include //RBS definitions -#include //TE1 macros -#include //56k macros -#include //Analog card -#include //T3 card -#include //front-end (T1/E1/56k) commands -#include //for Wanpipe API - -#define _MYDEBUG -#define PROGRAM_NAME "LIBSANGOMA: " -#include - -typedef HANDLE sng_fd_t; -#else -/* L I N U X */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//typedef int sng_fd_t; -#include -#include -#include -#ifdef WANPIPE_TDM_API -# include -#endif - -#endif - -#define FNAME_LEN 50 -#define FUNC_DBG(x) if(0)printf("%s:%d\n", x, __LINE__) -#define DBG_PRINT if(1)printf - -typedef wp_tdm_api_rx_hdr_t sangoma_api_hdr_t; - -/* Decodec Span/Chan from interface name */ -int sangoma_span_chan_toif(int span, int chan, char *interface_name); -int sangoma_span_chan_fromif(char *interface_name, int *span, int *chan); -int sangoma_interface_toi(char *interface_name, int *span, int *chan); - -sng_fd_t sangoma_create_socket_by_name(char *device, char *card); - -/* Open Span/Chan devices - * open_tdmapi_span_chan: open device based on span chan values - * sangoma_open_tdmapi_span: open first available device on span - */ - -sng_fd_t sangoma_open_tdmapi_span_chan(int span, int chan); -sng_fd_t sangoma_open_tdmapi_span(int span); - -#define sangoma_create_socket_intr sangoma_open_tdmapi_span_chan - -/* Device Rx/Tx functions - * writemsg_tdm: tx header + data from separate buffers - * readmsg_tdm: rx header + data to separate buffers - */ -int sangoma_writemsg_tdm(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, unsigned short datalen, int flag); -int sangoma_readmsg_tdm(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, int datalen, int flag); - -#define sangoma_readmsg_socket sangoma_readmsg_tdm -#define sangoma_sendmsg_socket sangoma_writemsg_tdm - -#ifdef WANPIPE_TDM_API - -void sangoma_socket_close(sng_fd_t *sp); -int sangoma_socket_waitfor(sng_fd_t fd, int timeout, int flags); - -/* Get Full TDM API configuration per chan */ -int sangoma_get_full_cfg(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* Get/Set TDM Codec per chan */ -int sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int codec); -int sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* Get/Set USR Tx/Rx Period in milliseconds */ -int sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int period); -int sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* Get user MTU/MRU values in bytes */ -int sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* Not supported yet */ -int sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int power); -int sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* Flush buffers from current channel */ -int sangoma_tdm_flush_bufs(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -int sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int poll_in_sec); -int sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -int sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char rbs); - -int sangoma_tdm_read_event(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* DTMF Detection on Octasic chip */ -int sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); -int sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* DTMF Detection on A200 (SLIC) chip */ -int sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); -int sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* On/Off hook events on A200 (Analog) card */ -int sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); -int sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* Enable/Disable Ring events on A200 (Analog) card */ -int sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); -int sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* Enable/Disable Ring Detect events on A200 (Analog) card */ -int sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); -int sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* Enable/Disable Ring Trip events on A200 (Analog) card */ -int sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); -int sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* Enable/Disable tone events on A200 (Analog) card */ -int sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int tone_id); -int sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -int sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -int sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); -int sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); -int sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); -int sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -int sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); -int sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/* get current Line Connection state - Connected/Disconnected */ -#ifdef WP_TDM_FEATURE_LINK_STATUS -# ifndef LIBSANGOMA_GET_LINKSTATUS -# define LIBSANGOMA_GET_LINKSTATUS 1 -# endif -int sangoma_tdm_get_link_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char *current_status); -#endif - -/* set current Line Connection state - Connected/Disconnected */ -#ifndef LIBSANGOMA_GET_FESTATUS -#define LIBSANGOMA_GET_FESTATUS 1 -#endif -int sangoma_tdm_set_fe_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char new_status); - -<<<<<<< .mine -======= -#ifndef LIBSANGOMA_SET_FESTATUS -#define LIBSANGOMA_SET_FESTATUS 1 -#endif -/* get current Line Connection state - Connected/Disconnected */ -int sangoma_tdm_get_fe_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char *current_status); - ->>>>>>> .r10 -/* Get hw configuration Alaw Ulaw based on T1/E1 */ -#ifndef LIBSANGOMA_GET_HWCODING -#define LIBSANGOMA_GET_HWCODING 1 -#endif -int sangoma_tdm_get_hw_coding(int fd, wanpipe_tdm_api_t *tdm_api); - -/* Get hw dtmf support: enabled or disabled */ -#ifndef LIBSANGOMA_GET_HWDTMF -#define LIBSANGOMA_GET_HWDTMF 1 -#endif -int sangoma_tdm_get_hw_dtmf(int fd, wanpipe_tdm_api_t *tdm_api); - -#endif /* WANPIPE_TDM_API */ - -<<<<<<< .mine -int sangoma_tdm_get_hw_dtmf(int fd, wanpipe_tdm_api_t *tdm_api); -int sangoma_open_tdmapi_ctrl(void); - -#endif -======= -#endif /* _LIBSNAGOMA_H */ ->>>>>>> .r10 - diff --git a/api/libsangoma/.svn/tmp/tempfile.5.tmp b/api/libsangoma/.svn/tmp/tempfile.5.tmp deleted file mode 100644 index 93c2b96..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.5.tmp +++ /dev/null @@ -1,1620 +0,0 @@ -/***************************************************************************** - * libsangoma.c AFT T1/E1: HDLC API Code Library - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * ============================================================================ - * - * Aug 15, 2006 David Rokhvarg Ported to MS Windows 2000/XP - * Sep 24, 2006 Michael Jerris Windows port, standardize api, cleanup - * - */ - -#include "libsangoma.h" -#define DFT_CARD "wanpipe1" - -#ifndef WP_TDM_FEATURE_FE_ALARM -#warning "Warning: TDM FE ALARM not supported by driver" -#endif - -#ifndef WP_TDM_FEATURE_DTMF_EVENTS -#warning "Warning: TDM DTMF not supported by driver" -#endif - -#ifndef WP_TDM_FEATURE_EVENTS -#warning "Warning: TDM EVENTS not supported by driver" -#endif - -#ifndef WP_TDM_FEATURE_LINK_STATUS -#warning "Warning: TDM LINK STATUS not supported by driver" -#endif - - -#if defined(WIN32) -//extern int verbose; - -#define DEV_NAME_LEN 100 -char device_name[DEV_NAME_LEN]; - -#define RETRY_DELAY() Sleep(50) -#define MAX_RETRY_COUNTER 8 - -#define DBG_IFACE if(1)printf -#define INFO_IFACE if(1)printf -#define ERR_IFACE if(1)printf - -#define WP_INIT_OVERLAPPED_STRUCT(o)\ -{ \ - o->Internal = (ULONG_PTR)NULL; \ - o->InternalHigh = (ULONG_PTR)NULL; \ - o->Offset = 0; \ - o->OffsetHigh = 0;\ -} - -static void DecodeLastError(LPSTR lpszFunction) -{ - LPVOID lpMsgBuf; - DWORD dwLastErr = GetLastError(); - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - dwLastErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPTSTR) &lpMsgBuf, - 0, - NULL - ); - // Display the string. - printf("Last Error: %s (GetLastError() returned: %d)\n", lpMsgBuf, dwLastErr); - // Free the buffer. - LocalFree( lpMsgBuf ); -} - -static int handle_device_ioctl_result(int bResult) -{ - if(bResult == 0){ - /* check message log */ - printf("%s(): Line: %d: Error!!\n", __FUNCTION__, __LINE__); - DecodeLastError(__FUNCTION__); - return 1; - }else{ - return 0; - } -} - -static int DoManagementCommand(HANDLE fd, wan_udp_hdr_t* wan_udp) -{ - DWORD ln, bIoResult; - unsigned char id = 0; - - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - bIoResult = DeviceIoControl( - fd, - IoctlManagementCommand, - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult); -} - -static int DoTdmvApiCommand(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlTdmApiCommand, - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult); -} - -static int tdmv_api_ioctl(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - int retry_counter = 0; - - do{ - if(DoTdmvApiCommand(fd, api_cmd)){ - return SANG_STATUS_GENERAL_ERROR; - } - - if(api_cmd->result == SANG_STATUS_SUCCESS){ - break; - }else if(api_cmd->result == SANG_STATUS_DEVICE_BUSY){ - retry_counter++; - RETRY_DELAY(); - DBG_IFACE( "%s: %s(): Retrying...\n", device_name, __FUNCTION__); - }else{ - ERR_IFACE("%s: %s(): Error: cmd result: %s(%d).\n", device_name, __FUNCTION__, - SDLA_DECODE_SANG_STATUS(api_cmd->result), api_cmd->result); - break; - } - - }while(retry_counter < MAX_RETRY_COUNTER); - - return api_cmd->result; -} - -// Blocking read command. If used after DoApiPollCommand(), -// it will return immediatly, without blocking. -static USHORT DoReadCommand(HANDLE drv, RX_DATA_STRUCT * pRx) -{ - DWORD ln; - - if (DeviceIoControl( - drv, - IoctlReadCommand, - (LPVOID)NULL, - 0L, - (LPVOID)pRx, - sizeof(RX_DATA_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - //check messages log - prn(1, "Error: DoReadCommand(): DeviceIoControl failed!\n"); - return 1; - }else{ - return 0; - } -} - -// Blocking write command. If used after DoApiPollCommand(), -// it will return immediatly, without blocking. -static UCHAR DoWriteCommand(HANDLE drv, TX_DATA_STRUCT * pTx) -{ - DWORD ln; - - if(DeviceIoControl( - drv, - IoctlWriteCommand, - (LPVOID)pTx, - (ULONG)sizeof(TX_DATA_STRUCT), - (LPVOID)pTx, - sizeof(TX_DATA_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - //check messages log - prn(1, "Error: DoWriteCommand(): DeviceIoControl failed!\n"); - return 1; - }else{ - return 0; - } -} - -// Blocking API Poll command. -static USHORT DoApiPollCommand(HANDLE drv, API_POLL_STRUCT *api_poll_ptr, OVERLAPPED *overlapped) -{ - DWORD ln; - - WP_INIT_OVERLAPPED_STRUCT(overlapped); - - if (DeviceIoControl( - drv, - IoctlApiPoll, - (LPVOID)NULL, - 0L, - (LPVOID)api_poll_ptr, - sizeof(API_POLL_STRUCT), - (LPDWORD)(&ln), - overlapped - ) == FALSE){ - //check messages log - prn(1, "Error: DoApiPollCommand(): DeviceIoControl failed!\n"); - return 1; - }else{ - return 0; - } -} - -#endif /* WIN32 */ - -#define DBG_POLL if(1)printf - -/*! - \brief Device Close Method: User to close a file descriptor - \param fd device file descriptor - \return Non 0 = error, 0 = ok -*/ - -void sangoma_socket_close(sng_fd_t *fd) -{ -#if defined(WIN32) - if( *fd != INVALID_HANDLE_VALUE){ - CloseHandle(*fd); - *fd = INVALID_HANDLE_VALUE; - } -#else - if (*fd >= 0) { - close(*fd); - *fd = -1; - } -#endif -} - - -void sangoma_init_wait_obj(sangoma_wait_obj_t *sng_wait_obj, sng_fd_t fd, int span, int chan, int timeout, int flags_in) -{ - sng_wait_obj->fd = fd; - sng_wait_obj->timeout = timeout; - sng_wait_obj->flags_in = flags_in; - sng_wait_obj->span = span; - sng_wait_obj->chan = chan; -#if defined(WIN32) - sng_wait_obj->OverlappedApiPoll.hEvent = CreateEvent( NULL, FALSE, FALSE, NULL); -#endif -} - -#if defined(WIN32) -static int _SAPI_CALL sangoma_socket_get_state(sangoma_wait_obj_t *sng_wait_obj) -{ - DWORD NumberOfBytesTransferred; - BOOL bOverlappedResult; - - bOverlappedResult = GetOverlappedResult(sng_wait_obj->fd, - &sng_wait_obj->OverlappedApiPoll, - &NumberOfBytesTransferred, - FALSE/* do NOT wait for IO to complete */); - - if(bOverlappedResult == FALSE){ - if(GetLastError() == ERROR_IO_INCOMPLETE){ - /* IO still in process */ - return 0; - }else{ - /* Function call failed. Error. */ - return -1; - } - }else{ - if(GetLastError() == ERROR_SUCCESS){ - /* IO is complete. Sangoma "socket" is signaled. */ - return 1; - } - if(GetLastError() == ERROR_INVALID_PARAMETER){ - /* IO is complete, but with an error. */ - return -2; - } - } - /* all other cases are errors */ - return -3; -} - -static int _SAPI_CALL sangoma_socket_poll(sangoma_wait_obj_t *sng_wait_obj) -{ - API_POLL_STRUCT *api_poll = &sng_wait_obj->api_poll; -#if 0 - DBG_POLL("%s(): span: %d, chan: %d\n", __FUNCTION__, sng_wait_obj->span, sng_wait_obj->chan); -#endif - memset(api_poll, 0x00, sizeof(API_POLL_STRUCT)); - - api_poll->timeout = sng_wait_obj->timeout; - api_poll->user_flags_bitmap = sng_wait_obj->flags_in; - - /* This call will return immediatly because it is "overlapped"! - * Caller of this function must implement the actual wait. */ - if(DoApiPollCommand(sng_wait_obj->fd, api_poll, &sng_wait_obj->OverlappedApiPoll)){ - //failed - return -1; - } - return 0; -} -#endif - - -/*! - \brief Device Wait Method: User to wait on MULTIPLE file descriptors - \param sangoma_wait_objects - pointer to an array of sangoma_wait_obj_t structures - \param number_of_sangoma_wait_objects - number of objects in sangoma_wait_objects array - \param system_wait_timeout - SANGOMA_INFINITE_API_POLL_WAIT or other timeout in Milliseconds - \return -1 = poll error, 0 = timeout, >0 ok -*/ - -int _SAPI_CALL sangoma_socket_waitfor_many(sangoma_wait_obj_t sangoma_wait_objects[], int number_of_sangoma_wait_objects, uint32_t system_wait_timeout) -{ - int i; - -#if defined(WIN32) - HANDLE hEvents[MAXIMUM_WAIT_OBJECTS]; - - if(number_of_sangoma_wait_objects > MAXIMUM_WAIT_OBJECTS){ - prn(1, "Error: %s(): Invalid 'number_of_sangoma_wait_objects': %d. Maximum is: %d\n", __FUNCTION__, - number_of_sangoma_wait_objects, MAXIMUM_WAIT_OBJECTS); - return -1; - } - - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - hEvents[i] = sangoma_wait_objects[i].OverlappedApiPoll.hEvent; - sangoma_socket_poll(&sangoma_wait_objects[i]); - } - - /* wait untill at least one of the events is signalled OR a timeout */ - if(WAIT_TIMEOUT == WaitForMultipleObjects(number_of_sangoma_wait_objects, &hEvents[0], FALSE, system_wait_timeout)){ - return 0; - } - - /* find which overlapped IO was completed */ - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - - if(sangoma_socket_get_state(&sangoma_wait_objects[i]) > 0){ - - if(sangoma_wait_objects[i].api_poll.operation_status == SANG_STATUS_SUCCESS){ - - sangoma_wait_objects[i].flags_out = sangoma_wait_objects[i].api_poll.poll_events_bitmap; - }else{ - prn(1, "Error: %s(): Invalid Operation Status: %s(%d)\n", __FUNCTION__, - SDLA_DECODE_SANG_STATUS(sangoma_wait_objects[i].api_poll.operation_status), - sangoma_wait_objects[i].api_poll.operation_status); - return -2; - } - } - } - - return 1; -#else - struct pollfd pfds[number_of_sangoma_wait_objects]; - int res; - - memset(pfds, 0, sizeof(pfds)); - - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - pfds[i].fd = sangoma_wait_objects[i].fd; - pfds[i].events = sangoma_wait_objects[i].flags_in; - } - - res = poll(pfds, number_of_sangoma_wait_objects , sangoma_wait_objects[0].timeout); - if (res > 0) { - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - sangoma_wait_objects[i].flags_out = pfds[i].revents; - } - } - - return res; -#endif -} - - -/*! - \brief Device Wait Method: User to wait on a SINGLE file descriptor - \param fd device file descriptor - \param timeout wait timeout - \param flags_in input poll flags - \param flags_out return poll flags - \return -1 = poll error, 0 = timeout, >0 ok -*/ - -int _SAPI_CALL sangoma_socket_waitfor(sng_fd_t fd, int timeout, int flags_in, unsigned int *flags_out) -{ -#if defined(WIN32) - API_POLL_STRUCT api_poll; - DWORD NumberOfBytesTransferred; - BOOL bOverlappedResult; - OVERLAPPED OverlappedApiPoll; - - memset(&api_poll, 0x00, sizeof(API_POLL_STRUCT)); - - api_poll.user_flags_bitmap = flags_in; - - /* This call will return immediatly because it is "overlapped"! - * Caller of this function must implement the actual wait. */ - if(DoApiPollCommand(fd, &api_poll, &OverlappedApiPoll)){ - //failed - return -1; - } - - bOverlappedResult = GetOverlappedResult(fd, &OverlappedApiPoll, &NumberOfBytesTransferred, - TRUE /* wait (indefinitely) for IO to complete */); - if(bOverlappedResult == FALSE){ - if(GetLastError() == ERROR_IO_INCOMPLETE){ - /* IO still in process */ - return 0; - }else{ - /* Function call failed. Error. */ - return -1; - } - }else{ - if(GetLastError() == ERROR_SUCCESS){ - /* IO is complete. Sangoma "socket" is signaled. */ - if(api_poll.operation_status == SANG_STATUS_SUCCESS){ - - *flags_out = api_poll.poll_events_bitmap; - return 1; - }else{ - prn(1, "Error: %s(): Invalid Operation Status: %s(%d)\n", __FUNCTION__, - SDLA_DECODE_SANG_STATUS(api_poll.operation_status), api_poll.operation_status); - return -3; - } - } - if(GetLastError() == ERROR_INVALID_PARAMETER){ - /* IO is complete, but with an error. */ - return -2; - } - } - return -1; -#else - struct pollfd pfds[1]; - int res; - - memset(&pfds[0], 0, sizeof(pfds[0])); - pfds[0].fd = fd; - pfds[0].events = flags_in; - *flags_out=0; - - res = poll(pfds, 1, timeout); - if (res > 0) { - *flags_out = pfds[0].revents; - } - - return res; -#endif -} - -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) -{ -#if defined(__WINDOWS__) - - if(DoManagementCommand(fd, wan_udp)){ - return 1; - } - - if(wan_udp->wan_udphdr_return_code != WAN_CMD_OK){ - return 2; - } - -#else - unsigned char id = 0; - int err=0; - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - err=ioctl(fd,WANPIPE_IOCTL_PIPEMON,wan_udp); - if (err < 0) { - return 1; - } -#endif - return 0; -} - -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name) -{ -#if defined(WIN32) -/* FIXME: Not implemented */ - return -1; -#else - sprintf(interface_name,"s%ic%i",span,chan); -#endif - return 0; -} - -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan) -{ - char *p=NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'g') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 'w') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) -{ - char *p = NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'c') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 's') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -sng_fd_t sangoma_open_tdmapi_span_chan(int span, int chan) -{ -#if defined(WIN32) - wan_udp_hdr_t wan_udp; - sng_fd_t fd = INVALID_HANDLE_VALUE; - - if((fd = __sangoma_open_tdmapi_span_chan(span, chan)) == INVALID_HANDLE_VALUE){ - //prn(verbose, "Span: %d, chan: %d: is not running, consider 'busy'\n", span, chan); - return fd; - } - - //get the open handle counter - wan_udp.wan_udphdr_command = GET_OPEN_HANDLES_COUNTER; - wan_udp.wan_udphdr_data_len = 0; - - DoManagementCommand(fd, &wan_udp); - if(wan_udp.wan_udphdr_return_code){ - prn(1, "Error: command GET_OPEN_HANDLES_COUNTER failed! Span: %d, chan: %d\n", span, chan); - //don't forget to close!! otherwize counter will stay incremented. - sangoma_socket_close(&fd); - return INVALID_HANDLE_VALUE; - } - - //prn(verbose, "open handles counter: %d\n", *(int*)&wan_udp.wan_udphdr_data[0]); - if(*(int*)&wan_udp.wan_udphdr_data[0] == 1){ - //this is the only process using this chan/span, so it is 'free' - //prn(verbose, "Found 'free' Span: %d, chan: %d\n",span, i); - return fd; - } - //we are NOT first! - //don't forget to close!! otherwize counter will stay incremented. - sangoma_socket_close(&fd); - - return INVALID_HANDLE_VALUE; - -#else - return __sangoma_open_tdmapi_span_chan(span, chan); -#endif -} - -/* no checks done for multiple open */ -sng_fd_t __sangoma_open_tdmapi_span_chan(int span, int chan) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - - /* Form the Interface Name from span and chan number (i.e. wanpipe1_if1). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_INTERFACE_NAME_FORM, span, chan); - -#if defined(WIN32) - _snprintf(fname , FNAME_LEN, "\\\\.\\%s", tmp_fname); - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH | FILE_FLAG_OVERLAPPED, - (HANDLE)NULL - ); -#else - //sprintf(fname,"/dev/wptdm_s%dc%d",span,chan); - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - -sng_fd_t sangoma_open_tdmapi_ctrl(void) -{ -#if defined(WIN32) - sng_fd_t fd = INVALID_HANDLE_VALUE; - -#pragma message("sangoma_open_tdmapi_ctrl: Not support on Windows") -#else - sng_fd_t fd=-1; - - fd = open("/dev/wptdm_ctrl", O_RDWR); -#endif - - return fd; -} - -sng_fd_t sangoma_create_socket_by_name(char *device, char *card) -{ - int span,chan; - sangoma_interface_toi(device,&span,&chan); - - return sangoma_open_tdmapi_span_chan(span,chan); -} - - -sng_fd_t sangoma_open_tdmapi_span(int span) -{ - int i=0; -#if defined(WIN32) - sng_fd_t fd = INVALID_HANDLE_VALUE; - - for(i = 1; i < 32; i++){ - - fd = sangoma_open_tdmapi_span_chan(span, i); - - if(fd != INVALID_HANDLE_VALUE){ - //found free chan - break; - } - - }//for() - -#else - char fname[FNAME_LEN]; - int fd=0; - for (i=1;i<32;i++){ - sprintf(fname,"/dev/wptdm_s%dc%d",span,i); - fd = open(fname, O_RDWR); - if (fd < 0){ - continue; - } - break; - } -#endif - return fd; -} - -int _SAPI_CALL sangoma_readmsg_tdm(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) -{ - int rx_len=0; - -#if defined(WIN32) - wp_api_hdr_t *rx_hdr = (wp_api_hdr_t*)hdrbuf; - - if(hdrlen != sizeof(wp_api_hdr_t)){ - //error - prn(1, "Error: %s(): invalid size of user's 'header buffer'. Should be 'sizeof(wp_api_hdr_t)'.\n", __FUNCTION__); - return -1; - } - - if(datalen != MAX_NO_DATA_BYTES_IN_FRAME /*sizeof(wp_api_element_t) - sizeof(wp_api_hdr_t)*/){ - //error - prn(1, "Error: %s(): invalid size of user's 'data buffer'. Should be MAX_NO_DATA_BYTES_IN_FRAME (%d).\n", __FUNCTION__, MAX_NO_DATA_BYTES_IN_FRAME); - return -2; - } - - if(hdrbuf != (((u8*)databuf) - sizeof(wp_api_hdr_t))){ - //error/FIXME - currently hdrbuf MUST be followed by databuf! - prn(1, "Error: %s(): user's 'header buffer' and 'data buffer' are NOT equal!.\n", __FUNCTION__); - return -3; - } - - if(DoReadCommand(fd, hdrbuf)){ - //error - prn(1, "Error: %s(): DoReadCommand() failed! Check messages log.\n", __FUNCTION__); - return -4; - } - - switch(rx_hdr->operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: - /* ok */ - break; - default: - prn(1, "Error: %s(): Operation Status: %s(%d)\n", __FUNCTION__, - SDLA_DECODE_SANG_STATUS(rx_hdr->operation_status), rx_hdr->operation_status); - return -5; - } - - rx_len = rx_hdr->data_length; - -#else - struct msghdr msg; - struct iovec iov[2]; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - rx_len = read(fd,&msg,datalen+hdrlen); - - if (rx_len <= sizeof(wp_tdm_api_rx_hdr_t)){ - return -EINVAL; - } - - rx_len-=sizeof(wp_tdm_api_rx_hdr_t); -#endif - return rx_len; -} - -int _SAPI_CALL sangoma_writemsg_tdm(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) -{ - int bsent=-1; - -#if defined(WIN32) - wp_api_element_t *tx_el; - - if(hdrlen != sizeof(wp_api_hdr_t)){ - //error - prn(1, "Error: %s(): invalid size of user's 'header buffer'. Should be 'sizeof(wp_api_hdr_t)'.\n", __FUNCTION__); - return -1; - } - - if(hdrbuf != (((u8*)databuf) - sizeof(wp_api_hdr_t))){ - //error/FIXME - currently hdrbuf MUST be followed by databuf! - prn(1, "Error: %s(): user's 'header buffer' and 'data buffer' are NOT equal!.\n", __FUNCTION__); - return -3; - } - - tx_el = hdrbuf; - - //queue data for transmission - if(DoWriteCommand(fd, hdrbuf)){ - //error - prn(1, "Error: DoWriteCommand() failed!! Check messages log.\n"); - return -1; - } - - bsent=0; - //check that frame was transmitted - switch(tx_el->hdr.operation_status) - { - case SANG_STATUS_SUCCESS: - bsent = datalen; - break; - default: - prn(1, "Error: %s(): Operation Status: %s(%d)\n", __FUNCTION__, - SDLA_DECODE_SANG_STATUS(tx_el->hdr.operation_status), tx_el->hdr.operation_status); - break; - }//switch() - -#else - struct msghdr msg; - struct iovec iov[2]; - wp_api_hdr_t *tx_el=hdrbuf; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - bsent = write(fd,&msg,datalen+hdrlen); - - if (bsent == (datalen+hdrlen)){ - tx_el->wp_api_hdr_operation_status=SANG_STATUS_SUCCESS; - bsent-=sizeof(wp_tdm_api_tx_hdr_t); - } else if (errno == EBUSY){ - tx_el->wp_api_hdr_operation_status=SANG_STATUS_DEVICE_BUSY; - } else { - tx_el->wp_api_hdr_operation_status=SANG_STATUS_IO_ERROR; - } - tx_el->wp_api_hdr_data_length=bsent; -#endif - return bsent; -} - - -#ifdef WANPIPE_TDM_API - -/*======================================================== - * Execute TDM command - * - */ -int _SAPI_CALL sangoma_tdm_cmd_exec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - -#if defined(WIN32) - err = tdmv_api_ioctl(fd, &tdm_api->wp_tdm_cmd); -#else - err = ioctl(fd,SIOC_WANPIPE_TDM_API,&tdm_api->wp_tdm_cmd); - if (err < 0){ - char tmp[50]; - sprintf(tmp,"TDM API: CMD: %i\n",tdm_api->wp_tdm_cmd.cmd); - perror(tmp); - return -1; - } -#endif - return err; -} - -/*======================================================== - * Get Full TDM API configuration per channel - * - */ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_FULL_CFG; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - -#if 1 - printf("TDM API CFG:\n"); - printf("\thw_tdm_coding:\t%d\n",tdm_api->wp_tdm_cmd.hw_tdm_coding); - printf("\thw_mtu_mru:\t%d\n",tdm_api->wp_tdm_cmd.hw_mtu_mru); - printf("\tusr_period:\t%d\n",tdm_api->wp_tdm_cmd.usr_period); - printf("\ttdm_codec:\t%d\n",tdm_api->wp_tdm_cmd.tdm_codec); - printf("\tpower_level:\t%d\n",tdm_api->wp_tdm_cmd.power_level); - printf("\trx_disable:\t%d\n",tdm_api->wp_tdm_cmd.rx_disable); - printf("\ttx_disable:\t%d\n",tdm_api->wp_tdm_cmd.tx_disable); - printf("\tusr_mtu_mru:\t%d\n",tdm_api->wp_tdm_cmd.usr_mtu_mru); - printf("\tidle flag:\t0x%02X\n",tdm_api->wp_tdm_cmd.idle_flag); - -#ifdef WP_TDM_FEATURE_FE_ALARM - printf("\tfe alarms:\t0x%02X\n",tdm_api->wp_tdm_cmd.fe_alarms); -#endif - - printf("\trx pkt\t%d\ttx pkt\t%d\n",tdm_api->wp_tdm_cmd.stats.rx_packets, - tdm_api->wp_tdm_cmd.stats.tx_packets); - printf("\trx err\t%d\ttx err\t%d\n", - tdm_api->wp_tdm_cmd.stats.rx_errors, - tdm_api->wp_tdm_cmd.stats.tx_errors); -#ifndef __WINDOWS__ - printf("\trx ovr\t%d\ttx idl\t%d\n", - tdm_api->wp_tdm_cmd.stats.rx_fifo_errors, - tdm_api->wp_tdm_cmd.stats.tx_carrier_errors); -#endif -#endif - - return 0; -} - -/*======================================================== - * SET Codec on a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int codec) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_CODEC; - tdm_api->wp_tdm_cmd.tdm_codec = codec; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Codec from a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_CODEC; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.tdm_codec; -} - -/*======================================================== - * SET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int period) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_USR_PERIOD; - tdm_api->wp_tdm_cmd.usr_period = period; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_USR_PERIOD; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.usr_period; -} - -/*======================================================== - * GET Current User Hardware Coding Format - * - * Coding Format will be ULAW/ALAW based on T1/E1 - */ - -int _SAPI_CALL sangoma_tdm_get_hw_coding(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_HW_CODING; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_tdm_cmd.hw_tdm_coding; -} - -#ifdef WP_TDM_FEATURE_DTMF_EVENTS -/*======================================================== - * GET Current User Hardware DTMF Enabled/Disabled - * - * Will return true if HW DTMF is enabled on Octasic - */ - -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_HW_DTMF; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_tdm_cmd.hw_dtmf; -} -#endif - -/*======================================================== - * GET Current User MTU/MRU values in bytes. - * - * The USER MTU/MRU values will change each time a PERIOD - * or CODEC is adjusted. - */ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_USR_MTU_MRU; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.usr_mtu_mru; -} - -/*======================================================== - * SET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int power) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_POWER_LEVEL; - tdm_api->wp_tdm_cmd.power_level = power; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_POWER_LEVEL; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.power_level; -} - -int _SAPI_CALL sangoma_tdm_flush_bufs(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ -#if 0 - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_FLUSH_BUFFERS; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } -#endif - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int poll_in_sec) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_ENABLE_RBS_EVENTS; - tdm_api->wp_tdm_cmd.rbs_poll=poll_in_sec; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - - -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_DISABLE_RBS_EVENTS; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char rbs) -{ - - int err; - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_WRITE_RBS_BITS; - tdm_api->wp_tdm_cmd.rbs_tx_bits=rbs; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_read_event(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - -#ifdef WP_TDM_FEATURE_EVENTS - wp_tdm_api_event_t *rx_event; - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_READ_EVENT; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - rx_event = &tdm_api->wp_tdm_cmd.event; - - - switch (rx_event->wp_tdm_api_event_type){ - - case WP_TDMAPI_EVENT_RBS: - if (tdm_api->wp_tdm_event.wp_rbs_event) { - tdm_api->wp_tdm_event.wp_rbs_event(fd,rx_event->wp_tdm_api_event_rbs_bits); - } - - break; - -#ifdef WP_TDM_FEATURE_DTMF_EVENTS - case WP_TDMAPI_EVENT_DTMF: - if (tdm_api->wp_tdm_event.wp_dtmf_event) { - tdm_api->wp_tdm_event.wp_dtmf_event(fd, - rx_event->wp_tdm_api_event_dtmf_digit, - rx_event->wp_tdm_api_event_dtmf_type, - rx_event->wp_tdm_api_event_dtmf_port); - } - break; -#endif - - case WP_TDMAPI_EVENT_RXHOOK: - if (tdm_api->wp_tdm_event.wp_rxhook_event) { - tdm_api->wp_tdm_event.wp_rxhook_event(fd, - rx_event->wp_tdm_api_event_hook_state); - } - break; - - case WP_TDMAPI_EVENT_RING_DETECT: - if (tdm_api->wp_tdm_event.wp_ring_detect_event) { - tdm_api->wp_tdm_event.wp_ring_detect_event(fd, - rx_event->wp_tdm_api_event_ring_state); - } - break; - - case WP_TDMAPI_EVENT_RING_TRIP_DETECT: - if (tdm_api->wp_tdm_event.wp_ring_trip_detect_event) { - tdm_api->wp_tdm_event.wp_ring_trip_detect_event(fd, - rx_event->wp_tdm_api_event_ring_state); - } - break; - -#ifdef WP_TDM_FEATURE_FE_ALARM - case WP_TDMAPI_EVENT_ALARM: - if (tdm_api->wp_tdm_event.wp_fe_alarm_event) { - tdm_api->wp_tdm_event.wp_fe_alarm_event(fd, - rx_event->wp_tdm_api_event_alarm); - } - break; -#endif - -#ifdef WP_TDM_FEATURE_LINK_STATUS - /* Link Status */ - case WP_TDMAPI_EVENT_LINK_STATUS: - if(tdm_api->wp_tdm_event.wp_link_status_event){ - tdm_api->wp_tdm_event.wp_link_status_event(fd, - rx_event->wp_tdm_api_event_link_status); - } - - break; -#endif - default: - printf("%d: Unknown TDM event!", (int)fd); - break; - } - - return 0; -#else - printf("Error: Read Event not supported!\n"); - return -1; -#endif -} - -#ifdef WP_TDM_FEATURE_DTMF_EVENTS -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_DTMF; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_DTMF; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RM_DTMF; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RM_DTMF; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RXHOOK; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RXHOOK; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING_DETECT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return err; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING_DETECT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING_TRIP_DETECT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_RING_DETECT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TXSIG_KEWL; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TXSIG_START; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TXSIG_ONHOOK; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TXSIG_OFFHOOK; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, uint16_t tone_id) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TONE; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_ENABLE; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_tone_type = tone_id; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) { - - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_EVENT; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_type = WP_TDMAPI_EVENT_TONE; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_mode = WP_TDMAPI_EVENT_DISABLE; - tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_tone_type = 0x00; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.rbs_poll; -} - -#endif - -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_ENABLE_HWEC; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_DISABLE_HWEC; - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -/*======================================================== - * GET Front End Alarms - * - */ -#ifdef WP_TDM_FEATURE_FE_ALARM -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_FE_ALARMS; - - err=sangoma_tdm_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_tdm_cmd.fe_alarms; -} - -/* get current Line Connection state - Connected/Disconnected */ -int _SAPI_CALL sangoma_tdm_get_fe_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_FE_STATUS; - err = sangoma_tdm_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_tdm_cmd.fe_status; - - return err; -} -#endif - -/* get current Line Connection state - Connected/Disconnected */ -#ifdef WP_TDM_FEATURE_LINK_STATUS -int _SAPI_CALL sangoma_tdm_get_link_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_GET_LINK_STATUS; - err = sangoma_tdm_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_tdm_cmd.fe_status; - - return err; -} - -/* set current Line Connection state - Connected/Disconnected. valid only for ISDN BRI */ -int _SAPI_CALL sangoma_tdm_set_fe_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char new_status) -{ - tdm_api->wp_tdm_cmd.cmd = SIOC_WP_TDM_SET_FE_STATUS; - tdm_api->wp_tdm_cmd.fe_status = new_status; - - return sangoma_tdm_cmd_exec(fd, tdm_api); -} -#endif - -#endif /* WANPIPE_TDM_API */ diff --git a/api/libsangoma/.svn/tmp/tempfile.6.tmp b/api/libsangoma/.svn/tmp/tempfile.6.tmp deleted file mode 100644 index 68ab6e9..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.6.tmp +++ /dev/null @@ -1,992 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.h - * \brief Wanpipe API Library header for Sangoma AFT T1/E1/Analog/BRI/Serial Hardware - - * \brief Provides User a Unified/OS Agnostic API to Wanpipe/Sangoma Drivers and Hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * =============================================================================== - */ - -#ifndef _LIBSNAGOMA_H -#define _LIBSNAGOMA_H - -#ifdef __cplusplus -extern "C" { /* for C++ users */ -#endif - -#include - -/*! - \def WANPIPE_TDM_API - \brief Used by compiler and driver to enable TDM API -*/ -#define WANPIPE_TDM_API 1 - -#ifdef WIN32 -#ifndef __WINDOWS__ -#define __WINDOWS__ -#endif -#include -#include -#include -#include -#include -#include - -#define _MYDEBUG -#define PROGRAM_NAME "LIBSANGOMA: " -#include - -/*! - \def _SAPI_CALL - \brief Windows WINAPI export function for DLL -*/ -#define _SAPI_CALL WINAPI -#define SANGOMA_INFINITE_API_POLL_WAIT INFINITE - -/*! - \def sangoma_msleep(x) - \brief milisecond sleep function -*/ -#define sangoma_msleep(x) Sleep(x) - -#else -/* L I N U X */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "wanpipe_api.h" - -/*! - \def _SAPI_CALL - \brief Not used in Linux -*/ -#define _SAPI_CALL - -/*! - \def INVALID_HANDLE_VALUE - \brief Invalid file handle value -1, Ported from Windows -*/ -#define INVALID_HANDLE_VALUE -1 - -/*! - \def SANGOMA_INFINITE_API_POLL_WAIT - \brief Infinite poll timeout value 0, Ported from Windows -*/ -#define SANGOMA_INFINITE_API_POLL_WAIT 0 - -/*! - \def __cdecl - \brief Ported from Windows - \def BOOL - \brief Boolean type int, Ported from Windows - \def DWORD - \brief DWORD type is int, Ported from Windows - \def FALSE - \brief FALSE value is 0, Ported from Windows - \def TRUE - \brief TRUE value is 1, Ported from Windows - \def sangoma_msleep(x) - \brief milisecond sleep function - \def _getch - \brief get character, Ported from Windows - \def Sleep - \brief milisecond sleep function - \def HANDLE - \brief file handle type int, Ported from Windows - \def TCHAR - \brief TCHAN type mapped to char, Ported from Windows - \def ULONG - \brief ULONG type mapped to unsigned long, Ported from Windows - \def UCHAR - \brief ULONG type mapped to unsigned char, Ported from Windows - \def USHORT - \brief USHORT type mapped to unsigned short, Ported from Windows - \def LPSTR - \brief LPSTR type mapped to unsigned char *, Ported from Windows - \def PUCHAR - \brief PUCHAR type mapped to unsigned char *, Ported from Windows - \def LPTHREAD_START_ROUTINE - \brief LPTHREAD_START_ROUTINE type mapped to unsigned char *, Ported from Windows - \def _stricmp - \brief _stricmp type mapped to _stricmp, Ported from Windows - \def _snprintf - \brief _snprintf type mapped to snprintf, Ported from Windows -*/ -#define __cdecl -#define BOOL int -#define DWORD int -#define FALSE 0 -#define TRUE 1 -#define sangoma_msleep(x) usleep(x*1000) -#define _getch getchar -#define Sleep sangoma_msleep -#define HANDLE int -#define TCHAR char -#define ULONG unsigned long -#define UCHAR unsigned char -#define USHORT unsigned short -#define LPSTR unsigned char * -#define PUCHAR unsigned char * -#define LPTHREAD_START_ROUTINE void * -#define _stricmp strcmp -#define _snprintf snprintf - - - -#endif/* WIN32 */ - -/*! - \def FNAME_LEN - \brief string length of a file name - \def FUNC_DBG(x) - \brief function debug print function - \def DBG_PRINT - \brief debug print function -*/ -#define FNAME_LEN 100 -#define FUNC_DBG(x) if(0)printf("%s():%d\n", x, __LINE__) -#define DBG_PRINT if(1)printf - -/*! - \typedef sangoma_api_hdr_t - \brief Backward comaptible define of wp_api_hdr_t -*/ -typedef wp_api_hdr_t sangoma_api_hdr_t; - -/*! - \struct sangoma_wait_obj - \brief Sangoma wait object structure. Used to setup a poll on a specific device - - This structure is used by sangoma_socket_waitfor_many() function. - This structure is initialized by sangoma_init_wait_obj() function. - - \typedef sangoma_wait_obj_t - \brief Sangoma wait object structure. Used to setup a poll on a specific device -*/ -typedef struct sangoma_wait_obj -{ - - /***************************************//** - * Private Variables - *******************************************/ - - /*! file descriptor of a device */ - sng_fd_t fd; - /*! poll flags use to configure system for polling on read/write/event */ - uint32_t flags_in; - /*! timeout in miliseconds in case of no event */ - uint32_t timeout; - -#if defined(WIN32) - /*! WINDOWS: overlapped device used for overlap IO */ - OVERLAPPED OverlappedApiPoll; - /*! WINDOWS: api structure used by windows poll system call */ - API_POLL_STRUCT api_poll; -#endif - - /*! type of the object to wait on. can be one of two: UNKNOWN_WAIT_OBJ and SANGOMA_WAIT_OBJ */ - uint32_t object_type; - - /***************************************//** - * Public Status Variables - *******************************************/ - - /*! poll flags returned to user indicating what event occoured read/write/event */ - uint32_t flags_out; - /*! span number used for debugging, when printing span associated with event */ - uint32_t span; - /*! chan number used for debugging, when printing chan associated with event */ - uint32_t chan; - -}sangoma_wait_obj_t; - -/*! - \enum _sangoma_object_type - \brief Wait object type definition - \typedef sangoma_object_type_t - \brief Wait object type definition -*/ -typedef enum _sangoma_object_type -{ - UNKNOWN_WAIT_OBJ, - SANGOMA_WAIT_OBJ -}sangoma_object_type_t; - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - -/*! - \fn sng_fd_t sangoma_open_tdmapi_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Restriced open, device will allowed to be open only once. -*/ -sng_fd_t _SAPI_CALL sangoma_open_tdmapi_span_chan(int span, int chan); - -/*! - \fn sng_fd_t __sangoma_open_tdmapi_span_chan(int span, int chan) - \brief Open a Device based on Span/Chan values - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _SAPI_CALL __sangoma_open_tdmapi_span_chan(int span, int chan); - -/*! - \fn sng_fd_t sangoma_open_tdmapi_span(int span) - \brief Open a first available device on a Span - \param span span number starting from 1 to 255 - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Unrestriced open, allows mutiple open calls on a single device -*/ -sng_fd_t _SAPI_CALL sangoma_open_tdmapi_span(int span); - - -/*! - \def sangoma_create_socket_intr - \brief Backward compatible open span chan call -*/ -#define sangoma_create_socket_intr sangoma_open_tdmapi_span_chan - - -/*! - \def LIBSANGOMA_TDMAPI_CTRL - \brief Global control device feature -*/ -#ifndef LIBSANGOMA_TDMAPI_CTRL -#define LIBSANGOMA_TDMAPI_CTRL 1 -#endif - -/*! - \fn sng_fd_t sangoma_open_tdmapi_ctrl(void) - \brief Open a Global Control Device - \return File Descriptor - negative=error 0 or greater = fd - - The global control device receives events for all devices - configured. -*/ -sng_fd_t sangoma_open_tdmapi_ctrl(void); - - -/*! - \fn void sangoma_socket_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void - -*/ -void _SAPI_CALL sangoma_socket_close(sng_fd_t *fd); - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -/*! - \fn int sangoma_writemsg_tdm(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) - \brief Write Data to device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be transmitted - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return transmit size, must be equal to datalen, anything else is error - - In case of error return code, one must check the header operation_status - variable to identify the reason of an error. Please refer to the error codes. -*/ - -int _SAPI_CALL sangoma_writemsg_tdm(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, unsigned short datalen, int flag); - - -/*! - \fn int sangoma_readmsg_tdm(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) - \brief Read Data from device - \param fd device file descriptor - \param hdrbuf pointer to header structure wp_api_hdr_t - \param hdrlen size of wp_api_hdr_t - \param databuf pointer to data buffer to be received - \param datalen length of data buffer - \param flag currently not used, set to 0 - \return received size, must be equal to datalen, anything else is error or busy - - In case of error return code, one must check the header operation_status - variable to identify the reason of error. Please refer to the error codes. -*/ -int _SAPI_CALL sangoma_readmsg_tdm(sng_fd_t fd, void *hdrbuf, int hdrlen, - void *databuf, int datalen, int flag); - -#define sangoma_readmsg_socket sangoma_readmsg_tdm -#define sangoma_sendmsg_socket sangoma_writemsg_tdm - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - -/*! - \fn int sangoma_socket_waitfor(sng_fd_t fd, int timeout, int flags_in, unsigned int *flags_out) - \brief Wait for a single file descriptor - poll() - \param fd device file descriptor - \param timeout timeout in miliseconds in case of no event - \param flags_in events to wait for (read/write/event) - \param flags_out events that occured (read/write/event) - \return negative: error, 0: timeout, positive: event occured check in *flags_out -*/ -int _SAPI_CALL sangoma_socket_waitfor(sng_fd_t fd, int timeout, int flags_in, unsigned int *flags_out); - -/*! - \fn int sangoma_socket_waitfor_many(sangoma_wait_obj_t sangoma_wait_objects[], int number_of_sangoma_wait_objects, uint32_t system_wait_timeout) - \brief Wait for multiple file descriptors - poll() - \param sangoma_wait_objects pointer to array of file descriptors to wait for - \param number_of_sangoma_wait_objects size of the array of file descriptors - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: error, 0: timeout, positive: event occured check in sangoma_wait_objects -*/ -int _SAPI_CALL sangoma_socket_waitfor_many(sangoma_wait_obj_t sangoma_wait_objects[], - int number_of_sangoma_wait_objects, - uint32_t system_wait_timeout); - -/*! - \fn void sangoma_init_wait_obj(sangoma_wait_obj_t *sng_wait_obj, sng_fd_t fd, int span, int chan, int timeout, int flags_in, int object_type) - \brief Initialize a wait object that will be used in sangoma_socket_waitfor_many() function - \param sng_wait_obj pointer a single device object - \param fd device file descriptor - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \param timeout timeout in miliseconds in case of no event - \param flags_in events to wait for (read/write/event) - \param object_type type of the wait object. currently can be one of two: SANGOMA_WAIT_OBJ and UNKNOWN_WAIT_OBJ - \return void -*/ -void _SAPI_CALL sangoma_init_wait_obj(sangoma_wait_obj_t *sng_wait_obj, sng_fd_t fd, int span, int chan, int timeout, int flags_in, int object_type); - - -/*! - \fn void sangoma_release_wait_obj(sangoma_wait_obj_t *sng_wait_obj) - \brief De-allocate all resources in a wait object - \param sng_wait_obj pointer a single device object - \return void -*/ -void _SAPI_CALL sangoma_release_wait_obj(sangoma_wait_obj_t *sng_wait_obj); - -/*! - \fn void sangoma_signal_wait_obj(sangoma_wait_obj_t *sng_wait_obj) - \brief Set wait object to a signalled state - \param sng_wait_obj pointer a single device object - \return void -*/ -void _SAPI_CALL sangoma_signal_wait_obj(sangoma_wait_obj_t *sng_wait_obj); - - -/************************************************************//** - * Device EVENT/MANAGEMENT Functions - ***************************************************************/ - -/*! - \fn int sangoma_tdm_read_event(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Read API Events - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - The TDM API structure will be populated with a TDM API or WAN Event. - This function usually used after wait() function indicated that event - has occured. -*/ -int _SAPI_CALL sangoma_tdm_read_event(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - - -/*! - \fn int sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) - \brief Execute Sangoma Management Command - \param fd device file descriptor - \param wan_udp management command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp); - -/*! - \fn int sangoma_tdm_cmd_exec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Execute Sangoma TDM API Command - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_cmd_exec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_get_full_cfg(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Read tdm api device configuration - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int period) - \brief Set Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \param period value in miliseconds (1,2,5,10) - \return non-zero: error, 0: ok - - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int period); - -/*! - \fn int sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Get Tx/Rx Period in Milliseconds - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured period value -*/ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Get Tx/Rx MTU/MRU in bytes - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured mtu/mru in bytes -*/ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_flush_bufs(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Flush buffers from current channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - -*/ -int _SAPI_CALL sangoma_tdm_flush_bufs(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int poll_in_sec) - \brief Enable RBS Events on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param poll_in_sec driver poll period for rbs events - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int poll_in_sec); - -/*! - \fn int sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Disable RBS Events for a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char rbs) - \brief Write RBS Bits on a device - \param fd device file descriptor - \param tdm_api tdm api command structure - \param rbs rbs bits (ABCD) - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char rbs); - - -/*! - \fn int sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Enable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Disable DTMF Detection on Octasic chip (if hw supports it) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Enable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Disable DTMF Detection on Analog/Remora SLIC Chip - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Enable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Disable RX HOOK Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Enable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Disable RING Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - - -/*! - \fn int sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Enable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Disable RING DETECT Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Enable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Disable RING TRIP Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, uint16_t tone_id) - \brief Transmit a TONE on this device (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param tone_id tone type to transmit - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, uint16_t tone_id); - -/*! - \fn int sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Enable TONE Events (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Tranmsmit TX SIG ON HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Tranmsmit TX SIG OFF HOOK (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Tranmsmit TX SIG START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Tranmsmit TX SIG KEWL START (Analog Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on Analog Cards -*/ -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Enable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Disable HWEC on this channel - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on cards that have HWEC -*/ -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Get Front End Alarms (T1/E1 Only) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - Supported only on T1/E1 Cards -*/ -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - - - -#ifdef WP_TDM_FEATURE_LINK_STATUS -# ifndef LIBSANGOMA_GET_LINKSTATUS -/*! - \def LIBSANGOMA_GET_LINKSTATUS - \brief Get Link Status feature -*/ -# define LIBSANGOMA_GET_LINKSTATUS 1 -# endif - -/*! - \fn int sangoma_tdm_get_link_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - -*/ -int _SAPI_CALL sangoma_tdm_get_link_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char *current_status); -#endif - -/* set current Line Connection state - Connected/Disconnected */ -#ifndef LIBSANGOMA_GET_FESTATUS -/*! - \def LIBSANGOMA_GET_FESTATUS - \brief Get Front End Status feature -*/ -#define LIBSANGOMA_GET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_tdm_set_fe_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char new_status) - \brief Set Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param new_status new status 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -*/ -int _SAPI_CALL sangoma_tdm_set_fe_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char new_status); - -#ifndef LIBSANGOMA_GET_HWCODING -/*! - \def LIBSANGOMA_GET_HWCODING - \brief Get HW Coding Feature -*/ -#define LIBSANGOMA_GET_HWCODING 1 -#endif - -/*! - \fn int sangoma_tdm_get_hw_coding(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Get HW Voice Coding (ulaw/alaw) - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will return the low level voice coding - depending on configuration. (ulaw or alaw) -*/ -int _SAPI_CALL sangoma_tdm_get_hw_coding(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - - -#ifndef LIBSANGOMA_GET_HWDTMF -/*! - \def LIBSANGOMA_GET_HWDTMF - \brief HW DTMF Feature -*/ -#define LIBSANGOMA_GET_HWDTMF 1 -#endif -/*! - \fn int sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Check if hwdtmf support is available - \param fd device file descriptor - \param tdm_api tdm api command structure - \return non-zero: error, 0: ok - - This function will check if hw supports HW DTMF. -*/ -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -/*! - \fn int sangoma_span_chan_toif(int span, int chan, char *interface_name) - \brief Convert Span & Chan to interface name - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \param interface_name pointer to string where interface name will be written - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name); - -/*! - \fn int sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) - \brief Convert Interace Name to Span & Chan - \param interface_name pointer to string containing interface name - \param span integer pointer where to write span value - \param chan integer pointer where to write chan value - \return non-zero = error, 0 = ok -*/ -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan); - - - -/*================================================================ - * DEPRECATED Function Calls - Not to be used any more - * Here for backward compatibility - *================================================================*/ - - -#ifndef LIBSANGOMA_SET_FESTATUS -/*! - \def LIBSANGOMA_SET_FESTATUS - \brief Set Front End Status Feature -*/ -#define LIBSANGOMA_SET_FESTATUS 1 -#endif - -/*! - \fn int sangoma_tdm_get_fe_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char *current_status) - \brief Get Device Link Status (Connected/Disconnected) - \param fd device file descriptor - \param tdm_api tdm api command structure - \param current_status pointer where result will be filled: 0=Link UP 1=Link Down - \return non-zero: error, 0: ok -> check current_status - - Deprecated - replaced by sangoma_tdm_get_link_status function -*/ -int _SAPI_CALL sangoma_tdm_get_fe_status(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, unsigned char *current_status); - - -/*! - \fn int sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int codec) - \brief Set TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \param codec codec to set (ulaw/alaw/slinear) - \return non-zero: error, 0: ok - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int codec); - -/*! - \fn int sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Get Configured TDM Codec per chan - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured codec value - - Deprecated Function - Here for backward compatibility - Only valid in CHAN Operation Mode -*/ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - - -/*! - \fn sng_fd_t sangoma_create_socket_by_name(char *device, char *card) - \brief Open a device based on a interface and card name - \param device interface name - \param card card name - \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor - - Deprecated - here for backward compatibility -*/ -sng_fd_t _SAPI_CALL sangoma_create_socket_by_name(char *device, char *card); - -/*! - \fn int sangoma_interface_toi(char *interface_name, int *span, int *chan) - \brief Convert Span & Chan to interface name - \param interface_name pointer to string where interface name will be written - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \return non-zero = error, 0 = ok - Deprecated - here for backward compatibility -*/ -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan); - - -/*! - \fn int sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int power) - \brief Set Power Level - so only data matching the power level would be passed up. - \param fd device file descriptor - \param tdm_api tdm api command structure - \param power value of power - \return non-zero: error, 0: ok - - Deprecated - not used/implemented -*/ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api, int power); - -/*! - \fn int sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api) - \brief Get Configured Power Level - \param fd device file descriptor - \param tdm_api tdm api command structure - \return negative: error or configured power level - - Deprecated - not used/implemented -*/ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_tdm_api_t *tdm_api); - -#ifdef __cplusplus -} -#endif - -#endif /* _LIBSNAGOMA_H */ - diff --git a/api/libsangoma/.svn/tmp/tempfile.7.tmp b/api/libsangoma/.svn/tmp/tempfile.7.tmp deleted file mode 100644 index 18ead71..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.7.tmp +++ /dev/null @@ -1,1753 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.c - * \brief Wanpipe API Code Library for Sangoma AFT T1/E1/Analog/BRI/Serial hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - ******************************************************************************* - */ - - -#include "libsangoma.h" - -/*! - \def DFT_CARD - \brief Default card name. Deprecated not used - */ -#define DFT_CARD "wanpipe1" - - -#ifndef WP_API_FEATURE_FE_ALARM -#warning "Warning: SANGOMA API FE ALARM not supported by driver" -#endif - -#ifndef WP_API_FEATURE_DTMF_EVENTS -#warning "Warning: SANGOMA API DTMF not supported by driver" -#endif - -#ifndef WP_API_FEATURE_EVENTS -#warning "Warning: SANGOMA API EVENTS not supported by driver" -#endif - -#ifndef WP_API_FEATURE_LINK_STATUS -#warning "Warning: SANGOMA API LINK STATUS not supported by driver" -#endif - -/*! - \def DEV_NAME_LEN - \brief String length of device name - */ -#define DEV_NAME_LEN 100 - - -static void libsng_dbg(const char * fmt, ...) -{ - va_list args; - char buf[1024]; - va_start(args, fmt); - _vsnprintf(buf, sizeof(buf), fmt, args); -#if defined(WIN32) - OutputDebugString(buf); -#else - printf(buf); -#endif - va_end(args); -} - -/*********************************************************************//** - * WINDOWS Only Section - *************************************************************************/ - -#define DBG_POLL if(0)libsng_dbg -#define DBG_POLL1 if(0)libsng_dbg -#define DBG_EVNT if(0)libsng_dbg -#define DBG_ERR if(0)libsng_dbg -#define DBG_INIT if(0)libsng_dbg - -#if defined(WIN32) - -/* - \fn static void DecodeLastError(LPSTR lpszFunction) - \brief Decodes the Error in radable format. - \param lpszFunction error string - - Private Windows Only Function - */ -static void DecodeLastError(LPSTR lpszFunction) -{ - LPVOID lpMsgBuf; - DWORD dwLastErr = GetLastError(); - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - dwLastErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPTSTR) &lpMsgBuf, - 0, - NULL - ); - // Display the string. - DBG_POLL("Last Error in %s(): %s (%d)\n", lpszFunction, lpMsgBuf, dwLastErr); - // Free the buffer. - LocalFree( lpMsgBuf ); -} - -/* - \fn static int handle_device_ioctl_result(int bResult) - \brief Checks result code of ioctl - \param bResult result of ioctl call - - Private Windows Only Function - */ -static u16 handle_device_ioctl_result(int bResult, char *caller_name) -{ - if(bResult == 0){ - //error - DecodeLastError(caller_name); - return 1; - - }else{ - return 0; - } -} - -/* - \fn static int DoManagementCommand(HANDLE fd, wan_udp_hdr_t* wan_udp) - \brief Executes Driver Management Command - \param fd device file descriptor - \param wan_udp managemet cmd structure - - Private Windows Function - */ -static int DoManagementCommand(HANDLE fd, wan_udp_hdr_t* wan_udp) -{ - DWORD ln, bIoResult; - unsigned char id = 0; - - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - bIoResult = DeviceIoControl( - fd, - IoctlManagementCommand, - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int DoTdmvApiCommand(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) - \brief Executes Driver TDM API Command - \param fd device file descriptor - \param api_cmd tdm_api managemet cmd structure - - Private Windows Function - */ -static int DoTdmvApiCommand(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlTdmApiCommand, - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int tdmv_api_ioctl(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) - \brief Executes Driver TDM API Command Wrapper Function - \param fd device file descriptor - \param api_cmd tdm_api managemet cmd structure - - Private Windows Function - */ -static int tdmv_api_ioctl(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - if(DoTdmvApiCommand(fd, api_cmd)){ - return SANG_STATUS_GENERAL_ERROR; - } - - return api_cmd->result; -} - -/* - \fn static USHORT DoReadCommand(HANDLE drv, RX_DATA_STRUCT * pRx) - \brief API READ Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - In Legacy API mode this fuction will Block if there is no data. - In API mode no function is allowed to Block - */ -static USHORT DoReadCommand(HANDLE drv, RX_DATA_STRUCT * pRx) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlReadCommand, - (LPVOID)NULL,//NO input buffer! - 0, - (LPVOID)pRx, - sizeof(RX_DATA_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static UCHAR DoWriteCommand(HANDLE drv, TX_DATA_STRUCT * pTx) - \brief API Write Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - In Legacy API mode this fuction will Block if data is busy. - In API mode no function is allowed to Block - */ -static UCHAR DoWriteCommand(HANDLE drv, - void *input_data_buffer, u32 size_of_input_data_buffer, - void *output_data_buffer, u32 size_of_output_data_buffer - ) -{ - DWORD BytesReturned, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlWriteCommand, - (LPVOID)input_data_buffer, - size_of_input_data_buffer, - (LPVOID)output_data_buffer, - size_of_output_data_buffer, - (LPDWORD)(&BytesReturned), - (LPOVERLAPPED)NULL); - - return (UCHAR)handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static USHORT DoApiPollCommand(HANDLE drv, API_POLL_STRUCT *api_poll_ptr) - \brief Non Blocking API Poll function used to find out if Rx Data, Events or - Free Tx buffer available - \param drv device file descriptor - \param api_poll_ptr poll device that stores polling information read/write/event - \param overlapped pointer to system overlapped io structure. - - Private Windows Function - This function blocks and waits for events: read/write/event/timeout - */ -static USHORT DoApiPollCommand(HANDLE drv, API_POLL_STRUCT *api_poll_ptr) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlApiPoll, - (LPVOID)NULL, - 0L, - (LPVOID)api_poll_ptr, - sizeof(API_POLL_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -static int _SAPI_CALL sangoma_socket_poll(sangoma_wait_obj_t *sng_wait_obj) -{ - API_POLL_STRUCT *api_poll = &sng_wait_obj->api_poll; -#if 0 - DBG_POLL("%s(): span: %d, chan: %d\n", __FUNCTION__, sng_wait_obj->span, sng_wait_obj->chan); -#endif - memset(api_poll, 0x00, sizeof(API_POLL_STRUCT)); - - api_poll->user_flags_bitmap = sng_wait_obj->flags_in; - - /* This call will return immediatly because it is "overlapped"! - * Caller of this function must implement the actual wait. */ - if(DoApiPollCommand(sng_wait_obj->fd, api_poll)){ - //failed - return -1; - } - return 0; -} - -static USHORT DoSetSharedEventCommand(HANDLE drv, PREGISTER_EVENT event) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlSetSharedEvent, - (LPVOID)event, - sizeof(REGISTER_EVENT), - (LPVOID)event, - sizeof(REGISTER_EVENT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -#endif /* WIN32 */ - - -/*********************************************************************//** - * Common Linux & Windows Code - *************************************************************************/ - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void -*/ -void _SAPI_CALL sangoma_close(sng_fd_t *fd) -{ -#if defined(WIN32) - if( *fd != INVALID_HANDLE_VALUE){ - CloseHandle(*fd); - *fd = INVALID_HANDLE_VALUE; - } -#else - if (*fd >= 0) { - close(*fd); - *fd = -1; - } -#endif -} - -/*! - \fn void sangoma_init_wait_obj(sangoma_wait_obj_t *sng_wait_obj, sng_fd_t fd, int span, int chan, int timeout, int flags_in, int object_type) - \brief Initialize a wait object that will be used in sangoma_socket_waitfor_many() function - \param sng_wait_obj pointer a single device object - \param fd device file descriptor - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \param flags_in events to wait for (read/write/event) - \param object_type defines whether file descriptor is a sangoma device or other sytem file descriptor. - \return 0: success, non-zero: error -*/ -int _SAPI_CALL sangoma_init_wait_obj(sangoma_wait_obj_t *sng_wait_obj, sng_fd_t fd, int span, int chan, int flags_in, int object_type) -{ - int err = 0; - - sng_wait_obj->fd = fd; - sng_wait_obj->flags_in = flags_in; - sng_wait_obj->span = span; - sng_wait_obj->chan = chan; - sng_wait_obj->object_type = object_type; - -#if defined(WIN32) - DBG_INIT("%s(): fd:0x%X, span:%d, chan:%d, flags_in:0x%X, object_type:%s", - __FUNCTION__, fd, span, chan, flags_in, (object_type==SANGOMA_WAIT_OBJ?"SANGOMA_WAIT_OBJ":"UNKNOWN_WAIT_OBJ")); - - memset(&sng_wait_obj->SharedEvent, 0x00, sizeof(sng_wait_obj->SharedEvent)); - sng_wait_obj->SharedEvent.hEvent = CreateEvent( NULL, FALSE, FALSE, NULL); - if(NULL == sng_wait_obj->SharedEvent.hEvent){ - return 1; - } - - if(SANGOMA_WAIT_OBJ == object_type){ - err = DoSetSharedEventCommand(fd, &sng_wait_obj->SharedEvent); - } - - DBG_INIT("%s(): returning: %d", __FUNCTION__, err); -#endif - - return err; -} - -/*! - \fn void sangoma_release_wait_obj(sangoma_wait_obj_t *sng_wait_obj) - \brief De-allocate all resources in a wait object - \param sng_wait_obj pointer a single device object - \return void -*/ -void _SAPI_CALL sangoma_release_wait_obj(sangoma_wait_obj_t *sng_wait_obj) -{ - if(sng_wait_obj->fd != INVALID_HANDLE_VALUE){ - sangoma_close(&sng_wait_obj->fd); - sng_wait_obj->fd = INVALID_HANDLE_VALUE; - } - - sng_wait_obj->object_type = UNKNOWN_WAIT_OBJ; -} - -/*! - \fn void sangoma_signal_wait_obj(sangoma_wait_obj_t *sng_wait_obj) - \brief Set wait object to a signalled state - \param sng_wait_obj pointer a single device object - \return void -*/ -void _SAPI_CALL sangoma_signal_wait_obj(sangoma_wait_obj_t *sng_wait_obj) -{ -#if defined(WIN32) - if(sng_wait_obj->SharedEvent.hEvent){ - SetEvent(sng_wait_obj->SharedEvent.hEvent); - } -#else - //FIXME: implement signalling of the sng_wait_obj->fd ?? -#endif -} - -/*! - \fn int sangoma_socket_waitfor_many(sangoma_wait_obj_t sangoma_wait_objects[], int number_of_sangoma_wait_objects, uint32_t system_wait_timeout) - \brief Wait for multiple file descriptors - poll() - \param sangoma_wait_objects pointer to array of file descriptors to wait for - \param number_of_sangoma_wait_objects size of the array of file descriptors - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: error, 0: timeout, positive: event occured check in sangoma_wait_objects -*/ -int _SAPI_CALL sangoma_socket_waitfor_many(sangoma_wait_obj_t sangoma_wait_objects[], int number_of_sangoma_wait_objects, uint32_t system_wait_timeout) -{ - int i; -#if defined(WIN32) - HANDLE hEvents[MAXIMUM_WAIT_OBJECTS]; - int rc, at_least_one_poll_set_flags_out = 0; - - if(number_of_sangoma_wait_objects > MAXIMUM_WAIT_OBJECTS){ - DBG_EVNT("Error: %s(): 'number_of_sangoma_wait_objects': %d is greater than the Maximum of: %d\n", __FUNCTION__, - number_of_sangoma_wait_objects, MAXIMUM_WAIT_OBJECTS); - return -1; - } - - if(number_of_sangoma_wait_objects < 1){ - DBG_EVNT("Error: %s(): 'number_of_sangoma_wait_objects': %d is less than the Minimum of: 1!\n", __FUNCTION__, - number_of_sangoma_wait_objects); - return -2; - } - - DBG_POLL1("%s(): line: %d: number_of_sangoma_wait_objects: %d\n", __FUNCTION__, __LINE__, number_of_sangoma_wait_objects); - - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - hEvents[i] = sangoma_wait_objects[i].SharedEvent.hEvent; - sangoma_wait_objects[i].flags_out = 0; - } - - /* Note this loop is especially important for POLLOUT! */ - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - - if(sangoma_wait_objects[i].object_type == SANGOMA_WAIT_OBJ){ - - if(sangoma_socket_poll(&sangoma_wait_objects[i])){ - return -3; - } - - if(sangoma_wait_objects[i].api_poll.operation_status != SANG_STATUS_SUCCESS){ - - DBG_EVNT("Error: %s(): Invalid Operation Status: %s(%d)\n", __FUNCTION__, - SDLA_DECODE_SANG_STATUS(sangoma_wait_objects[i].api_poll.operation_status), - sangoma_wait_objects[i].api_poll.operation_status); - return -4; - } - - if(sangoma_wait_objects[i].api_poll.poll_events_bitmap){ - sangoma_wait_objects[i].flags_out = sangoma_wait_objects[i].api_poll.poll_events_bitmap; - at_least_one_poll_set_flags_out = 1; - } - } - } - - if(at_least_one_poll_set_flags_out){ - DBG_POLL1("%s(): line: %d: at_least_one_poll_set_flags_out is set\n", __FUNCTION__, __LINE__); - return 1; - } - - DBG_POLL1("%s(): line: %d: going into WaitForMultipleObjects()\n", __FUNCTION__, __LINE__); - - /* wait untill at least one of the events is signalled OR a 'system_wait_timeout' occured */ - if(WAIT_TIMEOUT == WaitForMultipleObjects(number_of_sangoma_wait_objects, &hEvents[0], FALSE, system_wait_timeout)){ - DBG_POLL1("%s(): line: %d: WaitForMultipleObjects() timedout\n", __FUNCTION__, __LINE__); - return 0; - } - - DBG_POLL1("%s(): line: %d: returned from WaitForMultipleObjects()\n", __FUNCTION__, __LINE__); - - /* WaitForMultipleObjects() could be waken by a Sangoma or by a non-Sangoma wait object */ - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - - if(sangoma_wait_objects[i].object_type == SANGOMA_WAIT_OBJ){ - - if(sangoma_socket_poll(&sangoma_wait_objects[i])){ - return -5; - } - - if(sangoma_wait_objects[i].api_poll.operation_status != SANG_STATUS_SUCCESS){ - - DBG_EVNT("Error: %s(): Invalid Operation Status: %s(%d)\n", __FUNCTION__, - SDLA_DECODE_SANG_STATUS(sangoma_wait_objects[i].api_poll.operation_status), - sangoma_wait_objects[i].api_poll.operation_status); - return -6; - } - - if(sangoma_wait_objects[i].api_poll.poll_events_bitmap){ - sangoma_wait_objects[i].flags_out = sangoma_wait_objects[i].api_poll.poll_events_bitmap; - } - } - } - - return 2; -#else - struct pollfd pfds[number_of_sangoma_wait_objects]; - int res; - - memset(pfds, 0, sizeof(pfds)); - - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - pfds[i].fd = sangoma_wait_objects[i].fd; - pfds[i].events = sangoma_wait_objects[i].flags_in; - } - - res = poll(pfds, number_of_sangoma_wait_objects, system_wait_timeout); - if (res > 0) { - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - sangoma_wait_objects[i].flags_out = pfds[i].revents; - } - } - - return res; -#endif -} - - -/*! - \fn int sangoma_socket_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int timeout, int flags_in, unsigned int *flags_out) - \brief Wait for a single file descriptor - poll() - \param sangoma_wait_obj pointer to array of file descriptors to wait for - \param timeout timeout in miliseconds in case of no event - \param flags_in events to wait for (read/write/event) - \param flags_out events that occured (read/write/event) - \return negative: error, 0: timeout, positive: event occured check in *flags_out -*/ -int _SAPI_CALL sangoma_socket_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int timeout, int flags_in, unsigned int *flags_out) -{ - int err; - - sangoma_wait_obj->flags_in = flags_in; - - err = sangoma_socket_waitfor_many(sangoma_wait_obj, 1, timeout); - - if(err < 0 || err == 0){ - return err; - } - - *flags_out = sangoma_wait_obj->flags_out; - - return 1; -} - -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) -{ -#if defined(__WINDOWS__) - if(DoManagementCommand(fd, wan_udp)){ - return 1; - } -#else - unsigned char id = 0; - int err=0; - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - err=ioctl(fd,WANPIPE_IOCTL_PIPEMON,wan_udp); - if (err < 0) { - return 1; - } -#endif - - if(wan_udp->wan_udphdr_return_code != WAN_CMD_OK){ - return 2; - } - return 0; -} - -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name) -{ -#if defined(WIN32) -/* FIXME: Not implemented */ - return -1; -#else - sprintf(interface_name,"s%ic%i",span,chan); -#endif - return 0; -} - -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan) -{ - char *p=NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'g') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 'w') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) -{ - char *p = NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'c') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 's') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -sng_fd_t _SAPI_CALL sangoma_open_api_span_chan(int span, int chan) -{ - sng_fd_t fd = INVALID_HANDLE_VALUE; - wanpipe_api_t tdm_api; - int err; - - fd = __sangoma_open_api_span_chan(span, chan); - -#if defined(__WINDOWS__) - if(fd == INVALID_HANDLE_VALUE){ - //DBG_EVNT("Span: %d, chan: %d: is not running, consider 'busy'\n", span, chan); - return fd; - } -#else - if (fd < 0) { - return fd; - } -#endif - - memset(&tdm_api,0,sizeof(tdm_api)); - tdm_api.wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - err=sangoma_cmd_exec(fd,&tdm_api); - if (err){ - sangoma_close(&fd); - return fd; - } - - if (tdm_api.wp_cmd.open_cnt > 1) { - /* this is NOT the first open request for this span/chan */ - sangoma_close(&fd); - fd = INVALID_HANDLE_VALUE;/* fd is NOT valid anymore */ - } - - return fd; -} - -/* no checks done for multiple open */ -sng_fd_t _SAPI_CALL __sangoma_open_api_span_chan(int span, int chan) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - - /* Form the Interface Name from span and chan number (i.e. wanpipe1_if1). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_INTERFACE_NAME_FORM, span, chan); - -#if defined(WIN32) - _snprintf(fname , FNAME_LEN, "\\\\.\\%s", tmp_fname); - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - //sprintf(fname,"/dev/wanpipe%d_if%d",span,chan); - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - -sng_fd_t sangoma_open_api_ctrl(void) -{ -#if defined(WIN32) - sng_fd_t fd = INVALID_HANDLE_VALUE; - -#pragma message("sangoma_open_api_ctrl: Not support on Windows") -#else - sng_fd_t fd=-1; - - fd = open("/dev/wanpipe_ctrl", O_RDWR); -#endif - - return fd; -} - -sng_fd_t _SAPI_CALL sangoma_create_socket_by_name(char *device, char *card) -{ - int span,chan; - sangoma_interface_toi(device,&span,&chan); - - return sangoma_open_api_span_chan(span,chan); -} - - -sng_fd_t _SAPI_CALL sangoma_open_api_span(int span) -{ - int i=0; - sng_fd_t fd = INVALID_HANDLE_VALUE; - - for(i = 1; i < 32; i++){ - - fd = sangoma_open_api_span_chan(span, i); - -#if defined(WIN32) - if(fd != INVALID_HANDLE_VALUE){ -#else - if (fd >= 0) { -#endif - - //found free chan - break; - } - - }//for() - - return fd; -} - -int _SAPI_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) -{ - int rx_len=0; - -#if defined(WIN32) - wp_api_hdr_t *rx_hdr = (wp_api_hdr_t*)hdrbuf; - wp_api_element_t wp_api_element; - - if(hdrlen != sizeof(wp_api_hdr_t)){ - //error - DBG_EVNT("Error: %s(): invalid size of user's 'header buffer'. Should be 'sizeof(wp_api_hdr_t)'.\n", __FUNCTION__); - return -1; - } - - if(DoReadCommand(fd, &wp_api_element)){ - //error - DBG_EVNT("Error: %s(): DoReadCommand() failed! Check messages log.\n", __FUNCTION__); - return -4; - } - - memcpy(rx_hdr, &wp_api_element.hdr, sizeof(wp_api_hdr_t)); - - switch(rx_hdr->operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: - /* ok */ - if(rx_hdr->data_length <= datalen){ - memcpy(databuf, wp_api_element.data, rx_hdr->data_length); - }else{ - rx_hdr->operation_status = SANG_STATUS_BUFFER_TOO_SMALL; - } - break; - default: - /* note that SANG_STATUS_DEVICE_BUSY is NOT an error! */ - if(0)DBG_EVNT("Error: %s(): Operation Status: %s(%d)\n", __FUNCTION__, - SDLA_DECODE_SANG_STATUS(rx_hdr->operation_status), rx_hdr->operation_status); - return -5; - } - - rx_len = rx_hdr->data_length; -#else - struct msghdr msg; - struct iovec iov[2]; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - rx_len = read(fd,&msg,datalen+hdrlen); - - if (rx_len <= sizeof(wp_api_hdr_t)){ - return -EINVAL; - } - - rx_len-=sizeof(wp_api_hdr_t); -#endif - return rx_len; -} - -int _SAPI_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) -{ - int bsent=-1; - wp_api_hdr_t *wp_api_hdr = hdrbuf; - - if (hdrlen != sizeof(wp_api_hdr_t)) { - DBG_ERR("Error: sangoma_writemsg() failed! hdrlen (%i) != sizeof(wp_api_hdr_t) (%i)\n", - hdrlen,sizeof(wp_api_hdr_t)); - wp_api_hdr->operation_status = SANG_STATUS_TX_HDR_TOO_SHORT; - return -1; - } - -#if defined(WIN32) - //queue data for transmission - if(DoWriteCommand(fd, databuf, datalen, hdrbuf, hdrlen)){ - //error - DBG_EVNT("Error: DoWriteCommand() failed!! Check messages log.\n"); - return -1; - } - - bsent=0; - //check that frame was transmitted - switch(wp_api_hdr->operation_status) - { - case SANG_STATUS_SUCCESS: - bsent = datalen; - break; - default: - DBG_EVNT("Error: %s(): Operation Status: %s(%d)\n", __FUNCTION__, - SDLA_DECODE_SANG_STATUS(wp_api_hdr->operation_status), wp_api_hdr->operation_status); - break; - }//switch() -#else - struct msghdr msg; - struct iovec iov[2]; - wp_api_hdr_t *tx_el=hdrbuf; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - bsent = write(fd,&msg,datalen+hdrlen); - - if (bsent == (datalen+hdrlen)){ - tx_el->wp_api_hdr_operation_status=SANG_STATUS_SUCCESS; - bsent-=sizeof(wp_api_hdr_t); - } else if (errno == EBUSY){ - tx_el->wp_api_hdr_operation_status=SANG_STATUS_DEVICE_BUSY; - } else { - tx_el->wp_api_hdr_operation_status=SANG_STATUS_IO_ERROR; - } - tx_el->wp_api_hdr_data_length=bsent; -#endif - return bsent; -} - - -#ifdef WANPIPE_TDM_API - -/*======================================================== - * Execute TDM command - * - */ -int _SAPI_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - -#if defined(WIN32) - err = tdmv_api_ioctl(fd, &tdm_api->wp_cmd); -#else - err = ioctl(fd,SIOC_WANPIPE_TDM_API,&tdm_api->wp_cmd); - if (err < 0){ - char tmp[50]; - sprintf(tmp,"TDM API: CMD: %i\n",tdm_api->wp_cmd.cmd); - perror(tmp); - return -1; - } -#endif - return err; -} - -/*======================================================== - * Get Full TDM API configuration per channel - * - */ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FULL_CFG; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - -#if 1 - printf("TDM API CFG:\n"); - printf("\thw_tdm_coding:\t%d\n",tdm_api->wp_cmd.hw_tdm_coding); - printf("\thw_mtu_mru:\t%d\n",tdm_api->wp_cmd.hw_mtu_mru); - printf("\tusr_period:\t%d\n",tdm_api->wp_cmd.usr_period); - printf("\ttdm_codec:\t%d\n",tdm_api->wp_cmd.tdm_codec); - printf("\tpower_level:\t%d\n",tdm_api->wp_cmd.power_level); - printf("\trx_disable:\t%d\n",tdm_api->wp_cmd.rx_disable); - printf("\ttx_disable:\t%d\n",tdm_api->wp_cmd.tx_disable); - printf("\tusr_mtu_mru:\t%d\n",tdm_api->wp_cmd.usr_mtu_mru); - printf("\tidle flag:\t0x%02X\n",tdm_api->wp_cmd.idle_flag); - -#ifdef WP_API_FEATURE_FE_ALARM - printf("\tfe alarms:\t0x%02X\n",tdm_api->wp_cmd.fe_alarms); -#endif - - printf("\trx pkt\t%d\ttx pkt\t%d\n",tdm_api->wp_cmd.stats.rx_packets, - tdm_api->wp_cmd.stats.tx_packets); - printf("\trx err\t%d\ttx err\t%d\n", - tdm_api->wp_cmd.stats.rx_errors, - tdm_api->wp_cmd.stats.tx_errors); -#ifndef __WINDOWS__ - printf("\trx ovr\t%d\ttx idl\t%d\n", - tdm_api->wp_cmd.stats.rx_fifo_errors, - tdm_api->wp_cmd.stats.tx_carrier_errors); -#endif -#endif - - return 0; -} - -/*======================================================== - * SET Codec on a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_CODEC; - tdm_api->wp_cmd.tdm_codec = codec; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Codec from a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_CODEC; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.tdm_codec; -} - -/*======================================================== - * SET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_USR_PERIOD; - tdm_api->wp_cmd.usr_period = period; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_PERIOD; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_period; -} - -/*======================================================== - * GET Current User Hardware Coding Format - * - * Coding Format will be ULAW/ALAW based on T1/E1 - */ - -int _SAPI_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_CODING; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_tdm_coding; -} - -#ifdef WP_API_FEATURE_DTMF_EVENTS -/*======================================================== - * GET Current User Hardware DTMF Enabled/Disabled - * - * Will return true if HW DTMF is enabled on Octasic - */ - -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_DTMF; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_dtmf; -} -#endif - -/*======================================================== - * GET Current User MTU/MRU values in bytes. - * - * The USER MTU/MRU values will change each time a PERIOD - * or CODEC is adjusted. - */ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_MTU_MRU; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_mtu_mru; -} - -/*======================================================== - * SET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_POWER_LEVEL; - tdm_api->wp_cmd.power_level = power; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_POWER_LEVEL; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.power_level; -} - -int _SAPI_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_BUFFERS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_RBS_EVENTS; - tdm_api->wp_cmd.rbs_poll=poll_in_sec; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - - -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_RBS_EVENTS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char rbs) -{ - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_WRITE_RBS_BITS; - tdm_api->wp_cmd.rbs_tx_bits=rbs; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - -#ifdef WP_API_FEATURE_EVENTS - wp_api_event_t *rx_event; - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_EVENT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - rx_event = &tdm_api->wp_cmd.event; - - - /* - The use of callbacks here is purely optional and is left - here for backward compatibility purposes. By default user - should handle events outside this funciton. This function - should only be used to read the event - */ - - switch (rx_event->wp_api_event_type){ - - case WP_API_EVENT_RBS: - if (tdm_api->wp_callback.wp_rbs_event) { - tdm_api->wp_callback.wp_rbs_event(fd,rx_event->wp_api_event_rbs_bits); - } - - break; - -#ifdef WP_API_FEATURE_DTMF_EVENTS - case WP_API_EVENT_DTMF: - if (tdm_api->wp_callback.wp_dtmf_event) { - tdm_api->wp_callback.wp_dtmf_event(fd, - rx_event->wp_api_event_dtmf_digit, - rx_event->wp_api_event_dtmf_type, - rx_event->wp_api_event_dtmf_port); - } - break; -#endif - - case WP_API_EVENT_RXHOOK: - if (tdm_api->wp_callback.wp_rxhook_event) { - tdm_api->wp_callback.wp_rxhook_event(fd, - rx_event->wp_api_event_hook_state); - } - break; - - case WP_API_EVENT_RING_DETECT: - if (tdm_api->wp_callback.wp_ring_detect_event) { - tdm_api->wp_callback.wp_ring_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - - case WP_API_EVENT_RING_TRIP_DETECT: - if (tdm_api->wp_callback.wp_ring_trip_detect_event) { - tdm_api->wp_callback.wp_ring_trip_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - -#ifdef WP_API_FEATURE_FE_ALARM - case WP_API_EVENT_ALARM: - if (tdm_api->wp_callback.wp_fe_alarm_event) { - tdm_api->wp_callback.wp_fe_alarm_event(fd, - rx_event->wp_api_event_alarm); - } - break; -#endif - -#ifdef WP_API_FEATURE_LINK_STATUS - /* Link Status */ - case WP_API_EVENT_LINK_STATUS: - if(tdm_api->wp_callback.wp_link_status_event){ - tdm_api->wp_callback.wp_link_status_event(fd, - rx_event->wp_api_event_link_status); - } - - break; -#endif - default: - printf("%d: Unknown TDM event!", (int)fd); - break; - } - - return 0; -#else - printf("Error: Read Event not supported!\n"); - return -1; -#endif -} - -#ifdef WP_API_FEATURE_DTMF_EVENTS -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return err; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_TRIP_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_KEWL; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_START; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_ONHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_OFFHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = tone_id; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = 0x00; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - -#endif - -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_HWEC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_HWEC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -/*======================================================== - * GET Front End Alarms - * - */ -#ifdef WP_API_FEATURE_FE_ALARM -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_ALARMS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *alarms=tdm_api->wp_cmd.fe_alarms; - - return 0; -} - -/* get current Line Connection state - Connected/Disconnected */ -int _SAPI_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} -#endif - -/* get current Line Connection state - Connected/Disconnected */ -#ifdef WP_API_FEATURE_LINK_STATUS -int _SAPI_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} - -/* set current Line Connection state - Connected/Disconnected. valid only for ISDN BRI */ -int _SAPI_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_FE_STATUS; - tdm_api->wp_cmd.fe_status = new_status; - - return sangoma_cmd_exec(fd, tdm_api); -} -#endif - -int _SAPI_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.tx_queue_sz; -} - -int _SAPI_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = size; - - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.rx_queue_sz; - -} - -int _SAPI_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = size; - - return sangoma_cmd_exec(fd, tdm_api); - -} - - - -#endif /* WANPIPE_TDM_API */ diff --git a/api/libsangoma/.svn/tmp/tempfile.8.tmp b/api/libsangoma/.svn/tmp/tempfile.8.tmp deleted file mode 100644 index 4056a9b..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.8.tmp +++ /dev/null @@ -1,2201 +0,0 @@ -/*******************************************************************************//** - * \file libsangoma.c - * \brief Wanpipe API Code Library for Sangoma AFT T1/E1/Analog/BRI/Serial hardware - * - * Author(s): Nenad Corbic - * David Rokhvarg - * Michael Jerris - * Anthony Minessale II - * - * Copyright: (c) 2005-2008 Nenad Corbic - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - ******************************************************************************* - */ - - -#include "libsangoma.h" - -/*! - \def DFT_CARD - \brief Default card name. Deprecated not used - */ -#define DFT_CARD "wanpipe1" - - -#ifndef WP_API_FEATURE_FE_ALARM -#warning "Warning: SANGOMA API FE ALARM not supported by driver" -#endif - -#ifndef WP_API_FEATURE_DTMF_EVENTS -#warning "Warning: SANGOMA API DTMF not supported by driver" -#endif - -#ifndef WP_API_FEATURE_EVENTS -#warning "Warning: SANGOMA API EVENTS not supported by driver" -#endif - -#ifndef WP_API_FEATURE_LINK_STATUS -#warning "Warning: SANGOMA API LINK STATUS not supported by driver" -#endif - -#ifndef WP_API_FEATURE_POL_REV -#warning "Warning: SANGOMA API Polarity Reversal not supported by driver" -#endif - - -/*! - \def DEV_NAME_LEN - \brief String length of device name - */ -#define DEV_NAME_LEN 100 - - -static void libsng_dbg(const char * fmt, ...) -{ - va_list args; - char buf[1024]; - va_start(args, fmt); - _vsnprintf(buf, sizeof(buf), fmt, args); -#if defined(WIN32) - OutputDebugString(buf); -#else - printf(buf); -#endif - va_end(args); -} - -/*********************************************************************//** - * WINDOWS Only Section - *************************************************************************/ - -#define DBG_POLL if(0)libsng_dbg -#define DBG_POLL1 if(0)libsng_dbg -#define DBG_EVNT if(0)libsng_dbg -#define DBG_ERR if(0)libsng_dbg -#define DBG_INIT if(0)libsng_dbg - -#if defined(WIN32) - -/* - \fn static void DecodeLastError(LPSTR lpszFunction) - \brief Decodes the Error in radable format. - \param lpszFunction error string - - Private Windows Only Function - */ -static void DecodeLastError(LPSTR lpszFunction) -{ - LPVOID lpMsgBuf; - DWORD dwLastErr = GetLastError(); - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - dwLastErr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPTSTR) &lpMsgBuf, - 0, - NULL - ); - // Display the string. - DBG_POLL("Last Error in %s(): %s (%d)\n", lpszFunction, lpMsgBuf, dwLastErr); - // Free the buffer. - LocalFree( lpMsgBuf ); -} - -/* - \fn static int handle_device_ioctl_result(int bResult) - \brief Checks result code of ioctl - \param bResult result of ioctl call - - Private Windows Only Function - */ -static u16 handle_device_ioctl_result(int bResult, char *caller_name) -{ - if(bResult == 0){ - //error - DecodeLastError(caller_name); - return 1; - - }else{ - return 0; - } -} - -/* - \fn static int DoManagementCommand(HANDLE fd, wan_udp_hdr_t* wan_udp) - \brief Executes Driver Management Command - \param fd device file descriptor - \param wan_udp managemet cmd structure - - Private Windows Function - */ -static int DoManagementCommand(HANDLE fd, wan_udp_hdr_t* wan_udp) -{ - DWORD ln, bIoResult; - unsigned char id = 0; - - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - bIoResult = DeviceIoControl( - fd, - IoctlManagementCommand, - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPVOID)wan_udp, - sizeof(wan_udp_hdr_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int DoTdmvApiCommand(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) - \brief Executes Driver TDM API Command - \param fd device file descriptor - \param api_cmd tdm_api managemet cmd structure - - Private Windows Function - */ -static int DoTdmvApiCommand(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - fd, - IoctlTdmApiCommand, - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPVOID)api_cmd, - sizeof(wanpipe_tdm_api_cmd_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static int tdmv_api_ioctl(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) - \brief Executes Driver TDM API Command Wrapper Function - \param fd device file descriptor - \param api_cmd tdm_api managemet cmd structure - - Private Windows Function - */ -static int tdmv_api_ioctl(HANDLE fd, wanpipe_tdm_api_cmd_t *api_cmd) -{ - if(DoTdmvApiCommand(fd, api_cmd)){ - return SANG_STATUS_GENERAL_ERROR; - } - - return api_cmd->result; -} - -/* - \fn static USHORT DoReadCommand(HANDLE drv, RX_DATA_STRUCT * pRx) - \brief API READ Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - This function will NOT block because using IoctlReadCommandNonBlocking. - */ -static USHORT DoReadCommand(HANDLE drv, RX_DATA_STRUCT * pRx) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlReadCommandNonBlocking, - (LPVOID)NULL,//NO input buffer! - 0, - (LPVOID)pRx, - sizeof(RX_DATA_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static UCHAR DoWriteCommand(HANDLE drv, TX_DATA_STRUCT * pTx) - \brief API Write Function - \param drv device file descriptor - \param pRx receive data structure - - Private Windows Function - In Legacy API mode this fuction will Block if data is busy. - In API mode no function is allowed to Block - */ -static UCHAR DoWriteCommand(HANDLE drv, - void *input_data_buffer, u32 size_of_input_data_buffer, - void *output_data_buffer, u32 size_of_output_data_buffer - ) -{ - DWORD BytesReturned, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlWriteCommand, - (LPVOID)input_data_buffer, - size_of_input_data_buffer, - (LPVOID)output_data_buffer, - size_of_output_data_buffer, - (LPDWORD)(&BytesReturned), - (LPOVERLAPPED)NULL); - - return (UCHAR)handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -/* - \fn static USHORT DoApiPollCommand(HANDLE drv, API_POLL_STRUCT *api_poll_ptr) - \brief Non Blocking API Poll function used to find out if Rx Data, Events or - Free Tx buffer available - \param drv device file descriptor - \param api_poll_ptr poll device that stores polling information read/write/event - \param overlapped pointer to system overlapped io structure. - - Private Windows Function - */ -static USHORT DoApiPollCommand(HANDLE drv, API_POLL_STRUCT *api_poll_ptr) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlApiPoll, - (LPVOID)NULL, - 0L, - (LPVOID)api_poll_ptr, - sizeof(API_POLL_STRUCT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -static int _SAPI_CALL sangoma_socket_poll(sangoma_wait_obj_t *sng_wait_obj) -{ - API_POLL_STRUCT *api_poll = &sng_wait_obj->api_poll; -#if 0 - DBG_POLL("%s(): span: %d, chan: %d\n", __FUNCTION__, sng_wait_obj->span, sng_wait_obj->chan); -#endif - memset(api_poll, 0x00, sizeof(API_POLL_STRUCT)); - - api_poll->user_flags_bitmap = sng_wait_obj->flags_in; - - /* This call will return immediatly! - * Caller of this function must implement the actual wait. */ - if(DoApiPollCommand(sng_wait_obj->fd, api_poll)){ - //failed - return -1; - } - return 0; -} - -static USHORT DoSetSharedEventCommand(HANDLE drv, PREGISTER_EVENT event) -{ - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlSetSharedEvent, - (LPVOID)event, - sizeof(REGISTER_EVENT), - (LPVOID)event, - sizeof(REGISTER_EVENT), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL); - - return handle_device_ioctl_result(bIoResult, __FUNCTION__); -} - -#endif /* WIN32 */ - - -/*********************************************************************//** - * Common Linux & Windows Code - *************************************************************************/ - - - -/************************************************************//** - * Device POLL Functions - ***************************************************************/ - - -/*! - \fn void sangoma_init_wait_obj(sangoma_wait_obj_t *sng_wait_obj, sng_fd_t fd, int span, int chan, int timeout, int flags_in, int object_type) - \brief Initialize a wait object that will be used in sangoma_socket_waitfor_many() function - \param sng_wait_obj pointer a single device object - \param fd device file descriptor - \param span span number starting from 1 to 255 - \param chan chan number starting from 1 to 32 - \param flags_in events to wait for (read/write/event) - \param object_type defines whether file descriptor is a sangoma device or other sytem file descriptor. - \return 0: success, non-zero: error -*/ -int _SAPI_CALL sangoma_init_wait_obj(sangoma_wait_obj_t *sng_wait_obj, sng_fd_t fd, int span, int chan, int flags_in, int object_type) -{ - int err = 0; - memset(sng_wait_obj, 0, sizeof(*sng_wait_obj)); - sng_wait_obj->fd = fd; - sng_wait_obj->flags_in = flags_in; - sng_wait_obj->span = span; - sng_wait_obj->chan = chan; - sng_wait_obj->object_type = object_type; - -#if defined(WIN32) - DBG_INIT("%s(): fd:0x%X, span:%d, chan:%d, flags_in:0x%X, object_type:%s", - __FUNCTION__, fd, span, chan, flags_in, (object_type==SANGOMA_WAIT_OBJ?"SANGOMA_WAIT_OBJ":"UNKNOWN_WAIT_OBJ")); - - sng_wait_obj->SharedEvent.hEvent = CreateEvent( NULL, FALSE, FALSE, NULL); - if(NULL == sng_wait_obj->SharedEvent.hEvent){ - return 1; - } - - if(SANGOMA_WAIT_OBJ == object_type){ - err = DoSetSharedEventCommand(fd, &sng_wait_obj->SharedEvent); - } - - DBG_INIT("%s(): returning: %d", __FUNCTION__, err); -#else - int filedes[2]; - sng_wait_obj->signal_read_fd = INVALID_HANDLE_VALUE; - sng_wait_obj->signal_write_fd = INVALID_HANDLE_VALUE; - /* if we want cross-process event notification we can use a named pipe with mkfifo() */ - if (pipe(filedes)) { - return -1; - } - sng_wait_obj->signal_read_fd = filedes[0]; - sng_wait_obj->signal_write_fd = filedes[1]; -#endif - return err; -} - -/*! - \fn void sangoma_release_wait_obj(sangoma_wait_obj_t *sng_wait_obj) - \brief De-allocate all resources in a wait object - \param sng_wait_obj pointer a single device object - \return void -*/ -void _SAPI_CALL sangoma_release_wait_obj(sangoma_wait_obj_t *sng_wait_obj) -{ - if(sng_wait_obj->fd != INVALID_HANDLE_VALUE){ - /* sangoma_close takes care of setting the fd value itself to invalid */ - sangoma_close(&sng_wait_obj->fd); -#ifndef WIN32 - sangoma_close(&sng_wait_obj->signal_read_fd); - sangoma_close(&sng_wait_obj->signal_write_fd); -#endif - } - sng_wait_obj->object_type = UNKNOWN_WAIT_OBJ; -} - -/*! - \fn void sangoma_signal_wait_obj(sangoma_wait_obj_t *sng_wait_obj) - \brief Set wait object to a signalled state - \param sng_wait_obj pointer a single device object - \return 0 on success, non-zero on error -*/ -int _SAPI_CALL sangoma_signal_wait_obj(sangoma_wait_obj_t *sng_wait_obj) -{ -#if defined(WIN32) - if(sng_wait_obj->SharedEvent.hEvent){ - if (!SetEvent(sng_wait_obj->SharedEvent.hEvent)) { - return -1; - } - return 0; - } -#else - if (sng_wait_obj->signal_write_fd >= 0) { - return write(sng_wait_obj->signal_write_fd, "s", 1); - } -#endif - /* error, this object cannot be signaled */ - return -1; -} - -/*! - \fn int sangoma_socket_waitfor_many(sangoma_wait_obj_t sangoma_wait_objects[], int number_of_sangoma_wait_objects, uint32_t system_wait_timeout) - \brief Wait for multiple file descriptors - poll() - \param sangoma_wait_objects pointer to array of file descriptors to wait for - \param number_of_sangoma_wait_objects size of the array of file descriptors - \param system_wait_timeout timeout in miliseconds in case of no event - \return negative: error, 0: timeout, positive: event occured check in sangoma_wait_objects -*/ -int _SAPI_CALL sangoma_socket_waitfor_many(sangoma_wait_obj_t sangoma_wait_objects[], int number_of_sangoma_wait_objects, int32_t system_wait_timeout) -{ - int i; -#if defined(WIN32) - HANDLE hEvents[MAXIMUM_WAIT_OBJECTS]; - int rc, at_least_one_poll_set_flags_out = 0; - - if(number_of_sangoma_wait_objects > MAXIMUM_WAIT_OBJECTS){ - DBG_EVNT("Error: %s(): 'number_of_sangoma_wait_objects': %d is greater than the Maximum of: %d\n", __FUNCTION__, - number_of_sangoma_wait_objects, MAXIMUM_WAIT_OBJECTS); - return -1; - } - - if(number_of_sangoma_wait_objects < 1){ - DBG_EVNT("Error: %s(): 'number_of_sangoma_wait_objects': %d is less than the Minimum of: 1!\n", __FUNCTION__, - number_of_sangoma_wait_objects); - return -2; - } - - DBG_POLL1("%s(): line: %d: number_of_sangoma_wait_objects: %d\n", __FUNCTION__, __LINE__, number_of_sangoma_wait_objects); - - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - hEvents[i] = sangoma_wait_objects[i].SharedEvent.hEvent; - sangoma_wait_objects[i].flags_out = 0; - } - - /* Note this loop is especially important for POLLOUT! */ - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - - if(sangoma_wait_objects[i].object_type == SANGOMA_WAIT_OBJ){ - - if(sangoma_socket_poll(&sangoma_wait_objects[i])){ - return -3; - } - - if(sangoma_wait_objects[i].api_poll.operation_status != SANG_STATUS_SUCCESS){ - - DBG_EVNT("Error: %s(): Invalid Operation Status: %s(%d)\n", __FUNCTION__, - SDLA_DECODE_SANG_STATUS(sangoma_wait_objects[i].api_poll.operation_status), - sangoma_wait_objects[i].api_poll.operation_status); - return -4; - } - - if(sangoma_wait_objects[i].api_poll.poll_events_bitmap){ - sangoma_wait_objects[i].flags_out = sangoma_wait_objects[i].api_poll.poll_events_bitmap; - at_least_one_poll_set_flags_out = 1; - } - } - } - - if(at_least_one_poll_set_flags_out){ - DBG_POLL1("%s(): line: %d: at_least_one_poll_set_flags_out is set\n", __FUNCTION__, __LINE__); - return 1; - } - - DBG_POLL1("%s(): line: %d: going into WaitForMultipleObjects()\n", __FUNCTION__, __LINE__); - - /* wait untill at least one of the events is signalled OR a 'system_wait_timeout' occured */ - if(WAIT_TIMEOUT == WaitForMultipleObjects(number_of_sangoma_wait_objects, &hEvents[0], FALSE, system_wait_timeout)){ - DBG_POLL1("%s(): line: %d: WaitForMultipleObjects() timedout\n", __FUNCTION__, __LINE__); - return 0; - } - - DBG_POLL1("%s(): line: %d: returned from WaitForMultipleObjects()\n", __FUNCTION__, __LINE__); - - /* WaitForMultipleObjects() could be waken by a Sangoma or by a non-Sangoma wait object */ - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - - if(sangoma_wait_objects[i].object_type == SANGOMA_WAIT_OBJ){ - - if(sangoma_socket_poll(&sangoma_wait_objects[i])){ - return -5; - } - - if(sangoma_wait_objects[i].api_poll.operation_status != SANG_STATUS_SUCCESS){ - - DBG_EVNT("Error: %s(): Invalid Operation Status: %s(%d)\n", __FUNCTION__, - SDLA_DECODE_SANG_STATUS(sangoma_wait_objects[i].api_poll.operation_status), - sangoma_wait_objects[i].api_poll.operation_status); - return -6; - } - - if(sangoma_wait_objects[i].api_poll.poll_events_bitmap){ - sangoma_wait_objects[i].flags_out = sangoma_wait_objects[i].api_poll.poll_events_bitmap; - } - } - } - - return 2; -#else - /* I dont like that much the current state of things, the user of libsangoma is expected to build the - array of sangoma wait objects and then we create the poll array, ideally we should provide a - helper API (sangoma_add_waitable(waitable, array)) and then sangoma_socket_waitfor_many just receives - this array (which of course should already have a built in poll array ready to go) */ - /* in order to implement sangoma_signal_wait_obj we need an additional fd for each sangoma obj */ - struct pollfd pfds[number_of_sangoma_wait_objects*2]; - char dummy_buf[1]; - int signal_count = 0; - int res; - - memset(pfds, 0, sizeof(pfds)); - - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - pfds[i].fd = sangoma_wait_objects[i].fd; - pfds[i].events = sangoma_wait_objects[i].flags_in; - if (sangoma_wait_objects[i].signal_read_fd != INVALID_HANDLE_VALUE) { - pfds[number_of_sangoma_wait_objects+signal_count].fd = sangoma_wait_objects[i].signal_read_fd; - pfds[number_of_sangoma_wait_objects+signal_count].events = POLLIN; - signal_count++; - } - } - - poll_try_again: - - res = poll(pfds, (number_of_sangoma_wait_objects + signal_count), system_wait_timeout); - if (res > 0) { - for(i = 0; i < number_of_sangoma_wait_objects; i++){ - sangoma_wait_objects[i].flags_out = pfds[i].revents; - /* should we do something extra for signalled objects? */ - } - for(i = 0; i < signal_count; i++){ - /* should we do something extra for signalled objects? */ - if (pfds[number_of_sangoma_wait_objects+i].revents & POLLIN) { - /* read and discard the signal byte */ - read(pfds[number_of_sangoma_wait_objects+i].fd, &dummy_buf, 1); - } - } - } else if (res < 0 && errno == EINTR) { - /* TODO: decrement system_wait_timeout */ - goto poll_try_again; - } - - return res; -#endif -} - - -/*! - \fn int sangoma_socket_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int timeout, int flags_in, unsigned int *flags_out) - \brief Wait for a single file descriptor - poll() - \param sangoma_wait_obj pointer to array of file descriptors to wait for - \param timeout timeout in miliseconds in case of no event - \param flags_in events to wait for (read/write/event) - \param flags_out events that occured (read/write/event) - \return negative: error, 0: timeout, positive: event occured check in *flags_out -*/ -int _SAPI_CALL sangoma_socket_waitfor(sangoma_wait_obj_t *sangoma_wait_obj, int timeout, int flags_in, unsigned int *flags_out) -{ - int err; - - sangoma_wait_obj->flags_in = flags_in; - - err = sangoma_socket_waitfor_many(sangoma_wait_obj, 1, timeout); - - if(err < 0 || err == 0){ - return err; - } - - *flags_out = sangoma_wait_obj->flags_out; - - return 1; -} - - -/************************************************************//** - * Device OPEN / CLOSE Functions - ***************************************************************/ - - -int _SAPI_CALL sangoma_span_chan_toif(int span, int chan, char *interface_name) -{ -#if defined(WIN32) -/* FIXME: Not implemented */ - return -1; -#else - sprintf(interface_name,"s%ic%i",span,chan); -#endif - return 0; -} - -int _SAPI_CALL sangoma_interface_toi(char *interface_name, int *span, int *chan) -{ - char *p=NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'g') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 'w') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -int _SAPI_CALL sangoma_interface_wait_up(int span, int chan, int sectimeout) -{ -#ifdef WIN32 - /* Windows does not need to wait for interfaces to come up */ - return 0; -#else - char interface_name[FNAME_LEN]; - struct stat statbuf; - struct timeval endtime = {0,0}; - struct timeval curtime = {0,0}; - int counter; - int rc; - if (sectimeout >= 0 && gettimeofday(&endtime, NULL)) { - return -1; - } - snprintf(interface_name, sizeof(interface_name), WP_INTERFACE_NAME_FORM, span, chan); - endtime.tv_sec += sectimeout; - do { - counter = 0; - while ((rc = stat(interface_name, &statbuf)) && errno == ENOENT && counter != 10) { - poll(0, 0, 100); // test in 100ms increments - counter++; - } - if (!rc || errno != ENOENT) break; - if (gettimeofday(&curtime, NULL)) { - return -1; - } - } while (sectimeout < 0 || timercmp(&endtime, &curtime,>)); - return rc; -#endif -} - -int _SAPI_CALL sangoma_span_chan_fromif(char *interface_name, int *span, int *chan) -{ - char *p = NULL, *sp = NULL, *ch = NULL; - int ret = 0; - char data[FNAME_LEN]; - - strncpy(data, interface_name, FNAME_LEN); - if ((data[0])) { - for (p = data; *p; p++) { - if (sp && *p == 'c') { - *p = '\0'; - ch = (p + 1); - break; - } else if (*p == 's') { - sp = (p + 1); - } - } - - if(ch && sp) { - *span = atoi(sp); - *chan = atoi(ch); - ret = 1; - } else { - *span = -1; - *chan = -1; - } - } - - return ret; -} - -sng_fd_t _SAPI_CALL sangoma_open_api_span_chan(int span, int chan) -{ - sng_fd_t fd = INVALID_HANDLE_VALUE; - wanpipe_api_t tdm_api; - int err; - - fd = __sangoma_open_api_span_chan(span, chan); - -#if defined(__WINDOWS__) - if(fd == INVALID_HANDLE_VALUE){ - //DBG_EVNT("Span: %d, chan: %d: is not running, consider 'busy'\n", span, chan); - return fd; - } -#else - if (fd < 0) { - return fd; - } -#endif - - memset(&tdm_api,0,sizeof(tdm_api)); - tdm_api.wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - err=sangoma_cmd_exec(fd,&tdm_api); - if (err){ - sangoma_close(&fd); - return fd; - } - - if (tdm_api.wp_cmd.open_cnt > 1) { - /* this is NOT the first open request for this span/chan */ - sangoma_close(&fd); - fd = INVALID_HANDLE_VALUE;/* fd is NOT valid anymore */ - } - - return fd; -} - -/* no checks done for multiple open */ -sng_fd_t _SAPI_CALL __sangoma_open_api_span_chan(int span, int chan) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - - /* Form the Interface Name from span and chan number (i.e. wanpipe1_if1). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_INTERFACE_NAME_FORM, span, chan); - -#if defined(WIN32) - _snprintf(fname , FNAME_LEN, "\\\\.\\%s", tmp_fname); - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - -sng_fd_t _SAPI_CALL sangoma_open_api_ctrl(void) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - - /* Form the Ctrl Device Name. */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_CTRL_DEV_NAME); - -#if defined(WIN32) - _snprintf(fname , FNAME_LEN, "\\\\.\\%s", tmp_fname); - - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - - -int _SAPI_CALL sangoma_get_open_cnt(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_OPEN_CNT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return -1; - } - - return tdm_api->wp_cmd.open_cnt; -} - -sng_fd_t _SAPI_CALL sangoma_create_socket_by_name(char *device, char *card) -{ - int span,chan; - sangoma_interface_toi(device,&span,&chan); - - return sangoma_open_api_span_chan(span,chan); -} - - -sng_fd_t _SAPI_CALL sangoma_open_api_span(int span) -{ - int i=0; - sng_fd_t fd = INVALID_HANDLE_VALUE; - - for(i = 1; i < 32; i++){ - - fd = sangoma_open_api_span_chan(span, i); - -#if defined(WIN32) - if(fd != INVALID_HANDLE_VALUE){ -#else - if (fd >= 0) { -#endif - - //found free chan - break; - } - - }//for() - - return fd; -} - - -/*! - \fn void sangoma_close(sng_fd_t *fd) - \brief Close device file descriptor - \param fd device file descriptor - \return void -*/ -void _SAPI_CALL sangoma_close(sng_fd_t *fd) -{ -#if defined(WIN32) - if( *fd != INVALID_HANDLE_VALUE){ - CloseHandle(*fd); - *fd = INVALID_HANDLE_VALUE; - } -#else - if (*fd >= 0) { - close(*fd); - *fd = -1; - } -#endif -} - - - -/************************************************************//** - * Device READ / WRITE Functions - ***************************************************************/ - -int _SAPI_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag) -{ - int rx_len=0; - -#if defined(WIN32) - wp_api_hdr_t *rx_hdr = (wp_api_hdr_t*)hdrbuf; - wp_api_element_t wp_api_element; - - if(hdrlen != sizeof(wp_api_hdr_t)){ - //error - DBG_EVNT("Error: %s(): invalid size of user's 'header buffer'. Should be 'sizeof(wp_api_hdr_t)'.\n", __FUNCTION__); - return -1; - } - - if(DoReadCommand(fd, &wp_api_element)){ - //error - DBG_EVNT("Error: %s(): DoReadCommand() failed! Check messages log.\n", __FUNCTION__); - return -4; - } - - memcpy(rx_hdr, &wp_api_element.hdr, sizeof(wp_api_hdr_t)); - - switch(rx_hdr->operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: - /* ok */ - if(rx_hdr->data_length <= datalen){ - memcpy(databuf, wp_api_element.data, rx_hdr->data_length); - }else{ - rx_hdr->operation_status = SANG_STATUS_BUFFER_TOO_SMALL; - } - break; - default: - /* note that SANG_STATUS_NO_DATA_AVAILABLE is NOT an error! */ - if(0)DBG_EVNT("Error: %s(): Operation Status: %s(%d)\n", __FUNCTION__, - SDLA_DECODE_SANG_STATUS(rx_hdr->operation_status), rx_hdr->operation_status); - return -5; - } - - rx_len = rx_hdr->data_length; -#else - struct msghdr msg; - struct iovec iov[2]; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - rx_len = read(fd,&msg,sizeof(msg)); - - if (rx_len <= sizeof(wp_api_hdr_t)){ - return -EINVAL; - } - - rx_len-=sizeof(wp_api_hdr_t); -#endif - return rx_len; -} - -int _SAPI_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag) -{ - int bsent=-1; - wp_api_hdr_t *wp_api_hdr = hdrbuf; - - if (hdrlen != sizeof(wp_api_hdr_t)) { - DBG_ERR("Error: sangoma_writemsg() failed! hdrlen (%i) != sizeof(wp_api_hdr_t) (%i)\n", - hdrlen,sizeof(wp_api_hdr_t)); - wp_api_hdr->operation_status = SANG_STATUS_TX_HDR_TOO_SHORT; - return -1; - } - -#if defined(WIN32) - //queue data for transmission - if(DoWriteCommand(fd, databuf, datalen, hdrbuf, hdrlen)){ - //error - DBG_EVNT("Error: DoWriteCommand() failed!! Check messages log.\n"); - return -1; - } - - bsent=0; - //check that frame was transmitted - switch(wp_api_hdr->operation_status) - { - case SANG_STATUS_SUCCESS: - bsent = datalen; - break; - default: - DBG_EVNT("Error: %s(): Operation Status: %s(%d)\n", __FUNCTION__, - SDLA_DECODE_SANG_STATUS(wp_api_hdr->operation_status), wp_api_hdr->operation_status); - break; - }//switch() -#else - struct msghdr msg; - struct iovec iov[2]; - wp_api_hdr_t *tx_el=hdrbuf; - - memset(&msg,0,sizeof(struct msghdr)); - - iov[0].iov_len=hdrlen; - iov[0].iov_base=hdrbuf; - - iov[1].iov_len=datalen; - iov[1].iov_base=databuf; - - msg.msg_iovlen=2; - msg.msg_iov=iov; - - bsent = write(fd,&msg,datalen+hdrlen); - - if (bsent == (datalen+hdrlen)){ - tx_el->wp_api_hdr_operation_status=SANG_STATUS_SUCCESS; - bsent-=sizeof(wp_api_hdr_t); - } else if (errno == EBUSY){ - tx_el->wp_api_hdr_operation_status=SANG_STATUS_DEVICE_BUSY; - } else { - tx_el->wp_api_hdr_operation_status=SANG_STATUS_IO_ERROR; - } - tx_el->wp_api_hdr_data_length=bsent; - - //FIXME - THIS SHOULD BE DONE IN KERNEL - tx_el->wp_api_tx_hdr_max_queue_length=16; - tx_el->wp_api_tx_hdr_number_of_frames_in_queue=0; - -#endif - return bsent; -} - - -#ifdef WANPIPE_TDM_API - - -/************************************************************//** - * Device API COMMAND Functions - ***************************************************************/ - - - -/*======================================================== - * Execute TDM command - * - */ -int _SAPI_CALL sangoma_cmd_exec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - -#if defined(WIN32) - err = tdmv_api_ioctl(fd, &tdm_api->wp_cmd); -#else - err = ioctl(fd,WANPIPE_IOCTL_API_CMD,&tdm_api->wp_cmd); - if (err < 0){ - char tmp[50]; - sprintf(tmp,"TDM API: CMD: %i\n",tdm_api->wp_cmd.cmd); - perror(tmp); - return -1; - } -#endif - return err; -} - -/*======================================================== - * Get Full TDM API configuration per channel - * - */ -int _SAPI_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FULL_CFG; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - -#if 0 - printf("TDM API CFG:\n"); - printf("\thw_tdm_coding:\t%d\n",tdm_api->wp_cmd.hw_tdm_coding); - printf("\thw_mtu_mru:\t%d\n",tdm_api->wp_cmd.hw_mtu_mru); - printf("\tusr_period:\t%d\n",tdm_api->wp_cmd.usr_period); - printf("\ttdm_codec:\t%d\n",tdm_api->wp_cmd.tdm_codec); - printf("\tpower_level:\t%d\n",tdm_api->wp_cmd.power_level); - printf("\trx_disable:\t%d\n",tdm_api->wp_cmd.rx_disable); - printf("\ttx_disable:\t%d\n",tdm_api->wp_cmd.tx_disable); - printf("\tusr_mtu_mru:\t%d\n",tdm_api->wp_cmd.usr_mtu_mru); - printf("\tidle flag:\t0x%02X\n",tdm_api->wp_cmd.idle_flag); - -#ifdef WP_API_FEATURE_FE_ALARM - printf("\tfe alarms:\t0x%02X\n",tdm_api->wp_cmd.fe_alarms); -#endif - - printf("\trx pkt\t%d\ttx pkt\t%d\n",tdm_api->wp_cmd.stats.rx_packets, - tdm_api->wp_cmd.stats.tx_packets); - printf("\trx err\t%d\ttx err\t%d\n", - tdm_api->wp_cmd.stats.rx_errors, - tdm_api->wp_cmd.stats.tx_errors); -#ifndef __WINDOWS__ - printf("\trx ovr\t%d\ttx idl\t%d\n", - tdm_api->wp_cmd.stats.rx_fifo_errors, - tdm_api->wp_cmd.stats.tx_carrier_errors); -#endif -#endif - - return 0; -} - -/*======================================================== - * SET Codec on a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_CODEC; - tdm_api->wp_cmd.tdm_codec = codec; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Codec from a particular Channel. - * - * Available codecs are defined in - * /usr/src/linux/include/linux/wanpipe_cfg.h - * - * enum wan_codec_format { - * WP_NONE, - * WP_SLINEAR - * } - * - */ -int _SAPI_CALL sangoma_tdm_get_codec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_CODEC; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.tdm_codec; -} - -/*======================================================== - * SET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_USR_PERIOD; - tdm_api->wp_cmd.usr_period = period; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET Rx/Tx Hardware Period in milliseconds. - * - * Available options are: - * 10,20,30,40,50 ms - * - */ -int _SAPI_CALL sangoma_tdm_get_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_PERIOD; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_period; -} - -/*======================================================== - * GET Current User Hardware Coding Format - * - * Coding Format will be ULAW/ALAW based on T1/E1 - */ - -int _SAPI_CALL sangoma_get_hw_coding(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_CODING; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_tdm_coding; -} - -#ifdef WP_API_FEATURE_DTMF_EVENTS -/*======================================================== - * GET Current User Hardware DTMF Enabled/Disabled - * - * Will return true if HW DTMF is enabled on Octasic - */ - -int _SAPI_CALL sangoma_tdm_get_hw_dtmf(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_HW_DTMF; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - return tdm_api->wp_cmd.hw_dtmf; -} -#endif - -/*======================================================== - * GET Current User MTU/MRU values in bytes. - * - * The USER MTU/MRU values will change each time a PERIOD - * or CODEC is adjusted. - */ -int _SAPI_CALL sangoma_tdm_get_usr_mtu_mru(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_USR_MTU_MRU; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.usr_mtu_mru; -} - -/*======================================================== - * SET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_set_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api, int power) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_POWER_LEVEL; - tdm_api->wp_cmd.power_level = power; - - err=sangoma_cmd_exec(fd,tdm_api); - - return err; -} - -/*======================================================== - * GET TDM Power Level - * - * This option is not implemented yet - * - */ -int _SAPI_CALL sangoma_tdm_get_power_level(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_POWER_LEVEL; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.power_level; -} - -int _SAPI_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_FLUSH_BUFFERS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_RBS_EVENTS; - tdm_api->wp_cmd.rbs_poll=poll_in_sec; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_RBS_EVENTS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs) -{ - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_WRITE_RBS_BITS; - tdm_api->wp_cmd.chan = (unsigned char)channel; - tdm_api->wp_cmd.rbs_tx_bits=rbs; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_read_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char *rbs) -{ - - int err; - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_RBS_BITS; - tdm_api->wp_cmd.chan = (unsigned char)channel; - tdm_api->wp_cmd.rbs_tx_bits=0; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *rbs=(unsigned char)tdm_api->wp_cmd.rbs_rx_bits; - - return 0; -} - -int _SAPI_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - -#ifdef WP_API_FEATURE_EVENTS - wp_api_event_t *rx_event; - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_READ_EVENT; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - rx_event = &tdm_api->wp_cmd.event; - - - /* - The use of callbacks here is purely optional and is left - here for backward compatibility purposes. By default user - should handle events outside this funciton. This function - should only be used to read the event - */ - - switch (rx_event->wp_api_event_type){ - - case WP_API_EVENT_RBS: - if (tdm_api->wp_callback.wp_rbs_event) { - tdm_api->wp_callback.wp_rbs_event(fd,rx_event->wp_api_event_rbs_bits); - } - - break; - -#ifdef WP_API_FEATURE_DTMF_EVENTS - case WP_API_EVENT_DTMF: - if (tdm_api->wp_callback.wp_dtmf_event) { - tdm_api->wp_callback.wp_dtmf_event(fd, - rx_event->wp_api_event_dtmf_digit, - rx_event->wp_api_event_dtmf_type, - rx_event->wp_api_event_dtmf_port); - } - break; -#endif - - case WP_API_EVENT_RXHOOK: - if (tdm_api->wp_callback.wp_rxhook_event) { - tdm_api->wp_callback.wp_rxhook_event(fd, - rx_event->wp_api_event_hook_state); - } - break; - - case WP_API_EVENT_RING_DETECT: - if (tdm_api->wp_callback.wp_ring_detect_event) { - tdm_api->wp_callback.wp_ring_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - - case WP_API_EVENT_RING_TRIP_DETECT: - if (tdm_api->wp_callback.wp_ring_trip_detect_event) { - tdm_api->wp_callback.wp_ring_trip_detect_event(fd, - rx_event->wp_api_event_ring_state); - } - break; - -#ifdef WP_API_FEATURE_FE_ALARM - case WP_API_EVENT_ALARM: - if (tdm_api->wp_callback.wp_fe_alarm_event) { - tdm_api->wp_callback.wp_fe_alarm_event(fd, - rx_event->wp_api_event_alarm); - } - break; -#endif - -#ifdef WP_API_FEATURE_LINK_STATUS - /* Link Status */ - case WP_API_EVENT_LINK_STATUS: - if(tdm_api->wp_callback.wp_link_status_event){ - tdm_api->wp_callback.wp_link_status_event(fd, - rx_event->wp_api_event_link_status); - } - - break; -#endif - -#ifdef WP_API_FEATURE_POL_REV - case WP_API_EVENT_POLARITY_REVERSE: - break; -#endif - default: -#ifdef __WINDOWS__ - printf("libsangoma: %s fd=0x%p: Unknown TDM event!", __FUNCTION__,fd); -#else - printf("libsangoma: %s fd=%d: Unknown TDM event!", __FUNCTION__, fd); -#endif - break; - } - - return 0; -#else - printf("Error: Read Event not supported!\n"); - return -1; -#endif -} - -#ifdef WP_API_FEATURE_DTMF_EVENTS -int _SAPI_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return err; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_enable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_TRIP_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - - -int _SAPI_CALL sangoma_tdm_disable_ring_trip_detect_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_kewl(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_KEWL; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_start(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_START; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_onhook(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_ONHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_txsig_offhook(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_OFFHOOK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -int _SAPI_CALL sangoma_tdm_enable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api, uint16_t tone_id) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = tone_id; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - -int _SAPI_CALL sangoma_tdm_disable_tone_events(sng_fd_t fd, wanpipe_api_t *tdm_api) { - - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - tdm_api->wp_cmd.event.wp_api_event_tone_type = 0x00; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return tdm_api->wp_cmd.rbs_poll; -} - -#endif - -int _SAPI_CALL sangoma_tdm_enable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_ENABLE_HWEC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - -int _SAPI_CALL sangoma_tdm_disable_hwec(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_DISABLE_HWEC; - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - return 0; -} - - -/*======================================================== - * GET Front End Alarms - * - */ -#ifdef WP_API_FEATURE_FE_ALARM -int _SAPI_CALL sangoma_tdm_get_fe_alarms(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int *alarms) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_ALARMS; - - err=sangoma_cmd_exec(fd,tdm_api); - if (err){ - return err; - } - - *alarms=tdm_api->wp_cmd.fe_alarms; - - return 0; -} - -/* get current Line Connection state - Connected/Disconnected */ -int _SAPI_CALL sangoma_get_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} -#endif - -/* get current Line Connection state - Connected/Disconnected */ -#ifdef WP_API_FEATURE_LINK_STATUS -int _SAPI_CALL sangoma_get_link_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *current_status) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - err = sangoma_cmd_exec(fd, tdm_api); - *current_status = tdm_api->wp_cmd.fe_status; - - return err; -} - -/* set current Line Connection state - Connected/Disconnected. valid only for ISDN BRI */ -int _SAPI_CALL sangoma_set_fe_status(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char new_status) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_FE_STATUS; - tdm_api->wp_cmd.fe_status = new_status; - - return sangoma_cmd_exec(fd, tdm_api); -} -#endif - -int _SAPI_CALL sangoma_disable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.channel = (unsigned char)channel; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_enable_bri_bchan_loopback(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api->wp_cmd.event.channel = (unsigned char)channel; - tdm_api->wp_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api->wp_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return sangoma_cmd_exec(fd, tdm_api); -} - - -int _SAPI_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.tx_queue_sz; -} - -int _SAPI_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_TX_Q_SIZE; - tdm_api->wp_cmd.tx_queue_sz = size; - - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = 0; - - err=sangoma_cmd_exec(fd, tdm_api); - if (err < 0) { - return err; - } - - return tdm_api->wp_cmd.rx_queue_sz; - -} - -int _SAPI_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size) -{ - if (size < 0) { - return -1; - } - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RX_Q_SIZE; - tdm_api->wp_cmd.rx_queue_sz = size; - - return sangoma_cmd_exec(fd, tdm_api); - -} - -int _SAPI_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_DRIVER_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(wan_driver_version_t)) { - if (drv_ver) { - memcpy(drv_ver,&tdm_api->wp_cmd.version,sizeof(wan_driver_version_t)); - } - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_FIRMWARE_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(unsigned char)) { - *ver = tdm_api->wp_cmd.data[0]; - } else { - return -1; - } - } - - return err; -} - - -int _SAPI_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_CPLD_VERSION; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (tdm_api->wp_cmd.data_len == sizeof(unsigned char)) { - *ver = tdm_api->wp_cmd.data[0]; - } else { - return -1; - } - } - - return err; -} - -int _SAPI_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_GET_STATS; - - err = sangoma_cmd_exec(fd, tdm_api); - if (err == 0) { - if (stats) { - memcpy(stats,&tdm_api->wp_cmd.stats,sizeof(wanpipe_chan_stats_t)); - } - } - - return err; -} - -int _SAPI_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api) -{ - tdm_api->wp_cmd.cmd = WP_API_CMD_RESET_STATS; - return sangoma_cmd_exec(fd, tdm_api); -} - -int _SAPI_CALL sangoma_set_rm_rxflashtime(sng_fd_t fd, wanpipe_api_t *tdm_api, int rxflashtime) -{ - int err; - - tdm_api->wp_cmd.cmd = WP_API_CMD_SET_RM_RXFLASHTIME; - tdm_api->wp_cmd.rxflashtime=rxflashtime; - err = sangoma_cmd_exec(fd, tdm_api); - return err; -} - - -#ifndef LIBSANGOMA_LIGHT - - -/************************************************************//** - * Device PORT Control Functions - ***************************************************************/ - -static int sangoma_port_mgmnt_ioctl(sng_fd_t fd, port_management_struct_t *port_management) -{ - -#if defined(__WINDOWS__) - DWORD ln; - if(DeviceIoControl( - fd, - IoctlPortManagementCommand, - (LPVOID)port_management, - sizeof(port_management_struct_t), - (LPVOID)port_management, - sizeof(port_management_struct_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - //check messages log - printf("%s():Error: IoctlPortManagementCommand failed!!\n", __FUNCTION__); - return -1; - }else { - return 0; - } -#else - int err; - err=ioctl(fd,WANPIPE_IOCTL_PORT_MGMT,port_management); - if (err) { - return -1; - } else { - return 0; - } -#endif -} - -static int sangoma_port_cfg_ioctl(sng_fd_t fd, port_cfg_t *port_cfg) -{ - -#if defined(__WINDOWS__) - DWORD ln; - if(DeviceIoControl( - fd, - IoctlPortConfigurationCommand, - (LPVOID)port_cfg, - sizeof(port_cfg_t), - (LPVOID)port_cfg, - sizeof(port_cfg_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ) == FALSE){ - //check messages log - printf("%s():Error: IoctlSetDriverConfiguration failed!!\n", __FUNCTION__); - return 1; - }else{ - return 0; - } -#else - int err; - err=ioctl(fd,WANPIPE_IOCTL_PORT_CONFIG,port_cfg); - if (err) { - return -1; - } else { - return 0; - } -#endif -} - -/* open wanpipe configuration device */ -sng_fd_t _SAPI_CALL sangoma_open_driver_ctrl(int port_no) -{ - char fname[FNAME_LEN], tmp_fname[FNAME_LEN]; - -#if defined(WIN32) - /* Form the Config Device Name (i.e. wanpipe1, wanpipe2,...). */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_PORT_NAME_FORM, port_no); - _snprintf(fname, FNAME_LEN, "\\\\.\\%s", tmp_fname); - - return CreateFile( fname, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - (HANDLE)NULL - ); -#else - /* Form the Config Device Name. ("/dev/wanpipe") */ - _snprintf(tmp_fname, DEV_NAME_LEN, WP_CONFIG_DEV_NAME); - - sprintf(fname,"/dev/%s", tmp_fname); - - return open(fname, O_RDWR); -#endif -} - - -int _SAPI_CALL sangoma_mgmt_cmd(sng_fd_t fd, wan_udp_hdr_t* wan_udp) -{ -#if defined(__WINDOWS__) - if(DoManagementCommand(fd, wan_udp)){ - return 1; - } -#else - unsigned char id = 0; - int err=0; - wan_udp->wan_udphdr_request_reply = 0x01; - wan_udp->wan_udphdr_id = id; - wan_udp->wan_udphdr_return_code = WAN_UDP_TIMEOUT_CMD; - - err=ioctl(fd,WANPIPE_IOCTL_PIPEMON,wan_udp); - if (err < 0) { - return 1; - } -#endif - - if(wan_udp->wan_udphdr_return_code != WAN_CMD_OK){ - return 2; - } - return 0; -} - -int _SAPI_CALL sangoma_driver_port_start(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = START_PORT_VOLATILE_CONFIG; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - return err; - } - - if (port_mgmnt->operation_status != SANG_STATUS_SUCCESS ) { - err=port_mgmnt->operation_status; - } - - return err; -} - -int _SAPI_CALL sangoma_driver_port_stop(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = STOP_PORT; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - return err; - } - - if (port_mgmnt->operation_status != SANG_STATUS_SUCCESS){ - - if(port_mgmnt->operation_status == SANG_STATUS_CAN_NOT_STOP_DEVICE_WHEN_ALREADY_STOPPED) { - err = 0; - }else{ - err = port_mgmnt->operation_status; - } - } - - return err; -} - -int _SAPI_CALL sangoma_driver_get_hw_info(sng_fd_t fd, port_management_struct_t *port_mgmnt, unsigned short port_no) -{ - int err; - port_mgmnt->command_code = GET_HARDWARE_INFO; - port_mgmnt->port_no = port_no; - - err = sangoma_port_mgmnt_ioctl(fd, port_mgmnt); - if (err) { - port_mgmnt->operation_status = SANG_STATUS_INVALID_DEVICE; - return err; - } - - if (port_mgmnt->operation_status != SANG_STATUS_SUCCESS ) { - err=port_mgmnt->operation_status; - } - - return err; -} - -int _SAPI_CALL sangoma_driver_port_set_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) -{ - port_cfg->command_code = SET_PORT_VOLATILE_CONFIG; - port_cfg->port_no = port_no; - - return sangoma_port_cfg_ioctl(fd, port_cfg); -} - -int _SAPI_CALL sangoma_driver_port_get_config(sng_fd_t fd, port_cfg_t *port_cfg, unsigned short port_no) -{ - - port_cfg->command_code = GET_PORT_VOLATILE_CONFIG; - port_cfg->port_no = port_no; - - return sangoma_port_cfg_ioctl(fd, port_cfg); -} - -#endif - - -#endif /* WANPIPE_TDM_API */ diff --git a/api/libsangoma/.svn/tmp/tempfile.9.tmp b/api/libsangoma/.svn/tmp/tempfile.9.tmp deleted file mode 100644 index d9e3ab7..0000000 --- a/api/libsangoma/.svn/tmp/tempfile.9.tmp +++ /dev/null @@ -1,20777 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -<<<<<<< .mine -# Generated by GNU Autoconf 2.59 for libsangoma 2.0.1. -======= -# Generated by GNU Autoconf 2.59 for libsangoma 3.0.0. ->>>>>>> .r191 -# -# Report bugs to . -# -# Copyright (C) 2003 Free Software Foundation, Inc. -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - - -# PATH needs CR, and LINENO needs CR and PATH. -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_executable_p="test -f" - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -echo=${ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1 && unset CDPATH - -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# 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` && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -tagnames=${tagnames+${tagnames},}CXX - -tagnames=${tagnames+${tagnames},}F77 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -exec 6>&1 - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_config_libobj_dir=. -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Maximum number of lines to put in a shell here document. -# This variable seems obsolete. It should probably be removed, and -# only ac_max_sed_lines should be used. -: ${ac_max_here_lines=38} - -# Identity of this package. -PACKAGE_NAME='libsangoma' -PACKAGE_TARNAME='libsangoma' -<<<<<<< .mine -PACKAGE_VERSION='2.0.1' -PACKAGE_STRING='libsangoma 2.0.1' -PACKAGE_BUGREPORT='ncorbic@sangoma.com' -======= -PACKAGE_VERSION='3.0.0' -PACKAGE_STRING='libsangoma 3.0.0' -PACKAGE_BUGREPORT='ncorbic@sangoma.com' ->>>>>>> .r191 - -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_STAT_H -# include -#endif -#if STDC_HEADERS -# include -# include -#else -# if HAVE_STDLIB_H -# include -# endif -#endif -#if HAVE_STRING_H -# if !STDC_HEADERS && HAVE_MEMORY_H -# include -# endif -# include -#endif -#if HAVE_STRINGS_H -# include -#endif -#if HAVE_INTTYPES_H -# include -#else -# if HAVE_STDINT_H -# include -# endif -#endif -#if HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar LIBSANGOMA_LT_CURRENT LIBSANGOMA_LT_REVISION LIBSANGOMA_LT_AGE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE build build_cpu build_vendor build_os host host_cpu host_vendor host_os SED EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBPRI_TRUE LIBPRI_FALSE LIBPRI_PATH LIBOBJS LTLIBOBJS' -ac_subst_files='' - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -ac_prev= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_option in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - eval "enable_$ac_feature=no" ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; - esac - eval "enable_$ac_feature='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package| sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; - esac - eval "with_$ac_package='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/-/_/g'` - eval "with_$ac_package=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` - eval "$ac_envvar='$ac_optarg'" - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -# Be sure to have absolute paths. -for ac_var in exec_prefix prefix -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; - esac -done - -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; - esac -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_confdir=`(dirname "$0") 2>/dev/null || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 - { (exit 1); exit 1; }; } - else - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } - fi -fi -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || - { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 - { (exit 1); exit 1; }; } -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias -ac_env_CC_set=${CC+set} -ac_env_CC_value=$CC -ac_cv_env_CC_set=${CC+set} -ac_cv_env_CC_value=$CC -ac_env_CFLAGS_set=${CFLAGS+set} -ac_env_CFLAGS_value=$CFLAGS -ac_cv_env_CFLAGS_set=${CFLAGS+set} -ac_cv_env_CFLAGS_value=$CFLAGS -ac_env_LDFLAGS_set=${LDFLAGS+set} -ac_env_LDFLAGS_value=$LDFLAGS -ac_cv_env_LDFLAGS_set=${LDFLAGS+set} -ac_cv_env_LDFLAGS_value=$LDFLAGS -ac_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_env_CPPFLAGS_value=$CPPFLAGS -ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_cv_env_CPPFLAGS_value=$CPPFLAGS -ac_env_CPP_set=${CPP+set} -ac_env_CPP_value=$CPP -ac_cv_env_CPP_set=${CPP+set} -ac_cv_env_CPP_value=$CPP -ac_env_CXX_set=${CXX+set} -ac_env_CXX_value=$CXX -ac_cv_env_CXX_set=${CXX+set} -ac_cv_env_CXX_value=$CXX -ac_env_CXXFLAGS_set=${CXXFLAGS+set} -ac_env_CXXFLAGS_value=$CXXFLAGS -ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} -ac_cv_env_CXXFLAGS_value=$CXXFLAGS -ac_env_CXXCPP_set=${CXXCPP+set} -ac_env_CXXCPP_value=$CXXCPP -ac_cv_env_CXXCPP_set=${CXXCPP+set} -ac_cv_env_CXXCPP_value=$CXXCPP -ac_env_F77_set=${F77+set} -ac_env_F77_value=$F77 -ac_cv_env_F77_set=${F77+set} -ac_cv_env_F77_value=$F77 -ac_env_FFLAGS_set=${FFLAGS+set} -ac_env_FFLAGS_value=$FFLAGS -ac_cv_env_FFLAGS_set=${FFLAGS+set} -ac_cv_env_FFLAGS_value=$FFLAGS - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -<<<<<<< .mine -\`configure' configures libsangoma 2.0.1 to adapt to many kinds of systems. -======= -\`configure' configures libsangoma 3.0.0 to adapt to many kinds of systems. ->>>>>>> .r191 - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -_ACEOF - - cat <<_ACEOF -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data [PREFIX/share] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --infodir=DIR info documentation [PREFIX/info] - --mandir=DIR man documentation [PREFIX/man] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in -<<<<<<< .mine - short | recursive ) echo "Configuration of libsangoma 2.0.1:";; -======= - short | recursive ) echo "Configuration of libsangoma 3.0.0:";; ->>>>>>> .r191 - esac - cat <<\_ACEOF - -Optional Features: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] - build shared libraries [default=yes] - --enable-static[=PKGS] - build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-tags[=TAGS] - include additional configurations [automatic] - --with-libpri= enable pri support - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have - headers in a nonstandard directory - CPP C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - F77 Fortran 77 compiler command - FFLAGS Fortran 77 compiler flags - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - ac_popdir=`pwd` - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - cd $ac_dir - # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_srcdir/configure.gnu; then - echo - $SHELL $ac_srcdir/configure.gnu --help=recursive - elif test -f $ac_srcdir/configure; then - echo - $SHELL $ac_srcdir/configure --help=recursive - elif test -f $ac_srcdir/configure.ac || - test -f $ac_srcdir/configure.in; then - echo - $ac_configure --help - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir - done -fi - -test -n "$ac_init_help" && exit 0 -if $ac_init_version; then - cat <<\_ACEOF -<<<<<<< .mine -libsangoma configure 2.0.1 -======= -libsangoma configure 3.0.0 ->>>>>>> .r191 -generated by GNU Autoconf 2.59 - -Copyright (C) 2003 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit 0 -fi -exec 5>config.log -cat >&5 <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -<<<<<<< .mine -It was created by libsangoma $as_me 2.0.1, which was -======= -It was created by libsangoma $as_me 3.0.0, which was ->>>>>>> .r191 -generated by GNU Autoconf 2.59. Invocation command line was - - $ $0 $@ - -_ACEOF -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -hostinfo = `(hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_sep= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - # Get rid of the leading space. - ac_sep=" " - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -{ - (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) - sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; - *) - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; -} - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - sed "/^$/d" confdefs.h | sort - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status - ' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" - eval ac_new_val="\$ac_env_${ac_var}_value" - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - - - - - - - - - - - - - - - - - - - - ac_config_headers="$ac_config_headers config.h" - -am__api_version="1.9" -ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f $ac_dir/shtool; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 -echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} - { (exit 1); exit 1; }; } -fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - done - done - ;; -esac -done - - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL=$ac_install_sh - fi -fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 -# Just in case -sleep 1 -echo timestamp > conftest.file -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&2;} - { (exit 1); exit 1; }; } - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! -Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! -Check your system clock" >&2;} - { (exit 1); exit 1; }; } -fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -test "$program_prefix" != NONE && - program_transform_name="s,^,$program_prefix,;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s,\$,$program_suffix,;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. -# By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm conftest.sed - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' -else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d - done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' - else - mkdir_p='$(install_sh) -d' - fi -fi - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$AWK" && break -done - -echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.make <<\_ACEOF -all: - @echo 'ac_maketemp="$(MAKE)"' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi -rm -f conftest.make -fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - SET_MAKE= -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. -<<<<<<< .mine - PACKAGE=libsangoma - VERSION=2.0.1 -======= - PACKAGE='libsangoma' - VERSION='3.0.0' ->>>>>>> .r191 - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -install_sh=${install_sh-"$am_aux_dir/install-sh"} - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - STRIP=$ac_ct_STRIP -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - - -LIBSANGOMA_LT_CURRENT=3 # interface 3 -LIBSANGOMA_LT_REVISION=0 # first revision of this interface -LIBSANGOMA_LT_AGE=0 #not backwards compatible (0 previous interfaces are compatible) - - - - - -# Checks for programs. -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi - -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_CC" && break -done - - CC=$ac_ct_CC -fi - -fi - - -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - -# Provide some information about the compiler. -echo "$as_me:$LINENO:" \ - "checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 - (eval $ac_link_default) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Find the output, starting from the most likely. This scheme is -# not robust to junk in `.', hence go to wildcards (a.*) only as a last -# resort. - -# Be careful to initialize this variable, since it used to be cached. -# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. -ac_cv_exeext= -# b.out is created by i960 compilers. -for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) - ;; - conftest.$ac_ext ) - # This is the source file. - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - # FIXME: I believe we export ac_cv_exeext for Libtool, - # but it would be cool to find out if it's true. Does anybody - # maintain Libtool? --akim. - export ac_cv_exeext - break;; - * ) - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6 - -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -rm -f a.out a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6 - -echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - export ac_cv_exeext - break;; - * ) break;; - esac -done -else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6 - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6 -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -GCC=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -CFLAGS="-g" -echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_prog_cc_g=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 -echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_prog_cc_stdc=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std1 is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -# Don't try gcc -ansi; that turns off useful extensions and -# breaks some systems' header files. -# AIX -qlanglvl=ansi -# Ultrix and OSF/1 -std1 -# HP-UX 10.20 and later -Ae -# HP-UX older versions -Aa -D_HPUX_SOURCE -# SVR4 -Xc -D__EXTENSIONS__ -for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_stdc=$ac_arg -break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext -done -rm -f conftest.$ac_ext conftest.$ac_objext -CC=$ac_save_CC - -fi - -case "x$ac_cv_prog_cc_stdc" in - x|xno) - echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6 ;; - *) - echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 - CC="$CC $ac_cv_prog_cc_stdc" ;; -esac - -# Some people use a C++ compiler to compile C. Since we use `exit', -# in C++ we need to declare it. In case someone uses the same compiler -# for both compiling C and C++ we need to have the C++ compiler decide -# the declaration of exit, since it's the most demanding environment. -cat >conftest.$ac_ext <<_ACEOF -#ifndef __cplusplus - choke me -#endif -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - for ac_declaration in \ - '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -continue -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - - ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo done -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi -fi - - -echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6 -rm -f confinc confmf - -# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then - enableval="$enable_dependency_tracking" - -fi; -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - - -if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - - -depcc="$CC" am_compiler_list= - -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - - -if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -# Check whether --enable-shared or --disable-shared was given. -if test "${enable_shared+set}" = set; then - enableval="$enable_shared" - p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi; - -# Check whether --enable-static or --disable-static was given. -if test "${enable_static+set}" = set; then - enableval="$enable_static" - p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi; - -# Check whether --enable-fast-install or --disable-fast-install was given. -if test "${enable_fast_install+set}" = set; then - enableval="$enable_fast_install" - p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi; - -# Make sure we can run config.sub. -$ac_config_sub sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 -echo "$as_me: error: cannot run $ac_config_sub" >&2;} - { (exit 1); exit 1; }; } - -echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6 -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_build_alias=$build_alias -test -z "$ac_cv_build_alias" && - ac_cv_build_alias=`$ac_config_guess` -test -z "$ac_cv_build_alias" && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } -ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} - { (exit 1); exit 1; }; } - -fi -echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6 -build=$ac_cv_build -build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - - -echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6 -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_host_alias=$host_alias -test -z "$ac_cv_host_alias" && - ac_cv_host_alias=$ac_cv_build_alias -ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} - { (exit 1); exit 1; }; } - -fi -echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6 -host=$ac_cv_host -host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - - -echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 -echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 -if test "${lt_cv_path_SED+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done - -fi - -SED=$lt_cv_path_SED - -echo "$as_me:$LINENO: result: $SED" >&5 -echo "${ECHO_T}$SED" >&6 - -echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6 -if test "${ac_cv_prog_egrep+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' - fi -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 -echo "${ECHO_T}$ac_cv_prog_egrep" >&6 - EGREP=$ac_cv_prog_egrep - - - -# Check whether --with-gnu-ld or --without-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval="$with_gnu_ld" - test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi; -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 -else - echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - 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 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 &5 -echo "${ECHO_T}$LD" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 -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 lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 -with_gnu_ld=$lt_cv_prog_gnu_ld - - -echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 -echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 -if test "${lt_cv_ld_reload_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_ld_reload_flag='-r' -fi -echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 -echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - -echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 -echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 -if test "${lt_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm -fi -fi -echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 -echo "${ECHO_T}$lt_cv_path_NM" >&6 -NM="$lt_cv_path_NM" - -echo "$as_me:$LINENO: checking whether ln -s works" >&5 -echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -else - echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6 -fi - -echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 -echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 -if test "${lt_cv_deplibs_check_method+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix4* | aix5*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump'. - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | kfreebsd*-gnu | dragonfly*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - 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 - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix3*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -nto-qnx*) - lt_cv_deplibs_check_method=unknown - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 -echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check whether --enable-libtool-lock or --disable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval="$enable_libtool_lock" - -fi; -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 3687 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 -echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 -if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - lt_cv_cc_needs_belf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -lt_cv_cc_needs_belf=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 -echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) LD="${LD-ld} -64" ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - - -esac - -need_locks="$enable_libtool_lock" - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6 -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - -for ac_header in dlfcn.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ---------------------------------- ## -## Report this to ncorbic@sangoma.com ## -## ---------------------------------- ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - echo "$as_me:$LINENO: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 -echo "${ECHO_T}$ac_ct_CXX" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_CXX" && break -done -test -n "$ac_ct_CXX" || ac_ct_CXX="g++" - - CXX=$ac_ct_CXX -fi - - -# Provide some information about the compiler. -echo "$as_me:$LINENO:" \ - "checking for C++ compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 -GXX=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -CXXFLAGS="-g" -echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 -echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cxx_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_prog_cxx_g=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -for ac_declaration in \ - '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -continue -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi - -ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -depcc="$CXX" am_compiler_list= - -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - - -if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - - - -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 -echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_cxx_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_cxx_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -echo "$as_me:$LINENO: result: $CXXCPP" >&5 -echo "${ECHO_T}$CXXCPP" >&6 -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_cxx_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_cxx_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -fi - - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$F77"; then - ac_cv_prog_F77="$F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_F77="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -F77=$ac_cv_prog_F77 -if test -n "$F77"; then - echo "$as_me:$LINENO: result: $F77" >&5 -echo "${ECHO_T}$F77" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$F77" && break - done -fi -if test -z "$F77"; then - ac_ct_F77=$F77 - for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_F77"; then - ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_F77="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_F77=$ac_cv_prog_ac_ct_F77 -if test -n "$ac_ct_F77"; then - echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 -echo "${ECHO_T}$ac_ct_F77" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_F77" && break -done - - F77=$ac_ct_F77 -fi - - -# Provide some information about the compiler. -echo "$as_me:5286:" \ - "checking for Fortran 77 compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -rm -f a.out - -# If we don't use `.F' as extension, the preprocessor is not run on the -# input file. (Note that this only needs to work for GNU compilers.) -ac_save_ext=$ac_ext -ac_ext=F -echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 -if test "${ac_cv_f77_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF - program main -#ifndef __GNUC__ - choke me -#endif - - end -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_f77_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_f77_compiler_gnu=$ac_compiler_gnu - -fi -echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 -ac_ext=$ac_save_ext -ac_test_FFLAGS=${FFLAGS+set} -ac_save_FFLAGS=$FFLAGS -FFLAGS= -echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 -echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_f77_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - FFLAGS=-g -cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_f77_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_f77_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_prog_f77_g=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 -echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 -if test "$ac_test_FFLAGS" = set; then - FFLAGS=$ac_save_FFLAGS -elif test $ac_cv_prog_f77_g = yes; then - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-g -O2" - else - FFLAGS="-g" - fi -else - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-O2" - else - FFLAGS= - fi -fi - -G77=`test $ac_compiler_gnu = yes && echo yes` -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! - -# find the maximum length of command line arguments -echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 -echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 -if test "${lt_cv_sys_max_cmd_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - 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 all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # 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 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ - = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 -echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 -else - echo "$as_me:$LINENO: result: none" >&5 -echo "${ECHO_T}none" >&6 -fi - - - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 -echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32*) - symcode='[ABCDGISTW]' - ;; -hpux*) # Its linker distinguishes data from code symbols - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -linux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDGIRSTW]' - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if grep ' nm_test_var$' "$nlist" >/dev/null; then - if grep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[] = -{ -EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -f conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - echo "$as_me:$LINENO: result: failed" >&5 -echo "${ECHO_T}failed" >&6 -else - echo "$as_me:$LINENO: result: ok" >&5 -echo "${ECHO_T}ok" >&6 -fi - -echo "$as_me:$LINENO: checking for objdir" >&5 -echo $ECHO_N "checking for objdir... $ECHO_C" >&6 -if test "${lt_cv_objdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 -echo "${ECHO_T}$lt_cv_objdir" >&6 -objdir=$lt_cv_objdir - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 -echo "${ECHO_T}$ac_ct_AR" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - AR=$ac_ct_AR -else - AR="$ac_cv_prog_AR" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - RANLIB=$ac_ct_RANLIB -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - STRIP=$ac_ct_STRIP -else - STRIP="$ac_cv_prog_STRIP" -fi - - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 -echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "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 - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - echo "$as_me:$LINENO: checking for file" >&5 -echo $ECHO_N "checking for file... $ECHO_C" >&6 -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "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 - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -enable_dlopen=no -enable_win32_dll=no - -# Check whether --enable-libtool-lock or --disable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval="$enable_libtool_lock" - -fi; -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - - -# Check whether --with-pic or --without-pic was given. -if test "${with_pic+set}" = set; then - withval="$with_pic" - pic_mode="$withval" -else - pic_mode=default -fi; -test -z "$pic_mode" && pic_mode=default - -# Use C for the default configuration in the libtool script -tagname= -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}\n' - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - -echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # 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}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6349: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:6353: \$? = $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. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - -lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - interix3*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic='-qnocommon' - lt_prog_compiler_wl='-Wl,' - ;; - esac - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - 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 - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - linux*) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - 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='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic" >&6 - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - -echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 -if test "${lt_prog_compiler_pic_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # 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}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6617: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:6621: \$? = $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. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works=yes - fi - fi - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 - -if test x"$lt_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 -if test "${lt_prog_compiler_static_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - printf "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # 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. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works=yes - fi - else - lt_prog_compiler_static_works=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 - -if test x"$lt_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - -echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_c_o+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # 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}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6721: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:6725: \$? = $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 - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 - - runpath_var= - allow_undefined_flag= - enable_shared_with_static_runtimes=no - archive_cmds= - archive_expsym_cmds= - old_archive_From_new_cmds= - old_archive_from_expsyms_cmds= - export_dynamic_flag_spec= - whole_archive_flag_spec= - thread_safe_flag_spec= - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_direct=no - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - link_all_deplibs=unknown - hardcode_automatic=no - module_cmds= - module_expsym_cmds= - always_export_symbols=no - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - 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. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 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*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix3*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - linux*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - 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' - tmp_addflag=' $pic_flag' - ;; - 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' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct=yes - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - if test "$GCC" = yes ; then - 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 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 - case $cc_basename in - xlc*) - 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 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}' - ;; - *) - ld_shlibs=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | kfreebsd*-gnu | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - hardcode_direct=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld='-rpath $libdir' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - openbsd*) - hardcode_direct=yes - hardcode_shlibpath_var=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. - # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; - *) - whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $ld_shlibs" >&5 -echo "${ECHO_T}$ld_shlibs" >&6 -test "$ld_shlibs" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 -echo "${ECHO_T}$archive_cmds_need_lc" >&6 - ;; - esac - fi - ;; -esac - -echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - 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~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - 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`' - # 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"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -kfreebsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - 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*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - freebsd*) # from 4.6 on - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix3*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '#line 8190 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -knetbsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || \ - test -n "$runpath_var" || \ - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -echo "$as_me:$LINENO: result: $hardcode_action" >&5 -echo "${ECHO_T}$hardcode_action" >&6 - -if test "$hardcode_action" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -striplib= -old_striplib= -echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - ;; - *) - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - ;; - esac -fi - -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -int -main () -{ -dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - echo "$as_me:$LINENO: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i declares gettimeofday. */ -#define shl_load innocuous_shl_load - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef shl_load - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shl_load (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_shl_load) || defined (__stub___shl_load) -choke me -#else -char (*f) () = shl_load; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != shl_load; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_shl_load=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6 -if test $ac_cv_func_shl_load = yes; then - lt_cv_dlopen="shl_load" -else - echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shl_load (); -int -main () -{ -shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dld_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_shl_load=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 -if test $ac_cv_lib_dld_shl_load = yes; then - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" -else - echo "$as_me:$LINENO: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef dlopen - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_dlopen) || defined (__stub___dlopen) -choke me -#else -char (*f) () = dlopen; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != dlopen; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6 -if test $ac_cv_func_dlopen = yes; then - lt_cv_dlopen="dlopen" -else - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -int -main () -{ -dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -int -main () -{ -dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_svld_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_svld_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 -if test $ac_cv_lib_svld_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dld_link (); -int -main () -{ -dld_link (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dld_dld_link=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_dld_link=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 -if test $ac_cv_lib_dld_dld_link = yes; then - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6 - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - -# Report which library types will actually be built -echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6 - -echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6 - -echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6 - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler \ - CC \ - LD \ - lt_prog_compiler_wl \ - lt_prog_compiler_pic \ - lt_prog_compiler_static \ - lt_prog_compiler_no_builtin_flag \ - export_dynamic_flag_spec \ - thread_safe_flag_spec \ - whole_archive_flag_spec \ - enable_shared_with_static_runtimes \ - old_archive_cmds \ - old_archive_from_new_cmds \ - predep_objects \ - postdep_objects \ - predeps \ - postdeps \ - compiler_lib_search_path \ - archive_cmds \ - archive_expsym_cmds \ - postinstall_cmds \ - postuninstall_cmds \ - old_archive_from_expsyms_cmds \ - allow_undefined_flag \ - no_undefined_flag \ - export_symbols_cmds \ - hardcode_libdir_flag_spec \ - hardcode_libdir_flag_spec_ld \ - hardcode_libdir_separator \ - hardcode_automatic \ - module_cmds \ - module_expsym_cmds \ - lt_cv_prog_compiler_c_o \ - exclude_expsyms \ - include_expsyms; do - - case $var in - old_archive_cmds | \ - old_archive_from_new_cmds | \ - archive_cmds | \ - archive_expsym_cmds | \ - module_cmds | \ - module_expsym_cmds | \ - old_archive_from_expsyms_cmds | \ - export_symbols_cmds | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="${ofile}T" - trap "$rm \"$cfgfile\"; exit 1" 1 2 15 - $rm -f "$cfgfile" - { echo "$as_me:$LINENO: creating $ofile" >&5 -echo "$as_me: creating $ofile" >&6;} - - cat <<__EOF__ >> "$cfgfile" -#! $SHELL - -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# The names of the tagged configurations supported by this script. -available_tags= - -# ### BEGIN LIBTOOL CONFIG - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU C compiler? -with_gcc=$GCC - -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=\`echo $lt_predep_objects | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=\`echo $lt_postdep_objects | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# ### END LIBTOOL CONFIG - -__EOF__ - - - case $host_os in - aix3*) - cat <<\EOF >> "$cfgfile" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || \ - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - -# Check whether --with-tags or --without-tags was given. -if test "${with_tags+set}" = set; then - withval="$with_tags" - tagnames="$withval" -fi; - -if test -f "$ltmain" && test -n "$tagnames"; then - if test ! -f "${ofile}"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} - fi - - if test -z "$LTCC"; then - eval "`$SHELL ${ofile} --config | grep '^LTCC='`" - if test -z "$LTCC"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} - else - { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 -echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} - fi - fi - if test -z "$LTCFLAGS"; then - eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" - fi - - # Extract list of available tagged configurations in $ofile. - # Note that this assumes the entire list is on one line. - available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for tagname in $tagnames; do - IFS="$lt_save_ifs" - # Check whether tagname contains only valid characters - case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in - "") ;; - *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 -echo "$as_me: error: invalid tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null - then - { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 -echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} - { (exit 1); exit 1; }; } - fi - - # Update the list of available tags. - if test -n "$tagname"; then - echo appending configuration tag \"$tagname\" to $ofile - - case $tagname in - CXX) - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_flag_spec_ld_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - $as_unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - $as_unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -compiler_CXX=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' -else - lt_prog_compiler_no_builtin_flag_CXX= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - -# Check whether --with-gnu-ld or --without-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval="$with_gnu_ld" - test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi; -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 -else - echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - 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 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 &5 -echo "${ECHO_T}$LD" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 -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 lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 -ld_shlibs_CXX=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct_CXX=yes - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - whole_archive_flag_spec_CXX='' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no - output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes - fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - else - 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 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 - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - 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}' - else - case $cc_basename in - xlc*) - 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 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}' - ;; - *) - ld_shlibs_CXX=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - freebsd[12]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - ld_shlibs_CXX=no - ;; - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - freebsd* | kfreebsd*-gnu | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - gnu*) - ;; - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # 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 -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_CXX='+b $libdir' - ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # 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 -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - interix3*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - ;; - linux*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # 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 $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC*) - # Portland Group C++ compiler - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - 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' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # 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 -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - openbsd*) - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # 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 -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # 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 -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - solaris*) - 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} -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} ${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 - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The C++ compiler is used as linker so we must use $wl - # flag to pass the commands to the underlying system - # linker. We must also pass each convience library through - # to the system linker between allextract/defaultextract. - # The C++ compiler will combine linker options so we - # cannot just pass the convience library names through - # without $wl. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - 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 - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - # So that behaviour is only enabled if SCOABSPATH is set to a - # non-empty value in the environment. Most likely only useful for - # creating official distributions of packages. - # This is a hack until libtool officially supports absolute path - # names for shared libraries. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; -esac -echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6 -test "$ld_shlibs_CXX" = no && can_build_shared=no - -GCC_CXX="$GXX" -LD_CXX="$LD" - - -cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - # 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"` - - for p in `eval $output_verbose_link_cmd`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" \ - || test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$rm -f confest.$objext - -# PORTME: override above test on systems where it is broken -case $host_os in -interix3*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; - -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 - -lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - -echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - interix3*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix4* | aix5*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_CXX='-qnocommon' - lt_prog_compiler_wl_CXX='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | kfreebsd*-gnu | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux*) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC*) - # Portland Group C++ compiler. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - -echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 -if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # 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}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11530: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:11534: \$? = $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. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_CXX=yes - fi - fi - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 - -if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 -if test "${lt_prog_compiler_static_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - printf "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # 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. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_CXX=yes - fi - else - lt_prog_compiler_static_works_CXX=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6 - -if test x"$lt_prog_compiler_static_works_CXX" = xyes; then - : -else - lt_prog_compiler_static_CXX= -fi - - -echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # 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}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11634: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:11638: \$? = $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 - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix4* | aix5*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw*) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6 -test "$ld_shlibs_CXX" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_CXX=no - else - archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 - ;; - esac - fi - ;; -esac - -echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - 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~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - 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`' - # 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"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -kfreebsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - 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*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - freebsd*) # from 4.6 on - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix3*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '#line 12170 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -knetbsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || \ - test -n "$runpath_var_CXX" || \ - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 -echo "${ECHO_T}$hardcode_action_CXX" >&6 - -if test "$hardcode_action_CXX" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_CXX \ - CC_CXX \ - LD_CXX \ - lt_prog_compiler_wl_CXX \ - lt_prog_compiler_pic_CXX \ - lt_prog_compiler_static_CXX \ - lt_prog_compiler_no_builtin_flag_CXX \ - export_dynamic_flag_spec_CXX \ - thread_safe_flag_spec_CXX \ - whole_archive_flag_spec_CXX \ - enable_shared_with_static_runtimes_CXX \ - old_archive_cmds_CXX \ - old_archive_from_new_cmds_CXX \ - predep_objects_CXX \ - postdep_objects_CXX \ - predeps_CXX \ - postdeps_CXX \ - compiler_lib_search_path_CXX \ - archive_cmds_CXX \ - archive_expsym_cmds_CXX \ - postinstall_cmds_CXX \ - postuninstall_cmds_CXX \ - old_archive_from_expsyms_cmds_CXX \ - allow_undefined_flag_CXX \ - no_undefined_flag_CXX \ - export_symbols_cmds_CXX \ - hardcode_libdir_flag_spec_CXX \ - hardcode_libdir_flag_spec_ld_CXX \ - hardcode_libdir_separator_CXX \ - hardcode_automatic_CXX \ - module_cmds_CXX \ - module_expsym_cmds_CXX \ - lt_cv_prog_compiler_c_o_CXX \ - exclude_expsyms_CXX \ - include_expsyms_CXX; do - - case $var in - old_archive_cmds_CXX | \ - old_archive_from_new_cmds_CXX | \ - archive_cmds_CXX | \ - archive_expsym_cmds_CXX | \ - module_cmds_CXX | \ - module_expsym_cmds_CXX | \ - old_archive_from_expsyms_cmds_CXX | \ - export_symbols_cmds_CXX | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_CXX - -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_CXX -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=\`echo $lt_predep_objects_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=\`echo $lt_postdep_objects_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_CXX" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld - - else - tagname="" - fi - ;; - - F77) - if test -n "$F77" && test "X$F77" != "Xno"; then - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu - - -archive_cmds_need_lc_F77=no -allow_undefined_flag_F77= -always_export_symbols_F77=no -archive_expsym_cmds_F77= -export_dynamic_flag_spec_F77= -hardcode_direct_F77=no -hardcode_libdir_flag_spec_F77= -hardcode_libdir_flag_spec_ld_F77= -hardcode_libdir_separator_F77= -hardcode_minus_L_F77=no -hardcode_automatic_F77=no -module_cmds_F77= -module_expsym_cmds_F77= -link_all_deplibs_F77=unknown -old_archive_cmds_F77=$old_archive_cmds -no_undefined_flag_F77= -whole_archive_flag_spec_F77= -enable_shared_with_static_runtimes_F77=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -objext_F77=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code=" subroutine t\n return\n end\n" - -# Code to be used in simple link tests -lt_simple_link_test_code=" program t\n end\n" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${F77-"f77"} -compiler=$CC -compiler_F77=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6 - -echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6 - -echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6 - -GCC_F77="$G77" -LD_F77="$LD" - -lt_prog_compiler_wl_F77= -lt_prog_compiler_pic_F77= -lt_prog_compiler_static_F77= - -echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 - - if test "$GCC" = yes; then - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_static_F77='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_F77='-fno-common' - ;; - - interix3*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_F77=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_F77=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_F77='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - else - lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_F77='-qnocommon' - lt_prog_compiler_wl_F77='-Wl,' - ;; - esac - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - 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 - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_F77='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_F77='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - linux*) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-static' - ;; - 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='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_F77='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_F77='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_F77='-Qoption ld ';; - *) - lt_prog_compiler_wl_F77='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl_F77='-Qoption ld ' - lt_prog_compiler_pic_F77='-PIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_F77='-Kconform_pic' - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_can_build_shared_F77=no - ;; - - uts4*) - lt_prog_compiler_pic_F77='-pic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared_F77=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_F77"; then - -echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 -if test "${lt_prog_compiler_pic_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_F77=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_F77" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # 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}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13228: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:13232: \$? = $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. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_F77=yes - fi - fi - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 - -if test x"$lt_prog_compiler_pic_works_F77" = xyes; then - case $lt_prog_compiler_pic_F77 in - "" | " "*) ;; - *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; - esac -else - lt_prog_compiler_pic_F77= - lt_prog_compiler_can_build_shared_F77=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_F77= - ;; - *) - lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" -echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 -if test "${lt_prog_compiler_static_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_F77=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - printf "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # 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. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_F77=yes - fi - else - lt_prog_compiler_static_works_F77=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6 - -if test x"$lt_prog_compiler_static_works_F77" = xyes; then - : -else - lt_prog_compiler_static_F77= -fi - - -echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_F77=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # 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}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13332: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:13336: \$? = $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 - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_F77=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 - - runpath_var= - allow_undefined_flag_F77= - enable_shared_with_static_runtimes_F77=no - archive_cmds_F77= - archive_expsym_cmds_F77= - old_archive_From_new_cmds_F77= - old_archive_from_expsyms_cmds_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - thread_safe_flag_spec_F77= - hardcode_libdir_flag_spec_F77= - hardcode_libdir_flag_spec_ld_F77= - hardcode_libdir_separator_F77= - hardcode_direct_F77=no - hardcode_minus_L_F77=no - hardcode_shlibpath_var_F77=unsupported - link_all_deplibs_F77=unknown - hardcode_automatic_F77=no - module_cmds_F77= - module_expsym_cmds_F77= - always_export_symbols_F77=no - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_F77= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs_F77=yes - 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. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_F77='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_F77= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 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*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_F77=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_F77=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_F77='-L$libdir' - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=no - enable_shared_with_static_runtimes_F77=yes - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_F77=no - fi - ;; - - interix3*) - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - linux*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - 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' - tmp_addflag=' $pic_flag' - ;; - 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' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs_F77=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs_F77=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - - if test "$ld_shlibs_F77" = no; then - runpath_var= - hardcode_libdir_flag_spec_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=yes - archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_F77=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_F77=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_F77='' - hardcode_direct_F77=yes - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct_F77=yes - else - # We have old collect2 - hardcode_direct_F77=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_F77=yes - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_libdir_separator_F77= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_F77=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_F77='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_f77_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_F77="-z nodefs" - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_f77_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_F77=' ${wl}-bernotok' - allow_undefined_flag_F77=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_F77='$convenience' - archive_cmds_need_lc_F77=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_F77=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_F77=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_F77=' ' - allow_undefined_flag_F77=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_F77='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_F77='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_F77=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_F77=no - hardcode_direct_F77=no - hardcode_automatic_F77=yes - hardcode_shlibpath_var_F77=unsupported - whole_archive_flag_spec_F77='' - link_all_deplibs_F77=yes - if test "$GCC" = yes ; then - 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 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 - case $cc_basename in - xlc*) - 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 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}' - ;; - *) - ld_shlibs_F77=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - freebsd1*) - ld_shlibs_F77=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | kfreebsd*-gnu | dragonfly*) - archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_direct_F77=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_F77='+b $libdir' - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - ;; - *) - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - link_all_deplibs_F77=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - newsos6) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_shlibpath_var_F77=no - ;; - - openbsd*) - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - ;; - *) - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - ;; - esac - fi - ;; - - os2*) - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - allow_undefined_flag_F77=unsupported - archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_F77='-rpath $libdir' - fi - hardcode_libdir_separator_F77=: - ;; - - solaris*) - no_undefined_flag_F77=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_shlibpath_var_F77=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. - # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; - *) - whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; - esac - link_all_deplibs_F77=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_F77='$CC -r -o $output$reload_objs' - hardcode_direct_F77=no - ;; - motorola) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_F77=no - ;; - - sysv4.3*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - export_dynamic_flag_spec_F77='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_F77=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) - no_undefined_flag_F77='${wl}-z,text' - archive_cmds_need_lc_F77=no - hardcode_shlibpath_var_F77=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_F77='${wl}-z,text' - allow_undefined_flag_F77='${wl}-z,nodefs' - archive_cmds_need_lc_F77=no - hardcode_shlibpath_var_F77=no - hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - export_dynamic_flag_spec_F77='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - *) - ld_shlibs_F77=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 -echo "${ECHO_T}$ld_shlibs_F77" >&6 -test "$ld_shlibs_F77" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_F77" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_F77=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_F77 in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_F77 - pic_flag=$lt_prog_compiler_pic_F77 - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_F77 - allow_undefined_flag_F77= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_F77=no - else - archive_cmds_need_lc_F77=yes - fi - allow_undefined_flag_F77=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 - ;; - esac - fi - ;; -esac - -echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - 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~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - 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`' - # 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"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -kfreebsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - 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*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - freebsd*) # from 4.6 on - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix3*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '#line 14781 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -knetbsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 -hardcode_action_F77= -if test -n "$hardcode_libdir_flag_spec_F77" || \ - test -n "$runpath_var_F77" || \ - test "X$hardcode_automatic_F77" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct_F77" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && - test "$hardcode_minus_L_F77" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_F77=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_F77=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_F77=unsupported -fi -echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 -echo "${ECHO_T}$hardcode_action_F77" >&6 - -if test "$hardcode_action_F77" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_F77 \ - CC_F77 \ - LD_F77 \ - lt_prog_compiler_wl_F77 \ - lt_prog_compiler_pic_F77 \ - lt_prog_compiler_static_F77 \ - lt_prog_compiler_no_builtin_flag_F77 \ - export_dynamic_flag_spec_F77 \ - thread_safe_flag_spec_F77 \ - whole_archive_flag_spec_F77 \ - enable_shared_with_static_runtimes_F77 \ - old_archive_cmds_F77 \ - old_archive_from_new_cmds_F77 \ - predep_objects_F77 \ - postdep_objects_F77 \ - predeps_F77 \ - postdeps_F77 \ - compiler_lib_search_path_F77 \ - archive_cmds_F77 \ - archive_expsym_cmds_F77 \ - postinstall_cmds_F77 \ - postuninstall_cmds_F77 \ - old_archive_from_expsyms_cmds_F77 \ - allow_undefined_flag_F77 \ - no_undefined_flag_F77 \ - export_symbols_cmds_F77 \ - hardcode_libdir_flag_spec_F77 \ - hardcode_libdir_flag_spec_ld_F77 \ - hardcode_libdir_separator_F77 \ - hardcode_automatic_F77 \ - module_cmds_F77 \ - module_expsym_cmds_F77 \ - lt_cv_prog_compiler_c_o_F77 \ - exclude_expsyms_F77 \ - include_expsyms_F77; do - - case $var in - old_archive_cmds_F77 | \ - old_archive_from_new_cmds_F77 | \ - archive_cmds_F77 | \ - archive_expsym_cmds_F77 | \ - module_cmds_F77 | \ - module_expsym_cmds_F77 | \ - old_archive_from_expsyms_cmds_F77 | \ - export_symbols_cmds_F77 | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_F77 - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_F77 - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_F77 - -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_F77 - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_F77 - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_F77 -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_F77 - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_F77 -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_F77 -archive_expsym_cmds=$lt_archive_expsym_cmds_F77 -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_F77 -module_expsym_cmds=$lt_module_expsym_cmds_F77 - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=\`echo $lt_predep_objects_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=\`echo $lt_postdep_objects_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_F77 - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_F77 - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_F77 - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_F77 - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_F77 - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_F77 - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_F77 - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_F77 - -# Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_F77" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_F77 - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_F77 - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_F77 - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_F77 - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - else - tagname="" - fi - ;; - - GCJ) - if test -n "$GCJ" && test "X$GCJ" != "Xno"; then - - - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -objext_GCJ=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}\n" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${GCJ-"gcj"} -compiler=$CC -compiler_GCJ=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -archive_cmds_need_lc_GCJ=no - -old_archive_cmds_GCJ=$old_archive_cmds - - -lt_prog_compiler_no_builtin_flag_GCJ= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' - - -echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # 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}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15559: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:15563: \$? = $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. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" -else - : -fi - -fi - -lt_prog_compiler_wl_GCJ= -lt_prog_compiler_pic_GCJ= -lt_prog_compiler_static_GCJ= - -echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 - - if test "$GCC" = yes; then - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_static_GCJ='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_GCJ='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_GCJ='-fno-common' - ;; - - interix3*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_GCJ=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_GCJ=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_GCJ='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic_GCJ='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_GCJ='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_GCJ='-Bstatic' - else - lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_GCJ='-qnocommon' - lt_prog_compiler_wl_GCJ='-Wl,' - ;; - esac - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - 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 - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_GCJ='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_GCJ='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - linux*) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-static' - ;; - 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='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_GCJ='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_GCJ='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_GCJ='-Qoption ld ';; - *) - lt_prog_compiler_wl_GCJ='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl_GCJ='-Qoption ld ' - lt_prog_compiler_pic_GCJ='-PIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_GCJ='-Kconform_pic' - lt_prog_compiler_static_GCJ='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_can_build_shared_GCJ=no - ;; - - uts4*) - lt_prog_compiler_pic_GCJ='-pic' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared_GCJ=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_GCJ"; then - -echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 -if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_GCJ=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_GCJ" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # 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}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15827: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:15831: \$? = $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. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_GCJ=yes - fi - fi - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 - -if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then - case $lt_prog_compiler_pic_GCJ in - "" | " "*) ;; - *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; - esac -else - lt_prog_compiler_pic_GCJ= - lt_prog_compiler_can_build_shared_GCJ=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_GCJ= - ;; - *) - lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" -echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 -if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_GCJ=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - printf "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # 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. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_GCJ=yes - fi - else - lt_prog_compiler_static_works_GCJ=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6 - -if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then - : -else - lt_prog_compiler_static_GCJ= -fi - - -echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_GCJ=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # 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}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15931: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:15935: \$? = $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 - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_GCJ=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 - - runpath_var= - allow_undefined_flag_GCJ= - enable_shared_with_static_runtimes_GCJ=no - archive_cmds_GCJ= - archive_expsym_cmds_GCJ= - old_archive_From_new_cmds_GCJ= - old_archive_from_expsyms_cmds_GCJ= - export_dynamic_flag_spec_GCJ= - whole_archive_flag_spec_GCJ= - thread_safe_flag_spec_GCJ= - hardcode_libdir_flag_spec_GCJ= - hardcode_libdir_flag_spec_ld_GCJ= - hardcode_libdir_separator_GCJ= - hardcode_direct_GCJ=no - hardcode_minus_L_GCJ=no - hardcode_shlibpath_var_GCJ=unsupported - link_all_deplibs_GCJ=unknown - hardcode_automatic_GCJ=no - module_cmds_GCJ= - module_expsym_cmds_GCJ= - always_export_symbols_GCJ=no - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_GCJ= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs_GCJ=yes - 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. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_GCJ= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 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*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_GCJ=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_GCJ=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_GCJ=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_GCJ='-L$libdir' - allow_undefined_flag_GCJ=unsupported - always_export_symbols_GCJ=no - enable_shared_with_static_runtimes_GCJ=yes - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - interix3*) - hardcode_direct_GCJ=no - hardcode_shlibpath_var_GCJ=no - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - linux*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - 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' - tmp_addflag=' $pic_flag' - ;; - 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' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs_GCJ=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_GCJ=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs_GCJ=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - esac - - if test "$ld_shlibs_GCJ" = no; then - runpath_var= - hardcode_libdir_flag_spec_GCJ= - export_dynamic_flag_spec_GCJ= - whole_archive_flag_spec_GCJ= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_GCJ=unsupported - always_export_symbols_GCJ=yes - archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_GCJ=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_GCJ=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_GCJ='' - hardcode_direct_GCJ=yes - hardcode_libdir_separator_GCJ=':' - link_all_deplibs_GCJ=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct_GCJ=yes - else - # We have old collect2 - hardcode_direct_GCJ=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_GCJ=yes - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_libdir_separator_GCJ= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_GCJ=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_GCJ='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_GCJ="-z nodefs" - archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_GCJ=' ${wl}-bernotok' - allow_undefined_flag_GCJ=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_GCJ='$convenience' - archive_cmds_need_lc_GCJ=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_GCJ=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_GCJ=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_GCJ=' ' - allow_undefined_flag_GCJ=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_GCJ='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_GCJ=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_GCJ=no - hardcode_direct_GCJ=no - hardcode_automatic_GCJ=yes - hardcode_shlibpath_var_GCJ=unsupported - whole_archive_flag_spec_GCJ='' - link_all_deplibs_GCJ=yes - if test "$GCC" = yes ; then - 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 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 - case $cc_basename in - xlc*) - 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 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}' - ;; - *) - ld_shlibs_GCJ=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_shlibpath_var_GCJ=no - ;; - - freebsd1*) - ld_shlibs_GCJ=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes - hardcode_minus_L_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | kfreebsd*-gnu | dragonfly*) - archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_direct_GCJ=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - - hardcode_direct_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' - hardcode_direct_GCJ=no - hardcode_shlibpath_var_GCJ=no - ;; - *) - hardcode_direct_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' - fi - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - link_all_deplibs_GCJ=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - newsos6) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_shlibpath_var_GCJ=no - ;; - - openbsd*) - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - ;; - *) - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - ;; - esac - fi - ;; - - os2*) - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - allow_undefined_flag_GCJ=unsupported - archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_GCJ=' -expect_unresolved \*' - archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_GCJ=' -expect_unresolved \*' - archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_GCJ='-rpath $libdir' - fi - hardcode_libdir_separator_GCJ=: - ;; - - solaris*) - no_undefined_flag_GCJ=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_shlibpath_var_GCJ=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. - # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; - *) - whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; - esac - link_all_deplibs_GCJ=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_direct_GCJ=yes - hardcode_minus_L_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_GCJ='$CC -r -o $output$reload_objs' - hardcode_direct_GCJ=no - ;; - motorola) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_GCJ=no - ;; - - sysv4.3*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_GCJ=no - export_dynamic_flag_spec_GCJ='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_GCJ=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_GCJ=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) - no_undefined_flag_GCJ='${wl}-z,text' - archive_cmds_need_lc_GCJ=no - hardcode_shlibpath_var_GCJ=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_GCJ='${wl}-z,text' - allow_undefined_flag_GCJ='${wl}-z,nodefs' - archive_cmds_need_lc_GCJ=no - hardcode_shlibpath_var_GCJ=no - hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_GCJ=':' - link_all_deplibs_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_shlibpath_var_GCJ=no - ;; - - *) - ld_shlibs_GCJ=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 -echo "${ECHO_T}$ld_shlibs_GCJ" >&6 -test "$ld_shlibs_GCJ" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_GCJ" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_GCJ=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_GCJ in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_GCJ - pic_flag=$lt_prog_compiler_pic_GCJ - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ - allow_undefined_flag_GCJ= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_GCJ=no - else - archive_cmds_need_lc_GCJ=yes - fi - allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 - ;; - esac - fi - ;; -esac - -echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - 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~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - 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`' - # 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"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -kfreebsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - 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*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - freebsd*) # from 4.6 on - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix3*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '#line 17400 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -knetbsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 -hardcode_action_GCJ= -if test -n "$hardcode_libdir_flag_spec_GCJ" || \ - test -n "$runpath_var_GCJ" || \ - test "X$hardcode_automatic_GCJ" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct_GCJ" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && - test "$hardcode_minus_L_GCJ" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_GCJ=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_GCJ=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_GCJ=unsupported -fi -echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 -echo "${ECHO_T}$hardcode_action_GCJ" >&6 - -if test "$hardcode_action_GCJ" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_GCJ \ - CC_GCJ \ - LD_GCJ \ - lt_prog_compiler_wl_GCJ \ - lt_prog_compiler_pic_GCJ \ - lt_prog_compiler_static_GCJ \ - lt_prog_compiler_no_builtin_flag_GCJ \ - export_dynamic_flag_spec_GCJ \ - thread_safe_flag_spec_GCJ \ - whole_archive_flag_spec_GCJ \ - enable_shared_with_static_runtimes_GCJ \ - old_archive_cmds_GCJ \ - old_archive_from_new_cmds_GCJ \ - predep_objects_GCJ \ - postdep_objects_GCJ \ - predeps_GCJ \ - postdeps_GCJ \ - compiler_lib_search_path_GCJ \ - archive_cmds_GCJ \ - archive_expsym_cmds_GCJ \ - postinstall_cmds_GCJ \ - postuninstall_cmds_GCJ \ - old_archive_from_expsyms_cmds_GCJ \ - allow_undefined_flag_GCJ \ - no_undefined_flag_GCJ \ - export_symbols_cmds_GCJ \ - hardcode_libdir_flag_spec_GCJ \ - hardcode_libdir_flag_spec_ld_GCJ \ - hardcode_libdir_separator_GCJ \ - hardcode_automatic_GCJ \ - module_cmds_GCJ \ - module_expsym_cmds_GCJ \ - lt_cv_prog_compiler_c_o_GCJ \ - exclude_expsyms_GCJ \ - include_expsyms_GCJ; do - - case $var in - old_archive_cmds_GCJ | \ - old_archive_from_new_cmds_GCJ | \ - archive_cmds_GCJ | \ - archive_expsym_cmds_GCJ | \ - module_cmds_GCJ | \ - module_expsym_cmds_GCJ | \ - old_archive_from_expsyms_cmds_GCJ | \ - export_symbols_cmds_GCJ | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_GCJ - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_GCJ - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_GCJ - -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_GCJ - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_GCJ - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_GCJ -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_GCJ - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_GCJ -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_GCJ -archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_GCJ -module_expsym_cmds=$lt_module_expsym_cmds_GCJ - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=\`echo $lt_predep_objects_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=\`echo $lt_postdep_objects_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_GCJ - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_GCJ - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_GCJ - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_GCJ - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_GCJ - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_GCJ - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_GCJ - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_GCJ - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_GCJ - -# Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_GCJ" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_GCJ - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_GCJ - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_GCJ - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_GCJ - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - else - tagname="" - fi - ;; - - RC) - - - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -objext_RC=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${RC-"windres"} -compiler=$CC -compiler_RC=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - -lt_cv_prog_compiler_c_o_RC=yes - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_RC \ - CC_RC \ - LD_RC \ - lt_prog_compiler_wl_RC \ - lt_prog_compiler_pic_RC \ - lt_prog_compiler_static_RC \ - lt_prog_compiler_no_builtin_flag_RC \ - export_dynamic_flag_spec_RC \ - thread_safe_flag_spec_RC \ - whole_archive_flag_spec_RC \ - enable_shared_with_static_runtimes_RC \ - old_archive_cmds_RC \ - old_archive_from_new_cmds_RC \ - predep_objects_RC \ - postdep_objects_RC \ - predeps_RC \ - postdeps_RC \ - compiler_lib_search_path_RC \ - archive_cmds_RC \ - archive_expsym_cmds_RC \ - postinstall_cmds_RC \ - postuninstall_cmds_RC \ - old_archive_from_expsyms_cmds_RC \ - allow_undefined_flag_RC \ - no_undefined_flag_RC \ - export_symbols_cmds_RC \ - hardcode_libdir_flag_spec_RC \ - hardcode_libdir_flag_spec_ld_RC \ - hardcode_libdir_separator_RC \ - hardcode_automatic_RC \ - module_cmds_RC \ - module_expsym_cmds_RC \ - lt_cv_prog_compiler_c_o_RC \ - exclude_expsyms_RC \ - include_expsyms_RC; do - - case $var in - old_archive_cmds_RC | \ - old_archive_from_new_cmds_RC | \ - archive_cmds_RC | \ - archive_expsym_cmds_RC | \ - module_cmds_RC | \ - module_expsym_cmds_RC | \ - old_archive_from_expsyms_cmds_RC | \ - export_symbols_cmds_RC | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_RC - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_RC - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_RC - -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_RC - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_RC - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_RC -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_RC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_RC -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_RC -archive_expsym_cmds=$lt_archive_expsym_cmds_RC -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_RC -module_expsym_cmds=$lt_module_expsym_cmds_RC - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=\`echo $lt_predep_objects_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=\`echo $lt_postdep_objects_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_RC - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_RC - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_RC - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_RC - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_RC - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_RC - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_RC - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_RC - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_RC - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_RC - -# Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_RC" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_RC - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_RC - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_RC - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_RC - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - ;; - - *) - { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 -echo "$as_me: error: Unsupported tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - - # Append the new tag name to the list of available tags. - if test -n "$tagname" ; then - available_tags="$available_tags $tagname" - fi - fi - done - IFS="$lt_save_ifs" - - # Now substitute the updated list of available tags. - if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then - mv "${ofile}T" "$ofile" - chmod +x "$ofile" - else - rm -f "${ofile}T" - { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 -echo "$as_me: error: unable to update list of available tagged configurations." >&2;} - { (exit 1); exit 1; }; } - fi -fi - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - -# Prevent multiple expansion - - - - - - - - - - - - - - - - - - - - -# Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="no" -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - -# Checks for library headers - - -<<<<<<< .mine -# Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="no" -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -# Checks for libraries. -======= ->>>>>>> .r191 - - - - - - - -for ac_header in fcntl.h netinet/in.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h unistd.h math.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ---------------------------------- ## -## Report this to ncorbic@sangoma.com ## -## ---------------------------------- ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -# Checks for libpri support - -# Check whether --with-libpri or --without-libpri was given. -if test "${with_libpri+set}" = set; then - withval="$with_libpri" - LIBPRI_PATH="$withval" -fi; - - -if test -d "$LIBPRI_PATH" ; then - LIBPRI_TRUE= - LIBPRI_FALSE='#' -else - LIBPRI_TRUE='#' - LIBPRI_FALSE= -fi - - - -# Checks for typedefs, structures, and compiler characteristics. -echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 -echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 -if test "${ac_cv_header_time+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include - -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_header_time=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_time=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 -echo "${ECHO_T}$ac_cv_header_time" >&6 -if test $ac_cv_header_time = yes; then - -cat >>confdefs.h <<\_ACEOF -#define TIME_WITH_SYS_TIME 1 -_ACEOF - -fi - - -# Checks for library functions. - - -for ac_header in sys/select.h sys/socket.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ---------------------------------- ## -## Report this to ncorbic@sangoma.com ## -## ---------------------------------- ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -echo "$as_me:$LINENO: checking types of arguments for select" >&5 -echo $ECHO_N "checking types of arguments for select... $ECHO_C" >&6 -if test "${ac_cv_func_select_args+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - for ac_arg234 in 'fd_set *' 'int *' 'void *'; do - for ac_arg1 in 'int' 'size_t' 'unsigned long' 'unsigned'; do - for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#if HAVE_SYS_SELECT_H -# include -#endif -#if HAVE_SYS_SOCKET_H -# include -#endif - -int -main () -{ -extern int select ($ac_arg1, - $ac_arg234, $ac_arg234, $ac_arg234, - $ac_arg5); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3 -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done - done -done -# Provide a safe default value. -: ${ac_cv_func_select_args='int,int *,struct timeval *'} - -fi -echo "$as_me:$LINENO: result: $ac_cv_func_select_args" >&5 -echo "${ECHO_T}$ac_cv_func_select_args" >&6 -ac_save_IFS=$IFS; IFS=',' -set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'` -IFS=$ac_save_IFS -shift - -cat >>confdefs.h <<_ACEOF -#define SELECT_TYPE_ARG1 $1 -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define SELECT_TYPE_ARG234 ($2) -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define SELECT_TYPE_ARG5 ($3) -_ACEOF - -rm -f conftest* - - - - - -for ac_func in gettimeofday memset select socket -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - ac_config_files="$ac_config_files Makefile" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -{ - (set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; -} | - sed ' - t clear - : clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - : end' >>confcache -if diff $cache_file confcache >/dev/null 2>&1; then :; else - if test -w $cache_file; then - test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" - cat confcache >$cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/; -s/:*\${srcdir}:*/:/; -s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; -s/:*$//; -s/^[^=]*=[ ]*$//; -}' -fi - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_i=`echo "$ac_i" | - sed 's/\$U\././;s/\.o$//;s/\.obj$//'` - # 2. Add them. - ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${LIBPRI_TRUE}" && test -z "${LIBPRI_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"LIBPRI\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"LIBPRI\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi - -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - - -# PATH needs CR, and LINENO needs CR and PATH. -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 -echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 -echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_executable_p="test -f" - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - -exec 6>&1 - -# Open the log real soon, to keep \$[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. Logging --version etc. is OK. -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX -} >&5 -cat >&5 <<_CSEOF - -<<<<<<< .mine -This file was extended by libsangoma $as_me 2.0.1, which was -======= -This file was extended by libsangoma $as_me 3.0.0, which was ->>>>>>> .r191 -generated by GNU Autoconf 2.59. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 -_ACEOF - -# Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_links"; then - echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_commands"; then - echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS -fi - -cat >>$CONFIG_STATUS <<\_ACEOF - -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to ." -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -<<<<<<< .mine -libsangoma config.status 2.0.1 -======= -libsangoma config.status 3.0.0 ->>>>>>> .r191 -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2003 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` - ac_shift=: - ;; - -*) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_option=$1 - ac_need_defaults=false;; - esac - - case $ac_option in - # Handling of the options. -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --vers* | -V ) - echo "$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - { { echo "$as_me:$LINENO: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" - ac_need_defaults=false;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -# -# INIT-COMMANDS section. -# - -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - -_ACEOF - - - -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_config_target in $ac_config_targets -do - case "$ac_config_target" in - # Handling of arguments. - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason to put it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Create a temporary directory, and hook for its removal unless debugging. -$debug || -{ - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} - -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF - -# -# CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "\$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@DEFS@,$DEFS,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@LIBS@,$LIBS,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@CYGPATH_W@,$CYGPATH_W,;t t -s,@PACKAGE@,$PACKAGE,;t t -s,@VERSION@,$VERSION,;t t -s,@ACLOCAL@,$ACLOCAL,;t t -s,@AUTOCONF@,$AUTOCONF,;t t -s,@AUTOMAKE@,$AUTOMAKE,;t t -s,@AUTOHEADER@,$AUTOHEADER,;t t -s,@MAKEINFO@,$MAKEINFO,;t t -s,@install_sh@,$install_sh,;t t -s,@STRIP@,$STRIP,;t t -s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t -s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t -s,@mkdir_p@,$mkdir_p,;t t -s,@AWK@,$AWK,;t t -s,@SET_MAKE@,$SET_MAKE,;t t -s,@am__leading_dot@,$am__leading_dot,;t t -s,@AMTAR@,$AMTAR,;t t -s,@am__tar@,$am__tar,;t t -s,@am__untar@,$am__untar,;t t -s,@LIBSANGOMA_LT_CURRENT@,$LIBSANGOMA_LT_CURRENT,;t t -s,@LIBSANGOMA_LT_REVISION@,$LIBSANGOMA_LT_REVISION,;t t -s,@LIBSANGOMA_LT_AGE@,$LIBSANGOMA_LT_AGE,;t t -s,@CC@,$CC,;t t -s,@CFLAGS@,$CFLAGS,;t t -s,@LDFLAGS@,$LDFLAGS,;t t -s,@CPPFLAGS@,$CPPFLAGS,;t t -s,@ac_ct_CC@,$ac_ct_CC,;t t -s,@EXEEXT@,$EXEEXT,;t t -s,@OBJEXT@,$OBJEXT,;t t -s,@DEPDIR@,$DEPDIR,;t t -s,@am__include@,$am__include,;t t -s,@am__quote@,$am__quote,;t t -s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t -s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t -s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t -s,@CCDEPMODE@,$CCDEPMODE,;t t -s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t -s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t -s,@build@,$build,;t t -s,@build_cpu@,$build_cpu,;t t -s,@build_vendor@,$build_vendor,;t t -s,@build_os@,$build_os,;t t -s,@host@,$host,;t t -s,@host_cpu@,$host_cpu,;t t -s,@host_vendor@,$host_vendor,;t t -s,@host_os@,$host_os,;t t -s,@SED@,$SED,;t t -s,@EGREP@,$EGREP,;t t -s,@LN_S@,$LN_S,;t t -s,@ECHO@,$ECHO,;t t -s,@AR@,$AR,;t t -s,@ac_ct_AR@,$ac_ct_AR,;t t -s,@RANLIB@,$RANLIB,;t t -s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t -s,@CPP@,$CPP,;t t -s,@CXX@,$CXX,;t t -s,@CXXFLAGS@,$CXXFLAGS,;t t -s,@ac_ct_CXX@,$ac_ct_CXX,;t t -s,@CXXDEPMODE@,$CXXDEPMODE,;t t -s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t -s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t -s,@CXXCPP@,$CXXCPP,;t t -s,@F77@,$F77,;t t -s,@FFLAGS@,$FFLAGS,;t t -s,@ac_ct_F77@,$ac_ct_F77,;t t -s,@LIBTOOL@,$LIBTOOL,;t t -s,@LIBPRI_TRUE@,$LIBPRI_TRUE,;t t -s,@LIBPRI_FALSE@,$LIBPRI_FALSE,;t t -s,@LIBPRI_PATH@,$LIBPRI_PATH,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t -CEOF - -_ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF - # Split the substitutions into bite-sized pieces for seds with - # small command number limits, like on Digital OSF/1 and HP-UX. - ac_max_sed_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # Line after last line for current file. - ac_more_lines=: - ac_sed_cmds= - while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - else - sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - fi - if test ! -s $tmp/subs.frag; then - ac_more_lines=false - else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` - fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat - fi -fi # test -n "$CONFIG_FILES" - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; - esac - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - configure_input= - else - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s,@configure_input@,$configure_input,;t t -s,@srcdir@,$ac_srcdir,;t t -s,@abs_srcdir@,$ac_abs_srcdir,;t t -s,@top_srcdir@,$ac_top_srcdir,;t t -s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t -s,@builddir@,$ac_builddir,;t t -s,@abs_builddir@,$ac_abs_builddir,;t t -s,@top_builddir@,$ac_top_builddir,;t t -s,@abs_top_builddir@,$ac_abs_top_builddir,;t t -s,@INSTALL@,$ac_INSTALL,;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out - rm -f $tmp/stdin - if test x"$ac_file" != x-; then - mv $tmp/out $ac_file - else - cat $tmp/out - rm -f $tmp/out - fi - -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -# -# CONFIG_HEADER section. -# - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='[ ].*$,\1#\2' -ac_dC=' ' -ac_dD=',;t' -# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='$,\1#\2define\3' -ac_uC=' ' -ac_uD=',;t' - -for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - # Do quote $f, to prevent DOS paths from being IFS'd. - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } - # Remove the trailing spaces. - sed 's/[ ]*$//' $ac_file_inputs >$tmp/in - -_ACEOF - -# Transform confdefs.h into two sed scripts, `conftest.defines' and -# `conftest.undefs', that substitutes the proper values into -# config.h.in to produce config.h. The first handles `#define' -# templates, and the second `#undef' templates. -# And first: Protect against being on the right side of a sed subst in -# config.status. Protect against being in an unquoted here document -# in config.status. -rm -f conftest.defines conftest.undefs -# Using a here document instead of a string reduces the quoting nightmare. -# Putting comments in sed scripts is not portable. -# -# `end' is used to avoid that the second main sed command (meant for -# 0-ary CPP macros) applies to n-ary macro definitions. -# See the Autoconf documentation for `clear'. -cat >confdef2sed.sed <<\_ACEOF -s/[\\&,]/\\&/g -s,[\\$`],\\&,g -t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp -t end -s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp -: end -_ACEOF -# If some macros were called several times there might be several times -# the same #defines, which is useless. Nevertheless, we may not want to -# sort them, since we want the *last* AC-DEFINE to be honored. -uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines -sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs -rm -f confdef2sed.sed - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >>conftest.undefs <<\_ACEOF -s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, -_ACEOF - -# Break up conftest.defines because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS -echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS -echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS -echo ' :' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.defines >/dev/null -do - # Write a limited-size here document to $tmp/defines.sed. - echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#define' lines. - echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/defines.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines -echo ' fi # grep' >>$CONFIG_STATUS -echo >>$CONFIG_STATUS - -# Break up conftest.undefs because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #undef templates' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.undefs >/dev/null -do - # Write a limited-size here document to $tmp/undefs.sed. - echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#undef' - echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/undefs.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail - rm -f conftest.undefs - mv conftest.tail conftest.undefs -done -rm -f conftest.undefs - -cat >>$CONFIG_STATUS <<\_ACEOF - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - echo "/* Generated by configure. */" >$tmp/config.h - else - echo "/* $ac_file. Generated by configure. */" >$tmp/config.h - fi - cat $tmp/in >>$tmp/config.h - rm -f $tmp/in - if test x"$ac_file" != x-; then - if diff $ac_file $tmp/config.h >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} - else - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - rm -f $ac_file - mv $tmp/config.h $ac_file - fi - else - cat $tmp/config.h - rm -f $tmp/config.h - fi -# Compute $ac_file's index in $config_headers. -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $ac_file | $ac_file:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || -$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X$ac_file : 'X\(//\)[^/]' \| \ - X$ac_file : 'X\(//\)$' \| \ - X$ac_file : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X$ac_file | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'`/stamp-h$_am_stamp_count -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -# -# CONFIG_COMMANDS section. -# -for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue - ac_dest=`echo "$ac_file" | sed 's,:.*,,'` - ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_dir=`(dirname "$ac_dest") 2>/dev/null || -$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_dest" : 'X\(//\)[^/]' \| \ - X"$ac_dest" : 'X\(//\)$' \| \ - X"$ac_dest" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_dest" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - - { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 -echo "$as_me: executing $ac_dest commands" >&6;} - case $ac_dest in - depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`(dirname "$mf") 2>/dev/null || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`(dirname "$file") 2>/dev/null || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p $dirpart/$fdir - else - as_dir=$dirpart/$fdir - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 -echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} - { (exit 1); exit 1; }; }; } - - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done -done - ;; - esac -done -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } -fi - - diff --git a/api/libsangoma/docs/.svn/all-wcprops b/api/libsangoma/docs/.svn/all-wcprops index b0a83ea..2d6a9b1 100644 --- a/api/libsangoma/docs/.svn/all-wcprops +++ b/api/libsangoma/docs/.svn/all-wcprops @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 38 -/svn/libsangoma/!svn/ver/49/trunk/docs +V 71 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/docs END diff --git a/api/libsangoma/docs/.svn/entries b/api/libsangoma/docs/.svn/entries index f474785..587aa80 100644 --- a/api/libsangoma/docs/.svn/entries +++ b/api/libsangoma/docs/.svn/entries @@ -1,9 +1,9 @@ 8 dir -322 -https://www.sangomapbx.com/svn/libsangoma/trunk/docs -https://www.sangomapbx.com/svn/libsangoma +342 +http://192.168.1.168/svn/libsangoma/branches/unified_rlease_Win6.0_Lnx3.5/docs +http://192.168.1.168/svn/libsangoma diff --git a/api/libsangoma/docs/doxygen/.svn/all-wcprops b/api/libsangoma/docs/doxygen/.svn/all-wcprops index 5ebbac8..db530f3 100644 --- a/api/libsangoma/docs/doxygen/.svn/all-wcprops +++ b/api/libsangoma/docs/doxygen/.svn/all-wcprops @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 46 -/svn/libsangoma/!svn/ver/49/trunk/docs/doxygen +V 79 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/docs/doxygen END diff --git a/api/libsangoma/docs/doxygen/.svn/entries b/api/libsangoma/docs/doxygen/.svn/entries index 4378429..7ac18f9 100644 --- a/api/libsangoma/docs/doxygen/.svn/entries +++ b/api/libsangoma/docs/doxygen/.svn/entries @@ -1,9 +1,9 @@ 8 dir -322 -https://www.sangomapbx.com/svn/libsangoma/trunk/docs/doxygen -https://www.sangomapbx.com/svn/libsangoma +342 +http://192.168.1.168/svn/libsangoma/branches/unified_rlease_Win6.0_Lnx3.5/docs/doxygen +http://192.168.1.168/svn/libsangoma diff --git a/api/libsangoma/examples/.svn/all-wcprops b/api/libsangoma/examples/.svn/all-wcprops index 78d6cbf..8379bef 100644 --- a/api/libsangoma/examples/.svn/all-wcprops +++ b/api/libsangoma/examples/.svn/all-wcprops @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 43 -/svn/libsangoma/!svn/ver/206/trunk/examples +V 75 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples END diff --git a/api/libsangoma/examples/.svn/entries b/api/libsangoma/examples/.svn/entries index 3d6c3c9..248d97e 100644 --- a/api/libsangoma/examples/.svn/entries +++ b/api/libsangoma/examples/.svn/entries @@ -1,9 +1,9 @@ 8 dir -322 -https://www.sangomapbx.com/svn/libsangoma/trunk/examples -https://www.sangomapbx.com/svn/libsangoma +342 +http://192.168.1.168/svn/libsangoma/branches/unified_rlease_Win6.0_Lnx3.5/examples +http://192.168.1.168/svn/libsangoma diff --git a/api/libsangoma/examples/hptdm_api/.svn/all-wcprops b/api/libsangoma/examples/hptdm_api/.svn/all-wcprops index 0a82d44..db759ac 100644 --- a/api/libsangoma/examples/hptdm_api/.svn/all-wcprops +++ b/api/libsangoma/examples/hptdm_api/.svn/all-wcprops @@ -1,35 +1,35 @@ K 25 svn:wc:ra_dav:version-url -V 53 -/svn/libsangoma/!svn/ver/206/trunk/examples/hptdm_api +V 85 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/hptdm_api END rebuild.sh K 25 svn:wc:ra_dav:version-url -V 63 -/svn/libsangoma/!svn/ver/17/trunk/examples/hptdm_api/rebuild.sh +V 96 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/hptdm_api/rebuild.sh END doxygen.config K 25 svn:wc:ra_dav:version-url -V 67 -/svn/libsangoma/!svn/ver/17/trunk/examples/hptdm_api/doxygen.config +V 100 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/hptdm_api/doxygen.config END aft_tdm_hp.c K 25 svn:wc:ra_dav:version-url -V 65 -/svn/libsangoma/!svn/ver/22/trunk/examples/hptdm_api/aft_tdm_hp.c +V 98 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/hptdm_api/aft_tdm_hp.c END aft_tdm_hp.h K 25 svn:wc:ra_dav:version-url -V 65 -/svn/libsangoma/!svn/ver/17/trunk/examples/hptdm_api/aft_tdm_hp.h +V 98 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/hptdm_api/aft_tdm_hp.h END Makefile K 25 svn:wc:ra_dav:version-url -V 61 -/svn/libsangoma/!svn/ver/22/trunk/examples/hptdm_api/Makefile +V 94 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/hptdm_api/Makefile END diff --git a/api/libsangoma/examples/hptdm_api/.svn/entries b/api/libsangoma/examples/hptdm_api/.svn/entries index e2d8f5f..d8f6148 100644 --- a/api/libsangoma/examples/hptdm_api/.svn/entries +++ b/api/libsangoma/examples/hptdm_api/.svn/entries @@ -1,9 +1,9 @@ 8 dir -322 -https://www.sangomapbx.com/svn/libsangoma/trunk/examples/hptdm_api -https://www.sangomapbx.com/svn/libsangoma +342 +http://192.168.1.168/svn/libsangoma/branches/unified_rlease_Win6.0_Lnx3.5/examples/hptdm_api +http://192.168.1.168/svn/libsangoma @@ -32,7 +32,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 81a3f7cc906c1a95c63c8bbb05655f30 2008-08-18T04:26:05.260169Z 17 @@ -45,7 +45,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z f71df7ce5278594373b87a592d826719 2008-08-18T04:26:05.260169Z 17 @@ -57,7 +57,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z b8ef9830437ad25ebd95d62434ed9530 2008-09-17T21:25:40.156211Z 22 @@ -72,7 +72,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 7f0a6424997adf454bbb3c88fb608622 2008-08-18T04:26:05.260169Z 17 @@ -84,7 +84,7 @@ file -2010-09-13T22:45:16.000000Z +2011-01-28T17:40:50.000000Z 1432ab687de350b6a988bdbc553bdbe7 2008-09-17T21:25:40.156211Z 22 diff --git a/api/libsangoma/examples/hptdm_api/docs/.svn/all-wcprops b/api/libsangoma/examples/hptdm_api/docs/.svn/all-wcprops index 6867f10..b571887 100644 --- a/api/libsangoma/examples/hptdm_api/docs/.svn/all-wcprops +++ b/api/libsangoma/examples/hptdm_api/docs/.svn/all-wcprops @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 58 -/svn/libsangoma/!svn/ver/206/trunk/examples/hptdm_api/docs +V 90 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/hptdm_api/docs END diff --git a/api/libsangoma/examples/hptdm_api/docs/.svn/entries b/api/libsangoma/examples/hptdm_api/docs/.svn/entries index ba9dd17..1351fa6 100644 --- a/api/libsangoma/examples/hptdm_api/docs/.svn/entries +++ b/api/libsangoma/examples/hptdm_api/docs/.svn/entries @@ -1,9 +1,9 @@ 8 dir -322 -https://www.sangomapbx.com/svn/libsangoma/trunk/examples/hptdm_api/docs -https://www.sangomapbx.com/svn/libsangoma +342 +http://192.168.1.168/svn/libsangoma/branches/unified_rlease_Win6.0_Lnx3.5/examples/hptdm_api/docs +http://192.168.1.168/svn/libsangoma diff --git a/api/libsangoma/examples/hptdm_api/docs/doxygen/.svn/all-wcprops b/api/libsangoma/examples/hptdm_api/docs/doxygen/.svn/all-wcprops index e487534..8cffeb6 100644 --- a/api/libsangoma/examples/hptdm_api/docs/doxygen/.svn/all-wcprops +++ b/api/libsangoma/examples/hptdm_api/docs/doxygen/.svn/all-wcprops @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url -V 66 -/svn/libsangoma/!svn/ver/206/trunk/examples/hptdm_api/docs/doxygen +V 98 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/hptdm_api/docs/doxygen END diff --git a/api/libsangoma/examples/hptdm_api/docs/doxygen/.svn/entries b/api/libsangoma/examples/hptdm_api/docs/doxygen/.svn/entries index 64917ad..bc6bcb6 100644 --- a/api/libsangoma/examples/hptdm_api/docs/doxygen/.svn/entries +++ b/api/libsangoma/examples/hptdm_api/docs/doxygen/.svn/entries @@ -1,9 +1,9 @@ 8 dir -322 -https://www.sangomapbx.com/svn/libsangoma/trunk/examples/hptdm_api/docs/doxygen -https://www.sangomapbx.com/svn/libsangoma +342 +http://192.168.1.168/svn/libsangoma/branches/unified_rlease_Win6.0_Lnx3.5/examples/hptdm_api/docs/doxygen +http://192.168.1.168/svn/libsangoma diff --git a/api/libsangoma/examples/priserver/.svn/all-wcprops b/api/libsangoma/examples/priserver/.svn/all-wcprops index 26a44ad..08ed715 100644 --- a/api/libsangoma/examples/priserver/.svn/all-wcprops +++ b/api/libsangoma/examples/priserver/.svn/all-wcprops @@ -1,35 +1,35 @@ K 25 svn:wc:ra_dav:version-url -V 53 -/svn/libsangoma/!svn/ver/182/trunk/examples/priserver +V 85 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/priserver END sound.raw K 25 svn:wc:ra_dav:version-url -V 62 -/svn/libsangoma/!svn/ver/17/trunk/examples/priserver/sound.raw +V 95 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/priserver/sound.raw END priserver.c K 25 svn:wc:ra_dav:version-url -V 65 -/svn/libsangoma/!svn/ver/182/trunk/examples/priserver/priserver.c +V 97 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/priserver/priserver.c END librc K 25 svn:wc:ra_dav:version-url -V 58 -/svn/libsangoma/!svn/ver/17/trunk/examples/priserver/librc +V 91 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/priserver/librc END Makefile K 25 svn:wc:ra_dav:version-url -V 62 -/svn/libsangoma/!svn/ver/182/trunk/examples/priserver/Makefile +V 94 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/priserver/Makefile END README K 25 svn:wc:ra_dav:version-url -V 59 -/svn/libsangoma/!svn/ver/17/trunk/examples/priserver/README +V 92 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/examples/priserver/README END diff --git a/api/libsangoma/examples/priserver/.svn/entries b/api/libsangoma/examples/priserver/.svn/entries index ff29356..7d1cefa 100644 --- a/api/libsangoma/examples/priserver/.svn/entries +++ b/api/libsangoma/examples/priserver/.svn/entries @@ -1,9 +1,9 @@ 8 dir -322 -https://www.sangomapbx.com/svn/libsangoma/trunk/examples/priserver -https://www.sangomapbx.com/svn/libsangoma +342 +http://192.168.1.168/svn/libsangoma/branches/unified_rlease_Win6.0_Lnx3.5/examples/priserver +http://192.168.1.168/svn/libsangoma @@ -32,7 +32,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z da36acc78b83d5047481df0cca63d969 2008-08-18T04:26:05.260169Z 17 @@ -45,7 +45,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z f30671b0a55df63396f6290c31af2fcb 2009-06-17T15:37:24.869927Z 182 @@ -57,7 +57,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 5c222b74d68b1c7df3f937a9d6321d40 2008-08-18T04:26:05.260169Z 17 @@ -69,7 +69,7 @@ file -2010-09-13T22:45:16.000000Z +2011-01-28T17:40:50.000000Z 5afcd0bf7821144218b895150a7951bd 2009-06-17T15:37:24.869927Z 182 @@ -81,7 +81,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 40538792592cd766e4941d9b37dbaf56 2008-08-18T04:26:05.260169Z 17 diff --git a/api/libsangoma/libsangoma-pvt.h b/api/libsangoma/libsangoma-pvt.h index 0f03d30..5366ae9 100644 --- a/api/libsangoma/libsangoma-pvt.h +++ b/api/libsangoma/libsangoma-pvt.h @@ -147,7 +147,6 @@ extern int libsng_dbg_level; #define DBG_INIT if(libsng_dbg_level)libsng_dbg /**** Prototypes of Function used internally by libsangoma ****/ -sng_fd_t sangoma_open_dev_by_name(const char *dev_name); #if defined(__WINDOWS__) int UdpManagementCommand(sng_fd_t fd, wan_udp_hdr_t* wan_udp); LONG registry_set_integer_value(HKEY hkey, LPTSTR szKeyname, IN int iValue); diff --git a/api/libsangoma/libsangoma.c b/api/libsangoma/libsangoma.c index a872025..e8e23b6 100644 --- a/api/libsangoma/libsangoma.c +++ b/api/libsangoma/libsangoma.c @@ -1702,7 +1702,7 @@ sng_fd_t _LIBSNG_CALL sangoma_open_api_span_chan(int span, int chan) return fd; } -sng_fd_t sangoma_open_dev_by_name(const char *dev_name) +sng_fd_t _LIBSNG_CALL sangoma_open_dev_by_name(const char *dev_name) { char fname[FNAME_LEN]; diff --git a/api/libsangoma/libsangoma.h b/api/libsangoma/libsangoma.h index eb31c7c..d45928b 100644 --- a/api/libsangoma/libsangoma.h +++ b/api/libsangoma/libsangoma.h @@ -37,8 +37,8 @@ * sangoma_get_cpld_version functions,sangoma_get_stats,sangoma_flush_stats */ -#ifndef _LIBSNAGOMA_H -#define _LIBSNAGOMA_H +#ifndef _LIBSANGOMA_H +#define _LIBSANGOMA_H #ifdef __linux__ #ifndef __LINUX__ @@ -268,7 +268,8 @@ typedef pthread_mutex_t CRITICAL_SECTION; typedef unsigned int UINT; #define EnterCriticalSection(arg) pthread_mutex_lock(arg) -#define TryEnterCriticalSection(arg) pthread_mutex_trylock(arg) +/* On success, pthread_mutex_trylock() returns 0. On error, non-zero value is returned. */ +#define TryEnterCriticalSection(arg) (pthread_mutex_trylock(arg)==0 ? 1 : 0) #define LeaveCriticalSection(arg) pthread_mutex_unlock(arg) #define InitializeCriticalSection(arg) pthread_mutex_init(arg, NULL); @@ -426,6 +427,14 @@ sng_fd_t _LIBSNG_CALL __sangoma_open_api_span_chan(int span, int chan); */ sng_fd_t _LIBSNG_CALL sangoma_open_api_span(int span); +/*! + \fn sng_fd_t sangoma_open_dev_by_name(const char *dev_name) + \brief Open API device using it's name. For example: Linux: w1g1, Windows wanpipe1_if1. + \param dev_name API device name + \return File Descriptor: -1 error, 0 or positive integer: valid file descriptor +*/ +sng_fd_t _LIBSNG_CALL sangoma_open_dev_by_name(const char *dev_name); + /*! \def sangoma_create_socket_intr @@ -1528,7 +1537,7 @@ int _LIBSNG_CALL sangoma_set_tx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, float \brief set driver rx gain for this tdm device \param fd device file descriptor \param tdm_api tdm api command structure - \param value txgain (0.0 - 10.0) db + \param value rxgain (0.0 - 10.0) db \return non-zero = error, 0 = ok */ int _LIBSNG_CALL sangoma_set_rx_gain(sng_fd_t fd, wanpipe_api_t *tdm_api, float gain_val); @@ -2160,5 +2169,5 @@ sangoma_status_t _LIBSNG_CALL sangoma_set_driver_mode_of_all_hw_devices(int driv #define sangoma_create_socket_intr sangoma_open_api_span_chan #endif -#endif /* _LIBSNAGOMA_H */ +#endif /* _LIBSANGOMA_H */ diff --git a/api/libsangoma/libsangoma.vcproj b/api/libsangoma/libsangoma.vcproj index 4d4e273..b195b7e 100644 --- a/api/libsangoma/libsangoma.vcproj +++ b/api/libsangoma/libsangoma.vcproj @@ -214,6 +214,10 @@ RelativePath=".\libsangoma_hwec.c" > + + - * Nenad Corbic - * - * Copyright (c) 2007 - 08, Sangoma Technologies - * All rights reserved. - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * =============================================================================== - * - */ - -#include "libsangoma.h" -#include "lib_api.h" - -static u_int32_t poll_events_bitmap = 0; - -/*! - \def TEST_NUMBER_OF_OBJECTS - \brief Number of wait objects to define in object array. - - Objects are used to wait on file descripotrs. - Usually there is one wait object per file descriptor. - - In this example there is a single file descriptor and a - single wait object. -*/ -#define TEST_NUMBER_OF_OBJECTS 1 - -static sangoma_wait_obj_t *sangoma_wait_objects[TEST_NUMBER_OF_OBJECTS]; - -/* This example application has only a single execution thread - it is safe - * to use a global buffer for received data and for data to be transmitted. */ -static unsigned char rxdata[MAX_NO_DATA_BYTES_IN_FRAME]; -static unsigned char txdata[MAX_NO_DATA_BYTES_IN_FRAME]; - -typedef struct sangoma_chan { - int spanno; - int channo; -} sangoma_chan_t; -sangoma_chan_t sangoma_channels[TEST_NUMBER_OF_OBJECTS]; - -/* Warning: non-thread safe globals. Ok for this single-thread example but not in production. */ -unsigned char rx_rbs_bits = WAN_RBS_SIG_A; -FILE *pRxFile; -int application_termination_flag = 0; - -/***************************************************************** - * Prototypes - *****************************************************************/ - -int __cdecl main(int argc, char* argv[]); -int open_sangoma_device(void); -void handle_span_chan(int open_device_counter); -int handle_tdm_event(uint32_t dev_index); -int handle_data(uint32_t dev_index, int flags_out); -int read_data(uint32_t dev_index, wp_api_hdr_t *rx_hdr, void *rx_buffer, int rx_buffer_length); -int write_data(uint32_t dev_index, wp_api_hdr_t *tx_hdr, void *tx_buffer, int tx_len); -int dtmf_event(sng_fd_t fd,unsigned char digit,unsigned char type,unsigned char port); -int rbs_event(sng_fd_t fd,unsigned char rbs_bits); -int rxhook_event(sng_fd_t fd,unsigned char hook_state); -int rxring_event(sng_fd_t fd,unsigned char ring_state); -int ringtrip_event (sng_fd_t fd, unsigned char ring_state); -int write_data_to_file(unsigned char *data, unsigned int data_length); -int sangoma_print_stats(sng_fd_t sangoma_dev); -void cleanup(void); - -#ifdef __WINDOWS__ -BOOL WINAPI TerminateHandler(DWORD dwCtrlType); -#else -void TerminateHandler(int); -#endif - -/***************************************************************** - * General Functions - *****************************************************************/ - -/*! - \fn void print_rx_data(unsigned char *data, int datalen) - \brief Prints the contents of data packet - \param data pointer to data buffer - \param datalen size of data buffer - \return void -*/ -void print_rxdata(unsigned char *data, int datalen, wp_api_hdr_t *hdr); /* dont remove prototype, gcc complains */ -void print_rxdata(unsigned char *data, int datalen, wp_api_hdr_t *hdr) -{ - int i; - - printf("Data: (Len=%i,Errs=%i)\n",datalen,hdr->wp_api_rx_hdr_errors); - for(i = 0; i < datalen; i++) { - if((i % 20 == 0)){ - if(i){ - printf("\n"); - } - } - printf("%02X ", data[i]); -#if 0 - /* don't print too much!! */ - if(i > 100){ - printf("...\n"); - break; - } -#endif - } - printf("\n"); -} - - -int sangoma_print_stats(sng_fd_t sangoma_dev) -{ - int err; - unsigned char firm_ver, cpld_ver; - wanpipe_api_t wp_api; - wanpipe_chan_stats_t stats_str; - wanpipe_chan_stats_t *stats=&stats_str; - memset(&wp_api,0,sizeof(wp_api)); - - - err=sangoma_get_stats(sangoma_dev, &wp_api, stats); - if (err) { - printf("sangoma_get_stats(() failed (err: %d (0x%X))!\n", err, err); - return 1; - } - - printf( "******* OPERATIONAL_STATS *******\n"); - - printf("\trx_packets\t: %u\n", stats->rx_packets); - printf("\ttx_packets\t: %u\n", stats->tx_packets); - printf("\trx_bytes\t: %u\n", stats->rx_bytes); - printf("\ttx_bytes\t: %u\n", stats->tx_bytes); - printf("\trx_errors\t: %u\n", stats->rx_errors); //Total number of Rx errors - printf("\ttx_errors\t: %u\n", stats->tx_errors); //Total number of Tx errors - printf("\trx_dropped\t: %u\n", stats->rx_dropped); - printf("\ttx_dropped\t: %u\n", stats->tx_dropped); - printf("\tmulticast\t: %u\n", stats->multicast); - printf("\tcollisions\t: %u\n", stats->collisions); - - printf("\trx_length_errors: %u\n", stats->rx_length_errors); - printf("\trx_over_errors\t: %u\n", stats->rx_over_errors); - printf("\trx_crc_errors\t: %u\n", stats->rx_crc_errors); //HDLC CRC mismatch - printf("\trx_frame_errors\t: %u\n", stats->rx_frame_errors);//HDLC "abort" occured - printf("\trx_fifo_errors\t: %u\n", stats->rx_fifo_errors); - printf("\trx_missed_errors: %u\n", stats->rx_missed_errors); - - printf("\ttx_aborted_errors: %u\n", stats->tx_aborted_errors); - printf("\tTx Idle Data\t: %u\n", stats->tx_carrier_errors); - - printf("\ttx_fifo_errors\t: %u\n", stats->tx_fifo_errors); - printf("\ttx_heartbeat_errors: %u\n", stats->tx_heartbeat_errors); - printf("\ttx_window_errors: %u\n", stats->tx_window_errors); - - printf("\n\ttx_packets_in_q: %u\n", stats->current_number_of_frames_in_tx_queue); - printf("\ttx_queue_size: %u\n", stats->max_tx_queue_length); - - printf("\n\trx_packets_in_q: %u\n", stats->current_number_of_frames_in_rx_queue); - printf("\trx_queue_size: %u\n", stats->max_rx_queue_length); - - printf("\n\trx_events_in_q: %u\n", stats->current_number_of_events_in_event_queue); - printf("\trx_event_queue_size: %u\n", stats->max_event_queue_length); - printf("\trx_events: %u\n", stats->rx_events); - printf("\trx_events_dropped: %u\n", stats->rx_events_dropped); - - printf("\tHWEC tone (DTMF) events counter: %u\n", stats->rx_events_tone); - printf( "*********************************\n"); - - SANGOMA_INIT_TDM_API_CMD(wp_api); - err=sangoma_get_driver_version(sangoma_dev,&wp_api, NULL); - if (err) { - return 1; - } - printf("\tDriver Version: %u.%u.%u.%u\n", - wp_api.wp_cmd.version.major, - wp_api.wp_cmd.version.minor, - wp_api.wp_cmd.version.minor1, - wp_api.wp_cmd.version.minor2); - - SANGOMA_INIT_TDM_API_CMD(wp_api); - err=sangoma_get_firmware_version(sangoma_dev, &wp_api, &firm_ver); - if (err) { - return 1; - } - printf("\tFirmware Version: %X\n", - firm_ver); - - SANGOMA_INIT_TDM_API_CMD(wp_api); - err=sangoma_get_cpld_version(sangoma_dev, &wp_api, &cpld_ver); - if (err) { - return 1; - } - printf("\tCPLD Version: %X\n", - cpld_ver); - - return 0; -} - -/*! - \fn int read_data(uint32_t dev_index) - \brief Read data buffer from a device - \param dev_index device index number associated with device file descriptor - \param rx_hdr pointer to api header - \param rx_buffer pointer to a buffer where recived data will be stored - \param rx_buffer_length maximum length of rx_buffer - \return 0 - Ok otherwise Error -*/ -int read_data(uint32_t dev_index, wp_api_hdr_t *rx_hdr, void *rx_buffer, int rx_buffer_length) -{ - sng_fd_t dev_fd = sangoma_wait_obj_get_fd(sangoma_wait_objects[dev_index]); - sangoma_chan_t *chan = sangoma_wait_obj_get_context(sangoma_wait_objects[dev_index]); - int Rx_lgth = 0; - static int Rx_count= 0; - wanpipe_api_t tdm_api; - - memset(&tdm_api, 0x00, sizeof(tdm_api)); - memset(rx_hdr, 0, sizeof(wp_api_hdr_t)); - - /* read the message */ - Rx_lgth = sangoma_readmsg( - dev_fd, - rx_hdr, /* header buffer */ - sizeof(wp_api_hdr_t), /* header size */ - rx_buffer, /* data buffer */ - rx_buffer_length, /* data BUFFER size */ - 0); - if(Rx_lgth <= 0) { - printf("Span: %d, Chan: %d: Error receiving data!\n", - chan->spanno, chan->channo); - return 1; - } - - - if (rx_hdr->wp_api_rx_hdr_error_map) { - if (rx_hdr->wp_api_rx_hdr_error_map & 1<wp_api_rx_hdr_error_map & 1<wp_api_rx_hdr_error_map & 1<wp_api_rx_hdr_error_map & 1<wp_api_rx_hdr_error_map & 1<channo, - rx_rbs_bits); - } - - /* if user needs Rx data to be written into a file: */ - if(files_used & RX_FILE_USED){ - write_data_to_file(rx_buffer, Rx_lgth); - } - - return 0; -} - -/*! - \fn int write_data(uint32_t dev_index, wp_api_hdr_t *tx_hdr, void *tx_data, int tx_len) - \brief Transmit a data buffer to a device. - \param dev_index device index number associated with device file descriptor - \param tx_hdr pointer to a wp_api_hdr_t - \param tx_data pointer to a data buffer - \param tx_len tx data buffer len - \return 0 - Ok otherwise Error -*/ -int write_data(uint32_t dev_index, wp_api_hdr_t *tx_hdr, void *tx_buffer, int tx_len) -{ - sng_fd_t dev_fd = sangoma_wait_obj_get_fd(sangoma_wait_objects[dev_index]); - sangoma_chan_t *chan = sangoma_wait_obj_get_context(sangoma_wait_objects[dev_index]); - int err; - static int Tx_count = 0; - - if (hdlc_repeat) { - tx_hdr->wp_api_tx_hdr_hdlc_rpt_len=4; - memset(tx_hdr->wp_api_tx_hdr_hdlc_rpt_data,Tx_count,4); - } - - /* write a message */ - err = sangoma_writemsg( - dev_fd, - tx_hdr, /* header buffer */ - sizeof(wp_api_hdr_t), /* header size */ - tx_buffer, /* data buffer */ - tx_len, /* DATA size */ - 0); - - if (err <= 0){ - printf("Span: %d, Chan: %d: Failed to send!\n", - chan->spanno, - chan->channo); - return -1; - } - - Tx_count++; - if (verbose){ - printf("Packet sent: counter: %i, len: %i, errors %i\n", Tx_count, err, tx_hdr->wp_api_tx_hdr_errors); - }else{ - if(Tx_count && (!(Tx_count % 1000))){ - printf("Packet sent: counter: %i, len: %i\n", Tx_count, err); - } - } - -#if 1 - if(tx_cnt && Tx_count >= tx_cnt){ - write_enable=0; - printf("Disabling POLLOUT...\n"); - /* No need for POLLOUT, turn it off!! If not turned off, and we - * have nothing for transmission, sangoma_socket_waitfor() will return - * immediately, creating a busy loop. */ - //sangoma_wait_objects[dev_index].flags_in &= (~POLLOUT); - return 1; - } -#endif - return 0; -} - -/*! - \fn int handle_data(uint32_t dev_index, int flags_out) - \brief Read data buffer from the device and transmit it back down. - \param dev_index device index number associated with device file descriptor - \return 0 - Ok otherwise Error - - Read data buffer from a device. -*/ -int handle_data(uint32_t dev_index, int flags_out) -{ - wp_api_hdr_t rxhdr; - int err=0; - - memset(&rxhdr, 0, sizeof(rxhdr)); - -#if 0 - printf("%s(): span: %d, chan: %d\n", __FUNCTION__, - sangoma_wait_objects[dev_index].span, sangoma_wait_objects[dev_index].chan); -#endif - - if(flags_out & POLLIN){ - if(read_data(dev_index, &rxhdr, rxdata, MAX_NO_DATA_BYTES_IN_FRAME) == 0){ - if(rx2tx){ - /* Send back received data (create a "software loopback"), just a test. */ - return write_data(dev_index, &rxhdr, rxdata,rxhdr.data_length); - } - } - } - - if( (flags_out & POLLOUT) && write_enable ){ - - wp_api_hdr_t txhdr; - static unsigned char tx_test_byte = 0; - - memset(&txhdr, 0, sizeof(txhdr)); - txhdr.data_length = (unsigned short)tx_size;/* use '-txsize' command line option to change 'tx_size' */ - - /* set data which will be transmitted */ - memset(txdata, tx_test_byte, txhdr.data_length); - - err = write_data(dev_index, &txhdr, txdata, tx_size); - if (err== 0) { - tx_test_byte++; - } - } - return err; -} - -/*! - \fn int decode_api_event (wp_api_event_t *wp_tdm_api_event) - \brief Handle API Event - \param wp_tdm_api_event -*/ -static void decode_api_event(wp_api_event_t *wp_tdm_api_event) -{ - printf("%s(): span: %d, chan: %d\n", __FUNCTION__, - wp_tdm_api_event->span, wp_tdm_api_event->channel); - - switch(wp_tdm_api_event->wp_api_event_type) - { - case WP_API_EVENT_DTMF:/* DTMF detected by Hardware */ - printf("DTMF Event: Channel: %d, Digit: %c (Port: %s, Type:%s)!\n", - wp_tdm_api_event->channel, - wp_tdm_api_event->wp_api_event_dtmf_digit, - (wp_tdm_api_event->wp_api_event_dtmf_port == WAN_EC_CHANNEL_PORT_ROUT)?"ROUT":"SOUT", - (wp_tdm_api_event->wp_api_event_dtmf_type == WAN_EC_TONE_PRESENT)?"PRESENT":"STOP"); - break; - - case WP_API_EVENT_RXHOOK: - printf("RXHOOK Event: Channel: %d, %s! (0x%X)\n", - wp_tdm_api_event->channel, - WAN_EVENT_RXHOOK_DECODE(wp_tdm_api_event->wp_api_event_hook_state), - wp_tdm_api_event->wp_api_event_hook_state); - break; - - case WP_API_EVENT_RING_DETECT: - printf("RING Event: %s! (0x%X)\n", - WAN_EVENT_RING_DECODE(wp_tdm_api_event->wp_api_event_ring_state), - wp_tdm_api_event->wp_api_event_ring_state); - break; - - case WP_API_EVENT_RING_TRIP_DETECT: - printf("RING TRIP Event: %s! (0x%X)\n", - WAN_EVENT_RING_TRIP_DECODE(wp_tdm_api_event->wp_api_event_ring_state), - wp_tdm_api_event->wp_api_event_ring_state); - break; - - case WP_API_EVENT_RBS: - printf("RBS Event: Channel: %d, 0x%X!\n", - wp_tdm_api_event->channel, - wp_tdm_api_event->wp_api_event_rbs_bits); - printf( "RX RBS: A:%1d B:%1d C:%1d D:%1d\n", - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_A) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_B) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_C) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_D) ? 1 : 0); - break; - - case WP_API_EVENT_LINK_STATUS: - printf("Link Status Event: %s! (0x%X)\n", - WAN_EVENT_LINK_STATUS_DECODE(wp_tdm_api_event->wp_api_event_link_status), - wp_tdm_api_event->wp_api_event_link_status); - break; - - case WP_API_EVENT_ALARM: - printf("New Alarm State: %s! (0x%X)\n", (wp_tdm_api_event->wp_api_event_alarm == 0?"Off":"On"), - wp_tdm_api_event->wp_api_event_alarm); - break; - - case WP_API_EVENT_POLARITY_REVERSE: - printf("Polarity Reversal Event : %s! (0x%X)\n", - WP_API_EVENT_POLARITY_REVERSE_DECODE(wp_tdm_api_event->wp_api_event_polarity_reverse), - wp_tdm_api_event->wp_api_event_polarity_reverse); - break; - - default: - printf("Unknown TDM API Event: %d\n", wp_tdm_api_event->wp_api_event_type); - break; - } -} - -/*! - \fn int handle_tdm_event(uint32_t dev_index) - \brief Read Event buffer from the device - \param dev_index device index number associated with device file descriptor - \return 0 - Ok otherwise Error - - An EVENT has occoured. Execute a system call to read the EVENT - on a device. -*/ -int handle_tdm_event(uint32_t dev_index) -{ - wanpipe_api_t tdm_api; - sng_fd_t dev_fd = sangoma_wait_obj_get_fd(sangoma_wait_objects[dev_index]); - -#if 0 - printf("%s(): dev_index: %d, dev_fd: 0x%p\n", __FUNCTION__, dev_index, dev_fd); -#endif - - memset(&tdm_api, 0x00, sizeof(tdm_api)); - - if(sangoma_read_event(dev_fd, &tdm_api)){ - return 1; - } - - decode_api_event(&tdm_api.wp_cmd.event); - return 0; -} - -/*! - \fn void handle_span_chan(int open_device_counter) - \brief Write data buffer into a file - \param open_device_counter number of opened devices - \return void - - This function will wait on all opened devices. - This example will wait for RX and EVENT signals. - In case of POLLIN - rx data available - In case of POLLPRI - event is available -*/ -void handle_span_chan(int open_device_counter) -{ - int iResult, i; - u_int32_t input_flags[TEST_NUMBER_OF_OBJECTS]; - u_int32_t output_flags[TEST_NUMBER_OF_OBJECTS]; - - printf("\n\nSpan/Chan Handler: RxEnable=%s, TxEnable=%s, TxCnt=%i, TxLen=%i, rx2tx=%s\n", - (read_enable? "Yes":"No"), (write_enable?"Yes":"No"),tx_cnt,tx_size, (rx2tx?"Yes":"No")); - - for (i = 0; i < open_device_counter; i++) { - input_flags[i] = poll_events_bitmap; - } - - /* Main Rx/Tx/Event loop */ - while(!application_termination_flag) - { - iResult = sangoma_waitfor_many(sangoma_wait_objects, - input_flags, - output_flags, - open_device_counter /* number of wait objects */, - 5000 /* wait timeout, in milliseconds */); - switch(iResult) - { - case SANG_STATUS_APIPOLL_TIMEOUT: - /* timeout (not an error) */ - { - sng_fd_t dev_fd = sangoma_wait_obj_get_fd(sangoma_wait_objects[0]); - sangoma_print_stats(dev_fd); - } - printf("Timeout\n"); - continue; - - case SANG_STATUS_SUCCESS: - for(i = 0; i < open_device_counter; i++){ - - /* a wait object was signaled */ - if(output_flags[i] & POLLPRI){ - /* got tdm api event */ - if(handle_tdm_event(i)){ - printf("Error in handle_tdm_event()!\n"); - application_termination_flag=1; - break; - } - } - - if(output_flags[i] & (POLLIN | POLLOUT)){ - /* rx data OR a free tx buffer available */ - if(handle_data(i, output_flags[i])){ - printf("Error in handle_data()!\n"); - //application_termination_flag=1; - break; - } - } - }/* for() */ - break; - - default: - /* error */ - printf("Error: iResult: %s (%d)\n", SDLA_DECODE_SANG_STATUS(iResult), iResult); - return; - } - - }/* while() */ -} - -/*! - \fn int write_data_to_file(unsigned char *data, unsigned int data_length) - \brief Write data buffer into a file - \param data data buffer - \param data_length length of a data buffer - \return data_length = ok otherwise error - -*/ -int write_data_to_file(unsigned char *data, unsigned int data_length) -{ - if(pRxFile == NULL){ - return 1; - } - - return fwrite(data, 1, data_length, pRxFile); -} - -#ifdef __WINDOWS__ -/* - * TerminateHandler() - this handler is called by the system whenever user tries to terminate - * the process with Ctrl+C, Ctrl+Break or closes the console window. - * Perform a clean-up here. - */ -BOOL TerminateHandler(DWORD dwCtrlType) -{ - printf("\nProcess terminated by user request.\n"); - application_termination_flag = 1; - /* do the cleanup before exiting: */ - cleanup(); - /* return FALSE so the system will call the dafult handler which will terminate the process. */ - return FALSE; -} -#else -/*! - \fn void TerminateHandler (int sig) - \brief Signal handler for graceful shutdown - \param sig signal -*/ -void TerminateHandler (int sig) -{ - printf("\nProcess terminated by user request.\n"); - application_termination_flag = 1; - /* do the cleanup before exiting: */ - cleanup(); - return; -} - -#endif - -/*! - \fn void cleanup() - \brief Protperly shutdown single device - \param dev_no device index number - \return void - -*/ -void cleanup() -{ - int dev_no; - sng_fd_t fd; - sangoma_chan_t *chan; - sangoma_wait_obj_t *sng_wait_object; - wanpipe_api_t tdm_api; - - /* do the cleanup before exiting: */ - for(dev_no = 0; dev_no < TEST_NUMBER_OF_OBJECTS; dev_no++){ - - sng_wait_object = sangoma_wait_objects[dev_no]; - if(!sng_wait_object){ - continue; - } - chan = sangoma_wait_obj_get_context(sng_wait_object); - printf("%s(): span: %d, chan: %d ...\n", __FUNCTION__, - chan->channo, - chan->spanno); - - fd = sangoma_wait_obj_get_fd(sng_wait_object); - memset(&tdm_api, 0x00, sizeof(tdm_api)); - - if(dtmf_enable_octasic == 1){ - /* Disable dtmf detection on Octasic chip */ - sangoma_tdm_disable_dtmf_events(fd, &tdm_api); - } - - if(dtmf_enable_remora == 1){ - /* Disable dtmf detection on Sangoma's Remora SLIC chip */ - sangoma_tdm_disable_rm_dtmf_events(fd, &tdm_api); - } - - if(remora_hook == 1){ - sangoma_tdm_disable_rxhook_events(fd, &tdm_api); - } - - if(rbs_events == 1){ - sangoma_tdm_disable_rbs_events(fd, &tdm_api); - } - - sangoma_wait_obj_delete(&sng_wait_object); - - sangoma_close(&fd); - - } -} - - -/*! - \fn int open_sangoma_device() - \brief Open a single span chan device - \return 0 ok otherise error. - - This function will open a single span chan. - - However it can be rewritten to iterate for all spans and chans and try to - open all existing wanpipe devices. - - For each opened device, a wait object will be initialized. - For each device, configure the chunk size for tx/rx - enable events such as DTMF/RBS ...etc -*/ -int open_sangoma_device() -{ - int span, chan, err = 0, open_dev_cnt = 0; - sangoma_status_t status; - sng_fd_t dev_fd = INVALID_HANDLE_VALUE; - wanpipe_api_t tdm_api; - - span = wanpipe_port_no; - chan = wanpipe_if_no; - - /* span and chan are 1-based */ - dev_fd = sangoma_open_api_span_chan(span, chan); - if( dev_fd == INVALID_HANDLE_VALUE){ - printf("Warning: Failed to open span %d, chan %d\n", span , chan); - return 1; - }else{ - printf("Successfuly opened span %d, chan %d\n", span , chan); - } - - memset(&tdm_api, 0x00, sizeof(tdm_api)); - - status = sangoma_wait_obj_create(&sangoma_wait_objects[open_dev_cnt], dev_fd, SANGOMA_DEVICE_WAIT_OBJ); - if(status != SANG_STATUS_SUCCESS){ - printf("Error: Failed to create 'sangoma_wait_object'!\n"); - return 1; - } - sangoma_channels[open_dev_cnt].channo = chan; - sangoma_channels[open_dev_cnt].spanno = span; - sangoma_wait_obj_set_context(sangoma_wait_objects[open_dev_cnt], &sangoma_channels[open_dev_cnt]); - /* open_dev_cnt++; */ - - if((err = sangoma_get_full_cfg(dev_fd, &tdm_api))){ - return 1; - } - - if(set_codec_slinear){ - printf("Setting SLINEAR codec\n"); - if((err=sangoma_tdm_set_codec(dev_fd, &tdm_api, WP_SLINEAR))){ - return 1; - } - } - - if(set_codec_none){ - printf("Disabling codec\n"); - if((err=sangoma_tdm_set_codec(dev_fd, &tdm_api, WP_NONE))){ - return 1; - } - } - - if(usr_period){ - printf("Setting user period: %d\n", usr_period); - if((err=sangoma_tdm_set_usr_period(dev_fd, &tdm_api, usr_period))){ - return 1; - } - } - - if(set_codec_slinear || usr_period || set_codec_none){ - /* display new configuration AFTER it was changed */ - if((err=sangoma_get_full_cfg(dev_fd, &tdm_api))){ - return 1; - } - } - - if(dtmf_enable_octasic == 1){ - poll_events_bitmap |= POLLPRI; - /* enable dtmf detection on Octasic chip */ - if((err=sangoma_tdm_enable_dtmf_events(dev_fd, &tdm_api))){ - return 1; - } - } - - if(dtmf_enable_remora == 1){ - poll_events_bitmap |= POLLPRI; - /* enable dtmf detection on Sangoma's Remora SLIC chip (A200 ONLY) */ - if((err=sangoma_tdm_enable_rm_dtmf_events(dev_fd, &tdm_api))){ - return 1; - } - } - - if(remora_hook == 1){ - poll_events_bitmap |= POLLPRI; - if((err=sangoma_tdm_enable_rxhook_events(dev_fd, &tdm_api))){ - return 1; - } - } - - if(rbs_events == 1){ - poll_events_bitmap |= POLLPRI; - if((err=sangoma_tdm_enable_rbs_events(dev_fd, &tdm_api, 20))){ - return 1; - } - } - if (buffer_multiplier) { - printf("Setting buffer multiplier to %i\n",buffer_multiplier); - err=sangoma_tdm_set_buffer_multiplier(dev_fd,&tdm_api,buffer_multiplier); - if (err) { - return 1; - } - } - - printf("Device Config RxQ=%i TxQ=%i \n", - sangoma_get_rx_queue_sz(dev_fd,&tdm_api), - sangoma_get_rx_queue_sz(dev_fd,&tdm_api)); - - sangoma_set_rx_queue_sz(dev_fd,&tdm_api,20); - sangoma_set_tx_queue_sz(dev_fd,&tdm_api,30); - - printf("Device Config RxQ=%i TxQ=%i \n", - sangoma_get_rx_queue_sz(dev_fd,&tdm_api), - sangoma_get_tx_queue_sz(dev_fd,&tdm_api)); - - sangoma_flush_bufs(dev_fd,&tdm_api); - - sangoma_print_stats(dev_fd); - - - return err; -} - -/*! - \fn int __cdecl main(int argc, char* argv[]) - \brief Main function that starts the sample code - \param argc number of arguments - \param argv argument list -*/ -int __cdecl main(int argc, char* argv[]) -{ - int proceed, i; - - proceed=init_args(argc,argv); - if (proceed != WAN_TRUE){ - usage(argv[0]); - return -1; - } - - /* register Ctrl+C handler - we want a clean termination */ -#if defined(__WINDOWS__) - if (!SetConsoleCtrlHandler(TerminateHandler, TRUE)) { - printf("ERROR : Unable to register terminate handler ( %d ).\nProcess terminated.\n", - GetLastError()); - return -1; - } -#else - signal(SIGHUP,TerminateHandler); - signal(SIGTERM,TerminateHandler); -#endif - - for(i = 0; i < TEST_NUMBER_OF_OBJECTS; i++){ - sangoma_wait_objects[i] = NULL; - } - - poll_events_bitmap = 0; - if(read_enable == 1){ - poll_events_bitmap |= POLLIN; - } - - if(write_enable == 1 && rx2tx == 1){ - /* These two options are mutually exclusive because 'rx2tx' option - * indicates "use Reciever as the timing source for Transmitter". */ - write_enable = 0; - } - - if(write_enable == 1){ - poll_events_bitmap |= POLLOUT; - } - - /* Front End connect/disconnect, and other events, such as DTMF... */ - poll_events_bitmap |= (POLLHUP | POLLPRI); -#if defined(__WINDOWS__) - printf("Enabling Poll Events:\n"); - print_poll_event_bitmap(poll_events_bitmap); -#endif - printf("Connecting to Port/Span: %d, Interface/Chan: %d\n", - wanpipe_port_no, wanpipe_if_no); - - - if(open_sangoma_device()){ - return -1; - } - - printf("********************************\n"); - printf("files_used: 0x%x\n", files_used); - printf("********************************\n"); - if(files_used & RX_FILE_USED){ - pRxFile = fopen( (const char*)&rx_file[0], "wb" ); - if(pRxFile == NULL){ - printf("Can't open Rx file: [%s]!!\n", rx_file); - }else{ - printf("Open Rx file: %s. OK.\n", rx_file); - } - } - - handle_span_chan(1 /* handle a single device */); - - /* returned from main loop, do the cleanup before exiting: */ - cleanup(); - - printf("\nSample application exiting.(press any key)\n"); - _getch(); - return 0; -} diff --git a/api/libsangoma/sample_c/.svn/tmp/tempfile.3.tmp b/api/libsangoma/sample_c/.svn/tmp/tempfile.3.tmp deleted file mode 100644 index 0dbfb7f..0000000 --- a/api/libsangoma/sample_c/.svn/tmp/tempfile.3.tmp +++ /dev/null @@ -1,945 +0,0 @@ -/******************************************************************************//** - * \file sample.c - * \brief WANPIPE(tm) API C Sample Code - * - * Authors: David Rokhvarg - * Nenad Corbic - * - * Copyright (c) 2007 - 08, Sangoma Technologies - * All rights reserved. - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * =============================================================================== - * - */ - -#include "libsangoma.h" -#include "lib_api.h" - -static u_int32_t poll_events_bitmap = 0; - -/*! - \def TEST_NUMBER_OF_OBJECTS - \brief Number of wait objects to define in object array. - - Objects are used to wait on file descripotrs. - Usually there is one wait object per file descriptor. - - In this example there is a single file descriptor and a - single wait object. -*/ -#define TEST_NUMBER_OF_OBJECTS 1 - -static sangoma_wait_obj_t *sangoma_wait_objects[TEST_NUMBER_OF_OBJECTS]; - -/* This example application has only a single execution thread - it is safe - * to use a global buffer for received data and for data to be transmitted. */ -static unsigned char rxdata[MAX_NO_DATA_BYTES_IN_FRAME]; -static unsigned char txdata[MAX_NO_DATA_BYTES_IN_FRAME]; - -typedef struct sangoma_chan { - int spanno; - int channo; -} sangoma_chan_t; -sangoma_chan_t sangoma_channels[TEST_NUMBER_OF_OBJECTS]; - -/* Warning: non-thread safe globals. Ok for this single-thread example but not in production. */ -unsigned char rx_rbs_bits = WAN_RBS_SIG_A; -FILE *pRxFile; -int application_termination_flag = 0; - -/***************************************************************** - * Prototypes - *****************************************************************/ - -int __cdecl main(int argc, char* argv[]); -int open_sangoma_device(void); -void handle_span_chan(int open_device_counter); -int handle_tdm_event(uint32_t dev_index); -int handle_data(uint32_t dev_index, int flags_out); -int read_data(uint32_t dev_index, wp_api_hdr_t *rx_hdr, void *rx_buffer, int rx_buffer_length); -int write_data(uint32_t dev_index, wp_api_hdr_t *tx_hdr, void *tx_buffer, int tx_len); -int dtmf_event(sng_fd_t fd,unsigned char digit,unsigned char type,unsigned char port); -int rbs_event(sng_fd_t fd,unsigned char rbs_bits); -int rxhook_event(sng_fd_t fd,unsigned char hook_state); -int rxring_event(sng_fd_t fd,unsigned char ring_state); -int ringtrip_event (sng_fd_t fd, unsigned char ring_state); -int write_data_to_file(unsigned char *data, unsigned int data_length); -int sangoma_print_stats(sng_fd_t sangoma_dev); -void cleanup(void); - -#ifdef __WINDOWS__ -BOOL WINAPI TerminateHandler(DWORD dwCtrlType); -#else -void TerminateHandler(int); -#endif - -/***************************************************************** - * General Functions - *****************************************************************/ - -/*! - \fn void print_rx_data(unsigned char *data, int datalen) - \brief Prints the contents of data packet - \param data pointer to data buffer - \param datalen size of data buffer - \return void -*/ -void print_rxdata(unsigned char *data, int datalen, wp_api_hdr_t *hdr); /* dont remove prototype, gcc complains */ -void print_rxdata(unsigned char *data, int datalen, wp_api_hdr_t *hdr) -{ - int i; - int err=0; - -<<<<<<< .mine - printf("Data: (Len=%i,Errs=%i)\n",datalen,hdr->wp_api_rx_hdr_errors); -======= -#ifdef WP_API_FEATURE_RX_TX_ERRS - err=hdr->wp_api_rx_hdr_errors; -#endif - printf("Data: (Len=%i,Errs=%i)\n",datalen,err); ->>>>>>> .r292 - for(i = 0; i < datalen; i++) { - if((i % 20 == 0)){ - if(i){ - printf("\n"); - } - } - printf("%02X ", data[i]); -#if 0 - /* don't print too much!! */ - if(i > 100){ - printf("...\n"); - break; - } -#endif - } - printf("\n"); -} - - -int sangoma_print_stats(sng_fd_t sangoma_dev) -{ - int err; - unsigned char firm_ver, cpld_ver; - wanpipe_api_t wp_api; - wanpipe_chan_stats_t stats_str; - wanpipe_chan_stats_t *stats=&stats_str; - memset(&wp_api,0,sizeof(wp_api)); - - - err=sangoma_get_stats(sangoma_dev, &wp_api, stats); - if (err) { - printf("sangoma_get_stats(() failed (err: %d (0x%X))!\n", err, err); - return 1; - } - - printf( "******* OPERATIONAL_STATS *******\n"); - - printf("\trx_packets\t: %u\n", stats->rx_packets); - printf("\ttx_packets\t: %u\n", stats->tx_packets); - printf("\trx_bytes\t: %u\n", stats->rx_bytes); - printf("\ttx_bytes\t: %u\n", stats->tx_bytes); - printf("\trx_errors\t: %u\n", stats->rx_errors); //Total number of Rx errors - printf("\ttx_errors\t: %u\n", stats->tx_errors); //Total number of Tx errors - printf("\trx_dropped\t: %u\n", stats->rx_dropped); - printf("\ttx_dropped\t: %u\n", stats->tx_dropped); - printf("\tmulticast\t: %u\n", stats->multicast); - printf("\tcollisions\t: %u\n", stats->collisions); - - printf("\trx_length_errors: %u\n", stats->rx_length_errors); - printf("\trx_over_errors\t: %u\n", stats->rx_over_errors); - printf("\trx_crc_errors\t: %u\n", stats->rx_crc_errors); //HDLC CRC mismatch - printf("\trx_frame_errors\t: %u\n", stats->rx_frame_errors);//HDLC "abort" occured - printf("\trx_fifo_errors\t: %u\n", stats->rx_fifo_errors); - printf("\trx_missed_errors: %u\n", stats->rx_missed_errors); - - printf("\ttx_aborted_errors: %u\n", stats->tx_aborted_errors); - printf("\tTx Idle Data\t: %u\n", stats->tx_carrier_errors); - - printf("\ttx_fifo_errors\t: %u\n", stats->tx_fifo_errors); - printf("\ttx_heartbeat_errors: %u\n", stats->tx_heartbeat_errors); - printf("\ttx_window_errors: %u\n", stats->tx_window_errors); - - printf("\n\ttx_packets_in_q: %u\n", stats->current_number_of_frames_in_tx_queue); - printf("\ttx_queue_size: %u\n", stats->max_tx_queue_length); - - printf("\n\trx_packets_in_q: %u\n", stats->current_number_of_frames_in_rx_queue); - printf("\trx_queue_size: %u\n", stats->max_rx_queue_length); - - printf("\n\trx_events_in_q: %u\n", stats->current_number_of_events_in_event_queue); - printf("\trx_event_queue_size: %u\n", stats->max_event_queue_length); - printf("\trx_events: %u\n", stats->rx_events); - printf("\trx_events_dropped: %u\n", stats->rx_events_dropped); - - printf("\tHWEC tone (DTMF) events counter: %u\n", stats->rx_events_tone); - printf( "*********************************\n"); - - SANGOMA_INIT_TDM_API_CMD(wp_api); - err=sangoma_get_driver_version(sangoma_dev,&wp_api, NULL); - if (err) { - return 1; - } - printf("\tDriver Version: %u.%u.%u.%u\n", - wp_api.wp_cmd.version.major, - wp_api.wp_cmd.version.minor, - wp_api.wp_cmd.version.minor1, - wp_api.wp_cmd.version.minor2); - - SANGOMA_INIT_TDM_API_CMD(wp_api); - err=sangoma_get_firmware_version(sangoma_dev, &wp_api, &firm_ver); - if (err) { - return 1; - } - printf("\tFirmware Version: %X\n", - firm_ver); - - SANGOMA_INIT_TDM_API_CMD(wp_api); - err=sangoma_get_cpld_version(sangoma_dev, &wp_api, &cpld_ver); - if (err) { - return 1; - } - printf("\tCPLD Version: %X\n", - cpld_ver); - - return 0; -} - -/*! - \fn int read_data(uint32_t dev_index) - \brief Read data buffer from a device - \param dev_index device index number associated with device file descriptor - \param rx_hdr pointer to api header - \param rx_buffer pointer to a buffer where recived data will be stored - \param rx_buffer_length maximum length of rx_buffer - \return 0 - Ok otherwise Error -*/ -int read_data(uint32_t dev_index, wp_api_hdr_t *rx_hdr, void *rx_buffer, int rx_buffer_length) -{ - sng_fd_t dev_fd = sangoma_wait_obj_get_fd(sangoma_wait_objects[dev_index]); - sangoma_chan_t *chan = sangoma_wait_obj_get_context(sangoma_wait_objects[dev_index]); - int Rx_lgth = 0; - static int Rx_count= 0; - wanpipe_api_t tdm_api; - - memset(&tdm_api, 0x00, sizeof(tdm_api)); - memset(rx_hdr, 0, sizeof(wp_api_hdr_t)); - - /* read the message */ - Rx_lgth = sangoma_readmsg( - dev_fd, - rx_hdr, /* header buffer */ - sizeof(wp_api_hdr_t), /* header size */ - rx_buffer, /* data buffer */ - rx_buffer_length, /* data BUFFER size */ - 0); - if(Rx_lgth <= 0) { - printf("Span: %d, Chan: %d: Error receiving data!\n", - chan->spanno, chan->channo); - return 1; - } - - -<<<<<<< .mine - if (rx_hdr->wp_api_rx_hdr_error_map) { - if (rx_hdr->wp_api_rx_hdr_error_map & 1<wp_api_rx_hdr_error_map & 1<wp_api_rx_hdr_error_map & 1<wp_api_rx_hdr_error_map & 1<wp_api_rx_hdr_error_map & 1<wp_api_rx_hdr_error_map) { - if (rx_hdr->wp_api_rx_hdr_error_map & 1<spanno,chan->channo,rx_hdr->wp_api_rx_hdr_error_map); - } - if (rx_hdr->wp_api_rx_hdr_error_map & 1<spanno,chan->channo,rx_hdr->wp_api_rx_hdr_error_map); - } - if (rx_hdr->wp_api_rx_hdr_error_map & 1<spanno,chan->channo,rx_hdr->wp_api_rx_hdr_error_map); - } - if (rx_hdr->wp_api_rx_hdr_error_map & 1<spanno,chan->channo,rx_hdr->wp_api_rx_hdr_error_map); - } - if (rx_hdr->wp_api_rx_hdr_error_map & 1<spanno,chan->channo,rx_hdr->wp_api_rx_hdr_error_map); - } - //return 1; - } -#endif - ->>>>>>> .r292 - Rx_count++; - - if (verbose){ - print_rxdata(rx_buffer, Rx_lgth,rx_hdr); - } - - if (stats_period && Rx_count % stats_period == 0) { - sangoma_print_stats(dev_fd); - } - - /* use Rx_counter as "write" events trigger: */ - if(rbs_events == 1 && (Rx_count % 400) == 0){ - /* bitmap - set as needed: WAN_RBS_SIG_A | WAN_RBS_SIG_B | WAN_RBS_SIG_C | WAN_RBS_SIG_D; - - In this example make bits A and B to change each time, - so it's easy to see the change on the receiving side. - */ - if(rx_rbs_bits == WAN_RBS_SIG_A){ - rx_rbs_bits = WAN_RBS_SIG_B; - }else{ - rx_rbs_bits = WAN_RBS_SIG_A; - } - printf("Writing RBS bits (0x%X)...\n", rx_rbs_bits); - sangoma_tdm_write_rbs(dev_fd, &tdm_api, - chan->channo, - rx_rbs_bits); - } - - /* if user needs Rx data to be written into a file: */ - if(files_used & RX_FILE_USED){ - write_data_to_file(rx_buffer, Rx_lgth); - } - - return 0; -} - -/*! - \fn int write_data(uint32_t dev_index, wp_api_hdr_t *tx_hdr, void *tx_data, int tx_len) - \brief Transmit a data buffer to a device. - \param dev_index device index number associated with device file descriptor - \param tx_hdr pointer to a wp_api_hdr_t - \param tx_data pointer to a data buffer - \param tx_len tx data buffer len - \return 0 - Ok otherwise Error -*/ -int write_data(uint32_t dev_index, wp_api_hdr_t *tx_hdr, void *tx_buffer, int tx_len) -{ - sng_fd_t dev_fd = sangoma_wait_obj_get_fd(sangoma_wait_objects[dev_index]); - sangoma_chan_t *chan = sangoma_wait_obj_get_context(sangoma_wait_objects[dev_index]); - int err; - static int Tx_count = 0; - - if (hdlc_repeat) { - tx_hdr->wp_api_tx_hdr_hdlc_rpt_len=4; - memset(tx_hdr->wp_api_tx_hdr_hdlc_rpt_data,Tx_count,4); - } - - /* write a message */ - err = sangoma_writemsg( - dev_fd, - tx_hdr, /* header buffer */ - sizeof(wp_api_hdr_t), /* header size */ - tx_buffer, /* data buffer */ - tx_len, /* DATA size */ - 0); - - if (err <= 0){ - printf("Span: %d, Chan: %d: Failed to send!\n", - chan->spanno, - chan->channo); - return -1; - } - - Tx_count++; - if (verbose){ - printf("Packet sent: counter: %i, len: %i, errors %i\n", Tx_count, err, tx_hdr->wp_api_tx_hdr_errors); - }else{ - if(Tx_count && (!(Tx_count % 1000))){ - printf("Packet sent: counter: %i, len: %i\n", Tx_count, err); - } - } - -#if 1 - if(tx_cnt && Tx_count >= tx_cnt){ - write_enable=0; - printf("Disabling POLLOUT...\n"); - /* No need for POLLOUT, turn it off!! If not turned off, and we - * have nothing for transmission, sangoma_socket_waitfor() will return - * immediately, creating a busy loop. */ - //sangoma_wait_objects[dev_index].flags_in &= (~POLLOUT); - return 1; - } -#endif - return 0; -} - -/*! - \fn int handle_data(uint32_t dev_index, int flags_out) - \brief Read data buffer from the device and transmit it back down. - \param dev_index device index number associated with device file descriptor - \return 0 - Ok otherwise Error - - Read data buffer from a device. -*/ -int handle_data(uint32_t dev_index, int flags_out) -{ - wp_api_hdr_t rxhdr; - int err=0; - - memset(&rxhdr, 0, sizeof(rxhdr)); - -#if 0 - printf("%s(): span: %d, chan: %d\n", __FUNCTION__, - sangoma_wait_objects[dev_index].span, sangoma_wait_objects[dev_index].chan); -#endif - - if(flags_out & POLLIN){ - if(read_data(dev_index, &rxhdr, rxdata, MAX_NO_DATA_BYTES_IN_FRAME) == 0){ - if(rx2tx){ - /* Send back received data (create a "software loopback"), just a test. */ - return write_data(dev_index, &rxhdr, rxdata,rxhdr.data_length); - } - } - } - - if( (flags_out & POLLOUT) && write_enable ){ - - wp_api_hdr_t txhdr; - static unsigned char tx_test_byte = 0; - - memset(&txhdr, 0, sizeof(txhdr)); - txhdr.data_length = (unsigned short)tx_size;/* use '-txsize' command line option to change 'tx_size' */ - - /* set data which will be transmitted */ - memset(txdata, tx_test_byte, txhdr.data_length); - - err = write_data(dev_index, &txhdr, txdata, tx_size); - if (err== 0) { - tx_test_byte++; - } - } - return err; -} - -/*! - \fn int decode_api_event (wp_api_event_t *wp_tdm_api_event) - \brief Handle API Event - \param wp_tdm_api_event -*/ -static void decode_api_event(wp_api_event_t *wp_tdm_api_event) -{ - printf("%s(): span: %d, chan: %d\n", __FUNCTION__, - wp_tdm_api_event->span, wp_tdm_api_event->channel); - - switch(wp_tdm_api_event->wp_api_event_type) - { - case WP_API_EVENT_DTMF:/* DTMF detected by Hardware */ - printf("DTMF Event: Channel: %d, Digit: %c (Port: %s, Type:%s)!\n", - wp_tdm_api_event->channel, - wp_tdm_api_event->wp_api_event_dtmf_digit, - (wp_tdm_api_event->wp_api_event_dtmf_port == WAN_EC_CHANNEL_PORT_ROUT)?"ROUT":"SOUT", - (wp_tdm_api_event->wp_api_event_dtmf_type == WAN_EC_TONE_PRESENT)?"PRESENT":"STOP"); - break; - - case WP_API_EVENT_RXHOOK: - printf("RXHOOK Event: Channel: %d, %s! (0x%X)\n", - wp_tdm_api_event->channel, - WAN_EVENT_RXHOOK_DECODE(wp_tdm_api_event->wp_api_event_hook_state), - wp_tdm_api_event->wp_api_event_hook_state); - break; - - case WP_API_EVENT_RING_DETECT: - printf("RING Event: %s! (0x%X)\n", - WAN_EVENT_RING_DECODE(wp_tdm_api_event->wp_api_event_ring_state), - wp_tdm_api_event->wp_api_event_ring_state); - break; - - case WP_API_EVENT_RING_TRIP_DETECT: - printf("RING TRIP Event: %s! (0x%X)\n", - WAN_EVENT_RING_TRIP_DECODE(wp_tdm_api_event->wp_api_event_ring_state), - wp_tdm_api_event->wp_api_event_ring_state); - break; - - case WP_API_EVENT_RBS: - printf("RBS Event: Channel: %d, 0x%X!\n", - wp_tdm_api_event->channel, - wp_tdm_api_event->wp_api_event_rbs_bits); - printf( "RX RBS: A:%1d B:%1d C:%1d D:%1d\n", - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_A) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_B) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_C) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_D) ? 1 : 0); - break; - - case WP_API_EVENT_LINK_STATUS: - printf("Link Status Event: %s! (0x%X)\n", - WAN_EVENT_LINK_STATUS_DECODE(wp_tdm_api_event->wp_api_event_link_status), - wp_tdm_api_event->wp_api_event_link_status); - break; - - case WP_API_EVENT_ALARM: - printf("New Alarm State: %s! (0x%X)\n", (wp_tdm_api_event->wp_api_event_alarm == 0?"Off":"On"), - wp_tdm_api_event->wp_api_event_alarm); - break; - - case WP_API_EVENT_POLARITY_REVERSE: - printf("Polarity Reversal Event : %s! (0x%X)\n", - WP_API_EVENT_POLARITY_REVERSE_DECODE(wp_tdm_api_event->wp_api_event_polarity_reverse), - wp_tdm_api_event->wp_api_event_polarity_reverse); - break; - - default: - printf("Unknown TDM API Event: %d\n", wp_tdm_api_event->wp_api_event_type); - break; - } -} - -/*! - \fn int handle_tdm_event(uint32_t dev_index) - \brief Read Event buffer from the device - \param dev_index device index number associated with device file descriptor - \return 0 - Ok otherwise Error - - An EVENT has occoured. Execute a system call to read the EVENT - on a device. -*/ -int handle_tdm_event(uint32_t dev_index) -{ - wanpipe_api_t tdm_api; - sng_fd_t dev_fd = sangoma_wait_obj_get_fd(sangoma_wait_objects[dev_index]); - -#if 0 - printf("%s(): dev_index: %d, dev_fd: 0x%p\n", __FUNCTION__, dev_index, dev_fd); -#endif - - memset(&tdm_api, 0x00, sizeof(tdm_api)); - - if(sangoma_read_event(dev_fd, &tdm_api)){ - return 1; - } - - decode_api_event(&tdm_api.wp_cmd.event); - return 0; -} - -/*! - \fn void handle_span_chan(int open_device_counter) - \brief Write data buffer into a file - \param open_device_counter number of opened devices - \return void - - This function will wait on all opened devices. - This example will wait for RX and EVENT signals. - In case of POLLIN - rx data available - In case of POLLPRI - event is available -*/ -void handle_span_chan(int open_device_counter) -{ - int iResult, i; - u_int32_t input_flags[TEST_NUMBER_OF_OBJECTS]; - u_int32_t output_flags[TEST_NUMBER_OF_OBJECTS]; - - printf("\n\nSpan/Chan Handler: RxEnable=%s, TxEnable=%s, TxCnt=%i, TxLen=%i, rx2tx=%s\n", - (read_enable? "Yes":"No"), (write_enable?"Yes":"No"),tx_cnt,tx_size, (rx2tx?"Yes":"No")); - - for (i = 0; i < open_device_counter; i++) { - input_flags[i] = poll_events_bitmap; - } - - /* Main Rx/Tx/Event loop */ - while(!application_termination_flag) - { - iResult = sangoma_waitfor_many(sangoma_wait_objects, - input_flags, - output_flags, - open_device_counter /* number of wait objects */, - 5000 /* wait timeout, in milliseconds */); - switch(iResult) - { - case SANG_STATUS_APIPOLL_TIMEOUT: - /* timeout (not an error) */ - { - sng_fd_t dev_fd = sangoma_wait_obj_get_fd(sangoma_wait_objects[0]); - sangoma_print_stats(dev_fd); - } - printf("Timeout\n"); - continue; - - case SANG_STATUS_SUCCESS: - for(i = 0; i < open_device_counter; i++){ - - /* a wait object was signaled */ - if(output_flags[i] & POLLPRI){ - /* got tdm api event */ - if(handle_tdm_event(i)){ - printf("Error in handle_tdm_event()!\n"); - application_termination_flag=1; - break; - } - } - - if(output_flags[i] & (POLLIN | POLLOUT)){ - /* rx data OR a free tx buffer available */ - if(handle_data(i, output_flags[i])){ - printf("Error in handle_data()!\n"); - //application_termination_flag=1; - break; - } - } - }/* for() */ - break; - - default: - /* error */ - printf("Error: iResult: %s (%d)\n", SDLA_DECODE_SANG_STATUS(iResult), iResult); - return; - } - - }/* while() */ -} - -/*! - \fn int write_data_to_file(unsigned char *data, unsigned int data_length) - \brief Write data buffer into a file - \param data data buffer - \param data_length length of a data buffer - \return data_length = ok otherwise error - -*/ -int write_data_to_file(unsigned char *data, unsigned int data_length) -{ - if(pRxFile == NULL){ - return 1; - } - - return fwrite(data, 1, data_length, pRxFile); -} - -#ifdef __WINDOWS__ -/* - * TerminateHandler() - this handler is called by the system whenever user tries to terminate - * the process with Ctrl+C, Ctrl+Break or closes the console window. - * Perform a clean-up here. - */ -BOOL TerminateHandler(DWORD dwCtrlType) -{ - printf("\nProcess terminated by user request.\n"); - application_termination_flag = 1; - /* do the cleanup before exiting: */ - cleanup(); - /* return FALSE so the system will call the dafult handler which will terminate the process. */ - return FALSE; -} -#else -/*! - \fn void TerminateHandler (int sig) - \brief Signal handler for graceful shutdown - \param sig signal -*/ -void TerminateHandler (int sig) -{ - printf("\nProcess terminated by user request.\n"); - application_termination_flag = 1; - /* do the cleanup before exiting: */ - cleanup(); - return; -} - -#endif - -/*! - \fn void cleanup() - \brief Protperly shutdown single device - \param dev_no device index number - \return void - -*/ -void cleanup() -{ - int dev_no; - sng_fd_t fd; - sangoma_chan_t *chan; - sangoma_wait_obj_t *sng_wait_object; - wanpipe_api_t tdm_api; - - /* do the cleanup before exiting: */ - for(dev_no = 0; dev_no < TEST_NUMBER_OF_OBJECTS; dev_no++){ - - sng_wait_object = sangoma_wait_objects[dev_no]; - if(!sng_wait_object){ - continue; - } - chan = sangoma_wait_obj_get_context(sng_wait_object); - printf("%s(): span: %d, chan: %d ...\n", __FUNCTION__, - chan->channo, - chan->spanno); - - fd = sangoma_wait_obj_get_fd(sng_wait_object); - memset(&tdm_api, 0x00, sizeof(tdm_api)); - - if(dtmf_enable_octasic == 1){ - /* Disable dtmf detection on Octasic chip */ - sangoma_tdm_disable_dtmf_events(fd, &tdm_api); - } - - if(dtmf_enable_remora == 1){ - /* Disable dtmf detection on Sangoma's Remora SLIC chip */ - sangoma_tdm_disable_rm_dtmf_events(fd, &tdm_api); - } - - if(remora_hook == 1){ - sangoma_tdm_disable_rxhook_events(fd, &tdm_api); - } - - if(rbs_events == 1){ - sangoma_tdm_disable_rbs_events(fd, &tdm_api); - } - - sangoma_wait_obj_delete(&sng_wait_object); - - sangoma_close(&fd); - - } -} - - -/*! - \fn int open_sangoma_device() - \brief Open a single span chan device - \return 0 ok otherise error. - - This function will open a single span chan. - - However it can be rewritten to iterate for all spans and chans and try to - open all existing wanpipe devices. - - For each opened device, a wait object will be initialized. - For each device, configure the chunk size for tx/rx - enable events such as DTMF/RBS ...etc -*/ -int open_sangoma_device() -{ - int span, chan, err = 0, open_dev_cnt = 0; - sangoma_status_t status; - sng_fd_t dev_fd = INVALID_HANDLE_VALUE; - wanpipe_api_t tdm_api; - - span = wanpipe_port_no; - chan = wanpipe_if_no; - - /* span and chan are 1-based */ - dev_fd = sangoma_open_api_span_chan(span, chan); - if( dev_fd == INVALID_HANDLE_VALUE){ - printf("Warning: Failed to open span %d, chan %d\n", span , chan); - return 1; - }else{ - printf("Successfuly opened span %d, chan %d\n", span , chan); - } - - memset(&tdm_api, 0x00, sizeof(tdm_api)); - - status = sangoma_wait_obj_create(&sangoma_wait_objects[open_dev_cnt], dev_fd, SANGOMA_DEVICE_WAIT_OBJ); - if(status != SANG_STATUS_SUCCESS){ - printf("Error: Failed to create 'sangoma_wait_object'!\n"); - return 1; - } - sangoma_channels[open_dev_cnt].channo = chan; - sangoma_channels[open_dev_cnt].spanno = span; - sangoma_wait_obj_set_context(sangoma_wait_objects[open_dev_cnt], &sangoma_channels[open_dev_cnt]); - /* open_dev_cnt++; */ - - if((err = sangoma_get_full_cfg(dev_fd, &tdm_api))){ - return 1; - } - - if(set_codec_slinear){ - printf("Setting SLINEAR codec\n"); - if((err=sangoma_tdm_set_codec(dev_fd, &tdm_api, WP_SLINEAR))){ - return 1; - } - } - - if(set_codec_none){ - printf("Disabling codec\n"); - if((err=sangoma_tdm_set_codec(dev_fd, &tdm_api, WP_NONE))){ - return 1; - } - } - - if(usr_period){ - printf("Setting user period: %d\n", usr_period); - if((err=sangoma_tdm_set_usr_period(dev_fd, &tdm_api, usr_period))){ - return 1; - } - } - - if(set_codec_slinear || usr_period || set_codec_none){ - /* display new configuration AFTER it was changed */ - if((err=sangoma_get_full_cfg(dev_fd, &tdm_api))){ - return 1; - } - } - - if(dtmf_enable_octasic == 1){ - poll_events_bitmap |= POLLPRI; - /* enable dtmf detection on Octasic chip */ - if((err=sangoma_tdm_enable_dtmf_events(dev_fd, &tdm_api))){ - return 1; - } - } - - if(dtmf_enable_remora == 1){ - poll_events_bitmap |= POLLPRI; - /* enable dtmf detection on Sangoma's Remora SLIC chip (A200 ONLY) */ - if((err=sangoma_tdm_enable_rm_dtmf_events(dev_fd, &tdm_api))){ - return 1; - } - } - - if(remora_hook == 1){ - poll_events_bitmap |= POLLPRI; - if((err=sangoma_tdm_enable_rxhook_events(dev_fd, &tdm_api))){ - return 1; - } - } - - if(rbs_events == 1){ - poll_events_bitmap |= POLLPRI; - if((err=sangoma_tdm_enable_rbs_events(dev_fd, &tdm_api, 20))){ - return 1; - } - } - if (buffer_multiplier) { - printf("Setting buffer multiplier to %i\n",buffer_multiplier); - err=sangoma_tdm_set_buffer_multiplier(dev_fd,&tdm_api,buffer_multiplier); - if (err) { - return 1; - } - } - - printf("Device Config RxQ=%i TxQ=%i \n", - sangoma_get_rx_queue_sz(dev_fd,&tdm_api), - sangoma_get_rx_queue_sz(dev_fd,&tdm_api)); - - sangoma_set_rx_queue_sz(dev_fd,&tdm_api,20); - sangoma_set_tx_queue_sz(dev_fd,&tdm_api,30); - - printf("Device Config RxQ=%i TxQ=%i \n", - sangoma_get_rx_queue_sz(dev_fd,&tdm_api), - sangoma_get_tx_queue_sz(dev_fd,&tdm_api)); - - sangoma_flush_bufs(dev_fd,&tdm_api); - - sangoma_print_stats(dev_fd); - - - return err; -} - -/*! - \fn int __cdecl main(int argc, char* argv[]) - \brief Main function that starts the sample code - \param argc number of arguments - \param argv argument list -*/ -int __cdecl main(int argc, char* argv[]) -{ - int proceed, i; - - proceed=init_args(argc,argv); - if (proceed != WAN_TRUE){ - usage(argv[0]); - return -1; - } - - /* register Ctrl+C handler - we want a clean termination */ -#if defined(__WINDOWS__) - if (!SetConsoleCtrlHandler(TerminateHandler, TRUE)) { - printf("ERROR : Unable to register terminate handler ( %d ).\nProcess terminated.\n", - GetLastError()); - return -1; - } -#else - signal(SIGHUP,TerminateHandler); - signal(SIGTERM,TerminateHandler); -#endif - - for(i = 0; i < TEST_NUMBER_OF_OBJECTS; i++){ - sangoma_wait_objects[i] = NULL; - } - - poll_events_bitmap = 0; - if(read_enable == 1){ - poll_events_bitmap |= POLLIN; - } - - if(write_enable == 1 && rx2tx == 1){ - /* These two options are mutually exclusive because 'rx2tx' option - * indicates "use Reciever as the timing source for Transmitter". */ - write_enable = 0; - } - - if(write_enable == 1){ - poll_events_bitmap |= POLLOUT; - } - - /* Front End connect/disconnect, and other events, such as DTMF... */ - poll_events_bitmap |= (POLLHUP | POLLPRI); -#if defined(__WINDOWS__) - printf("Enabling Poll Events:\n"); - print_poll_event_bitmap(poll_events_bitmap); -#endif - printf("Connecting to Port/Span: %d, Interface/Chan: %d\n", - wanpipe_port_no, wanpipe_if_no); - - - if(open_sangoma_device()){ - return -1; - } - - printf("********************************\n"); - printf("files_used: 0x%x\n", files_used); - printf("********************************\n"); - if(files_used & RX_FILE_USED){ - pRxFile = fopen( (const char*)&rx_file[0], "wb" ); - if(pRxFile == NULL){ - printf("Can't open Rx file: [%s]!!\n", rx_file); - }else{ - printf("Open Rx file: %s. OK.\n", rx_file); - } - } - - handle_span_chan(1 /* handle a single device */); - - /* returned from main loop, do the cleanup before exiting: */ - cleanup(); - - printf("\nSample application exiting.(press any key)\n"); - _getch(); - return 0; -} diff --git a/api/libsangoma/sample_c/.svn/tmp/tempfile.tmp b/api/libsangoma/sample_c/.svn/tmp/tempfile.tmp deleted file mode 100644 index 42db9a7..0000000 --- a/api/libsangoma/sample_c/.svn/tmp/tempfile.tmp +++ /dev/null @@ -1,775 +0,0 @@ -/******************************************************************************//** - * \file sample.c - * \brief WANPIPE(tm) API C Sample Code - * - * Authors: David Rokhvarg - * Nenad Corbic - * - * Copyright (c) 2007 - 08, Sangoma Technologies - * All rights reserved. - * - * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Sangoma Technologies nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * =============================================================================== - * - */ - -#include "libsangoma.h" -#include "lib_api.h" - -static u_int32_t poll_events_bitmap = 0; - -/*! - \def TEST_NUMBER_OF_OBJECTS - \brief Number of wait objects to define in object array. - - Objects are used to wait on file descripotrs. - Usually there is one wait object per file descriptor. - - In this example there is a single file descriptor and a - single wait object. -*/ -#define TEST_NUMBER_OF_OBJECTS 1 - -static void *sangoma_wait_objects[TEST_NUMBER_OF_OBJECTS]; - -/* This example application has only a single execution thread - it is safe - * to use a global buffer for received data and for data to be transmitted. */ -static unsigned char rxdata[MAX_NO_DATA_BYTES_IN_FRAME]; -static unsigned char txdata[MAX_NO_DATA_BYTES_IN_FRAME]; - -typedef struct sangoma_chan { - int spanno; - int channo; -} sangoma_chan_t; -sangoma_chan_t sangoma_channels[TEST_NUMBER_OF_OBJECTS]; - -/* Warning: non-thread safe globals. Ok for this single-thread example but not in production. */ -unsigned char rx_rbs_bits = WAN_RBS_SIG_A; -FILE *pRxFile; -int application_termination_flag = 0; - -/***************************************************************** - * Prototypes - *****************************************************************/ - -int __cdecl main(int argc, char* argv[]); -int open_sangoma_device(void); -void handle_span_chan(int open_device_counter); -int handle_tdm_event(uint32_t dev_index); -int handle_data(uint32_t dev_index, int flags_out); -int read_data(uint32_t dev_index, wp_api_hdr_t *rx_hdr, void *rx_buffer, int rx_buffer_length); -int write_data(uint32_t dev_index, wp_api_hdr_t *tx_hdr, void *tx_buffer); -int dtmf_event(sng_fd_t fd,unsigned char digit,unsigned char type,unsigned char port); -int rbs_event(sng_fd_t fd,unsigned char rbs_bits); -int rxhook_event(sng_fd_t fd,unsigned char hook_state); -int rxring_event(sng_fd_t fd,unsigned char ring_state); -int ringtrip_event (sng_fd_t fd, unsigned char ring_state); -int write_data_to_file(unsigned char *data, unsigned int data_length); -void cleanup(void); - -#ifdef __WINDOWS__ -BOOL TerminateHandler(DWORD dwCtrlType); -#else -void TerminateHandler(int); -#endif - -/***************************************************************** - * General Functions - *****************************************************************/ - -/*! - \fn void print_rx_data(unsigned char *data, int datalen) - \brief Prints the contents of data packet - \param data pointer to data buffer - \param datalen size of data buffer - \return void -*/ -void print_rxdata(unsigned char *data, int datalen); /* dont remove prototype, gcc complains */ -void print_rxdata(unsigned char *data, int datalen) -{ - int i; - - printf("Data: (Len=%i)\n",datalen); - for(i = 0; i < datalen; i++) { - if((i % 20 == 0)){ - if(i){ - printf("\n"); - } - } - printf("%02X ", data[i]); -#if 0 - /* don't print too much!! */ - if(i > 100){ - printf("...\n"); - break; - } -#endif - } - printf("\n"); -} - -/*! - \fn int read_data(uint32_t dev_index) - \brief Read data buffer from a device - \param dev_index device index number associated with device file descriptor - \param rx_hdr pointer to api header - \param rx_buffer pointer to a buffer where recived data will be stored - \param rx_buffer_length maximum length of rx_buffer - \return 0 - Ok otherwise Error -*/ -int read_data(uint32_t dev_index, wp_api_hdr_t *rx_hdr, void *rx_buffer, int rx_buffer_length) -{ - sng_fd_t dev_fd = sangoma_wait_obj_get_fd(sangoma_wait_objects[dev_index]); - sangoma_chan_t *chan = sangoma_wait_obj_get_context(sangoma_wait_objects[dev_index]); - int Rx_lgth = 0; - static int Rx_count= 0; - wanpipe_api_t tdm_api; - - memset(&tdm_api, 0x00, sizeof(tdm_api)); - memset(rx_hdr, 0, sizeof(wp_api_hdr_t)); - - /* read the message */ - Rx_lgth = sangoma_readmsg( - dev_fd, - rx_hdr, /* header buffer */ - sizeof(wp_api_hdr_t), /* header size */ - rx_buffer, /* data buffer */ - rx_buffer_length, /* data BUFFER size */ - 0); - if(Rx_lgth <= 0) { - printf("Span: %d, Chan: %d: Error receiving data!\n", - chan->spanno, chan->channo); - return 1; - } - - if (verbose){ - print_rxdata(rx_buffer, Rx_lgth); - } - - /* use Rx_counter as "write" events trigger: */ - if(rbs_events == 1 && (Rx_count % 400) == 0){ - /* bitmap - set as needed: WAN_RBS_SIG_A | WAN_RBS_SIG_B | WAN_RBS_SIG_C | WAN_RBS_SIG_D; - - In this example make bits A and B to change each time, - so it's easy to see the change on the receiving side. - */ - if(rx_rbs_bits == WAN_RBS_SIG_A){ - rx_rbs_bits = WAN_RBS_SIG_B; - }else{ - rx_rbs_bits = WAN_RBS_SIG_A; - } - printf("Writing RBS bits (0x%X)...\n", rx_rbs_bits); - sangoma_tdm_write_rbs(dev_fd, &tdm_api, - chan->channo, - rx_rbs_bits); - } - - /* if user needs Rx data to be written into a file: */ - if(files_used & RX_FILE_USED){ - write_data_to_file(rx_buffer, Rx_lgth); - } - - return 0; -} - -/*! - \fn int write_data(uint32_t dev_index, wp_api_hdr_t *tx_hdr, void *tx_data) - \brief Transmit a data buffer to a device. - \param dev_index device index number associated with device file descriptor - \param tx_hdr pointer to a wp_api_hdr_t - \param tx_data pointer to a data buffer - \return 0 - Ok otherwise Error -*/ -int write_data(uint32_t dev_index, wp_api_hdr_t *tx_hdr, void *tx_buffer) -{ - sng_fd_t dev_fd = sangoma_wait_obj_get_fd(sangoma_wait_objects[dev_index]); - sangoma_chan_t *chan = sangoma_wait_obj_get_context(sangoma_wait_objects[dev_index]); - int err; - static int Tx_count = 0; - - /* write a message */ - err = sangoma_writemsg( - dev_fd, - tx_hdr, /* header buffer */ - sizeof(wp_api_hdr_t), /* header size */ - tx_buffer, /* data buffer */ - tx_hdr->data_length, /* DATA size */ - 0); - - if (err <= 0){ - printf("Span: %d, Chan: %d: Failed to send!\n", - chan->spanno, - chan->channo); - return -1; - } - - Tx_count++; - if (verbose){ - printf("Packet sent: counter: %i, len: %i\n", Tx_count, err); - }else{ - if(Tx_count && (!(Tx_count % 1000))){ - printf("Packet sent: counter: %i, len: %i\n", Tx_count, err); - } - } - -#if 0 - if(Tx_count >= tx_cnt){ - write_enable=0; - printf("Disabling POLLOUT...\n"); - /* No need for POLLOUT, turn it off!! If not turned off, and we - * have nothing for transmission, sangoma_socket_waitfor() will return - * immediately, creating a busy loop. */ - sangoma_wait_objects[dev_index].flags_in &= (~POLLOUT); - } -#endif - return 0; -} - -/*! - \fn int handle_data(uint32_t dev_index, int flags_out) - \brief Read data buffer from the device and transmit it back down. - \param dev_index device index number associated with device file descriptor - \return 0 - Ok otherwise Error - - Read data buffer from a device. -*/ -int handle_data(uint32_t dev_index, int flags_out) -{ - wp_api_hdr_t rxhdr; - - memset(&rxhdr, 0, sizeof(rxhdr)); - -#if 0 - printf("%s(): span: %d, chan: %d\n", __FUNCTION__, - sangoma_wait_objects[dev_index].span, sangoma_wait_objects[dev_index].chan); -#endif - - if(flags_out & POLLIN){ - if(read_data(dev_index, &rxhdr, rxdata, MAX_NO_DATA_BYTES_IN_FRAME) == 0){ - if(rx2tx){ - /* Send back received data (create a "software loopback"), just a test. */ - return write_data(dev_index, &rxhdr, rxdata); - } - } - } - - if( (flags_out & POLLOUT) && write_enable ){ - - wp_api_hdr_t txhdr; - static unsigned char tx_test_byte = 0; - - memset(&txhdr, 0, sizeof(txhdr)); - txhdr.data_length = (unsigned short)tx_size;/* use '-txsize' command line option to change 'tx_size' */ - - /* set data which will be transmitted */ - memset(txdata, tx_test_byte, txhdr.data_length); - - if(write_data(dev_index, &txhdr, txdata) == 0){ - tx_test_byte++; - } - } - return 0; -} - -/*! - \fn int decode_api_event (wp_api_event_t *wp_tdm_api_event) - \brief Handle API Event - \param wp_tdm_api_event -*/ -static void decode_api_event(wp_api_event_t *wp_tdm_api_event) -{ - printf("%s(): span: %d, chan: %d\n", __FUNCTION__, - wp_tdm_api_event->span, wp_tdm_api_event->channel); - - switch(wp_tdm_api_event->wp_api_event_type) - { - case WP_API_EVENT_DTMF:/* DTMF detected by Hardware */ - printf("DTMF Event: Channel: %d, Digit: %c (Port: %s, Type:%s)!\n", - wp_tdm_api_event->channel, - wp_tdm_api_event->wp_api_event_dtmf_digit, - (wp_tdm_api_event->wp_api_event_dtmf_port == WAN_EC_CHANNEL_PORT_ROUT)?"ROUT":"SOUT", - (wp_tdm_api_event->wp_api_event_dtmf_type == WAN_EC_TONE_PRESENT)?"PRESENT":"STOP"); - break; - - case WP_API_EVENT_RXHOOK: - printf("RXHOOK Event: Channel: %d, %s! (0x%X)\n", - wp_tdm_api_event->channel, - WAN_EVENT_RXHOOK_DECODE(wp_tdm_api_event->wp_api_event_hook_state), - wp_tdm_api_event->wp_api_event_hook_state); - break; - - case WP_API_EVENT_RING_DETECT: - printf("RING Event: %s! (0x%X)\n", - WAN_EVENT_RING_DECODE(wp_tdm_api_event->wp_api_event_ring_state), - wp_tdm_api_event->wp_api_event_ring_state); - break; - - case WP_API_EVENT_RING_TRIP_DETECT: - printf("RING TRIP Event: %s! (0x%X)\n", - WAN_EVENT_RING_TRIP_DECODE(wp_tdm_api_event->wp_api_event_ring_state), - wp_tdm_api_event->wp_api_event_ring_state); - break; - - case WP_API_EVENT_RBS: - printf("RBS Event: Channel: %d, 0x%X!\n", - wp_tdm_api_event->channel, - wp_tdm_api_event->wp_api_event_rbs_bits); - printf( "RX RBS: A:%1d B:%1d C:%1d D:%1d\n", - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_A) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_B) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_C) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_D) ? 1 : 0); - break; - - case WP_API_EVENT_LINK_STATUS: - printf("Link Status Event: %s! (0x%X)\n", - WAN_EVENT_LINK_STATUS_DECODE(wp_tdm_api_event->wp_api_event_link_status), - wp_tdm_api_event->wp_api_event_link_status); - break; - - case WP_API_EVENT_ALARM: - printf("New Alarm State: %s! (0x%X)\n", (wp_tdm_api_event->wp_api_event_alarm == 0?"Off":"On"), - wp_tdm_api_event->wp_api_event_alarm); - break; - - case WP_API_EVENT_POLARITY_REVERSE: - printf("Polarity Reversal Event : %s! (0x%X)\n", - WP_API_EVENT_POLARITY_REVERSE_DECODE(wp_tdm_api_event->wp_api_event_polarity_reverse), - wp_tdm_api_event->wp_api_event_polarity_reverse); - break; - - default: - printf("Unknown TDM API Event: %d\n", wp_tdm_api_event->wp_api_event_type); - break; - } -} - -/*! - \fn int handle_tdm_event(uint32_t dev_index) - \brief Read Event buffer from the device - \param dev_index device index number associated with device file descriptor - \return 0 - Ok otherwise Error - - An EVENT has occoured. Execute a system call to read the EVENT - on a device. -*/ -int handle_tdm_event(uint32_t dev_index) -{ - wanpipe_api_t tdm_api; - sng_fd_t dev_fd = sangoma_wait_obj_get_fd(sangoma_wait_objects[dev_index]); - -#if 0 - printf("%s(): dev_index: %d, dev_fd: 0x%p\n", __FUNCTION__, dev_index, dev_fd); -#endif - - memset(&tdm_api, 0x00, sizeof(tdm_api)); - - if(sangoma_read_event(dev_fd, &tdm_api)){ - return 1; - } - - decode_api_event(&tdm_api.wp_cmd.event); - return 0; -} - -/*! - \fn void handle_span_chan(int open_device_counter) - \brief Write data buffer into a file - \param open_device_counter number of opened devices - \return void - - This function will wait on all opened devices. - This example will wait for RX and EVENT signals. - In case of POLLIN - rx data available - In case of POLLPRI - event is available -*/ -void handle_span_chan(int open_device_counter) -{ - int iResult, i; - u_int32_t input_flags[TEST_NUMBER_OF_OBJECTS]; - u_int32_t output_flags[TEST_NUMBER_OF_OBJECTS]; - - printf("\n\nSpan/Chan Handler: RxEnable=%s, TxEnable=%s, TxCnt=%i, TxLen=%i, rx2tx=%s\n", - (read_enable? "Yes":"No"), (write_enable?"Yes":"No"),tx_cnt,tx_size, (rx2tx?"Yes":"No")); - - for (i = 0; i < open_device_counter; i++) { - input_flags[i] = poll_events_bitmap; - } - - /* Main Rx/Tx/Event loop */ - while(!application_termination_flag) - { - iResult = sangoma_waitfor_many(sangoma_wait_objects, - input_flags, - output_flags, - open_device_counter /* number of wait objects */, - 2000 /* wait timeout, in milliseconds */); - switch(iResult) - { - case SANG_STATUS_APIPOLL_TIMEOUT: - /* timeout (not an error) */ - printf("Timeout\n"); - continue; - - case SANG_STATUS_SUCCESS: - for(i = 0; i < open_device_counter; i++){ - - /* a wait object was signaled */ - if(output_flags[i] & POLLPRI){ - /* got tdm api event */ - if(handle_tdm_event(i)){ - printf("Error in handle_tdm_event()!\n"); - } - } - - if(output_flags[i] & (POLLIN | POLLOUT)){ - /* rx data OR a free tx buffer available */ - if(handle_data(i, output_flags[i])){ - printf("Error in handle_data()!\n"); - } - } - }/* for() */ - break; - - default: - /* error */ - printf("Error: iResult: %s (%d)\n", SDLA_DECODE_SANG_STATUS(iResult), iResult); - return; - } - - }/* while() */ -} - -/*! - \fn int write_data_to_file(unsigned char *data, unsigned int data_length) - \brief Write data buffer into a file - \param data data buffer - \param data_length length of a data buffer - \return data_length = ok otherwise error - -*/ -int write_data_to_file(unsigned char *data, unsigned int data_length) -{ - if(pRxFile == NULL){ - return 1; - } - - return fwrite(data, 1, data_length, pRxFile); -} - -#ifdef __WINDOWS__ -/* - * TerminateHandler() - this handler is called by the system whenever user tries to terminate - * the process with Ctrl+C, Ctrl+Break or closes the console window. - * Perform a clean-up here. - */ -BOOL TerminateHandler(DWORD dwCtrlType) -{ - printf("\nProcess terminated by user request.\n"); - application_termination_flag = 1; - /* do the cleanup before exiting: */ - cleanup(); - /* return FALSE so the system will call the dafult handler which will terminate the process. */ - return FALSE; -} -#else -/*! - \fn void TerminateHandler (int sig) - \brief Signal handler for graceful shutdown - \param sig signal -*/ -void TerminateHandler (int sig) -{ - printf("\nProcess terminated by user request.\n"); - application_termination_flag = 1; - /* do the cleanup before exiting: */ - cleanup(); - return; -} - -#endif - -/*! - \fn void cleanup() - \brief Protperly shutdown single device - \param dev_no device index number - \return void - -*/ -void cleanup() -{ - int dev_no; - sng_fd_t fd; - sangoma_chan_t *chan; - sangoma_wait_obj_t *sng_wait_object; - wanpipe_api_t tdm_api; - - /* do the cleanup before exiting: */ - for(dev_no = 0; dev_no < TEST_NUMBER_OF_OBJECTS; dev_no++){ - - sng_wait_object = sangoma_wait_objects[dev_no]; - if(!sng_wait_object){ - continue; - } - chan = sangoma_wait_obj_get_context(sng_wait_object); - printf("%s(): span: %d, chan: %d ...\n", __FUNCTION__, - chan->channo, - chan->spanno); - - fd = sangoma_wait_obj_get_fd(sng_wait_object); - memset(&tdm_api, 0x00, sizeof(tdm_api)); - - if(dtmf_enable_octasic == 1){ - /* Disable dtmf detection on Octasic chip */ - sangoma_tdm_disable_dtmf_events(fd, &tdm_api); - } - - if(dtmf_enable_remora == 1){ - /* Disable dtmf detection on Sangoma's Remora SLIC chip */ - sangoma_tdm_disable_rm_dtmf_events(fd, &tdm_api); - } - - if(remora_hook == 1){ - sangoma_tdm_disable_rxhook_events(fd, &tdm_api); - } - - if(rbs_events == 1){ - sangoma_tdm_disable_rbs_events(fd, &tdm_api); - } - - sangoma_wait_obj_delete(&sng_wait_object); - - sangoma_close(&fd); - - } -} - - -/*! - \fn int open_sangoma_device() - \brief Open a single span chan device - \return 0 ok otherise error. - - This function will open a single span chan. - - However it can be rewritten to iterate for all spans and chans and try to - open all existing wanpipe devices. - - For each opened device, a wait object will be initialized. - For each device, configure the chunk size for tx/rx - enable events such as DTMF/RBS ...etc -*/ -int open_sangoma_device() -{ - int span, chan, err = 0, open_dev_cnt = 0; - sangoma_status_t status; - sng_fd_t dev_fd = INVALID_HANDLE_VALUE; - wanpipe_api_t tdm_api; - - span = wanpipe_port_no; - chan = wanpipe_if_no; - - /* span and chan are 1-based */ - dev_fd = sangoma_open_api_span_chan(span, chan); - if( dev_fd == INVALID_HANDLE_VALUE){ - printf("Warning: Failed to open span %d, chan %d\n", span , chan); - return 1; - }else{ - printf("Successfuly opened span %d, chan %d\n", span , chan); - } - - memset(&tdm_api, 0x00, sizeof(tdm_api)); - - status = sangoma_wait_obj_create(&sangoma_wait_objects[open_dev_cnt], dev_fd, SANGOMA_DEVICE_WAIT_OBJ); - if(status != SANG_STATUS_SUCCESS){ - printf("Error: Failed to create 'sangoma_wait_object'!\n"); - return 1; - } - sangoma_channels[open_dev_cnt].channo = chan; - sangoma_channels[open_dev_cnt].spanno = span; - sangoma_wait_obj_set_context(sangoma_wait_objects[open_dev_cnt], &sangoma_channels[open_dev_cnt]); - /* open_dev_cnt++; */ - - if((err = sangoma_get_full_cfg(dev_fd, &tdm_api))){ - return 1; - } - - if(set_codec_slinear){ - printf("Setting SLINEAR codec\n"); - if((err=sangoma_tdm_set_codec(dev_fd, &tdm_api, WP_SLINEAR))){ - return 1; - } - } - - if(set_codec_none){ - printf("Disabling codec\n"); - if((err=sangoma_tdm_set_codec(dev_fd, &tdm_api, WP_NONE))){ - return 1; - } - } - - if(usr_period){ - printf("Setting user period: %d\n", usr_period); - if((err=sangoma_tdm_set_usr_period(dev_fd, &tdm_api, usr_period))){ - return 1; - } - } - - if(set_codec_slinear || usr_period || set_codec_none){ - /* display new configuration AFTER it was changed */ - if((err=sangoma_get_full_cfg(dev_fd, &tdm_api))){ - return 1; - } - } - - if(dtmf_enable_octasic == 1){ - poll_events_bitmap |= POLLPRI; - /* enable dtmf detection on Octasic chip */ - if((err=sangoma_tdm_enable_dtmf_events(dev_fd, &tdm_api))){ - return 1; - } - } - - if(dtmf_enable_remora == 1){ - poll_events_bitmap |= POLLPRI; - /* enable dtmf detection on Sangoma's Remora SLIC chip (A200 ONLY) */ - if((err=sangoma_tdm_enable_rm_dtmf_events(dev_fd, &tdm_api))){ - return 1; - } - } - - if(remora_hook == 1){ - poll_events_bitmap |= POLLPRI; - if((err=sangoma_tdm_enable_rxhook_events(dev_fd, &tdm_api))){ - return 1; - } - } - - if(rbs_events == 1){ - poll_events_bitmap |= POLLPRI; - if((err=sangoma_tdm_enable_rbs_events(dev_fd, &tdm_api, 20))){ - return 1; - } - } - - printf("Device Config RxQ=%i TxQ=%i \n", - sangoma_get_rx_queue_sz(dev_fd,&tdm_api), - sangoma_get_rx_queue_sz(dev_fd,&tdm_api)); - - sangoma_set_rx_queue_sz(dev_fd,&tdm_api,20); - sangoma_set_tx_queue_sz(dev_fd,&tdm_api,30); - - printf("Device Config RxQ=%i TxQ=%i \n", - sangoma_get_rx_queue_sz(dev_fd,&tdm_api), - sangoma_get_tx_queue_sz(dev_fd,&tdm_api)); - - return err; -} - -/*! - \fn int __cdecl main(int argc, char* argv[]) - \brief Main function that starts the sample code - \param argc number of arguments - \param argv argument list -*/ -int __cdecl main(int argc, char* argv[]) -{ - int proceed, i; - - proceed=init_args(argc,argv); - if (proceed != WAN_TRUE){ - usage(argv[0]); - return -1; - } - - /* register Ctrl+C handler - we want a clean termination */ -#if defined(__WINDOWS__) - if (!SetConsoleCtrlHandler(TerminateHandler, TRUE)) { - printf("ERROR : Unable to register terminate handler ( %d ).\nProcess terminated.\n", - GetLastError()); - return -1; - } -#else - signal(SIGHUP,TerminateHandler); - signal(SIGTERM,TerminateHandler); -#endif - - for(i = 0; i < TEST_NUMBER_OF_OBJECTS; i++){ - sangoma_wait_objects[i] = NULL; - } - - poll_events_bitmap = 0; - if(read_enable == 1){ - poll_events_bitmap |= POLLIN; - } - - if(write_enable == 1 && rx2tx == 1){ - /* These two options are mutually exclusive because 'rx2tx' option - * indicates "use Reciever as the timing source for Transmitter". */ - write_enable = 0; - } - - if(write_enable == 1){ - poll_events_bitmap |= POLLOUT; - } - - /* Front End connect/disconnect, and other events, such as DTMF... */ - poll_events_bitmap |= (POLLHUP | POLLPRI); -#if defined(__WINDOWS__) - printf("Enabling Poll Events:\n"); -#ifdef WIN32 - print_poll_event_bitmap(poll_events_bitmap); -<<<<<<< .mine -#endif - -======= -#endif ->>>>>>> .r194 - printf("Connecting to Port/Span: %d, Interface/Chan: %d\n", - wanpipe_port_no, wanpipe_if_no); - - - if(open_sangoma_device()){ - return -1; - } - - printf("********************************\n"); - printf("files_used: 0x%x\n", files_used); - printf("********************************\n"); - if(files_used & RX_FILE_USED){ - pRxFile = fopen( (const char*)&rx_file[0], "wb" ); - if(pRxFile == NULL){ - printf("Can't open Rx file: [%s]!!\n", rx_file); - }else{ - printf("Open Rx file: %s. OK.\n", rx_file); - } - } - - handle_span_chan(1 /* handle a single device */); - - /* returned from main loop, do the cleanup before exiting: */ - cleanup(); - - printf("\nSample application exiting.(press any key)\n"); - _getch(); - return 0; -} diff --git a/api/libsangoma/sample_cpp/.svn/all-wcprops b/api/libsangoma/sample_cpp/.svn/all-wcprops index 66e6130..b5ca372 100644 --- a/api/libsangoma/sample_cpp/.svn/all-wcprops +++ b/api/libsangoma/sample_cpp/.svn/all-wcprops @@ -1,101 +1,101 @@ K 25 svn:wc:ra_dav:version-url -V 45 -/svn/libsangoma/!svn/ver/294/trunk/sample_cpp +V 77 +/svn/libsangoma/!svn/ver/333/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp END sangoma_port.h K 25 svn:wc:ra_dav:version-url -V 60 -/svn/libsangoma/!svn/ver/278/trunk/sample_cpp/sangoma_port.h +V 92 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sangoma_port.h END sample.vcproj K 25 svn:wc:ra_dav:version-url -V 59 -/svn/libsangoma/!svn/ver/248/trunk/sample_cpp/sample.vcproj +V 91 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sample.vcproj END sources K 25 svn:wc:ra_dav:version-url -V 53 -/svn/libsangoma/!svn/ver/291/trunk/sample_cpp/sources +V 85 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sources END sangoma_interface.cpp K 25 svn:wc:ra_dav:version-url -V 67 -/svn/libsangoma/!svn/ver/294/trunk/sample_cpp/sangoma_interface.cpp +V 99 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sangoma_interface.cpp END sample_linux_compat.h K 25 svn:wc:ra_dav:version-url -V 67 -/svn/libsangoma/!svn/ver/109/trunk/sample_cpp/sample_linux_compat.h +V 99 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sample_linux_compat.h END sangoma_interface.h K 25 svn:wc:ra_dav:version-url -V 65 -/svn/libsangoma/!svn/ver/278/trunk/sample_cpp/sangoma_interface.h +V 97 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sangoma_interface.h END sangoma_port_configurator.cpp K 25 svn:wc:ra_dav:version-url -V 75 -/svn/libsangoma/!svn/ver/279/trunk/sample_cpp/sangoma_port_configurator.cpp +V 107 +/svn/libsangoma/!svn/ver/333/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sangoma_port_configurator.cpp END compile.bat K 25 svn:wc:ra_dav:version-url -V 57 -/svn/libsangoma/!svn/ver/120/trunk/sample_cpp/compile.bat +V 89 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/compile.bat END sangoma_cthread.cpp K 25 svn:wc:ra_dav:version-url -V 65 -/svn/libsangoma/!svn/ver/133/trunk/sample_cpp/sangoma_cthread.cpp +V 97 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sangoma_cthread.cpp END sangoma_port_configurator.h K 25 svn:wc:ra_dav:version-url -V 73 -/svn/libsangoma/!svn/ver/275/trunk/sample_cpp/sangoma_port_configurator.h +V 105 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sangoma_port_configurator.h END sample.cpp K 25 svn:wc:ra_dav:version-url -V 56 -/svn/libsangoma/!svn/ver/288/trunk/sample_cpp/sample.cpp +V 88 +/svn/libsangoma/!svn/ver/332/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sample.cpp END sangoma_cthread.h K 25 svn:wc:ra_dav:version-url -V 63 -/svn/libsangoma/!svn/ver/133/trunk/sample_cpp/sangoma_cthread.h +V 95 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sangoma_cthread.h END sample.h K 25 svn:wc:ra_dav:version-url -V 54 -/svn/libsangoma/!svn/ver/288/trunk/sample_cpp/sample.h +V 86 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sample.h END sangoma_port.cpp K 25 svn:wc:ra_dav:version-url -V 62 -/svn/libsangoma/!svn/ver/286/trunk/sample_cpp/sangoma_port.cpp +V 94 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sangoma_port.cpp END Makefile.Linux K 25 svn:wc:ra_dav:version-url -V 60 -/svn/libsangoma/!svn/ver/105/trunk/sample_cpp/Makefile.Linux +V 92 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/Makefile.Linux END sample.sln K 25 svn:wc:ra_dav:version-url -V 56 -/svn/libsangoma/!svn/ver/235/trunk/sample_cpp/sample.sln +V 88 +/svn/libsangoma/!svn/ver/331/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp/sample.sln END diff --git a/api/libsangoma/sample_cpp/.svn/entries b/api/libsangoma/sample_cpp/.svn/entries index a060d28..c91ef97 100644 --- a/api/libsangoma/sample_cpp/.svn/entries +++ b/api/libsangoma/sample_cpp/.svn/entries @@ -1,14 +1,14 @@ 8 dir -322 -https://www.sangomapbx.com/svn/libsangoma/trunk/sample_cpp -https://www.sangomapbx.com/svn/libsangoma +342 +http://192.168.1.168/svn/libsangoma/branches/unified_rlease_Win6.0_Lnx3.5/sample_cpp +http://192.168.1.168/svn/libsangoma -2010-07-07T16:06:03.386686Z -294 +2011-01-19T21:27:38.629735Z +333 davidr has-props @@ -32,44 +32,44 @@ file -2010-05-18T21:27:49.000000Z +2011-01-28T17:40:50.000000Z f3310f38d215e71ef19ee59d33c0c458 2010-05-14T20:03:16.936101Z 278 davidr +sources +file + + + + +2011-01-28T17:40:50.000000Z +1b8b6c522d904f33d986cb1c667d37e6 +2010-06-16T16:45:22.358768Z +291 +davidr + sample.vcproj file -2010-02-10T23:05:43.000000Z -3c2655474848e163999341285dc2412e -2010-01-22T21:30:47.609627Z -248 +2011-01-28T17:40:50.000000Z +c98a585e5023eb0b363e445b0931bd1a +2010-11-23T23:17:58.432692Z +324 davidr has-props -sources -file - - - - -2010-06-17T04:11:26.000000Z -1b8b6c522d904f33d986cb1c667d37e6 -2010-06-16T16:45:22.358768Z -291 -davidr - sangoma_interface.cpp file -2010-08-12T23:16:44.000000Z +2011-01-28T17:40:50.000000Z 4a1150aa704318ece5224e3411b6847a 2010-07-07T16:06:03.386686Z 294 @@ -81,7 +81,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 46ae76a473c75513d3b253bd96524f17 2009-03-04T17:25:18.587182Z 109 @@ -93,7 +93,7 @@ file -2010-05-18T21:27:49.000000Z +2011-01-28T17:40:50.000000Z 6bd775531d9264b8c89af6956f133ca9 2010-05-14T20:03:16.936101Z 278 @@ -105,10 +105,10 @@ file -2010-06-04T16:18:07.000000Z -7b4b0e298f916258cbd2ef3e6c5b2e74 -2010-05-28T23:22:41.955986Z -279 +2011-01-28T17:40:50.000000Z +37b915820d8b328ce51cb310fba82438 +2011-01-19T21:27:38.629735Z +333 davidr compile.bat @@ -117,7 +117,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 6e4285eeda3d888a8e689516b028327a 2009-03-06T22:48:37.915855Z 120 @@ -129,7 +129,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z f6d802e64eba57d4a2eed52a86ed6749 2009-03-31T20:38:44.891800Z 133 @@ -141,11 +141,11 @@ file -2010-05-18T21:27:49.000000Z -468db72af14d384b25eb30ec91ca2841 -2010-05-03T20:57:12.906314Z -275 -jpatel +2011-01-28T17:40:50.000000Z +def89abe5019414c1e5afebec7a3a000 +2010-12-17T23:39:12.255685Z +327 +davidr sample.cpp file @@ -153,10 +153,10 @@ file -2010-06-15T17:24:48.000000Z -b7c6eb4619987ebdd5f00ef8fb3f1a53 -2010-06-14T19:08:36.321535Z -288 +2011-01-28T17:40:50.000000Z +3d714ef42f58bdbde2a553585b91dde7 +2011-01-14T00:17:27.006384Z +332 davidr sangoma_cthread.h @@ -165,7 +165,7 @@ file -2009-08-25T20:44:41.000000Z +2011-01-28T17:40:50.000000Z 0f69bcec99210ad26c7391e53a88255e 2009-03-31T20:38:44.891800Z 133 @@ -177,10 +177,10 @@ file -2010-06-15T17:24:48.000000Z -10d072dd323da3f8db2b123f08751ce2 -2010-06-14T19:08:36.321535Z -288 +2011-01-28T17:40:50.000000Z +2b33d6358d66892fbf792b2618591317 +2010-12-17T23:39:12.255685Z +327 davidr sangoma_port.cpp @@ -189,7 +189,7 @@ file -2010-06-14T16:38:14.000000Z +2011-01-28T17:40:50.000000Z 9d6b5a506886857fc50242ed6514f07d 2010-06-10T21:10:51.668331Z 286 @@ -201,7 +201,7 @@ file -2010-09-13T22:45:16.000000Z +2011-01-28T17:40:50.000000Z 93f1e9c6d533615e6b2dfc7aba2fd0a2 2009-02-27T23:27:29.300080Z 105 @@ -213,7 +213,7 @@ file -2009-12-04T21:21:35.000000Z +2011-01-28T17:40:50.000000Z 2f4e833b9fd409d8f1c07dded92a32de 2009-12-01T20:38:57.462038Z 235 diff --git a/api/libsangoma/sample_cpp/.svn/text-base/sample.cpp.svn-base b/api/libsangoma/sample_cpp/.svn/text-base/sample.cpp.svn-base index 7570130..63e910f 100644 --- a/api/libsangoma/sample_cpp/.svn/text-base/sample.cpp.svn-base +++ b/api/libsangoma/sample_cpp/.svn/text-base/sample.cpp.svn-base @@ -314,12 +314,9 @@ static void got_tdm_api_event(void *sang_if_ptr, void *event_data) break; case WP_API_EVENT_RBS: - DBG_MAIN("RBS Event: New bits: 0x%X!\n", wp_tdm_api_event->wp_api_event_rbs_bits); - DBG_MAIN( "RX RBS: A:%1d B:%1d C:%1d D:%1d\n", - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_A) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_B) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_C) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_D) ? 1 : 0); + DBG_MAIN("RBS Event: New bits: 0x%X!\n", wp_tdm_api_event->wp_api_event_rbs_bits); + DBG_MAIN("RX RBS/CAS: "); + wp_print_rbs_cas_bits(wp_tdm_api_event->wp_api_event_rbs_bits); break; case WP_API_EVENT_LINK_STATUS: @@ -922,10 +919,21 @@ int __cdecl main(int argc, char* argv[]) INFO_MAIN("Type Channel number and press :\n"); rbs_management_struct.channel = get_user_decimal_number();//channels (Time Slots). Valid values: 1 to 24. - if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 24){ - INFO_MAIN("Invalid RBS Channel number!\n"); - break; + + if(WAN_MEDIA_T1 == sang_if->get_adapter_type()){ + if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 24){ + INFO_MAIN("Invalid T1 RBS Channel number!\n"); + break; + } } + + if(WAN_MEDIA_E1 == sang_if->get_adapter_type()){ + if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 31){ + INFO_MAIN("Invalid E1 CAS Channel number!\n"); + break; + } + } + sang_if->get_rbs(&rbs_management_struct); } break; @@ -941,15 +949,27 @@ int __cdecl main(int argc, char* argv[]) case WAN_MEDIA_E1: { static rbs_management_t rbs_management_struct = {0,0}; + int chan_no; sang_if->enable_rbs_monitoring(); INFO_MAIN("Type Channel number and press :\n"); - rbs_management_struct.channel = get_user_decimal_number();//channels (Time Slots). Valid values: 1 to 24. - if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 24){ - INFO_MAIN("Invalid RBS Channel number!\n"); - break; + rbs_management_struct.channel = chan_no = get_user_decimal_number();//channels (Time Slots). Valid values: T1: 1 to 24; E1: 1-15 and 17-31. + + if(WAN_MEDIA_T1 == sang_if->get_adapter_type()){ + if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 24){ + INFO_MAIN("Invalid T1 RBS Channel number!\n"); + break; + } } + + if(WAN_MEDIA_E1 == sang_if->get_adapter_type()){ + if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 31){ + INFO_MAIN("Invalid E1 CAS Channel number!\n"); + break; + } + } + /* bitmap - set as needed: WAN_RBS_SIG_A | WAN_RBS_SIG_B | WAN_RBS_SIG_C | WAN_RBS_SIG_D; In this example make bits A and B to change each time, @@ -961,6 +981,51 @@ int __cdecl main(int argc, char* argv[]) rbs_management_struct.ABCD_bits = WAN_RBS_SIG_A; } sang_if->set_rbs(&rbs_management_struct); + +#if 0 +#define RBS_CAS_TX_AND_WAIT(chan, abcd) \ +{ \ + rbs_management_struct.channel = chan; \ + rbs_management_struct.ABCD_bits = abcd; \ + INFO_MAIN("Press any key to transmit bits:"); \ + wp_print_rbs_cas_bits(abcd); \ + _getch(); \ + sang_if->set_rbs(&rbs_management_struct); \ +} + + //for ESF lines test all all combinations of 4 bits + RBS_CAS_TX_AND_WAIT(chan_no, 0x00); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_B); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_B); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_C); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_C); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_B | WAN_RBS_SIG_C); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_B | WAN_RBS_SIG_C); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_B | WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_B | WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_C | WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_C | WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_B | WAN_RBS_SIG_C | WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_B | WAN_RBS_SIG_C | WAN_RBS_SIG_D); +#endif } default: INFO_MAIN("Command invalid for card type\n"); @@ -1141,7 +1206,7 @@ user_retry_ring_e_d: default: sang_if->fxo_go_on_hook(); } - }else if(sang_if->get_sub_media()==MOD_TYPE_FXS ) { + }else if(sang_if->get_sub_media() == MOD_TYPE_FXS) { INFO_MAIN("Press 'f' for forward, 'r' to for reverse.\n"); INFO_MAIN("\n"); switch(tolower(_getch())) @@ -1153,10 +1218,42 @@ user_retry_ring_e_d: sang_if->tdm_set_rm_polarity(1); break; default: - //toggle it - sang_if->tdm_set_rm_polarity(1); - sang_if->tdm_set_rm_polarity(0); - } + //toggle polarity + int polarity_wait, two_second_ring_repetion_counter; + + INFO_MAIN("Type Polarity Reverse/Forward delay and press :\n"); + polarity_wait = get_user_decimal_number(); + /* polarity_wait of 30 ms will ring Analog phone or FXO + * polarity_wait of 400 ms will cause Polarity reversal event on FXO */ + INFO_MAIN("User specified Polarity Reverse/Forward delay: %d. Press to continue.\n", polarity_wait); + _getch(); + + two_second_ring_repetion_counter = 2000 / (polarity_wait * 2); + INFO_MAIN("two_second_ring_repetion_counter: %d. Press to continue.\n", two_second_ring_repetion_counter); + _getch(); + + for (int ii = 0; ii < two_second_ring_repetion_counter; ii++) { + INFO_MAIN("Reversing polarity %d...\n", ii); + sang_if->tdm_set_rm_polarity(1); + sangoma_msleep(polarity_wait); + INFO_MAIN("Forwarding polarity %d...\n", ii); + sang_if->tdm_set_rm_polarity(0); + sangoma_msleep(polarity_wait); + } + + //sleep 4 seconds between the rings + INFO_MAIN("4 seconds between the rings...\n"); + sangoma_msleep(4000); + + for (int ii = 0; ii < two_second_ring_repetion_counter; ii++) { + INFO_MAIN("Reversing polarity %d...\n", ii); + sang_if->tdm_set_rm_polarity(1); + sangoma_msleep(polarity_wait); + INFO_MAIN("Forwarding polarity %d...\n", ii); + sang_if->tdm_set_rm_polarity(0); + sangoma_msleep(polarity_wait); + }//for() + }//switch() } break; case 'k': @@ -1174,9 +1271,11 @@ user_retry_ring_e_d: } }else if(sang_if->get_adapter_type()== WAN_MEDIA_FXOFXS) { if(sang_if->get_sub_media()==MOD_TYPE_FXS) { + printf("calling tdm_txsig_kewl()...\n"); sang_if->tdm_txsig_kewl(); sangoma_msleep(5000); //to restore line current after txsig kewl + printf("restoring line current after txsig kewl...\n"); sang_if->tdm_txsig_offhook(); } } @@ -1289,7 +1388,11 @@ user_retry_ring_e_d: static int set_port_configuration() { int rc = 0, user_selection; - int is_te1_card = 0, is_analog_card = 0; + /* On hybrid cards such as B700, ports can be of different types - + * some are Analog some Digital. + * On non-hybrid cards such as A108, all ports are of the same + * type - T1/E1. */ + int is_te1_port = 0, is_analog_port = 0, is_bri_port = 0, is_serial_port = 0; hardware_info_t hardware_info; port_cfg_t port_cfg; @@ -1305,7 +1408,7 @@ static int set_port_configuration() if(rc == SANG_STATUS_SUCCESS){ - INFO_MAIN("card_model : %s (0x%08X)\n", + INFO_MAIN("card_model : %s (%d)\n", SDLA_ADPTR_NAME(hardware_info.card_model), hardware_info.card_model); INFO_MAIN("firmware_version\t: 0x%02X\n", hardware_info.firmware_version); INFO_MAIN("pci_bus_number\t\t: %d\n", hardware_info.pci_bus_number); @@ -1319,6 +1422,7 @@ static int set_port_configuration() return 3; } + // very important to zero out the configuration structure memset(&port_cfg, 0x00, sizeof(port_cfg_t)); switch(hardware_info.card_model) @@ -1327,18 +1431,45 @@ static int set_port_configuration() case A101_ADPTR_2TE1: case A104_ADPTR_4TE1: case A108_ADPTR_8TE1: - is_te1_card = 1; + is_te1_port = 1; + INFO_MAIN("T1/E1 Port on non-Hybrid Card (A10[1/2/4/8]).\n"); break; case A200_ADPTR_ANALOG: case A400_ADPTR_ANALOG: - is_analog_card = 1; + case AFT_ADPTR_A600: //B600 + is_analog_port = 1; + INFO_MAIN("Analog Port on non-Hybrid Card (A200/A400).\n"); + break; + case AFT_ADPTR_ISDN: + is_bri_port = 1; + INFO_MAIN("BRI Port on non-Hybrid Card (A500).\n"); break; case AFT_ADPTR_FLEXBRI: //B700, a hybrid card - may have both ISDN BRI and Analog ports + if (hardware_info.bri_modtype == MOD_TYPE_NT || + hardware_info.bri_modtype == MOD_TYPE_TE) { + is_bri_port = 1; + INFO_MAIN("BRI Port on Hybrid Card.\n"); + } else { + is_analog_port = 1; + INFO_MAIN("Analog Port on Hybrid Card.\n"); + } + break; + case AFT_ADPTR_2SERIAL_V35X21: /* AFT-A142 2 Port V.35/X.21 board */ + case AFT_ADPTR_4SERIAL_V35X21: /* AFT-A144 4 Port V.35/X.21 board */ + case AFT_ADPTR_2SERIAL_RS232: /* AFT-A142 2 Port RS232 board */ + case AFT_ADPTR_4SERIAL_RS232: /* AFT-A144 4 Port RS232 board */ + is_serial_port = 1; + INFO_MAIN("Serial Port on non-Hybrid Card (A14[2/4]).\n"); + break; + default: + INFO_MAIN("Warning: configuration of card model 0x%08X can not be changed!\n", + hardware_info.card_model); break; } - if(is_te1_card){ + + if (is_te1_port) { INFO_MAIN("\n"); INFO_MAIN("Press 't' to set T1 configration.\n"); INFO_MAIN("Press 'e' to set E1 configration.\n"); @@ -1361,17 +1492,20 @@ try_again: default: INFO_MAIN("Invalid command %c.\n",user_selection); goto try_again; - break; - }//switch(user_selection) - }//if(is_te1_card) - if(is_analog_card){ + }//switch(user_selection) + }//if(is_te1_port) + + if (is_analog_port) { //read current configuration: if(sng_port_cfg_obj->get_configration(&port_cfg)){ rc = 1; }else{ //print the current configuration: sng_port_cfg_obj->print_port_cfg_structure(&port_cfg); +#if 0 + sng_port_cfg_obj->initialize_interface_mtu_mru(&port_cfg, 16, 16); +#endif #if 0 //as an EXAMPLE, enable Loop Current Monitoring for Analog FXO: rc=sng_port_cfg_obj->control_analog_rm_lcm(&port_cfg, 1); @@ -1381,9 +1515,17 @@ try_again: rc=sng_port_cfg_obj->set_analog_opermode(&port_cfg, "TBR21"); #endif } - }//if(is_analog_card) - - if(!is_te1_card && !is_analog_card){ + }//if(is_analog_port) + + if (is_bri_port) { + rc=sng_port_cfg_obj->initialize_bri_tdm_span_voice_api_configration_structure(&port_cfg,&hardware_info,program_settings.wanpipe_number); + } + + if (is_serial_port) { + rc=sng_port_cfg_obj->initialize_serial_api_configration_structure(&port_cfg,&hardware_info,program_settings.wanpipe_number); + } + + if(!is_te1_port && !is_analog_port && !is_bri_port && !is_serial_port){ INFO_MAIN("Unsupported Card %d\n", hardware_info.card_model); rc = 1; } diff --git a/api/libsangoma/sample_cpp/.svn/text-base/sample.h.svn-base b/api/libsangoma/sample_cpp/.svn/text-base/sample.h.svn-base index 80bd6c2..925e88e 100644 --- a/api/libsangoma/sample_cpp/.svn/text-base/sample.h.svn-base +++ b/api/libsangoma/sample_cpp/.svn/text-base/sample.h.svn-base @@ -64,6 +64,15 @@ typedef struct{ }callback_functions_t; +static void wp_print_rbs_cas_bits(unsigned int abcd) +{ + printf("A:%1d B:%1d C:%1d D:%1d\n", + (abcd & WAN_RBS_SIG_A) ? 1 : 0, + (abcd & WAN_RBS_SIG_B) ? 1 : 0, + (abcd & WAN_RBS_SIG_C) ? 1 : 0, + (abcd & WAN_RBS_SIG_D) ? 1 : 0); +} + #if defined (__WINDOWS__) static void DecodeLastError(LPSTR lpszFunction) { diff --git a/api/libsangoma/sample_cpp/.svn/text-base/sample.vcproj.svn-base b/api/libsangoma/sample_cpp/.svn/text-base/sample.vcproj.svn-base index 37e16da..bffe56e 100644 --- a/api/libsangoma/sample_cpp/.svn/text-base/sample.vcproj.svn-base +++ b/api/libsangoma/sample_cpp/.svn/text-base/sample.vcproj.svn-base @@ -46,7 +46,7 @@ cfg.te_cfg; wan_tdmv_conf_t *tdmv_cfg = &wandev_conf->tdmv_conf; wanif_conf_t *wanif_cfg = &port_cfg->if_cfg[0]; + wan_xilinx_conf_t *aft_cfg = &wandev_conf->u.aft; // T1 parameters FE_MEDIA(sdla_fe_cfg) = WAN_MEDIA_T1; @@ -385,6 +388,7 @@ int sangoma_port_configurator::initialize_t1_tdm_span_voice_api_configration_str FE_CLK(sdla_fe_cfg) = WAN_MASTER_CLK; #endif + // API parameters port_cfg->num_of_ifs = 1; wandev_conf->config_id = WANCONFIG_AFT_TE1; @@ -395,6 +399,12 @@ int sangoma_port_configurator::initialize_t1_tdm_span_voice_api_configration_str wandev_conf->pci_bus_no = hardware_info->pci_bus_number; wandev_conf->card_type = WANOPT_AFT; //m_DeviceInfoData.card_model; +#if SPAN_TX_ONLY_IRQ + aft_cfg->span_tx_only_irq = 1; +#else + aft_cfg->span_tx_only_irq = 0; +#endif + wanif_cfg->magic = ROUTER_MAGIC; wanif_cfg->active_ch = 0x00FFFFFF;//channels 1-24 (starting from bit zero) sprintf(wanif_cfg->usedby,"TDM_SPAN_VOICE_API"); @@ -429,15 +439,16 @@ int sangoma_port_configurator::initialize_t1_tdm_span_voice_api_configration_str return 0; } - +#define BUILD_FOR_PRI 1 int sangoma_port_configurator::initialize_e1_tdm_span_voice_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span) { wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; wan_tdmv_conf_t *tdmv_cfg = &wandev_conf->tdmv_conf; wanif_conf_t *wanif_cfg = &port_cfg->if_cfg[0]; + wan_xilinx_conf_t *aft_cfg = &wandev_conf->u.aft; - // Load media parameters in the registry + // E1 parameters FE_MEDIA(sdla_fe_cfg) = WAN_MEDIA_E1; FE_LCODE(sdla_fe_cfg) = WAN_LCODE_HDB3; FE_FRAME(sdla_fe_cfg) = WAN_FR_CRC4; @@ -458,6 +469,7 @@ int sangoma_port_configurator::initialize_e1_tdm_span_voice_api_configration_str FE_CLK(sdla_fe_cfg) = WAN_MASTER_CLK; #endif + // API parameters port_cfg->num_of_ifs = 1; wandev_conf->config_id = WANCONFIG_AFT_TE1; @@ -468,8 +480,21 @@ int sangoma_port_configurator::initialize_e1_tdm_span_voice_api_configration_str wandev_conf->pci_bus_no = hardware_info->pci_bus_number; wandev_conf->card_type = WANOPT_AFT; //m_DeviceInfoData.card_model; +#if SPAN_TX_ONLY_IRQ + aft_cfg->span_tx_only_irq = 1; +#else + aft_cfg->span_tx_only_irq = 0; +#endif + wanif_cfg->magic = ROUTER_MAGIC; +#if BUILD_FOR_PRI + //PRI Signaling on chan 16 wanif_cfg->active_ch = 0x7FFFFFFF;// channels 1-31 (starting from bit zero) +#else + //CAS + wanif_cfg->active_ch = 0xFFFF7FFF;// channels 1-15.17-31 -> Active Ch Map :0xFFFEFFFE (in message log) +#endif + sprintf(wanif_cfg->usedby,"TDM_SPAN_VOICE_API"); wanif_cfg->u.aft.idle_flag=0xFF; wanif_cfg->mtu = 160; @@ -486,6 +511,7 @@ int sangoma_port_configurator::initialize_e1_tdm_span_voice_api_configration_str tdmv_cfg->span_no = (unsigned char)span; +#if BUILD_FOR_PRI /* DCHAN Configuration */ switch(FE_MEDIA(sdla_fe_cfg)) { @@ -496,11 +522,141 @@ int sangoma_port_configurator::initialize_e1_tdm_span_voice_api_configration_str printf("%s(): Error: invalid media type!\n", __FUNCTION__); return 1; } - +#endif + printf("E1: tdmv_cfg->dchan bitmap: 0x%X\n", tdmv_cfg->dchan); return 0; } +int sangoma_port_configurator::initialize_bri_tdm_span_voice_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span) +{ + wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; + sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; + wan_tdmv_conf_t *tdmv_cfg = &wandev_conf->tdmv_conf; + wanif_conf_t *wanif_cfg = &port_cfg->if_cfg[0]; + + // BRI parameters + FE_MEDIA(sdla_fe_cfg) = WAN_MEDIA_BRI; + FE_LINENO(sdla_fe_cfg) = hardware_info->port_number; + FE_TDMV_LAW(sdla_fe_cfg) = WAN_TDMV_ALAW; + FE_NETWORK_SYNC(sdla_fe_cfg) = 0; + + FE_REFCLK(sdla_fe_cfg) = 0; + +#if 0 + /* + * TE Module: WAN_NORMAL_CLK is the default. + * Clock recovered from the line will be used by this module and + * will be routed to ALL other BRI modules on the card which + * become "connected" after this module. That means at any + * time there is a single BRI line where the clock is recovered from + * and this clock is used for all other BRI lines. + * + * NT Module: always runs on internal oscillator clock. + */ + BRI_FE_CLK((*sdla_fe_cfg)) = WAN_NORMAL_CLK; +#else + /* + * TE Module: if WAN_MASTER_CLK, clock recovered from + * the line will be NOT be used by this module and + * will NOT be routed to ALL other BRI modules on the card. + * Instead, the module will use clock from internal oscillator. + * + * NT Module: WAN_MASTER_CLK will be ignored because NT should not + * recover clock from the line, it always runs on clock from + * internal oscillator. + */ + BRI_FE_CLK((*sdla_fe_cfg)) = WAN_MASTER_CLK; +#endif + + port_cfg->num_of_ifs = 1; + + wandev_conf->config_id = WANCONFIG_AFT_ISDN_BRI; + wandev_conf->magic = ROUTER_MAGIC; + + wandev_conf->mtu = 2048; + wandev_conf->PCI_slot_no = hardware_info->pci_slot_number; + wandev_conf->pci_bus_no = hardware_info->pci_bus_number; + wandev_conf->card_type = WANOPT_AFT; //m_DeviceInfoData.card_model; + + wanif_cfg->magic = ROUTER_MAGIC; + wanif_cfg->active_ch = 0xFFFFFFFF; + sprintf(wanif_cfg->usedby,"TDM_SPAN_VOICE_API"); + wanif_cfg->u.aft.idle_flag=0xFF; + wanif_cfg->mtu = 160; + wanif_cfg->u.aft.mtu = 160; + wanif_cfg->u.aft.mru = 160; + sprintf(wanif_cfg->name,"w%dg1",span); + + if (hardware_info->max_hw_ec_chans) { + /* wan_hwec_conf_t - HWEC configuration for Port */ + /*wandev_conf->hwec_conf.dtmf = 1;*/ + /* wan_hwec_if_conf_t - HWEC configuration for Interface */ + wanif_cfg->hwec.enable = 1; + } + + tdmv_cfg->span_no = (unsigned char)span; + + /* There is no DCHAN Configuration on BRI because it is + * configured automatically by the driver. */ + + return 0; +} + +int sangoma_port_configurator::initialize_serial_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span) +{ + wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; + sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; + wan_tdmv_conf_t *tdmv_cfg = &wandev_conf->tdmv_conf; + wanif_conf_t *wanif_cfg = &port_cfg->if_cfg[0]; + + // Serial parameters + FE_MEDIA(sdla_fe_cfg) = WAN_MEDIA_SERIAL; + FE_LINENO(sdla_fe_cfg) = hardware_info->port_number; + + wandev_conf->line_coding = WANOPT_NRZ; + /* WANOPT_V35/WANOPT_X21 are valid for card models: + * AFT_ADPTR_2SERIAL_V35X21 and AFT_ADPTR_4SERIAL_V35X21. + * WANOPT_RS232 valid for card models: + * AFT_ADPTR_2SERIAL_RS232 and AFT_ADPTR_4SERIAL_RS232. + */ + wandev_conf->electrical_interface = WANOPT_V35; +#if 1 + wandev_conf->clocking = WANOPT_EXTERNAL; + wandev_conf->bps = 0; +#else + wandev_conf->clocking = WANOPT_INTERNAL; + wandev_conf->bps = 56000; +#endif + + wandev_conf->connection = WANOPT_PERMANENT;//or WANOPT_SWITCHED + wandev_conf->line_idle = WANOPT_IDLE_FLAG; + + // API parameters + port_cfg->num_of_ifs = 1; + + wandev_conf->config_id = WANCONFIG_AFT_SERIAL; + wandev_conf->magic = ROUTER_MAGIC; + + wandev_conf->mtu = 2048; + wandev_conf->PCI_slot_no = hardware_info->pci_slot_number; + wandev_conf->pci_bus_no = hardware_info->pci_bus_number; + wandev_conf->card_type = WANOPT_AFT; //m_DeviceInfoData.card_model; + + wanif_cfg->magic = ROUTER_MAGIC; + wanif_cfg->active_ch = 0xFFFFFFFF; + sprintf(wanif_cfg->usedby,"API"); + wanif_cfg->u.aft.idle_flag=0xFF; + wanif_cfg->mtu = 1600; + wanif_cfg->u.aft.mtu = 1600; + wanif_cfg->u.aft.mru = 1600; + sprintf(wanif_cfg->name,"w%dg1",span); + + wanif_cfg->hdlc_streaming = WANOPT_YES; + + return 0; +} + int sangoma_port_configurator::write_configration_on_persistent_storage(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span) { //all the work is done by libsangoma @@ -511,17 +667,20 @@ int sangoma_port_configurator::control_analog_rm_lcm(port_cfg_t *port_cfg, int c { wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; - if(wandev_conf->card_type == WANOPT_AFT_ANALOG){ //Only valid for Analog cards - if(control_val == 1){ + if (wandev_conf->card_type == WANOPT_AFT_ANALOG) { //Only valid for Analog cards + if (control_val == 1) { + INFO_CFG("%s(): enabling FXO Loop Current Monitoring.\n", __FUNCTION__); sdla_fe_cfg->cfg.remora.rm_lcm = 1; - }else if(control_val == 0){ + } else if(control_val == 0) { + INFO_CFG("%s(): disabling FXO Loop Current Monitoring.\n", __FUNCTION__); sdla_fe_cfg->cfg.remora.rm_lcm = 0; - }else{ - printf("%s(): Error: invalid parameter!\n", __FUNCTION__); + } else { + ERR_CFG("invalid parameter!\n"); return -EINVAL; } - } else{ - return -EINVAL; + } else { + ERR_CFG("invalid card type: %d!\n", wandev_conf->card_type); + return -EINVAL; } return 0; } @@ -604,3 +763,14 @@ int sangoma_port_configurator::set_analog_opermode(port_cfg_t *port_cfg, char *o } return 0; } + +void sangoma_port_configurator::initialize_interface_mtu_mru(port_cfg_t *port_cfg, unsigned int mtu, unsigned int mru) +{ + wanif_conf_t *wanif_cfg = &port_cfg->if_cfg[0]; + + INFO_CFG("%s(): new MTU: %d, new MRU: %d.\n", __FUNCTION__, mtu, mru); + + wanif_cfg->mtu = mtu; + wanif_cfg->u.aft.mtu = mtu; + wanif_cfg->u.aft.mru = mru; +} \ No newline at end of file diff --git a/api/libsangoma/sample_cpp/.svn/text-base/sangoma_port_configurator.h.svn-base b/api/libsangoma/sample_cpp/.svn/text-base/sangoma_port_configurator.h.svn-base index 3d00249..136397c 100644 --- a/api/libsangoma/sample_cpp/.svn/text-base/sangoma_port_configurator.h.svn-base +++ b/api/libsangoma/sample_cpp/.svn/text-base/sangoma_port_configurator.h.svn-base @@ -104,8 +104,12 @@ public: int initialize_t1_tdm_span_voice_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span); int initialize_e1_tdm_span_voice_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span); + int initialize_bri_tdm_span_voice_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span); + int initialize_serial_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span); int write_configration_on_persistent_storage(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span); + + void initialize_interface_mtu_mru(port_cfg_t *port_cfg, unsigned int mtu, unsigned int mru); }; #endif // !defined(_SANGOMA_PORT_CONFIGURATOR_H) diff --git a/api/libsangoma/sample_cpp/.svn/tmp/tempfile.2.tmp b/api/libsangoma/sample_cpp/.svn/tmp/tempfile.2.tmp deleted file mode 100644 index 84149f3..0000000 --- a/api/libsangoma/sample_cpp/.svn/tmp/tempfile.2.tmp +++ /dev/null @@ -1,1448 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// sangoma_interface.cpp: interface for Sangoma API driver. -// -// Author : David Rokhvarg -////////////////////////////////////////////////////////////////////// - -#include "sangoma_interface.h" - -#define DBG_IFACE if(1)printf -#define INFO_IFACE if(1)printf -#define ERR_IFACE if(1)printf - -#define IFACE_FUNC() if(1)printf("%s():line:%d\n", __FUNCTION__, __LINE__) - -#define DO_COMMAND(wan_udp) DoManagementCommand(sangoma_wait_obj.fd, &wan_udp); - -extern wp_program_settings_t program_settings; - -sangoma_interface::sangoma_interface(int wanpipe_number, int interface_number) -{ - DBG_IFACE( "sangoma_interface::sangoma_interface()\n"); - - memset(device_name, 0x00, DEV_NAME_LEN); - - WanpipeNumber = wanpipe_number; - InterfaceNumber = interface_number; - - //Form the Interface Name from Wanpipe Number and Interface Index (i.e. wanpipe1_if1). - //(This Interface Name can be used for debugging.) - _snprintf(device_name, DEV_NAME_LEN, WP_INTERFACE_NAME_FORM, wanpipe_number, interface_number); - - INFO_IFACE("1.Using Device Name: %s\n", device_name); - - ////////////////////////////////////////////////////////////////// - terminate_tx_rx_threads = 0; - is_rbs_monitoring_enabled = 0; - - memset(&tdm_api, 0, sizeof(tdm_api)); - - ////////////////////////////////////////////////////////////////// - //receive stuff - rx_frames_count = 0; - rx_bytes_count = 0; - //for counting frames with CRC/Abort errors - bad_rx_frames_count = 0; - - ////////////////////////////////////////////////////////////////// - //transmit stuff - tx_bytes_count = 0; - tx_frames_count = 0; - tx_test_byte = 0; - - ////////////////////////////////////////////////////////////////// - //IOCTL management structures and variables - protocol_cb_size = sizeof(wan_mgmt_t)+sizeof(wan_cmd_t)+1; - wan_protocol = 0; - adapter_type = 0; - -#if USE_STELEPHONY_API - stelObj = NULL; -#endif - generate_bit_rev_table(); - -} - -sangoma_interface::~sangoma_interface() -{ - DBG_IFACE( "sangoma_interface::~sangoma_interface()\n"); - cleanup(); -} - -int sangoma_interface::init(callback_functions_t *callback_functions_ptr) -{ -#if defined(__WINDOWS__) && !defined(__FUNCTION__) -const char * __FUNCTION__ = "sangoma_interface::init"; -#endif - - DBG_IFACE("sangoma_interface::init()\n"); - - memcpy(&callback_functions, callback_functions_ptr, sizeof(callback_functions_t)); - - //////////////////////////////////////////////////////////////////////////// - //open handle for reading and writing data, for events reception and other commands - sng_fd_t tmp_dev_fd = open_api_device(); - if (tmp_dev_fd == INVALID_HANDLE_VALUE){ - ERR_IFACE( "Unable to open %s for Rx/Tx!\n", device_name); - return 1; - } - - if(sangoma_init_wait_obj(&sangoma_wait_obj, tmp_dev_fd, WanpipeNumber, InterfaceNumber, POLLIN | POLLPRI, SANGOMA_WAIT_OBJ)){ - ERR_IFACE("Failed to initialize 'sangoma_wait_object' for %s\n", device_name); - return 1; - } - - //////////////////////////////////////////////////////////////////////////// - //get current protocol - if(get_wan_config() == WAN_FALSE){ - ERR_IFACE( "Failed to get current protocol!\n"); - return 1; - } - - //////////////////////////////////////////////////////////////////////////// - //get Front End Type (T1/E1/Analog...) - if (get_fe_type(&adapter_type) == WAN_FALSE){ - ERR_IFACE( "Failed to get Front End Type!\n"); - return 1; - } - - //////////////////////////////////////////////////////////////////////////// - //may need interface configuration, so get it now - if(get_interface_configuration(&wanif_conf_struct)){ - ERR_IFACE( "Failed to get Interface Configuration!\n"); - return 1; - } - - //////////////////////////////////////////////////////////////////////////// -#if USE_STELEPHONY_API - //////////////////////////////////////////////////////////////////////////// - //Sangoma Telephony API (stelephony.dll) provides the following telephony services: - //1. FSK Caller ID detection for Analog FXO. - //2. Software DTMF detection. - //3. Q931 decoding - scf.FSKCallerIDEvent = callback_functions.FSKCallerIDEvent; - scf.DTMFEvent = callback_functions.DTMFEvent; - scf.Q931Event = callback_functions.Q931Event; - StelSetup(&stelObj, this, &scf); - DBG_IFACE("%s(): stelObj: 0x%p\n", __FUNCTION__, stelObj); - if(stelObj){ - stelephony_option_t codec = (program_settings.voice_codec_alaw == 1 ? STEL_OPTION_ALAW : STEL_OPTION_MULAW); - if(scf.FSKCallerIDEvent){ - StelEventControl(stelObj, STEL_EVENT_FSK_CALLER_ID, STEL_CTRL_CODE_ENABLE, &codec); - } - if(scf.DTMFEvent){ - StelEventControl(stelObj, STEL_EVENT_DTMF, STEL_CTRL_CODE_ENABLE, &codec); - } - if(scf.Q931Event){ - StelEventControl(stelObj, STEL_EVENT_Q931, STEL_CTRL_CODE_ENABLE, NULL); - } - }else{ - /* Possible reasons: - * 1.ToneDecoder.dll was not registered with COM. - * Resolution: in Command Line window run: regsvr32 ToneDecoder.dll. - */ - ERR_IFACE("Failed to initialize Stelephony.dll!\n"); - return 1; - } -#endif - - IFACE_FUNC(); - return 0; -} - -sng_fd_t sangoma_interface::open_api_device() -{ -#if defined(__WINDOWS__) && !defined(__FUNCTION__) -const char * __FUNCTION__ = "sangoma_interface::open_api_device"; -#endif - - DBG_IFACE("%s(): WanpipeNumber: %d, InterfaceNumber: %d\n", __FUNCTION__, WanpipeNumber, InterfaceNumber); - - return sangoma_open_api_span_chan(WanpipeNumber, InterfaceNumber); -} - -void sangoma_interface::generate_bit_rev_table(void) -{ - unsigned char util_char; - unsigned char misc_status_byte; - int i; - - /* generate the bit-reversing table for all unsigned characters */ - for(util_char = 0;; util_char ++) { - misc_status_byte = 0; /* zero the character to be 'built' */ - /* process all 8 bits of the source byte and generate the */ - for(i = 0; i <= 7; i ++) { - /* corresponding 'bit-flipped' character */ - if(util_char & (1 << i)) { - misc_status_byte |= (1 << (7 - i)); - } - } - /* insert the 'bit-flipped' character into the table - * at the appropriate location */ - wp_brt[util_char] = misc_status_byte; - - /* exit when all unsigned characters have been processed */ - if(util_char == 0xFF) { - break; - } - } -} - -void sangoma_interface::bit_swap_a_buffer(unsigned char *data, int len) -{ - int i; - for (i=0; i < len; i++){ - data[i]=wp_brt[data[i]]; - } -} - -int sangoma_interface::get_wan_config() -{ - int err = WAN_TRUE; - - /* Get Protocol type */ - wan_udp.wan_udphdr_command = WAN_GET_PROTOCOL; - wan_udp.wan_udphdr_data_len = 0; - - DO_COMMAND(wan_udp); - if (wan_udp.wan_udphdr_return_code){ - ERR_IFACE( "Error: Command WANPIPEMON_GET_PROTOCOL failed! return code: 0x%X", - wan_udp.wan_udphdr_return_code); - return WAN_FALSE; - } - - wan_protocol = wan_udp.wan_udphdr_data[0]; - - INFO_IFACE( "Device %s running protocol: %s \n", - device_name, SDLA_DECODE_PROTOCOL(wan_protocol)); - - return err; -} - -int sangoma_interface::get_fe_type(unsigned char* adapter_type) -{ - int err = WAN_TRUE; - - /* Read Adapter Type */ - wan_udp.wan_udphdr_command = WAN_GET_MEDIA_TYPE; - wan_udp.wan_udphdr_data[0] = WAN_MEDIA_NONE; - wan_udp.wan_udphdr_data_len = 0; - - DO_COMMAND(wan_udp); - if(wan_udp.wan_udphdr_return_code){ - ERR_IFACE( "Error: Command WANPIPEMON_GET_MEDIA_TYPE failed! return code: 0x%X", - wan_udp.wan_udphdr_return_code); - return WAN_FALSE; - } - - *adapter_type = get_wan_udphdr_data_byte(0); - - INFO_IFACE( "Front End Type: "); - switch(*adapter_type) - { - case WAN_MEDIA_NONE: - INFO_IFACE( "Serial"); - break; - case WAN_MEDIA_T1: - INFO_IFACE( "T1"); - break; - case WAN_MEDIA_E1: - INFO_IFACE( "E1"); - break; - case WAN_MEDIA_56K: - INFO_IFACE( "56K"); - break; - case WAN_MEDIA_FXOFXS: - INFO_IFACE( "Aanalog"); - break; - case WAN_MEDIA_BRI: - INFO_IFACE( "ISDN BRI"); - break; - case WAN_MEDIA_SERIAL: - INFO_IFACE("Serial"); - break; - default: - INFO_IFACE( "Unknown"); - err = WAN_FALSE; - } - INFO_IFACE( "\n"); - - return err; -} - -//return POINTER to data at offset 'off' -unsigned char* sangoma_interface::get_wan_udphdr_data_ptr(unsigned char off) -{ - unsigned char *p_data = (unsigned char*)&wan_udp.wan_udphdr_data[0]; - p_data += off; - return p_data; -} - -unsigned char sangoma_interface::set_wan_udphdr_data_byte(unsigned char off, unsigned char data) -{ - unsigned char *p_data = (unsigned char*)&wan_udp.wan_udphdr_data[0]; - p_data[off] = data; - return 0; -} - -//return DATA at offset 'off' -unsigned char sangoma_interface::get_wan_udphdr_data_byte(unsigned char off) -{ - unsigned char *p_data = (unsigned char*)&wan_udp.wan_udphdr_data[0]; - return p_data[off]; -} - -void sangoma_interface::get_te1_56k_stat(void) -{ - sdla_fe_stats_t *fe_stats; - - switch(adapter_type) - { - case WAN_MEDIA_T1: - case WAN_MEDIA_E1: - case WAN_MEDIA_56K: - ;//do nothing - break; - - default: - ERR_IFACE( "Command invalid for Adapter Type %d.\n", adapter_type); - return; - } - - /* Read T1/E1/56K alarms and T1/E1 performance monitoring counters */ - wan_udp.wan_udphdr_command = WAN_FE_GET_STAT; - wan_udp.wan_udphdr_data_len = 0; - wan_udp.wan_udphdr_return_code = 0xaa; - wan_udp.wan_udphdr_fe_force = 0; - DO_COMMAND(wan_udp); - if (wan_udp.wan_udphdr_return_code != 0){ - ERR_IFACE( "Failed to read T1/E1/56K statistics.\n"); - return; - } - - fe_stats = (sdla_fe_stats_t*)get_wan_udphdr_data_ptr(0); - - if (adapter_type == WAN_MEDIA_T1 || adapter_type == WAN_MEDIA_E1){ - INFO_IFACE("***** %s: %s Alarms (Framer) *****\n\n", - device_name, (adapter_type == WAN_MEDIA_T1) ? "T1" : "E1"); - INFO_IFACE("ALOS:\t%s\t| LOS:\t%s\n", - WAN_TE_ALOS_ALARM(fe_stats->alarms), - WAN_TE_LOS_ALARM(fe_stats->alarms)); - INFO_IFACE("RED:\t%s\t| AIS:\t%s\n", - WAN_TE_RED_ALARM(fe_stats->alarms), - WAN_TE_AIS_ALARM(fe_stats->alarms)); - if (adapter_type == WAN_MEDIA_T1){ - INFO_IFACE("RAI:\t%s\t| OOF:\t%s\n", - WAN_TE_RAI_ALARM(fe_stats->alarms), - WAN_TE_OOF_ALARM(fe_stats->alarms)); - }else{ - INFO_IFACE("OOF:\t%s\t| RAI:\t%s\n", - WAN_TE_OOF_ALARM(fe_stats->alarms), - WAN_TE_RAI_ALARM(fe_stats->alarms)); - } - - if (fe_stats->alarms & WAN_TE_BIT_LIU_ALARM){ - INFO_IFACE("\n***** %s: %s Alarms (LIU) *****\n\n", - device_name, (adapter_type == WAN_MEDIA_T1) ? "T1" : "E1"); - INFO_IFACE("Short Circuit:\t%s\n", - WAN_TE_LIU_ALARM_SC(fe_stats->alarms)); - INFO_IFACE("Open Circuit:\t%s\n", - WAN_TE_LIU_ALARM_OC(fe_stats->alarms)); - INFO_IFACE("Loss of Signal:\t%s\n", - WAN_TE_LIU_ALARM_LOS(fe_stats->alarms)); - } - - }else if (adapter_type == WAN_MEDIA_56K){ - INFO_IFACE("***** %s: 56K CSU/DSU Alarms *****\n\n\n", device_name); - INFO_IFACE("In Service:\t\t%s\tData mode idle:\t\t%s\n", - INS_ALARM_56K(fe_stats->alarms), - DMI_ALARM_56K(fe_stats->alarms)); - - INFO_IFACE("Zero supp. code:\t%s\tCtrl mode idle:\t\t%s\n", - ZCS_ALARM_56K(fe_stats->alarms), - CMI_ALARM_56K(fe_stats->alarms)); - - INFO_IFACE("Out of service code:\t%s\tOut of frame code:\t%s\n", - OOS_ALARM_56K(fe_stats->alarms), - OOF_ALARM_56K(fe_stats->alarms)); - - INFO_IFACE("Valid DSU NL loopback:\t%s\tUnsigned mux code:\t%s\n", - DLP_ALARM_56K(fe_stats->alarms), - UMC_ALARM_56K(fe_stats->alarms)); - - INFO_IFACE("Rx loss of signal:\t%s\t\n", - RLOS_ALARM_56K(fe_stats->alarms)); - - }else{ - INFO_IFACE("***** %s: Unknown Front End 0x%X *****\n\n", - device_name, adapter_type); - } - - if (adapter_type == WAN_MEDIA_T1 || adapter_type == WAN_MEDIA_E1){ - sdla_te_pmon_t* pmon = &fe_stats->te_pmon; - - INFO_IFACE("\n\n***** %s: %s Performance Monitoring Counters *****\n\n", - device_name, (adapter_type == WAN_MEDIA_T1) ? "T1" : "E1"); - if (pmon->mask & WAN_TE_BIT_PMON_LCV){ - INFO_IFACE("Line Code Violation\t: %d\n", - pmon->lcv_errors); - } - if (pmon->mask & WAN_TE_BIT_PMON_BEE){ - INFO_IFACE("Bit Errors (CRC6/Ft/Fs)\t: %d\n", - pmon->bee_errors); - } - if (pmon->mask & WAN_TE_BIT_PMON_OOF){ - INFO_IFACE("Out of Frame Errors\t: %d\n", - pmon->oof_errors); - } - if (pmon->mask & WAN_TE_BIT_PMON_FEB){ - INFO_IFACE("Far End Block Errors\t: %d\n", - pmon->feb_errors); - } - if (pmon->mask & WAN_TE_BIT_PMON_CRC4){ - INFO_IFACE("CRC4 Errors\t\t: %d\n", - pmon->crc4_errors); - } - if (pmon->mask & WAN_TE_BIT_PMON_FER){ - INFO_IFACE("Framing Bit Errors\t: %d\n", - pmon->fer_errors); - } - if (pmon->mask & WAN_TE_BIT_PMON_FAS){ - INFO_IFACE("FAS Errors\t\t: %d\n", - pmon->fas_errors); - } - } - - if (adapter_type == WAN_MEDIA_T1 || adapter_type == WAN_MEDIA_E1){ - if (strlen(fe_stats->u.te1_stats.rxlevel)){ - INFO_IFACE("\n\nRx Level\t: %s\n", - fe_stats->u.te1_stats.rxlevel); - } - } - - return; -} - -void sangoma_interface::set_lb_modes(unsigned char type, unsigned char mode) -{ - switch(adapter_type) - { - case WAN_MEDIA_T1: - case WAN_MEDIA_E1: - case WAN_MEDIA_56K: - ;//do nothing - break; - default: - ERR_IFACE( "Command invalid for Adapter Type %d.\n", adapter_type); - return; - } - wan_udp.wan_udphdr_command = WAN_FE_LB_MODE; - wan_udp.wan_udphdr_data_len = 2; - wan_udp.wan_udphdr_return_code = 0xaa; - - set_wan_udphdr_data_byte(0,type); - set_wan_udphdr_data_byte(1,mode); - - DO_COMMAND(wan_udp); - - if (adapter_type == WAN_MEDIA_T1 || adapter_type == WAN_MEDIA_E1){ - INFO_IFACE("%s %s mode ... %s!\n", - WAN_TE1_LB_ACTION_DECODE(mode), - WAN_TE1_LB_MODE_DECODE(type), - (!wan_udp.wan_udphdr_return_code)?"Done":"Failed"); - }else if (adapter_type == WAN_MEDIA_DS3 || adapter_type == WAN_MEDIA_E3){ - INFO_IFACE("%s %s mode ... %s!\n", - WAN_TE3_LB_ACTION_DECODE(mode), - WAN_TE3_LB_TYPE_DECODE(type), - (!wan_udp.wan_udphdr_return_code)?"Done":"Failed"); - }else{ - INFO_IFACE("%s %s mode ... %s (default)!\n", - WAN_TE1_LB_ACTION_DECODE(mode), - WAN_TE1_LB_MODE_DECODE(type), - (!wan_udp.wan_udphdr_return_code)?"Done":"Failed"); - } - return; -} - -unsigned char sangoma_interface::get_adapter_type() -{ - return adapter_type; -} - -unsigned int sangoma_interface::get_sub_media() -{ - return wanif_conf_struct.sub_media; -} - -int sangoma_interface::get_operational_stats(wanpipe_chan_stats_t *stats) -{ - tdm_api_cmd.cmd = WP_API_CMD_GET_STATS; - if(tdmv_api_ioctl(&tdm_api_cmd)){ - return 1; - } - - memcpy(stats, &tdm_api_cmd.stats, sizeof(wanpipe_chan_stats_t)); - - INFO_IFACE( "******* OPERATIONAL_STATS *******\n"); - - INFO_IFACE("\trx_packets\t: %u\n", stats->rx_packets); - INFO_IFACE("\ttx_packets\t: %u\n", stats->tx_packets); - INFO_IFACE("\trx_bytes\t: %u\n", stats->rx_bytes); - INFO_IFACE("\ttx_bytes\t: %u\n", stats->tx_bytes); - INFO_IFACE("\trx_errors\t: %u\n", stats->rx_errors); - INFO_IFACE("\ttx_errors\t: %u\n", stats->tx_errors); - INFO_IFACE("\trx_dropped\t: %u\n", stats->rx_dropped); - INFO_IFACE("\ttx_dropped\t: %u\n", stats->tx_dropped); - INFO_IFACE("\tmulticast\t: %u\n", stats->multicast); - INFO_IFACE("\tcollisions\t: %u\n", stats->collisions); - - INFO_IFACE("\trx_length_errors: %u\n", stats->rx_length_errors); - INFO_IFACE("\trx_over_errors\t: %u\n", stats->rx_over_errors); - INFO_IFACE("\trx_crc_errors\t: %u\n", stats->rx_crc_errors); - INFO_IFACE("\trx_frame_errors\t: %u\n", stats->rx_frame_errors); - INFO_IFACE("\trx_fifo_errors\t: %u\n", stats->rx_fifo_errors); - INFO_IFACE("\trx_missed_errors: %u\n", stats->rx_missed_errors); - - INFO_IFACE("\ttx_aborted_errors: %u\n", stats->tx_aborted_errors); - INFO_IFACE("\tTx Idle Data\t: %u\n", stats->tx_carrier_errors); - - INFO_IFACE("\ttx_fifo_errors\t: %u\n", stats->tx_fifo_errors); - INFO_IFACE("\ttx_heartbeat_errors: %u\n", stats->tx_heartbeat_errors); - INFO_IFACE("\ttx_window_errors: %u\n", stats->tx_window_errors); - - INFO_IFACE("\ttx_packets_in_q: %u\n", stats->current_number_of_frames_in_tx_queue); - INFO_IFACE("\ttx_queue_size: %u\n", stats->max_tx_queue_length); - - INFO_IFACE("\trx_packets_in_q: %u\n", stats->current_number_of_frames_in_rx_queue); - INFO_IFACE("\trx_queue_size: %u\n", stats->max_rx_queue_length); - - - INFO_IFACE( "*********************************\n"); - return 0; -} - -int sangoma_interface::flush_operational_stats() -{ - tdm_api_cmd.cmd = WP_API_CMD_RESET_STATS; - - if(tdmv_api_ioctl(&tdm_api_cmd)){ - return 1; - } - - INFO_IFACE( "Command FLUSH_OPERATIONAL_STATS was successful.\n"); - return 0; -} - -int sangoma_interface::flush_tx_buffers() -{ - wan_udp.wan_udphdr_command = WP_API_CMD_FLUSH_BUFFERS; - wan_udp.wan_udphdr_data_len = 0; - - DO_COMMAND(wan_udp); - if(wan_udp.wan_udphdr_return_code){ - ERR_IFACE( "Error: command FLUSH_TX_BUFFERS failed!\n"); - return 1; - } - - INFO_IFACE( "Command FLUSH_TX_BUFFERS was successful.\n"); - return 0; -} - -int sangoma_interface::enable_rbs_monitoring() -{ - int rc; - if(is_rbs_monitoring_enabled == 0){ - /* enable RBS monitoring one time per card */ - if(sangoma_tdm_enable_rbs_events(20)){ - ERR_IFACE("sangoma_tdm_enable_rbs_events() failed!\n"); - rc = 1; - }else{ - is_rbs_monitoring_enabled = 1; - INFO_IFACE("RBS Monitoring successfully enabled.\n"); - rc = 0; - } - }else{ - INFO_IFACE("RBS Monitoring already enabled!! Should be done only once.\n"); - rc = 0; - } - return rc; -} - -void sangoma_interface::set_idle_tx_data_buffer(unsigned char idle_tx_test_byte) -{ - //set data in Idle Tx buffer in the driver - tx_data.hdr.data_length = 512;//should be the same as MTU/MRU - tx_data.hdr.operation_status = SANG_STATUS_TX_TIMEOUT; - //set the actual data for transmission - memset(tx_data.data, idle_tx_test_byte, tx_data.hdr.data_length); - - if(DoSetIdleTxBufferCommand(sangoma_wait_obj.fd, &tx_data)){ - //error - ERR_IFACE("DoSetIdleTxBufferCommand() failed!! Check messages log.\n"); - return; - } - - if(tx_data.hdr.operation_status != SANG_STATUS_SUCCESS){ - //error - ERR_IFACE("DoSetIdleTxBufferCommand() failed!!.\n"); - return; - } -} - -//get RBS being received -char sangoma_interface::get_rbs(rbs_management_t *rbs_management_ptr) -{ - wan_udp.wan_udphdr_command = WANPIPEMON_GET_RBS_BITS; - memcpy(&wan_udp.wan_udphdr_data[0], rbs_management_ptr, sizeof(rbs_management_t)); - wan_udp.wan_udphdr_data_len = sizeof(rbs_management_t); - - DO_COMMAND(wan_udp); - if(wan_udp.wan_udphdr_return_code){ - ERR_IFACE( "Error: command WANPIPEMON_GET_RBS_BITS failed!\n"); - return 1; - } - - memcpy(rbs_management_ptr, (rbs_management_t *)&wan_udp.wan_udphdr_data[0], - sizeof(rbs_management_t)); - - INFO_IFACE( "**** WANPIPEMON_GET_RBS_BITS OK ****\n"); - - //INFO_IFACE( "ABCD_bits (HEX): 0x%02X\n", rbs_management_ptr->ABCD_bits); - - INFO_IFACE( "Channel: %d, RX RBS: A:%1d B:%1d C:%1d D:%1d\n", - rbs_management_ptr->channel, - (rbs_management_ptr->ABCD_bits & WAN_RBS_SIG_A) ? 1 : 0, - (rbs_management_ptr->ABCD_bits & WAN_RBS_SIG_B) ? 1 : 0, - (rbs_management_ptr->ABCD_bits & WAN_RBS_SIG_C) ? 1 : 0, - (rbs_management_ptr->ABCD_bits & WAN_RBS_SIG_D) ? 1 : 0); - return 0; -} - -//set RBS to be transmitted -char sangoma_interface::set_rbs(rbs_management_t *rbs_management_ptr) -{ - wan_udp.wan_udphdr_command = WANPIPEMON_SET_RBS_BITS; - memcpy(&wan_udp.wan_udphdr_data[0], rbs_management_ptr, sizeof(rbs_management_t)); - wan_udp.wan_udphdr_data_len = sizeof(rbs_management_t); - - DO_COMMAND(wan_udp); - if(wan_udp.wan_udphdr_return_code){ - ERR_IFACE( "Error: command WANPIPEMON_SET_RBS_BITS failed!\n"); - return 1; - } - - INFO_IFACE( "**** WANPIPEMON_SET_RBS_BITS OK ****\n"); - - //INFO_IFACE( "ABCD_bits (HEX): 0x%02X\n", rbs_management_ptr->ABCD_bits); - - INFO_IFACE( "Channel: %d, TX RBS: A:%1d B:%1d C:%1d D:%1d\n", - rbs_management_ptr->channel, - (rbs_management_ptr->ABCD_bits & WAN_RBS_SIG_A) ? 1 : 0, - (rbs_management_ptr->ABCD_bits & WAN_RBS_SIG_B) ? 1 : 0, - (rbs_management_ptr->ABCD_bits & WAN_RBS_SIG_C) ? 1 : 0, - (rbs_management_ptr->ABCD_bits & WAN_RBS_SIG_D) ? 1 : 0); - return 0; -} - -int sangoma_interface::get_interface_configuration(if_cfg_t *wanif_conf_ptr) -{ - wan_udp.wan_udphdr_command = WANPIPEMON_READ_CONFIGURATION; - wan_udp.wan_udphdr_data_len = sizeof(if_cfg_t); - - memset(wanif_conf_ptr, 0x00, sizeof(if_cfg_t)); - - DO_COMMAND(wan_udp); - if(wan_udp.wan_udphdr_return_code){ - ERR_IFACE( "Error: command READ_CONFIGURATION failed!\n"); - return 1; - } - memcpy(wanif_conf_ptr, get_wan_udphdr_data_ptr(0), sizeof(if_cfg_t)); - - INFO_IFACE( "**** READ_CONFIGURATION ****\n"); - INFO_IFACE( "Operational Mode\t: %s (%d)\n", SDLA_DECODE_USEDBY_FIELD(wanif_conf_ptr->usedby), wanif_conf_ptr->usedby); - INFO_IFACE( "Active Channels \t: 0x%08X\n", wanif_conf_ptr->active_ch); - INFO_IFACE( "Interface Number\t: %u\n", wanif_conf_ptr->interface_number); - INFO_IFACE( "Media type\t\t: %u\n", wanif_conf_ptr->media); - INFO_IFACE( "Line Mode\t\t: %s\n", wanif_conf_ptr->line_mode); - -#if defined(__WINDOWS__) - //make sure API driver is configred in correct mode - switch(wanif_conf_ptr->usedby) - { - case TDM_SPAN_VOICE_API: - case TDM_CHAN_VOICE_API: - case API: - //ok - break; - default: - //this application can not run if driver is not in correct mode - ERR_IFACE("Invalid API Driver Operational Mode: %s (%d)!\n", - SDLA_DECODE_USEDBY_FIELD(wanif_conf_ptr->usedby), wanif_conf_ptr->usedby); - return 2; - } -#endif - - switch(wanif_conf_ptr->media) - { - case WAN_MEDIA_FXOFXS: - switch(wanif_conf_ptr->sub_media) - { - case MOD_TYPE_FXS: - INFO_IFACE( "Media sub-type\t\t: FXS\n"); - break; - case MOD_TYPE_FXO: - INFO_IFACE( "Media sub-type\t\t: FXO\n"); - break; - default: - INFO_IFACE( "Media sub-type\t\t: Unknown!!\n"); - break; - } - break;/* WAN_MEDIA_FXOFXS */ - - case WAN_MEDIA_BRI: - switch(wanif_conf_ptr->sub_media) - { - case MOD_TYPE_NT: - INFO_IFACE( "Media sub-type\t\t: ISDN BRI NT\n"); - break; - case MOD_TYPE_TE: - INFO_IFACE( "Media sub-type\t\t: ISDN BRI TE\n"); - break; - default: - INFO_IFACE( "Media sub-type\t\t: Unknown!!\n"); - break; - } - break;/* WAN_MEDIA_BRI */ - - case WAN_MEDIA_SERIAL: - INFO_IFACE("Media sub-type\t\t: %s\n", INT_DECODE(wanif_conf_ptr->sub_media)); - break; - } - INFO_IFACE( "****************************\n"); - - return 0; -} - -void sangoma_interface::get_api_driver_version (PDRIVER_VERSION version) -{ - wan_udp.wan_udphdr_command = WANPIPEMON_READ_CODE_VERSION; - wan_udp.wan_udphdr_data_len = 0; - - DO_COMMAND(wan_udp); - if(wan_udp.wan_udphdr_return_code){ - ERR_IFACE("Error: command READ_CODE_VERSION failed!\n"); - return; - } - - memcpy(version, (PDRIVER_VERSION)get_wan_udphdr_data_ptr(0), sizeof(DRIVER_VERSION)); - - INFO_IFACE("\nAPI version\t: %d,%d,%d,%d\n", - version->major, version->minor, version->minor1, version->minor2); - INFO_IFACE("\n"); - - INFO_IFACE("Command READ_CODE_VERSION was successful.\n"); -} - -void sangoma_interface::get_card_customer_id(u_int8_t *customer_id) -{ - wan_udp.wan_udphdr_command = WANPIPEMON_AFT_CUSTOMER_ID; - wan_udp.wan_udphdr_data_len = 0; - - DO_COMMAND(wan_udp); - if(wan_udp.wan_udphdr_return_code){ - ERR_IFACE("Error: command SIOC_AFT_CUSTOMER_ID failed!\n"); - return; - } - - *customer_id = get_wan_udphdr_data_byte(0); - - INFO_IFACE("\nCard Customer ID\t: 0x%02X\n", *customer_id); - - INFO_IFACE("Command SIOC_AFT_CUSTOMER_ID was successful.\n"); -} - -int sangoma_interface::get_open_handles_counter() -{ - tdm_api_cmd.cmd = WP_API_CMD_OPEN_CNT; - int err=tdmv_api_ioctl(&tdm_api_cmd); - if (err) { - ERR_IFACE( "Error: command GET_OPEN_HANDLES_COUNTER failed!\n"); - return -1; - } - - return tdm_api_cmd.open_cnt; - -#if 0 - wan_udp.wan_udphdr_command = WANPIPEMON_GET_OPEN_HANDLES_COUNTER; - wan_udp.wan_udphdr_data_len = 0; - - DO_COMMAND(wan_udp); - if(wan_udp.wan_udphdr_return_code){ - ERR_IFACE( "Error: command GET_OPEN_HANDLES_COUNTER failed!\n"); - return -1; - } - - return *(int*)&wan_udp.wan_udphdr_data[0]; -#endif -} - - -//It is very important to close ALL open -//handles, because the API will continue -//receive data until the LAST handel is closed. -void sangoma_interface::cleanup() -{ - INFO_IFACE("sangoma_interface::cleanup()\n"); -#ifdef WIN32 - if(sangoma_wait_obj.fd != INVALID_HANDLE_VALUE){ - if(is_rbs_monitoring_enabled == 1){ - /* disable RBS monitoring one time per card */ - is_rbs_monitoring_enabled = 0; - if(sangoma_tdm_disable_rbs_events()){ - ERR_IFACE("sangoma_tdm_disable_rbs_events() failed!\n"); - } - } - } -#endif - - if(sangoma_wait_obj.fd != INVALID_HANDLE_VALUE){ - INFO_IFACE( "Closing Rx/Tx fd.\n"); - sangoma_close(&sangoma_wait_obj.fd); - sangoma_wait_obj.fd = INVALID_HANDLE_VALUE; - } - -#if USE_STELEPHONY_API - if(stelObj){ - StelCleanup(stelObj); - stelObj = NULL; - } -#endif -} - -int sangoma_interface::DoWriteCommand(sng_fd_t fd, wp_api_element_t * pTx) -{ - int err = sangoma_writemsg(fd, &pTx->hdr, sizeof(pTx->hdr), pTx->data, pTx->hdr.data_length, 0); - if(err < 0){ - //error! - return 1; - } - return 0; -} - -int sangoma_interface::DoReadCommand(sng_fd_t fd, wp_api_element_t * pRx) -{ - int err = sangoma_readmsg(fd, &pRx->hdr, sizeof(pRx->hdr), pRx->data, MAX_NO_DATA_BYTES_IN_FRAME, 0); - - if(err <= 0){ - //error! - return 1; - } - return 0; -} - -// set data in Idle Transmit buffer (BitStream only). -UCHAR sangoma_interface::DoSetIdleTxBufferCommand(sng_fd_t drv, wp_api_element_t * pTx) -{ -#if defined(__WINDOWS__) - DWORD ln, bIoResult; - - bIoResult = DeviceIoControl( - drv, - IoctlSetIdleTxBuffer, - (LPVOID)pTx, - (ULONG)sizeof(wp_api_element_t), - (LPVOID)pTx, - sizeof(wp_api_element_t), - (LPDWORD)(&ln), - (LPOVERLAPPED)NULL - ); - - HANDLE_DEVICE_IOCTL_RESULT(bIoResult); -#else - int err; - err = ioctl(drv,WANPIPE_IOCTL_SET_IDLE_TX_BUFFER, pTx); - if (err < 0) { - return 1; - } -#endif - return 0; -} - -int sangoma_interface::DoManagementCommand(sng_fd_t fd, wan_udp_hdr_t* wan_udp) -{ - return sangoma_mgmt_cmd(fd, wan_udp); -} - -int sangoma_interface::tdmv_api_ioctl(wanpipe_api_cmd_t *api_cmd) -{ - wanpipe_api_t tmp; - int err; - - memcpy(&tmp.wp_cmd, api_cmd, sizeof(wanpipe_api_cmd_t)); - - err = sangoma_cmd_exec(sangoma_wait_obj.fd, &tmp); - - memcpy(api_cmd, &tmp.wp_cmd, sizeof(wanpipe_api_cmd_t)); - - return err; -} - -int sangoma_interface::sangoma_tdm_enable_ring_detect_events() -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_disable_ring_detect_events() -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_enable_ring_trip_detect_events() -{ - DBG_IFACE("%s()\n", __FUNCTION__); - - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_RING_TRIP_DETECT; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_disable_ring_trip_detect_events() -{ - DBG_IFACE("%s()\n", __FUNCTION__); - - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_RING_DETECT; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_enable_rm_dtmf_events() -{ - DBG_IFACE("%s()\n", __FUNCTION__); - - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_disable_rm_dtmf_events() -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_RM_DTMF; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_enable_dtmf_events(uint8_t channel) -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - tdm_api_cmd.event.channel = channel; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_disable_dtmf_events(uint8_t channel) -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_DTMF; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - tdm_api_cmd.event.channel = channel; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_enable_rxhook_events() -{ - DBG_IFACE("%s()\n", __FUNCTION__); - - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_disable_rxhook_events() -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_RXHOOK; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_enable_ring_events() -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_disable_ring_events() -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_RING; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_txsig_onhook() -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_ONHOOK; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_txsig_offhook() -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_TXSIG_OFFHOOK; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_enable_tone_events(uint16_t tone_id) -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - tdm_api_cmd.event.wp_api_event_tone_type = tone_id; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_disable_tone_events() -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_TONE; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - tdm_api_cmd.event.wp_api_event_tone_type = 0x00; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_enable_bri_bchan_loopback(u_int8_t channel) -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.channel = channel; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_ENABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::sangoma_tdm_disable_bri_bchan_loopback(u_int8_t channel) -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_EVENT; - tdm_api_cmd.event.channel = channel; - tdm_api_cmd.event.wp_api_event_type = WP_API_EVENT_BRI_CHAN_LOOPBACK; - tdm_api_cmd.event.wp_api_event_mode = WP_API_EVENT_DISABLE; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -/* 1. Enable 'writing' of RBS bits on card. - 2. Enable monitoring change in state of RBS bits. - 'polls_per_second' - how many times per second API driver will check for - change in state of RBS bits. - Valid values are between 20 and 100 (including). */ -int sangoma_interface::sangoma_tdm_enable_rbs_events(int polls_per_second) -{ - tdm_api_cmd.cmd = WP_API_CMD_ENABLE_RBS_EVENTS; - tdm_api_cmd.rbs_poll = polls_per_second; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -/* Stop monitoring change in state of RBS bits */ -int sangoma_interface::sangoma_tdm_disable_rbs_events() -{ - tdm_api_cmd.cmd = WP_API_CMD_DISABLE_RBS_EVENTS; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -/* Activate ISDN BRI line. */ -int sangoma_interface::sangoma_tdm_front_end_activate() -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_FE_STATUS; - tdm_api_cmd.fe_status = WAN_FE_CONNECTED; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -/* De-activate ISDN BRI line. */ -int sangoma_interface::sangoma_tdm_front_end_deactivate() -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_FE_STATUS; - tdm_api_cmd.fe_status = WAN_FE_DISCONNECTED; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -/* get current state of the line - is it Connected or Disconnected */ -int sangoma_interface::sangoma_tdm_get_front_end_status(unsigned char *status) -{ - int rc; - tdm_api_cmd.cmd = WP_API_CMD_GET_FE_STATUS; - rc = tdmv_api_ioctl(&tdm_api_cmd); - printf("rc: %d\n", rc); - if(rc == 0){ - *status = tdm_api_cmd.fe_status; - } - return rc; -} - -/* Milliseconds interval between receive of Voice Data */ -int sangoma_interface::sangoma_tdm_set_user_period(unsigned int usr_period) -{ - tdm_api_cmd.cmd = WP_API_CMD_SET_USR_PERIOD; - tdm_api_cmd.usr_period = usr_period; - return tdmv_api_ioctl(&tdm_api_cmd); -} - -int sangoma_interface::stop() -{ - int wait_counter = 0; - DBG_IFACE("sangoma_interface::stop()\n"); - - INFO_IFACE( "Stopping."); - - terminate_tx_rx_threads = 1; - while(terminate_tx_rx_threads == 1 && wait_counter++ < 5){ - INFO_IFACE( "."); - Sleep(500); - } - INFO_IFACE( "\n"); - - switch(wanif_conf_struct.media) - { - case WAN_MEDIA_FXOFXS: - switch(wanif_conf_struct.sub_media) - { - case MOD_TYPE_FXS: - stop_all_tones(); - stop_ringing_phone(); - break; - - case MOD_TYPE_FXO: - fxo_go_on_hook(); - break; - } - break; - } - - return 0; -} - -int sangoma_interface::run() -{ - DBG_IFACE("sangoma_interface::run()\n"); - - switch(wanif_conf_struct.media) - { - case WAN_MEDIA_FXOFXS: - switch(wanif_conf_struct.sub_media) - { - case MOD_TYPE_FXS: - sangoma_tdm_enable_rxhook_events(); - sangoma_tdm_enable_rm_dtmf_events(); - sangoma_tdm_enable_ring_trip_detect_events(); - break; - case MOD_TYPE_FXO: - sangoma_tdm_enable_ring_detect_events(); - break; - } - break; - } - - //////////////////////////////////////////////////////////////////////////// - //Start a thread for receiving data only - if(this->CreateThread(1) == false){ - ERR_IFACE( "Failed to create Rx thread!!\n"); - return 1; - } - - return 0; -} - -unsigned long sangoma_interface::threadFunction (void *parameter) -{ - switch((int)parameter) - { - case 1: - RxThreadFunc(); - return 0;//ok - } - return 1;//invalid thread function was requested -} - -// Read Thread -void sangoma_interface::RxThreadFunc() -{ - int iResult; - - INFO_IFACE("\n%s: %s() - start\n", device_name, __FUNCTION__); -#if defined(__WINDOWS__) - INFO_IFACE("ThreadID: %d - Start\n", ::GetCurrentThreadId()); -#endif - - while(terminate_tx_rx_threads == 0){ - - sangoma_wait_obj.flags_in = (POLLPRI | POLLIN); //only interested in Rx data and Events - - iResult = sangoma_socket_waitfor_many(&sangoma_wait_obj, 1 /* number of objects */, 2000 /* 2 sec timeout */); - - if(iResult < 0){ - //error - ERR_IFACE("iResult: %d\n", iResult); - break; - } - - if(iResult == 0){ - //timeout. try again. - DBG_IFACE("Timeout\n"); - continue; - } - - if(sangoma_wait_obj.flags_out & POLLPRI){ - /* event */ - if(read_event()){ - ERR_IFACE("Error in read_event()!\n"); - } - } - - if(sangoma_wait_obj.flags_out & POLLIN){ - /* data */ - if(read_data()){ - ERR_IFACE("Error in read_data()!\n"); - } - } - - }//while() - - terminate_tx_rx_threads = 2; - - INFO_IFACE("\n%s: %s() - end\n", device_name, __FUNCTION__); -#if defined(__WINDOWS__) - INFO_IFACE("ThreadID: %d - End\n", ::GetCurrentThreadId()); -#endif -} - -/////////////////////////////////////////////////////////////////////// - -int sangoma_interface::read_event() -{ - int err; - wp_api_event_t *rx_event = &tdm_api.wp_cmd.event; - -#if 0 - print_poll_event_bitmap(sangoma_wait_obj.flags_out); - printf("\n"); -#endif - - memset(&tdm_api, 0, sizeof(tdm_api)); - - err = sangoma_read_event(sangoma_wait_obj.fd, &tdm_api); - - if(err){ - return err; - } - - callback_functions.got_TdmApiEvent(this, rx_event); - - return 0; -} - -/////////////////////////////////////////////////////////////////////// - -int sangoma_interface::read_data() -{ - int rc = 0; - wp_api_hdr_t *pri; - - if(receive(&rx_data) ){ - //error - ERR_IFACE( "receive() failed!! Check messages log.\n"); - return 1; - } - - //use our special buffer at rxdata to hold received data - pri = &rx_data.hdr; - - switch(pri->operation_status) - { - case SANG_STATUS_RX_DATA_AVAILABLE: -#if USE_STELEPHONY_API - if(stelObj){ - if(scf.FSKCallerIDEvent || scf.DTMFEvent || scf.Q931Event){ - //if at lease one event is enabled, Rx data is the input for decoder. - wp_api_element_t* pRx = &rx_data; - StelStreamInput(stelObj, pRx->data, pRx->hdr.data_length); - } - } -#endif -#if 0 - //Some useful information about API's internal receive queue - //is available after each successful IoctlReadCommand: - DBG_IFACE("max_rx_queue_length: %d current_number_of_frames_in_rx_queue: %d\n", - rx_data.hdr.wp_api_rx_hdr_max_queue_length, - rx_data.hdr.wp_api_rx_hdr_number_of_frames_in_queue); -#endif - //INFO_IFACE("Rx Length = %i\n",rx_data.hdr.wp_api_hdr_data_length); - - callback_functions.got_rx_data(this, &rx_data); - break; - - default: - ERR_IFACE("%s: Rx Error: Operation Status: %s(%d)\n", device_name, - SDLA_DECODE_SANG_STATUS(pri->operation_status), pri->operation_status); - rc = 1; - break; - }//switch() - return rc; -} - -/////////////////////////////////////////////////////////////////////// - -int sangoma_interface::receive(wp_api_element_t *pRx) -{ - return DoReadCommand(sangoma_wait_obj.fd, pRx); -} - -/////////////////////////////////////////////////////////////////////// - -int sangoma_interface::transmit(wp_api_element_t *pTx) -{ - int err; - - do{ - err = DoWriteCommand(sangoma_wait_obj.fd, pTx); - if(err){ - //error - printf("DoWriteCommand() failed!! Check messages log.\n"); - return err; - } - - //check that frame was transmitted - switch(pTx->hdr.operation_status) - { - case SANG_STATUS_SUCCESS: - err = 0; - //printf("Frame queued for transmission.\n"); -#if 0 - //Some useful information about API's internal transmit queue - //is available after each successful transmission: - printf("max_tx_queue_length: %d current_number_of_frames_in_tx_queue: %d\n", - pTx->hdr.tx_h.max_tx_queue_length, - pTx->hdr.tx_h.current_number_of_frames_in_tx_queue); -#endif - return SANG_STATUS_SUCCESS; - - case SANG_STATUS_DEVICE_BUSY: - err = 0; - break; - - default: - err = 1; - DBG_IFACE("Error: Return code: %s(%d) on transmission!\n", - SDLA_DECODE_SANG_STATUS(pTx->hdr.operation_status), - pTx->hdr.operation_status); - break; - }//switch() - - }while(err == 0); - - return pTx->hdr.operation_status; -} - -/////////////////////////////////////////////////////////////////////// -int sangoma_interface::start_ring_tone() -{ - DBG_IFACE( "%s:start_ring_tone()\n", device_name); - return sangoma_tdm_enable_tone_events(WP_API_EVENT_TONE_RING); -} -/////////////////////////////////////////////////////////////////////// -int sangoma_interface::start_congestion_tone() -{ - DBG_IFACE( "%s:start_congestion_tone()\n", device_name); - return sangoma_tdm_enable_tone_events(WP_API_EVENT_TONE_CONGESTION); -} -/////////////////////////////////////////////////////////////////////// -int sangoma_interface::start_busy_tone() -{ - DBG_IFACE( "%s:start_busy_tone()\n", device_name); - return sangoma_tdm_enable_tone_events(WP_API_EVENT_TONE_BUSY); -} - -/////////////////////////////////////////////////////////////////////// -int sangoma_interface::start_dial_tone() -{ - DBG_IFACE( "%s:start_dial_tone()\n", device_name); - return sangoma_tdm_enable_tone_events(WP_API_EVENT_TONE_DIAL); -} -/////////////////////////////////////////////////////////////////////// -int sangoma_interface::stop_all_tones() -{ - DBG_IFACE( "%s:stop_all_tones()\n", device_name); - return sangoma_tdm_disable_tone_events(); -} - -/////////////////////////////////////////////////////////////////////// -int sangoma_interface::start_ringing_phone() -{ - DBG_IFACE( "%s:start_ringing_phone()\n", device_name); - return sangoma_tdm_enable_ring_events(); -} -int sangoma_interface::stop_ringing_phone() -{ - DBG_IFACE( "%s:stop_ringing_phone()\n", device_name); - return sangoma_tdm_disable_ring_events(); -} -/////////////////////////////////////////////////////////////////////// -int sangoma_interface::fxo_go_off_hook() -{ - DBG_IFACE( "%s:fxo_go_off_hook()\n", device_name); - - if(wanif_conf_struct.sub_media != MOD_TYPE_FXO){ - ERR_IFACE( "%s: The 'Go Off Hook' command valid only for FXO!\n", device_name); - return 1; - } - return sangoma_tdm_txsig_offhook(); -} - -int sangoma_interface::fxo_go_on_hook() -{ - DBG_IFACE( "%s:fxo_go_on_hook()\n", device_name); - - if(wanif_conf_struct.sub_media != MOD_TYPE_FXO){ - ERR_IFACE( "%s: The 'Go On Hook' command valid only for FXO!\n", device_name); - return 1; - } - return sangoma_tdm_txsig_onhook(); -} - -//set a Telephony interface to it's default state -int sangoma_interface::reset_interface_state() -{ - DBG_IFACE("%s:reset_interface_state()\n", device_name); - - switch(wanif_conf_struct.media) - { - case WAN_MEDIA_FXOFXS: - switch(wanif_conf_struct.sub_media) - { - case MOD_TYPE_FXS: - stop_all_tones(); - stop_ringing_phone(); - break; - - case MOD_TYPE_FXO: - fxo_go_on_hook(); - break; - } - break; - } - return 0; -} - diff --git a/api/libsangoma/sample_cpp/.svn/tmp/tempfile.3.tmp b/api/libsangoma/sample_cpp/.svn/tmp/tempfile.3.tmp deleted file mode 100644 index 32907d7..0000000 --- a/api/libsangoma/sample_cpp/.svn/tmp/tempfile.3.tmp +++ /dev/null @@ -1,282 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// sangoma_interface.h: interface for Sangoma API driver. -// -// Author : David Rokhvarg -////////////////////////////////////////////////////////////////////// - -//There is at least one communications Interface (represented by sangoma_interface class) -//running on a Port. - -#ifndef SANGOMA_INTERFACE_H -#define SANGOMA_INTERFACE_H - -#include -#include //for offsetof() -#include - -#if defined(__WINDOWS__) -# include -# include -# include -# include "bit_win.h" - -#elif defined(__LINUX__) - -/* Include headers */ -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -#else -# error "sangoma_interface.h: undefined OS type" -#endif - -/* - * FSK CallerID and DTMF detection note: - * Stelephony.dll expects input BitStream (aLaw or uLaw audio) from a SINGLE timeslot. - * It is always the case for Analog cards, but not for the Digital cards, where - * API may provide input from a SINGLE or from MULTIPLE timeslots. - */ -# define USE_STELEPHONY_API 1 - -#include "libsangoma.h" -#include "wanpipe_api.h" -#include "sangoma_cthread.h" -#include "sample.h" - -# if USE_STELEPHONY_API -# include -# endif - -/** - *@author David Rokhvarg - */ - -class sangoma_interface : public sangoma_cthread -{ - ////////////////////////////////////////////////////////////////// - sangoma_wait_obj_t sangoma_wait_obj; - - ////////////////////////////////////////////////////////////////// - //receive stuff - ULONG rx_frames_count; - ULONG rx_bytes_count; - //for counting frames with CRC/Abort errors - ULONG bad_rx_frames_count; - DWORD dwRxThreadId; - - ////////////////////////////////////////////////////////////////// - //transmit stuff - ULONG tx_bytes_count; - ULONG tx_frames_count; - UCHAR tx_test_byte; - - ////////////////////////////////////////////////////////////////// - //IOCTL management structures and variables - wan_udp_hdr_t wan_udp; - int protocol_cb_size; - int wan_protocol; - unsigned char adapter_type; - - wanpipe_api_cmd_t tdm_api_cmd; - wanpipe_api_t wp_api; - - void RxThreadFunc(); - int read_data(); - int read_event(); - - void PrintRxData(wp_api_element_t *pRx); - void PrintTdmApiEvent(wp_api_element_t *pRx); - void cleanup(); - - wan_cmd_api_t wanpipe_api_cmd; - wanpipe_api_t tdm_api; - - int get_wan_config(); - int get_interface_configuration(if_cfg_t *wanif_conf_ptr); - unsigned char get_wan_udphdr_data_byte(unsigned char off); - unsigned char *get_wan_udphdr_data_ptr(unsigned char off); - unsigned char set_wan_udphdr_data_byte(unsigned char off, unsigned char data); - int get_fe_type(unsigned char* adapter_type); - - int wanpipe_api_ioctl(wan_cmd_api_t *api_cmd); - - int DoReadCommand(sng_fd_t drv, wp_api_element_t * pRx); - int DoWriteCommand(sng_fd_t drv, wp_api_element_t * pTx); - UCHAR DoSetIdleTxBufferCommand(sng_fd_t drv, wp_api_element_t *pTx); - - unsigned char wp_brt[256]; - void generate_bit_rev_table(); - - char is_rbs_monitoring_enabled; - -#if USE_STELEPHONY_API - stelephony_callback_functions_t scf; - void *stelObj; -#endif - - ////////////////////////////////////////////////////////////////// - //data - char terminate_tx_rx_threads; - - wp_api_element_t rx_data; - wp_api_element_t tx_data; - - callback_functions_t callback_functions; - if_cfg_t wanif_conf_struct; - - int WanpipeNumber, InterfaceNumber; - -protected: - virtual unsigned long threadFunction(void* parameter); - -public: - char device_name[DEV_NAME_LEN]; - - ////////////////////////////////////////////////////////////////// - //methods - sangoma_interface(int wanpipe_number, int interface_number); - ~sangoma_interface(); - - int DoManagementCommand(sng_fd_t drv, wan_udp_hdr_t* packet); - - int init(callback_functions_t *callback_functions_ptr); - int run(); - int stop(); - - void bit_swap_a_buffer(unsigned char *data, int len); - - void get_te1_56k_stat(void); - void set_lb_modes(unsigned char type, unsigned char mode); - int loopback_command(u_int8_t type, u_int8_t mode, u_int32_t chan_map); - - int get_operational_stats(wanpipe_chan_stats_t *stats); - int flush_operational_stats (void); - - int enable_rbs_monitoring(); - char get_rbs(rbs_management_t *rbs_management_ptr); - char set_rbs(rbs_management_t *rbs_management_ptr); - - int sangoma_tdm_enable_rbs_events(int polls_per_second); - int sangoma_tdm_disable_rbs_events(); - - void set_idle_tx_data_buffer(unsigned char idle_tx_test_byte); - int get_open_handles_counter(); - - //remove all data from API driver's transmit queue - int flush_tx_buffers (void); - - sng_fd_t open_api_device(); - - unsigned char get_adapter_type(); - unsigned int get_sub_media(); - - void get_api_driver_version(PDRIVER_VERSION version); - - void get_card_customer_id(u_int8_t *customer_id); - - int transmit(wp_api_element_t *pTx); - int receive (wp_api_element_t *pRx); - - int sendCallerID(LPCTSTR name, LPCTSTR number); - int sendSwDTMF(char dtmf_char); - - ////////////////////////////////////////////////////////////////// - //TDM API calls - int sangoma_tdm_enable_rxhook_events(); - int sangoma_tdm_disable_rxhook_events(); - - /* DTMF Detection on A200 Analog card (SLIC) chip */ - int sangoma_tdm_enable_rm_dtmf_events(); - int sangoma_tdm_disable_rm_dtmf_events(); - - /* DTMF Detection on Octasic chip */ - int sangoma_tdm_enable_dtmf_events(uint8_t channel); - int sangoma_tdm_disable_dtmf_events(uint8_t channel); - - int sangoma_tdm_enable_ring_detect_events(); - int sangoma_tdm_disable_ring_detect_events(); - - int sangoma_tdm_enable_ring_trip_detect_events(); - int sangoma_tdm_disable_ring_trip_detect_events(); - - int sangoma_tdm_enable_ring_events(); - int sangoma_tdm_disable_ring_events(); - - int sangoma_tdm_txsig_onhook(); - int sangoma_tdm_txsig_offhook(); - - int sangoma_tdm_enable_tone_events(uint16_t tone_id); - int sangoma_tdm_disable_tone_events(); - - int sangoma_tdm_front_end_activate(); - int sangoma_tdm_front_end_deactivate(); - - int sangoma_tdm_control_wink_flash_events(int rxflashtime); - - /* get current state of the line - is it Connected or Disconnected */ - int sangoma_tdm_get_front_end_status(unsigned char *status); - - int sangoma_tdm_set_user_period(unsigned int usr_period); - ////////////////////////////////////////////////////////////////// - - int tdmv_api_ioctl(wanpipe_api_cmd_t *api_cmd); - - int reset_interface_state(); - - int start_ring_tone(); - int stop_ring_tone(); - - int start_congestion_tone(); - int stop_congestion_tone(); - - int start_busy_tone(); - int stop_busy_tone(); - - int stop_all_tones(); - - int start_dial_tone(); - int stop_dial_tone(); - - int start_ringing_phone(); - int stop_ringing_phone(); - - int fxo_go_off_hook(); - int fxo_go_on_hook(); - - //BRI only: - int sangoma_tdm_enable_bri_bchan_loopback(u_int8_t channel); - int sangoma_tdm_disable_bri_bchan_loopback(u_int8_t channel); - -}; - - -#if defined(__WINDOWS__) - -#define HANDLE_DEVICE_IOCTL_RESULT(bResult)\ -{ \ - if(bResult == 0){ \ - /* check message log */ \ - printf("%s(): Line: %d: Error!!\n", __FUNCTION__, __LINE__); \ - DecodeLastError(__FUNCTION__); \ - return 1; \ - } \ -} - -#endif /*__WINDOWS__*/ - -#endif//SANGOMA_INTERFACE_H - diff --git a/api/libsangoma/sample_cpp/.svn/tmp/tempfile.tmp b/api/libsangoma/sample_cpp/.svn/tmp/tempfile.tmp deleted file mode 100644 index 0684d04..0000000 --- a/api/libsangoma/sample_cpp/.svn/tmp/tempfile.tmp +++ /dev/null @@ -1,1054 +0,0 @@ -// -// Copyright (c) 1984-2008 Sangoma Technologies Inc. -// -// Author : David Rokhvarg -// -// sample.cpp: -// Sample C++ program for the following Sangoma APIs: -// 1. HDLC Streaming API -// 2. Bit Streaming API -// 3. "TDM VOICE API" -// -//Note 1: the header files are in "include" directory, -// your compiler should know where to look for -// the Header files. -// -// -// Target: Windows XP/2003 and later. Win32 Console. -// -// For Version beta-6,0,6,2 and later of the API driver (sdladrv.sys) -// - -////////////////////////////////////////////////////////////////// -//Device Names formed as follows: -// "\\\\.\\WANPIPE1_IF0" - corresponds to Group 1 on WANPIPE1 -// -// "\\\\.\\WANPIPE1_IF1" - corresponds to Group 2 on WANPIPE1 -// -// "\\\\.\\WANPIPE1_IF2" - corresponds to Group 3 on WANPIPE1 -// -// "\\\\.\\WANPIPE2_IF0" - corresponds to Group 1 on WANPIPE2 -// -// "\\\\.\\WANPIPE2_IF1" - corresponds to Group 2 on WANPIPE2 -// -//and so on... -// -//(WANPIPE1 is Port 1 on the first installed card) -////////////////////////////////////////////////////////////////// - -#define SET_DRV_CFG 0 - -#include "sangoma_port.h" -#include "sangoma_port_configurator.h" -#include "sangoma_interface.h" - -#ifndef MAX_PATH -#define MAX_PATH 100 -#endif - -#if !defined(__WINDOWS__) -#define EnterCriticalSection(arg) -#define LeaveCriticalSection(arg) -#define InitializeCriticalSection(arg) -#endif - - -//globals: -uint16_t wanpipe_number = 1; -uint16_t interface_number = 1; -uint8_t silent = 0; -uint16_t txlength = 128; -uint8_t Rx_to_Tx_loopback = 0; - -static char szTxFileName[MAX_PATH]; - -#if defined(__WINDOWS__) -//critical section for synchronizing access to 'stdout' between the threads -CRITICAL_SECTION PrintCriticalSection; -//critical section for TDM events -CRITICAL_SECTION TdmEventCriticalSection; -#endif - -////////////////////////////////////////////////////////////////// -callback_functions_t callback_functions; -//prototypes of the callback functions: -static int got_rx_data(void *sang_if_ptr, void *rx_data); -static void got_TdmApiEvent(void *sang_if_ptr, void *event_data); - -#if USE_STELEPHONY_API -//Sangoma Telephony API (Stelephony.dll) provides the following telephony services: -//1. FSK Caller ID detection for Analog FXO. -//2. Software DTMF detection. -static void FSKCallerIDEvent(void *callback_context, LPCTSTR Name, LPCTSTR CallerNumber, LPCTSTR CalledNumber, LPCTSTR DateTime); -static void DTMFEvent(void *callback_context, long Key); -static void Q931Event(void *callback_context, stelephony_q931_event *pQ931Event); -#endif - -////////////////////////////////////////////////////////////////// -typedef struct{ - void *sang_if_ptr; - wp_tdm_api_event_t event; -}TDM_API_EVENT_THREAD_PARAM; - -#if defined (__WINDWOS__) -DWORD TdmApiEventThreadFunc(LPDWORD lpdwParam); -#else -void *TdmApiEventThreadFunc(void *lpdwParam); -#endif -////////////////////////////////////////////////////////////////// -#define DBG_MAIN if(1)printf -#define ERR_MAIN if(1)printf -#define INFO_MAIN if(1)printf - -////////////////////////////////////////////////////////////////// -static int set_port_configration(); -////////////////////////////////////////////////////////////////// - -sangoma_interface* init(int wanpipe_number, int interface_number) -{ - sangoma_interface *sang_if = NULL; - - DBG_MAIN("init()\n"); - - callback_functions.got_rx_data = got_rx_data; - callback_functions.got_TdmApiEvent = got_TdmApiEvent; -#if USE_STELEPHONY_API - callback_functions.FSKCallerIDEvent = FSKCallerIDEvent; - callback_functions.DTMFEvent = DTMFEvent; - callback_functions.Q931Event = Q931Event; -#endif - - sang_if = new sangoma_interface(wanpipe_number, interface_number); - if(sang_if->init(&callback_functions)){ - delete sang_if; - return NULL; - } - - DBG_MAIN("init(): OK\n"); - return sang_if; -} - -void cleanup(sangoma_interface *sang_if) -{ - DBG_MAIN("cleanup()\n"); - - if(sang_if){ - delete sang_if; - } -} - -int start(sangoma_interface *sang_if) -{ - DBG_MAIN("start()\n"); - return sang_if->run(); -} - -void stop(sangoma_interface *sang_if) -{ - DBG_MAIN("stop()\n"); - sang_if->stop(); -} - -void PrintRxData(RX_DATA_STRUCT* pRx) -{ - api_header_t* pri; - USHORT datlen; - PUCHAR data; - static unsigned int rx_counter = 0; - - pri = &pRx->api_header; - - //NOTE: if running in BitStream mode, there will be TOO MUCH to print - datlen = pri->data_length; - data = pRx->data; - - rx_counter++; - if(silent){ - if((rx_counter % 1000) == 0){ - INFO_MAIN("Rx counter:%d, Rx datlen : %d. Data :\n", rx_counter, datlen); - } - return; - }else{ - INFO_MAIN("Rx counter:%d, Rx datlen : %d. Data :\n", rx_counter, datlen); - } - -#if 1 - for(int ln = 0; ln < datlen; ln++){ - if((ln % 20 == 0)){ - if(ln){ - INFO_MAIN("\n"); - } - INFO_MAIN("%04d ", ln/20); - } - INFO_MAIN("%02X ", data[ln]); - } - INFO_MAIN("\n"); -#endif -} - -static int got_rx_data(void *sang_if_ptr, void *rx_data) -{ - sangoma_interface *sang_if; - //Do something with data received from Sangoma interface. - // - //Fore example, transimit back everything what was received: - sang_if = (sangoma_interface*)sang_if_ptr; - - if(Rx_to_Tx_loopback == 1){ - sang_if->transmit((TX_RX_DATA_STRUCT*)rx_data); - } - - EnterCriticalSection(&PrintCriticalSection); - PrintRxData((RX_DATA_STRUCT*)rx_data); - LeaveCriticalSection(&PrintCriticalSection); - - return 0; -} - -static void got_TdmApiEvent(void *sang_if_ptr, void *event_data) -{ - TDM_API_EVENT_THREAD_PARAM *param = - (TDM_API_EVENT_THREAD_PARAM*)malloc(sizeof(TDM_API_EVENT_THREAD_PARAM)); - - if(param == NULL){ - ERR_MAIN("Failed to allocate memory for 'Event Thread parameter'!!\n"); - return; - } - - memcpy(¶m->event, event_data, sizeof(wp_tdm_api_event_t)); - param->sang_if_ptr = sang_if_ptr; - - ////////////////////////////////////////////////////////////////////// - //Handling of Events must be done OUTSIDE of the REAL-TIME Rx thread// - //because it may make take a lot of time. // - //Create a special thread for Event hadling. // - ////////////////////////////////////////////////////////////////////// -#if defined(__WINDOWS__) - DWORD dwThreadId; - - if(CreateThread( - NULL, /* no security attributes */ - 0, /* use default stack size */ - (LPTHREAD_START_ROUTINE)TdmApiEventThreadFunc, /* thread function */ - param, /* argument to thread function */ - 0, /* use default creation flags */ - &dwThreadId /* returns the thread identifier */ - ) == NULL){ - ERR_MAIN("Failed to create 'TdmApiEvent' thread!!\n"); - } -#else - //FIXME: implement the thread. Consider using sangoma_cthread class. - TdmApiEventThreadFunc(param); -#endif -} - -#ifdef __WINDWOS__ -DWORD TdmApiEventThreadFunc(LPDWORD lpdwParam) -#else -void *TdmApiEventThreadFunc(void *lpdwParam) -#endif -{ - TDM_API_EVENT_THREAD_PARAM *param; - sangoma_interface *sang_if; - wp_tdm_api_event_t *wp_tdm_api_event; - - EnterCriticalSection(&TdmEventCriticalSection); - - param = (TDM_API_EVENT_THREAD_PARAM*)lpdwParam; - - wp_tdm_api_event = ¶m->event; - sang_if = (sangoma_interface*)param->sang_if_ptr; - - DBG_MAIN( "TdmApiEventThreadFunc:: ifname: %s\n", sang_if->device_name); - - switch(wp_tdm_api_event->wp_tdm_api_event_type) - { - case WP_TDMAPI_EVENT_DTMF:/* DTMF detected by Hardware */ - DBG_MAIN("DTMF Event: Channel: %d, Digit: %c (Port: %s, Type:%s)!\n", - wp_tdm_api_event->channel, - wp_tdm_api_event->wp_tdm_api_event_dtmf_digit, - (wp_tdm_api_event->wp_tdm_api_event_dtmf_port == WAN_EC_CHANNEL_PORT_ROUT)?"ROUT":"SOUT", - (wp_tdm_api_event->wp_tdm_api_event_dtmf_type == WAN_EC_TONE_PRESENT)?"PRESENT":"STOP"); - - break; - - case WP_TDMAPI_EVENT_RXHOOK: - DBG_MAIN("RXHOOK Event: Channel: %d, %s! (0x%X)\n", - wp_tdm_api_event->channel, - WAN_EVENT_RXHOOK_DECODE(wp_tdm_api_event->wp_tdm_api_event_hook_state), - wp_tdm_api_event->wp_tdm_api_event_hook_state); - break; - - case WP_TDMAPI_EVENT_RING_DETECT: - DBG_MAIN("RING Event: %s! (0x%X)\n", - WAN_EVENT_RING_DECODE(wp_tdm_api_event->wp_tdm_api_event_ring_state), - wp_tdm_api_event->wp_tdm_api_event_ring_state); - break; - - case WP_TDMAPI_EVENT_RING_TRIP_DETECT: - DBG_MAIN("RING TRIP Event: %s! (0x%X)\n", - WAN_EVENT_RING_TRIP_DECODE(wp_tdm_api_event->wp_tdm_api_event_ring_state), - wp_tdm_api_event->wp_tdm_api_event_ring_state); - break; - - case WP_TDMAPI_EVENT_RBS: - DBG_MAIN("RBS Event: Channel: %d, 0x%X!\n", - wp_tdm_api_event->channel, - wp_tdm_api_event->wp_tdm_api_event_rbs_bits); - DBG_MAIN( "RX RBS: A:%1d B:%1d C:%1d D:%1d\n", - (wp_tdm_api_event->wp_tdm_api_event_rbs_bits & WAN_RBS_SIG_A) ? 1 : 0, - (wp_tdm_api_event->wp_tdm_api_event_rbs_bits & WAN_RBS_SIG_B) ? 1 : 0, - (wp_tdm_api_event->wp_tdm_api_event_rbs_bits & WAN_RBS_SIG_C) ? 1 : 0, - (wp_tdm_api_event->wp_tdm_api_event_rbs_bits & WAN_RBS_SIG_D) ? 1 : 0); - break; - - case WP_TDMAPI_EVENT_LINK_STATUS: - DBG_MAIN("Link Status Event: %s! (0x%X)\n", - WAN_EVENT_LINK_STATUS_DECODE(wp_tdm_api_event->wp_tdm_api_event_link_status), - wp_tdm_api_event->wp_tdm_api_event_link_status); - break; - - case WP_TDMAPI_EVENT_ALARM: - //FIXME: Alarm is NOT Link State - DBG_MAIN("New Link State: %s! (0x%X)\n", - (wp_tdm_api_event->wp_tdm_api_event_alarm == 0?"Connected":"Disconnected"), - wp_tdm_api_event->wp_tdm_api_event_alarm); - break; - - default: - ERR_MAIN("Unknown TDM API Event: %d\n", wp_tdm_api_event->wp_tdm_api_event_type); - break; - } - - free(lpdwParam); - LeaveCriticalSection(&TdmEventCriticalSection); - //Done with the Event, exit the thread. - return 0; -} - -int tx_file(sangoma_interface *sang_if) -{ - FILE *pFile; - unsigned int tx_counter=0, bytes_read_from_file, total_bytes_read_from_file=0; - TX_DATA_STRUCT local_tx_data; - - pFile = fopen( szTxFileName, "rb" ); - if( pFile == NULL){ - ERR_MAIN( "Can't open file: [%s]\n", szTxFileName ); - return 1; - } - - do - { - //read tx data from the file. if 'bytes_read_from_file != TX_LENGTH', end of file is reached - bytes_read_from_file = fread( local_tx_data.data, 1, txlength /* MTU size */, pFile ); - total_bytes_read_from_file += bytes_read_from_file; - - local_tx_data.api_header.data_length = txlength;//ALWAYS transmit MTU size over the bitstream - local_tx_data.api_header.operation_status = SANG_STATUS_TX_TIMEOUT; - - sang_if->transmit(&local_tx_data); - - tx_counter++; - - //DBG_MAIN("tx_counter: %u\r",tx_counter); - - }while(bytes_read_from_file == txlength); - - INFO_MAIN("Finished transmitting file \"%s\" (tx_counter: %u, total_bytes_read_from_file: %d)\n", - szTxFileName, tx_counter, total_bytes_read_from_file); - fclose( pFile ); - - return 0; -} - -static int get_user_number() -{ - int result = 1; - int retry_counter = 0; - - while(scanf("%d", &result) == 0){ - fflush( stdin ); - INFO_MAIN("\nError: Not a numerical input!!\n"); - if(retry_counter++ > 10){ - INFO_MAIN("giving up...\n"); - result = 1; - break; - } - }//while() - - INFO_MAIN("User input: %d\n", result); - return result; -} - -static int parse_command_line_args(int argc, char* argv[]) -{ - int i; -#define USAGE_STR \ -"\n\ -Usage: sample [-c] [-i] [-silent]\n\ -\n\ -Options:\n\ -\t-c number Wanpipe number: 1,2,3...\n\ -\t-i number Interface number 0,1,2,3,....\n\ -\t-silent Disable display of Rx data\n\ -\t-rx2tx All received data transmitted on the SAME interface\n\ -\n\ -Example: sample -c 1 -i 0\n" - - for(i = 0; i < argc; i++){ - - if(_stricmp(argv[i], "-silent") == 0){ - INFO_MAIN("disabling Rx data display...\n"); - silent = 1; - }else if(_stricmp(argv[i], "help") == 0 || _stricmp(argv[i], "?") == 0 || _stricmp(argv[i], "/?") == 0){ - INFO_MAIN(USAGE_STR); - return 1; - }else if(_stricmp(argv[i], "-c") == 0){ - if (i+1 > argc-1){ - INFO_MAIN("No Wanpipe number was provided!\n"); - return 1; - } - wanpipe_number = (uint16_t)atoi(argv[i+1]); - INFO_MAIN("Using wanpipe number %d\n", wanpipe_number); - }else if(_stricmp(argv[i], "-i") == 0){ - if (i+1 > argc-1){ - INFO_MAIN("No Interface number was provided!\n"); - return 1; - } - interface_number = (uint16_t)atoi(argv[i+1]); - INFO_MAIN("Using interface number %d\n", interface_number); - if(interface_number < 1){ - ERR_MAIN("Invalid interface number %d!!\n", interface_number); - return 1; - } - }else if(strcmp(argv[i], "-rx2tx") == 0){ - INFO_MAIN("enabling Rx to Tx loopback...\n"); - Rx_to_Tx_loopback = 1; - } - } - return 0; -} - - -int __cdecl main(int argc, char* argv[]) -{ - int rc, user_selection; - sangoma_interface *sang_if = NULL; - TX_DATA_STRUCT local_tx_data; - UCHAR tx_test_byte = 0; - - if(parse_command_line_args(argc, argv)){ - return 1; - } - - //////////////////////////////////////////////////////////////////////////// - //An OPTIONAL step of setting the port configuration to different values from - //what is set in "Device Manager"-->"Sangoma Hardware Abstraction Driver". -#if SET_DRV_CFG - //set port configration and exit - set_port_configration(); - return 0; -#endif - - //////////////////////////////////////////////////////////////////////////// - //initialize critical section objects - InitializeCriticalSection(&PrintCriticalSection); - InitializeCriticalSection(&TdmEventCriticalSection); - - //////////////////////////////////////////////////////////////////////////// - //User may provide Wanpipe Number and Interface Number as a command line arguments: - INFO_MAIN("Using wanpipe_number: %d, interface_number: %d\n", wanpipe_number, interface_number); - - sang_if = init(wanpipe_number, interface_number); - - if(sang_if == NULL){ - return 1; - } - - rc = start(sang_if); - if(rc){ - cleanup(sang_if); - return rc; - } - - do{ - EnterCriticalSection(&PrintCriticalSection); - INFO_MAIN("Press 'q' to quit the program.\n"); - INFO_MAIN("Press 't' to transmit data.\n"); - INFO_MAIN("Press 's' to get Operational Statistics.\n"); - INFO_MAIN("Press 'f' to reset (flush) Operational Statistics.\n"); - - if(sang_if->get_adapter_type() == WAN_MEDIA_T1 || sang_if->get_adapter_type() == WAN_MEDIA_E1){ - INFO_MAIN("Press 'a' to get T1/E1 alarms.\n"); - //RBS (CAS) commands - INFO_MAIN("Press 'g' to get RBS bits.\n"); - INFO_MAIN("Press 'r' to set RBS bits.\n"); - } - INFO_MAIN("Press 'i' to set Tx idle data buffer (BitStream only).\n"); - switch(sang_if->get_adapter_type()) - { - case WAN_MEDIA_T1: - //those commands valid only for T1 - INFO_MAIN("Press 'l' to send 'activate remote loop back' signal.\n"); - INFO_MAIN("Press 'd' to send 'deactivate remote loop back' signal.\n"); - break; - - case WAN_MEDIA_FXOFXS: - switch(sang_if->get_sub_media()) - { - case MOD_TYPE_FXS: - INFO_MAIN("Press 'e' to listen to test tones on a phone connected to the A200-FXS\n"); - INFO_MAIN("Press 'c' to ring/stop ring phone connected to the A200-FXS\n"); - INFO_MAIN("Press 'n' to enable/disable reception of ON/OFF Hook events on A200-FXS\n"); - INFO_MAIN("Press 'm' to enable DTMF events (on SLIC chip) on A200-FXS\n"); - INFO_MAIN("Press 'j' to enable/disable reception of Ring Trip events on A200-FXS\n"); - break; - - case MOD_TYPE_FXO: - INFO_MAIN("Press 'u' to enable/disable reception of Ring Detect events on A200-FXO\n"); - INFO_MAIN("Press 'h' to transmit ON/OFF hook signals on A200-FXO\n"); - INFO_MAIN("Press 'a' to get Line Status (Connected/Disconnected)\n"); - break; - } - break; - case WAN_MEDIA_BRI: - INFO_MAIN("Press 'k' to Activate/Deactivate ISDN BRI line\n"); - break; - } - INFO_MAIN("Press 'o' to enable DTMF events (on Octasic chip)\n"); - LeaveCriticalSection(&PrintCriticalSection); - - user_selection = tolower(_getch()); - switch(user_selection) - { - case 'q': - break; - case 't': - int cnt; - for(cnt = 0; cnt < 1; cnt++){ - local_tx_data.api_header.data_length = txlength; - local_tx_data.api_header.operation_status = SANG_STATUS_TX_TIMEOUT; - - //set the actual data for transmission - memset(local_tx_data.data, tx_test_byte, txlength); - - sang_if->transmit(&local_tx_data); - - tx_test_byte++; - } - break; - case 's': - { - aft_net_device_stats_t stats; - sang_if->get_operational_stats(&stats); - } - break; - case 'f': - sang_if->flush_operational_stats(); - break; - case 'v': - { - DRIVER_VERSION version; - //read API driver version - sang_if->get_api_driver_version(&version); - INFO_MAIN("\nAPI version\t: %d,%d,%d,%d\n", - version.major, version.minor, version.minor1, version.minor2); - - unsigned char customer_id = 0; - sang_if->get_card_customer_id(&customer_id); - INFO_MAIN("\ncustomer_id\t: 0x%02X\n", customer_id); - } - break; - case 'a': - unsigned char cFeStatus; - - switch(sang_if->get_adapter_type()) - { - case WAN_MEDIA_T1: - case WAN_MEDIA_E1: - //read T1/E1/56k alarms - sang_if->get_te1_56k_stat(); - break; - - case WAN_MEDIA_FXOFXS: - switch(sang_if->get_sub_media()) - { - case MOD_TYPE_FXO: - cFeStatus = 0; - sang_if->sangoma_tdm_get_front_end_status(&cFeStatus); - INFO_MAIN("cFeStatus: %s (%d)\n", FE_STATUS_DECODE(cFeStatus), cFeStatus); - break; - } - } - break; - case 'l': - //Activate Line/Remote Loopback mode: - sang_if->set_lb_modes(WAN_TE1_LINELB_MODE, WAN_TE1_LB_ENABLE); - //Activate Diagnostic Digital Loopback mode: - //sang_if->set_lb_modes(WAN_TE1_DDLB_MODE, WAN_TE1_LB_ENABLE); - //sang_if->set_lb_modes(WAN_TE1_PAYLB_MODE, WAN_TE1_LB_ENABLE); - break; - case 'd': - //Deactivate Line/Remote Loopback mode: - sang_if->set_lb_modes(WAN_TE1_LINELB_MODE, WAN_TE1_LB_DISABLE); - //Deactivate Diagnostic Digital Loopback mode: - //sang_if->set_lb_modes(WAN_TE1_DDLB_MODE, WAN_TE1_LB_DISABLE); - //sang_if->set_lb_modes(WAN_TE1_PAYLB_MODE, WAN_TE1_LB_DISABLE); - break; - - - case 'g'://read RBS bits - { - rbs_management_t rbs_management_struct = {0,0}; - - sang_if->enable_rbs_monitoring(); - - INFO_MAIN("Type Channel number and press :\n"); - rbs_management_struct.channel = get_user_number();//channels (Time Slots). Valid values: 1 to 24. - if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 24){ - INFO_MAIN("Invalid RBS Channel number!\n"); - break; - } - sang_if->get_rbs(&rbs_management_struct); - } - break; - case 'r'://set RBS bits - { - static rbs_management_t rbs_management_struct = {0,0}; - - sang_if->enable_rbs_monitoring(); - - INFO_MAIN("Type Channel number and press :\n"); - rbs_management_struct.channel = get_user_number();//channels (Time Slots). Valid values: 1 to 24. - if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 24){ - INFO_MAIN("Invalid RBS Channel number!\n"); - break; - } - /* bitmap - set as needed: WAN_RBS_SIG_A | WAN_RBS_SIG_B | WAN_RBS_SIG_C | WAN_RBS_SIG_D; - - In this example make bits A and B to change each time, - so it's easy to see the change on the receiving side. - */ - if(rbs_management_struct.ABCD_bits == WAN_RBS_SIG_A){ - rbs_management_struct.ABCD_bits = WAN_RBS_SIG_B; - }else{ - rbs_management_struct.ABCD_bits = WAN_RBS_SIG_A; - } - sang_if->set_rbs(&rbs_management_struct); - } - break; - case 'i': - sang_if->set_idle_tx_data_buffer(0x00); - break; - case 'c': -user_retry_ring_e_d: - INFO_MAIN("Press 'e' to START ring, 'd' to STOP ring, 't' to Toggle\n"); - INFO_MAIN("\n"); - user_selection = tolower(_getch()); - switch(user_selection) - { - case 'e': - INFO_MAIN("Starting Ring ...%c\n",user_selection); - sang_if->start_ringing_phone();//start - break; - case 'd': - INFO_MAIN("Stopping Ring ... %c\n",user_selection); - sang_if->stop_ringing_phone();//stop - break; - case 't': - { - int x; - for (x=0;x<500;x++) { - sang_if->start_ringing_phone(); - sang_if->start_ringing_phone(); - //sangoma_msleep(500); - sang_if->stop_ringing_phone();//stop - sang_if->stop_ringing_phone();//stop - //sangoma_msleep(500); - sang_if->start_busy_tone(); - sangoma_msleep(50); - sang_if->stop_all_tones(); - sangoma_msleep(50); - } - } - break; - default: - goto user_retry_ring_e_d; - break; - } - break; - case 'e': - INFO_MAIN("Press 'e' to START a Tone, 'd' to STOP a Tone.\n"); - INFO_MAIN("\n"); - - switch(tolower(_getch())) - { - case 'e': - INFO_MAIN("Press 'r' for Ring Tone, 'd' for Dial Tone, 'b' for Busy Tone, 'c' for Congestion Tone.\n"); - INFO_MAIN("\n"); - switch(tolower(_getch())) - { - case 'r': - sang_if->start_ring_tone(); - break; - case 'd': - sang_if->start_dial_tone(); - break; - case 'b': - sang_if->start_busy_tone(); - break; - case 'c': - default: - sang_if->start_congestion_tone(); - break; - } - break; - - case 'd': - default: - sang_if->stop_all_tones();//stop all tones - } - break; - case 'n': - INFO_MAIN("Press 'e' to ENABLE Rx Hook Events, 'd' to DISABLE Rx Hook Events.\n"); - INFO_MAIN("\n"); - switch(tolower(_getch())) - { - case 'e': - sang_if->sangoma_tdm_enable_rxhook_events(); - break; - case 'd': - default: - sang_if->sangoma_tdm_disable_rxhook_events(); - } - break; - case 'm': - //Enable/Disable DTMF events on SLIC chip. - //On Analog (A200) card only. - INFO_MAIN("Press 'e' to ENABLE Remora DTMF Events, 'd' to DISABLE Remora DTMF Events.\n"); - INFO_MAIN("\n"); - switch(tolower(_getch())) - { - case 'e': - sang_if->sangoma_tdm_enable_rm_dtmf_events(); - break; - case 'd': - default: - sang_if->sangoma_tdm_disable_rm_dtmf_events(); - } - break; - case 'o': - { - //Enable DTMF events on Octasic chip. - //For both Analog (A200) and T1/E1 (A104D) cards, but only if the chip is present. - INFO_MAIN("Press 'e' to ENABLE Octasic DTMF Events, 'd' to DISABLE Octasic DTMF Events.\n"); - uint8_t channel; - - INFO_MAIN("\n"); - switch(tolower(_getch())) - { - case 'e': - INFO_MAIN("Type Channel number and press :\n"); - channel = (uint8_t)get_user_number();//channels (Time Slots). Valid values: 1 to 31. - - sang_if->sangoma_tdm_enable_dtmf_events(channel); - break; - case 'd': - default: - INFO_MAIN("Type Channel number and press :\n"); - channel = (uint8_t)get_user_number();//channels (Time Slots). Valid values: 1 to 31. - - sang_if->sangoma_tdm_disable_dtmf_events(channel); - } - } - break; - case 'u': - //Enable/Disable Ring Detect events on FXO. - INFO_MAIN("Press 'e' to ENABLE Rx Ring Detect Events, 'd' to DISABLE Rx Ring Detect Events.\n"); - INFO_MAIN("\n"); - switch(tolower(_getch())) - { - case 'e': - sang_if->sangoma_tdm_enable_ring_detect_events(); - break; - case 'd': - default: - sang_if->sangoma_tdm_disable_ring_detect_events(); - } - break; - case 'j': - //Enable/Disable Ring Trip events on FXS. - INFO_MAIN("Press 'e' to ENABLE Rx Ring Trip Events, 'd' to DISABLE Rx Ring Trip Events.\n"); - INFO_MAIN("\n"); - switch(tolower(_getch())) - { - case 'e': - sang_if->sangoma_tdm_enable_ring_trip_detect_events(); - break; - case 'd': - default: - sang_if->sangoma_tdm_disable_ring_trip_detect_events(); - } - break; - case 'h': - INFO_MAIN("Press 'e' to transmit OFF hook signal, 'd' to transmit ON hook signal.\n"); - INFO_MAIN("\n"); - switch(tolower(_getch())) - { - case 'e': - sang_if->fxo_go_off_hook(); - break; - case 'd': - default: - sang_if->fxo_go_on_hook(); - } - break; - case 'k': - INFO_MAIN("Press 'e' to Activate, 'd' to De-Activate line.\n"); - INFO_MAIN("\n"); - switch(tolower(_getch())) - { - case 'e': - sang_if->sangoma_tdm_front_end_activate(); - break; - case 'd': - default: - sang_if->sangoma_tdm_front_end_deactivate(); - } - break; - default: - INFO_MAIN("Invalid command.\n"); - } - - }while(user_selection != 'q'); - - stop(sang_if); - cleanup(sang_if); - - return 0; -} - -#if SET_DRV_CFG -static int set_port_configration() -{ - int rc = 0, is_te1_card = 0, user_selection; - hardware_info_t hardware_info; - port_cfg_t port_cfg; - - sangoma_port_configurator *sng_port_cfg_obj; - - sng_port_cfg_obj = new sangoma_port_configurator(); - if(sng_port_cfg_obj == NULL || sng_port_cfg_obj->init(wanpipe_number)){ - return 2; - } - - rc = sng_port_cfg_obj->get_hardware_info(&hardware_info); - if(rc == SANG_STATUS_SUCCESS){ - - INFO_MAIN("card_model : %s (0x%08X)\n", - SDLA_ADPTR_NAME(hardware_info.card_model), hardware_info.card_model); - INFO_MAIN("firmware_version\t: 0x%02X\n", hardware_info.firmware_version); - INFO_MAIN("pci_bus_number\t\t: %d\n", hardware_info.pci_bus_number); - INFO_MAIN("pci_slot_number\t\t: %d\n", hardware_info.pci_slot_number); - INFO_MAIN("max_hw_ec_chans\t\t: %d\n", hardware_info.max_hw_ec_chans); - INFO_MAIN("port_number\t\t: %d\n", hardware_info.port_number); - - }else{ - delete sng_port_cfg_obj; - return 3; - } - - -#if defined(__WINDWOWS__) - rc = sng_port_cfg_obj->open_port_registry_key(&hardware_info); - if(rc != SANG_STATUS_SUCCESS){ - delete sng_port_cfg_obj; - return 3; - } -#endif - - memset(&port_cfg, 0x00, sizeof(port_cfg_t)); - //get current configuration - rc = sng_port_cfg_obj->get_configration(&port_cfg); - if(rc != SANG_STATUS_SUCCESS){ - delete sng_port_cfg_obj; - printf("Error: Failed to obtain configuration!\n"); - return 3; - } - - port_cfg.num_of_ifs=1; - port_cfg.if_cfg[0].magic = ROUTER_MAGIC; -#if 0 - sprintf(port_cfg.if_cfg[0].usedby,"TDM_VOICE_API"); -#else - sprintf(port_cfg.if_cfg[0].usedby,"TDM_VOICE_DCHAN"); -#endif - port_cfg.if_cfg[0].active_ch=0x00FFFFFF; - port_cfg.if_cfg[0].hdlc_streaming=1; - sprintf(port_cfg.if_cfg[0].name, "w%dg1",wanpipe_number); - - sng_port_cfg_obj->print_port_cfg_structure(&port_cfg); - - switch(hardware_info.card_model) - { - case A101_ADPTR_1TE1: - case A101_ADPTR_2TE1: - case A104_ADPTR_4TE1: - case A108_ADPTR_8TE1: - is_te1_card = 1; - break; - } - - - if(is_te1_card){ - wandev_conf_t *wandev_conf = &port_cfg.wandev_conf; - sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; - - INFO_MAIN("\n"); - INFO_MAIN("Press 't' to set T1 configration.\n"); - INFO_MAIN("Press 'e' to set E1 configration.\n"); - -try_again: - user_selection = tolower(_getch()); - - switch(user_selection) - { - case 't'://T1 - - FE_MEDIA(sdla_fe_cfg) = WAN_MEDIA_T1; - FE_LCODE(sdla_fe_cfg) = WAN_LCODE_B8ZS; - FE_FRAME(sdla_fe_cfg) = WAN_FR_ESF; - - FE_CLK(sdla_fe_cfg) = WAN_MASTER_CLK;//WAN_NORMAL_CLK; - //FE_REFCLK(sdla_fe_cfg) = 0; //optional - FE_HIMPEDANCE_MODE(sdla_fe_cfg) = WANOPT_NO; - - FE_SIG_MODE(sdla_fe_cfg) = WAN_TE1_SIG_CCS; - FE_LBO(sdla_fe_cfg) = WAN_T1_LBO_0_DB; - - FE_TDMV_LAW(sdla_fe_cfg) = WAN_TDMV_MULAW; - break; - case 'e'://E1 - - FE_MEDIA(sdla_fe_cfg) = WAN_MEDIA_E1; - FE_LCODE(sdla_fe_cfg) = WAN_LCODE_HDB3; - FE_FRAME(sdla_fe_cfg) = WAN_FR_CRC4; - - FE_CLK(sdla_fe_cfg) = WAN_NORMAL_CLK; - //FE_REFCLK(sdla_fe_cfg) = 0;//optional - FE_HIMPEDANCE_MODE(sdla_fe_cfg) = WANOPT_NO; - - FE_SIG_MODE(sdla_fe_cfg) = WAN_TE1_SIG_CCS; - FE_LBO(sdla_fe_cfg) = WAN_E1_120; - - FE_TDMV_LAW(sdla_fe_cfg) = WAN_TDMV_ALAW; - break; - default: - INFO_MAIN("Invalid command %c.\n",user_selection); - goto try_again; - break; - }//switch(user_selection) - - if(user_selection == 't' || user_selection == 'e'){ - //as an EXAMPLE, set the default configration for T1 or E1: - rc = sng_port_cfg_obj->set_default_configuration(&port_cfg); - } - - }//if(is_te1_card) - - if(sng_port_cfg_obj != NULL){ - delete sng_port_cfg_obj; - } - - return rc; -} -#endif // SET_DRV_CFG - -#if USE_STELEPHONY_API -static void FSKCallerIDEvent(void *callback_context, - LPCTSTR Name, LPCTSTR CallerNumber, - LPCTSTR CalledNumber, LPCTSTR DateTime) -{ - //The "sangoma_interface" object was registered as the callback context in StelSetup() call. - sangoma_interface *sang_if = (sangoma_interface*)callback_context; - - INFO_MAIN("\n%s: %s() - Start\n", sang_if->device_name, __FUNCTION__); - - if(Name){ - INFO_MAIN("Name: %S\n", Name); - } - if(CallerNumber){ - INFO_MAIN("CallerNumber: %S\n", CallerNumber); - } - if(CalledNumber){ - INFO_MAIN("CalledNumber: %S\n", CalledNumber); - } - if(DateTime){ - INFO_MAIN("DateTime: %S\n", DateTime); - } - - INFO_MAIN("%s() - End\n\n", __FUNCTION__); -} - -static void DTMFEvent(void *callback_context, long Key) -{ - //The "sangoma_interface" object was registered as the callback context in StelSetup() call. - sangoma_interface *sang_if = (sangoma_interface*)callback_context; - - INFO_MAIN("\n%s: %s() - Start\n", sang_if->device_name, __FUNCTION__); - - INFO_MAIN("Key: %c\n", Key); - - INFO_MAIN("%s() - End\n\n", __FUNCTION__); -} - -static void Q931Event(void *callback_context, stelephony_q931_event *pQ931Event) -{ - //The "sangoma_interface" object was registered as the callback context in StelSetup() call. - sangoma_interface *sang_if = (sangoma_interface*)callback_context; - - //INFO_MAIN("\n%s: %s() - Start\n", sang_if->device_name, __FUNCTION__); -#if 0 - INFO_MAIN("\nFound %d bytes of data: ", pQ931Event->dataLength); - for (int i=0; i < pQ931Event->dataLength;i++){ - INFO_MAIN("%02X ",pQ931Event->data[i]); - } - INFO_MAIN("\n"); -#endif - - INFO_MAIN("Message Received on: %02d/%02d/%02d @ %02d:%02d:%02d.%02d\n",pQ931Event->tv.wMonth,pQ931Event->tv.wDay,pQ931Event->tv.wYear, - pQ931Event->tv.wHour,pQ931Event->tv.wMinute,pQ931Event->tv.wSecond,pQ931Event->tv.wMilliseconds); - - INFO_MAIN("Message Type is: %s\n",pQ931Event->msg_type); - INFO_MAIN("Length of Call Reference Field is: %d\n", pQ931Event->len_callRef); - INFO_MAIN("Message Call Reference is : 0X%s\n",pQ931Event->callRef); - - if (pQ931Event->cause_code > 0){ - INFO_MAIN("Cause code found = %d \n", pQ931Event->cause_code); - } - - if (pQ931Event->chan > 0){ - INFO_MAIN("B-channel used = %d \n", pQ931Event->chan); - } - - if (pQ931Event->calling_num_digits_count > 0 ){ - INFO_MAIN("Found %d digits for calling number \n", pQ931Event->calling_num_digits_count); - INFO_MAIN("Presentation indicator is = %d \n",pQ931Event->calling_num_presentation); - INFO_MAIN("Screening indicator is = %d \n",pQ931Event->calling_num_screening_ind); - INFO_MAIN("Calling number is = %s\n",pQ931Event->calling_num_digits); - } - - if (pQ931Event->called_num_digits_count > 0 ){ - INFO_MAIN("Found %d digits for called number \n", pQ931Event->called_num_digits_count); - INFO_MAIN("Called number is = %s\n",pQ931Event->called_num_digits); - } - - if (pQ931Event->rdnis_digits_count > 0 ){ - INFO_MAIN("Found %d digits for RDNIS\n", pQ931Event->rdnis_digits_count); - INFO_MAIN("RDNIS is = %s\n",pQ931Event->rdnis_string); - } - //INFO_MAIN("%s() - End\n\n", __FUNCTION__); -} - -#endif diff --git a/api/libsangoma/sample_cpp/sample.cpp b/api/libsangoma/sample_cpp/sample.cpp index 7570130..63e910f 100644 --- a/api/libsangoma/sample_cpp/sample.cpp +++ b/api/libsangoma/sample_cpp/sample.cpp @@ -314,12 +314,9 @@ static void got_tdm_api_event(void *sang_if_ptr, void *event_data) break; case WP_API_EVENT_RBS: - DBG_MAIN("RBS Event: New bits: 0x%X!\n", wp_tdm_api_event->wp_api_event_rbs_bits); - DBG_MAIN( "RX RBS: A:%1d B:%1d C:%1d D:%1d\n", - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_A) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_B) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_C) ? 1 : 0, - (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_D) ? 1 : 0); + DBG_MAIN("RBS Event: New bits: 0x%X!\n", wp_tdm_api_event->wp_api_event_rbs_bits); + DBG_MAIN("RX RBS/CAS: "); + wp_print_rbs_cas_bits(wp_tdm_api_event->wp_api_event_rbs_bits); break; case WP_API_EVENT_LINK_STATUS: @@ -922,10 +919,21 @@ int __cdecl main(int argc, char* argv[]) INFO_MAIN("Type Channel number and press :\n"); rbs_management_struct.channel = get_user_decimal_number();//channels (Time Slots). Valid values: 1 to 24. - if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 24){ - INFO_MAIN("Invalid RBS Channel number!\n"); - break; + + if(WAN_MEDIA_T1 == sang_if->get_adapter_type()){ + if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 24){ + INFO_MAIN("Invalid T1 RBS Channel number!\n"); + break; + } } + + if(WAN_MEDIA_E1 == sang_if->get_adapter_type()){ + if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 31){ + INFO_MAIN("Invalid E1 CAS Channel number!\n"); + break; + } + } + sang_if->get_rbs(&rbs_management_struct); } break; @@ -941,15 +949,27 @@ int __cdecl main(int argc, char* argv[]) case WAN_MEDIA_E1: { static rbs_management_t rbs_management_struct = {0,0}; + int chan_no; sang_if->enable_rbs_monitoring(); INFO_MAIN("Type Channel number and press :\n"); - rbs_management_struct.channel = get_user_decimal_number();//channels (Time Slots). Valid values: 1 to 24. - if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 24){ - INFO_MAIN("Invalid RBS Channel number!\n"); - break; + rbs_management_struct.channel = chan_no = get_user_decimal_number();//channels (Time Slots). Valid values: T1: 1 to 24; E1: 1-15 and 17-31. + + if(WAN_MEDIA_T1 == sang_if->get_adapter_type()){ + if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 24){ + INFO_MAIN("Invalid T1 RBS Channel number!\n"); + break; + } } + + if(WAN_MEDIA_E1 == sang_if->get_adapter_type()){ + if(rbs_management_struct.channel < 1 || rbs_management_struct.channel > 31){ + INFO_MAIN("Invalid E1 CAS Channel number!\n"); + break; + } + } + /* bitmap - set as needed: WAN_RBS_SIG_A | WAN_RBS_SIG_B | WAN_RBS_SIG_C | WAN_RBS_SIG_D; In this example make bits A and B to change each time, @@ -961,6 +981,51 @@ int __cdecl main(int argc, char* argv[]) rbs_management_struct.ABCD_bits = WAN_RBS_SIG_A; } sang_if->set_rbs(&rbs_management_struct); + +#if 0 +#define RBS_CAS_TX_AND_WAIT(chan, abcd) \ +{ \ + rbs_management_struct.channel = chan; \ + rbs_management_struct.ABCD_bits = abcd; \ + INFO_MAIN("Press any key to transmit bits:"); \ + wp_print_rbs_cas_bits(abcd); \ + _getch(); \ + sang_if->set_rbs(&rbs_management_struct); \ +} + + //for ESF lines test all all combinations of 4 bits + RBS_CAS_TX_AND_WAIT(chan_no, 0x00); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_B); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_B); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_C); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_C); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_B | WAN_RBS_SIG_C); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_B | WAN_RBS_SIG_C); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_B | WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_B | WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_C | WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_C | WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_B | WAN_RBS_SIG_C | WAN_RBS_SIG_D); + + RBS_CAS_TX_AND_WAIT(chan_no, WAN_RBS_SIG_A | WAN_RBS_SIG_B | WAN_RBS_SIG_C | WAN_RBS_SIG_D); +#endif } default: INFO_MAIN("Command invalid for card type\n"); @@ -1141,7 +1206,7 @@ user_retry_ring_e_d: default: sang_if->fxo_go_on_hook(); } - }else if(sang_if->get_sub_media()==MOD_TYPE_FXS ) { + }else if(sang_if->get_sub_media() == MOD_TYPE_FXS) { INFO_MAIN("Press 'f' for forward, 'r' to for reverse.\n"); INFO_MAIN("\n"); switch(tolower(_getch())) @@ -1153,10 +1218,42 @@ user_retry_ring_e_d: sang_if->tdm_set_rm_polarity(1); break; default: - //toggle it - sang_if->tdm_set_rm_polarity(1); - sang_if->tdm_set_rm_polarity(0); - } + //toggle polarity + int polarity_wait, two_second_ring_repetion_counter; + + INFO_MAIN("Type Polarity Reverse/Forward delay and press :\n"); + polarity_wait = get_user_decimal_number(); + /* polarity_wait of 30 ms will ring Analog phone or FXO + * polarity_wait of 400 ms will cause Polarity reversal event on FXO */ + INFO_MAIN("User specified Polarity Reverse/Forward delay: %d. Press to continue.\n", polarity_wait); + _getch(); + + two_second_ring_repetion_counter = 2000 / (polarity_wait * 2); + INFO_MAIN("two_second_ring_repetion_counter: %d. Press to continue.\n", two_second_ring_repetion_counter); + _getch(); + + for (int ii = 0; ii < two_second_ring_repetion_counter; ii++) { + INFO_MAIN("Reversing polarity %d...\n", ii); + sang_if->tdm_set_rm_polarity(1); + sangoma_msleep(polarity_wait); + INFO_MAIN("Forwarding polarity %d...\n", ii); + sang_if->tdm_set_rm_polarity(0); + sangoma_msleep(polarity_wait); + } + + //sleep 4 seconds between the rings + INFO_MAIN("4 seconds between the rings...\n"); + sangoma_msleep(4000); + + for (int ii = 0; ii < two_second_ring_repetion_counter; ii++) { + INFO_MAIN("Reversing polarity %d...\n", ii); + sang_if->tdm_set_rm_polarity(1); + sangoma_msleep(polarity_wait); + INFO_MAIN("Forwarding polarity %d...\n", ii); + sang_if->tdm_set_rm_polarity(0); + sangoma_msleep(polarity_wait); + }//for() + }//switch() } break; case 'k': @@ -1174,9 +1271,11 @@ user_retry_ring_e_d: } }else if(sang_if->get_adapter_type()== WAN_MEDIA_FXOFXS) { if(sang_if->get_sub_media()==MOD_TYPE_FXS) { + printf("calling tdm_txsig_kewl()...\n"); sang_if->tdm_txsig_kewl(); sangoma_msleep(5000); //to restore line current after txsig kewl + printf("restoring line current after txsig kewl...\n"); sang_if->tdm_txsig_offhook(); } } @@ -1289,7 +1388,11 @@ user_retry_ring_e_d: static int set_port_configuration() { int rc = 0, user_selection; - int is_te1_card = 0, is_analog_card = 0; + /* On hybrid cards such as B700, ports can be of different types - + * some are Analog some Digital. + * On non-hybrid cards such as A108, all ports are of the same + * type - T1/E1. */ + int is_te1_port = 0, is_analog_port = 0, is_bri_port = 0, is_serial_port = 0; hardware_info_t hardware_info; port_cfg_t port_cfg; @@ -1305,7 +1408,7 @@ static int set_port_configuration() if(rc == SANG_STATUS_SUCCESS){ - INFO_MAIN("card_model : %s (0x%08X)\n", + INFO_MAIN("card_model : %s (%d)\n", SDLA_ADPTR_NAME(hardware_info.card_model), hardware_info.card_model); INFO_MAIN("firmware_version\t: 0x%02X\n", hardware_info.firmware_version); INFO_MAIN("pci_bus_number\t\t: %d\n", hardware_info.pci_bus_number); @@ -1319,6 +1422,7 @@ static int set_port_configuration() return 3; } + // very important to zero out the configuration structure memset(&port_cfg, 0x00, sizeof(port_cfg_t)); switch(hardware_info.card_model) @@ -1327,18 +1431,45 @@ static int set_port_configuration() case A101_ADPTR_2TE1: case A104_ADPTR_4TE1: case A108_ADPTR_8TE1: - is_te1_card = 1; + is_te1_port = 1; + INFO_MAIN("T1/E1 Port on non-Hybrid Card (A10[1/2/4/8]).\n"); break; case A200_ADPTR_ANALOG: case A400_ADPTR_ANALOG: - is_analog_card = 1; + case AFT_ADPTR_A600: //B600 + is_analog_port = 1; + INFO_MAIN("Analog Port on non-Hybrid Card (A200/A400).\n"); + break; + case AFT_ADPTR_ISDN: + is_bri_port = 1; + INFO_MAIN("BRI Port on non-Hybrid Card (A500).\n"); break; case AFT_ADPTR_FLEXBRI: //B700, a hybrid card - may have both ISDN BRI and Analog ports + if (hardware_info.bri_modtype == MOD_TYPE_NT || + hardware_info.bri_modtype == MOD_TYPE_TE) { + is_bri_port = 1; + INFO_MAIN("BRI Port on Hybrid Card.\n"); + } else { + is_analog_port = 1; + INFO_MAIN("Analog Port on Hybrid Card.\n"); + } + break; + case AFT_ADPTR_2SERIAL_V35X21: /* AFT-A142 2 Port V.35/X.21 board */ + case AFT_ADPTR_4SERIAL_V35X21: /* AFT-A144 4 Port V.35/X.21 board */ + case AFT_ADPTR_2SERIAL_RS232: /* AFT-A142 2 Port RS232 board */ + case AFT_ADPTR_4SERIAL_RS232: /* AFT-A144 4 Port RS232 board */ + is_serial_port = 1; + INFO_MAIN("Serial Port on non-Hybrid Card (A14[2/4]).\n"); + break; + default: + INFO_MAIN("Warning: configuration of card model 0x%08X can not be changed!\n", + hardware_info.card_model); break; } - if(is_te1_card){ + + if (is_te1_port) { INFO_MAIN("\n"); INFO_MAIN("Press 't' to set T1 configration.\n"); INFO_MAIN("Press 'e' to set E1 configration.\n"); @@ -1361,17 +1492,20 @@ try_again: default: INFO_MAIN("Invalid command %c.\n",user_selection); goto try_again; - break; - }//switch(user_selection) - }//if(is_te1_card) - if(is_analog_card){ + }//switch(user_selection) + }//if(is_te1_port) + + if (is_analog_port) { //read current configuration: if(sng_port_cfg_obj->get_configration(&port_cfg)){ rc = 1; }else{ //print the current configuration: sng_port_cfg_obj->print_port_cfg_structure(&port_cfg); +#if 0 + sng_port_cfg_obj->initialize_interface_mtu_mru(&port_cfg, 16, 16); +#endif #if 0 //as an EXAMPLE, enable Loop Current Monitoring for Analog FXO: rc=sng_port_cfg_obj->control_analog_rm_lcm(&port_cfg, 1); @@ -1381,9 +1515,17 @@ try_again: rc=sng_port_cfg_obj->set_analog_opermode(&port_cfg, "TBR21"); #endif } - }//if(is_analog_card) - - if(!is_te1_card && !is_analog_card){ + }//if(is_analog_port) + + if (is_bri_port) { + rc=sng_port_cfg_obj->initialize_bri_tdm_span_voice_api_configration_structure(&port_cfg,&hardware_info,program_settings.wanpipe_number); + } + + if (is_serial_port) { + rc=sng_port_cfg_obj->initialize_serial_api_configration_structure(&port_cfg,&hardware_info,program_settings.wanpipe_number); + } + + if(!is_te1_port && !is_analog_port && !is_bri_port && !is_serial_port){ INFO_MAIN("Unsupported Card %d\n", hardware_info.card_model); rc = 1; } diff --git a/api/libsangoma/sample_cpp/sample.h b/api/libsangoma/sample_cpp/sample.h index 80bd6c2..925e88e 100644 --- a/api/libsangoma/sample_cpp/sample.h +++ b/api/libsangoma/sample_cpp/sample.h @@ -64,6 +64,15 @@ typedef struct{ }callback_functions_t; +static void wp_print_rbs_cas_bits(unsigned int abcd) +{ + printf("A:%1d B:%1d C:%1d D:%1d\n", + (abcd & WAN_RBS_SIG_A) ? 1 : 0, + (abcd & WAN_RBS_SIG_B) ? 1 : 0, + (abcd & WAN_RBS_SIG_C) ? 1 : 0, + (abcd & WAN_RBS_SIG_D) ? 1 : 0); +} + #if defined (__WINDOWS__) static void DecodeLastError(LPSTR lpszFunction) { diff --git a/api/libsangoma/sample_cpp/sample.vcproj b/api/libsangoma/sample_cpp/sample.vcproj index 37e16da..bffe56e 100644 --- a/api/libsangoma/sample_cpp/sample.vcproj +++ b/api/libsangoma/sample_cpp/sample.vcproj @@ -46,7 +46,7 @@ cfg.te_cfg; wan_tdmv_conf_t *tdmv_cfg = &wandev_conf->tdmv_conf; wanif_conf_t *wanif_cfg = &port_cfg->if_cfg[0]; + wan_xilinx_conf_t *aft_cfg = &wandev_conf->u.aft; // T1 parameters FE_MEDIA(sdla_fe_cfg) = WAN_MEDIA_T1; @@ -385,6 +388,7 @@ int sangoma_port_configurator::initialize_t1_tdm_span_voice_api_configration_str FE_CLK(sdla_fe_cfg) = WAN_MASTER_CLK; #endif + // API parameters port_cfg->num_of_ifs = 1; wandev_conf->config_id = WANCONFIG_AFT_TE1; @@ -395,6 +399,12 @@ int sangoma_port_configurator::initialize_t1_tdm_span_voice_api_configration_str wandev_conf->pci_bus_no = hardware_info->pci_bus_number; wandev_conf->card_type = WANOPT_AFT; //m_DeviceInfoData.card_model; +#if SPAN_TX_ONLY_IRQ + aft_cfg->span_tx_only_irq = 1; +#else + aft_cfg->span_tx_only_irq = 0; +#endif + wanif_cfg->magic = ROUTER_MAGIC; wanif_cfg->active_ch = 0x00FFFFFF;//channels 1-24 (starting from bit zero) sprintf(wanif_cfg->usedby,"TDM_SPAN_VOICE_API"); @@ -429,15 +439,16 @@ int sangoma_port_configurator::initialize_t1_tdm_span_voice_api_configration_str return 0; } - +#define BUILD_FOR_PRI 1 int sangoma_port_configurator::initialize_e1_tdm_span_voice_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span) { wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; wan_tdmv_conf_t *tdmv_cfg = &wandev_conf->tdmv_conf; wanif_conf_t *wanif_cfg = &port_cfg->if_cfg[0]; + wan_xilinx_conf_t *aft_cfg = &wandev_conf->u.aft; - // Load media parameters in the registry + // E1 parameters FE_MEDIA(sdla_fe_cfg) = WAN_MEDIA_E1; FE_LCODE(sdla_fe_cfg) = WAN_LCODE_HDB3; FE_FRAME(sdla_fe_cfg) = WAN_FR_CRC4; @@ -458,6 +469,7 @@ int sangoma_port_configurator::initialize_e1_tdm_span_voice_api_configration_str FE_CLK(sdla_fe_cfg) = WAN_MASTER_CLK; #endif + // API parameters port_cfg->num_of_ifs = 1; wandev_conf->config_id = WANCONFIG_AFT_TE1; @@ -468,8 +480,21 @@ int sangoma_port_configurator::initialize_e1_tdm_span_voice_api_configration_str wandev_conf->pci_bus_no = hardware_info->pci_bus_number; wandev_conf->card_type = WANOPT_AFT; //m_DeviceInfoData.card_model; +#if SPAN_TX_ONLY_IRQ + aft_cfg->span_tx_only_irq = 1; +#else + aft_cfg->span_tx_only_irq = 0; +#endif + wanif_cfg->magic = ROUTER_MAGIC; +#if BUILD_FOR_PRI + //PRI Signaling on chan 16 wanif_cfg->active_ch = 0x7FFFFFFF;// channels 1-31 (starting from bit zero) +#else + //CAS + wanif_cfg->active_ch = 0xFFFF7FFF;// channels 1-15.17-31 -> Active Ch Map :0xFFFEFFFE (in message log) +#endif + sprintf(wanif_cfg->usedby,"TDM_SPAN_VOICE_API"); wanif_cfg->u.aft.idle_flag=0xFF; wanif_cfg->mtu = 160; @@ -486,6 +511,7 @@ int sangoma_port_configurator::initialize_e1_tdm_span_voice_api_configration_str tdmv_cfg->span_no = (unsigned char)span; +#if BUILD_FOR_PRI /* DCHAN Configuration */ switch(FE_MEDIA(sdla_fe_cfg)) { @@ -496,11 +522,141 @@ int sangoma_port_configurator::initialize_e1_tdm_span_voice_api_configration_str printf("%s(): Error: invalid media type!\n", __FUNCTION__); return 1; } - +#endif + printf("E1: tdmv_cfg->dchan bitmap: 0x%X\n", tdmv_cfg->dchan); return 0; } +int sangoma_port_configurator::initialize_bri_tdm_span_voice_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span) +{ + wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; + sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; + wan_tdmv_conf_t *tdmv_cfg = &wandev_conf->tdmv_conf; + wanif_conf_t *wanif_cfg = &port_cfg->if_cfg[0]; + + // BRI parameters + FE_MEDIA(sdla_fe_cfg) = WAN_MEDIA_BRI; + FE_LINENO(sdla_fe_cfg) = hardware_info->port_number; + FE_TDMV_LAW(sdla_fe_cfg) = WAN_TDMV_ALAW; + FE_NETWORK_SYNC(sdla_fe_cfg) = 0; + + FE_REFCLK(sdla_fe_cfg) = 0; + +#if 0 + /* + * TE Module: WAN_NORMAL_CLK is the default. + * Clock recovered from the line will be used by this module and + * will be routed to ALL other BRI modules on the card which + * become "connected" after this module. That means at any + * time there is a single BRI line where the clock is recovered from + * and this clock is used for all other BRI lines. + * + * NT Module: always runs on internal oscillator clock. + */ + BRI_FE_CLK((*sdla_fe_cfg)) = WAN_NORMAL_CLK; +#else + /* + * TE Module: if WAN_MASTER_CLK, clock recovered from + * the line will be NOT be used by this module and + * will NOT be routed to ALL other BRI modules on the card. + * Instead, the module will use clock from internal oscillator. + * + * NT Module: WAN_MASTER_CLK will be ignored because NT should not + * recover clock from the line, it always runs on clock from + * internal oscillator. + */ + BRI_FE_CLK((*sdla_fe_cfg)) = WAN_MASTER_CLK; +#endif + + port_cfg->num_of_ifs = 1; + + wandev_conf->config_id = WANCONFIG_AFT_ISDN_BRI; + wandev_conf->magic = ROUTER_MAGIC; + + wandev_conf->mtu = 2048; + wandev_conf->PCI_slot_no = hardware_info->pci_slot_number; + wandev_conf->pci_bus_no = hardware_info->pci_bus_number; + wandev_conf->card_type = WANOPT_AFT; //m_DeviceInfoData.card_model; + + wanif_cfg->magic = ROUTER_MAGIC; + wanif_cfg->active_ch = 0xFFFFFFFF; + sprintf(wanif_cfg->usedby,"TDM_SPAN_VOICE_API"); + wanif_cfg->u.aft.idle_flag=0xFF; + wanif_cfg->mtu = 160; + wanif_cfg->u.aft.mtu = 160; + wanif_cfg->u.aft.mru = 160; + sprintf(wanif_cfg->name,"w%dg1",span); + + if (hardware_info->max_hw_ec_chans) { + /* wan_hwec_conf_t - HWEC configuration for Port */ + /*wandev_conf->hwec_conf.dtmf = 1;*/ + /* wan_hwec_if_conf_t - HWEC configuration for Interface */ + wanif_cfg->hwec.enable = 1; + } + + tdmv_cfg->span_no = (unsigned char)span; + + /* There is no DCHAN Configuration on BRI because it is + * configured automatically by the driver. */ + + return 0; +} + +int sangoma_port_configurator::initialize_serial_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span) +{ + wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; + sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; + wan_tdmv_conf_t *tdmv_cfg = &wandev_conf->tdmv_conf; + wanif_conf_t *wanif_cfg = &port_cfg->if_cfg[0]; + + // Serial parameters + FE_MEDIA(sdla_fe_cfg) = WAN_MEDIA_SERIAL; + FE_LINENO(sdla_fe_cfg) = hardware_info->port_number; + + wandev_conf->line_coding = WANOPT_NRZ; + /* WANOPT_V35/WANOPT_X21 are valid for card models: + * AFT_ADPTR_2SERIAL_V35X21 and AFT_ADPTR_4SERIAL_V35X21. + * WANOPT_RS232 valid for card models: + * AFT_ADPTR_2SERIAL_RS232 and AFT_ADPTR_4SERIAL_RS232. + */ + wandev_conf->electrical_interface = WANOPT_V35; +#if 1 + wandev_conf->clocking = WANOPT_EXTERNAL; + wandev_conf->bps = 0; +#else + wandev_conf->clocking = WANOPT_INTERNAL; + wandev_conf->bps = 56000; +#endif + + wandev_conf->connection = WANOPT_PERMANENT;//or WANOPT_SWITCHED + wandev_conf->line_idle = WANOPT_IDLE_FLAG; + + // API parameters + port_cfg->num_of_ifs = 1; + + wandev_conf->config_id = WANCONFIG_AFT_SERIAL; + wandev_conf->magic = ROUTER_MAGIC; + + wandev_conf->mtu = 2048; + wandev_conf->PCI_slot_no = hardware_info->pci_slot_number; + wandev_conf->pci_bus_no = hardware_info->pci_bus_number; + wandev_conf->card_type = WANOPT_AFT; //m_DeviceInfoData.card_model; + + wanif_cfg->magic = ROUTER_MAGIC; + wanif_cfg->active_ch = 0xFFFFFFFF; + sprintf(wanif_cfg->usedby,"API"); + wanif_cfg->u.aft.idle_flag=0xFF; + wanif_cfg->mtu = 1600; + wanif_cfg->u.aft.mtu = 1600; + wanif_cfg->u.aft.mru = 1600; + sprintf(wanif_cfg->name,"w%dg1",span); + + wanif_cfg->hdlc_streaming = WANOPT_YES; + + return 0; +} + int sangoma_port_configurator::write_configration_on_persistent_storage(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span) { //all the work is done by libsangoma @@ -511,17 +667,20 @@ int sangoma_port_configurator::control_analog_rm_lcm(port_cfg_t *port_cfg, int c { wandev_conf_t *wandev_conf = &port_cfg->wandev_conf; sdla_fe_cfg_t *sdla_fe_cfg = &wandev_conf->fe_cfg; - if(wandev_conf->card_type == WANOPT_AFT_ANALOG){ //Only valid for Analog cards - if(control_val == 1){ + if (wandev_conf->card_type == WANOPT_AFT_ANALOG) { //Only valid for Analog cards + if (control_val == 1) { + INFO_CFG("%s(): enabling FXO Loop Current Monitoring.\n", __FUNCTION__); sdla_fe_cfg->cfg.remora.rm_lcm = 1; - }else if(control_val == 0){ + } else if(control_val == 0) { + INFO_CFG("%s(): disabling FXO Loop Current Monitoring.\n", __FUNCTION__); sdla_fe_cfg->cfg.remora.rm_lcm = 0; - }else{ - printf("%s(): Error: invalid parameter!\n", __FUNCTION__); + } else { + ERR_CFG("invalid parameter!\n"); return -EINVAL; } - } else{ - return -EINVAL; + } else { + ERR_CFG("invalid card type: %d!\n", wandev_conf->card_type); + return -EINVAL; } return 0; } @@ -604,3 +763,14 @@ int sangoma_port_configurator::set_analog_opermode(port_cfg_t *port_cfg, char *o } return 0; } + +void sangoma_port_configurator::initialize_interface_mtu_mru(port_cfg_t *port_cfg, unsigned int mtu, unsigned int mru) +{ + wanif_conf_t *wanif_cfg = &port_cfg->if_cfg[0]; + + INFO_CFG("%s(): new MTU: %d, new MRU: %d.\n", __FUNCTION__, mtu, mru); + + wanif_cfg->mtu = mtu; + wanif_cfg->u.aft.mtu = mtu; + wanif_cfg->u.aft.mru = mru; +} \ No newline at end of file diff --git a/api/libsangoma/sample_cpp/sangoma_port_configurator.h b/api/libsangoma/sample_cpp/sangoma_port_configurator.h index 3d00249..136397c 100644 --- a/api/libsangoma/sample_cpp/sangoma_port_configurator.h +++ b/api/libsangoma/sample_cpp/sangoma_port_configurator.h @@ -104,8 +104,12 @@ public: int initialize_t1_tdm_span_voice_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span); int initialize_e1_tdm_span_voice_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span); + int initialize_bri_tdm_span_voice_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span); + int initialize_serial_api_configration_structure(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span); int write_configration_on_persistent_storage(port_cfg_t *port_cfg, hardware_info_t *hardware_info, int span); + + void initialize_interface_mtu_mru(port_cfg_t *port_cfg, unsigned int mtu, unsigned int mru); }; #endif // !defined(_SANGOMA_PORT_CONFIGURATOR_H) diff --git a/api/libstelephony/.svn/all-wcprops b/api/libstelephony/.svn/all-wcprops index a23a188..4c9d422 100644 --- a/api/libstelephony/.svn/all-wcprops +++ b/api/libstelephony/.svn/all-wcprops @@ -93,18 +93,18 @@ svn:wc:ra_dav:version-url V 49 /svn/stelephony/!svn/ver/59/trunk/libstelephony.h END -COPYING -K 25 -svn:wc:ra_dav:version-url -V 41 -/svn/stelephony/!svn/ver/13/trunk/COPYING -END build.sh K 25 svn:wc:ra_dav:version-url V 42 /svn/stelephony/!svn/ver/28/trunk/build.sh END +COPYING +K 25 +svn:wc:ra_dav:version-url +V 41 +/svn/stelephony/!svn/ver/13/trunk/COPYING +END StelephonyApi.h K 25 svn:wc:ra_dav:version-url @@ -117,72 +117,72 @@ svn:wc:ra_dav:version-url V 48 /svn/stelephony/!svn/ver/55/trunk/stelephony.cpp END -NEWS -K 25 -svn:wc:ra_dav:version-url -V 38 -/svn/stelephony/!svn/ver/13/trunk/NEWS -END stelephony.aps K 25 svn:wc:ra_dav:version-url V 48 /svn/stelephony/!svn/ver/43/trunk/stelephony.aps END +NEWS +K 25 +svn:wc:ra_dav:version-url +V 38 +/svn/stelephony/!svn/ver/13/trunk/NEWS +END resource.h K 25 svn:wc:ra_dav:version-url V 43 /svn/stelephony/!svn/ver/1/trunk/resource.h END -version -K 25 -svn:wc:ra_dav:version-url -V 41 -/svn/stelephony/!svn/ver/13/trunk/version -END stelephony.sln K 25 svn:wc:ra_dav:version-url V 48 /svn/stelephony/!svn/ver/59/trunk/stelephony.sln END +version +K 25 +svn:wc:ra_dav:version-url +V 41 +/svn/stelephony/!svn/ver/13/trunk/version +END configure.in K 25 svn:wc:ra_dav:version-url V 46 /svn/stelephony/!svn/ver/48/trunk/configure.in END -stelephony.def -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/stelephony/!svn/ver/59/trunk/stelephony.def -END ChangeLog K 25 svn:wc:ra_dav:version-url V 43 /svn/stelephony/!svn/ver/13/trunk/ChangeLog END +stelephony.def +K 25 +svn:wc:ra_dav:version-url +V 48 +/svn/stelephony/!svn/ver/59/trunk/stelephony.def +END libstelephony_linux_compat.h K 25 svn:wc:ra_dav:version-url V 62 /svn/stelephony/!svn/ver/43/trunk/libstelephony_linux_compat.h END -stelephony.vcproj -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/stelephony/!svn/ver/59/trunk/stelephony.vcproj -END PToneDecoder.cpp K 25 svn:wc:ra_dav:version-url V 50 /svn/stelephony/!svn/ver/60/trunk/PToneDecoder.cpp END +stelephony.vcproj +K 25 +svn:wc:ra_dav:version-url +V 51 +/svn/stelephony/!svn/ver/59/trunk/stelephony.vcproj +END README K 25 svn:wc:ra_dav:version-url diff --git a/api/libstelephony/.svn/entries b/api/libstelephony/.svn/entries index 9ba83d7..121550f 100644 --- a/api/libstelephony/.svn/entries +++ b/api/libstelephony/.svn/entries @@ -213,18 +213,6 @@ file 59 davidr -COPYING -file - - - - -2009-06-26T20:54:03.000000Z -d41d8cd98f00b204e9800998ecf8427e -2009-02-27T21:14:16.818013Z -13 -ncorbic - build.sh file @@ -238,6 +226,18 @@ db35df946eb4c300bbc065dbf844c6aa ncorbic has-props +COPYING +file + + + + +2009-06-26T20:54:03.000000Z +d41d8cd98f00b204e9800998ecf8427e +2009-02-27T21:14:16.818013Z +13 +ncorbic + StelephonyApi.h file @@ -262,18 +262,6 @@ d39810d5fd7763003fbd609890934180 55 davidy -NEWS -file - - - - -2009-06-26T20:54:03.000000Z -d41d8cd98f00b204e9800998ecf8427e -2009-02-27T21:14:16.818013Z -13 -ncorbic - stelephony.aps file @@ -287,6 +275,18 @@ b08bdecd7dd0fc40b801c042ce2470a8 davidr has-props +NEWS +file + + + + +2009-06-26T20:54:03.000000Z +d41d8cd98f00b204e9800998ecf8427e +2009-02-27T21:14:16.818013Z +13 +ncorbic + resource.h file @@ -299,18 +299,6 @@ ca1cc8cc040b1c8d1f14b5fef8aef16c 1 root -version -file - - - - -2009-06-26T20:54:03.000000Z -dc404f5aa6012bc608dd48d9f6c43a77 -2009-02-27T21:14:16.818013Z -13 -ncorbic - stelephony.sln file @@ -323,6 +311,18 @@ file 59 davidr +version +file + + + + +2009-06-26T20:54:03.000000Z +dc404f5aa6012bc608dd48d9f6c43a77 +2009-02-27T21:14:16.818013Z +13 +ncorbic + configure.in file @@ -335,6 +335,18 @@ file 48 ncorbic +ChangeLog +file + + + + +2009-06-26T20:54:03.000000Z +d41d8cd98f00b204e9800998ecf8427e +2009-02-27T21:14:16.818013Z +13 +ncorbic + stelephony.def file @@ -347,18 +359,6 @@ file 59 davidr -ChangeLog -file - - - - -2009-06-26T20:54:03.000000Z -d41d8cd98f00b204e9800998ecf8427e -2009-02-27T21:14:16.818013Z -13 -ncorbic - libstelephony_linux_compat.h file @@ -371,18 +371,6 @@ ff39032d8b88b49cfb53a514bd52f27f 43 davidr -stelephony.vcproj -file - - - - -2010-03-23T16:15:02.000000Z -4a6dbf857cbeaa06e00069bcc011da43 -2010-03-15T22:33:02.724320Z -59 -davidr - PToneDecoder.cpp file @@ -395,6 +383,18 @@ file 60 davidy +stelephony.vcproj +file + + + + +2010-03-23T16:15:02.000000Z +4a6dbf857cbeaa06e00069bcc011da43 +2010-03-15T22:33:02.724320Z +59 +davidr + README file diff --git a/api/tdm_api/aft_tdm_hdlc_test.c b/api/tdm_api/aft_tdm_hdlc_test.c index b38731d..d1e174e 100644 --- a/api/tdm_api/aft_tdm_hdlc_test.c +++ b/api/tdm_api/aft_tdm_hdlc_test.c @@ -125,8 +125,13 @@ int MakeConnection(timeslot_t *slot, char *router_name ) { int span,chan; + int err; + int period=40; + wanpipe_api_t tdm_api; sangoma_span_chan_fromif(slot->if_name,&span,&chan); + memset(&tdm_api,0,sizeof(tdm_api)); + if (span > 0 && chan > 0) { wanpipe_tdm_api_t tdm_api; slot->sock = sangoma_open_tdmapi_span_chan(span,chan); @@ -135,12 +140,21 @@ int MakeConnection(timeslot_t *slot, char *router_name ) return( FALSE ); } - sangoma_tdm_set_codec(slot->sock,&tdm_api,WP_NONE); - - + sangoma_tdm_set_codec(slot->sock,&tdm_api,WP_NONE); + + +#if 0 + err=sangoma_tdm_set_usr_period(slot->sock,&tdm_api,period); + if (err) { + printf("Error: Failed to set period\n"); + } +#endif + printf("Socket bound to Span=%i Chan=%i\n\n",span,chan); return (TRUE); } + + return(FALSE); } diff --git a/api/tdm_api/aft_tdm_voice_api.c b/api/tdm_api/aft_tdm_voice_api.c index d0b2bbc..a6657d9 100644 --- a/api/tdm_api/aft_tdm_voice_api.c +++ b/api/tdm_api/aft_tdm_voice_api.c @@ -275,7 +275,7 @@ void handle_span_chan(void) Rx_data, sizeof(wp_tdm_api_rx_hdr_t), &Rx_data[sizeof(wp_tdm_api_rx_hdr_t)], - 70, 0); + MAX_RX_DATA, 0); if (!read_enable){ goto bitstrm_skip_read; @@ -285,7 +285,7 @@ void handle_span_chan(void) /* err indicates bytes received */ if(err <= 0) { - printf("\nError receiving data\n"); + printf("\nError receiving data %s\n",strerror(errno)); break; } @@ -482,7 +482,7 @@ int main(int argc, char* argv[]) dev_fd = sangoma_open_tdmapi_span_chan(atoi(card_name),atoi(if_name)); if( dev_fd < 0){ - printf("Failed to open span chan\n"); + printf("Failed to open span chan %i %i\n",atoi(card_name),atoi(if_name)); exit (1); } printf("HANDLING SPAN %i CHAN %i FD=%i\n", diff --git a/deb_control/wanpipe.deb b/deb_control/wanpipe.deb index 8319b8c..4ea6d9d 100644 --- a/deb_control/wanpipe.deb +++ b/deb_control/wanpipe.deb @@ -1,5 +1,5 @@ Package: wanpipe -Version: 3.5.18-0 +Version: 3.5.19-0 Section: networking Priority: optional Architecture: all diff --git a/patches/kdrivers/include/aft_core.h b/patches/kdrivers/include/aft_core.h index 9ee0207..f720663 100644 --- a/patches/kdrivers/include/aft_core.h +++ b/patches/kdrivers/include/aft_core.h @@ -42,6 +42,7 @@ #include "aft_analog.h" #include "aft_bri.h" + #if defined(__WINDOWS__) # include # define AFT_MAX_CHIP_SECURITY_CNT 100 @@ -1041,7 +1042,8 @@ aft_dmachain_enable_tdmv_and_mtu_size(u32 *reg, int size) #define AFT_SERIAL_LCFG_CTRL_BIT_MASK 0x0F #define AFT_SERIAL_LCFG_BAUD_SHIFT 8 -#define AFT_SERIAL_LCFG_BAUD_MASK 0xFFFF +#define AFT_SERIAL_LCFG_BAUD_ORIG_MASK 0xFFFF +#define AFT_SERIAL_LCFG_BAUD_MASK 0xFFF #define AFT_SERIAL_LCFG_CLK_OSC_SEL_BIT 23 #define AFT_SERIAL_LCFG_CLK_SRC_BIT 24 @@ -1054,6 +1056,9 @@ aft_dmachain_enable_tdmv_and_mtu_size(u32 *reg, int size) #define AFT_SERIAL_LCFG_IFACE_TYPE_BIT 31 +//This aft_serial_set_baud_rate wzs the original one before the implementation of RECOVERY CLOCK +//We are keeping it here just to be safe, in case of complaints from customers +#if 0 static __inline void aft_serial_set_baud_rate(u32 *reg, u32 rate) { @@ -1062,9 +1067,22 @@ aft_serial_set_baud_rate(u32 *reg, u32 rate) if (!remain || (remain/2 > rate)) { div=div-1; } + } + if (div > 0) { + div=div-1; + } + + if (div==0) { + DEBUG_EVENT("wanpipe: Error: Baud Rate Requested %i too high! Cannot be generated by hardware!\n",rate); + return -1; + } *reg&=~(AFT_SERIAL_LCFG_BAUD_MASK< rate) { + div=div+1; + } + if (div > 0) { + div=div-1; + } + + if (div==0) { + DEBUG_ERROR("wanpipe: Error: Baud Rate Requested %i too high! Cannot be generated by hardware!\n",rate); + return -1; + } + *reg&=~(AFT_SERIAL_LCFG_BAUD_ORIG_MASK< rate) { + div=div+1; + round1=1; + } + if (div > 0) { + div=div-1; + } + div1=div; + + if (remain > rate) { + acc1= 2*rate - remain; + } else { + acc1=remain; + } + + div=(12352000)/(2*rate); + remain=(12352000)%(2*rate); + DEBUG_TEST("DIV=%u REMAIN2 %u rate=%u\n",div,remain,rate); + if (remain > rate) { + div=div+1; + round2=1; + } + + if (div > 0) { + div=div-1; + } + div2=div; + + if (remain > rate) { + acc2= 2*rate - remain; + } else { + acc2=remain; + } + + if (acc1 > acc2) { + wan_set_bit(AFT_SERIAL_LCFG_CLK_OSC_SEL_BIT,reg); + div=div2; + + if (div == 0) { + DEBUG_ERROR("wanpipe: Error: Baud Rate Requested %i too high! Cannot be generated by hardware!\n", recovery?rate/32:rate); + return -1; + } + + DEBUG_EVENT("NEW OSC: DIV=%i (DIV1=%i DIV2=%i) (ACC1=%i ACC2=%i)\n",div,div1,div2,acc1,acc2); + freq=12352000/(2*(div+round2+1)); + percent=abs(freq-rate)*100/rate; + + if (recovery) { + freq=freq/32; + rate=rate/32; + } + + if (percent > 2) { + DEBUG_ERROR("wanpipe: Error: Baud Rate Requested %i cannot be generated by hardware! Actual=%i Tolerance=%i\n", rate,freq,percent); + return -EINVAL; + } + + DEBUG_EVENT("wanpipe: Baud Rate Requested %i, Baud Rate Generated %i, Tolerance=%i\n",rate,freq,percent); + } else { + wan_clear_bit(AFT_SERIAL_LCFG_CLK_OSC_SEL_BIT,reg); + div=div1; + + if (div == 0) { + DEBUG_ERROR("wanpipe: Error: Baud Rate Requested %i too high! Cannot be generated by hardware!\n", recovery?rate/32:rate); + return -1; + } + + DEBUG_EVENT("ORIG OSC: DIV=%i (DIV1=%i DIV2=%i) (ACC1=%i ACC2=%i)\n",div,div1,div2,acc1,acc2); + freq=14745600/(2*(div+round1+1)); + percent=abs(freq-rate)*100/rate; + + if (recovery) { + freq=freq/32; + rate=rate/32; + } + + if (percent > 2) { + DEBUG_ERROR("wanpipe: Error: Baud Rate Requested %i cannot be generated by hardware! Actual=%i Tolerance=%i\n", rate,freq,percent); + return -EINVAL; + } + + DEBUG_EVENT("wanpipe: Baud Rate Requested %i, Baud Rate Generated %i, Tolerance=%i\n", rate,freq,percent); + } + + *reg&=~(AFT_SERIAL_LCFG_BAUD_MASK< ((timeout) * HZ)) -#define WP_MICROSECONDS_IN_A_TICK() (1000000 / HZ) -#define WP_TICKS_IN_LAST_SECOND() (SYSTEM_TICKS % HZ) - -#define WAN_TICKS_TO_MICROSECONDS() \ - WP_TICKS_IN_LAST_SECOND() * WP_MICROSECONDS_IN_A_TICK() #if defined(__LINUX__) # define WAN_COPY_FROM_USER(k,u,l) copy_from_user(k,u,l) @@ -1030,6 +1025,15 @@ static __inline int wan_getcurrenttime(wan_time_t *sec, wan_suseconds_t *usec) } +/* + * Obtain the number of seconds elapsed since midnight (00:00:00), + * January 1, 1970. + * Equivalent to "time()" and "_time64()" in user-space. + * User-mode applications can call "ctime()" and "_ctime64()" or + * sangoma_ctime() for interpretation of this timestamp. + * + */ + static __inline int wan_get_timestamp(wan_time_t *sec, wan_suseconds_t *usec) { #if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) @@ -1046,8 +1050,9 @@ static __inline int wan_get_timestamp(wan_time_t *sec, wan_suseconds_t *usec) return 0; #elif defined(__WINDOWS__) struct timeval tv; - wp_time(&tv.tv_sec);/* number of seconds elapsed since midnight (00:00:00), January 1, 1970 */ - tv.tv_usec = WAN_TICKS_TO_MICROSECONDS(); + wp_time(&tv.tv_sec); /* number of seconds elapsed since + * midnight (00:00:00), January 1, 1970 */ + tv.tv_usec = get_milliseconds_in_current_second() * 1000; if (sec) *sec = tv.tv_sec; if (usec) *usec = tv.tv_usec; return 0; @@ -1157,20 +1162,28 @@ wan_add_timer(wan_timer_t* wan_timer, unsigned long delay) wan_timer->timer_func, wan_timer->timer_arg); #elif defined(__WINDOWS__) - LARGE_INTEGER CurrentTime; + LARGE_INTEGER DueTime; - /* The 'delay' is in SYSTEM TICKS! */ + /********************************** + The 'delay' is in SYSTEM TICKS! + ***********************************/ - /* 10 000 000 - * System time is a count of 100-nanosecond intervals - * since January 1, 1601. System time is typically - * updated approximately every ten milliseconds. (on Intel 32bit) */ - KeQuerySystemTime(&CurrentTime); - - CurrentTime.QuadPart = CurrentTime.QuadPart + delay * KeQueryTimeIncrement(); - - KeSetTimer(&wan_timer->timer_info.Timer, CurrentTime, &wan_timer->timer_info.TimerDpcObject); + /* KeSetTimer(): the expiration time is expressed in system + * time units (100-nanosecond intervals). + * + * KeQueryTimeIncrement(): returns the number of + * 100-nanosecond units that are added to the system time + * each time the interval clock interrupts. + * + * If the value of the DueTime parameter is negative, + * the expiration time is relative to the current system time. + * + * Relative expiration times are NOT affected by system time changes. + */ + DueTime.QuadPart = -1 * ((LONGLONG) (delay * KeQueryTimeIncrement())); + KeSetTimer(&wan_timer->timer_info.Timer, DueTime, + &wan_timer->timer_info.TimerDpcObject); #else # error "wan_add_timer() function is not supported yet!" #endif /* linux */ @@ -1231,7 +1244,13 @@ static __inline void wan_skb_append(void* skbprev, void *skb, void *list) #elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) m_cat (skbprev, skb); #elif defined(__WINDOWS__) +# if WP_USE_INTERLOCKED_LIST_FUNCTIONS + /* Interlocked function do NOT allow to insert in the middle + * of list. */ + skb_queue_tail(skb, list); +# else skb_append(skbprev,skb); +# endif #else # error "wan_skb_append() function is not supported yet!" #endif @@ -2893,7 +2912,11 @@ static __inline void wan_spin_unlock(void *lock, wan_smp_flag_t *flag) static __inline void wan_mutex_lock_init(void *lock, char *name) { #if defined(__LINUX__) +#ifdef DEFINE_MUTEX mutex_init(((wan_mutexlock_t*)lock)); +#else + spin_lock_init(((spinlock_t*)lock)); +#endif #elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) /*(*(wan_smp_flag_t*)flag) = 0;*/ #if defined(SPINLOCK_OLD) @@ -2912,7 +2935,11 @@ static __inline void wan_mutex_lock(void *mutex, wan_smp_flag_t *flag /* FIXME: #if defined(__WINDOWS__) wp_mutex_lock(mutex); #else +#ifdef DEFINE_MUTEX mutex_lock(mutex); +#else + spin_lock(((spinlock_t*)mutex)); +#endif #endif } @@ -2921,7 +2948,11 @@ static __inline void wan_mutex_unlock(void *mutex, wan_smp_flag_t *flag /* FIXME #if defined(__WINDOWS__) wp_mutex_unlock(mutex); #else +#ifdef DEFINE_MUTEX mutex_unlock(mutex); +#else + spin_unlock(((spinlock_t*)mutex)); +#endif #endif } @@ -2930,7 +2961,11 @@ static __inline int wan_mutex_trylock(void *mutex, wan_smp_flag_t *flag /* FIXME #if defined(__WINDOWS__) return wp_mutex_trylock(mutex); #else +#ifdef DEFINE_MUTEX return mutex_trylock(mutex); +#else + return spin_trylock(((spinlock_t*)mutex)); +#endif #endif } @@ -2938,7 +2973,11 @@ static __inline int wan_mutex_trylock(void *mutex, wan_smp_flag_t *flag /* FIXME static __inline int wan_mutex_is_locked(void *lock) { #if defined(__LINUX__) +#ifdef DEFINE_MUTEX return mutex_is_locked(((wan_mutexlock_t*)lock)); +#else + return spin_is_locked(((spinlock_t*)lock)); +#endif #elif defined(__WINDOWS__) return wp_mutex_is_locked(((wan_mutexlock_t*)lock)); #else @@ -3013,7 +3052,12 @@ static __inline void wan_write_bus_4(void *phw, void *virt, int offset, unsigned #define WAN_IFQ_DMA_PURGE(ifq) wan_skb_queue_purge(ifq) #define WAN_IFQ_ENQUEUE(ifq, skb, arg, err) wan_skb_queue_tail((ifq), (skb)) +#if WP_USE_INTERLOCKED_LIST_FUNCTIONS +# pragma deprecated(wan_skb_append) +# pragma deprecated(wan_skb_unlink) #endif +#endif /* __WINDOWS__ */ + #endif /* WAN_KERNEL */ #endif /* __WANPIPE_COMMON_H */ diff --git a/patches/kdrivers/include/wanpipe_debug.h b/patches/kdrivers/include/wanpipe_debug.h index ad2ebf5..5a8daf4 100644 --- a/patches/kdrivers/include/wanpipe_debug.h +++ b/patches/kdrivers/include/wanpipe_debug.h @@ -86,6 +86,15 @@ extern void OutputLogString(const char *fmt, ...); /* Print to wanpipelog.txt (N # define _DEBUG_PRINT(...) printk(## __VA_ARGS__) #endif +#if 1 +# define DBG_BATTERY_REMOVAL DEBUG_TEST +#else +# if defined (__WINDOWS__) +# define DBG_BATTERY_REMOVAL if(1)DbgPrint +# else +# define DBG_BATTERY_REMOVAL if(1)DEBUG_EVENT +# endif +#endif /*======================================================== COMMON CODE @@ -282,6 +291,8 @@ extern void OutputLogString(const char *fmt, ...); /* Print to wanpipelog.txt (N WP_DEBUG(WAN_LOGGER_BRI, SANG_LOGGER_BRI_DEFAULT, ## __VA_ARGS__) #define DEBUG_HFC_S0_STATES(...) \ WP_DEBUG(WAN_LOGGER_BRI, SANG_LOGGER_BRI_HFC_S0_STATES, ## __VA_ARGS__) +#define DEBUG_L2_TO_L1_ACTIVATION(...) \ + WP_DEBUG(WAN_LOGGER_BRI, SANG_LOGGER_BRI_L2_TO_L1_ACTIVATION, ## __VA_ARGS__) /*==== End of Wanpipe Logger macro definitions ====*/ /*=================================================*/ diff --git a/patches/kdrivers/include/wanpipe_defines.h b/patches/kdrivers/include/wanpipe_defines.h index 9f56a15..a7885fe 100644 --- a/patches/kdrivers/include/wanpipe_defines.h +++ b/patches/kdrivers/include/wanpipe_defines.h @@ -538,11 +538,15 @@ typedef void (*wan_taskq_func_t)(struct work_struct *); * as work queue in wanpipe_kernel.h */ typedef struct tq_struct wan_taskq_t; -typedef void* virt_addr_t; +typedef void* virt_addr_t; typedef unsigned long wp_phys_addr_t; -typedef spinlock_t wan_spinlock_t; +typedef spinlock_t wan_spinlock_t; +#ifdef DEFINE_MUTEX typedef struct mutex wan_mutexlock_t; -typedef rwlock_t wan_rwlock_t; +#else +typedef spinlock_t wan_mutexlock_t; +#endif +typedef rwlock_t wan_rwlock_t; typedef unsigned long wan_smp_flag_t; typedef unsigned long wan_rwlock_flag_t; @@ -674,6 +678,8 @@ typedef void (wan_pci_ifunc_t)(void*); typedef wan_spinlock_t wan_mutexlock_t; +#define WAN_IOCTL_RET_TYPE int + #endif diff --git a/patches/kdrivers/include/wanpipe_events.h b/patches/kdrivers/include/wanpipe_events.h index 344eac7..a979603 100644 --- a/patches/kdrivers/include/wanpipe_events.h +++ b/patches/kdrivers/include/wanpipe_events.h @@ -94,30 +94,35 @@ "(Unknown mode)" /* Event type list */ -#define WAN_EVENT_EC_DTMF 0x0001 /* WAN_EVENT_EC_TONE_DTMF */ -#define WAN_EVENT_RM_POWER 0x0002 -#define WAN_EVENT_RM_LC 0x0003 -#define WAN_EVENT_RM_RING_TRIP 0x0004 -#define WAN_EVENT_RM_DTMF 0x0005 -#define WAN_EVENT_TE_RBS 0x0006 -#define WAN_EVENT_RM_RING 0x0007 -#define WAN_EVENT_RM_TONE 0x0008 -#define WAN_EVENT_RM_RING_DETECT 0x0009 -#define WAN_EVENT_RM_TXSIG_START 0x000A -#define WAN_EVENT_RM_TXSIG_OFFHOOK 0x000B -#define WAN_EVENT_RM_TXSIG_ONHOOK 0x000C -#define WAN_EVENT_RM_TXSIG_KEWL 0x000D -#define WAN_EVENT_RM_ONHOOKTRANSFER 0x000E -#define WAN_EVENT_RM_SETPOLARITY 0x000F -#define WAN_EVENT_RM_SET_ECHOTUNE 0x0010 -#define WAN_EVENT_EC_CHAN_MODIFY 0x0011 -#define WAN_EVENT_EC_H100_REPORT 0x0012 -#define WAN_EVENT_BRI_CHAN_LOOPBACK 0x0013 -#define WAN_EVENT_LINK_STATUS 0x0014 -#define WAN_EVENT_RM_POLARITY_REVERSE 0x0016 -#define WAN_EVENT_EC_FAX_DETECT 0x0017 -#define WAN_EVENT_RM_SET_TX_GAIN 0x0018 -#define WAN_EVENT_RM_SET_RX_GAIN 0x0019 +enum { + WAN_EVENT_EC_DTMF = 1, /* WAN_EVENT_EC_TONE_DTMF */ + WAN_EVENT_RM_POWER , + WAN_EVENT_RM_LC , + WAN_EVENT_RM_RING_TRIP , + WAN_EVENT_RM_DTMF , + WAN_EVENT_TE_RBS , + WAN_EVENT_RM_RING , + WAN_EVENT_RM_TONE , + WAN_EVENT_RM_RING_DETECT , + WAN_EVENT_RM_TXSIG_START , + WAN_EVENT_RM_TXSIG_OFFHOOK , + WAN_EVENT_RM_TXSIG_ONHOOK , + WAN_EVENT_RM_TXSIG_KEWL , + WAN_EVENT_RM_ONHOOKTRANSFER , + WAN_EVENT_RM_SETPOLARITY , + WAN_EVENT_RM_SET_ECHOTUNE , + WAN_EVENT_EC_CHAN_MODIFY , + WAN_EVENT_EC_H100_REPORT , + WAN_EVENT_BRI_CHAN_LOOPBACK , + WAN_EVENT_LINK_STATUS , + WAN_EVENT_RM_POLARITY_REVERSE, + WAN_EVENT_EC_FAX_DETECT , + WAN_EVENT_RM_SET_TX_GAIN , + WAN_EVENT_RM_SET_RX_GAIN , + WAN_EVENT_EC_FAX_1100 , + WAN_EVENT_EC_FAX_2100 , + WAN_EVENT_EC_FAX_2100_WSPR +}; #define WAN_EVENT_TYPE_DECODE(type) \ @@ -144,6 +149,9 @@ ((type) == WAN_EVENT_EC_FAX_DETECT) ? "EC FAX Detect" : \ ((type) == WAN_EVENT_RM_SET_TX_GAIN) ? "RM Set Tx Gain" : \ ((type) == WAN_EVENT_RM_SET_TX_GAIN) ? "RM Set Rx Gain" : \ + ((type) == WAN_EVENT_EC_FAX_1100) ? "EC FAX 1100" : \ + ((type) == WAN_EVENT_EC_FAX_2100) ? "EC FAX 2100" : \ + ((type) == WAN_EVENT_EC_FAX_2100_WSPR) ? "EC FAX 2100 WSPR" : \ "(Unknown type)" /* tone type list */ diff --git a/patches/kdrivers/include/wanpipe_kernel.h b/patches/kdrivers/include/wanpipe_kernel.h index c81e06d..60af637 100644 --- a/patches/kdrivers/include/wanpipe_kernel.h +++ b/patches/kdrivers/include/wanpipe_kernel.h @@ -67,6 +67,18 @@ #define WAN_DEV_NAME(device) device->dev.bus_id #endif +/////////////2.6.36///////////////////////////// +#ifdef HAVE_UNLOCKED_IOCTL +#define WAN_IOCTL unlocked_ioctl +#define WAN_IOCTL_RET_TYPE long +#define WANDEF_IOCTL_FUNC(function, struct_ptr_file, cmd, data) function(struct_ptr_file, cmd, data) +#else +#define WAN_IOCTL ioctl +#define WAN_IOCTL_RET_TYPE int +#define WANDEF_IOCTL_FUNC(function, struct_ptr_file, cmd, data) function(struct inode *inode, struct_ptr_file, cmd, data) +#endif +//////////////////////////////////////////////// + /////////////2.6.35////////////////////////////// #ifndef netdev_mc_count # define netdev_mc_count(dev) dev->mc_count @@ -220,12 +232,9 @@ typedef int (wan_get_info_t)(char *, char **, off_t, int); #endif } -#if 1 +#ifndef MOD_INC_USE_COUNT #define MOD_INC_USE_COUNT try_module_get(THIS_MODULE) #define MOD_DEC_USE_COUNT module_put(THIS_MODULE) -#else -#define MOD_INC_USE_COUNT -#define MOD_DEC_USE_COUNT #endif #define ADMIN_CHECK() {if (!capable(CAP_SYS_ADMIN)) {\ diff --git a/patches/kdrivers/include/wanpipe_lip.h b/patches/kdrivers/include/wanpipe_lip.h index 3600910..f58b4af 100644 --- a/patches/kdrivers/include/wanpipe_lip.h +++ b/patches/kdrivers/include/wanpipe_lip.h @@ -292,7 +292,7 @@ typedef struct wplip_dev{ unsigned long magic; WAN_LIST_ENTRY(wplip_dev) list_entry; - unsigned short critical; + wan_bitmap_t critical; /* Internal control information */ wan_skb_queue_t tx_queue; @@ -427,7 +427,7 @@ typedef struct wplip_prot_iface /* Function Prototypes */ /* wanpipe_lip_iface.c */ -extern unsigned char wplip_link_num[]; +extern wan_bitmap_t wplip_link_num[]; extern wan_rwlock_t wplip_link_lock; extern struct wplip_link_list list_head_link; extern int wplip_data_rx_up(wplip_dev_t* lip_dev, void *skb); diff --git a/patches/kdrivers/include/wanpipe_logger.h b/patches/kdrivers/include/wanpipe_logger.h index d717618..8896f7d 100644 --- a/patches/kdrivers/include/wanpipe_logger.h +++ b/patches/kdrivers/include/wanpipe_logger.h @@ -138,13 +138,15 @@ enum wp_fe_logger_level{ /* BRI */ enum wp_bri_logger_level{ SANG_LOGGER_BRI_DEFAULT = (1), - SANG_LOGGER_BRI_HFC_S0_STATES = (1 << 1) + SANG_LOGGER_BRI_HFC_S0_STATES = (1 << 1), + SANG_LOGGER_BRI_L2_TO_L1_ACTIVATION = (1 << 2) }; #define SANG_DECODE_BRI_LOGGER_EVENT_TYPE(bit) \ (bit & SANG_LOGGER_BRI_DEFAULT) ? "SANG_LOGGER_BRI_DEFAULT": \ (bit & SANG_LOGGER_BRI_HFC_S0_STATES) ? "SANG_LOGGER_BRI_HFC_S0_STATES": \ - "Invalid Bit for TE1 Logger" + (bit & SANG_LOGGER_BRI_L2_TO_L1_ACTIVATION) ? "SANG_LOGGER_BRI_L2_TO_L1_ACTIVATION": \ + "Invalid Bit for BRI Logger" static __inline const char* wp_decode_logger_event_type(u_int32_t logger_type, u_int32_t evt_type) diff --git a/patches/kdrivers/include/wanpipe_version.h b/patches/kdrivers/include/wanpipe_version.h index 6a35bbd..87d0e58 100644 --- a/patches/kdrivers/include/wanpipe_version.h +++ b/patches/kdrivers/include/wanpipe_version.h @@ -10,7 +10,7 @@ #define WANPIPE_COMPANY "Sangoma Technologies Inc" /********** LINUX **********/ -#define WANPIPE_VERSION "3.5.18" +#define WANPIPE_VERSION "3.5.19" #define WANPIPE_SUB_VERSION "0" #define WANPIPE_LITE_VERSION "1.1.1" @@ -42,7 +42,7 @@ # define WANPIPE_VERSION_MAJOR 6 /* major upgrade */ # define WANPIPE_VERSION_MINOR 0 -# define WANPIPE_VERSION_MINOR1 31 /* frozen feature number */ +# define WANPIPE_VERSION_MINOR1 39 /* frozen feature number */ # define WANPIPE_VERSION_MINOR2 0 /* patch number for WANPIPE_VERSION_MINOR1 */ # undef VER_PRODUCTVERSION @@ -50,12 +50,12 @@ # undef VER_PRODUCTNAME_STR # undef VER_COMPANYNAME_STR -# define VER_PRODUCTVERSION 6,0,31,0 -# define VER_PRODUCTVERSION_STR "6.0.31.0" -# define __BUILDDATE__ July 6, 2010 +# define VER_PRODUCTVERSION 6,0,39,0 +# define VER_PRODUCTVERSION_STR "6.0.39.0" +# define __BUILDDATE__ February 11, 2011 # define VER_COMPANYNAME_STR "Sangoma Technologies Corporation" -# define VER_LEGALCOPYRIGHT_YEARS "1984-2010" +# define VER_LEGALCOPYRIGHT_YEARS "1984-2011" # define VER_LEGALCOPYRIGHT_STR "Copyright (c) Sangoma Technologies Corp." # define VER_PRODUCTNAME_STR "Sangoma WANPIPE (TM)" @@ -63,7 +63,7 @@ # undef WANPIPE_VERSION_BETA # undef WANPIPE_SUB_VERSION -# define WANPIPE_VERSION_Windows "6.0.31" +# define WANPIPE_VERSION_Windows "6.0.39" # define WANPIPE_SUB_VERSION_Windows "0" # define WANPIPE_VERSION_BETA_Windows 0 diff --git a/patches/kdrivers/include/wanpipe_wanrouter.h b/patches/kdrivers/include/wanpipe_wanrouter.h index 35f4ef5..19d57ba 100644 --- a/patches/kdrivers/include/wanpipe_wanrouter.h +++ b/patches/kdrivers/include/wanpipe_wanrouter.h @@ -441,7 +441,7 @@ extern int wanpipe_lip_get_if_status(void *chan, void *m); unsigned short wanrouter_type_trans(struct sk_buff *skb, netdevice_t *dev); int wanrouter_encapsulate(struct sk_buff *skb, netdevice_t *dev,unsigned short type); -extern int wanrouter_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); +extern WAN_IOCTL_RET_TYPE WANDEF_IOCTL_FUNC(wanrouter_ioctl, struct file *file, unsigned int cmd, unsigned long arg); /* Proc interface functions. These must not be called by the drivers! */ extern int wanrouter_proc_init(void); extern void wanrouter_proc_cleanup(void); diff --git a/patches/kdrivers/include/zapcompat.h b/patches/kdrivers/include/zapcompat.h index a143479..79bba97 100644 --- a/patches/kdrivers/include/zapcompat.h +++ b/patches/kdrivers/include/zapcompat.h @@ -171,7 +171,9 @@ #define WP_PRIV_FROM_CHAN(chan_dev, str_type) chan_dev->pvt #endif - +#ifdef DAHDI_ISSUES +#define WP_DAHDI_SPAN_OPS dahdi_span_ops +#endif # define WP_ZT_QEVENT_LOCK(chan, event) dahdi_qevent_lock((chan),(event)) diff --git a/patches/kdrivers/src/lip/wanpipe_lip_iface.c b/patches/kdrivers/src/lip/wanpipe_lip_iface.c index d55a77c..643a01d 100644 --- a/patches/kdrivers/src/lip/wanpipe_lip_iface.c +++ b/patches/kdrivers/src/lip/wanpipe_lip_iface.c @@ -27,7 +27,6 @@ #include "wanpipe_lip.h" #endif -WAN_DECLARE_NETDEV_OPS(wan_netdev_ops) /*============================================================= * Definitions @@ -45,7 +44,7 @@ extern void wan_ng_link_state(wanpipe_common_t *common, int state); struct wplip_link_list list_head_link; wan_rwlock_t wplip_link_lock; -unsigned char wplip_link_num[MAX_LIP_LINKS]; +wan_bitmap_t wplip_link_num[MAX_LIP_LINKS]; #if 0 int gdbg_flag=0; #endif diff --git a/patches/kdrivers/src/lip/wanpipe_lip_tty.c b/patches/kdrivers/src/lip/wanpipe_lip_tty.c index 27dc1a4..4b239b6 100644 --- a/patches/kdrivers/src/lip/wanpipe_lip_tty.c +++ b/patches/kdrivers/src/lip/wanpipe_lip_tty.c @@ -21,7 +21,7 @@ #ifdef __LINUX__ -static struct tty_driver serial_driver; +static struct tty_driver *serial_driver; static int tty_init_cnt=0; static struct serial_state rs_table[NR_PORTS]; @@ -602,60 +602,62 @@ int wplip_reg_tty(wplip_link_t *lip_link, wanif_conf_t *cfg) WAN_TTY_MAJOR,MIN_PORT,MAX_PORT); + serial_driver=alloc_tty_driver(NR_PORTS); + if (!serial_driver) { + return -ENOMEM; + } - memset(&serial_driver, 0, sizeof(struct tty_driver)); - serial_driver.magic = TTY_DRIVER_MAGIC; + serial_driver->magic = TTY_DRIVER_MAGIC; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)) - serial_driver.owner = THIS_MODULE; + serial_driver->owner = THIS_MODULE; #endif - serial_driver.driver_name = "wanpipe_tty"; + serial_driver->driver_name = "wanpipe_tty"; #if (LINUX_VERSION_CODE > 0x2032D && defined(CONFIG_DEVFS_FS)) - serial_driver.name = "ttyWP/%d"; + serial_driver->name = "ttyWP/%d"; #else - serial_driver.name = "ttyWP"; + serial_driver->name = "ttyWP"; #endif - serial_driver.major = WAN_TTY_MAJOR; - serial_driver.minor_start = WAN_TTY_MINOR; - serial_driver.num = NR_PORTS; - serial_driver.type = TTY_DRIVER_TYPE_SERIAL; - serial_driver.subtype = SERIAL_TYPE_NORMAL; + serial_driver->major = WAN_TTY_MAJOR; + serial_driver->minor_start = WAN_TTY_MINOR; + serial_driver->type = TTY_DRIVER_TYPE_SERIAL; + serial_driver->subtype = SERIAL_TYPE_NORMAL; - serial_driver.init_termios = tty_std_termios; - serial_driver.init_termios.c_cflag = + serial_driver->init_termios = tty_std_termios; + serial_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; - serial_driver.flags = TTY_DRIVER_REAL_RAW; + serial_driver->flags = TTY_DRIVER_REAL_RAW; #ifdef LINUX_2_6 - tty_set_operations(&serial_driver, &wanpipe_tty_ops); + tty_set_operations(serial_driver, &wanpipe_tty_ops); #else - serial_driver.refcount = &serial_refcount; - serial_driver.table = serial_table; - serial_driver.termios = serial_termios; - serial_driver.termios_locked = serial_termios_locked; + serial_driver->refcount = &serial_refcount; + serial_driver->table = serial_table; + serial_driver->termios = serial_termios; + serial_driver->termios_locked = serial_termios_locked; - serial_driver.open = wanpipe_tty_open; - serial_driver.close = wanpipe_tty_close; - serial_driver.write = wanpipe_tty_write; + serial_driver->open = wanpipe_tty_open; + serial_driver->close = wanpipe_tty_close; + serial_driver->write = wanpipe_tty_write; - serial_driver.put_char = wanpipe_tty_put_char; - serial_driver.flush_chars = wanpipe_tty_flush_chars; - serial_driver.write_room = wanpipe_tty_write_room; - serial_driver.chars_in_buffer = wanpipe_tty_chars_in_buffer; - serial_driver.flush_buffer = wanpipe_tty_flush_buffer; - //serial_driver.ioctl = wanpipe_tty_ioctl; - serial_driver.throttle = wanpipe_tty_throttle; - serial_driver.unthrottle = wanpipe_tty_unthrottle; - serial_driver.send_xchar = wanpipe_tty_send_xchar; - serial_driver.set_termios = wanpipe_tty_set_termios; - serial_driver.stop = wanpipe_tty_stop; - serial_driver.start = wanpipe_tty_start; - serial_driver.hangup = wanpipe_tty_hangup; - serial_driver.break_ctl = wanpipe_tty_break; - serial_driver.wait_until_sent = wanpipe_tty_wait_until_sent; - serial_driver.read_proc = wanpipe_tty_read_proc; + serial_driver->put_char = wanpipe_tty_put_char; + serial_driver->flush_chars = wanpipe_tty_flush_chars; + serial_driver->write_room = wanpipe_tty_write_room; + serial_driver->chars_in_buffer = wanpipe_tty_chars_in_buffer; + serial_driver->flush_buffer = wanpipe_tty_flush_buffer; + //serial_driver->ioctl = wanpipe_tty_ioctl; + serial_driver->throttle = wanpipe_tty_throttle; + serial_driver->unthrottle = wanpipe_tty_unthrottle; + serial_driver->send_xchar = wanpipe_tty_send_xchar; + serial_driver->set_termios = wanpipe_tty_set_termios; + serial_driver->stop = wanpipe_tty_stop; + serial_driver->start = wanpipe_tty_start; + serial_driver->hangup = wanpipe_tty_hangup; + serial_driver->break_ctl = wanpipe_tty_break; + serial_driver->wait_until_sent = wanpipe_tty_wait_until_sent; + serial_driver->read_proc = wanpipe_tty_read_proc; /* * The callout device is just like normal device except for @@ -673,9 +675,12 @@ int wplip_reg_tty(wplip_link_t *lip_link, wanif_conf_t *cfg) callout_driver.proc_entry = 0; #endif - if (tty_register_driver(&serial_driver)){ + if (tty_register_driver(serial_driver)){ DEBUG_EVENT( "%s: Failed to register serial driver!\n", lip_link->name); + put_tty_driver(serial_driver); + serial_driver=NULL; + return -EINVAL; } #ifndef LINUX_2_6 @@ -714,7 +719,7 @@ int wplip_reg_tty(wplip_link_t *lip_link, wanif_conf_t *cfg) #ifndef LINUX_2_6 state->callout_termios = callout_driver.init_termios; - state->normal_termios = serial_driver.init_termios; + state->normal_termios = serial_driver->init_termios; #endif state->icount.cts = state->icount.dsr = state->icount.rng = state->icount.dcd = 0; @@ -743,15 +748,17 @@ int wplip_unreg_tty(wplip_link_t *lip_link) return -EBUSY; } - if ((--tty_init_cnt) == 0){ + if ((--tty_init_cnt) == 0 && serial_driver){ int e1; #ifndef LINUX_2_6 - *serial_driver.refcount=0; + serial_driver->refcount=0; #endif - if ((e1 = tty_unregister_driver(&serial_driver))){ + if ((e1 = tty_unregister_driver(serial_driver))){ DEBUG_EVENT( "SERIAL: failed to unregister serial driver (%d)\n", e1); } + put_tty_driver(serial_driver); + serial_driver=NULL; #ifndef LINUX_2_6 if ((e1 = tty_unregister_driver(&callout_driver))){ DEBUG_EVENT( "SERIAL: failed to unregister callout driver (%d)\n", diff --git a/patches/kdrivers/src/net/Module.symvers b/patches/kdrivers/src/net/Module.symvers index 847a7df..46cac80 100644 --- a/patches/kdrivers/src/net/Module.symvers +++ b/patches/kdrivers/src/net/Module.symvers @@ -1,214 +1,79 @@ -0x63926636 got_new_syncer /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xf7567a8a wanpipe_api_buf_check /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xf27fa082 wanpipe_lip_connect /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x7ff2cd30 wanpipe_cdev_tdm_create /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xc6edf870 vpmadt032_free /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0xe656360e sdladrv_hw_mode /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x53ece134 wanpipe_cdev_tx_wake /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x1df80ee2 wanpipe_cdev_rx_wake /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x4a622cec put_xframe /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xd9b2c50c xframe_next_packet /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x92e7bb62 xframe_queue_clearstats /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x20fb12bd sdla_register /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x19e75bf2 voicebus_stop /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0x6072c8a2 dahdi_transcoder_register /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi_transcode EXPORT_SYMBOL -0xc0ef42f1 wp_sppp_input /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL -0x597475a3 dahdi_register_chardev /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x48bddc3c voicebus_current_latency /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0xe5a5dabe dahdi_transcoder_alloc /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi_transcode EXPORT_SYMBOL -0x0c3b63d8 pcmtx_chan /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x57e6ed60 wanpipe_api_sock_rx /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x0a7a356f wanpipe_cdev_event_wake /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xd492463c dahdi_qevent_nolock /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x8f322087 get_xframe /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x2f51f5d4 wanrouter_proc_add_interface /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x59fb2682 sdla_hw_probe /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x083e14a9 dahdi_hooksig /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0xe6ce6bea sync_mode_name /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x9a7a6658 wanpipe_lip_rx /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x8f31cdeb proc_router /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xc61ae179 xbus_activate /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x2923fea0 update_wanted_pcm_mask /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xca1d71ee xbus_disconnect /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x8ab2f853 generic_card_pcm_tospan /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xae91f2fb dahdi_register /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x77da8dee register_wanec_iface /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x1036a1ab bind_api_listen_to_protocol /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x024fe158 xproto_register /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xca365f59 xframe_receive /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x97d5d3a4 xpd_post_init /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xd63e1d87 voicebus_release /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0xf13fc84d report_bad_ioctl /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xb522bb3f vpmadt032_reset /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0x6f189aa8 xbus_request_removal /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x7ae4906e update_xpd_status /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xa99800d3 vpmadt032_echocan_free /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0x006a2198 __dahdi_mulaw /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0xc5fb06b9 xproto_name /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xb463cec4 xpp_open /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x657dc9c8 run_initialize_registers /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x524e2f20 register_wanpipe_fw_protocol /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xb832ec3b register_wan_device /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x635a1d83 gpakConfigurePorts /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0x083f4844 xpd_alloc /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xf4a2bf8e xframe_queue_init /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x135a569e notify_rxsig /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xc98d5cac wanrouter_proc_add_protocol /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xfc5f75a8 wp_sppp_attach /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL -0x90a9f616 wp_sppp_detach /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL -0x8880da1a xbus_setstate /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x13c7069b dahdi_transcode_fops /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x55b59227 vpmadt032_echocan_create /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0x618aefa9 wanpipe_cdev_logger_create /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xdd696e2d send_pcm_frame /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x5bdc1856 xbus_deactivate /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xcada0d4f xbus_free /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xf7f5afa4 wanpipe_ec_event_ctrl /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x5f773fa9 xpp_close /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xcd6633df dahdi_set_dynamic_ioctl /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0xc2b56d8c vpmadt032_get_default_parameters /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0xae308198 xframe_dequeue /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xe31ecbc0 xframe_enqueue /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xe0c9b849 dahdi_transcoder_unregister /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi_transcode EXPORT_SYMBOL -0x9c462e00 voicebus_set_minlatency /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0xf42f429a dahdi_init_tone_state /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0xaf8e1806 xpd_driver_register /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x7b9eebf7 put_xpd /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xbdc234d9 vpmadtreg_register /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0x71aafde0 vpmadtreg_unregister /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0xad0e46e6 debug /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x6201c669 wp_logger_level_fe /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xb475441d dahdi_unregister_echocan_factory /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x7b9b0709 generic_card_pcm_recompute /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xb48548fa __dahdi_lin2a /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x7cd3c2bc wanpipe_ec_poll /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x73bda0a2 wanrouter_proc_delete_protocol /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x13197ddf xpd_byaddr /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x77b0f985 hookstate_changed /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x6dd4c4d6 wanpipe_cdev_free /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xdfd0f6c6 sdla_get_hw_adptr_cnt /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xde37d0ba dahdi_unregister /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x6ad0c191 wp_logger_level_bri /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xbca5d434 get_xpd /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xa0dad261 send_cmd_frame /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x31d0949f dahdi_hdlc_getbuf /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0xc2143791 wanpipe_ec_register /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x1e82f485 wp_sppp_change_mtu /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL -0x0cca3f0e __dahdi_lin2mu /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x6a062e24 xframe_queue_disable /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xc288bfdc wanpipe_cdev_cfg_ctrl_create /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x693264bb xbus_receive_xframe /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x27334886 dump_reg_cmd /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xb8da2b4c wanpipe_global_cdev_free /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x47ff4922 wanpipe_cdev_tdm_ctrl_create /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x08f9283a dahdi_qevent_lock /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0xaa81d611 wanpipe_global_cdev_init /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x7f057450 dahdi_alarm_notify /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x02364d27 wanrouter_encapsulate /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x136b2537 wan_skb_destructor /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x3f234f3e wp_logger_input /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xf87ca3a5 dahdi_sync_tick /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xa7796daa notify_bad_xpd /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xabd8b9c1 dahdi_register_echocan_factory /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x3a216f48 dump_xframe /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xfa083e32 register_wanpipe_api_socket /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xb2cc48ff elect_syncer /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x4de93988 sdla_get_hw_usb_adptr_cnt /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xade2d0d7 sdla_get_hw_probe /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xd90451b0 wanpipe_cdev_timer_create /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x0f19df36 sdladrv_callback /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xbcd66d9d mark_offhook /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xbd4a533a sdla_get_hwinfo /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x8408383f transportops_put /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xecc5ca2c transportops_get /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x05d662e5 dahdi_unregister_chardev /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0xef48df91 proc_add_line /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x22a2999f sdla_unregister /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xa72dc741 dahdi_transcoder_alert /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi_transcode EXPORT_SYMBOL -0x5a8b7434 voicebus_vbb_cache /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0x0e908d4d xproto_global_entry /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x85c05713 wanrouter_type_trans /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xe5eb1132 gpakPingDsp /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0x7f4cf2dd xbus_connect /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xec7b087b gpakConfigureChannel /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0xc98aebe6 wan_get_ip_address /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xfd74fadb wan_set_ip_address /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x7d68ed07 protocol_disconnected /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xc5224c15 bind_api_to_protocol /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x4952a049 xpd_of /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xfdd623b4 valid_xpd_addr /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x38eb6851 unregister_wanpipe_api_socket /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xaac011d2 wanpipe_lip_kick /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x56530b99 xpd_free /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x64a6fdeb alarm2str /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x3b604364 unbind_api_listen_from_protocol /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x46c25d68 xpp_ioctl /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x6df6c4e0 wan_run_wanrouter /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x00feb891 dahdi_receive /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x061bbfef dahdi_dynamic_receive /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi_dynamic EXPORT_SYMBOL -0x058098af xframe_queue_clear /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x19c9445a xproto_card_entry /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x75e09997 generic_card_pcm_fromspan /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x05487ec8 wp_logger_level_default /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x28c9b161 dump_packet /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x12c65ffa dahdi_alarm_channel /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x8ceddc4b vpmadt032_alloc /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0x1177adf5 dahdi_dynamic_register /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi_dynamic EXPORT_SYMBOL -0xeb418feb sdla_hw_bridge_probe /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x04df932b unregister_wanec_iface /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xea9f3201 gl_usb_rw_fast /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x4352c537 dahdi_mf_tone /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x562d2ade wanpipe_ec_isr /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x821b2778 dump_poll /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x65e6b5eb vpmadt032_init /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0x8f621193 xbus_reset_counters /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xe50b39e7 oht_pcm /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x13405f6b unregister_wanpipe_fw_protocol /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xe72f44cb wanpipe_api_listen_rx /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xe6bc2d6d wp_sppp_open /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL -0x238f240b wp_sppp_reopen /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL -0x35bd769a dahdi_ec_span /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x8bab76f8 wp_logger_level_tdmapi /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xed5e8380 dahdi_transcoder_free /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi_transcode EXPORT_SYMBOL -0x528a0730 xframe_queue_count /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xc15e3a6e xbus_command_queue_tick /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xa407ff09 voicebus_start /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0xc4071a06 __dahdi_alaw /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x8aaee5d4 dahdi_hdlc_putbuf /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x7fb76606 dahdi_hdlc_abort /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x72ddd010 wp_sppp_do_ioctl /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL -0x5b7efb57 wanpipe_api_poll_wake /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x529d6203 dahdi_lboname /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x23ed0d64 create_xpd /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xc95646c8 voicebus_transmit /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0x87ab775a xpp_maint /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x651a840a wan_add_gateway /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x805cbe1e wp_sppp_close /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL -0x6cb9bb96 wanrouter_proc_delete_interface /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x2f21a326 unregister_wanpipe_lip_protocol /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0xb53d0d74 __voicebus_init /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0xc11b8c26 xpd_driver_unregister /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x0ebe03d1 unregister_wan_device /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x8ef8fdec dahdi_transmit /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0xb727bb4d dahdi_hdlc_finish /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0xf4690511 xpp_register_request /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x6aa023ac xbus_statename /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x6830b763 xbus_request_sync /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x22317d82 wanpipe_lip_disconnect /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x69a9acb7 dahdi_rbsbits /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x8019389a gpakAlgControl /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/voicebus/dahdi_voicebus EXPORT_SYMBOL -0x74a9ab7b wp_logger_level_te1 /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0x96c83078 send_multibyte_request /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x5a04c2c0 xframe_init /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xed6a48f7 protocol_connected /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x53350bd4 wanpipe_ec_unregister /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x2ef28734 pcmtx /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x66ea5df2 dahdi_dynamic_unregister /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi_dynamic EXPORT_SYMBOL -0xe5a73e62 dahdi_set_hpec_ioctl /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0xc12eb167 wp_logger_level_hwec /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL -0xb842a796 xproto_unregister /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0xfcbd6e58 dahdi_ec_chunk /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/dahdi EXPORT_SYMBOL -0x32c84cc9 register_wanpipe_lip_protocol /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL -0x8ce523b3 xbus_new /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x35cfd104 xbus_num /usr/src/ast1.6/dahdi-linux-2.3.0.1/drivers/dahdi/xpp/xpp EXPORT_SYMBOL -0x00525339 protocol_connecting /root/development/3.5/wanpipe-3.5.17.17/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0xf7567a8a wanpipe_api_buf_check /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0xf27fa082 wanpipe_lip_connect /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x4395d79a wanpipe_cdev_tdm_create /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xe656360e sdladrv_hw_mode /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0x6c0119bc wanpipe_cdev_rx_wake /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xf9fb21bc wanpipe_cdev_tx_wake /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xdb25330a sdla_register /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xc0ef42f1 wp_sppp_input /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL +0x57e6ed60 wanpipe_api_sock_rx /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x08f8c14d wanpipe_cdev_event_wake /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0x07e34cab wanrouter_proc_add_interface /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x59fb2682 sdla_hw_probe /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0x9a7a6658 wanpipe_lip_rx /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x8f31cdeb proc_router /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x77da8dee register_wanec_iface /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x1036a1ab bind_api_listen_to_protocol /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x524e2f20 register_wanpipe_fw_protocol /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x7ead2e4b register_wan_device /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x48a06702 wanrouter_proc_add_protocol /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x90a9f616 wp_sppp_detach /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL +0xfc5f75a8 wp_sppp_attach /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL +0x92294938 wanpipe_cdev_logger_create /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xf7f5afa4 wanpipe_ec_event_ctrl /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x6201c669 wp_logger_level_fe /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0x7cd3c2bc wanpipe_ec_poll /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0xf3d4bc25 wanrouter_proc_delete_protocol /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x2c7556be wanpipe_cdev_free /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xdfd0f6c6 sdla_get_hw_adptr_cnt /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0x6ad0c191 wp_logger_level_bri /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xc2143791 wanpipe_ec_register /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x1e82f485 wp_sppp_change_mtu /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL +0x04a66808 wanpipe_cdev_cfg_ctrl_create /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xb8da2b4c wanpipe_global_cdev_free /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0x629af2d8 wanpipe_cdev_tdm_ctrl_create /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xaa81d611 wanpipe_global_cdev_init /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0x02364d27 wanrouter_encapsulate /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x136b2537 wan_skb_destructor /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x3f234f3e wp_logger_input /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xfa083e32 register_wanpipe_api_socket /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x4de93988 sdla_get_hw_usb_adptr_cnt /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xade2d0d7 sdla_get_hw_probe /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0x0f19df36 sdladrv_callback /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xe4b117b9 wanpipe_cdev_timer_create /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xbd4a533a sdla_get_hwinfo /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xef48df91 proc_add_line /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x22a2999f sdla_unregister /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0x85c05713 wanrouter_type_trans /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0xfd74fadb wan_set_ip_address /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0xc98aebe6 wan_get_ip_address /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x7d68ed07 protocol_disconnected /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0xc5224c15 bind_api_to_protocol /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x38eb6851 unregister_wanpipe_api_socket /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0xaac011d2 wanpipe_lip_kick /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x3b604364 unbind_api_listen_from_protocol /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x6df6c4e0 wan_run_wanrouter /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x05487ec8 wp_logger_level_default /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xeb418feb sdla_hw_bridge_probe /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xea9f3201 gl_usb_rw_fast /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0x04df932b unregister_wanec_iface /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x562d2ade wanpipe_ec_isr /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x13405f6b unregister_wanpipe_fw_protocol /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0xe72f44cb wanpipe_api_listen_rx /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0xe6bc2d6d wp_sppp_open /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL +0x238f240b wp_sppp_reopen /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL +0x8bab76f8 wp_logger_level_tdmapi /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0x72ddd010 wp_sppp_do_ioctl /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL +0x5b7efb57 wanpipe_api_poll_wake /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x651a840a wan_add_gateway /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x805cbe1e wp_sppp_close /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanpipe_syncppp EXPORT_SYMBOL +0x2f21a326 unregister_wanpipe_lip_protocol /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0xe0a257e9 wanrouter_proc_delete_interface /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x0ebe03d1 unregister_wan_device /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x22317d82 wanpipe_lip_disconnect /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x74a9ab7b wp_logger_level_te1 /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0xed6a48f7 protocol_connected /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x53350bd4 wanpipe_ec_unregister /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0xc12eb167 wp_logger_level_hwec /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/sdladrv EXPORT_SYMBOL +0x32c84cc9 register_wanpipe_lip_protocol /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL +0x00525339 protocol_connecting /root/development/3.5/wanpipe-3.5.18.25/patches/kdrivers/src/net/wanrouter EXPORT_SYMBOL diff --git a/patches/kdrivers/src/net/aft_bri.c b/patches/kdrivers/src/net/aft_bri.c index 6f64af2..406b090 100644 --- a/patches/kdrivers/src/net/aft_bri.c +++ b/patches/kdrivers/src/net/aft_bri.c @@ -469,7 +469,7 @@ int aft_bri_led_ctrl(sdla_t *card, int color, int led_pos, int on) int aft_bri_cpld0_set(sdla_t *card, int hwec_reset) { - u8 cpld_reg=0; + wan_bitmap_t cpld_reg=0; u32 reg=0; card->hw_iface.bus_read_4(card->hw,AFT_CHIP_CFG_REG,®); diff --git a/patches/kdrivers/src/net/aft_core.c b/patches/kdrivers/src/net/aft_core.c index f63b598..b067929 100644 --- a/patches/kdrivers/src/net/aft_core.c +++ b/patches/kdrivers/src/net/aft_core.c @@ -35,7 +35,6 @@ #endif #include "aft_core.h" - /*================================================================= * Debugging/Feature Defines *================================================================*/ @@ -50,7 +49,6 @@ #define AFT_FUNC_DEBUG() DEBUG_EVENT("%s:%d\n",__FUNCTION__,__LINE__) #endif - #if 0 # define AFT_XTEST_UPDATE 1 #else @@ -146,13 +144,6 @@ # endif #endif -#if 0 -# warning "AFT_SPAN_SINGLE_IRQ Enabled" -# define AFT_SPAN_SINGLE_IRQ -#else -# undef AFT_SPAN_SINGLE_IRQ -#endif - #if 0 # warning "AFT_SERIAL_DEBUGGING is enabled" # define AFT_SINGLE_DMA_CHAIN 1 @@ -1111,6 +1102,7 @@ static int wan_aft_init (sdla_t *card, wandev_conf_t* conf) /* Obtain hardware configuration parameters */ card->wandev.clocking = conf->clocking; card->wandev.ignore_front_end_status = conf->ignore_front_end_status; + card->wandev.line_coding = conf->line_coding; card->wandev.ttl = conf->ttl; card->wandev.electrical_interface = conf->electrical_interface; card->wandev.udp_port = conf->udp_port; @@ -1402,6 +1394,9 @@ static int wan_aft_init (sdla_t *card, wandev_conf_t* conf) wan_test_bit(AFT_TDM_RING_BUF,&card->u.aft.chip_cfg_status) ? "Enabled" : "Disabled"); + DEBUG_EVENT("%s: Global SPAN IRQ= %s\n", + card->devname,card->u.aft.cfg.span_tx_only_irq?"TX Only":"RX/TX"); + if (card->wandev.ec_dev){ if (conf->tdmv_conf.hw_dtmf){ card->u.aft.tdmv_hw_tone = WANOPT_YES; @@ -1705,10 +1700,13 @@ static int aft_transp_if_init(sdla_t *card, private_area_t *chan, wanif_conf_t * chan->idle_flag=conf->u.aft.idle_flag; DEBUG_EVENT("%s: Idle flag :0x%02x\n", card->devname, chan->idle_flag); } else { - chan->idle_flag=0x7E; + if (IS_BRI_CARD(card)) { + chan->idle_flag=0xFF; + } else { + chan->idle_flag=0x7E; + } } - if (chan->tdmv_zaptel_cfg){ #if defined(CONFIG_PRODUCT_WANPIPE_TDM_VOICE) chan->idle_flag = WAN_TDMV_IDLE_FLAG; @@ -4851,16 +4849,17 @@ static void aft_dev_enable(sdla_t *card, private_area_t *chan) DEBUG_CFG("%s: Enabling FOR NON CHANNELIZED !\n",chan->if_name); -#ifdef AFT_SPAN_SINGLE_IRQ - if (chan->wp_api_op_mode && !chan->hdlc_eng) { - aft_channel_txintr_ctrl(card,chan,0); + if (card->u.aft.cfg.span_tx_only_irq) { + if (chan->wp_api_op_mode && !chan->hdlc_eng) { + aft_channel_rxintr_ctrl(card,chan,0); + } else { + aft_channel_rxintr_ctrl(card,chan,1); + } } else { - aft_channel_txintr_ctrl(card,chan,1); + aft_channel_rxintr_ctrl(card,chan,1); } -#else + aft_channel_txintr_ctrl(card,chan,1); -#endif - aft_channel_rxintr_ctrl(card,chan,1); } wan_set_bit(chan->logic_ch_num,&card->u.aft.active_ch_map); @@ -7447,14 +7446,12 @@ static void __wp_aft_per_per_port_isr(sdla_t *card, u32 dma_rx_reg, u32 dma_tx_r wan_debug_update_timediff(&card->wan_debug_rx_interrupt_timing, __FUNCTION__); #endif - aft_dma_rx_complete(card,chan,0); - -#ifdef AFT_SPAN_SINGLE_IRQ - if (chan->wp_api_op_mode && !chan->hdlc_eng) { - wan_clear_bit(i,&dma_tx_reg); - aft_dma_tx_complete(card,chan,0,0); + /* Skip rx only if we re in tx irq mode and running non hdlc channel */ + if (card->u.aft.cfg.span_tx_only_irq && chan->wp_api_op_mode && !chan->hdlc_eng) { + /* Skip rx and call it on tx */ + } else { + aft_dma_rx_complete(card,chan,0); } -#endif } @@ -7463,7 +7460,7 @@ static void __wp_aft_per_per_port_isr(sdla_t *card, u32 dma_rx_reg, u32 dma_tx_r if (!chan_valid) { chan=(private_area_t*)card->u.aft.dev_to_ch_map[i]; if (!chan){ - DEBUG_EVENT("%s: Error: No Dev for Rx logical ch=%d\n", + DEBUG_ERROR("%s: Error: No Dev for Tx logical ch=%d\n", card->devname,i); continue; } @@ -7487,6 +7484,12 @@ static void __wp_aft_per_per_port_isr(sdla_t *card, u32 dma_rx_reg, u32 dma_tx_r wan_debug_update_timediff(&card->wan_debug_tx_interrupt_timing, __FUNCTION__); #endif aft_dma_tx_complete(card,chan,0,0); + + if (card->u.aft.cfg.span_tx_only_irq) { + if (chan->wp_api_op_mode && !chan->hdlc_eng) { + aft_dma_rx_complete(card,chan,0); + } + } } } @@ -7598,7 +7601,7 @@ static void wp_aft_tdmv_per_port_isr(sdla_t *card) chan=(private_area_t*)card->u.aft.dev_to_ch_map[i]; if (!chan){ - DEBUG_ERROR("%s: Error: No Dev for Rx logical ch=%d\n", + DEBUG_ERROR("%s: Error: TDMV No Dev for Rx logical ch=%d\n", card->devname,i); continue; } @@ -7713,7 +7716,31 @@ static void __wp_aft_wdt_per_port_isr (sdla_t *card, int wdt_intr, int *wdt_disa WAN_TDMV_CALL(rx_tx_span, (card), err); do_not_disable=1; } + + #endif + + if (wdt_intr && + card->wandev.config_id == WANCONFIG_AFT_ANALOG && + card->u.aft.tdmv_mtu > 8) { + +#if 0 + private_area_t *top_chan,*chan; + chan=(private_area_t*)card->u.aft.dev_to_ch_map[0]; + if (chan) { + top_chan=wan_netif_priv(chan->common.dev); + WAN_NETIF_STATS_INC_RX_DROPPED(&chan->common); //chan->if_stats.rx_dropped++; + } +#endif + + if (card->wandev.fe_iface.watchdog) { + card->wandev.fe_iface.watchdog(card); + } + + *timeout=1; + do_not_disable=1; + } + chan_map=card->u.aft.logic_ch_map; chan_map&=~(card->u.aft.tdm_logic_ch_map); @@ -7783,9 +7810,15 @@ static void __wp_aft_wdt_per_port_isr (sdla_t *card, int wdt_intr, int *wdt_disa static void wp_aft_wdt_per_port_isr(sdla_t *card, int wdt_intr) { int wdt_disable = 0; - int timeout=AFT_WDTCTRL_TIMEOUT; + int timeout=card->wdt_timeout; - aft_wdt_reset(card); + /* Only reset/set the wdt if we got an interrupt. This function + can be called from a interrupt poll and we do not want + to distrub the timer interrup by reseting it */ + if (wdt_intr && card->wdt_timeout) { + aft_wdt_reset(card); + aft_wdt_set(card,card->wdt_timeout); + } if (IS_BRI_CARD(card)) { int x; @@ -7803,14 +7836,16 @@ static void wp_aft_wdt_per_port_isr(sdla_t *card, int wdt_intr) } - #ifdef AFT_WDT_ENABLE /* Since this fucntion can be called via interrupt or * via interrupt poll, only re-enable wdt interrupt * if the function was called from the wdt_intr * not from wdt poll */ - if (!wdt_disable && wdt_intr){ - aft_wdt_set(card,(u8)timeout); + if (wdt_disable && wdt_intr){ + card->wdt_timeout=0; + aft_wdt_reset(card); + } else if (wdt_intr) { + card->wdt_timeout=timeout; } #endif @@ -8506,6 +8541,7 @@ static void disable_data_error_intr(sdla_t *card, unsigned char event) event==DEVICE_DOWN?"Device Down": event==CRITICAL_DOWN?"Critical Down" : "Link Down"); + card->wdt_timeout=0; aft_wdt_reset(card); card->hw_iface.bus_read_4(card->hw,AFT_PORT_REG(card,AFT_LINE_CFG_REG), ®); @@ -9992,7 +10028,7 @@ static int aft_dma_rx (sdla_t *card, private_area_t *chan) * reason, thus start using the completed buffers, thus * overflow the data */ if (WAN_NET_RATELIMIT()){ - DEBUG_EVENT("%s: Rx driver buffering overrun rxf=%d rxc=%d !\n", + DEBUG_WARNING("%s: Warning: Rx driver buffering overrun rxfree=%d rxcomplete=%d !\n", chan->if_name, wan_skb_queue_len(&chan->wp_rx_free_list), wan_skb_queue_len(&chan->wp_rx_complete_list)); @@ -10002,7 +10038,7 @@ static int aft_dma_rx (sdla_t *card, private_area_t *chan) dma_chain->skb=wan_skb_dequeue(&chan->wp_rx_free_list); if (!dma_chain->skb) { - DEBUG_ERROR("%s: Critical Rx chain = %d: no free rx bufs (Free=%d Comp=%d)\n", + DEBUG_ERROR("%s: Error: Critical Rx chain = %d: no free rx bufs (Free=%d Comp=%d)\n", chan->if_name,dma_chain->index, wan_skb_queue_len(&chan->wp_rx_free_list), wan_skb_queue_len(&chan->wp_rx_complete_list)); @@ -10249,7 +10285,11 @@ static int aft_rx_dma_chain_handler(private_area_t *chan, int reset) wan_skb_put(dma_chain->skb, rx_el->len); #endif - if (chan->common.usedby == XMTP2_API) { + + /* In case of BRI drop all rx packets */ + if (card->wandev.state != WAN_CONNECTED){ + aft_init_requeue_free_skb(chan, dma_chain->skb); + } else if (chan->common.usedby == XMTP2_API) { #if defined(AFT_XMTP2_API_SUPPORT) aft_core_xmtp2_rx(card, chan, dma_chain->skb); #endif @@ -10749,7 +10789,6 @@ static void aft_port_task (void * card_ptr, int arg) if (wan_test_and_clear_bit(AFT_FE_TDM_RBS,&card->u.aft.port_task_cmd)) { - int err=0; AFT_PERF_STAT_INC(card,port_task,rbs); @@ -10758,6 +10797,7 @@ static void aft_port_task (void * card_ptr, int arg) #ifdef CONFIG_PRODUCT_WANPIPE_TDM_VOICE if (card->wan_tdmv.sc) { + int err; WAN_TDMV_CALL(rbsbits_poll, (&card->wan_tdmv, card), err); } #endif @@ -10864,6 +10904,8 @@ static void aft_port_task (void * card_ptr, int arg) } +#define AFT_MAX_FE_IRQ_SET_CNT 4 + #ifdef AFT_FE_INTR_DEBUG void ___aft_fe_intr_ctrl(sdla_t *card, int status, char *func, int line) #else @@ -10871,6 +10913,7 @@ void __aft_fe_intr_ctrl(sdla_t *card, int status) #endif { u32 reg; + int retry=AFT_MAX_FE_IRQ_SET_CNT; /* if fe_no_intr is set then only allow disabling of fe interrupt */ #ifdef AFT_FE_INTR_DEBUG @@ -10890,18 +10933,32 @@ void __aft_fe_intr_ctrl(sdla_t *card, int status) wan_clear_bit(AFT_CHIPCFG_FE_INTR_CFG_BIT,®); } +retry_fe_irq: card->hw_iface.bus_write_4(card->hw,AFT_PORT_REG(card, AFT_CHIP_CFG_REG),reg); if (status) { u32 treg; card->hw_iface.bus_read_4(card->hw,AFT_PORT_REG(card, AFT_CHIP_CFG_REG),&treg); if (!wan_test_bit(AFT_CHIPCFG_FE_INTR_CFG_BIT,&treg)) { - DEBUG_ERROR("%s: Critical Error failed to enable front end interrupt!\n", - card->devname); + DEBUG_WARNING("%s: Warning failed to enable front end interrupt (AFT_CHIP_CFG_REG: w:0x%08X r:0x%08X)!\n", + card->devname,reg,treg); + retry--; + if (retry > 0) { + goto retry_fe_irq; + } } } } + + if (retry && retry != AFT_MAX_FE_IRQ_SET_CNT) { + DEBUG_WARNING("%s: Warning had to retry %i: enabled front end interrupt ok!\n", + card->devname,AFT_MAX_FE_IRQ_SET_CNT-retry); + + } else if (retry <= 0) { + DEBUG_ERROR("%s: Critical Error failed to enable front end interrupt (retry=%i)!\n", + card->devname,retry); + } } #ifdef AFT_FE_INTR_DEBUG @@ -11147,10 +11204,6 @@ static int aft_tdmv_if_init(sdla_t *card, private_area_t *chan, wanif_conf_t *co return 0; } - if (chan->sw_hdlc_mode) { - return 0; - } - if (!card->u.aft.global_tdm_irq){ DEBUG_ERROR("%s: Error: TDMV Span No is not set!\n", card->devname); @@ -11162,7 +11215,7 @@ static int aft_tdmv_if_init(sdla_t *card, private_area_t *chan, wanif_conf_t *co card->devname,chan->if_name); } - if (conf->hdlc_streaming == 0){ + if (conf->hdlc_streaming == 0 && !chan->sw_hdlc_mode){ int err; @@ -11192,16 +11245,9 @@ static int aft_tdmv_if_init(sdla_t *card, private_area_t *chan, wanif_conf_t *co break; case 40: case 80: - if (!wan_test_bit(AFT_TDM_GLOBAL_ISR,&card->u.aft.chip_cfg_status)) { - /* If Global TDM Feature is not enable - then 40 and 80 bytes TDM are not available */ - chan->mtu=8; - } break; default: - if (card->wandev.config_id == WANCONFIG_AFT_ANALOG) { - chan->mtu=8; - } else if (wan_test_bit(AFT_TDM_GLOBAL_ISR,&card->u.aft.chip_cfg_status)) { + if (wan_test_bit(AFT_TDM_GLOBAL_ISR,&card->u.aft.chip_cfg_status)) { chan->mtu=80; } else { chan->mtu=8; @@ -11670,8 +11716,21 @@ static int aft_dma_rx_tdmv(sdla_t *card, private_area_t *chan) card->hw_iface.bus_write_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),reg); } - if (card->wandev.fe_iface.watchdog) { - err = card->wandev.fe_iface.watchdog(card); + /* watchdog is currently only supported for Analog cards. + * Thus for non-analog cards run the code as before. For + * analog cards, if MTU is greater than 8 (1ms) then it + * means that we are running the watchdog from timer interrupt + * thus do not call it here */ + if (card->wandev.config_id != WANCONFIG_AFT_ANALOG) { + if (card->wandev.fe_iface.watchdog) { + err = card->wandev.fe_iface.watchdog(card); + } + } else { + if (card->u.aft.tdmv_mtu == 8) { + if (card->wandev.fe_iface.watchdog) { + err = card->wandev.fe_iface.watchdog(card); + } + } } /* FIXME: Make this more abstract */ diff --git a/patches/kdrivers/src/net/aft_core_prot.c b/patches/kdrivers/src/net/aft_core_prot.c index 59fc6e7..b02597e 100644 --- a/patches/kdrivers/src/net/aft_core_prot.c +++ b/patches/kdrivers/src/net/aft_core_prot.c @@ -565,6 +565,7 @@ int get_map(wan_device_t *wandev, netdevice_t *dev, struct seq_file* m, int* sto #ifdef AFT_TDM_API_SUPPORT + int aft_tdm_api_init(sdla_t *card, private_area_t *chan, wanif_conf_t *conf) { int err=0; @@ -624,6 +625,9 @@ int aft_tdm_api_init(sdla_t *card, private_area_t *chan, wanif_conf_t *conf) DO NOT USE wp_tdm_api_dev ABOVE THIS LINE */ chan->wp_tdm_api_dev = &span->chans[chan_no]; + /* Initialize the channel for first time use */ + memset(chan->wp_tdm_api_dev,0,sizeof(span->chans[chan_no])); + /* Initilaize TDM API Parameters */ chan->wp_tdm_api_dev->chan = chan; chan->wp_tdm_api_dev->card = card; @@ -722,7 +726,7 @@ int aft_tdm_api_init(sdla_t *card, private_area_t *chan, wanif_conf_t *conf) } } else { chan->wp_tdm_api_dev->operation_mode = WP_TDM_OPMODE_SPAN; - chan->wp_tdm_api_dev->cfg.hw_mtu_mru = chan->tdm_api_chunk; + chan->wp_tdm_api_dev->cfg.hw_mtu_mru = 8; chan->wp_tdm_api_dev->cfg.usr_period = chan->tdm_api_period; chan->wp_tdm_api_dev->cfg.usr_mtu_mru = chan->mtu; diff --git a/patches/kdrivers/src/net/aft_core_utils.c b/patches/kdrivers/src/net/aft_core_utils.c index 0ca076f..980e1af 100644 --- a/patches/kdrivers/src/net/aft_core_utils.c +++ b/patches/kdrivers/src/net/aft_core_utils.c @@ -252,6 +252,8 @@ void aft_wdt_set(sdla_t *card, unsigned char val) card->hw_iface.bus_read_1(card->hw,AFT_PORT_REG(card,wdt_ctrl_reg), ®); aft_wdt_ctrl_set(®,val); card->hw_iface.bus_write_1(card->hw,AFT_PORT_REG(card,wdt_ctrl_reg), reg); + + card->wdt_timeout=val; #endif } @@ -1160,7 +1162,13 @@ int process_udp_mgmt_pkt(sdla_t* card, netdevice_t* dev, private_area_t* chan, i if(IS_E1_CARD(card)) { if_cfg->ec_active_ch=chan->time_slot_map; } else { - if_cfg->ec_active_ch=chan->time_slot_map<<1; + if (IS_BRI_CARD(card)) { + /* BRI always has 2 timeslots (1 & 2) thus 0x06 */ + if_cfg->ec_active_ch=0x06; + } else { + /* T1 scenario */ + if_cfg->ec_active_ch=chan->time_slot_map<<1; + } } if_cfg->chunk_sz=chan->mru/chan->num_of_time_slots; @@ -2577,8 +2585,8 @@ int aft_tdm_ring_rsync(sdla_t *card) chan=(private_area_t*)card->u.aft.dev_to_ch_map[i]; if (!chan){ - DEBUG_ERROR("%s: Error: No Dev for Rx logical ch=%d\n", - card->devname,i); + DEBUG_ERROR("%s: Error: %s(): No Dev for Rx logical ch=%d\n", + card->devname, __FUNCTION__, i); continue; } @@ -3147,8 +3155,8 @@ int aft_register_dump(sdla_t *card) } chan=(private_area_t*)card->u.aft.dev_to_ch_map[i]; if (!chan){ - DEBUG_ERROR("%s: Error: No Dev for Rx logical ch=%d\n", - card->devname,i); + DEBUG_ERROR("%s: Error: %s(): No Dev for Rx logical ch=%d\n", + card->devname, __FUNCTION__, i); continue; } diff --git a/patches/kdrivers/src/net/sdla_8te1.c b/patches/kdrivers/src/net/sdla_8te1.c index 9231ce2..67e6644 100644 --- a/patches/kdrivers/src/net/sdla_8te1.c +++ b/patches/kdrivers/src/net/sdla_8te1.c @@ -641,15 +641,16 @@ static int sdla_ds_te1_global_config(void* pfe) DEBUG_EVENT("%s: Global %s Front End configuration\n", fe->name, FE_MEDIA_DECODE(fe)); - + + WRITE_REG_LINE(0, REG_GTCR1, 0x01); WRITE_REG_LINE(0, REG_GTCCR, 0x00); - WRITE_REG_LINE(0, REG_GTCR1, 0x00); WRITE_REG_LINE(0, REG_GLSRR, 0xFF); WRITE_REG_LINE(0, REG_GFSRR, 0xFF); WP_DELAY(1000); WRITE_REG_LINE(0, REG_GLSRR, 0x00); WRITE_REG_LINE(0, REG_GFSRR, 0x00); + return 0; } @@ -672,6 +673,8 @@ static int sdla_ds_te1_global_unconfig(void* pfe) DEBUG_EVENT("%s: Global %s Front End unconfigation!\n", fe->name, FE_MEDIA_DECODE(fe)); + /* Inhibit the global interrupt */ + WRITE_REG_LINE(0, REG_GTCR1, 0x01); WRITE_REG_LINE(0, REG_GFIMR, 0x00); WRITE_REG_LINE(0, REG_GLIMR, 0x00); WRITE_REG_LINE(0, REG_GBIMR, 0x00); @@ -1313,7 +1316,15 @@ static int sdla_ds_te1_chip_config(void* pfe) WRITE_REG(REG_LMCR, BIT_LMCR_TE); }else{ /* Sep 17, 2009 - Auto AIS transmition (experimental) */ - WRITE_REG(REG_LMCR, BIT_LMCR_ATAIS | BIT_LMCR_TE); + + /* This feature forces AIS when the link goes down. + This breaks the specifications. When link goes down + we should send Yellow alarm */ + if (fe->fe_cfg.cfg.te_cfg.ais_auto_on_los) { + WRITE_REG(REG_LMCR, BIT_LMCR_ATAIS | BIT_LMCR_TE); + } else { + WRITE_REG(REG_LMCR, BIT_LMCR_TE); + } } /* Always configure with AIS alarm enabled */ @@ -1331,9 +1342,10 @@ static int sdla_ds_te1_chip_config(void* pfe) /* INIT RBS bits to 1 */ sdla_ds_te1_rbs_init(fe); - - - + + + + return 0; } @@ -1482,6 +1494,9 @@ static int sdla_ds_te1_config(void* pfe) TE_CLK_DECODE(fe), WAN_TE1_REFCLK(fe), WAN_TE1_ACTIVE_CH(fe)); + DEBUG_EVENT("%s: AIS on LOS: %s\n", + fe->name, + fe->fe_cfg.cfg.te_cfg.ais_auto_on_los?"On":"Off (default)"); if (IS_E1_FEMEDIA(fe)){ DEBUG_EVENT("%s: Sig Mode %s\n", @@ -1517,6 +1532,15 @@ static int sdla_ds_te1_config(void* pfe) wan_set_bit(TE_CONFIGURED,(void*)&fe->te_param.critical); + /* Start the global interrupt only when a first port been configured */ + { + u_int8_t gintr_reg=READ_REG_LINE(0,REG_GTCR1); + if (gintr_reg & 0x01) { + gintr_reg &= ~(0x01); + WRITE_REG_LINE(0, REG_GTCR1, gintr_reg); + } + } + #if 0 /* FIXME: Enable all interrupt only when link is connected (event global) */ @@ -2218,6 +2242,18 @@ sdla_ds_te1_update_alarms(sdla_fe_t *fe, u_int32_t alarms) fe->fe_alarm &= ~WAN_TE_BIT_ALARM_RED; } } + + DEBUG_TE1("%s: Alarm update called prev=0x%08X new=0x%08X...\n",fe->name,fe->fe_prev_alarm,fe->fe_alarm); + if (fe->fe_prev_alarm != fe->fe_alarm) { + sdla_t* card = (sdla_t*)fe->card; + fe->fe_prev_alarm = fe->fe_alarm; + if (card->wandev.te_report_alarms){ + card->wandev.te_report_alarms( + card, + fe->fe_alarm); + } + } + return 0; } @@ -2788,15 +2824,25 @@ sdla_ds_te1_rbs_print_bits(sdla_fe_t* fe, unsigned long bits, char *msg) { int i, max_channels = fe->te_param.max_channels; int start_chan = 1; + char bits_str[256]; if (IS_E1_FEMEDIA(fe)){ start_chan = 0; } - _DEBUG_EVENT("%s: %s ", fe->name, msg); - for(i=start_chan; i <= max_channels; i++) - _DEBUG_EVENT("%01d", + + wp_snprintf(bits_str, sizeof(bits_str), "%s: %s ", fe->name, msg); + + for(i=start_chan; i <= max_channels; i++) { + + wp_snprintf(&bits_str[strlen(bits_str)], + sizeof(bits_str) - strlen(bits_str), + "%01d", wan_test_bit(i, &bits) ? 1 : 0); - _DEBUG_EVENT("\n"); + + } + + DEBUG_EVENT("%s\n", bits_str); + return 0; } @@ -2826,10 +2872,14 @@ sdla_ds_te1_rbs_print(sdla_fe_t* fe, int last_status) DEBUG_EVENT("%s: Last Status:\n", fe->name); sdla_ds_te1_rbs_print_banner(fe); - sdla_ds_te1_rbs_print_bits(fe, fe->te_param.tx_rbs_A, "TX A:"); - sdla_ds_te1_rbs_print_bits(fe, fe->te_param.tx_rbs_B, "TX B:"); - sdla_ds_te1_rbs_print_bits(fe, fe->te_param.tx_rbs_C, "TX C:"); - sdla_ds_te1_rbs_print_bits(fe, fe->te_param.tx_rbs_D, "TX D:"); + + /* The TX bits come from user-mode in 1-based form, for + * consistency with RX bits, which printed in 0-based + * form, shift the TX bits right by one. */ + sdla_ds_te1_rbs_print_bits(fe, fe->te_param.tx_rbs_A >> 1, "TX A:"); + sdla_ds_te1_rbs_print_bits(fe, fe->te_param.tx_rbs_B >> 1, "TX B:"); + sdla_ds_te1_rbs_print_bits(fe, fe->te_param.tx_rbs_C >> 1, "TX C:"); + sdla_ds_te1_rbs_print_bits(fe, fe->te_param.tx_rbs_D >> 1, "TX D:"); DEBUG_EVENT("%s:\n", fe->name); }else{ unsigned int i, chan = 0; @@ -3669,8 +3719,8 @@ static void sdla_ds_te1_timer(unsigned long pfe) ****************************************************************************** * sdla_ds_te1_add_timer() * - * Description: Enable software timer interrupt in delay ms. - * Arguments: delay - (in ms) + * Description: Enable software timer interrupt. + * Arguments: delay - (in Seconds!!) * Returns: ****************************************************************************** */ @@ -3683,7 +3733,7 @@ static int sdla_ds_te1_add_timer(sdla_fe_t* fe, unsigned long delay) return 0; } - //err = wan_add_timer(&fe->timer, delay * HZ / 1000); + //err = wan_add_timer(&fe->timer, delay * HZ / 1000); //this is if 'delay' is in Ms err = wan_add_timer(&fe->timer, delay * HZ ); if (err){ @@ -3959,14 +4009,14 @@ static int sdla_ds_te1_swirq_alarm(sdla_fe_t* fe, int type) WAN_TE1_SWIRQ_TYPE_DECODE(type), WAN_TE1_SWIRQ_SUBTYPE_DECODE(swirq->subtype)); sdla_ds_te1_update_alarms(fe, alarms); - if (sdla_ds_te1_set_status(fe, fe->fe_alarm)){ - if (fe->fe_status == FE_CONNECTED){ + if (sdla_ds_te1_set_status(fe, fe->fe_alarm)) { + if (fe->fe_status == FE_CONNECTED) { sdla_ds_te1_swirq_trigger( fe, WAN_TE1_SWIRQ_TYPE_LINK, WAN_TE1_SWIRQ_SUBTYPE_LINKUP, POLLING_TE1_TIMER); - }else{ + } else { sdla_ds_te1_swirq_trigger( fe, WAN_TE1_SWIRQ_TYPE_LINK, @@ -4685,6 +4735,12 @@ static int sdla_ds_te1_liu_rlb(sdla_fe_t* fe, unsigned char cmd) return 0; } + +#if 0 + +/*NC: March 31, 2010: replaced by sdla_ds_te1_liu_alb() + Function is still here for historical reasons */ + /* ****************************************************************************** * sdla_ds_te1_fr_flb() @@ -4730,6 +4786,7 @@ static int sdla_ds_te1_fr_flb(sdla_fe_t* fe, unsigned char cmd) WRITE_REG(REG_RCR3, value); return 0; } +#endif /* ****************************************************************************** diff --git a/patches/kdrivers/src/net/sdla_bri.c b/patches/kdrivers/src/net/sdla_bri.c index a11356f..8c824f2 100644 --- a/patches/kdrivers/src/net/sdla_bri.c +++ b/patches/kdrivers/src/net/sdla_bri.c @@ -32,6 +32,11 @@ * July 21 2009 David Rokhvarg * v1.4 Implemented T1 timer for NT. * + * January 24 2011 David Rokhvarg + * v1.5 The T3 timer was broken by changes in AFT Core - fixed it + * by adding T3_TIMER_EXPIRED bit. + * The T3_TIMER_EXPIRED bit resolved "failed TE activation" + * issue on some BRI lines. ****************************************************************************** */ @@ -2082,7 +2087,6 @@ static int32_t wp_bri_post_init(void *pfe) return 0; } - /** * l1_timer_start_t3 */ @@ -2110,8 +2114,13 @@ static void l1_timer_start_t3(void *pport) return; } - if(!wan_test_and_set_bit(T3_TIMER_ACTIVE, &port_ptr->timer_flags)){ + if (!wan_test_bit(T3_TIMER_ACTIVE, &port_ptr->timer_flags) && + !wan_test_bit(T3_TIMER_EXPIRED, &port_ptr->timer_flags)){ + DEBUG_HFC_S0_STATES("Starting T3 timer...\n"); + + wan_set_bit(T3_TIMER_ACTIVE, &port_ptr->timer_flags); + wan_add_timer(&port_ptr->t3_timer, (XHFC_TIMER_T3 * HZ) / 1000); } } @@ -2128,7 +2137,10 @@ static void l1_timer_stop_t3(void *pport) DEBUG_HFC_S0_STATES("%s(): mod_no: %i, port number: %i\n", __FUNCTION__, mod_no, port_ptr->idx); if(wan_test_bit(T3_TIMER_ACTIVE, &port_ptr->timer_flags)){ - wan_clear_bit(T3_TIMER_ACTIVE, &port_ptr->timer_flags); + + wan_clear_bit(T3_TIMER_ACTIVE, &port_ptr->timer_flags); + wan_clear_bit(T3_TIMER_EXPIRED, &port_ptr->timer_flags); + wan_clear_bit(HFC_L1_ACTIVATING, &port_ptr->l1_flags); wan_del_timer(&port_ptr->t3_timer); } @@ -2161,6 +2173,9 @@ static void l1_timer_expire_t3(unsigned long pport) DEBUG_HFC_S0_STATES("%s()\n", __FUNCTION__); if (wandev->fe_enable_timer){ + + wan_set_bit(T3_TIMER_EXPIRED, &port_ptr->timer_flags); + wandev->fe_enable_timer(fe->card); } } @@ -2181,6 +2196,8 @@ static void __l1_timer_expire_t3(sdla_fe_t *fe) DEBUG_HFC_S0_STATES("%s(): mod_no: %i, port number: %i\n", __FUNCTION__, mod_no, port_ptr->idx); wan_clear_bit(T3_TIMER_ACTIVE, &port_ptr->timer_flags); + wan_clear_bit(T3_TIMER_EXPIRED, &port_ptr->timer_flags); + wan_clear_bit(HFC_L1_ACTIVATING, &port_ptr->l1_flags); xhfc_ph_command(fe, port_ptr, HFC_L1_FORCE_DEACTIVATE_TE); } @@ -2247,6 +2264,10 @@ static void l1_timer_stop_t4(void *pport) * Description: l1_timer_expire_t4 - called when timer t4 expires. * Send (PH_DEACTIVATE | INDICATION) to upper layer. * + * Note that this function does NOT access the hardware so we + * don't have to use wandev->fe_enable_timer() as it is done + * for T1 and T3. + * * Arguments: * Returns: ****************************************************************************** @@ -2314,7 +2335,7 @@ static void __l1_timer_expire_t1(sdla_fe_t *fe) sdla_bri_param_t *bri = &fe->bri_param; wp_bri_module_t *bri_module; bri_xhfc_port_t *port_ptr; - u8 mod_no, port_no; + u8 mod_no, port_no, connected = 0; mod_no = fe_line_no_to_physical_mod_no(fe); port_no = fe_line_no_to_port_no(fe); @@ -2323,12 +2344,31 @@ static void __l1_timer_expire_t1(sdla_fe_t *fe) port_ptr = &bri_module->port[port_no]; DEBUG_HFC_S0_STATES("%s(): mod_no: %i, port number: %i\n", __FUNCTION__, mod_no, port_ptr->idx); + + wan_clear_bit(T1_TIMER_EXPIRED, &port_ptr->timer_flags); + wan_clear_bit(T1_TIMER_ACTIVE, &port_ptr->timer_flags); + if( (port_ptr->su_state.bit.v_su_info0) || + (!port_ptr->su_state.bit.v_su_fr_sync)){ + /* If receiving INFO0 or Lost Framing, after T1 expired, we must deactivate + * NT, because otherwise the user will be prevented from NT activation + * forever by the HFC_L1_ACTIVATED bit. */ + connected = 0; + }else if(port_ptr->su_state.bit.v_su_fr_sync){ + /* Got synchronized. No automatic state change expected. */ + connected = 1; + } + if(!wan_test_bit(HFC_L1_ACTIVATED, &port_ptr->l1_flags)) { - DEBUG_HFC_S0_STATES("%s(): De-Activating NT...\n", __FUNCTION__); - + DEBUG_HFC_S0_STATES("%s(): (1) De-Activating NT...\n", __FUNCTION__); xhfc_ph_command(fe, port_ptr, HFC_L1_DEACTIVATE_NT); + + }else if(!connected){ + + DEBUG_HFC_S0_STATES("%s(): (2) De-Activating NT...\n", __FUNCTION__); + xhfc_ph_command(fe, port_ptr, HFC_L1_DEACTIVATE_NT); + }else{ /* T1 expired AFTER line become active. */ DEBUG_HFC_S0_STATES("%s(): NT in Activated state. Doing nothing.\n", __FUNCTION__); @@ -2362,10 +2402,12 @@ static void l1_timer_start_t1(void *pport) return; } - if(!wan_test_and_set_bit(T1_TIMER_ACTIVE, &port_ptr->timer_flags)){ + if (!wan_test_bit(T1_TIMER_ACTIVE, &port_ptr->timer_flags) && + !wan_test_bit(T1_TIMER_EXPIRED, &port_ptr->timer_flags)){ + DEBUG_HFC_S0_STATES("%s(): Starting T1 timer...\n", __FUNCTION__); - wan_clear_bit(T1_TIMER_EXPIRED, &port_ptr->timer_flags); + wan_set_bit(T1_TIMER_ACTIVE, &port_ptr->timer_flags); wan_add_timer(&port_ptr->t1_timer, (XHFC_TIMER_T1 * HZ) / 1000); @@ -2386,7 +2428,10 @@ static void l1_timer_stop_t1(void *pport) DEBUG_HFC_S0_STATES("%s(): mod_no: %i, port number: %i\n", __FUNCTION__, mod_no, port_ptr->idx); if(wan_test_bit(T1_TIMER_ACTIVE, &port_ptr->timer_flags)){ - wan_clear_bit(T1_TIMER_ACTIVE, &port_ptr->timer_flags); + + wan_clear_bit(T1_TIMER_ACTIVE, &port_ptr->timer_flags); + wan_clear_bit(T1_TIMER_EXPIRED, &port_ptr->timer_flags); + wan_del_timer(&port_ptr->t1_timer); } } @@ -2657,35 +2702,43 @@ static int32_t wp_bri_polling(sdla_fe_t* fe) bri_module = &bri->mod[mod_no]; port_ptr = &bri_module->port[port_no]; - DEBUG_HFC_S0_STATES("%s()\n", __FUNCTION__); + /* Note that aft_core.c calls card->wandev.fe_iface.polling() + * UNCONDITIONALLY, on each Front End interrupt. + * It is a problem for BRI timers because we need an additional flag, + * which will indicate that "T1 timer really expired". + * Only if the flag is set, we act as we should on timer expiration. */ if (port_ptr->mode & PORT_MODE_TE) { /*************/ /* TE timers */ if(wan_test_bit(T3_TIMER_ACTIVE, &port_ptr->timer_flags)){ + DEBUG_HFC_S0_STATES("%s(): TE T3_TIMER_ACTIVE\n", __FUNCTION__); + } + + if(wan_test_bit(T3_TIMER_EXPIRED, &port_ptr->timer_flags)){ + DEBUG_HFC_S0_STATES("%s(): TE T3_TIMER_EXPIRED\n", __FUNCTION__); + } + + if (wan_test_bit(T3_TIMER_EXPIRED, &port_ptr->timer_flags) && + wan_test_bit(T3_TIMER_ACTIVE, &port_ptr->timer_flags)){ + __l1_timer_expire_t3(fe); } }else{ /*************/ /* NT timers */ - /* Note that aft_core.c calls card->wandev.fe_iface.polling() UNCONDITIONALLY, on - * each Front End interrupt. It is a problem for BRI timers because we need an additional flag, - * which will indicate that "T1 timer really expired". Only if the flag is set, we act as - * we should on timer expiration. */ - + if(wan_test_bit(T1_TIMER_ACTIVE, &port_ptr->timer_flags)){ + DEBUG_HFC_S0_STATES("%s(): NT T1_TIMER_ACTIVE\n", __FUNCTION__); + } + if(wan_test_bit(T1_TIMER_EXPIRED, &port_ptr->timer_flags)){ + DEBUG_HFC_S0_STATES("%s(): NT T1_TIMER_EXPIRED\n", __FUNCTION__); + } + + if (wan_test_bit(T1_TIMER_EXPIRED, &port_ptr->timer_flags) && + wan_test_bit(T1_TIMER_ACTIVE, &port_ptr->timer_flags)) { - wan_clear_bit(T1_TIMER_EXPIRED, &port_ptr->timer_flags); - - if(wan_test_bit(T1_TIMER_ACTIVE, &port_ptr->timer_flags)){ - - wan_clear_bit(T1_TIMER_ACTIVE, &port_ptr->timer_flags); - - __l1_timer_expire_t1(fe); - } - - }else{ - DEBUG_HFC_S0_STATES("%s(): T1 did NOT expire yet. Doing nothing.\n", __FUNCTION__); + __l1_timer_expire_t1(fe); } } return 0; @@ -2905,11 +2958,13 @@ static int wp_bri_set_fe_status(sdla_fe_t *fe, unsigned char new_status) switch(new_status) { case WAN_FE_CONNECTED: - DEBUG_HFC_S0_STATES("L2->L1 -- ACTIVATE REQUEST\n"); + DEBUG_L2_TO_L1_ACTIVATION("%s: L2->L1 -- ACTIVATE REQUEST\n", + fe->name); if (port_ptr->mode & PORT_MODE_TE) { if (wan_test_bit(HFC_L1_ACTIVATED, &port_ptr->l1_flags)) { /* The line is already in active state. Confirm to L2 that line is connected. */ - DEBUG_HFC_S0_STATES("TE: L1->L2 -- ACTIVATE CONFIRM\n"); + DEBUG_L2_TO_L1_ACTIVATION("%s: TE: L1->L2 -- ACTIVATE CONFIRM (line already active)\n", + fe->name); sdla_bri_set_status(fe, mod_no, port_no, FE_CONNECTED); } else { wan_test_and_set_bit(HFC_L1_ACTIVATING, &port_ptr->l1_flags); @@ -2919,7 +2974,8 @@ static int wp_bri_set_fe_status(sdla_fe_t *fe, unsigned char new_status) } else { if(wan_test_bit(HFC_L1_ACTIVATED, &port_ptr->l1_flags)) { /* The line is already in active state. Confirm to L2 that line is connected. */ - DEBUG_HFC_S0_STATES("NT: L1->L2 -- ACTIVATE CONFIRM\n"); + DEBUG_L2_TO_L1_ACTIVATION("%s: NT: L1->L2 -- ACTIVATE CONFIRM (line already active)\n", + fe->name); sdla_bri_set_status(fe, mod_no, port_no, FE_CONNECTED); } else { xhfc_ph_command(fe, port_ptr, HFC_L1_ACTIVATE_NT); @@ -2930,7 +2986,8 @@ static int wp_bri_set_fe_status(sdla_fe_t *fe, unsigned char new_status) break; case WAN_FE_DISCONNECTED: - DEBUG_HFC_S0_STATES("L2->L1 -- DEACTIVATE REQUEST\n"); + DEBUG_L2_TO_L1_ACTIVATION("%s: L2->L1 -- DEACTIVATE REQUEST\n", + fe->name); if (port_ptr->mode & PORT_MODE_TE) { /* no deact request in TE mode ! */ DEBUG_ERROR("%s(): %s: Error: 'deactivate' request is invalid for TE!\n", @@ -3035,34 +3092,35 @@ static void xhfc_ph_command(sdla_fe_t *fe, bri_xhfc_port_t *port, u_char command switch (command) { case HFC_L1_ACTIVATE_TE: - DEBUG_HFC_S0_STATES("HFC_L1_ACTIVATE_TE port(%i)\n", port->idx); + DEBUG_L2_TO_L1_ACTIVATION("HFC_L1_ACTIVATE_TE port(%i)\n", port->idx); WRITE_REG(R_SU_SEL, port->idx); WRITE_REG(A_SU_WR_STA, STA_ACTIVATE); break; case HFC_L1_FORCE_DEACTIVATE_TE: - DEBUG_HFC_S0_STATES("HFC_L1_FORCE_DEACTIVATE_TE port(%i)\n", port->idx); + DEBUG_L2_TO_L1_ACTIVATION("HFC_L1_FORCE_DEACTIVATE_TE port(%i)\n", port->idx); WRITE_REG(R_SU_SEL, port->idx); WRITE_REG(A_SU_WR_STA, STA_DEACTIVATE); break; case HFC_L1_ACTIVATE_NT: - DEBUG_HFC_S0_STATES("HFC_L1_ACTIVATE_NT port(%i)\n", port->idx); + DEBUG_L2_TO_L1_ACTIVATION("HFC_L1_ACTIVATE_NT port(%i)\n", port->idx); WRITE_REG(R_SU_SEL, port->idx); WRITE_REG(A_SU_WR_STA, STA_ACTIVATE | M_SU_SET_G2_G3); break; case HFC_L1_DEACTIVATE_NT: - DEBUG_HFC_S0_STATES("HFC_L1_DEACTIVATE_NT port(%i)\n", port->idx); + DEBUG_L2_TO_L1_ACTIVATION("HFC_L1_DEACTIVATE_NT port(%i)\n", port->idx); WRITE_REG(R_SU_SEL, port->idx); WRITE_REG(A_SU_WR_STA, STA_DEACTIVATE); break; + default: - DEBUG_HFC_S0_STATES("Invalid command: %i !\n", command); + DEBUG_L2_TO_L1_ACTIVATION("Invalid command: %i !\n", command); break; } } @@ -3394,15 +3452,15 @@ static int32_t xhfc_interrupt(sdla_fe_t *fe, u8 mod_no) reg_r_su_irq r_su_irq; reg_r_misc_irq r_misc_irq; - BRI_FUNC(); - if(validate_physical_mod_no(mod_no, __FUNCTION__)){ return 0; } bri_module = &bri->mod[mod_no]; - //DEBUG_HFC_SU_IRQ("%s(%lu): %s: mod_no: %d\n", __FUNCTION__, jiffies, fe->name, mod_no); +#if 0 + DEBUG_HFC_SU_IRQ("%s(%lu): %s: mod_no: %d\n", __FUNCTION__, jiffies, fe->name, mod_no); +#endif /* clear SU state interrupt (for all ports) */ r_su_irq.reg = READ_REG(R_SU_IRQ); @@ -3491,7 +3549,7 @@ static int32_t xhfc_interrupt(sdla_fe_t *fe, u8 mod_no) /* receive D-Channel Data */ if (fifo_irq & (1 << (port_no*8+5)) ) { netskb_t *skb = NULL; - DBG_MODULE_TESTER("There is receive D-Channel Data for port_no %d\n", port_no); + DBG_MODULE_TESTER("There is Rx D-Channel Data for port_no %d\n", port_no); skb = wp_bri_dchan_rx(fe, mod_no, port_no); if(skb != NULL){ @@ -3503,7 +3561,7 @@ static int32_t xhfc_interrupt(sdla_fe_t *fe, u8 mod_no) DEBUG_HFC_IRQ("%s(): chan ptr: 0x%p\n", __FUNCTION__, chan); if (!chan){ - DEBUG_ERROR("%s: Error: No Dev for Rx logical ch=%d\n", + DEBUG_ERROR("%s: Error: BRI D-Chan: No Device for Rx data.(logical ch=%d)\n", card->devname, BRI_DCHAN_LOGIC_CHAN); break; } diff --git a/patches/kdrivers/src/net/sdla_bri_tdmv.c b/patches/kdrivers/src/net/sdla_bri_tdmv.c index 00a5d14..096cc79 100644 --- a/patches/kdrivers/src/net/sdla_bri_tdmv.c +++ b/patches/kdrivers/src/net/sdla_bri_tdmv.c @@ -1287,20 +1287,26 @@ static void wp_tdmv_bri_tone (void* card_id, wan_event_t *event) WAN_ASSERT1(wan_tdmv->sc == NULL); wr = wan_tdmv->sc; - if (event->type == WAN_EVENT_RM_DTMF){ - DEBUG_EVENT("%s: Received DTMF Event at TDM BRI (%d:%c)!\n", - card->devname, - event->channel, - event->digit); - }else{ - DEBUG_EVENT("%s: Received Tone Event at TDM BRI (%d:%c:%s:%s)!\n", + + switch(event->type) { + case WAN_EVENT_EC_DTMF: + case WAN_EVENT_EC_FAX_1100: + break; + default: + DEBUG_ERROR("%s: %s() Error Invalid event type %X (%s)!\n", + card->devname, __FUNCTION__, event->type, WAN_EVENT_TYPE_DECODE(event->type)); + return; + } + + DEBUG_TDMV( + "[TDMV] %s: Received EC Tone (%s) Event at TDM (chan=%d digit=%c port=%s type=%s)!\n", card->devname, + WAN_EVENT_TYPE_DECODE(event->type), event->channel, event->digit, (event->tone_port == WAN_EC_CHANNEL_PORT_ROUT)?"ROUT":"SOUT", - (event->tone_type == WAN_EC_TONE_PRESENT)?"PRESENT":"STOP"); - } - + (event->tone_type == WAN_EC_TONE_PRESENT)?"PRESENT":"STOP"); + if (!(wr->tonemask & (1 << (event->channel-1)))){ DEBUG_EVENT("%s: Tone detection is not enabled for the channel %d\n", card->devname, diff --git a/patches/kdrivers/src/net/sdla_chdlc.c b/patches/kdrivers/src/net/sdla_chdlc.c index dcb5716..48fd183 100644 --- a/patches/kdrivers/src/net/sdla_chdlc.c +++ b/patches/kdrivers/src/net/sdla_chdlc.c @@ -297,7 +297,7 @@ static int wanpipe_tty_init(sdla_t *card); static void wanpipe_tty_receive(sdla_t *, unsigned, unsigned int); static int wanpipe_tty_trigger_poll(sdla_t *card); -static struct tty_driver serial_driver; +static struct tty_driver *serial_driver; static int tty_init_cnt=0; static struct serial_state rs_table[NR_PORTS]; @@ -1412,14 +1412,18 @@ static void disable_comm (sdla_t *card) return; } - if (!(--tty_init_cnt)){ + if (!(--tty_init_cnt) && serial_driver){ int e1; #ifndef LINUX_2_6 - *serial_driver.refcount=0; + serial_driver->refcount=0; #endif - if ((e1 = tty_unregister_driver(&serial_driver))) + if ((e1 = tty_unregister_driver(serial_driver))) { printk(KERN_INFO "SERIAL: failed to unregister serial driver (%d)\n", e1); + } + put_tty_driver(serial_driver); + serial_driver=NULL; + #ifndef LINUX_2_6 if ((e1 = tty_unregister_driver(&callout_driver))) printk(KERN_INFO "SERIAL: failed to unregister callout driver (%d)\n", @@ -5169,8 +5173,13 @@ static int config_tty (sdla_t *card) } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) +static int change_speed(sdla_t *card, struct tty_struct *tty, + struct ktermios *old_termios) +#else static int change_speed(sdla_t *card, struct tty_struct *tty, struct termios *old_termios) +#endif { int baud, ret=0; unsigned cflag; @@ -5279,7 +5288,11 @@ static int change_speed(sdla_t *card, struct tty_struct *tty, } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) +static void wanpipe_tty_set_termios(struct tty_struct *tty, struct ktermios *old_termios) +#else static void wanpipe_tty_set_termios(struct tty_struct *tty, struct termios *old_termios) +#endif { sdla_t *card; int err=1; @@ -5336,22 +5349,28 @@ static void wanpipe_tty_set_termios(struct tty_struct *tty, struct termios *old_ return; } + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)) +static int wanpipe_tty_put_char(struct tty_struct *tty, unsigned char ch) +#else static void wanpipe_tty_put_char(struct tty_struct *tty, unsigned char ch) +#endif { sdla_t *card; unsigned long smp_flags=0; + int err=-EINVAL; if (!tty){ - return; + return err; } card = (sdla_t *)tty->driver_data; if (!card) - return; + goto wanpipe_tty_put_char_exit; if (card->wandev.state != WAN_CONNECTED) - return; + goto wanpipe_tty_put_char_exit; if(card->type != SDLA_S514) s508_lock(card,&smp_flags); @@ -5362,7 +5381,7 @@ static void wanpipe_tty_put_char(struct tty_struct *tty, unsigned char ch) if(card->type != SDLA_S514) s508_unlock(card,&smp_flags); - return; + goto wanpipe_tty_put_char_exit; } if (chdlc_send(card,(void*)&ch,1,0)){ @@ -5376,8 +5395,16 @@ static void wanpipe_tty_put_char(struct tty_struct *tty, unsigned char ch) if(card->type != SDLA_S514) s508_unlock(card,&smp_flags); + + err=0; + +wanpipe_tty_put_char_exit: +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)) + return err; +#else return; +#endif } static void wanpipe_tty_flush_chars(struct tty_struct *tty) @@ -5564,60 +5591,64 @@ int wanpipe_tty_init(sdla_t *card) tty_driver_mode = card->u.c.async_mode; - - memset(&serial_driver, 0, sizeof(struct tty_driver)); - serial_driver.magic = TTY_DRIVER_MAGIC; + serial_driver=alloc_tty_driver(NR_PORTS); + if (!serial_driver) { + return -ENOMEM; + } + + + serial_driver->magic = TTY_DRIVER_MAGIC; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)) - serial_driver.owner = THIS_MODULE; + serial_driver->owner = THIS_MODULE; #endif - serial_driver.driver_name = "wanpipe_tty"; + serial_driver->driver_name = "wanpipe_tty"; #if (LINUX_VERSION_CODE > 0x2032D && defined(CONFIG_DEVFS_FS)) - serial_driver.name = "ttyWP/%d"; + serial_driver->name = "ttyWP/%d"; #else - serial_driver.name = "ttyWP"; + serial_driver->name = "ttyWP"; #endif - serial_driver.major = WAN_TTY_MAJOR; - serial_driver.minor_start = WAN_TTY_MINOR; - serial_driver.num = NR_PORTS; - serial_driver.type = TTY_DRIVER_TYPE_SERIAL; - serial_driver.subtype = SERIAL_TYPE_NORMAL; + serial_driver->major = WAN_TTY_MAJOR; + serial_driver->minor_start = WAN_TTY_MINOR; + serial_driver->num = NR_PORTS; + serial_driver->type = TTY_DRIVER_TYPE_SERIAL; + serial_driver->subtype = SERIAL_TYPE_NORMAL; - serial_driver.init_termios = tty_std_termios; - serial_driver.init_termios.c_cflag = + serial_driver->init_termios = tty_std_termios; + serial_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; - serial_driver.flags = TTY_DRIVER_REAL_RAW; + serial_driver->flags = TTY_DRIVER_REAL_RAW; #ifdef LINUX_2_6 - tty_set_operations(&serial_driver, &wanpipe_tty_ops); + tty_set_operations(serial_driver, &wanpipe_tty_ops); #else - serial_driver.refcount = &serial_refcount; - serial_driver.table = serial_table; - serial_driver.termios = serial_termios; - serial_driver.termios_locked = serial_termios_locked; + serial_driver->refcount = &serial_refcount; + serial_driver->table = serial_table; + serial_driver->termios = serial_termios; + serial_driver->termios_locked = serial_termios_locked; - serial_driver.open = wanpipe_tty_open; - serial_driver.close = wanpipe_tty_close; - serial_driver.write = wanpipe_tty_write; + serial_driver->open = wanpipe_tty_open; + serial_driver->close = wanpipe_tty_close; + serial_driver->write = wanpipe_tty_write; - serial_driver.put_char = wanpipe_tty_put_char; - serial_driver.flush_chars = wanpipe_tty_flush_chars; - serial_driver.write_room = wanpipe_tty_write_room; - serial_driver.chars_in_buffer = wanpipe_tty_chars_in_buffer; - serial_driver.flush_buffer = wanpipe_tty_flush_buffer; - //serial_driver.ioctl = wanpipe_tty_ioctl; - serial_driver.throttle = wanpipe_tty_throttle; - serial_driver.unthrottle = wanpipe_tty_unthrottle; - serial_driver.send_xchar = wanpipe_tty_send_xchar; - serial_driver.set_termios = wanpipe_tty_set_termios; - serial_driver.stop = wanpipe_tty_stop; - serial_driver.start = wanpipe_tty_start; - serial_driver.hangup = wanpipe_tty_hangup; - serial_driver.break_ctl = wanpipe_tty_break; - serial_driver.wait_until_sent = wanpipe_tty_wait_until_sent; - serial_driver.read_proc = wanpipe_tty_read_proc; + serial_driver->put_char = wanpipe_tty_put_char; + serial_driver->flush_chars = wanpipe_tty_flush_chars; + serial_driver->write_room = wanpipe_tty_write_room; + serial_driver->chars_in_buffer = wanpipe_tty_chars_in_buffer; + serial_driver->flush_buffer = wanpipe_tty_flush_buffer; + //serial_driver->ioctl = wanpipe_tty_ioctl; + serial_driver->throttle = wanpipe_tty_throttle; + serial_driver->unthrottle = wanpipe_tty_unthrottle; + serial_driver->send_xchar = wanpipe_tty_send_xchar; + serial_driver->set_termios = wanpipe_tty_set_termios; + serial_driver->stop = wanpipe_tty_stop; + serial_driver->start = wanpipe_tty_start; + serial_driver->hangup = wanpipe_tty_hangup; + serial_driver->break_ctl = wanpipe_tty_break; + serial_driver->wait_until_sent = wanpipe_tty_wait_until_sent; + serial_driver->read_proc = wanpipe_tty_read_proc; /* * The callout device is just like normal device except for @@ -5635,9 +5666,12 @@ int wanpipe_tty_init(sdla_t *card) callout_driver.proc_entry = 0; #endif - if (tty_register_driver(&serial_driver)){ + if (tty_register_driver(serial_driver)){ printk(KERN_INFO "%s: Failed to register serial driver!\n", card->devname); + put_tty_driver(serial_driver); + serial_driver=NULL; + return -EINVAL; } #ifndef LINUX_2_6 @@ -5686,7 +5720,7 @@ int wanpipe_tty_init(sdla_t *card) #ifndef LINUX_2_6 state->callout_termios = callout_driver.init_termios; - state->normal_termios = serial_driver.init_termios; + state->normal_termios = serial_driver->init_termios; #endif state->icount.cts = state->icount.dsr = state->icount.rng = state->icount.dcd = 0; diff --git a/patches/kdrivers/src/net/sdla_ec_dev.c b/patches/kdrivers/src/net/sdla_ec_dev.c index 0cb06e0..948cf1c 100644 --- a/patches/kdrivers/src/net/sdla_ec_dev.c +++ b/patches/kdrivers/src/net/sdla_ec_dev.c @@ -26,7 +26,7 @@ #endif #include "sdla_ec.h" - +#include #if defined(__x86_64__) #if defined(CONFIG_COMPAT) && defined(WP_CONFIG_COMPAT) # include @@ -94,7 +94,7 @@ static int wp_ecdev_global_cnt=0; static int wp_ecdev_open(struct inode*, struct file*); static int wp_ecdev_release(struct inode*, struct file*); -static int wp_ecdev_ioctl(struct inode*, struct file*, unsigned int, unsigned long); +static WAN_IOCTL_RET_TYPE WANDEF_IOCTL_FUNC(wp_ecdev_ioctl, struct file*, unsigned int, unsigned long); #if defined(__x86_64__) && defined(CONFIG_COMPAT) && defined(WP_CONFIG_COMPAT) static int wp_ecdev_ioctl32(unsigned int, unsigned int, unsigned long,struct file*); #endif @@ -107,7 +107,7 @@ static struct file_operations wp_ecdev_fops = { llseek: NULL, open: wp_ecdev_open, release: wp_ecdev_release, - ioctl: wp_ecdev_ioctl, + WAN_IOCTL: wp_ecdev_ioctl, read: NULL, write: NULL, poll: NULL, @@ -313,10 +313,10 @@ static int wp_ecdev_release(struct inode *inode, struct file *file) } extern int wan_ec_dev_ioctl(void*, void*); -static int wp_ecdev_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, unsigned long data) +static WAN_IOCTL_RET_TYPE WANDEF_IOCTL_FUNC(wp_ecdev_ioctl, struct file *file, unsigned int cmd, unsigned long data) { void *ec = file->private_data; + long ret; if (ec == NULL){ return -ENODEV; @@ -325,7 +325,8 @@ static int wp_ecdev_ioctl(struct inode *inode, struct file *file, return -EINVAL; } - return wan_ec_dev_ioctl(ec,(void*)data); + ret = wan_ec_dev_ioctl(ec,(void*)data); + return ret; } #if defined(__x86_64__) && defined(CONFIG_COMPAT) && defined(WP_CONFIG_COMPAT) diff --git a/patches/kdrivers/src/net/sdla_remora.c b/patches/kdrivers/src/net/sdla_remora.c index c78003d..27c0eaa 100644 --- a/patches/kdrivers/src/net/sdla_remora.c +++ b/patches/kdrivers/src/net/sdla_remora.c @@ -40,8 +40,6 @@ #endif #endif -#define NEW_RM if(1)DbgPrint -#define NEW_RM_FUNC() if(1)DEBUG_EVENT("%s:%d\n",__FUNCTION__,__LINE__) /******************************************************************************* ** DEFINES AND MACROS @@ -1734,7 +1732,6 @@ static int wp_remora_unconfig(void *pfe) DEBUG_EVENT("%s: Unconfiguring FXS/FXO Front End...\n", fe->name); - /* Disable interrupt (should be done before ) */ wp_remora_disable_irq(fe); @@ -1746,6 +1743,11 @@ static int wp_remora_unconfig(void *pfe) wan_clear_bit(mod_no, &fe->rm_param.module_map); } } + + if (fe->reset_fe) { + fe->reset_fe(fe); + } + return 0; } @@ -2198,6 +2200,9 @@ static int wp_remora_event_exec(sdla_fe_t* fe, sdla_fe_timer_event_t *fe_event) case WP_RM_POLL_TXSIG_KEWL: fe->rm_param.mod[mod_no].u.fxs.lasttxhook = 0; fe->rm_param.mod[mod_no].u.fxs.lasttxhook_update=1; + + DBG_BATTERY_REMOVAL("%s():line:%d: fxs ptr: 0x%p\n", __FUNCTION__, __LINE__, &fe->rm_param.mod[mod_no].u.fxs); + #if 0 WRITE_RM_REG(mod_no, 64, fe->rm_param.mod[mod_no].u.fxs.lasttxhook); #endif @@ -2612,7 +2617,7 @@ wp_remora_event_ctrl(sdla_fe_t *fe, wan_event_ctrl_t *ectrl) fe_event.rm_event.rm_gain = ectrl->rm_gain; break; default: - DEBUG_EVENT("%s: Module %d: Executing Invalid %s event (%s:%X)!\n", + DEBUG_ERROR("%s: Error: Module %d: got request for invalid %s event (%s:%X)!\n", fe->name, mod_no+1, WAN_EVENT_TYPE_DECODE(ectrl->type), WAN_EVENT_MODE_DECODE(ectrl->mode), ectrl->mode); @@ -2793,6 +2798,7 @@ static int wp_remora_stats(sdla_fe_t* fe, unsigned char *data) rm_udp->u.stats.tip_volt = READ_RM_REG(mod_no, 80); rm_udp->u.stats.ring_volt = READ_RM_REG(mod_no, 81); rm_udp->u.stats.bat_volt = READ_RM_REG(mod_no, 82); + rm_udp->u.stats.status = FE_CONNECTED; } else if (fe->rm_param.mod[mod_no].type == MOD_TYPE_FXO){ rm_udp->type = MOD_TYPE_FXO; rm_udp->u.stats.volt = READ_RM_REG(mod_no, 29); @@ -3204,6 +3210,25 @@ static int wp_remora_watchdog(void *card_ptr) { sdla_t *card = (sdla_t*)card_ptr; sdla_fe_t *fe = &card->fe; + +#if DBG_FALSE_RING1 + + fe->rm_param.ticks_diff = SYSTEM_TICKS - fe->rm_param.last_system_ticks; + + if (fe->rm_param.ticks_diff > HZ) { + + fe->rm_param.last_system_ticks = SYSTEM_TICKS; + + fe->rm_param.int_diff = fe->rm_param.intcount - fe->rm_param.last_intcount; + + fe->rm_param.last_intcount = fe->rm_param.intcount; + + DEBUG_FALSE_RING("%s: ticks_diff:%d, fe->rm_param.intcount: %d, int_diff:%d\n", + fe->name, fe->rm_param.ticks_diff, fe->rm_param.intcount, fe->rm_param.int_diff); + } + +#endif + fe->rm_param.intcount++; wp_tdmv_remora_rx_tx_span_common(card_ptr); return 0; @@ -3623,15 +3648,8 @@ static int wp_remora_get_link_status(sdla_fe_t *fe, unsigned char *status,int mo *status = fe->rm_param.mod[mod_no -1].u.fxo.status; } else { - DEBUG_EVENT("%s: Module %d: Get Link Status is only valid for FXO module!\n", - fe->name, mod_no); - - /* Defaulting Status to Connected in order to force intialize status variable - incase user calls this function for an unsupported module type */ - + /* FXS module does not have a state. Thus its always connected */ *status=FE_CONNECTED; - return -EINVAL; - } return 0; } diff --git a/patches/kdrivers/src/net/sdla_remora_analog.c b/patches/kdrivers/src/net/sdla_remora_analog.c index 01fee14..987bf20 100644 --- a/patches/kdrivers/src/net/sdla_remora_analog.c +++ b/patches/kdrivers/src/net/sdla_remora_analog.c @@ -49,6 +49,8 @@ static int ohdebounce = 16; #define DEFAULT_CURRENT_THRESH 5 /*Anything under this is considered "on-hook" for active call on FXO */ +/* January 13 2011 - David R - fixed ring debounce */ +#define RING_DEBOUNCE_FIX 1 int wp_tdmv_remora_proslic_recheck_sanity(sdla_fe_t *fe, int mod_no) @@ -215,8 +217,23 @@ static int wp_tdmv_remora_voicedaa_check_hook(sdla_fe_t *fe, int mod_no) res = READ_RM_REG(mod_no, 5); #endif if ((res & 0x60) && fxo->battery) { + +#if !RING_DEBOUNCE_FIX fxo->ringdebounce += (fe->rm_param.wp_rm_chunk_size * 16); - if (fxo->ringdebounce >= fe->rm_param.wp_rm_chunk_size * 64) { +#else + fxo->ringdebounce += (fe->rm_param.wp_rm_chunk_size * 4); +#endif + + /*DEBUG_FALSE_RING("RING ON: (res & 0x60): 0x%X, fxo->battery: %d, fxo->ringdebounce: %d, fe->rm_param.wp_rm_chunk_size: %d, fxo->wasringing: %d!\n", + (res & 0x60), fxo->battery, fxo->ringdebounce, fe->rm_param.wp_rm_chunk_size, fxo->wasringing);*/ + +#if !RING_DEBOUNCE_FIX +# define RING_DEBOUNCE_COUNTER 64 +#else +# define RING_DEBOUNCE_COUNTER 128 +#endif + + if (fxo->ringdebounce >= fe->rm_param.wp_rm_chunk_size * RING_DEBOUNCE_COUNTER) { if (!fxo->wasringing) { fxo->wasringing = 1; if (card->u.aft.tdmv_zaptel_cfg) { @@ -243,12 +260,17 @@ static int wp_tdmv_remora_voicedaa_check_hook(sdla_fe_t *fe, int mod_no) } } - fxo->ringdebounce = fe->rm_param.wp_rm_chunk_size * 64; + fxo->ringdebounce = fe->rm_param.wp_rm_chunk_size * RING_DEBOUNCE_COUNTER; } } else { + fxo->ringdebounce -= fe->rm_param.wp_rm_chunk_size * 4; + if (fxo->ringdebounce <= 0) { if (fxo->wasringing) { + /*DEBUG_FALSE_RING("RING OFF: (res & 0x60): 0x%X, fxo->battery: %d, fxo->ringdebounce: %d, fe->rm_param.wp_rm_chunk_size: %d, fxo->wasringing: %d!\n", + (res & 0x60), fxo->battery, fxo->ringdebounce, fe->rm_param.wp_rm_chunk_size, fxo->wasringing);*/ + fxo->wasringing = 0; if (card->u.aft.tdmv_zaptel_cfg) { #if defined(CONFIG_PRODUCT_WANPIPE_TDM_VOICE) @@ -276,7 +298,7 @@ static int wp_tdmv_remora_voicedaa_check_hook(sdla_fe_t *fe, int mod_no) fxo->ringdebounce = 0; } } - } + } /* if (!fxo->offhook) */ #endif #if defined(REG_SHADOW) b = fe->rm_param.reg1shadow[mod_no]; @@ -1239,6 +1261,10 @@ int wp_tdmv_remora_rx_tx_span_common(void *pcard ) if (fe->rm_param.mod[x].type == MOD_TYPE_FXS){ #if defined(REG_WRITE_SHADOW) if (fxs->lasttxhook_update){ + + DBG_BATTERY_REMOVAL("%s():line:%d: fxs ptr: 0x%p, fxs->lasttxhook: %d (0x%x)\n", + __FUNCTION__, __LINE__, fxs, fxs->lasttxhook, fxs->lasttxhook); + WRITE_RM_REG(x, 64, fxs->lasttxhook); fxs->lasttxhook_update = 0; continue; @@ -1292,6 +1318,10 @@ int wp_tdmv_remora_rx_tx_span_common(void *pcard ) }else{ fxs->lasttxhook = 0x1; } + + DBG_BATTERY_REMOVAL("%s():line:%d: fxs ptr: 0x%p, fxs->lasttxhook: %d (0x%x)\n", + __FUNCTION__, __LINE__, fxs, fxs->lasttxhook, fxs->lasttxhook); + WRITE_RM_REG(x, 64, fxs->lasttxhook); } } diff --git a/patches/kdrivers/src/net/sdla_remora_tdmv.c b/patches/kdrivers/src/net/sdla_remora_tdmv.c index 2a3968d..253b459 100644 --- a/patches/kdrivers/src/net/sdla_remora_tdmv.c +++ b/patches/kdrivers/src/net/sdla_remora_tdmv.c @@ -970,6 +970,7 @@ static int wp_tdmv_remora_create(void* pcard, wan_tdmv_conf_t *tdmv_conf) memset(wr, 0x0, sizeof(wp_tdmv_remora_t)); card->wan_tdmv.sc = wr; wr->spanno = tdmv_conf->span_no-1; +#ifdef DAHDI_ISSUES wr->span.manufacturer = "Sangoma Technologies"; switch(card->adptr_type){ case A200_ADPTR_ANALOG: @@ -996,6 +997,7 @@ static int wp_tdmv_remora_create(void* pcard, wan_tdmv_conf_t *tdmv_conf) } snprintf(wr->span.location, sizeof(wr->span.location) - 1, "SLOT=%d, BUS=%d", card->wandev.S514_slot_no, card->wandev.S514_bus_no); +#endif wr->span.irq = card->wandev.irq; wr->num = wp_remora_no++; @@ -1439,23 +1441,32 @@ static void wp_tdmv_remora_tone (void* card_id, wan_event_t *event) } fechan = event->channel-1; - - if (event->type == WAN_EVENT_EC_DTMF){ - DEBUG_TDMV( - "[TDMV_RM]: %s: Received EC Tone Event at TDM (%d:%c:%s:%s)!\n", - card->devname, - event->channel, - event->digit, - (event->tone_port == WAN_EC_CHANNEL_PORT_ROUT)?"ROUT":"SOUT", - (event->tone_type == WAN_EC_TONE_PRESENT)?"PRESENT":"STOP"); - }else if (event->type == WAN_EVENT_RM_DTMF){ - DEBUG_TDMV( - "[TDMV_RM]: %s: Received RM DTMF Event at TDM (%d:%c)!\n", - card->devname, - event->channel, - event->digit); + + switch(event->type) { + case WAN_EVENT_EC_DTMF: + case WAN_EVENT_EC_FAX_1100: + DEBUG_TDMV( + "[TDMV] %s: Received EC Tone (%s) Event at TDM (chan=%d digit=%c port=%s type=%s)!\n", + card->devname, + WAN_EVENT_TYPE_DECODE(event->type), + event->channel, + event->digit, + (event->tone_port == WAN_EC_CHANNEL_PORT_ROUT)?"ROUT":"SOUT", + (event->tone_type == WAN_EC_TONE_PRESENT)?"PRESENT":"STOP"); + break; + case WAN_EVENT_RM_DTMF: + DEBUG_TDMV( + "[TDMV_RM]: %s: Received RM DTMF Event at TDM (%d:%c)!\n", + card->devname, + event->channel, + event->digit); + break; + default: + DEBUG_ERROR("%s: %s() Error Invalid event type %X (%s)!\n", + card->devname, __FUNCTION__, event->type, WAN_EVENT_TYPE_DECODE(event->type)); + return; } - + if (!(wr->tonemask & (1 << (event->channel-1)))){ DEBUG_TDMV( "[TDMV] %s: Tone detection is not enabled for the channel %d\n", diff --git a/patches/kdrivers/src/net/sdla_serial.c b/patches/kdrivers/src/net/sdla_serial.c index 86d731f..fb77e50 100644 --- a/patches/kdrivers/src/net/sdla_serial.c +++ b/patches/kdrivers/src/net/sdla_serial.c @@ -291,8 +291,8 @@ static int32_t wp_serial_config(void *pfe) sdla_fe_t *fe = (sdla_fe_t*)pfe; sdla_t *card = (sdla_t*)fe->card; u32 reg; - u8 cpld_reg_val; - unsigned short cpld_reg=0; + wan_bitmap_t cpld_reg_val; + wan_bitmap_t cpld_reg=0; SERIAL_FUNC(); @@ -361,11 +361,15 @@ static int32_t wp_serial_config(void *pfe) /*FIXME: Must check for case where first port started in external mode At this time, if port 1 start in normal & prot 3 in master, the port 1 will silently be reconfigured to Master after port 3 starts */ - - if (card->wandev.electrical_interface == WANOPT_X21) { - aft_serial_write_cpld(card,cpld_reg,0x07); - }else{ - aft_serial_write_cpld(card,cpld_reg,0x05); + + if (card->wandev.clocking == WANOPT_INTERNAL) { + if (card->wandev.electrical_interface == WANOPT_X21) { + aft_serial_write_cpld(card,cpld_reg,0x07); + }else{ + aft_serial_write_cpld(card,cpld_reg,0x05); + } + } else { + aft_serial_write_cpld(card,cpld_reg,0x01); } } else { if (wan_test_bit(2,&cpld_reg_val)) { @@ -419,11 +423,40 @@ static int32_t wp_serial_config(void *pfe) reg); if (card->wandev.clocking) { - DEBUG_EVENT("%s: A140: Configuring for Internal Clocking: Baud=%i\n", + int err; + + DEBUG_EVENT("%s: A140: Configuring for Internal Clocking: %s, Baud=%i\n", card->devname, + card->wandev.clocking == WANOPT_INTERNAL?"Internal":"Recovery", card->wandev.bps); + + if (card->wandev.bps == 0) { + DEBUG_ERROR("%s: Error Invalid Baud Rate selected 0Kbps!\n", + card->devname); + return -EINVAL; + } + wan_set_bit(AFT_SERIAL_LCFG_CLK_SRC_BIT, ®); - aft_serial_set_baud_rate(®,card->wandev.bps); + + if (card->u.aft.firm_ver < 0x07) { + if (card->wandev.clocking == WANOPT_INTERNAL) { + err=aft_serial_set_legacy_baud_rate(®,card->wandev.bps); + } else { + DEBUG_ERROR("%s: RECOVERY Clocking only supported on Fimware Ver 7 or greater!\n",card->devname); + return -EINVAL; + } + } else { + if (card->wandev.clocking == WANOPT_INTERNAL) { + err=aft_serial_set_baud_rate(®,card->wandev.bps,0); + } else { + err=aft_serial_set_baud_rate(®,card->wandev.bps*32,1); + } + } + + if (err) { + return -EINVAL; + } + DEBUG_TEST("%s: Setting REG to 0x%08X!\n",card->devname,reg); } else { DEBUG_EVENT("%s: A140: Configuring for External Clocking: Baud=%i\n", card->devname, @@ -459,9 +492,11 @@ static int32_t wp_serial_config(void *pfe) wan_clear_bit(AFT_SERIAL_LCFG_IDLE_DET_BIT,®); } - - /* Hardcode to sync device type */ - wan_clear_bit(AFT_SERIAL_LCFG_IFACE_TYPE_BIT,®); + if (card->wandev.clocking == WANOPT_RECOVERY) { + wan_set_bit(AFT_SERIAL_LCFG_IFACE_TYPE_BIT,®); + } else { + wan_clear_bit(AFT_SERIAL_LCFG_IFACE_TYPE_BIT,®); + } /* CTS/DCD Interrupt Enable */ if (card->wandev.ignore_front_end_status == WANOPT_YES) { @@ -504,8 +539,8 @@ static int32_t wp_serial_unconfig(void *pfe) sdla_fe_t *fe = (sdla_fe_t*)pfe; sdla_t *card = (sdla_t*)fe->card; u32 reg=0; - unsigned short cpld_reg; - unsigned char cpld_reg_val; + wan_bitmap_t cpld_reg; + wan_bitmap_t cpld_reg_val; SERIAL_FUNC(); diff --git a/patches/kdrivers/src/net/sdla_tdmv.c b/patches/kdrivers/src/net/sdla_tdmv.c index 0c74a89..5d9b15d 100644 --- a/patches/kdrivers/src/net/sdla_tdmv.c +++ b/patches/kdrivers/src/net/sdla_tdmv.c @@ -444,6 +444,7 @@ static int wp_tdmv_create(void* pcard, wan_tdmv_conf_t *tdmv_conf) memset(wp, 0x0, sizeof(wp_tdmv_softc_t)); card->wan_tdmv.sc = wp; wp->spanno = tdmv_conf->span_no-1; +#ifdef DAHDI_ISSUES wp->span.manufacturer = "Sangoma Technologies"; switch(card->adptr_type){ @@ -471,6 +472,7 @@ static int wp_tdmv_create(void* pcard, wan_tdmv_conf_t *tdmv_conf) } snprintf(wp->span.location, sizeof(wp->span.location) - 1, "SLOT=%d, BUS=%d", card->wandev.S514_slot_no, card->wandev.S514_bus_no); +#endif wp->span.irq = card->wandev.irq; wp->num = wp_card_no++; @@ -1246,12 +1248,16 @@ static int wp_tdmv_software_init(wan_tdmv_t *wan_tdmv) wp->span.deflaw = ZT_LAW_ALAW; card->fe.fe_cfg.tdmv_law = WAN_TDMV_ALAW; wp->span.linecompat = ZT_CONFIG_HDB3 | ZT_CONFIG_CCS | ZT_CONFIG_CRC4; +#ifdef DAHDI_ISSUES wp->span.spantype="E1"; +#endif }else{ wp->span.deflaw = ZT_LAW_MULAW; card->fe.fe_cfg.tdmv_law = WAN_TDMV_MULAW; wp->span.linecompat = ZT_CONFIG_AMI | ZT_CONFIG_B8ZS | ZT_CONFIG_D4 | ZT_CONFIG_ESF; +#ifdef DAHDI_ISSUES wp->span.spantype="T1"; +#endif } #if !defined(__FreeBSD__) && !defined(__OpenBSD__) @@ -2224,7 +2230,7 @@ static int wp_tdmv_hwec_create(struct dahdi_chan *chan, { wp_tdmv_softc_t *wp = NULL; sdla_t *card = NULL; - int err = -EINVAL; + int err = -ENODEV; if (ecp->param_count > 0) { DEBUG_TDMV("[TDMV] Wanpipe echo canceller does not support parameters; failing request\n"); @@ -2980,14 +2986,20 @@ static void wp_tdmv_callback_tone (void* card_id, wan_event_t *event) /* fechan check is a sanity check */ fechan=event->channel-1; - if (event->type != WAN_EVENT_EC_DTMF){ - DEBUG_ERROR("ERROR: %s: Invalid event type %X!\n", - card->devname, event->type); - return; + switch(event->type) { + case WAN_EVENT_EC_DTMF: + case WAN_EVENT_EC_FAX_1100: + break; + default: + DEBUG_ERROR("%s: %s() Error Invalid event type %X (%s)!\n", + card->devname, __FUNCTION__, event->type, WAN_EVENT_TYPE_DECODE(event->type)); + return; } + DEBUG_TDMV( - "[TDMV] %s: Received EC Tone Event at TDM (%d:%c:%s:%s)!\n", + "[TDMV] %s: Received EC Tone (%s) Event at TDM (chan=%d digit=%c port=%s type=%s)!\n", card->devname, + WAN_EVENT_TYPE_DECODE(event->type), event->channel, event->digit, (event->tone_port == WAN_EC_CHANNEL_PORT_ROUT)?"ROUT":"SOUT", diff --git a/patches/kdrivers/src/net/sdla_tdmv_dummy.c b/patches/kdrivers/src/net/sdla_tdmv_dummy.c index 7c86c70..33b27bc 100644 --- a/patches/kdrivers/src/net/sdla_tdmv_dummy.c +++ b/patches/kdrivers/src/net/sdla_tdmv_dummy.c @@ -68,6 +68,12 @@ int sdla_tdmv_dummy_tick(void *wpd_ptr) return 0; } +#ifdef DAHDI_24 +static const struct WP_DAHDI_SPAN_OPS dummy_ops = { + .owner = THIS_MODULE, +}; +#endif + void* sdla_tdmv_dummy_register(void) { sdla_tdmv_dummy_t *wpd = wan_kmalloc(sizeof(sdla_tdmv_dummy_t)); @@ -82,6 +88,9 @@ void* sdla_tdmv_dummy_register(void) #ifdef DAHDI_ISSUES wpd->chan_ptr = &wpd->chan; wpd->span.chans = &wpd->chan_ptr; +#ifdef DAHDI_24 + wpd->span.ops = &dummy_ops; +#endif #else wpd->span.chans = &wpd->chan; #endif diff --git a/patches/kdrivers/src/net/sdla_te1.c b/patches/kdrivers/src/net/sdla_te1.c index 6c160b4..2335e5f 100644 --- a/patches/kdrivers/src/net/sdla_te1.c +++ b/patches/kdrivers/src/net/sdla_te1.c @@ -5330,6 +5330,11 @@ static int sdla_te_flush_pmon(sdla_fe_t *fe) return 0; } +#if 0 + +/* NC: Function not being used. + TODO: confirm that its still needed */ + /* ****************************************************************************** * SetLoopBackChannel() @@ -5363,6 +5368,7 @@ static int SetLoopBackChannel(sdla_fe_t* fe, int channel, unsigned char mode) return WAN_TRUE; } +#endif /* ****************************************************************************** @@ -6421,8 +6427,8 @@ sdla_te_add_event(sdla_fe_t *fe, sdla_fe_timer_event_t *fe_event) ****************************************************************************** * sdla_ds_te1_add_timer() * - * Description: Enable software timer interrupt in delay ms. - * Arguments: + * Description: Enable software timer interrupt. + * Arguments: delay - (in Seconds!!) * Returns: ****************************************************************************** */ diff --git a/patches/kdrivers/src/net/sdla_te3.c b/patches/kdrivers/src/net/sdla_te3.c index 9a858e3..1dc6083 100644 --- a/patches/kdrivers/src/net/sdla_te3.c +++ b/patches/kdrivers/src/net/sdla_te3.c @@ -1016,6 +1016,12 @@ static int sdla_te3_udp(sdla_fe_t *fe, void *pudp_cmd, unsigned char *data) return 0; } + +#if 0 +/* NC: Interrupt mode is not used in T3 + We run only poll. This function is still here for + historical reasons */ + static int sdla_te3_set_intr(sdla_fe_t *fe) { sdla_fe_cfg_t *fe_cfg = &fe->fe_cfg; @@ -1069,6 +1075,7 @@ static int sdla_te3_set_intr(sdla_fe_t *fe) return 0; } +#endif /****************************************************************************** diff --git a/patches/kdrivers/src/net/sdla_usb_remora.c b/patches/kdrivers/src/net/sdla_usb_remora.c index eeb0ae1..fb849cb 100644 --- a/patches/kdrivers/src/net/sdla_usb_remora.c +++ b/patches/kdrivers/src/net/sdla_usb_remora.c @@ -420,6 +420,7 @@ static int wp_usb_remora_busytone(sdla_fe_t*, int); static int wp_usb_remora_ringtone(sdla_fe_t*, int); static int wp_usb_remora_congestiontone(sdla_fe_t*, int); static int wp_usb_remora_disabletone(sdla_fe_t*, int); +static int wp_usb_remora_get_link_status(sdla_fe_t *fe, unsigned char *status,int mod_no); #if defined(AFT_TDM_API_SUPPORT) static int wp_usb_remora_watchdog(void *card); @@ -1385,6 +1386,8 @@ int wp_usb_remora_iface_init(void *p_fe, void *pfe_iface) fe_iface->watchdog = &wp_usb_remora_watchdog; #endif + fe_iface->get_fe_status = &wp_usb_remora_get_link_status; + WAN_LIST_INIT(&fe->event); wan_spin_lock_irq_init(&fe->lockirq, "wan_rm_lock"); return 0; @@ -2605,6 +2608,8 @@ static int wp_usb_remora_stats(sdla_fe_t* fe, unsigned char *data) rm_udp->u.stats.ring_volt = READ_USB_RM_REG(mod_no, 81); rm_udp->u.stats.bat_volt = READ_USB_RM_REG(mod_no, 82); + rm_udp->u.stats.status = FE_CONNECTED; + } else if (fe->rm_param.mod[mod_no].type == MOD_TYPE_FXO){ rm_udp->type = MOD_TYPE_FXO; rm_udp->u.stats.volt = READ_USB_RM_REG(mod_no, 29); @@ -3164,6 +3169,29 @@ static int wp_usb_remora_watchdog(void *card_ptr) } #endif + +/****************************************************************************** + * wp_remora_get_link_status() + * + * Description: + * Arguments: + * Returns: + ****************************************************************************** + */ +static int wp_usb_remora_get_link_status(sdla_fe_t *fe, unsigned char *status,int mod_no) +{ + /*mod_no = chan -1 */ + if (fe->rm_param.mod[mod_no-1].type == MOD_TYPE_FXO) { + *status = fe->rm_param.mod[mod_no -1].u.fxo.status; + + } else { + /* FXS module does not have a state. Thus its always connected */ + *status=FE_CONNECTED; + } + return 0; +} + + /****************************************************************************** * wp_usb_remora_intr_ctrl() * diff --git a/patches/kdrivers/src/net/sdla_xilinx.c b/patches/kdrivers/src/net/sdla_xilinx.c index 3f0e20a..c960386 100644 --- a/patches/kdrivers/src/net/sdla_xilinx.c +++ b/patches/kdrivers/src/net/sdla_xilinx.c @@ -144,7 +144,7 @@ typedef struct private_area long logic_ch_num; unsigned char hdlc_eng; - unsigned char dma_status; + wan_bitmap_t dma_status; unsigned char ignore_modem; struct net_device_stats if_stats; @@ -161,7 +161,7 @@ typedef struct private_area unsigned char udp_pkt_src; /* udp packet processing */ unsigned short timer_int_enabled; - unsigned char interface_down; + wan_bitmap_t interface_down; /* Polling task queue. Each interface * has its own task queue, which is used @@ -183,9 +183,9 @@ typedef struct private_area u8 idle_flag; u16 max_idle_size; - u8 idle_start; + wan_bitmap_t idle_start; - u8 pkt_error; + wan_bitmap_t pkt_error; u8 rx_fifo_err_cnt; int first_time_slot; @@ -193,7 +193,7 @@ typedef struct private_area netskb_t *tx_idle_skb; u32 tx_dma_addr; u32 tx_dma_len; - unsigned char rx_dma; + wan_bitmap_t rx_dma; unsigned char pci_retry; unsigned char fifo_size_code; @@ -334,7 +334,7 @@ static void xilinx_tx_post_complete (sdla_t *card, static void xilinx_rx_post_complete (sdla_t *card, private_area_t *chan, netskb_t *skb, netskb_t **new_skb, - unsigned char *pkt_error); + wan_bitmap_t *pkt_error); static char request_xilinx_logical_channel_num (sdla_t *card, @@ -4386,7 +4386,7 @@ static void xilinx_dma_rx_complete (sdla_t *card, private_area_t *chan) static void xilinx_rx_post_complete (sdla_t *card, private_area_t *chan, netskb_t *skb, netskb_t **new_skb, - unsigned char *pkt_error) + wan_bitmap_t *pkt_error) { unsigned int len,data_error = 0; @@ -4791,7 +4791,7 @@ static void wp_bh(void *data, int pending) private_area_t *chan = (private_area_t *)data; sdla_t *card = chan->common.card; netskb_t *new_skb, *skb, *dealloc_skb; - unsigned char pkt_error; + wan_bitmap_t pkt_error; int len; private_area_t *top_chan; wan_smp_flag_t smp_flags; diff --git a/patches/kdrivers/src/net/sdladrv.c b/patches/kdrivers/src/net/sdladrv.c index 11e964f..5413462 100644 --- a/patches/kdrivers/src/net/sdladrv.c +++ b/patches/kdrivers/src/net/sdladrv.c @@ -10661,7 +10661,7 @@ int sdla_hw_fe_test_and_set_bit(void *phw, int value) WAN_ASSERT(hwcpu->hwcard == NULL); hwcard = hwcpu->hwcard; - return wan_test_and_set_bit(value, &hwcpu->lines_info[hw->cfg_type].fe_rw_flag); + return wan_test_and_set_bit(value, &hwcpu->lines_info[hw->cfg_type].fe_rw_bitmap); } int sdla_hw_fe_test_bit(void *phw, int value) @@ -10677,8 +10677,8 @@ int sdla_hw_fe_test_bit(void *phw, int value) WAN_ASSERT(hwcpu->hwcard == NULL); hwcard = hwcpu->hwcard; - //return wan_test_bit(value, &hwcard->fe_rw_flag); - return wan_test_bit(value, &hwcpu->lines_info[hw->cfg_type].fe_rw_flag); + //return wan_test_bit(value, &hwcard->fe_rw_bitmap); + return wan_test_bit(value, &hwcpu->lines_info[hw->cfg_type].fe_rw_bitmap); } int sdla_hw_fe_clear_bit(void *phw, int value) @@ -10694,8 +10694,8 @@ int sdla_hw_fe_clear_bit(void *phw, int value) WAN_ASSERT(hwcpu->hwcard == NULL); hwcard = hwcpu->hwcard; - //wan_clear_bit(value, &hwcard->fe_rw_flag); - wan_clear_bit(value, &hwcpu->lines_info[hw->cfg_type].fe_rw_flag); + //wan_clear_bit(value, &hwcard->fe_rw_bitmap); + wan_clear_bit(value, &hwcpu->lines_info[hw->cfg_type].fe_rw_bitmap); return 0; } @@ -10711,7 +10711,7 @@ int sdla_hw_fe_set_bit(void *phw, int value) WAN_ASSERT(hwcpu->hwcard == NULL); hwcard = hwcpu->hwcard; - wan_set_bit(value, &hwcpu->lines_info[hw->cfg_type].fe_rw_flag); + wan_set_bit(value, &hwcpu->lines_info[hw->cfg_type].fe_rw_bitmap); return 0; } diff --git a/patches/kdrivers/src/net/wanpipe_cdev_linux.c b/patches/kdrivers/src/net/wanpipe_cdev_linux.c index 57a3f23..31f9c6d 100644 --- a/patches/kdrivers/src/net/wanpipe_cdev_linux.c +++ b/patches/kdrivers/src/net/wanpipe_cdev_linux.c @@ -90,7 +90,7 @@ static int wp_cdev_open(struct inode *inode, struct file *file); static int wp_cdev_release(struct inode *inode, struct file *file); static ssize_t wp_cdev_read(struct file *file, char *usrbuf, size_t count, loff_t *ppos); static ssize_t wp_cdev_write(struct file *file, const char *usrbuf, size_t count, loff_t *ppos); -static int wp_cdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long data); +static WAN_IOCTL_RET_TYPE WANDEF_IOCTL_FUNC(wp_cdev_ioctl, struct file *file, unsigned int cmd, unsigned long data); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18) static long wp_cdev_compat_ioctl(struct file *file, unsigned int cmd, unsigned long data); #endif @@ -121,7 +121,7 @@ static struct file_operations wp_cdev_fops = { llseek: NULL, open: wp_cdev_open, release: wp_cdev_release, - ioctl: wp_cdev_ioctl, + WAN_IOCTL: wp_cdev_ioctl, read: wp_cdev_read, write: wp_cdev_write, poll: wp_cdev_poll, @@ -779,10 +779,10 @@ static ssize_t wp_cdev_write(struct file *file, const char *usrbuf, size_t count } -static int wp_cdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long data) +static WAN_IOCTL_RET_TYPE WANDEF_IOCTL_FUNC(wp_cdev_ioctl, struct file *file, unsigned int cmd, unsigned long data) { wanpipe_cdev_t *cdev; - int err=-EINVAL; + WAN_IOCTL_RET_TYPE err=-EINVAL; WAN_ASSERT((file==NULL)); @@ -798,10 +798,14 @@ static int wp_cdev_ioctl(struct inode *inode, struct file *file, unsigned int cm return err; } -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18) static long wp_cdev_compat_ioctl(struct file *file, unsigned int cmd, unsigned long data) { +#ifdef HAVE_UNLOCKED_IOCTL + long err = (long) wp_cdev_ioctl(file, cmd, data); +#else long err = (long) wp_cdev_ioctl(NULL, file, cmd, data); +#endif return err; } #endif diff --git a/patches/kdrivers/src/net/wanpipe_codec_law.c b/patches/kdrivers/src/net/wanpipe_codec_law.c index c1b4ef1..16487b3 100644 --- a/patches/kdrivers/src/net/wanpipe_codec_law.c +++ b/patches/kdrivers/src/net/wanpipe_codec_law.c @@ -30,7 +30,6 @@ #if (defined __WINDOWS__) # define __init # define inline __inline -# define DBG_LAW if(1)DbgPrint #endif diff --git a/patches/kdrivers/src/net/wanpipe_mtp1.c b/patches/kdrivers/src/net/wanpipe_mtp1.c index 32bc0c7..2f7f533 100644 --- a/patches/kdrivers/src/net/wanpipe_mtp1.c +++ b/patches/kdrivers/src/net/wanpipe_mtp1.c @@ -164,6 +164,13 @@ static __inline int su_accept(wp_mtp1_link_t *p_lnk, int err_code) { int err=-1; + if (p_lnk->rx_buf_len < 3) { + if (p_lnk->reg.rx_suerm) { + err=p_lnk->reg.rx_suerm(p_lnk->reg.priv_ptr); + } + return err; + } + if (p_lnk->reg.trace && err_code == 0) { p_lnk->reg.trace(p_lnk->reg.priv_ptr, &p_lnk->rx_buf[0], p_lnk->rx_buf_len-2, 1); } @@ -390,9 +397,11 @@ static void rx_bit_to_su (wp_mtp1_link_t * p_lnk, u8 bit) } else { +#ifdef DEBUG /* program is borked */ DEBUG_EVENT ("%s: octet bit count < 8:octet bit count follow", p_lnk->name,p_lnk->r_octet_bit_count); +#endif p_lnk->state_daedr = INIT; } diff --git a/patches/kdrivers/src/net/wanpipe_tdm_api.c b/patches/kdrivers/src/net/wanpipe_tdm_api.c index daec79c..b804507 100644 --- a/patches/kdrivers/src/net/wanpipe_tdm_api.c +++ b/patches/kdrivers/src/net/wanpipe_tdm_api.c @@ -61,12 +61,8 @@ #define WP_TDM_MAX_TX_Q_LEN 5 #define WP_TDM_MAX_HDLC_TX_Q_LEN 17 -#if defined(__WINDOWS__) -//davidr: v6.0.31.1 -#define WP_TDM_MAX_EVENT_Q_LEN 50 -#else -#define WP_TDM_MAX_EVENT_Q_LEN 200 -#endif +#define WP_TDM_MAX_EVENT_Q_TIMESLOT_MULTIPLE 6 +#define WP_TDM_MIN_EVENT_Q_LEN 10 #define WP_TDM_MAX_CTRL_EVENT_Q_LEN 2000 /* 500 channels * 40 events (At same time) */ #define WP_TDM_MAX_RX_FREE_Q_LEN 10 @@ -469,7 +465,8 @@ static int wp_tdmapi_reg_globals(void) } } -#if !defined(__WINDOWS__) +#if 0 +/* FIXME timer dev is not complete */ err=wanpipe_wandev_timer_create(); #endif @@ -514,7 +511,8 @@ static int wp_tdmapi_unreg_globals(void) DEBUG_TEST("%s(): Unregistering Global API Devices!\n",__FUNCTION__); -#if !defined(__WINDOWS__) +#if 0 +/* FIXME timer dev is not complete */ wanpipe_wandev_timer_free(); #endif @@ -538,6 +536,7 @@ int wanpipe_tdm_api_reg(wanpipe_tdm_api_dev_t *tdm_api) sdla_fe_t *fe =NULL; int tdm_api_queue_init=0; wanpipe_tdm_api_card_dev_t *tdm_card_dev=NULL; + int event_queue_len=0; wan_mutex_lock_init(&tdm_api->lock, "wan_tdmapi_lock"); wan_spin_lock_init(&tdm_api->irq_lock, "wan_tdmapi_irq_lock"); @@ -626,7 +625,12 @@ int wanpipe_tdm_api_reg(wanpipe_tdm_api_dev_t *tdm_api) goto tdm_api_reg_error_exit; } - err=wp_tdmapi_alloc_q(tdm_api, &tdm_api->wp_event_free_list, WP_TDM_API_EVENT_MAX_LEN, WP_TDM_MAX_EVENT_Q_LEN); + event_queue_len=tdm_api->timeslots * WP_TDM_MAX_EVENT_Q_TIMESLOT_MULTIPLE; + if (event_queue_len < WP_TDM_MIN_EVENT_Q_LEN) { + event_queue_len=WP_TDM_MIN_EVENT_Q_LEN; + } + + err=wp_tdmapi_alloc_q(tdm_api, &tdm_api->wp_event_free_list, WP_TDM_API_EVENT_MAX_LEN, event_queue_len); if (err) { goto tdm_api_reg_error_exit; } @@ -644,9 +648,11 @@ int wanpipe_tdm_api_reg(wanpipe_tdm_api_dev_t *tdm_api) if (IS_BRI_CARD(card)) { tdm_api->cfg.hw_mtu_mru =300; tdm_api->cfg.usr_mtu_mru =300; + tdm_api->mtu_mru = 300; } else { tdm_api->cfg.hw_mtu_mru =1500; tdm_api->cfg.usr_mtu_mru =1500; + tdm_api->mtu_mru = 1500; } tdm_api->cfg.usr_period =0; @@ -704,6 +710,7 @@ int wanpipe_tdm_api_reg(wanpipe_tdm_api_dev_t *tdm_api) err=-EINVAL; goto tdm_api_reg_error_exit; } + } if (tdm_api->cfg.idle_flag == 0) { @@ -729,7 +736,8 @@ int wanpipe_tdm_api_reg(wanpipe_tdm_api_dev_t *tdm_api) sprintf(tmp_name,"wanpipe%d_if%d",tdm_api->tdm_span,tdm_api->tdm_chan); DEBUG_TDMAPI("%s: Configuring TDM API NAME=%s Qlen=%i TS=%i MTU=%i\n", - card->devname,tmp_name, tdm_api->cfg.tx_queue_sz, tdm_api->timeslots,tdm_api->mtu_mru); + card->devname,tmp_name, tdm_api->cfg.tx_queue_sz, + tdm_api->timeslots,tdm_api->mtu_mru); /* Initialize Event Callback functions */ card->wandev.event_callback.rbsbits = NULL; /*wp_tdmapi_rbsbits;*/ @@ -838,13 +846,12 @@ int wanpipe_tdm_api_reg(wanpipe_tdm_api_dev_t *tdm_api) } } - if (IS_BRI_CARD(card)) { - if (fe->fe_status == FE_DISCONNECTED) { - tdm_api->cfg.fe_alarms = (1 | WAN_TE_BIT_ALARM_RED); - } else { - tdm_api->cfg.fe_alarms = 0; - } - } + tdm_api->cfg.fe_alarms = 0; + if (IS_BRI_CARD(card) || IS_TE1_CARD(card)) { + if (fe->fe_status == FE_DISCONNECTED) { + tdm_api->cfg.fe_alarms = (1 | WAN_TE_BIT_ALARM_RED); + } + } return err; @@ -1919,7 +1926,11 @@ static int wanpipe_tdm_api_ioctl_handle_tdm_api_cmd(wanpipe_tdm_api_dev_t *tdm_a /* Set the span/channel so that user knows which channel its using */ usr_tdm_api.chan=channel; - usr_tdm_api.span=wp_tdmapi_get_span(card); + + if (card) { + /* must NOT do it for ctrl device! */ + usr_tdm_api.span=wp_tdmapi_get_span(card); + } /* Commands for HDLC Device */ @@ -1949,7 +1960,7 @@ static int wanpipe_tdm_api_ioctl_handle_tdm_api_cmd(wanpipe_tdm_api_dev_t *tdm_a case WP_API_CMD_SET_RX_Q_SIZE: break; default: - DEBUG_EVENT("%s: Invalid TDM API HDLC CMD %i\n", tdm_api->name,cmd); + DEBUG_WARNING("%s: Warning: Invalid TDM API HDLC CMD %i\n", tdm_api->name,cmd); usr_tdm_api.result=SANG_STATUS_OPTION_NOT_SUPPORTED; err=-EOPNOTSUPP; goto tdm_api_exit; @@ -2000,6 +2011,13 @@ static int wanpipe_tdm_api_ioctl_handle_tdm_api_cmd(wanpipe_tdm_api_dev_t *tdm_a goto tdm_api_exit; } + /* at this point 'card' must NOT be null */ + if (!card) { + DEBUG_ERROR("%s: Error: %s(): 'card' pointer is null!\n", tdm_api->name, __FUNCTION__); + err=-EOPNOTSUPP; + goto tdm_api_exit; + } + /* Commands for TDM API Device */ switch (cmd) { @@ -2018,13 +2036,18 @@ static int wanpipe_tdm_api_ioctl_handle_tdm_api_cmd(wanpipe_tdm_api_dev_t *tdm_a break; case WP_API_CMD_SET_USR_PERIOD: + + if (!WPTDM_CHAN_OP_MODE(tdm_api)) { + err=-EOPNOTSUPP; + goto tdm_api_exit; + } if (usr_tdm_api.usr_period >= 10 && (usr_tdm_api.usr_period % 10) == 0 && usr_tdm_api.usr_period <= 1000) { usr_tdm_api.usr_mtu_mru = usr_tdm_api.usr_period*tdm_api->cfg.hw_mtu_mru*tdm_api->buffer_multiplier*tdm_api->timeslots; - + } else { usr_tdm_api.result=SANG_STATUS_INVALID_PARAMETER; err = -EINVAL; @@ -2033,8 +2056,7 @@ static int wanpipe_tdm_api_ioctl_handle_tdm_api_cmd(wanpipe_tdm_api_dev_t *tdm_a goto tdm_api_exit; } - usr_tdm_api.usr_mtu_mru = wanpipe_codec_calc_new_mtu(tdm_api->cfg.tdm_codec, - usr_tdm_api.usr_mtu_mru)*tdm_api->buffer_multiplier*tdm_api->timeslots; + usr_tdm_api.usr_mtu_mru = wanpipe_codec_calc_new_mtu(tdm_api->cfg.tdm_codec, usr_tdm_api.usr_mtu_mru); tdm_api->cfg.usr_period = usr_tdm_api.usr_period; tdm_api->cfg.usr_mtu_mru = usr_tdm_api.usr_mtu_mru; @@ -2086,8 +2108,8 @@ static int wanpipe_tdm_api_ioctl_handle_tdm_api_cmd(wanpipe_tdm_api_dev_t *tdm_a tdm_api->name,usr_tdm_api.tdm_codec); goto tdm_api_exit; } - usr_tdm_api.usr_mtu_mru = wanpipe_codec_calc_new_mtu(usr_tdm_api.tdm_codec, - tdm_api->cfg.usr_mtu_mru) * tdm_api->buffer_multiplier * tdm_api->timeslots; + usr_tdm_api.usr_mtu_mru = tdm_api->cfg.hw_mtu_mru * tdm_api->cfg.usr_period * tdm_api->buffer_multiplier * tdm_api->timeslots; + usr_tdm_api.usr_mtu_mru = wanpipe_codec_calc_new_mtu(usr_tdm_api.tdm_codec, tdm_api->cfg.usr_mtu_mru); } tdm_api->cfg.usr_mtu_mru=usr_tdm_api.usr_mtu_mru; @@ -2466,6 +2488,23 @@ static int wanpipe_tdm_api_ioctl_handle_tdm_api_cmd(wanpipe_tdm_api_dev_t *tdm_a err = 0; memcpy(&usr_tdm_api.event,wan_skb_data(skb),sizeof(wp_api_event_t)); +#if DBG_FALSE_RING2 + { + wp_api_event_t *event_ptr = &usr_tdm_api.event; + + switch(event_ptr->wp_api_event_type) + { + case WP_API_EVENT_RING_DETECT: + DEBUG_FALSE_RING("%s():%s: Received WP_API_EVENT_RING_DETECT at channel: %d!\n", + __FUNCTION__, tdm_api->name, event_ptr->channel); + break; + case WP_API_EVENT_RING_TRIP_DETECT: + DEBUG_FALSE_RING("%s():%s: Received WP_API_EVENT_RING_TRIP_DETECT at channel: %d!\n", + __FUNCTION__, tdm_api->name, event_ptr->channel); + break; + } + } +#endif wptdm_os_lock_irq(&card->wandev.lock,&irq_flags); wan_skb_init(skb,sizeof(wp_api_hdr_t)); wan_skb_trim(skb,0); @@ -2796,7 +2835,10 @@ static int wanpipe_tdm_api_ioctl(void *obj, int cmd, void *udata) case WANPIPE_IOCTL_PIPEMON: err=-EINVAL; if (tdm_api->pipemon) { + wan_smp_flag_t flag; + wan_mutex_lock(&tdm_api->lock,&flag); err=tdm_api->pipemon(tdm_api->card,tdm_api->chan,udata); + wan_mutex_unlock(&tdm_api->lock,&flag); } break; @@ -3698,20 +3740,34 @@ static void wp_tdmapi_tone (void* card_id, wan_event_t *event) irq_flags=0; - if (event->type == WAN_EVENT_EC_DTMF){ - DEBUG_TDMAPI("%s: Received Tone Event at TDM API (%d:%c:%s:%s)!\n", - card->devname, - event->channel, - event->digit, - (event->tone_port == WAN_EC_CHANNEL_PORT_ROUT)?"ROUT":"SOUT", - (event->tone_type == WAN_EC_TONE_PRESENT)?"PRESENT":"STOP"); - }else if (event->type == WAN_EVENT_RM_DTMF){ + switch(event->type) { + case WAN_EVENT_EC_DTMF: + case WAN_EVENT_EC_FAX_1100: + case WAN_EVENT_EC_FAX_2100: + case WAN_EVENT_EC_FAX_2100_WSPR: + case WAN_EVENT_RM_DTMF: + break; + default: + DEBUG_ERROR("%s: %s() Error Invalid event type %X (%s)!\n", + card->devname, __FUNCTION__, event->type, WAN_EVENT_TYPE_DECODE(event->type)); + return; + } + + if (event->type == WAN_EVENT_RM_DTMF){ DEBUG_TDMAPI("%s: Received DTMF Event at TDM API (%d:%c)!\n", card->devname, event->channel, event->digit); lock=0; /* FIXME: Updated locking architecture */ + }else{ + DEBUG_TDMAPI("%s: Received Tone Event %s at TDM API (%d:%c:%s:%s)!\n", + WAN_EVENT_TYPE_DECODE(event->type), + card->devname, + event->channel, + event->digit, + (event->tone_port == WAN_EC_CHANNEL_PORT_ROUT)?"ROUT":"SOUT", + (event->tone_type == WAN_EC_TONE_PRESENT)?"PRESENT":"STOP"); } tdm_api = wp_tdmapi_search(card, event->channel); @@ -3730,7 +3786,23 @@ static void wp_tdmapi_tone (void* card_id, wan_event_t *event) p_tdmapi_event = (wp_api_event_t*)wan_skb_put(skb,sizeof(wp_api_event_t)); memset(p_tdmapi_event,0,sizeof(wp_api_event_t)); - p_tdmapi_event->wp_api_event_type = WP_API_EVENT_DTMF; + + switch(event->type) { + case WAN_EVENT_EC_DTMF: + case WAN_EVENT_RM_DTMF: + p_tdmapi_event->wp_api_event_type = WP_API_EVENT_DTMF; + break; + case WAN_EVENT_EC_FAX_1100: + p_tdmapi_event->wp_api_event_type = WP_API_EVENT_FAX_1100; + break; + case WAN_EVENT_EC_FAX_2100: + p_tdmapi_event->wp_api_event_type = WP_API_EVENT_FAX_2100; + break; + case WAN_EVENT_EC_FAX_2100_WSPR: + p_tdmapi_event->wp_api_event_type = WP_API_EVENT_FAX_2100_WSPR; + break; + } + p_tdmapi_event->wp_api_event_dtmf_digit = event->digit; p_tdmapi_event->wp_api_event_dtmf_type = event->tone_type; p_tdmapi_event->wp_api_event_dtmf_port = event->tone_port; diff --git a/patches/kdrivers/src/net/wanpipe_timer_dev.c b/patches/kdrivers/src/net/wanpipe_timer_dev.c index 43f0af0..01a8128 100644 --- a/patches/kdrivers/src/net/wanpipe_timer_dev.c +++ b/patches/kdrivers/src/net/wanpipe_timer_dev.c @@ -69,6 +69,7 @@ static int wan_alloc_skb_list(wanpipe_tdev_t *dev, int elements); static sdla_t *wan_timer_card = NULL; static u32 wan_timer_initialized = 0; +static u32 wan_timer_global_init=0; static wanpipe_tdev_t *wan_tdev_idx[MAX_WAN_TDEV_IDX_SZ]; static int wan_tdev_cnt = 0; @@ -76,10 +77,15 @@ static u32 wan_event_seq_cnt = 0; static wanpipe_cdev_ops_t wan_tdev_fops; -static void wanpipe_wandev_timer_init_globals() +static void wanpipe_wandev_timer_init_globals(void) { DEBUG_TEST("%s:%d\n",__FUNCTION__,__LINE__); + if (wan_timer_global_init) { + return; + } + wan_timer_global_init++; + memset(wan_tdev_idx, 0x00, sizeof(wan_tdev_idx)); wan_timer_card = NULL; diff --git a/patches/kdrivers/src/net/wanpipe_utils.c b/patches/kdrivers/src/net/wanpipe_utils.c index 413e910..1b1237f 100644 --- a/patches/kdrivers/src/net/wanpipe_utils.c +++ b/patches/kdrivers/src/net/wanpipe_utils.c @@ -1016,8 +1016,8 @@ int wan_capture_trace_packet_buffer(sdla_t *card, wan_trace_t* trace_info, char buf=wan_skb_put(new_skb, sizeof(wan_trace_pkt_t)); memcpy(buf,(caddr_t)&trc_el,sizeof(wan_trace_pkt_t)); - buf=wan_skb_put(new_skb, len); - memcpy(buf,data,sizeof(wan_trace_pkt_t)); + buf=wan_skb_put(new_skb,len); + memcpy(buf,data,len); wan_skb_queue_tail(&trace_info->trace_queue, new_skb); } diff --git a/patches/kdrivers/src/wan_aften/wan_aften.c b/patches/kdrivers/src/wan_aften/wan_aften.c index 18f900d..ad5ccd3 100644 --- a/patches/kdrivers/src/wan_aften/wan_aften.c +++ b/patches/kdrivers/src/wan_aften/wan_aften.c @@ -8,9 +8,42 @@ # define DEBUG_REG #endif +#define WAN_AFTEN_FE_RW 0 + +#if WAN_AFTEN_FE_RW +#ifndef DEFINE_MUTEX +# define DEFINE_MUTEX +#endif + +# include "wanpipe_common.h" +# define DEBUG_FE_EXPORT if(0)DEBUG_EVENT + +static wan_mutexlock_t rw_mutex; +int wan_aftup_te1_reg_write(void *card, unsigned short reg, unsigned short in_data); +int wan_aftup_te1_reg_read(void *card, unsigned short reg, unsigned char *out_data); + +/* Maxim chip definitions */ +#define REG_IDR 0xF8 +#define DEVICE_ID_DS26528 0x0B +#define DEVICE_ID_DS26524 0x0C +#define DEVICE_ID_DS26522 0x0D +#define DEVICE_ID_DS26521 0x0E +#define DEVICE_ID_BAD 0x00 + +#define DEVICE_ID_SHIFT 3 +#define DEVICE_ID_MASK 0x1F +#define DEVICE_ID_DS(dev_id) ((dev_id) >> DEVICE_ID_SHIFT) & DEVICE_ID_MASK +#define DECODE_CHIPID(chip_id) \ + (chip_id == DEVICE_ID_DS26528) ? "DS26528" : \ + (chip_id == DEVICE_ID_DS26524) ? "DS26524" : \ + (chip_id == DEVICE_ID_DS26522) ? "DS26522" : \ + (chip_id == DEVICE_ID_DS26521) ? "DS26521" : "Unknown" + +#endif + static char *wan_drvname = "wan_aften"; -static char wan_fullname[] = "WANPIPE(tm) Sangoma AFT (lite) Driver"; -static char wan_copyright[] = "(c) 1995-2008 Sangoma Technologies Inc."; +static char wan_fullname[] = "WANPIPE(tm) Sangoma AFT (lite) Driver"; +static char wan_copyright[] = "(c) 1995-2008 Sangoma Technologies Inc."; static int ncards; static sdla_t* card_list = NULL; /* adapter data space */ @@ -416,6 +449,7 @@ static int wan_aften_update_ports(void) #endif DEBUG_TEST("\n\nList of available Sangoma devices:\n"); + for (card=card_list; card; card = card->list){ netdevice_t *dev; dev = WAN_DEVLE2DEV(WAN_LIST_FIRST(&card->wandev.dev_head)); @@ -424,6 +458,9 @@ static int wan_aften_update_ports(void) card->wandev.comm_port = prev->wandev.comm_port + 1; } + + DEBUG_TEST("dev name: %s\n", wan_netif_name(dev)); + #if 0 err = card->hw_iface.get_hwprobe( card->hw, @@ -1109,3 +1146,275 @@ wan_aften_ioctl (netdevice_t *dev, struct ifreq *ifr, wan_ioctl_cmd_t cmd) return err; } +#if WAN_AFTEN_FE_RW + +/********* Private Functions **********/ + +static void wan_aftup_init_critical_section(void *pmutex) +{ + wan_mutex_lock_init(pmutex, "fe_rw_mutex"); +} + +static void wan_aftup_enter_critical_section(void *pmutex) +{ + wan_mutex_lock(pmutex, NULL); +} + +static void wan_aftup_leave_critical_section(void *pmutex) +{ + wan_mutex_unlock(pmutex, NULL); +} + +static unsigned int wan_aft_read_maxim(void *card, int offset, int size, void *out_buffer) +{ + int err; + wan_cmd_api_t api_cmd; + + DEBUG_FE_EXPORT("%s()\n", __FUNCTION__); + + memset(&api_cmd, 0x00, sizeof(api_cmd)); + + api_cmd.len = size; + api_cmd.offset = offset; + + err = wan_aften_read_reg(card, &api_cmd, 0); + + if (!err) { + memcpy(out_buffer, api_cmd.data, size); + } + + return err; +} + + +static unsigned int wan_aft_write_maxim(void *card, int offset, int size, void *in_buffer) +{ + int err; + wan_cmd_api_t api_cmd; + + DEBUG_FE_EXPORT("%s()\n", __FUNCTION__); + + memset(&api_cmd, 0x00, sizeof(api_cmd)); + + api_cmd.len = size; + api_cmd.offset = offset; + memcpy(api_cmd.data, in_buffer, size); + + err = wan_aften_write_reg(card, &api_cmd); + + return err; +} + +unsigned int write_cpld(sdla_t *card, unsigned short cpld_off, unsigned short cpld_data) +{ + cpld_off &= ~AFT8_BIT_DEV_ADDR_CLEAR; + cpld_off |= AFT8_BIT_DEV_ADDR_CPLD; + + wan_aft_write_maxim(card, 0x46, 2, &cpld_off); + wan_aft_write_maxim(card, 0x44, 2, &cpld_data); + return 0; +} + +static int wan_aften_te1_disable_global_chip_reset(sdla_t *card) +{ + unsigned int data; + int err, i; + + for (i = 0; i < 2; i++) { + /* put in reset */ + write_cpld(card, 0x00, 0x06); + + /* sangoma_msleep(50); */ + + /* Disable Global Chip/FrontEnd/CPLD Reset */ + err = wan_aft_read_maxim(card, 0x40, 4, &data); + if (err){ + return 1; + } + + data &= ~0x6; + + err = wan_aft_write_maxim(card, 0x40, 4, &data); + if (err){ + return 1; + } + + /* sangoma_msleep(50); */ + } + + return 0; +} + +static int wan_aften_check_id_reg(sdla_t *card) +{ + unsigned char val, fe_id; + + wan_aftup_te1_reg_read(card, REG_IDR, &val); + + DEBUG_FE_EXPORT("val = 0x%X\n", val); + + fe_id = DEVICE_ID_DS(val); + + switch(fe_id) + { + case DEVICE_ID_DS26528: + DEBUG_EVENT("Device is DS26528\n"); + break; + case DEVICE_ID_DS26524: + DEBUG_EVENT("Device is DS26524\n"); + break; +/* + case DEVICE_ID_DS26522: //not installed on Sangoma HW + DEBUG_EVENT("Device is DS26522!\n"); + break; +*/ + case DEVICE_ID_DS26521: + DEBUG_EVENT("Device is DS26521\n"); + break; + default: + DEBUG_ERROR("Failed to read Maxim ID (%02X)\n", val); + return 1; + } + + return 0; +} + + +/************ Public Functions ************/ + +void *wan_aftup_te1_global_init(int card_number) +{ + sdla_t *card = NULL, *found_card = NULL; + int card_counter = 0; + + DEBUG_FE_EXPORT("%s()\n", __FUNCTION__); + + wan_aftup_init_critical_section(&rw_mutex); + + for (card = card_list; card; card = card->list){ + + if (card_counter == card_number){ + /* found the card */ + found_card = card; + DEBUG_FE_EXPORT("card name: %s\n", card->devname); + break; + } + + card_counter++; + } + + if (!found_card) { + DEBUG_ERROR("Error: failed to find card_number %d", + card_number); + return NULL; + } + + if (wan_aften_te1_disable_global_chip_reset(found_card)) { + return NULL; + } + + /* read the Chip ID and check is it valid */ + if (wan_aften_check_id_reg(found_card)) { + return NULL; + } + + return found_card; +} + +int wan_aftup_te1_reg_write(void *card, unsigned short reg, unsigned short in_data) +{ + unsigned int tmp; + + DEBUG_FE_EXPORT("%s()\n", __FUNCTION__); + + wan_aftup_enter_critical_section(&rw_mutex); + + if (reg & 0x800) reg |= 0x2000; + if (reg & 0x1000) reg |= 0x4000; + + reg &= ~AFT8_BIT_DEV_ADDR_CLEAR; + //reg |= AFT8_BIT_DEV_MAXIM_ADDR_CPLD; + + DEBUG_FE_EXPORT("%s(): Reg 0x%04X Data 0x%04X\n", __FUNCTION__, reg, in_data); + + /* write the register where the data will be written to */ + if (wan_aft_write_maxim(card, AFT_MCPU_INTERFACE_ADDR, 2, ®)) { + DEBUG_ERROR("%s(): Failed to write to AFT_MCPU_INTERFACE_ADDR!\n", + __FUNCTION__); + wan_aftup_leave_critical_section(&rw_mutex); + /* return error */ + return 1; + } + + /* read to avoid bridge optimization of two writes by PCI */ + if (wan_aft_read_maxim(card, AFT_MCPU_INTERFACE, 4, &tmp)) { + DEBUG_ERROR("%s(): Failed to read from AFT_MCPU_INTERFACE!\n", + __FUNCTION__); + wan_aftup_leave_critical_section(&rw_mutex); + /* return error */ + return 1; + } + + /* write the data to the register */ + if (wan_aft_write_maxim(card, AFT_MCPU_INTERFACE, 2, &in_data)) { + DEBUG_ERROR("%s(): Failed to write to AFT_MCPU_INTERFACE!\n", + __FUNCTION__); + wan_aftup_leave_critical_section(&rw_mutex); + /* return error */ + return 1; + } + + wan_aftup_leave_critical_section(&rw_mutex); + + /* return success */ + return 0; +} + +int wan_aftup_te1_reg_read(void *card, unsigned short reg, unsigned char *out_data) +{ + unsigned int data; + + DEBUG_FE_EXPORT("%s()\n", __FUNCTION__); + + wan_aftup_enter_critical_section(&rw_mutex); + + if (reg & 0x800) reg |= 0x2000; + if (reg & 0x1000) reg |= 0x4000; + + reg &= ~AFT8_BIT_DEV_ADDR_CLEAR; + //reg |= AFT8_BIT_DEV_MAXIM_ADDR_CPLD; + + /* write the register where data will be read from */ + if (wan_aft_write_maxim(card, AFT_MCPU_INTERFACE_ADDR, 2, ®)) { + DEBUG_ERROR("%s(): Failed to write to AFT_MCPU_INTERFACE_ADDR!\n", + __FUNCTION__); + wan_aftup_leave_critical_section(&rw_mutex); + /* return error */ + return 1; + } + + if (wan_aft_read_maxim(card, AFT_MCPU_INTERFACE, 4, &data)) { + DEBUG_ERROR("%s(): Failed to read from AFT_MCPU_INTERFACE!\n", + __FUNCTION__); + wan_aftup_leave_critical_section(&rw_mutex); + /* return error */ + return 1; + } + + DEBUG_FE_EXPORT("%s(): Reg 0x%04X Data 0x%08X\n", __FUNCTION__, reg, data); + + /* store data in user buffer*/ + *out_data = (unsigned char)data; + + wan_aftup_leave_critical_section(&rw_mutex); + + /* return success */ + return 0; +} + +/* exported functions to be called by other modules */ +EXPORT_SYMBOL(wan_aftup_te1_global_init); +EXPORT_SYMBOL(wan_aftup_te1_reg_write); +EXPORT_SYMBOL(wan_aftup_te1_reg_read); + +#endif /* WAN_AFTEN_FE_RW */ diff --git a/patches/kdrivers/src/wanrouter/af_wanpipe.c b/patches/kdrivers/src/wanrouter/af_wanpipe.c index a5f851f..efcd7c7 100644 --- a/patches/kdrivers/src/wanrouter/af_wanpipe.c +++ b/patches/kdrivers/src/wanrouter/af_wanpipe.c @@ -92,7 +92,6 @@ extern int wanpipe_bind_sk_to_parent(struct sock *sk, netdevice_t *dev, struct w extern int wanpipe_sk_parent_rx(struct sock *parent_sk, struct sk_buff *skb); #endif -WAN_DECLARE_NETDEV_OPS(wan_netdev_ops) /* The code below is used to test memory leaks. It prints out @@ -1516,7 +1515,9 @@ wanpipe_svc_listen_skip: * Crates AF_WANPIPE socket. *===========================================================*/ -#ifdef LINUX_FEAT_2624 +#if defined(DECLARE_SOCKADDR) +int wanpipe_create(struct net *net, struct socket *sock, int protocol, int kern) +#elif defined(LINUX_FEAT_2624) int wanpipe_create(struct net *net, struct socket *sock, int protocol) #else int wanpipe_create(struct socket *sock, int protocol) diff --git a/patches/kdrivers/src/wanrouter/wandev.c b/patches/kdrivers/src/wanrouter/wandev.c index 44e0729..9908d6d 100644 --- a/patches/kdrivers/src/wanrouter/wandev.c +++ b/patches/kdrivers/src/wanrouter/wandev.c @@ -36,6 +36,7 @@ typedef struct wanpipe_wandev int init; int used; wanpipe_cdev_t *cdev; + wan_mutexlock_t lock; }wanpipe_wandev_t; @@ -88,6 +89,8 @@ int wanpipe_wandev_create(void) memset(&wandev,0,sizeof(wanpipe_wandev_t)); + wan_mutex_lock_init(&wandev.lock, "wandev_mutex_lock"); + cdev->dev_ptr=&wandev; wandev.cdev=cdev; memcpy(&cdev->ops,&wandev_fops,sizeof(wanpipe_cdev_ops_t)); @@ -98,6 +101,7 @@ int wanpipe_wandev_create(void) memset(&wandev,0,sizeof(wanpipe_wandev_t)); } + DEBUG_WANDEV("%s: WANDEV CREATE \n",__FUNCTION__); return err; @@ -152,8 +156,11 @@ static int wp_wandev_close(void *obj) static int wp_wandev_ioctl(void *obj, int cmd, void *data) { wanpipe_wandev_t *wdev=(wanpipe_wandev_t*)obj; + wan_smp_flag_t flag; int err=-EINVAL; + wan_mutex_lock(&wdev->lock,&flag); + switch (cmd) { case WANPIPE_IOCTL_WRITE: @@ -175,6 +182,8 @@ static int wp_wandev_ioctl(void *obj, int cmd, void *data) break; } + + wan_mutex_unlock(&wdev->lock,&flag); return err; diff --git a/patches/kdrivers/src/wanrouter/wanmain.c b/patches/kdrivers/src/wanrouter/wanmain.c index 812b25d..e9a9663 100644 --- a/patches/kdrivers/src/wanrouter/wanmain.c +++ b/patches/kdrivers/src/wanrouter/wanmain.c @@ -526,13 +526,15 @@ unsigned short wanrouter_type_trans (struct sk_buff *skb, netdevice_t *dev) * o find WAN device associated with this node * o execute requested action or pass command to the device driver */ - -int wanrouter_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, unsigned long arg) +WAN_IOCTL_RET_TYPE WANDEF_IOCTL_FUNC(wanrouter_ioctl, struct file *file, unsigned int cmd, unsigned long arg) { - int err = 0; + WAN_IOCTL_RET_TYPE err = 0; struct proc_dir_entry *dent; wan_device_t *wandev; + +#ifdef HAVE_UNLOCKED_IOCTL + struct inode *inode = file->f_dentry->d_inode; +#endif if ((cmd>>8) != ROUTER_IOCTL){ DEBUG_EVENT("%s: Invalid CMD=0x%X ROUTER_IOCTL=0x%X\n", diff --git a/patches/kdrivers/src/wanrouter/wanproc.c b/patches/kdrivers/src/wanrouter/wanproc.c index 9e411bf..0355e6b 100644 --- a/patches/kdrivers/src/wanrouter/wanproc.c +++ b/patches/kdrivers/src/wanrouter/wanproc.c @@ -292,7 +292,7 @@ static struct file_operations wandev_fops = { .read = seq_read, .llseek = seq_lseek, .release = single_release, - .ioctl = wanrouter_ioctl, + .WAN_IOCTL = wanrouter_ioctl, }; static int wp_hwprobe_open(struct inode *inode, struct file *file) @@ -451,7 +451,7 @@ static struct inode_operations router_inode = static struct file_operations wandev_fops = { read: router_proc_read, - ioctl: wanrouter_ioctl, + WAN_IOCTL: wanrouter_ioctl, }; /* diff --git a/patches/kdrivers/wanec/.tmp_versions/wanec.mod b/patches/kdrivers/wanec/.tmp_versions/wanec.mod index 96ee404..daeeed3 100644 --- a/patches/kdrivers/wanec/.tmp_versions/wanec.mod +++ b/patches/kdrivers/wanec/.tmp_versions/wanec.mod @@ -1,2 +1,2 @@ -/root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/wanec.ko -/root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/wanec_iface.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/wanec_cmd.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/wanec_utils.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/wanec_dev.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/apilib/bt/octapi_bt0.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/apilib/largmath/octapi_largmath.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/apilib/llman/octapi_llman.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_apimi/oct6100_mask_interrupts.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_adpcm_chan.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_chip_open.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_chip_stats.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_conf_bridge.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_debug.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_events.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_interrupts.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_memory.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_miscellaneous.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_mixer.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_phasing_tsst.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_playout_buf.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_remote_debug.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_tlv.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_tone_detection.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_tsi_cnct.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_tsst.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_user.o +/root/3.5/wanpipe/patches/kdrivers/wanec/wanec.ko +/root/3.5/wanpipe/patches/kdrivers/wanec/wanec_iface.o /root/3.5/wanpipe/patches/kdrivers/wanec/wanec_cmd.o /root/3.5/wanpipe/patches/kdrivers/wanec/wanec_utils.o /root/3.5/wanpipe/patches/kdrivers/wanec/wanec_dev.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/apilib/bt/octapi_bt0.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/apilib/largmath/octapi_largmath.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/apilib/llman/octapi_llman.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_apimi/oct6100_mask_interrupts.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_adpcm_chan.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_channel.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_chip_open.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_chip_stats.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_conf_bridge.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_debug.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_events.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_interrupts.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_memory.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_miscellaneous.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_mixer.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_phasing_tsst.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_playout_buf.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_remote_debug.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_tlv.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_tone_detection.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_tsi_cnct.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_tsst.o /root/3.5/wanpipe/patches/kdrivers/wanec/oct6100_api/octdeviceapi/oct6100api/oct6100_api/oct6100_user.o diff --git a/patches/kdrivers/wanec/.wanec.ko.cmd b/patches/kdrivers/wanec/.wanec.ko.cmd deleted file mode 100644 index 0858dc6..0000000 --- a/patches/kdrivers/wanec/.wanec.ko.cmd +++ /dev/null @@ -1 +0,0 @@ -cmd_/root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/wanec.ko := ld -m elf_i386 -m elf_i386 -r -o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/wanec.ko /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/wanec.o /root/3.5/wanpipe-3.5.17.16/patches/kdrivers/wanec/wanec.mod.o diff --git a/patches/kdrivers/wanec/Module.symvers b/patches/kdrivers/wanec/Module.symvers deleted file mode 100644 index 5c1b866..0000000 --- a/patches/kdrivers/wanec/Module.symvers +++ /dev/null @@ -1,71 +0,0 @@ -0xf7567a8a wanpipe_api_buf_check /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0xf27fa082 wanpipe_lip_connect /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x7ff2cd30 wanpipe_cdev_tdm_create /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xe656360e sdladrv_hw_mode /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x53ece134 wanpipe_cdev_tx_wake /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x1df80ee2 wanpipe_cdev_rx_wake /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x20fb12bd sdla_register /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x57e6ed60 wanpipe_api_sock_rx /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x0a7a356f wanpipe_cdev_event_wake /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x17b4a5eb wanrouter_proc_add_interface /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x59fb2682 sdla_hw_probe /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x9a7a6658 wanpipe_lip_rx /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x8f31cdeb proc_router /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x77da8dee register_wanec_iface /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x1036a1ab bind_api_listen_to_protocol /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x524e2f20 register_wanpipe_fw_protocol /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x1d1b7493 register_wan_device /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x6caac49f wanrouter_proc_add_protocol /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x618aefa9 wanpipe_cdev_logger_create /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xf7f5afa4 wanpipe_ec_event_ctrl /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x6201c669 wp_logger_level_fe /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x7cd3c2bc wanpipe_ec_poll /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0xae404947 wanrouter_proc_delete_protocol /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x6dd4c4d6 wanpipe_cdev_free /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xdfd0f6c6 sdla_get_hw_adptr_cnt /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x6ad0c191 wp_logger_level_bri /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xc2143791 wanpipe_ec_register /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0xc288bfdc wanpipe_cdev_cfg_ctrl_create /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xb8da2b4c wanpipe_global_cdev_free /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x47ff4922 wanpipe_cdev_tdm_ctrl_create /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xaa81d611 wanpipe_global_cdev_init /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x02364d27 wanrouter_encapsulate /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x136b2537 wan_skb_destructor /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x3f234f3e wp_logger_input /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xfa083e32 register_wanpipe_api_socket /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x4de93988 sdla_get_hw_usb_adptr_cnt /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xade2d0d7 sdla_get_hw_probe /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xd90451b0 wanpipe_cdev_timer_create /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x0f19df36 sdladrv_callback /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xbd4a533a sdla_get_hwinfo /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xef48df91 proc_add_line /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x22a2999f sdla_unregister /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x85c05713 wanrouter_type_trans /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0xfd74fadb wan_set_ip_address /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0xc98aebe6 wan_get_ip_address /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x7d68ed07 protocol_disconnected /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0xc5224c15 bind_api_to_protocol /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x38eb6851 unregister_wanpipe_api_socket /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0xaac011d2 wanpipe_lip_kick /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x3b604364 unbind_api_listen_from_protocol /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x6df6c4e0 wan_run_wanrouter /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x05487ec8 wp_logger_level_default /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xeb418feb sdla_hw_bridge_probe /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xea9f3201 gl_usb_rw_fast /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x04df932b unregister_wanec_iface /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x562d2ade wanpipe_ec_isr /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x13405f6b unregister_wanpipe_fw_protocol /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0xe72f44cb wanpipe_api_listen_rx /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x8bab76f8 wp_logger_level_tdmapi /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x5b7efb57 wanpipe_api_poll_wake /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x651a840a wan_add_gateway /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x2f21a326 unregister_wanpipe_lip_protocol /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x2cce07c5 wanrouter_proc_delete_interface /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x0ebe03d1 unregister_wan_device /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x22317d82 wanpipe_lip_disconnect /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x74a9ab7b wp_logger_level_te1 /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0xed6a48f7 protocol_connected /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x53350bd4 wanpipe_ec_unregister /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0xc12eb167 wp_logger_level_hwec /root/3.5/wanpipe-3.5.17.16/kdrvtmp/sdladrv EXPORT_SYMBOL -0x32c84cc9 register_wanpipe_lip_protocol /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL -0x00525339 protocol_connecting /root/3.5/wanpipe-3.5.17.16/kdrvtmp/wanrouter EXPORT_SYMBOL diff --git a/patches/kdrivers/wanec/wanec.mod.c b/patches/kdrivers/wanec/wanec.mod.c index ad42c3c..d11b207 100644 --- a/patches/kdrivers/wanec/wanec.mod.c +++ b/patches/kdrivers/wanec/wanec.mod.c @@ -59,4 +59,4 @@ __attribute__((section(".modinfo"))) = "depends=sdladrv,wanrouter"; -MODULE_INFO(srcversion, "178C923C965F231AAF945F5"); +MODULE_INFO(srcversion, "330FDC6BCC633B9736F33B7"); diff --git a/patches/kdrivers/wanec/wanec_cmd.c b/patches/kdrivers/wanec/wanec_cmd.c index 60b0fdb..c832edf 100644 --- a/patches/kdrivers/wanec/wanec_cmd.c +++ b/patches/kdrivers/wanec/wanec_cmd.c @@ -500,7 +500,7 @@ int wanec_ChipOpenPrep(wan_ec_dev_t *ec_dev, char *devname, wanec_config_t *conf ulResult = Oct6100GetInstanceSize(&ec->f_OpenChip, &InstanceSize); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to get EC chip instance size (err=0x%X)!\n", ec->name, ulResult); return -EINVAL; @@ -510,7 +510,7 @@ int wanec_ChipOpenPrep(wan_ec_dev_t *ec_dev, char *devname, wanec_config_t *conf ec->pChipInstance = (tPOCT6100_INSTANCE_API)wan_vmalloc(InstanceSize.ulApiInstanceSize); if (ec->pChipInstance == NULL){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to allocate memory for EC chip (%d bytes)!\n", ec->name,InstanceSize.ulApiInstanceSize); return -EINVAL; @@ -547,7 +547,7 @@ int wanec_ChipOpen(wan_ec_dev_t *ec_dev, int verbose) "%s: Opening Echo Canceller Chip ...\n", ec->name); if (ec->f_OpenChip.pbyImageFile == NULL){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Invalid EC image pointer\n", ec->name); return -EINVAL; @@ -558,7 +558,7 @@ int wanec_ChipOpen(wan_ec_dev_t *ec_dev, int verbose) if ( ulResult != cOCT6100_ERR_OK ){ if (ec->imageLast == WANOPT_YES || ulResult != cOCT6100_ERR_OPEN_INVALID_FIRMWARE_OR_CAPACITY_PINS){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to open Echo Canceller Chip (err=0x%X)\n", ec->name, ulResult); } @@ -566,7 +566,7 @@ int wanec_ChipOpen(wan_ec_dev_t *ec_dev, int verbose) } if (wanec_ChipImage(ec_dev, NULL, verbose)){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to read EC chip statistics!\n", ec->name); wanec_ChipClose(ec_dev, verbose); @@ -576,7 +576,7 @@ int wanec_ChipOpen(wan_ec_dev_t *ec_dev, int verbose) ec->pToneBufferIndexes = wan_malloc(sizeof(UINT32) * ec->f_OpenChip.ulMaxPlayoutBuffers); if (ec->pToneBufferIndexes == NULL){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed allocate memory for playout handles!\n", ec->name); wanec_ChipClose(ec_dev, verbose); @@ -589,7 +589,7 @@ int wanec_ChipOpen(wan_ec_dev_t *ec_dev, int verbose) ec->pEchoChannelHndl = wan_malloc(sizeof(UINT32) * MAX_EC_CHANS); if (ec->pEchoChannelHndl == NULL){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed allocate memory for channel handle!\n", ec->name); wan_free(ec->pToneBufferIndexes); @@ -600,7 +600,7 @@ int wanec_ChipOpen(wan_ec_dev_t *ec_dev, int verbose) ec->pEcDevMap = wan_malloc(sizeof(wan_ec_dev_t*) * MAX_EC_CHANS); if (ec->pEcDevMap == NULL){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed allocate memory for ec channel map!\n", ec->name); wan_free(ec->pToneBufferIndexes); @@ -632,7 +632,7 @@ int wanec_ChipClose(wan_ec_dev_t *ec_dev, int verbose) ec->pChipInstance, &f_CloseChip ); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to close Echo Canceller chip (err=0x%X)!\n", ec->name, ulResult); return -EINVAL; @@ -825,7 +825,7 @@ int wanec_ChannelOpen(wan_ec_dev_t *ec_dev, INT ec_chan, int verbose) ulResult = Oct6100ChannelOpen( ec->pChipInstance, &EchoChannelOpen ); if (ulResult != cOCT6100_ERR_OK){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to open Echo Canceller channel %d (err=0x%X)!\n", ec->name, ec_chan, @@ -857,7 +857,7 @@ int wanec_ChannelClose(wan_ec_dev_t *ec_dev, INT ec_chan, int verbose) ulResult = Oct6100ChannelClose( ec->pChipInstance, &EchoChannelClose ); if (ulResult != cOCT6100_ERR_OK){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to close Echo Canceller channel %d (err=0x%X)!\n", ec->name, ec_chan, @@ -978,7 +978,7 @@ int wanec_ChannelMute(wan_ec_dev_t* ec_dev, INT ec_chan, wanec_chan_mute_t *mute ec->pChipInstance, &f_ChannelMute); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to mute EC channel %d on port %X (%08X)!\n", ec->name, ec_chan, f_ChannelMute.ulPortMask, ulResult); return EINVAL; @@ -1012,7 +1012,7 @@ int wanec_ChannelUnMute(wan_ec_dev_t *ec_dev, INT ec_chan, wanec_chan_mute_t *mu ec->pChipInstance, &f_ChannelUnMute); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to un-mute channel %d on port %X (%08X)!\n", ec->name, ec_chan, f_ChannelUnMute.ulPortMask, ulResult); return EINVAL; @@ -1039,7 +1039,7 @@ int wanec_ChannelStats(wan_ec_dev_t *ec_dev, INT channel, wanec_chan_stats_t *ch ec->pChipInstance, &f_ChannelStats); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to read EC stats for channel %d (%08X)!\n", ec->name, channel, ulResult); return EINVAL; @@ -1105,7 +1105,7 @@ static int wanec_ToneEnable(wan_ec_t *ec, int ec_chan, UINT32 tone_id, int verbo &f_ToneDetectionEnable); if ( ulResult != cOCT6100_ERR_OK ){ if (ulResult != cOCT6100_ERR_TONE_DETECTION_TONE_ACTIVATED){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to enable EC Tone (0x%08X) detection on ec chan %d (err=0x%08X)!\n", ec->name, tone_id, ec_chan, (unsigned int)ulResult); return -EINVAL; @@ -1136,7 +1136,7 @@ static int wanec_ToneDisable(wan_ec_t *ec, int ec_chan, UINT32 tone_id, int verb &f_ToneDetectionDisable); if ( ulResult != cOCT6100_ERR_OK ){ if (ulResult != cOCT6100_ERR_TONE_DETECTION_TONE_NOT_ACTIVATED){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to disable EC Tone (0x%08X) detection on ec chan %d (err=0x%08X)!\n", ec->name, tone_id, ec_chan, (unsigned int)ulResult); return -EINVAL; @@ -1203,50 +1203,206 @@ static CHAR* wanec_ToneId2Str(UINT32 f_ulToneId) } } -static unsigned char wanec_ConvertToneId(UINT32 f_ulToneId, unsigned char *ec_tone_port) +static int wanec_ConvertToneId(UINT32 f_ulToneId, unsigned char *ec_tone_port, unsigned char *digit, u_int16_t *type) { + int err=0; + switch (f_ulToneId){ /* DTMF Section */ - case ROUT_DTMF_0: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return '0'; - case ROUT_DTMF_1: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return '1'; - case ROUT_DTMF_2: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return '2'; - case ROUT_DTMF_3: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return '3'; - case ROUT_DTMF_4: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return '4'; - case ROUT_DTMF_5: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return '5'; - case ROUT_DTMF_6: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return '6'; - case ROUT_DTMF_7: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return '7'; - case ROUT_DTMF_8: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return '8'; - case ROUT_DTMF_9: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return '9'; - case ROUT_DTMF_A: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return 'A'; - case ROUT_DTMF_B: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return 'B'; - case ROUT_DTMF_C: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return 'C'; - case ROUT_DTMF_D: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return 'D'; - case ROUT_DTMF_STAR: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return '*'; - case ROUT_DTMF_POUND: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return '#'; - case SOUT_DTMF_0: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return '0'; - case SOUT_DTMF_1: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return '1'; - case SOUT_DTMF_2: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return '2'; - case SOUT_DTMF_3: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return '3'; - case SOUT_DTMF_4: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return '4'; - case SOUT_DTMF_5: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return '5'; - case SOUT_DTMF_6: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return '6'; - case SOUT_DTMF_7: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return '7'; - case SOUT_DTMF_8: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return '8'; - case SOUT_DTMF_9: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return '9'; - case SOUT_DTMF_A: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return 'A'; - case SOUT_DTMF_B: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return 'B'; - case SOUT_DTMF_C: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return 'C'; - case SOUT_DTMF_D: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return 'D'; - case SOUT_DTMF_STAR: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return '*'; - case SOUT_DTMF_POUND: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return '#'; - case SOUT_G168_2100GB_ON: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return 'f'; - case SOUT_G168_2100GB_WSPR: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return 'f'; - case ROUT_G168_2100GB_ON: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return 'f'; - case ROUT_G168_2100GB_WSPR: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return 'f'; - case SOUT_G168_1100GB_ON: *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; return 'f'; - case ROUT_G168_1100GB_ON: *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; return 'f'; + case ROUT_DTMF_0: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='0'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_1: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='1'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_2: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='2'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_3: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='3'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_4: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='4'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_5: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='5'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_6: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='6'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_7: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='7'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_8: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='8'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_9: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='9'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_A: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='A'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_B: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='B'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_C: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='C'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_D: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='D'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_STAR: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='*'; + *type = WAN_EVENT_EC_DTMF; + break; + case ROUT_DTMF_POUND: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='#'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_0: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='0'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_1: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='1'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_2: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='2'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_3: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='3'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_4: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='4'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_5: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='5'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_6: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='6'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_7: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='7'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_8: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='8'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_9: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='9'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_A: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='A'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_B: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='B'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_C: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='C'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_D: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='D'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_STAR: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='*'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_DTMF_POUND: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='#'; + *type = WAN_EVENT_EC_DTMF; + break; + case SOUT_G168_2100GB_ON: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='f'; + *type = WAN_EVENT_EC_FAX_2100; + break; + case SOUT_G168_2100GB_WSPR: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='f'; + *type = WAN_EVENT_EC_FAX_2100_WSPR; + break; + case ROUT_G168_2100GB_ON: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='f'; + *type = WAN_EVENT_EC_FAX_2100; + break; + case ROUT_G168_2100GB_WSPR: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='f'; + *type = WAN_EVENT_EC_FAX_2100_WSPR; + break; + case SOUT_G168_1100GB_ON: + *ec_tone_port = WAN_EC_CHANNEL_PORT_SOUT; + *digit ='f'; + *type = WAN_EVENT_EC_FAX_1100; + break; + case ROUT_G168_1100GB_ON: + *ec_tone_port = WAN_EC_CHANNEL_PORT_ROUT; + *digit ='f'; + *type = WAN_EVENT_EC_FAX_1100; + break; + default: + err=-1; } - return 0x00000000; + return err; } #if 1 @@ -1361,7 +1517,7 @@ int wanec_ToneEvent(wan_ec_t *ec, int verbose) ec->name); return 0; } - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to get tone events (err=0x%X)!\n", ec->name, ulResult); return -EINVAL; @@ -1375,7 +1531,7 @@ int wanec_ToneEvent(wan_ec_t *ec, int verbose) ec_dev = ec->pEcDevMap[ec_chan]; fe_chan = (u8)wanec_ec2fe_channel(ec, ec_chan, &ec_dev); if (ec_dev == NULL || ec_dev->card == NULL){ - DEBUG_EVENT( + DEBUG_ERROR( "%s: Internal Error: Failed to find fe channel (ec_chan=%d)\n", ec->name, ec_chan); continue; @@ -1390,15 +1546,19 @@ int wanec_ToneEvent(wan_ec_t *ec, int verbose) card = (sdla_t*)ec_dev->card; if (card->wandev.event_callback.tone){ - u8 tone_port = WAN_EC_CHANNEL_PORT_ROUT; - - event.type = WAN_EVENT_EC_DTMF; + int err; event.channel = fe_chan; - event.digit = wanec_ConvertToneId( - ToneEvent[i].ulToneDetected, - &tone_port); event.tone_type = wanec_ConvertToneType(ToneEvent[i].ulEventType); - event.tone_port = tone_port; + + err=wanec_ConvertToneId( + ToneEvent[i].ulToneDetected, + &event.tone_port, &event.digit, &event.type); + + if (err != 0) { + DEBUG_ERROR("%s: Error: Unsupported Tone Detected: chan=%i tone=0x%X\n", + ec->name, fe_chan, ToneEvent[i].ulToneDetected); + goto ignore_tone; + } #if 0 /* Implemented fax debouncing but @@ -1409,6 +1569,10 @@ int wanec_ToneEvent(wan_ec_t *ec, int verbose) } #endif card->wandev.event_callback.tone(card, &event); + +ignore_tone: + ; + } } @@ -1448,7 +1612,7 @@ int wanec_PlayoutEvent(wan_ec_t *ec, int verbose) ec->name); return 0; } - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to get buffer playout events (err=0x%X)!\n", ec->name, ulResult); return -EINVAL; @@ -1462,7 +1626,7 @@ int wanec_PlayoutEvent(wan_ec_t *ec, int verbose) ec_dev = ec->pEcDevMap[ec_chan]; fe_chan = wanec_ec2fe_channel(ec, ec_chan, &ec_dev); if (ec_dev == NULL || ec_dev->card == NULL){ - DEBUG_EVENT( + DEBUG_ERROR( "%s: Internal Error: Failed to find fe channel (ec_chan=%d)\n", ec->name, ec_chan); continue; @@ -1508,7 +1672,7 @@ int wanec_ISR(wan_ec_t *ec, int verbose) ec->pChipInstance, &ec->f_InterruptFlag ); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to execute interrupt Service Routine (err=%08X)!\n", ec->name, ulResult); @@ -1516,7 +1680,7 @@ int wanec_ISR(wan_ec_t *ec, int verbose) } /* Critical errors */ if (ec->f_InterruptFlag.fFatalGeneral == TRUE){ - DEBUG_EVENT( + DEBUG_ERROR( "%s: An internal fatal chip error detected (0x%X)!\n", ec->name, ec->f_InterruptFlag.ulFatalGeneralFlags); @@ -1601,7 +1765,7 @@ int wanec_DebugChannel(wan_ec_dev_t *ec_dev, INT channel, int verbose) } if (ec_dev->ec->ulDebugChannelHndl != cOCT6100_INVALID_HANDLE){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Echo Canceller daemon can monitor only one ec channel (%d)!\n", ec_dev->name, channel); return -EINVAL; @@ -1621,7 +1785,7 @@ int wanec_DebugChannel(wan_ec_dev_t *ec_dev, INT channel, int verbose) ec->pChipInstance, &DebugSelectChannel ); if (ulResult != cOCT6100_ERR_OK){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to select debug ec channel %d for monitoring (err=0x%X)\n", ec->name, channel, @@ -1641,7 +1805,7 @@ int wanec_DebugGetData(wan_ec_dev_t *ec_dev, wanec_chan_monitor_t *chan_monitor, WAN_ASSERT(ec_dev->ec == NULL); ec = ec_dev->ec; if (ec->ulDebugChannelHndl == cOCT6100_INVALID_HANDLE){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: No Debug channel was selected!\n", ec->name); return -EINVAL; @@ -1678,7 +1842,7 @@ int wanec_DebugGetData(wan_ec_dev_t *ec_dev, wanec_chan_monitor_t *chan_monitor, ec->pChipInstance, &fDebugGetData ); if (ulResult != cOCT6100_ERR_OK){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to get debug data for ec channel %d (err=0x%X)\n", ec->name, ec->DebugChannel, @@ -1731,14 +1895,14 @@ int wanec_BufferLoad(wan_ec_dev_t *ec_dev, wanec_buffer_config_t *buffer_config, size = buffer_config->size * sizeof(INT8); pData = wan_vmalloc(size); if (pData == NULL){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to allocate memory for buffer!\n", ec->name); return -EINVAL; } err = WAN_COPY_FROM_USER(pData, buffer_config->data, size); if (err){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to copy EC buffer from user space [%s:%d]!\n", ec->name, __FUNCTION__,__LINE__); @@ -1760,7 +1924,7 @@ int wanec_BufferLoad(wan_ec_dev_t *ec_dev, wanec_buffer_config_t *buffer_config, if (ulResult == cOCT6100_ERR_BUFFER_PLAYOUT_ALL_BUFFERS_OPEN){ goto buffer_load_done; } - DEBUG_EVENT( + DEBUG_ERROR( "%s: ERROR: Failed to load buffer into EC Chip (err=0x%X)\n", ec->name, ulResult); wan_vfree(pData); @@ -1794,7 +1958,7 @@ try_next_index: if (buffer_config->buffer_index != cOCT6100_INVALID_VALUE){ pBufferIndex = wanec_search_bufferindex(ec, buffer_config->buffer_index); if (pBufferIndex == NULL){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Invalid buffer index %X!\n", ec->name, buffer_config->buffer_index); return EINVAL; @@ -1818,7 +1982,7 @@ try_next_index: if (ulResult == cOCT6100_ERR_BUFFER_PLAYOUT_NOT_OPEN){ goto buffer_unload_done; } - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to unload buffer from EC Chip (err=0x%X)!\n", ec->name, (unsigned int)ulResult); return EINVAL; @@ -1847,7 +2011,7 @@ int wanec_BufferPlayoutAdd(wan_ec_t *ec, int channel, wanec_playout_t *playout, playout->repeat_cnt); if (playout->index == cOCT6100_INVALID_VALUE|| wanec_search_bufferindex(ec, playout->index) == NULL){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Invalid playout buffer index for ec channel %d!\n", ec->name, channel); return -EINVAL; @@ -1876,7 +2040,7 @@ int wanec_BufferPlayoutAdd(wan_ec_t *ec, int channel, wanec_playout_t *playout, ec->pChipInstance, &BufferPlayoutAdd); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to add playout buffer to ec channel %d (err=%08X)\n", ec->name, channel, ulResult); return -EINVAL; @@ -1906,7 +2070,7 @@ int wanec_BufferPlayoutStart(wan_ec_t *ec, int channel, wanec_playout_t *playout ec->pChipInstance, &BufferPlayoutStart); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to active playout buffer on ec channel %d (err=%08X)\n", ec->name, channel, @@ -1937,7 +2101,7 @@ int wanec_BufferPlayoutStop(wan_ec_t *ec, int channel, wanec_playout_t *playout, &BufferPlayoutStop); if ( ulResult != cOCT6100_ERR_OK ){ if (ulResult != cOCT6100_ERR_BUFFER_PLAYOUT_NOT_STARTED){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to deactive playout buffer on ec channel %d (err=%08X)\n", ec->name, channel, @@ -1961,7 +2125,7 @@ int wanec_ConfBridgeOpen(wan_ec_t *ec, wan_ec_confbridge_t *confbridge, int verb "%s: Opening Conference Bridge...\n", ec->name); if ((unsigned int)ec->confbridges_no >= ec->f_OpenChip.ulMaxConfBridges){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Trying to open too many conference bridges (%d:%d)\n", ec->name, ec->confbridges_no, @@ -1976,7 +2140,7 @@ int wanec_ConfBridgeOpen(wan_ec_t *ec, wan_ec_confbridge_t *confbridge, int verb ec->pChipInstance, &ConfBridgeOpen); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to open new conference bridge (err=%08X)\n", ec->name, ulResult); @@ -1999,7 +2163,7 @@ int wanec_ConfBridgeClose(wan_ec_t *ec, wan_ec_confbridge_t *confbridge, int ver ec->pChipInstance, &ConfBridgeClose); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to close conference bridge (%X, err=%08X)\n", ec->name, confbridge->ulHndl, @@ -2025,7 +2189,7 @@ int wanec_ConfBridgeChanAdd(wan_ec_t *ec, wan_ec_confbridge_t *confbridge, int c ec->pChipInstance, &ConfBridgeChanAdd); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to add channel %d to conference bridge (%X, err=%08X)\n", ec->name, channel, confbridge->ulHndl, @@ -2051,7 +2215,7 @@ int wanec_ConfBridgeChanRemove(wan_ec_t *ec, wan_ec_confbridge_t *confbridge, in ec->pChipInstance, &ConfBridgeChanRemove); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to remove channel %d from conference bridge (%X, err=%08X)\n", ec->name, channel, confbridge->ulHndl, @@ -2076,7 +2240,7 @@ int wanec_ConfBridgeChanMute(wan_ec_t *ec, wan_ec_confbridge_t *confbridge, int ec->pChipInstance, &ConfBridgeChanMute); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to mute channel %d on a conference bridge (%X, err=%08X)\n", ec->name, channel, confbridge->ulHndl, @@ -2101,7 +2265,7 @@ int wanec_ConfBridgeChanUnMute(wan_ec_t *ec, wan_ec_confbridge_t *confbridge, in ec->pChipInstance, &ConfBridgeChanUnMute); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to unmute channel %d from conference bridge (%X, err=%08X)\n", ec->name, channel, confbridge->ulHndl, @@ -2134,7 +2298,7 @@ int wanec_ConfBridgeDominantSpeakerSet(wan_ec_t *ec, wan_ec_confbridge_t *confbr ec->pChipInstance, &ConfBridgeDominantSpeaker); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to %s dominant speaker to conference bridge (%X, err=%08X)\n", ec->name, (enable) ? "enable" : "disable", @@ -2163,7 +2327,7 @@ int wanec_ConfBridgeMaskChange(wan_ec_t *ec, wan_ec_confbridge_t *confbridge, in ec->pChipInstance, &ConfBridgeMaskChange); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to change the listener mask of bridge participant %d (err=%X)!\n", ec->name, channel, @@ -2188,7 +2352,7 @@ int wanec_ConfBridgeGetStats(wan_ec_t *ec, wan_ec_confbridge_t *confbridge, int ec->pChipInstance, &ConfBridgeStats); if ( ulResult != cOCT6100_ERR_OK ){ - DEBUG_EVENT( + DEBUG_ERROR( "ERROR: %s: Failed to get conference bridge statistics (err=%X)!\n", ec->name, ulResult); @@ -2275,7 +2439,7 @@ wan_ec_write_seq(wan_ec_dev_t *ec_dev, u32 write_addr, u16 write_data) } if ( i == WANEC_READ_LIMIT ){ - DEBUG_EVENT("%s: EC write command reached limit!\n", + DEBUG_ERROR("%s: Error: EC write command reached re-try limit!\n", ec_dev->name); return WAN_EC_RC_CPU_INTERFACE_NO_RESPONSE; } @@ -2295,7 +2459,7 @@ u32 wanec_req_write(void *arg, u32 write_addr, u16 write_data) ec_dev->ec->name, write_addr, write_data); ulResult = wan_ec_write_seq(ec_dev, write_addr, write_data); if (ulResult){ - DEBUG_EVENT("%s: Failed to write %04X to addr %08X\n", + DEBUG_ERROR("%s: Error: Failed to write %04X to addr %08X\n", ec_dev->name, write_addr, write_data); @@ -2316,7 +2480,7 @@ u32 wanec_req_write_smear(void *arg, u32 addr, u16 data, u32 len) for ( i = 0; i < len; i++ ){ ulResult = wan_ec_write_seq(ec_dev, addr + (i*2), data); if (ulResult){ - DEBUG_EVENT("%s: Failed to write %04X to addr %08X\n", + DEBUG_ERROR("%s: Error: Failed to write %04X to addr %08X\n", ec_dev->name, addr + (i*2), data); @@ -2340,7 +2504,7 @@ u32 wanec_req_write_burst(void *arg, u32 addr, u16 *data, u32 len) for ( i = 0; i < len; i++ ){ ulResult = wan_ec_write_seq(ec_dev, addr + (i * 2), data[i]); if (ulResult){ - DEBUG_EVENT("%s: Failed to write %04X to addr %08X\n", + DEBUG_ERROR("%s: Error: Failed to write %04X to addr %08X\n", ec_dev->name, addr + (i*2), data[i]); @@ -2406,7 +2570,7 @@ wan_ec_read_seq(wan_ec_dev_t *ec_dev, u32 read_addr, u16 *read_data, u32 read_le break; } if ( i == WANEC_READ_LIMIT ){ - DEBUG_EVENT("%s: EC read command reached limit!\n", + DEBUG_ERROR("%s: Error: EC read command reached re-try limit!\n", ec_dev->name); return WAN_EC_RC_CPU_INTERFACE_NO_RESPONSE; } @@ -2444,7 +2608,7 @@ u32 wanec_req_read(void *arg, u32 addr, u16 *data) data, 1); if (ulResult){ - DEBUG_EVENT("%s: Failed to read data from addr %08X\n", + DEBUG_ERROR("%s: Error: Failed to read data from addr %08X\n", ec_dev->name, addr); if (ec_dev->ec){ diff --git a/patches/kdrivers/wanec/wanec_dev.c b/patches/kdrivers/wanec/wanec_dev.c index 40e9706..16fcade 100644 --- a/patches/kdrivers/wanec/wanec_dev.c +++ b/patches/kdrivers/wanec/wanec_dev.c @@ -92,7 +92,7 @@ static int wanec_dev_release(struct inode*, struct file*); #if defined(__WINDOWS__) int wanec_dev_ioctl(void *data, char *card_devname); #else -static int wanec_dev_ioctl(struct inode*, struct file*, unsigned int, unsigned long); +static WAN_IOCTL_RET_TYPE WANDEF_IOCTL_FUNC(wanec_dev_ioctl, struct file*, unsigned int, unsigned long); #endif #if !defined(__WINDOWS__) @@ -104,7 +104,7 @@ static struct file_operations wanec_dev_fops = { llseek: NULL, open: wanec_dev_open, release: wanec_dev_release, - ioctl: wanec_dev_ioctl, + WAN_IOCTL: wanec_dev_ioctl, read: NULL, write: NULL, poll: NULL, @@ -243,15 +243,20 @@ int wanec_dev_ioctl(void *data, char *card_devname) return rc; } #else -extern int wanec_ioctl(unsigned int, void*); -static int wanec_dev_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, unsigned long data) +extern WAN_IOCTL_RET_TYPE wanec_ioctl(unsigned int, void*); +static WAN_IOCTL_RET_TYPE WANDEF_IOCTL_FUNC(wanec_dev_ioctl, struct file *file, unsigned int cmd, unsigned long data) { + long ret; if (data == 0){ return -EINVAL; } +#ifdef HAVE_UNLOCKED_IOCTL + ret = wanec_ioctl(cmd,(void*)data); + return ret; +#else return wanec_ioctl(cmd,(void*)data); +#endif } #endif diff --git a/patches/kdrivers/wanec/wanec_iface.c b/patches/kdrivers/wanec/wanec_iface.c index 4d261a5..e58e73b 100644 --- a/patches/kdrivers/wanec/wanec_iface.c +++ b/patches/kdrivers/wanec/wanec_iface.c @@ -149,7 +149,7 @@ static int wanec_poll(void *arg, void *pcard); #if defined(__FreeBSD__) || defined(__OpenBSD__) int wanec_ioctl(void *sc, void *data); #elif defined(__LINUX__) -int wanec_ioctl(unsigned int cmd, void *data); +WAN_IOCTL_RET_TYPE wanec_ioctl(unsigned int cmd, void *data); #endif int wan_ec_write_internal_dword(wan_ec_dev_t *ec_dev, u32 addr1, u32 data); @@ -1500,7 +1500,7 @@ static int wanec_api_playout(wan_ec_dev_t *ec_dev, wan_ec_api_t *ec_api) #if defined(__FreeBSD__) || defined(__OpenBSD__) int wanec_ioctl(void *sc, void *data) #elif defined(__LINUX__) -int wanec_ioctl(unsigned int cmd, void *data) +WAN_IOCTL_RET_TYPE wanec_ioctl(unsigned int cmd, void *data) #elif defined(__WINDOWS__) int wanec_ioctl(void *data) #endif @@ -1508,7 +1508,7 @@ int wanec_ioctl(void *data) wan_ec_api_t *ec_api = NULL; wan_ec_t *ec = NULL; wan_ec_dev_t *ec_dev = NULL; - int err = 0; + WAN_IOCTL_RET_TYPE err = 0; wan_smp_flag_t flags; WAN_DEBUG_FUNC_START; diff --git a/rpmspec/wanpipe-mod.rpmspec b/rpmspec/wanpipe-mod.rpmspec index c434671..3361214 100644 --- a/rpmspec/wanpipe-mod.rpmspec +++ b/rpmspec/wanpipe-mod.rpmspec @@ -1,6 +1,6 @@ %define WANPIPE_VER wanpipe-modules %define name %{WANPIPE_VER} -%define version 3.5.18 +%define version 3.5.19 %define release 0 %define serial 1 %define MODULES_DIR /lib/modules @@ -52,6 +52,30 @@ echo "Wanpipe Modules located in %{MODULES_DIR}/%{KVERSION}" %changelog +* Fri Mar 1 2011 Nenad Corbic - 3.5.19 +================================================================== + +- Fixed scripts for Ubuntu +- TDM API updated Tone Event API to include tone type + DTMF, FAX_1100, FAX_2100, FAX_2100_WSPR +- Fixes for latest 2.6.36 linux kernel +- Fixes for TTY Driver for 2.6.32 linux kernel +- BRI default idle set to 0xFF so it does not interfere + with multi-port mode. +- BRI NT & TE activation/deactivation logic update. +- Dahdi Yellow alarm reporting fix + Wanpipe driver did not report yellow alarms properly to dahdi +- T1 Automatic AIS on LOS option now optional + Previoulsy the T1 code enabled automatic AIS on LOS by default. + This is now an option TE_AIS_AUTO_ON_LOS=YES|NO + Default behaviour is to send Yellow alarm on link down. +- Fixed a TE1 startup race condition bug. + It was possible for T1/E1 interrupt to occour before + configuration was completel +- Fixed wanpipe.spec for dahdi RPM build +- Added serial clock recovery feature + + * Fri Nov 22 2010 Nenad Corbic - 3.5.18 ================================================================== diff --git a/rpmspec/wanpipe-util.rpmspec b/rpmspec/wanpipe-util.rpmspec index 3f699c0..93d70ac 100644 --- a/rpmspec/wanpipe-util.rpmspec +++ b/rpmspec/wanpipe-util.rpmspec @@ -1,7 +1,7 @@ %define KERNEL_VERSION %{?kern_ver} %define WANPIPE_VER wanpipe-util %define name %{WANPIPE_VER} -%define version 3.5.18 +%define version 3.5.19 %define release 0 %define serial 1 %define ETC_DIR /etc @@ -329,6 +329,30 @@ enable_smg_log; %changelog +* Fri Mar 1 2011 Nenad Corbic - 3.5.19 +================================================================== + +- Fixed scripts for Ubuntu +- TDM API updated Tone Event API to include tone type + DTMF, FAX_1100, FAX_2100, FAX_2100_WSPR +- Fixes for latest 2.6.36 linux kernel +- Fixes for TTY Driver for 2.6.32 linux kernel +- BRI default idle set to 0xFF so it does not interfere + with multi-port mode. +- BRI NT & TE activation/deactivation logic update. +- Dahdi Yellow alarm reporting fix + Wanpipe driver did not report yellow alarms properly to dahdi +- T1 Automatic AIS on LOS option now optional + Previoulsy the T1 code enabled automatic AIS on LOS by default. + This is now an option TE_AIS_AUTO_ON_LOS=YES|NO + Default behaviour is to send Yellow alarm on link down. +- Fixed a TE1 startup race condition bug. + It was possible for T1/E1 interrupt to occour before + configuration was completel +- Fixed wanpipe.spec for dahdi RPM build +- Added serial clock recovery feature + + * Fri Nov 22 2010 Nenad Corbic - 3.5.18 ================================================================== diff --git a/rpmspec/wanpipe.rpmspec b/rpmspec/wanpipe.rpmspec index 5857994..b4e957b 100644 --- a/rpmspec/wanpipe.rpmspec +++ b/rpmspec/wanpipe.rpmspec @@ -1,7 +1,7 @@ %define KERNEL_VERSION %{?kern_ver} %define WANPIPE_VER wanpipe %define name %{WANPIPE_VER} -%define version 3.5.18 +%define version 3.5.19 %define release 0 %define serial 1 %define UTILS_DIR /usr/sbin @@ -256,6 +256,30 @@ install_init; %changelog +* Fri Mar 1 2011 Nenad Corbic - 3.5.19 +================================================================== + +- Fixed scripts for Ubuntu +- TDM API updated Tone Event API to include tone type + DTMF, FAX_1100, FAX_2100, FAX_2100_WSPR +- Fixes for latest 2.6.36 linux kernel +- Fixes for TTY Driver for 2.6.32 linux kernel +- BRI default idle set to 0xFF so it does not interfere + with multi-port mode. +- BRI NT & TE activation/deactivation logic update. +- Dahdi Yellow alarm reporting fix + Wanpipe driver did not report yellow alarms properly to dahdi +- T1 Automatic AIS on LOS option now optional + Previoulsy the T1 code enabled automatic AIS on LOS by default. + This is now an option TE_AIS_AUTO_ON_LOS=YES|NO + Default behaviour is to send Yellow alarm on link down. +- Fixed a TE1 startup race condition bug. + It was possible for T1/E1 interrupt to occour before + configuration was completel +- Fixed wanpipe.spec for dahdi RPM build +- Added serial clock recovery feature + + * Fri Nov 22 2010 Nenad Corbic - 3.5.18 ================================================================== diff --git a/samples/wanrouter b/samples/wanrouter index ee54808..6f52bb1 100644 --- a/samples/wanrouter +++ b/samples/wanrouter @@ -2208,7 +2208,7 @@ init_global_params() { if [ $OSYSTEM = "Linux" ]; then - ROUTER_VERSION=3.5.18 + ROUTER_VERSION=3.5.19 IFCONFIG_LIST=ifconfig MODULE_STAT=lsmod WAN_DRIVERS="wanpipe" diff --git a/scripts/Compile.sh b/scripts/Compile.sh index c528347..acebf4d 100644 --- a/scripts/Compile.sh +++ b/scripts/Compile.sh @@ -1,5 +1,5 @@ #!/bin/sh -make CFLAGS=" -Wp,-MD,.wanpipe.o.d -nostdinc -iwithprefix include -D__LINUX__ -Dlinux -D__KERNEL__ -I/usr/include/wanpipe -I/lib/modules/2.6.18-194.11.1.el5/build/include -DMODULE -DAF_WANPIPE_2612_FORCE_UPDATE -DWANPIPE_MOD_266_FORCE_UPDATE -m32 -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Wstrict-prototypes -Wundef -Werror-implicit-function-declaration -fno-delete-null-pointer-checks -fwrapv -Os -pipe -msoft-float -fno-builtin-sprintf -fno-builtin-log2 -fno-builtin-puts -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -mtune=generic -mregparm=3 -ffreestanding -I/usr/include/wanpipe -I/lib/modules/2.6.18-194.11.1.el5/build/include/asm-i386/mach-generic -I/usr/include/wanpipe -I/lib/modules/2.6.18-194.11.1.el5/build/include/asm-i386/mach-default -fomit-frame-pointer -g -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign -D__KERNEL__ -Iinclude -include include/linux/autoconf.h -I/usr/src/dahdi" PROTOCOL_DEFINES="-DCONFIG_PRODUCT_WANPIPE_BASE -DCONFIG_PRODUCT_WANPIPE_TDM_VOICE -DCONFIG_PRODUCT_WANPIPE_TDM_VOICE_DCHAN -DCONFIG_PRODUCT_WANPIPE_TDM_VOICE_DCHAN_ZAPTEL -DDAHDI_ISSUES -DCONFIG_PRODUCT_WANPIPE_AFT -DCONFIG_PRODUCT_WANPIPE_AFT_CORE -DCONFIG_PRODUCT_WANPIPE_AFT_TE1 -DCONFIG_PRODUCT_WANPIPE_AFT_56K -DCONFIG_PRODUCT_WANPIPE_AFT_RM -DCONFIG_PRODUCT_WANPIPE_CODEC_SLINEAR_LAW -DCONFIG_PRODUCT_WANPIPE_AFT_BRI -DCONFIG_PRODUCT_WANPIPE_AFT_SERIAL -DCONFIG_PRODUCT_WANPIPE_AFT_A600 -DCONFIG_PRODUCT_WANPIPE_AFT_B601 -DCONFIG_PRODUCT_WANPIPE_AFT_B800 -DCONFIG_PRODUCT_WANPIPE_AFT_A700 -DCONFIG_PRODUCT_WANPIPE_USB -DWANPIPE_USE_I_PRIVATE -DCONFIG_WANPIPE_HWEC " +make CFLAGS=" -Wp,-MD,.wanpipe.o.d -nostdinc -iwithprefix include -D__LINUX__ -Dlinux -D__KERNEL__ -I/usr/include/wanpipe -I/lib/modules/2.6.18-194.11.1.el5/build/include -DMODULE -DAF_WANPIPE_2612_FORCE_UPDATE -DWANPIPE_MOD_266_FORCE_UPDATE -m32 -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Wstrict-prototypes -Wundef -Werror-implicit-function-declaration -fno-delete-null-pointer-checks -fwrapv -Os -pipe -msoft-float -fno-builtin-sprintf -fno-builtin-log2 -fno-builtin-puts -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -mtune=generic -mregparm=3 -ffreestanding -I/usr/include/wanpipe -I/lib/modules/2.6.18-194.11.1.el5/build/include/asm-i386/mach-generic -I/usr/include/wanpipe -I/lib/modules/2.6.18-194.11.1.el5/build/include/asm-i386/mach-default -fomit-frame-pointer -g -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign -D__KERNEL__ -Iinclude -include include/linux/autoconf.h -I/usr/src/dahdi" PROTOCOL_DEFINES="-DCONFIG_PRODUCT_WANPIPE_BASE -DCONFIG_PRODUCT_WANPIPE_TDM_VOICE -DCONFIG_PRODUCT_WANPIPE_TDM_VOICE_DCHAN -DCONFIG_PRODUCT_WANPIPE_TDM_VOICE_DCHAN_ZAPTEL -DDAHDI_ISSUES -DCONFIG_PRODUCT_WANPIPE_FR -DCONFIG_PRODUCT_WANPIPE_CHDLC -DCONFIG_PRODUCT_WANPIPE_PPP -DCONFIG_PRODUCT_WANPIPE_X25 -DCONFIG_PRODUCT_WANPIPE_ADSL -DCONFIG_PRODUCT_WANPIPE_LIP_ATM -DCONFIG_PRODUCT_WANPIPE_ATM -DCONFIG_PRODUCT_WANPIPE_MULTPROT -DCONFIG_PRODUCT_WANPIPE_AFT -DCONFIG_PRODUCT_WANPIPE_AFT_CORE -DCONFIG_PRODUCT_WANPIPE_AFT_TE1 -DCONFIG_PRODUCT_WANPIPE_AFT_56K -DCONFIG_PRODUCT_WANPIPE_AFT_RM -DCONFIG_PRODUCT_WANPIPE_CODEC_SLINEAR_LAW -DCONFIG_PRODUCT_WANPIPE_AFT_BRI -DCONFIG_PRODUCT_WANPIPE_AFT_SERIAL -DCONFIG_PRODUCT_WANPIPE_AFT_A600 -DCONFIG_PRODUCT_WANPIPE_AFT_B601 -DCONFIG_PRODUCT_WANPIPE_AFT_B800 -DCONFIG_PRODUCT_WANPIPE_AFT_A700 -DCONFIG_PRODUCT_WANPIPE_USB -DCONFIG_PRODUCT_WANPIPE_AFT_TE3 -DWANPIPE_USE_I_PRIVATE -DCONFIG_WANPIPE_HWEC " diff --git a/ssmg/sangoma_mgd.trunk/.svn/all-wcprops b/ssmg/sangoma_mgd.trunk/.svn/all-wcprops index f3220b1..9a7e270 100644 --- a/ssmg/sangoma_mgd.trunk/.svn/all-wcprops +++ b/ssmg/sangoma_mgd.trunk/.svn/all-wcprops @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 35 -/svn/sangoma_mgd/!svn/ver/284/trunk +/svn/sangoma_mgd/!svn/ver/285/trunk END sigboost.h K 25 @@ -9,11 +9,11 @@ svn:wc:ra_dav:version-url V 46 /svn/sangoma_mgd/!svn/ver/265/trunk/sigboost.h END -sound.raw +switch_buffer.h K 25 svn:wc:ra_dav:version-url -V 43 -/svn/sangoma_mgd/!svn/ver/1/trunk/sound.raw +V 49 +/svn/sangoma_mgd/!svn/ver/1/trunk/switch_buffer.h END sangoma_mgd.conf.sample K 25 @@ -21,11 +21,11 @@ svn:wc:ra_dav:version-url V 59 /svn/sangoma_mgd/!svn/ver/253/trunk/sangoma_mgd.conf.sample END -switch_buffer.h +sound.raw K 25 svn:wc:ra_dav:version-url -V 49 -/svn/sangoma_mgd/!svn/ver/1/trunk/switch_buffer.h +V 43 +/svn/sangoma_mgd/!svn/ver/1/trunk/sound.raw END safe_sangoma K 25 @@ -39,23 +39,17 @@ svn:wc:ra_dav:version-url V 48 /svn/sangoma_mgd/!svn/ver/1/trunk/callgettest.sh END -smg_capabilities.h -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/sangoma_mgd/!svn/ver/186/trunk/smg_capabilities.h -END ss7box K 25 svn:wc:ra_dav:version-url V 40 /svn/sangoma_mgd/!svn/ver/1/trunk/ss7box END -re-sync.sh +smg_capabilities.h K 25 svn:wc:ra_dav:version-url -V 45 -/svn/sangoma_mgd/!svn/ver/20/trunk/re-sync.sh +V 54 +/svn/sangoma_mgd/!svn/ver/186/trunk/smg_capabilities.h END call_signal.c K 25 @@ -63,24 +57,30 @@ svn:wc:ra_dav:version-url V 49 /svn/sangoma_mgd/!svn/ver/275/trunk/call_signal.c END +re-sync.sh +K 25 +svn:wc:ra_dav:version-url +V 45 +/svn/sangoma_mgd/!svn/ver/20/trunk/re-sync.sh +END sangoma_mgd_logger.c K 25 svn:wc:ra_dav:version-url V 56 /svn/sangoma_mgd/!svn/ver/189/trunk/sangoma_mgd_logger.c END -sangoma_mgd.c -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/sangoma_mgd/!svn/ver/284/trunk/sangoma_mgd.c -END woomera.conf K 25 svn:wc:ra_dav:version-url V 46 /svn/sangoma_mgd/!svn/ver/1/trunk/woomera.conf END +sangoma_mgd.c +K 25 +svn:wc:ra_dav:version-url +V 49 +/svn/sangoma_mgd/!svn/ver/285/trunk/sangoma_mgd.c +END call_signal.h K 25 svn:wc:ra_dav:version-url diff --git a/ssmg/sangoma_mgd.trunk/.svn/entries b/ssmg/sangoma_mgd.trunk/.svn/entries index 58d0498..2d4938f 100644 --- a/ssmg/sangoma_mgd.trunk/.svn/entries +++ b/ssmg/sangoma_mgd.trunk/.svn/entries @@ -1,14 +1,14 @@ 8 dir -284 +285 https://www.sangomapbx.com/svn/sangoma_mgd/trunk https://www.sangomapbx.com/svn/sangoma_mgd -2010-09-22T19:43:33.680100Z -284 +2011-01-05T18:03:36.313958Z +285 ncorbic @@ -209,18 +209,6 @@ file 189 davidy -sangoma_mgd_memdbg.h -file - - - - -2009-08-25T20:44:42.000000Z -81957c6e3d9a6caa2e223e954c15c49c -2008-02-06T22:23:25.673829Z -62 -ncorbic - Makefile file @@ -233,6 +221,18 @@ a4074b881c589fbfcd007ec9705ed64b 261 ncorbic +sangoma_mgd_memdbg.h +file + + + + +2009-08-25T20:44:42.000000Z +81957c6e3d9a6caa2e223e954c15c49c +2008-02-06T22:23:25.673829Z +62 +ncorbic + sound.raw file @@ -283,6 +283,18 @@ e37c1c63f8594ae025098e6510327ee0 189 davidy +sangoma_mgd.c +file + + + + +2011-01-05T15:48:15.000000Z +0991d7b5a02ed976bfd99a1e54dfec69 +2011-01-05T18:03:36.313958Z +285 +ncorbic + woomera.conf file @@ -295,18 +307,6 @@ file 1 root -sangoma_mgd.c -file - - - - -2010-09-22T18:15:14.000000Z -e036c2ad2938ac56202abcca8dafe730 -2010-09-22T19:43:33.680100Z -284 -ncorbic - list.h file diff --git a/ssmg/sangoma_mgd.trunk/.svn/text-base/sangoma_mgd.c.svn-base b/ssmg/sangoma_mgd.trunk/.svn/text-base/sangoma_mgd.c.svn-base index bf648f4..e27044b 100644 --- a/ssmg/sangoma_mgd.trunk/.svn/text-base/sangoma_mgd.c.svn-base +++ b/ssmg/sangoma_mgd.trunk/.svn/text-base/sangoma_mgd.c.svn-base @@ -3646,7 +3646,7 @@ static void interpret_command(struct woomera_interface *woomera, struct woomera_ WOOMERA_LINE_SEPERATOR, cause, WOOMERA_RECORD_SEPERATOR); - socket_printf(woomera->socket, "400 Woomera cmd without uniquie id%s" + socket_printf(woomera->socket, "400 Woomera cmd without uniquie id%s", WOOMERA_RECORD_SEPERATOR); log_printf(SMG_LOG_DEBUG_CALL,server.log,"Woomera RX Event (%s) without unique id!\n",wmsg->command); @@ -3712,7 +3712,7 @@ static void interpret_command(struct woomera_interface *woomera, struct woomera_ WOOMERA_LINE_SEPERATOR, cause, WOOMERA_RECORD_SEPERATOR); - socket_printf(woomera->socket, "404 Session not found%s" + socket_printf(woomera->socket, "404 Session not found%s", WOOMERA_RECORD_SEPERATOR); @@ -3772,7 +3772,7 @@ static void interpret_command(struct woomera_interface *woomera, struct woomera_ cause, WOOMERA_RECORD_SEPERATOR); - socket_printf(woomera->socket, "404 Hangup on multiple session%s" + socket_printf(woomera->socket, "404 Hangup on multiple session%s", WOOMERA_RECORD_SEPERATOR); woomera_set_flag(woomera, WFLAG_HANGUP); @@ -3815,7 +3815,7 @@ static void interpret_command(struct woomera_interface *woomera, struct woomera_ cause, WOOMERA_RECORD_SEPERATOR); - socket_printf(woomera->socket, "404 Session Mis-match%s" + socket_printf(woomera->socket, "404 Session Mis-match%s", WOOMERA_RECORD_SEPERATOR); woomera_set_flag(woomera, WFLAG_HANGUP); return; diff --git a/ssmg/sangoma_mgd.trunk/app/.svn/entries b/ssmg/sangoma_mgd.trunk/app/.svn/entries index e26d759..50144e9 100644 --- a/ssmg/sangoma_mgd.trunk/app/.svn/entries +++ b/ssmg/sangoma_mgd.trunk/app/.svn/entries @@ -1,7 +1,7 @@ 8 dir -284 +285 https://www.sangomapbx.com/svn/sangoma_mgd/trunk/app https://www.sangomapbx.com/svn/sangoma_mgd diff --git a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.ast14_check b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.ast14_check index 0cfbf08..573541a 100644 --- a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.ast14_check +++ b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.ast14_check @@ -1 +1 @@ -2 +0 diff --git a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.ast18_check b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.ast18_check new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.ast18_check @@ -0,0 +1 @@ +1 diff --git a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.ast_src_check b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.ast_src_check index d00491f..0cfbf08 100644 --- a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.ast_src_check +++ b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.ast_src_check @@ -1 +1 @@ -1 +2 diff --git a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.log b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.log index ec1fad8..5c0297c 100644 --- a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.log +++ b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.log @@ -684,3 +684,1105 @@ echo 0 .ast14_check grep -c 1.6 /usr/include/asterisk/version.h .ast16_check 1.4 /usr/include/asterisk/version.h .ast14_check grep -c 1.4 /usr/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +echo 0 .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +echo 0 .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/include/asterisk/.version .ast18_check +echo 0 .ast18_check +1.6 /usr/include/asterisk/.version .ast16_check +echo 0 .ast16_check +1.4 /usr/include/asterisk/.version .ast14_check +echo 0 .ast14_check +1.6 /usr/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/include/asterisk/version.h .ast16_check +1.4 /usr/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/include/asterisk/.version .ast18_check +echo 0 .ast18_check +1.6 /usr/include/asterisk/.version .ast16_check +echo 0 .ast16_check +1.4 /usr/include/asterisk/.version .ast14_check +echo 0 .ast14_check +1.6 /usr/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/include/asterisk/version.h .ast16_check +1.4 /usr/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/include/asterisk/.version .ast18_check +echo 0 .ast18_check +1.6 /usr/include/asterisk/.version .ast16_check +echo 0 .ast16_check +1.4 /usr/include/asterisk/.version .ast14_check +echo 0 .ast14_check +1.6 /usr/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/include/asterisk/version.h .ast16_check +1.4 /usr/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/include/asterisk/.version .ast18_check +echo 0 .ast18_check +1.6 /usr/include/asterisk/.version .ast16_check +echo 0 .ast16_check +1.4 /usr/include/asterisk/.version .ast14_check +echo 0 .ast14_check +1.6 /usr/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/include/asterisk/version.h .ast16_check +1.4 /usr/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/include/asterisk/.version .ast18_check +echo 0 .ast18_check +1.6 /usr/include/asterisk/.version .ast16_check +echo 0 .ast16_check +1.4 /usr/include/asterisk/.version .ast14_check +echo 0 .ast14_check +1.6 /usr/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/include/asterisk/version.h .ast16_check +1.4 /usr/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +grep -c AST_CONTROL_SRC /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/frame.h .ast_src_check +opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +grep -c opbx_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .opbx_cli_entry_check +cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +grep -c cw_cli_entry /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/cli.h .cw_cli_entry_check +1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +grep -c 1.8 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast18_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/.version .ast14_check +1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +grep -c 1.6 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast16_check +1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check +grep -c 1.4 /usr/src/ast1.8/asterisk-1.8.1.1/include/asterisk/version.h .ast14_check diff --git a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.pbxdir b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.pbxdir index b2df86a..c0ba97d 100644 --- a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.pbxdir +++ b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.pbxdir @@ -1 +1 @@ -/usr/include/asterisk +/usr/src/ast1.8/asterisk-1.8.1.1 diff --git a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/all-wcprops b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/all-wcprops index 507647c..2351d27 100644 --- a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/all-wcprops +++ b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/all-wcprops @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 36 -/svn/chan_woomera/!svn/ver/148/trunk +/svn/chan_woomera/!svn/ver/154/trunk END chan_woomera.c K 25 svn:wc:ra_dav:version-url V 51 -/svn/chan_woomera/!svn/ver/148/trunk/chan_woomera.c +/svn/chan_woomera/!svn/ver/154/trunk/chan_woomera.c END g711.h K 25 @@ -31,7 +31,7 @@ Makefile K 25 svn:wc:ra_dav:version-url V 45 -/svn/chan_woomera/!svn/ver/131/trunk/Makefile +/svn/chan_woomera/!svn/ver/150/trunk/Makefile END README K 25 diff --git a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/entries b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/entries index 598bcc0..6c56981 100644 --- a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/entries +++ b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/entries @@ -1,15 +1,15 @@ 8 dir -148 +154 https://www.sangomapbx.com/svn/chan_woomera/trunk https://www.sangomapbx.com/svn/chan_woomera -2010-07-15T19:33:27.964369Z -148 -konrad +2011-02-17T17:17:11.398715Z +154 +ncorbic svn:special svn:externals svn:needs-lock @@ -32,11 +32,11 @@ file -2010-11-16T17:51:42.000000Z -780e2d78fc4e2735f2eafb56439ccd15 -2010-07-15T19:33:27.964369Z -148 -konrad +2011-02-17T17:07:36.000000Z +2978c82f9a91fe17cd4e5179b8209c73 +2011-02-17T17:17:11.398715Z +154 +ncorbic g711.h file @@ -81,10 +81,10 @@ file -2009-12-22T16:06:01.000000Z -e7faa935e11b7d4a3f56e343db47befd -2009-11-18T20:20:28.099174Z -131 +2010-12-31T19:31:43.000000Z +60e2cd9390bed91dc3999d1293edc50a +2011-01-04T21:35:42.583508Z +150 ncorbic README diff --git a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/text-base/Makefile.svn-base b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/text-base/Makefile.svn-base index 3257be8..1a47667 100644 --- a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/text-base/Makefile.svn-base +++ b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/text-base/Makefile.svn-base @@ -89,6 +89,10 @@ ifneq (,$(wildcard $(INCDIR)/../callweaver.h)) else +DUMMY:=$(shell ./check_for.sh 1.8 $(PBXDIR)/.version .ast18_check;) +ifneq (0,$(shell cat .ast18_check)) + PBXFLAGS_EXTRA+=-DAST16 -DAST18 +endif #Check for Asterisk 1.6 DUMMY:=$(shell ./check_for.sh 1.6 $(PBXDIR)/.version .ast16_check;) ifneq (0,$(shell cat .ast16_check)) diff --git a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/text-base/chan_woomera.c.svn-base b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/text-base/chan_woomera.c.svn-base index 16b2252..bc20a14 100644 --- a/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/text-base/chan_woomera.c.svn-base +++ b/ssmg/sangoma_mgd.trunk/chan_woomera.trunk/.svn/text-base/chan_woomera.c.svn-base @@ -15,6 +15,10 @@ * the GNU General Public License * ============================================= * + * v1.72 Nenad Corbic + * Jan 4 2011 + * Updated for Asterisk 1.8 + * * v1.71 Konrad Hammel * Jul 15 2010 * Added "cid_pres" option to woomera.conf to hard code @@ -325,6 +329,26 @@ * from CLI. */ +#if defined(AST18) +#define W_SUBCLASS_INT subclass.integer +#define W_SUBCLASS_CODEC subclass.codec +#define W_CID_NAME caller.id.name.str +#define W_CID_NAME_PRES caller.id.name.presentation +#define W_CID_NUM caller.id.number.str +#define W_CID_NUM_PRES caller.id.number.presentation +#define W_CID_FROM_RDNIS redirecting.from.number.str +#define W_CID_SET_FROM_RDNIS(self,_value) self->redirecting.from.number.str = _value; self->redirecting.from.number.valid=1 +#else +#define W_SUBCLASS_CODEC subclass +#define W_SUBCLASS_INT subclass +#define W_CID_NAME cid.cid_name +#define W_CID_NAME_PRES cid.cid_pres +#define W_CID_NUM cid.cid_num +#define W_CID_NUM_PRES cid.cid_pres +#define W_CID_FROM_RDNIS cid.cid_rdnis +#define W_CID_SET_FROM_RDNIS(self,_value) self->cid.cid_rdnis = _value +#endif + #if !defined(CALLWEAVER) #include "asterisk.h" #endif @@ -351,12 +375,16 @@ #ifndef CALLWEAVER - #include "asterisk.h" -#include "asterisk/sched.h" -#include "asterisk/astobj.h" #include "asterisk/lock.h" -#if defined(AST16) +#include "asterisk/channel.h" +#include "asterisk/config.h" +#include "asterisk/module.h" +#include "asterisk/astobj.h" +#include "asterisk/sched.h" + + +#if defined(AST16) #include "asterisk/linkedlists.h" #include "asterisk/channel.h" #endif @@ -377,7 +405,7 @@ #include "asterisk/musiconhold.h" #include "asterisk/transcap.h" -ASTERISK_FILE_VERSION(__FILE__, "$Revision: 1.70 $") +ASTERISK_FILE_VERSION(__FILE__, "$Revision: 1.72 $") #else @@ -428,7 +456,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision: 1.70 $") #define CALLWEAVER_19 1 #endif -CALLWEAVER_FILE_VERSION(__FILE__, "$Revision: 1.70 $") +CALLWEAVER_FILE_VERSION(__FILE__, "$Revision: 1.72 $") #if defined(DSP_FEATURE_FAX_CNG_DETECT) #undef DSP_FEATURE_FAX_DETECT @@ -735,7 +763,7 @@ CALLWEAVER_FILE_VERSION(__FILE__, "$Revision: 1.70 $") extern int option_verbose; -#define WOOMERA_VERSION "v1.69" +#define WOOMERA_VERSION "v1.72" #ifndef WOOMERA_CHAN_NAME #define WOOMERA_CHAN_NAME "SS7" #endif @@ -1234,7 +1262,13 @@ int reload(void); * You may or may not need all of these methods, remove any unnecessary functions/protos/mappings as needed. * */ + +#if defined (AST18) +static struct ast_channel *tech_requester(const char *type, format_t format, const struct ast_channel *requestor, void *data, int *cause); +#else static struct ast_channel *tech_requester(const char *type, int format, void *data, int *cause); +#endif + static int tech_send_digit(struct ast_channel *self, char digit); #if defined (AST14) || defined (AST16) static int tech_digit_end(struct ast_channel *ast, char digit, unsigned int duration); @@ -2243,8 +2277,8 @@ static int tech_init(private_object *tech_pvt, woomera_profile *profile, int fla tech_pvt->coding = profile->coding; self->nativeformats = tech_pvt->coding; - self->writeformat = self->rawwriteformat = self->readformat = tech_pvt->coding; - tech_pvt->frame.subclass = tech_pvt->coding; + self->writeformat = self->rawwriteformat = self->rawreadformat = self->readformat = tech_pvt->coding; + tech_pvt->frame.W_SUBCLASS_CODEC = tech_pvt->coding; ast_clear_flag(tech_pvt, TFLAG_CONFIRM_ANSWER); ast_clear_flag(tech_pvt, TFLAG_CONFIRM_ANSWER_ENABLED); @@ -4008,9 +4042,15 @@ static int connect_woomera(int *new_socket, woomera_profile *profile, int flags) } if (globals.debug > 2) { +#ifdef AST18 + ast_log(LOG_NOTICE, "Setting RAW Format to %s %i (p%llu:u%llu:a%llu)\n", + audio_format, profile->coding, + AST_FORMAT_SLINEAR,AST_FORMAT_ULAW,AST_FORMAT_ALAW); +#else ast_log(LOG_NOTICE, "Setting RAW Format to %s %i (p%i:u%i:a%i)\n", audio_format, profile->coding, AST_FORMAT_SLINEAR,AST_FORMAT_ULAW,AST_FORMAT_ALAW); +#endif } } } @@ -4046,7 +4086,10 @@ static struct ast_channel *woomera_new(const char *type, int format, } memset(tech_pvt, 0, sizeof(private_object)); -#if defined (AST14) || defined (AST16) +#if defined(AST18) + //chan = ast_channel_alloc(0, state, i->cid_num, i->cid_name, i->accountcode, i->exten, i->context, linkedid, i->amaflags, "DAHDI/%s", ast_str_buffer(chan_name)); + chan = ast_channel_alloc(0, AST_STATE_DOWN, "", "", "", "", "", "", 0, "%s", name); +#elif defined (AST14) || defined (AST16) chan = ast_channel_alloc(0, AST_STATE_DOWN, "", "", "", "", "", 0, "%s", name); #else chan = ast_channel_alloc(1); @@ -4058,7 +4101,7 @@ static struct ast_channel *woomera_new(const char *type, int format, snprintf(chan->name, sizeof(chan->name), "%s/%s-%04x", chan->type, (char *)data, rand() & 0xffff); #endif - chan->writeformat = chan->rawwriteformat = chan->readformat = WFORMAT; + chan->writeformat = chan->rawwriteformat = chan->rawreadformat = chan->readformat = WFORMAT; chan->_state = AST_STATE_DOWN; chan->_softhangup = 0; @@ -4075,14 +4118,14 @@ static struct ast_channel *woomera_new(const char *type, int format, ast_clear_flag(chan, AST_FLAGS_ALL); memset(&tech_pvt->frame, 0, sizeof(tech_pvt->frame)); tech_pvt->frame.frametype = AST_FRAME_VOICE; - tech_pvt->frame.subclass = WFORMAT; + tech_pvt->frame.W_SUBCLASS_CODEC = WFORMAT; tech_pvt->frame.offset = AST_FRIENDLY_OFFSET; tech_pvt->owner = chan; chan->nativeformats = tech_pvt->coding; - chan->writeformat = chan->rawwriteformat = chan->readformat = tech_pvt->coding; - tech_pvt->frame.subclass = tech_pvt->coding; + chan->writeformat = chan->rawwriteformat = chan->rawreadformat = chan->readformat = tech_pvt->coding; + tech_pvt->frame.W_SUBCLASS_CODEC = tech_pvt->coding; tech_pvt->pri_cause=AST_CAUSE_NORMAL_CLEARING; @@ -4115,7 +4158,11 @@ static struct ast_channel *woomera_new(const char *type, int format, /*--- tech_requester: parse 'data' a url-like destination string, allocate a channel and a private structure * and return the newly-setup channel. */ +#if defined (AST18) +static struct ast_channel *tech_requester(const char *type, format_t format, const struct ast_channel *requestor, void *data, int *cause) +#else static struct ast_channel *tech_requester(const char *type, int format, void *data, int *cause) +#endif { struct ast_channel *chan = NULL; @@ -4225,23 +4272,23 @@ static int tech_call(struct ast_channel *self, char *dest, int timeout) } if (globals.debug > 2) { ast_log(LOG_NOTICE, "TECH CALL %s (%s <%s>) pres=0x%02X dest=%s\n", - self->name, self->cid.cid_name, - self->cid.cid_num, - self->cid.cid_pres, + self->name, self->W_CID_NAME, + self->W_CID_NUM, + self->W_CID_NUM_PRES, dest); } - if (self->cid.cid_name) { - strncpy(tech_pvt->cid_name, self->cid.cid_name, sizeof(tech_pvt->cid_name)-1); + if (self->W_CID_NAME) { + strncpy(tech_pvt->cid_name, self->W_CID_NAME, sizeof(tech_pvt->cid_name)-1); } - if (self->cid.cid_num) { - strncpy(tech_pvt->cid_num, self->cid.cid_num, sizeof(tech_pvt->cid_num)-1); + if (self->W_CID_NUM) { + strncpy(tech_pvt->cid_num, self->W_CID_NUM, sizeof(tech_pvt->cid_num)-1); } - tech_pvt->cid_pres = self->cid.cid_pres; + tech_pvt->cid_pres = self->W_CID_NUM_PRES; - if (self->cid.cid_rdnis) { - tech_pvt->cid_rdnis=strdup(self->cid.cid_rdnis); + if (self->W_CID_FROM_RDNIS) { + tech_pvt->cid_rdnis=strdup(self->W_CID_FROM_RDNIS); } if ((workspace = ast_strdupa(dest))) { @@ -4304,7 +4351,7 @@ static int tech_call(struct ast_channel *self, char *dest, int timeout) if (profile->cid_pres.pres) { tech_pvt->cid_pres = profile->cid_pres.val; ast_log(LOG_DEBUG, "CID presentation override : was %d, now %d\n", - self->cid.cid_pres, + self->W_CID_NUM_PRES, tech_pvt->cid_pres); } @@ -4544,7 +4591,7 @@ static void handle_fax(private_object *tech_pvt) #else const char *target_context = ast_strlen_zero(owner->macrocontext) ? owner->context : owner->macrocontext; #endif - if (ast_exists_extension(owner, target_context, "fax", 1, owner->cid.cid_num)) { + if (ast_exists_extension(owner, target_context, "fax", 1, owner->W_CID_NUM)) { if (option_verbose > 2 && woomera_profile_verbose(tech_pvt->profile) > 2) { ast_verbose(VERBOSE_PREFIX_3 "Redirecting %s to fax extension\n", owner->name); } @@ -4594,6 +4641,14 @@ tech_read_again: return NULL; } + +#if defined(AST18) + /* NC: Kludge Had to do this for Ast1.8 the nativeformats */ + if (self->nativeformats != tech_pvt->coding) { + self->nativeformats = tech_pvt->coding; + } +#endif + /* Used for adding sequence numbers to udp packets. should only be used for debugging */ if (tech_pvt->profile->udp_seq){ @@ -4647,7 +4702,7 @@ tech_read_again: tech_pvt->frame.frametype = AST_FRAME_VOICE; - tech_pvt->frame.subclass = tech_pvt->coding; + tech_pvt->frame.W_SUBCLASS_CODEC = tech_pvt->coding; tech_pvt->frame.offset = AST_FRIENDLY_OFFSET; tech_pvt->frame.datalen = res; tech_pvt->frame.samples = res; @@ -4678,7 +4733,7 @@ tech_read_again: } ast_mutex_unlock(&tech_pvt->iolock); if(answer){ - struct ast_frame answer_frame = {AST_FRAME_CONTROL, AST_CONTROL_ANSWER}; + struct ast_frame answer_frame = {AST_FRAME_CONTROL, .W_SUBCLASS_INT = AST_CONTROL_ANSWER}; struct ast_channel *owner = tech_get_owner(tech_pvt); ast_log(LOG_DEBUG, "Confirm answer on %s!\n", self->name); @@ -4698,13 +4753,13 @@ tech_read_again: } } } - if (f->subclass == 'f' && tech_pvt->faxdetect) { + if (f->W_SUBCLASS_INT == 'f' && tech_pvt->faxdetect) { handle_fax(tech_pvt); } if (answer == 0 && globals.debug > 2) { ast_log(LOG_NOTICE, "%s: Detected inband DTMF digit: %c\n", self->name, - f->subclass); + f->W_SUBCLASS_INT); } } //woomera_tx2ast_frm(tech_pvt, tech_pvt->frame.data, tech_pvt->frame.datalen); @@ -5087,7 +5142,7 @@ static int woomera_rbs_relay(struct private_object *ch0, struct private_object * if (ch0->profile->rbs_relay && ch1->profile->rbs_relay && ch0->rbs_frame.frametype == 99) { - tech_send_rbs(c1, ch0->rbs_frame.subclass); + tech_send_rbs(c1, ch0->rbs_frame.W_SUBCLASS_INT); ch0->rbs_frame.frametype=0; } @@ -5235,7 +5290,7 @@ static enum ast_bridge_result tech_bridge (struct ast_channel *c0, } } else { if (option_verbose > 10) { - ast_log(LOG_NOTICE, "woomera: Bridge Read Frame Control class:%d\n", f->subclass); + ast_log(LOG_NOTICE, "woomera: Bridge Read Frame Control class:%d\n", f->W_SUBCLASS_INT); } } @@ -5245,7 +5300,7 @@ static enum ast_bridge_result tech_bridge (struct ast_channel *c0, } if (f->frametype == AST_FRAME_DTMF) { - ast_log(LOG_NOTICE, "woomera: Bridge Read DTMF %d from %s\n", f->subclass, who->exten); + ast_log(LOG_NOTICE, "woomera: Bridge Read DTMF %d from %s\n", f->W_SUBCLASS_INT, who->exten); *fo = f; *rc = who; @@ -5376,6 +5431,13 @@ static int woomera_cli(int fd, int argc, char *argv[]) return 0; } + + /* After this point we need at least two arguments */ + if (argc <= 2) { + ast_cli(fd, "Usage: woomera