From 9f0462bca79159a405d91005fccb833b39258aa4 Mon Sep 17 00:00:00 2001 From: Max Khon Date: Sun, 28 Nov 2010 19:33:57 +0000 Subject: [PATCH] Add asterisk 1.8 port. Submitted by: Florian Smeets --- net/Makefile | 1 + net/asterisk/Makefile | 244 + net/asterisk/distinfo | 2 + net/asterisk/files/asterisk.sh.in | 34 + net/asterisk/files/codecnego-patch-Makefile | 219 + net/asterisk/files/dtmf_debug.diff | 226 + net/asterisk/files/ilbc_enable.diff | 7599 +++++++++++++++++ net/asterisk/files/nocodecnego-patch-Makefile | 228 + net/asterisk/files/patch-Makefile | 112 + net/asterisk/files/patch-Makefile.rules | 16 + net/asterisk/files/patch-agi::Makefile | 13 + .../files/patch-channels-chan_dahdi.c | 33 + net/asterisk/files/patch-channels::Makefile | 29 + net/asterisk/files/patch-channels::chan_sip.c | 11 + .../files/patch-channels__sip__include__sip.h | 11 + .../files/patch-channels_h323_Makefile.in | 11 + net/asterisk/files/patch-configure | 33 + .../files/patch-include::asterisk::utils.h | 13 + net/asterisk/files/patch-main::Makefile | 30 + net/asterisk/files/patch-main::db.c | 18 + net/asterisk/files/patch-main::frame.c | 14 + net/asterisk/files/patch-main::utils.c | 13 + net/asterisk/files/patch-main__lock.c | 13 + net/asterisk/files/patch-rtp_timeout | 25 + .../files/patch-suppress_log_dups.diff | 270 + .../files/rtp_force_dtmf-codecnego.diff | 86 + .../files/rtp_force_dtmf-nocodecnego.diff | 69 + net/asterisk/files/sip_force_callid.diff | 11 + net/asterisk/files/sip_set_auth.diff | 45 + net/asterisk/pkg-descr | 5 + net/asterisk/pkg-plist | 1616 ++++ net/asterisk10/Makefile | 244 + net/asterisk10/distinfo | 2 + net/asterisk10/files/asterisk.sh.in | 34 + net/asterisk10/files/codecnego-patch-Makefile | 219 + net/asterisk10/files/dtmf_debug.diff | 226 + net/asterisk10/files/ilbc_enable.diff | 7599 +++++++++++++++++ .../files/nocodecnego-patch-Makefile | 228 + net/asterisk10/files/patch-Makefile | 112 + net/asterisk10/files/patch-Makefile.rules | 16 + net/asterisk10/files/patch-agi::Makefile | 13 + .../files/patch-channels-chan_dahdi.c | 33 + net/asterisk10/files/patch-channels::Makefile | 29 + .../files/patch-channels::chan_sip.c | 11 + .../files/patch-channels__sip__include__sip.h | 11 + .../files/patch-channels_h323_Makefile.in | 11 + net/asterisk10/files/patch-configure | 33 + .../files/patch-include::asterisk::utils.h | 13 + net/asterisk10/files/patch-main::Makefile | 30 + net/asterisk10/files/patch-main::db.c | 18 + net/asterisk10/files/patch-main::frame.c | 14 + net/asterisk10/files/patch-main::utils.c | 13 + net/asterisk10/files/patch-main__lock.c | 13 + net/asterisk10/files/patch-rtp_timeout | 25 + .../files/patch-suppress_log_dups.diff | 270 + .../files/rtp_force_dtmf-codecnego.diff | 86 + .../files/rtp_force_dtmf-nocodecnego.diff | 69 + net/asterisk10/files/sip_force_callid.diff | 11 + net/asterisk10/files/sip_set_auth.diff | 45 + net/asterisk10/pkg-descr | 5 + net/asterisk10/pkg-plist | 1616 ++++ 61 files changed, 22099 insertions(+) create mode 100644 net/asterisk/Makefile create mode 100644 net/asterisk/distinfo create mode 100644 net/asterisk/files/asterisk.sh.in create mode 100644 net/asterisk/files/codecnego-patch-Makefile create mode 100644 net/asterisk/files/dtmf_debug.diff create mode 100644 net/asterisk/files/ilbc_enable.diff create mode 100644 net/asterisk/files/nocodecnego-patch-Makefile create mode 100644 net/asterisk/files/patch-Makefile create mode 100644 net/asterisk/files/patch-Makefile.rules create mode 100644 net/asterisk/files/patch-agi::Makefile create mode 100644 net/asterisk/files/patch-channels-chan_dahdi.c create mode 100644 net/asterisk/files/patch-channels::Makefile create mode 100644 net/asterisk/files/patch-channels::chan_sip.c create mode 100644 net/asterisk/files/patch-channels__sip__include__sip.h create mode 100644 net/asterisk/files/patch-channels_h323_Makefile.in create mode 100644 net/asterisk/files/patch-configure create mode 100644 net/asterisk/files/patch-include::asterisk::utils.h create mode 100644 net/asterisk/files/patch-main::Makefile create mode 100644 net/asterisk/files/patch-main::db.c create mode 100644 net/asterisk/files/patch-main::frame.c create mode 100644 net/asterisk/files/patch-main::utils.c create mode 100644 net/asterisk/files/patch-main__lock.c create mode 100644 net/asterisk/files/patch-rtp_timeout create mode 100644 net/asterisk/files/patch-suppress_log_dups.diff create mode 100644 net/asterisk/files/rtp_force_dtmf-codecnego.diff create mode 100644 net/asterisk/files/rtp_force_dtmf-nocodecnego.diff create mode 100644 net/asterisk/files/sip_force_callid.diff create mode 100644 net/asterisk/files/sip_set_auth.diff create mode 100644 net/asterisk/pkg-descr create mode 100644 net/asterisk/pkg-plist create mode 100644 net/asterisk10/Makefile create mode 100644 net/asterisk10/distinfo create mode 100644 net/asterisk10/files/asterisk.sh.in create mode 100644 net/asterisk10/files/codecnego-patch-Makefile create mode 100644 net/asterisk10/files/dtmf_debug.diff create mode 100644 net/asterisk10/files/ilbc_enable.diff create mode 100644 net/asterisk10/files/nocodecnego-patch-Makefile create mode 100644 net/asterisk10/files/patch-Makefile create mode 100644 net/asterisk10/files/patch-Makefile.rules create mode 100644 net/asterisk10/files/patch-agi::Makefile create mode 100644 net/asterisk10/files/patch-channels-chan_dahdi.c create mode 100644 net/asterisk10/files/patch-channels::Makefile create mode 100644 net/asterisk10/files/patch-channels::chan_sip.c create mode 100644 net/asterisk10/files/patch-channels__sip__include__sip.h create mode 100644 net/asterisk10/files/patch-channels_h323_Makefile.in create mode 100644 net/asterisk10/files/patch-configure create mode 100644 net/asterisk10/files/patch-include::asterisk::utils.h create mode 100644 net/asterisk10/files/patch-main::Makefile create mode 100644 net/asterisk10/files/patch-main::db.c create mode 100644 net/asterisk10/files/patch-main::frame.c create mode 100644 net/asterisk10/files/patch-main::utils.c create mode 100644 net/asterisk10/files/patch-main__lock.c create mode 100644 net/asterisk10/files/patch-rtp_timeout create mode 100644 net/asterisk10/files/patch-suppress_log_dups.diff create mode 100644 net/asterisk10/files/rtp_force_dtmf-codecnego.diff create mode 100644 net/asterisk10/files/rtp_force_dtmf-nocodecnego.diff create mode 100644 net/asterisk10/files/sip_force_callid.diff create mode 100644 net/asterisk10/files/sip_set_auth.diff create mode 100644 net/asterisk10/pkg-descr create mode 100644 net/asterisk10/pkg-plist diff --git a/net/Makefile b/net/Makefile index c3c39b145da9..3e3d2ec61654 100644 --- a/net/Makefile +++ b/net/Makefile @@ -27,6 +27,7 @@ SUBDIR += asfrecorder SUBDIR += asio SUBDIR += aslookup + SUBDIR += asterisk SUBDIR += asterisk-app-ldap SUBDIR += asterisk-app-notify SUBDIR += asterisk-bristuff diff --git a/net/asterisk/Makefile b/net/asterisk/Makefile new file mode 100644 index 000000000000..17cb06bfa487 --- /dev/null +++ b/net/asterisk/Makefile @@ -0,0 +1,244 @@ +# New ports collection makefile for: asterisk +# Date created: 17 October 2003 +# Whom: Maxim Sobolev +# +# $FreeBSD$ +# + +PORTNAME= asterisk +PORTVERSION= 1.8.0 +CATEGORIES= net +MASTER_SITES= http://downloads.asterisk.org/pub/telephony/asterisk/ \ + http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/ +PKGNAMESUFFIX= 18 + +MAINTAINER= flo@smeets.im +COMMENT= An Open Source PBX and telephony toolkit + +LIB_DEPENDS= speex.1:${PORTSDIR}/audio/speex \ + newt.52:${PORTSDIR}/devel/newt \ + execinfo:${PORTSDIR}/devel/libexecinfo +RUN_DEPENDS= mpg123:${PORTSDIR}/audio/mpg123 + +ONLY_FOR_ARCHS= i386 amd64 sparc64 + +GNU_CONFIGURE= yes +CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include -I${LOCALBASE}/include/openh323" \ + LDFLAGS="-L${LOCALBASE}/lib" +CONFIGURE_ARGS= --with-gsm=${LOCALBASE} --localstatedir=/var +CPPFLAGS= -I${LOCALBASE}/include -I${LOCALBASE}/include/openh323 +USE_GMAKE= yes +USE_GNOME= libxml2 +USE_BISON= build +USE_RC_SUBR= asterisk.sh +MAKE_ENV= PTHREAD_CFLAGS="${PTHREAD_CFLAGS}" \ + PTHREAD_LIBS="${PTHREAD_LIBS}" \ + MKDIR="${MKDIR}" \ + PWLIBDIR=${LOCALBASE}/share/pwlib \ + OPENH323DIR=${LOCALBASE}/share/openh323 \ + OSVERSION=${OSVERSION} \ + NOISY_BUILD=YES \ + DOCSDIR=${DOCSDIR} \ + ASTCFLAGS="${CFLAGS}" +MAN8= asterisk.8 astgenkey.8 autosupport.8 safe_asterisk.8 +CONFLICTS= asterisk*-1.2* asterisk*-1.4* asterisk*-1.6* + +OPTIONS= OGGVORBIS "Enable Ogg Vorbis support" on \ + ODBC "Enable ODBC support" on \ + POSTGRES "Enable PostgreSQL support" on \ + RADIUS "Enable RADIUS accounting support" on \ + SNMP "Enable SNMP support" on \ + H323 "Enable H.323 support" on \ + FREETDS "Enable FreeTDS support" on \ + JABBER "Enable Jabber and Gtalk support" on \ + SQLITE "Enable SQLITE support" on \ + GSM "Enable GSM codec" on \ + CURL "Enable CURL support" on \ + ILBC "Enable iLBC codec" off \ + SPANDSP "Enable Spandsp faxing support" off \ + EXCHANGE "Enable Exchange calendar support" off + +ASTERISK_USER?= asterisk +ASTERISK_GROUP?= asterisk + +USERS= ${ASTERISK_USER} +GROUPS= ${ASTERISK_GROUP} dahdi + +.include + +.if ${ARCH} == "i386" || ${ARCH} == "amd64" +OPTIONS+= DAHDI "Enable DAHDI support" on + +# Include this since we have altered OPTIONS. +.include +.endif + +SUB_LIST+= ASTERISK_USER=${ASTERISK_USER} +PLIST_SUB+= ASTERISK_USER=${ASTERISK_USER} +PLIST_SUB+= ASTERISK_GROUP=${ASTERISK_GROUP} + +.if !defined(WITH_H323) +PLIST_SUB+= WITH_H323="@comment " +CONFIGURE_ARGS+= --without-h323 +.else +PLIST_SUB+= WITH_H323="" +CONFIGURE_ARGS+= --with-h323=${LOCALBASE} +LIB_DEPENDS+= pt_r.1:${PORTSDIR}/devel/pwlib \ + h323_r.1:${PORTSDIR}/net/openh323 +.endif + +.if !defined(WITH_DAHDI) +PLIST_SUB+= WITH_DAHDI="@comment " +CONFIGURE_ARGS+= --without-dahdi +.else +PLIST_SUB+= WITH_DAHDI="" +CONFIGURE_ARGS+= --with-dahdi +BUILD_DEPENDS+= libpri>=1.4.10:${PORTSDIR}/misc/libpri \ + ${LOCALBASE}/include/dahdi/user.h:${PORTSDIR}/misc/dahdi +LIB_DEPENDS+= pri.1:${PORTSDIR}/misc/libpri +RUN_DEPENDS+= ${LOCALBASE}/lib/dahdi/dahdi.ko:${PORTSDIR}/misc/dahdi +.endif + +# +# WITH_FREETDS, WITH_PGSQL and WITH_SQLITE can also be added to MAKE_ENV +# similarly +.if !defined(WITH_ODBC) +PLIST_SUB+= WITH_ODBC="@comment " +CONFIGURE_ARGS+= --without-unixodbc +.else +PLIST_SUB+= WITH_ODBC="" +CONFIGURE_ARGS+= --with-unixodbc --with-ltdl +LIB_DEPENDS+= odbc.1:${PORTSDIR}/databases/unixODBC +USE_AUTOTOOLS= libltdl +.endif + +.if !defined(WITH_FREETDS) +PLIST_SUB+= WITH_FREETDS="@comment " +CONFIGURE_ARGS+= --without-tds +.else +PLIST_SUB+= WITH_FREETDS="" +CONFIGURE_ARGS+= --with-tds=${LOCALBASE} +LIB_DEPENDS+= tds.5:${PORTSDIR}/databases/freetds +.endif + +.if !defined(WITH_POSTGRES) +PLIST_SUB+= WITH_POSTGRES="@comment " +CONFIGURE_ARGS+= --without-postgres +.else +PLIST_SUB+= WITH_POSTGRES="" +USE_PGSQL= yes +CONFIGURE_ARGS+= --with-postgres +.endif + +.if !defined(WITH_OGGVORBIS) +PLIST_SUB+= WITH_OGGVORBIS="@comment " +CONFIGURE_ARGS+= --without-ogg +.else +PLIST_SUB+= WITH_OGGVORBIS="" +CONFIGURE_ARGS+= --with-ogg +LIB_DEPENDS+= vorbis.4:${PORTSDIR}/audio/libvorbis +.endif + +.if !defined(WITH_RADIUS) +PLIST_SUB+= WITH_RADIUS="@comment " +CONFIGURE_ARGS+= --without-radius +.else +PLIST_SUB+= WITH_RADIUS="" +CONFIGURE_ARGS+= --with-radius +LIB_DEPENDS+= radiusclient-ng.2:${PORTSDIR}/net/radiusclient +.endif + +.if !defined(WITH_SNMP) +PLIST_SUB+= WITH_SNMP="@comment " +CONFIGURE_ARGS+= --without-netsnmp +.else +PLIST_SUB+= WITH_SNMP="" +CONFIGURE_ARGS+= --with-netsnmp +LIB_DEPENDS+= netsnmp:${PORTSDIR}/net-mgmt/net-snmp +.endif + +.if !defined(WITH_JABBER) +PLIST_SUB+= WITH_JABBER="@comment " +CONFIGURE_ARGS+= --without-iksemel +.else +PLIST_SUB+= WITH_JABBER="" +CONFIGURE_ARGS+= --with-iksemel +LIB_DEPENDS+= iksemel.4:${PORTSDIR}/textproc/iksemel +.endif + +.if !defined(WITH_SQLITE) +PLIST_SUB+= WITH_SQLITE="@comment " +CONFIGURE_ARGS+= --without-sqlite \ + --with-sqlite3=no +.else +PLIST_SUB+= WITH_SQLITE="" +CONFIGURE_ARGS+= --with-sqlite +LIB_DEPENDS+= sqlite:${PORTSDIR}/databases/sqlite2 \ + sqlite3:${PORTSDIR}/databases/sqlite3 +.endif + +.if !defined(WITH_ILBC) +PLIST_SUB+= WITH_ILBC="@comment " +.else +PLIST_SUB+= WITH_ILBC="" +EXTRA_PATCHES+= ${PATCHDIR}/ilbc_enable.diff +.endif + +.if !defined(WITH_GSM) +PLIST_SUB+= WITH_GSM="@comment " +CONFIGURE_ARGS+= --without-gsm +.else +PLIST_SUB+= WITH_GSM="" +CONFIGURE_ARGS+= --with-gsm +LIB_DEPENDS+= gsm.1:${PORTSDIR}/audio/gsm +.endif + +.if !defined(WITH_CURL) +PLIST_SUB+= WITH_CURL="@comment " +CONFIGURE_ARGS+= --with-libcurl=no +.else +PLIST_SUB+= WITH_CURL="" +CONFIGURE_ARGS+= --with-libcurl +LIB_DEPENDS+= curl.6:${PORTSDIR}/ftp/curl +.endif + +.if !defined(WITH_SPANDSP) +PLIST_SUB+= WITH_SPANDSP="@comment " +CONFIGURE_ARGS+= --without-spandsp +.else +PLIST_SUB+= WITH_SPANDSP="" +CONFIGURE_ARGS+= --with-spandsp +LIB_DEPENDS+= spandsp.2:${PORTSDIR}/comms/spandsp-devel +.endif + +.if !defined(WITH_EXCHANGE) +CONFIGURE_ARGS+= --without-neon --without-neon29 +PLIST_SUB+= WITH_EXCHANGE="@comment " +.else +LIB_DEPENDS+= neon.27:${PORTSDIR}/www/neon29 +PLIST_SUB+= WITH_EXCHANGE="" +.endif + +.if defined(WITH_MISC_PATCHES) +EXTRA_PATCHES+= ${PATCHDIR}/dtmf_debug.diff +EXTRA_PATCHES+= ${PATCHDIR}/feature_disconnect.diff +EXTRA_PATCHES+= ${PATCHDIR}/sip_force_callid.diff +EXTRA_PATCHES+= ${PATCHDIR}/sip_set_auth.diff +.if defined(WITH_CODEC_PATCH) +EXTRA_PATCHES+= ${PATCHDIR}/rtp_force_dtmf-codecnego.diff +.else +EXTRA_PATCHES+= ${PATCHDIR}/rtp_force_dtmf-nocodecnego.diff +.endif +.endif + +post-extract: + ${MKDIR} ${WRKSRC}/codecs/ilbc + ${FIND} ${WRKSRC} -name '*.d' -delete + +post-patch: + ${REINPLACE_CMD} -e 's|/var/lib|${PREFIX}/share|g' ${WRKSRC}/configs/musiconhold.conf.sample + +post-install: + @${CHOWN} -R ${ASTERISK_USER}:${ASTERISK_GROUP} /var/db/asterisk /var/log/asterisk /var/spool/asterisk + +.include diff --git a/net/asterisk/distinfo b/net/asterisk/distinfo new file mode 100644 index 000000000000..2a2c2e11b045 --- /dev/null +++ b/net/asterisk/distinfo @@ -0,0 +1,2 @@ +SHA256 (asterisk-1.8.0.tar.gz) = 8f1edbc8fab23596a6f6ee2881d67c22b4a6cb20bfad84125fcdcb3ff2e1de1b +SIZE (asterisk-1.8.0.tar.gz) = 26035124 diff --git a/net/asterisk/files/asterisk.sh.in b/net/asterisk/files/asterisk.sh.in new file mode 100644 index 000000000000..4d10717d64ae --- /dev/null +++ b/net/asterisk/files/asterisk.sh.in @@ -0,0 +1,34 @@ +#!/bin/sh + +# PROVIDE: asterisk +# REQUIRE: LOGIN +# KEYWORD: shutdown +# +# Add the following lines to /etc/rc.conf to enable asterisk: +# +# asterisk_enable="YES" +# + +. /etc/rc.subr + +stop_cmd=asterisk_shutdown +asterisk_shutdown () { + echo 'Stopping asterisk' + %%PREFIX%%/sbin/asterisk -nqrx 'core stop now' + sleep 1 + return 0 +} + +name=asterisk +rcvar=`set_rcvar` + +command=%%PREFIX%%/sbin/asterisk +command_args="-n -U %%ASTERISK_USER%%" + +load_rc_config $name + +pidfile=${asterisk_pidfile:-"/var/run/asterisk.pid"} + +asterisk_enable=${asterisk_enable:-"NO"} + +run_rc_command "$1" diff --git a/net/asterisk/files/codecnego-patch-Makefile b/net/asterisk/files/codecnego-patch-Makefile new file mode 100644 index 000000000000..e39dd6f62082 --- /dev/null +++ b/net/asterisk/files/codecnego-patch-Makefile @@ -0,0 +1,219 @@ +--- Makefile.orig 2009-11-20 17:48:05.000000000 +0200 ++++ Makefile 2009-11-20 17:50:33.000000000 +0200 +@@ -101,7 +101,7 @@ + OVERWRITE=y + + # Include debug and macro symbols in the executables (-g) and profiling info (-pg) +-DEBUG=-g3 ++#DEBUG=-g3 + + # Staging directory + # Files are copied here temporarily during the install process +@@ -135,7 +135,7 @@ + ASTMANDIR=$(mandir) + ifneq ($(findstring BSD,$(OSARCH)),) + ASTVARLIBDIR=$(prefix)/share/asterisk +- ASTVARRUNDIR=$(localstatedir)/run/asterisk ++ ASTVARRUNDIR=$(localstatedir)/run + else + ASTVARLIBDIR=$(localstatedir)/lib/asterisk + endif +@@ -225,9 +225,11 @@ + _ASTLDFLAGS+=-L/usr/local/lib + endif + ++ifneq ($(OSARCH),FreeBSD) + ifneq ($(PROC),ultrasparc) + _ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi) + endif ++endif + + ifeq ($(PROC),ppc) + _ASTCFLAGS+=-fsigned-char +@@ -235,7 +237,7 @@ + + ifeq ($(OSARCH),FreeBSD) + # -V is understood by BSD Make, not by GNU make. +- BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk) ++ BSDVERSION=$(OSVERSION) + _ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi) + AST_LIBS+=$(shell if test $(BSDVERSION) -lt 502102 ; then echo "-lc_r"; else echo "-pthread"; fi) + endif +@@ -416,15 +418,15 @@ + # Should static HTTP be installed during make samples or even with its own target ala + # webvoicemail? There are portions here that *could* be customized but might also be + # improved a lot. I'll put it here for now. +- mkdir -p $(DESTDIR)$(ASTDATADIR)/static-http ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/static-http + for x in static-http/*; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \ + done +- mkdir -p $(DESTDIR)$(ASTDATADIR)/images ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/images + for x in images/*.jpg; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/images ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTDATADIR)/images ; \ + done +- mkdir -p $(DESTDIR)$(AGI_DIR) ++ $(MKDIR) $(DESTDIR)$(AGI_DIR) + $(MAKE) -C sounds install + + update: +@@ -445,47 +447,47 @@ + OLDHEADERS=$(filter-out $(NEWHEADERS),$(notdir $(wildcard $(DESTDIR)$(ASTHEADERDIR)/*.h))) + + installdirs: +- mkdir -p $(DESTDIR)$(MODULES_DIR) +- mkdir -p $(DESTDIR)$(ASTSBINDIR) +- mkdir -p $(DESTDIR)$(ASTETCDIR) +- mkdir -p $(DESTDIR)$(ASTBINDIR) +- mkdir -p $(DESTDIR)$(ASTVARRUNDIR) +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/dictate +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/system +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/tmp +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/meetme +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/monitor ++ $(MKDIR) $(DESTDIR)$(MODULES_DIR) ++ $(MKDIR) $(DESTDIR)$(ASTSBINDIR) ++ $(MKDIR) $(DESTDIR)$(ASTETCDIR) ++ $(MKDIR) $(DESTDIR)$(ASTBINDIR) ++ $(MKDIR) $(DESTDIR)$(ASTVARRUNDIR) ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/voicemail ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/dictate ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/system ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/tmp ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/meetme ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/monitor + + bininstall: _all installdirs $(SUBDIRS_INSTALL) +- $(INSTALL) -m 755 main/asterisk $(DESTDIR)$(ASTSBINDIR)/ ++ $(BSD_INSTALL_PROGRAM) main/asterisk $(DESTDIR)$(ASTSBINDIR)/ + $(LN) -sf asterisk $(DESTDIR)$(ASTSBINDIR)/rasterisk +- $(INSTALL) -m 755 contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/ +- $(INSTALL) -m 755 contrib/scripts/autosupport $(DESTDIR)$(ASTSBINDIR)/ ++ $(BSD_INSTALL_SCRIPT) contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/ ++ $(BSD_INSTALL_SCRIPT) contrib/scripts/autosupport $(DESTDIR)$(ASTSBINDIR)/ + if [ ! -f $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ]; then \ +- cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ;\ +- chmod 755 $(DESTDIR)$(ASTSBINDIR)/safe_asterisk;\ ++ cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > contrib/scripts/safe_asterisk.out;\ ++ ${BSD_INSTALL_SCRIPT} contrib/scripts/safe_asterisk.out $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ;\ + fi +- $(INSTALL) -d $(DESTDIR)$(ASTHEADERDIR) +- $(INSTALL) -m 644 include/asterisk.h $(DESTDIR)$(includedir) +- $(INSTALL) -m 644 include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR) ++ $(MKDIR) $(DESTDIR)$(ASTHEADERDIR) ++ $(BSD_INSTALL_DATA) include/asterisk.h $(DESTDIR)$(includedir) ++ $(BSD_INSTALL_DATA) include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR) + if [ -n "$(OLDHEADERS)" ]; then \ + rm -f $(addprefix $(DESTDIR)$(ASTHEADERDIR)/,$(OLDHEADERS)) ;\ + fi +- mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-csv +- mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-custom +- mkdir -p $(DESTDIR)$(ASTDATADIR)/keys +- mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware +- mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware/iax +- mkdir -p $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 keys/iaxtel.pub $(DESTDIR)$(ASTDATADIR)/keys +- $(INSTALL) -m 644 keys/freeworlddialup.pub $(DESTDIR)$(ASTDATADIR)/keys +- $(INSTALL) -m 644 doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(MKDIR) $(DESTDIR)$(ASTLOGDIR)/cdr-csv ++ $(MKDIR) $(DESTDIR)$(ASTLOGDIR)/cdr-custom ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/keys ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/firmware ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/firmware/iax ++ $(MKDIR) $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_DATA) keys/iaxtel.pub $(DESTDIR)$(ASTDATADIR)/keys ++ $(BSD_INSTALL_DATA) keys/freeworlddialup.pub $(DESTDIR)$(ASTDATADIR)/keys ++ $(BSD_INSTALL_MAN) doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_MAN) contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_MAN) contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_MAN) contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 + if [ -f contrib/firmware/iax/iaxy.bin ] ; then \ +- $(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \ ++ $(BSD_INSTALL_DATA) contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \ + fi + + $(SUBDIRS_INSTALL): +@@ -521,7 +523,7 @@ + @exit 1 + endif + +-install: badshell datafiles bininstall ++install: badshell datafiles bininstall samples + @if [ -x /usr/sbin/asterisk-post-install ]; then \ + /usr/sbin/asterisk-post-install $(DESTDIR) . ; \ + fi +@@ -559,31 +561,23 @@ + upgrade: bininstall + + adsi: +- mkdir -p $(DESTDIR)$(ASTETCDIR) ++ $(MKDIR) $(DESTDIR)$(ASTETCDIR) + for x in configs/*.adsi; do \ + if [ ! -f $(DESTDIR)$(ASTETCDIR)/$$x ]; then \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \ + fi ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`-dist ; \ + done + + samples: adsi +- mkdir -p $(DESTDIR)$(ASTETCDIR) ++ $(MKDIR) $(DESTDIR)$(ASTETCDIR) + for x in configs/*.sample; do \ +- if [ -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ]; then \ +- if [ "$(OVERWRITE)" = "y" ]; then \ +- if cmp -s $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` $$x ; then \ +- echo "Config file $$x is unchanged"; \ +- continue; \ +- fi ; \ +- mv -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`.old ; \ +- else \ +- echo "Skipping config file $$x"; \ +- continue; \ +- fi ;\ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`-dist ;\ ++ if [ ! -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ]; then \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`;\ + fi ; \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ;\ + done +- if [ "$(OVERWRITE)" = "y" ] || [ ! -f $(DESTDIR)$(ASTCONFPATH) ]; then \ ++ if true; then \ + ( \ + echo "[directories]" ; \ + echo "astetcdir => $(ASTETCDIR)" ; \ +@@ -670,20 +664,23 @@ + echo "; Default: strict"; \ + echo ";"; \ + echo ";translation_algorithm = strict"; \ +- ) > $(DESTDIR)$(ASTCONFPATH) ; \ ++ ) > $(DESTDIR)$(ASTCONFPATH)-dist ; \ ++ if [ ! -f $(DESTDIR)$(ASTCONFPATH) ]; then \ ++ cp $(DESTDIR)$(ASTCONFPATH)-dist $(DESTDIR)$(ASTCONFPATH); \ ++ fi; \ + else \ + echo "Skipping asterisk.conf creation"; \ + fi +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX + build_tools/make_sample_voicemail $(DESTDIR)/$(ASTDATADIR) $(DESTDIR)/$(ASTSPOOLDIR) + + webvmail: + @[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 ) + @[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 ) + $(INSTALL) -m 4755 -o root -g root contrib/scripts/vmail.cgi $(DESTDIR)$(HTTP_CGIDIR)/vmail.cgi +- mkdir -p $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk ++ $(MKDIR) $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk + for x in images/*.gif; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \ + done + @echo " +--------- Asterisk Web Voicemail ----------+" + @echo " + +" diff --git a/net/asterisk/files/dtmf_debug.diff b/net/asterisk/files/dtmf_debug.diff new file mode 100644 index 000000000000..2a5b6bc9ea33 --- /dev/null +++ b/net/asterisk/files/dtmf_debug.diff @@ -0,0 +1,226 @@ +--- channels/chan_sip.c.orig 2009-05-12 21:18:44.000000000 +0300 ++++ channels/chan_sip.c 2009-05-26 12:50:22.000000000 +0300 +@@ -3891,6 +3891,7 @@ + ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner); + else { + p->owner = newchan; ++ ast_rtp_set_chan_name(p->rtp, newchan->name); + /* Re-invite RTP back to Asterisk. Needed if channel is masqueraded out of a native + RTP bridge (i.e., RTP not going through Asterisk): RTP bridge code might not be + able to do this if the masquerade happens before the bridge breaks (e.g., AMI +@@ -4168,6 +4169,7 @@ + if (i->rtp) { + tmp->fds[0] = ast_rtp_fd(i->rtp); + tmp->fds[1] = ast_rtcp_fd(i->rtp); ++ ast_rtp_set_chan_id(i->rtp, i->callid); + } + if (needvideo && i->vrtp) { + tmp->fds[2] = ast_rtp_fd(i->vrtp); +@@ -4195,6 +4197,8 @@ + if (!ast_strlen_zero(i->language)) + ast_string_field_set(tmp, language, i->language); + i->owner = tmp; ++ ast_rtp_set_chan_name(i->rtp, tmp->name); ++ + ast_module_ref(ast_module_info->self); + ast_copy_string(tmp->context, i->context, sizeof(tmp->context)); + /*Since it is valid to have extensions in the dialplan that have unescaped characters in them +@@ -4621,8 +4625,10 @@ + build_via(p); + if (!callid) + build_callid_pvt(p); +- else ++ else { + ast_string_field_set(p, callid, callid); ++ ast_rtp_set_chan_id(p->rtp, p->callid); ++ } + /* Assign default music on hold class */ + ast_string_field_set(p, mohinterpret, default_mohinterpret); + ast_string_field_set(p, mohsuggest, default_mohsuggest); +--- include/asterisk/rtp.h.orig 2008-03-04 20:05:28.000000000 +0200 ++++ include/asterisk/rtp.h 2009-05-26 12:50:22.000000000 +0300 +@@ -243,6 +243,9 @@ + + int ast_rtp_codec_getformat(int pt); + ++void ast_rtp_set_chan_name(struct ast_rtp *, const char *); ++void ast_rtp_set_chan_id(struct ast_rtp *, const char *); ++ + /*! \brief Set rtp timeout */ + void ast_rtp_set_rtptimeout(struct ast_rtp *rtp, int timeout); + /*! \brief Set rtp hold timeout */ +--- main/rtp.c.orig 2009-11-20 17:51:49.000000000 +0200 ++++ main/rtp.c 2009-11-20 17:53:11.000000000 +0200 +@@ -81,6 +81,7 @@ + static int rtpstart; /*!< First port for RTP sessions (set in rtp.conf) */ + static int rtpend; /*!< Last port for RTP sessions (set in rtp.conf) */ + static int rtpdebug; /*!< Are we debugging? */ ++static int rtpdebugdtmf; /*!< Are we debugging DTMFs? */ + static int rtcpdebug; /*!< Are we debugging RTCP? */ + static int rtcpstats; /*!< Are we debugging RTCP? */ + static int rtcpinterval = RTCP_DEFAULT_INTERVALMS; /*!< Time between rtcp reports in millisecs */ +@@ -170,6 +171,8 @@ + struct ast_rtp *bridged; /*!< Who we are Packet bridged to */ + int set_marker_bit:1; /*!< Whether to set the marker bit or not */ + unsigned int constantssrc:1; ++ char chan_name[100]; ++ char chan_id[100]; + }; + + /* Forward declarations */ +@@ -676,8 +679,8 @@ + struct ast_frame *f = NULL; + event = ntohl(*((unsigned int *)(data))); + event &= 0x001F; +- if (option_debug > 2 || rtpdebug) +- ast_log(LOG_DEBUG, "Cisco DTMF Digit: %08x (len = %d)\n", event, len); ++ if (option_debug > 2 || rtpdebug || rtpdebugdtmf) ++ ast_log(LOG_DEBUG, "Channel: %s %s Cisco DTMF packet: %08x (len = %d)\n", rtp->chan_name, rtp->chan_id, event, len); + if (event < 10) { + resp = '0' + event; + } else if (event < 11) { +@@ -691,12 +694,25 @@ + } + if (rtp->resp && (rtp->resp != resp)) { + f = send_dtmf(rtp, AST_FRAME_DTMF_END); ++ ast_log(LOG_DEBUG, "Channel: %s %s Cisco DTMF event: %c\n", rtp->chan_name, rtp->chan_id, rtp->resp); + } + rtp->resp = resp; + rtp->dtmf_timeout = 0; + return f; + } + ++void ast_rtp_set_chan_id(struct ast_rtp *rtp, const char *chan_id) { ++ if (rtp == NULL || chan_id == NULL) ++ return; ++ snprintf(rtp->chan_id, sizeof(rtp->chan_id), "%s", chan_id); ++} ++ ++void ast_rtp_set_chan_name(struct ast_rtp *rtp, const char *chan_name) { ++ if (rtp == NULL || chan_name == NULL) ++ return; ++ snprintf(rtp->chan_name, sizeof(rtp->chan_name), "%s", chan_name); ++} ++ + /*! + * \brief Process RTP DTMF and events according to RFC 2833. + * +@@ -1101,6 +1117,10 @@ + struct rtpPayloadType rtpPT; + int reconstruct = ntohl(rtpheader[0]); + ++ /* If we are listening for DTMF - then feed all packets into the core to keep the RTP stream consistent when relaying DTMFs */ ++ if (ast_test_flag(rtp, FLAG_P2P_NEED_DTMF)) ++ return -1; ++ + /* Get fields from packet */ + payload = (reconstruct & 0x7f0000) >> 16; + mark = (((reconstruct & 0x800000) >> 23) != 0); +@@ -1108,10 +1128,6 @@ + /* Check what the payload value should be */ + rtpPT = ast_rtp_lookup_pt(rtp, payload); + +- /* If the payload is DTMF, and we are listening for DTMF - then feed it into the core */ +- if (ast_test_flag(rtp, FLAG_P2P_NEED_DTMF) && !rtpPT.isAstFormat && rtpPT.code == AST_RTP_DTMF) +- return -1; +- + /* Otherwise adjust bridged payload to match */ + bridged_payload = ast_rtp_lookup_code(bridged, rtpPT.isAstFormat, rtpPT.code); + +@@ -1306,11 +1322,12 @@ + /* This is special in-band data that's not one of our codecs */ + if (rtpPT.code == AST_RTP_DTMF) { + /* It's special -- rfc2833 process it */ +- if (rtp_debug_test_addr(&sin)) { ++ if (rtp_debug_test_addr(&sin) || rtpdebugdtmf) { + unsigned char *data; + unsigned int event; + unsigned int event_end; + unsigned int duration; ++ + data = rtp->rawdata + AST_FRIENDLY_OFFSET + hdrlen; + event = ntohl(*((unsigned int *)(data))); + event >>= 24; +@@ -1319,9 +1336,12 @@ + event_end >>= 24; + duration = ntohl(*((unsigned int *)(data))); + duration &= 0xFFFF; +- ast_verbose("Got RTP RFC2833 from %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u, mark %d, event %08x, end %d, duration %-5.5d) \n", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), payloadtype, seqno, timestamp, res - hdrlen, (mark?1:0), event, ((event_end & 0x80)?1:0), duration); ++ ++ ast_verbose("Channel: %s %s Got RTP RFC2833 from %s:%u to %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u, mark %d, event %08x, end %d, duration %-5.5d)\n", rtp->chan_name, rtp->chan_id, ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), ast_inet_ntoa(rtp->us.sin_addr), ntohs(rtp->us.sin_port), payloadtype, seqno, timestamp, res - hdrlen, (mark?1:0), event, ((event_end & 0x80)?1:0), duration); + } + f = process_rfc2833(rtp, rtp->rawdata + AST_FRIENDLY_OFFSET + hdrlen, res - hdrlen, seqno, timestamp); ++ if (rtpdebugdtmf && f) ++ ast_verbose("Channel: %s %s Got RFC2833 DTMF event %c of type %s\n", rtp->chan_name, rtp->chan_id, f->subclass, (f->frametype == AST_FRAME_DTMF_BEGIN ? "DTMF BEGIN" : (f->frametype == AST_FRAME_DTMF_END ? "DTMF_END" : "UNKNOWN"))); + } else if (rtpPT.code == AST_RTP_CISCO_DTMF) { + /* It's really special -- process it the Cisco way */ + if (rtp->lastevent <= seqno || (rtp->lastevent >= 65530 && seqno <= 6)) { +@@ -2287,8 +2307,9 @@ + ast_log(LOG_ERROR, "RTP Transmission error to %s:%u: %s\n", + ast_inet_ntoa(rtp->them.sin_addr), + ntohs(rtp->them.sin_port), strerror(errno)); +- if (rtp_debug_test_addr(&rtp->them)) +- ast_verbose("Sent RTP DTMF packet to %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u)\n", ++ if (rtp_debug_test_addr(&rtp->them) || rtpdebugdtmf) ++ ast_verbose("Channel: %s %s Sent RTP DTMF packet to %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u)\n", ++ rtp->chan_name, rtp->chan_id, + ast_inet_ntoa(rtp->them.sin_addr), + ntohs(rtp->them.sin_port), payload, rtp->seqno, rtp->lastdigitts, res - hdrlen); + /* Increment sequence number */ +@@ -2331,8 +2352,9 @@ + ast_log(LOG_ERROR, "RTP Transmission error to %s:%d: %s\n", + ast_inet_ntoa(rtp->them.sin_addr), + ntohs(rtp->them.sin_port), strerror(errno)); +- if (rtp_debug_test_addr(&rtp->them)) +- ast_verbose("Sent RTP DTMF packet to %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u)\n", ++ if (rtp_debug_test_addr(&rtp->them) || rtpdebugdtmf) ++ ast_verbose("Channel: %s %s Sent RTP DTMF packet to %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u)\n", ++ rtp->chan_name, rtp->chan_id, + ast_inet_ntoa(rtp->them.sin_addr), + ntohs(rtp->them.sin_port), rtp->send_payload, rtp->seqno, rtp->lastdigitts, res - hdrlen); + +@@ -3621,6 +3643,16 @@ + return RESULT_SUCCESS; + } + ++static int rtp_do_debug_dtmf(int fd, int argc, char *argv[]) ++{ ++ if (argc != 3) ++ return RESULT_SHOWUSAGE; ++ ++ rtpdebugdtmf = 1; ++ ast_cli(fd, "RTP DTMF debugging enabled\n"); ++ return RESULT_SUCCESS; ++} ++ + static int rtp_do_debug(int fd, int argc, char *argv[]) + { + if (argc != 2) { +@@ -3681,6 +3713,7 @@ + if (argc != 3) + return RESULT_SHOWUSAGE; + rtpdebug = 0; ++ rtpdebugdtmf = 0; + ast_cli(fd,"RTP Debugging Disabled\n"); + return RESULT_SUCCESS; + } +@@ -3741,7 +3774,7 @@ + } + + static char debug_usage[] = +- "Usage: rtp debug [ip host[:port]]\n" ++ "Usage: rtp debug [ip host[:port] | dtmf]\n" + " Enable dumping of all RTP packets to and from host.\n"; + + static char no_debug_usage[] = +@@ -3816,6 +3849,10 @@ + rtp_do_debug, "Enable RTP debugging", + debug_usage }, + ++ { { "rtp", "debug", "dtmf", NULL }, ++ rtp_do_debug_dtmf, "Enable RTP debugging on DTMFs", ++ debug_usage }, ++ + { { "rtp", "debug", "off", NULL }, + rtp_no_debug, "Disable RTP debugging", + no_debug_usage, NULL, &cli_rtp_no_debug_deprecated }, diff --git a/net/asterisk/files/ilbc_enable.diff b/net/asterisk/files/ilbc_enable.diff new file mode 100644 index 000000000000..a2a3c4f73d70 --- /dev/null +++ b/net/asterisk/files/ilbc_enable.diff @@ -0,0 +1,7599 @@ + +$FreeBSD$ + +--- menuselect-tree ++++ menuselect-tree +@@ -269,7 +269,6 @@ + gsm + + +- no + + + +diff -druN codecs/ilbc.orig/FrameClassify.c codecs/ilbc/FrameClassify.c +--- codecs/ilbc.orig/FrameClassify.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/FrameClassify.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,110 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ FrameClassify.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include "iLBC_define.h" ++#include "FrameClassify.h" ++ ++/*---------------------------------------------------------------* ++ * Classification of subframes to localize start state ++ *--------------------------------------------------------------*/ ++ ++int FrameClassify( /* index to the max-energy sub-frame */ ++ iLBC_Enc_Inst_t *iLBCenc_inst, ++ /* (i/o) the encoder state structure */ ++ float *residual /* (i) lpc residual signal */ ++) { ++ float max_ssqEn, fssqEn[NSUB_MAX], bssqEn[NSUB_MAX], *pp; ++ int n, l, max_ssqEn_n; ++ const float ssqEn_win[NSUB_MAX-1]={(float)0.8,(float)0.9, ++ (float)1.0,(float)0.9,(float)0.8}; ++ const float sampEn_win[5]={(float)1.0/(float)6.0, ++ (float)2.0/(float)6.0, (float)3.0/(float)6.0, ++ (float)4.0/(float)6.0, (float)5.0/(float)6.0}; ++ ++ /* init the front and back energies to zero */ ++ ++ memset(fssqEn, 0, NSUB_MAX*sizeof(float)); ++ memset(bssqEn, 0, NSUB_MAX*sizeof(float)); ++ ++ /* Calculate front of first seqence */ ++ ++ n=0; ++ pp=residual; ++ ++ ++ for (l=0; l<5; l++) { ++ fssqEn[n] += sampEn_win[l] * (*pp) * (*pp); ++ pp++; ++ } ++ for (l=5; lnsub-1; n++) { ++ pp=residual+n*SUBL; ++ for (l=0; l<5; l++) { ++ fssqEn[n] += sampEn_win[l] * (*pp) * (*pp); ++ bssqEn[n] += (*pp) * (*pp); ++ pp++; ++ } ++ for (l=5; lnsub-1; ++ pp=residual+n*SUBL; ++ for (l=0; lmode==20) l=1; ++ else l=0; ++ ++ max_ssqEn=(fssqEn[0]+bssqEn[1])*ssqEn_win[l]; ++ max_ssqEn_n=1; ++ for (n=2; nnsub; n++) { ++ ++ l++; ++ ++ ++ if ((fssqEn[n-1]+bssqEn[n])*ssqEn_win[l] > max_ssqEn) { ++ max_ssqEn=(fssqEn[n-1]+bssqEn[n]) * ++ ssqEn_win[l]; ++ max_ssqEn_n=n; ++ } ++ } ++ ++ return max_ssqEn_n; ++} ++ ++ +diff -druN codecs/ilbc.orig/FrameClassify.h codecs/ilbc/FrameClassify.h +--- codecs/ilbc.orig/FrameClassify.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/FrameClassify.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,26 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ FrameClassify.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++ ++ ++#ifndef __iLBC_FRAMECLASSIFY_H ++#define __iLBC_FRAMECLASSIFY_H ++ ++int FrameClassify( /* index to the max-energy sub-frame */ ++ iLBC_Enc_Inst_t *iLBCenc_inst, ++ /* (i/o) the encoder state structure */ ++ float *residual /* (i) lpc residual signal */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/LPCdecode.c codecs/ilbc/LPCdecode.c +--- codecs/ilbc.orig/LPCdecode.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/LPCdecode.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,152 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ LPC_decode.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include ++#include ++ ++#include "helpfun.h" ++#include "lsf.h" ++#include "iLBC_define.h" ++#include "LPCdecode.h" ++#include "constants.h" ++ ++/*---------------------------------------------------------------* ++ * interpolation of lsf coefficients for the decoder ++ *--------------------------------------------------------------*/ ++ ++void LSFinterpolate2a_dec( ++ float *a, /* (o) lpc coefficients for a sub-frame */ ++ float *lsf1, /* (i) first lsf coefficient vector */ ++ ++ ++ float *lsf2, /* (i) second lsf coefficient vector */ ++ float coef, /* (i) interpolation weight */ ++ int length /* (i) length of lsf vectors */ ++){ ++ float lsftmp[LPC_FILTERORDER]; ++ ++ interpolate(lsftmp, lsf1, lsf2, coef, length); ++ lsf2a(a, lsftmp); ++} ++ ++/*---------------------------------------------------------------* ++ * obtain dequantized lsf coefficients from quantization index ++ *--------------------------------------------------------------*/ ++ ++void SimplelsfDEQ( ++ float *lsfdeq, /* (o) dequantized lsf coefficients */ ++ int *index, /* (i) quantization index */ ++ int lpc_n /* (i) number of LPCs */ ++){ ++ int i, j, pos, cb_pos; ++ ++ /* decode first LSF */ ++ ++ pos = 0; ++ cb_pos = 0; ++ for (i = 0; i < LSF_NSPLIT; i++) { ++ for (j = 0; j < dim_lsfCbTbl[i]; j++) { ++ lsfdeq[pos + j] = lsfCbTbl[cb_pos + ++ (long)(index[i])*dim_lsfCbTbl[i] + j]; ++ } ++ pos += dim_lsfCbTbl[i]; ++ cb_pos += size_lsfCbTbl[i]*dim_lsfCbTbl[i]; ++ } ++ ++ if (lpc_n>1) { ++ ++ /* decode last LSF */ ++ ++ pos = 0; ++ cb_pos = 0; ++ for (i = 0; i < LSF_NSPLIT; i++) { ++ for (j = 0; j < dim_lsfCbTbl[i]; j++) { ++ lsfdeq[LPC_FILTERORDER + pos + j] = ++ lsfCbTbl[cb_pos + ++ (long)(index[LSF_NSPLIT + i])* ++ dim_lsfCbTbl[i] + j]; ++ } ++ pos += dim_lsfCbTbl[i]; ++ cb_pos += size_lsfCbTbl[i]*dim_lsfCbTbl[i]; ++ } ++ } ++} ++ ++/*----------------------------------------------------------------* ++ ++ ++ * obtain synthesis and weighting filters form lsf coefficients ++ *---------------------------------------------------------------*/ ++ ++void DecoderInterpolateLSF( ++ float *syntdenum, /* (o) synthesis filter coefficients */ ++ float *weightdenum, /* (o) weighting denumerator ++ coefficients */ ++ float *lsfdeq, /* (i) dequantized lsf coefficients */ ++ int length, /* (i) length of lsf coefficient vector */ ++ iLBC_Dec_Inst_t *iLBCdec_inst ++ /* (i) the decoder state structure */ ++){ ++ int i, pos, lp_length; ++ float lp[LPC_FILTERORDER + 1], *lsfdeq2; ++ ++ lsfdeq2 = lsfdeq + length; ++ lp_length = length + 1; ++ ++ if (iLBCdec_inst->mode==30) { ++ /* sub-frame 1: Interpolation between old and first */ ++ ++ LSFinterpolate2a_dec(lp, iLBCdec_inst->lsfdeqold, lsfdeq, ++ lsf_weightTbl_30ms[0], length); ++ memcpy(syntdenum,lp,lp_length*sizeof(float)); ++ bwexpand(weightdenum, lp, LPC_CHIRP_WEIGHTDENUM, ++ lp_length); ++ ++ /* sub-frames 2 to 6: interpolation between first ++ and last LSF */ ++ ++ pos = lp_length; ++ for (i = 1; i < 6; i++) { ++ LSFinterpolate2a_dec(lp, lsfdeq, lsfdeq2, ++ lsf_weightTbl_30ms[i], length); ++ memcpy(syntdenum + pos,lp,lp_length*sizeof(float)); ++ bwexpand(weightdenum + pos, lp, ++ LPC_CHIRP_WEIGHTDENUM, lp_length); ++ pos += lp_length; ++ } ++ } ++ else { ++ pos = 0; ++ for (i = 0; i < iLBCdec_inst->nsub; i++) { ++ LSFinterpolate2a_dec(lp, iLBCdec_inst->lsfdeqold, ++ lsfdeq, lsf_weightTbl_20ms[i], length); ++ memcpy(syntdenum+pos,lp,lp_length*sizeof(float)); ++ bwexpand(weightdenum+pos, lp, LPC_CHIRP_WEIGHTDENUM, ++ lp_length); ++ pos += lp_length; ++ } ++ } ++ ++ /* update memory */ ++ ++ ++ ++ if (iLBCdec_inst->mode==30) ++ memcpy(iLBCdec_inst->lsfdeqold, lsfdeq2, ++ length*sizeof(float)); ++ else ++ memcpy(iLBCdec_inst->lsfdeqold, lsfdeq, ++ length*sizeof(float)); ++ ++} ++ ++ +diff -druN codecs/ilbc.orig/LPCdecode.h codecs/ilbc/LPCdecode.h +--- codecs/ilbc.orig/LPCdecode.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/LPCdecode.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,44 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ LPC_decode.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __iLBC_LPC_DECODE_H ++#define __iLBC_LPC_DECODE_H ++ ++void LSFinterpolate2a_dec( ++ ++ ++ float *a, /* (o) lpc coefficients for a sub-frame */ ++ float *lsf1, /* (i) first lsf coefficient vector */ ++ float *lsf2, /* (i) second lsf coefficient vector */ ++ float coef, /* (i) interpolation weight */ ++ int length /* (i) length of lsf vectors */ ++); ++ ++void SimplelsfDEQ( ++ float *lsfdeq, /* (o) dequantized lsf coefficients */ ++ int *index, /* (i) quantization index */ ++ int lpc_n /* (i) number of LPCs */ ++); ++ ++void DecoderInterpolateLSF( ++ float *syntdenum, /* (o) synthesis filter coefficients */ ++ float *weightdenum, /* (o) weighting denumerator ++ coefficients */ ++ float *lsfdeq, /* (i) dequantized lsf coefficients */ ++ int length, /* (i) length of lsf coefficient vector */ ++ iLBC_Dec_Inst_t *iLBCdec_inst ++ /* (i) the decoder state structure */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/LPCencode.c codecs/ilbc/LPCencode.c +--- codecs/ilbc.orig/LPCencode.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/LPCencode.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,228 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ LPCencode.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include ++ ++ ++ ++#include "iLBC_define.h" ++#include "LPCencode.h" ++#include "helpfun.h" ++#include "lsf.h" ++#include "constants.h" ++ ++/*----------------------------------------------------------------* ++ * lpc analysis (subrutine to LPCencode) ++ *---------------------------------------------------------------*/ ++ ++static void SimpleAnalysis( ++ float *lsf, /* (o) lsf coefficients */ ++ float *data, /* (i) new data vector */ ++ iLBC_Enc_Inst_t *iLBCenc_inst ++ /* (i/o) the encoder state structure */ ++){ ++ int k, is; ++ float temp[BLOCKL_MAX], lp[LPC_FILTERORDER + 1]; ++ float lp2[LPC_FILTERORDER + 1]; ++ float r[LPC_FILTERORDER + 1]; ++ ++ is=LPC_LOOKBACK+BLOCKL_MAX-iLBCenc_inst->blockl; ++ memcpy(iLBCenc_inst->lpc_buffer+is,data, ++ iLBCenc_inst->blockl*sizeof(float)); ++ ++ /* No lookahead, last window is asymmetric */ ++ ++ for (k = 0; k < iLBCenc_inst->lpc_n; k++) { ++ ++ is = LPC_LOOKBACK; ++ ++ if (k < (iLBCenc_inst->lpc_n - 1)) { ++ window(temp, lpc_winTbl, ++ iLBCenc_inst->lpc_buffer, BLOCKL_MAX); ++ } else { ++ window(temp, lpc_asymwinTbl, ++ iLBCenc_inst->lpc_buffer + is, BLOCKL_MAX); ++ } ++ ++ autocorr(r, temp, BLOCKL_MAX, LPC_FILTERORDER); ++ window(r, r, lpc_lagwinTbl, LPC_FILTERORDER + 1); ++ ++ levdurb(lp, temp, r, LPC_FILTERORDER); ++ bwexpand(lp2, lp, LPC_CHIRP_SYNTDENUM, LPC_FILTERORDER+1); ++ ++ a2lsf(lsf + k*LPC_FILTERORDER, lp2); ++ } ++ is=LPC_LOOKBACK+BLOCKL_MAX-iLBCenc_inst->blockl; ++ memmove(iLBCenc_inst->lpc_buffer, ++ iLBCenc_inst->lpc_buffer+LPC_LOOKBACK+BLOCKL_MAX-is, ++ is*sizeof(float)); ++} ++ ++/*----------------------------------------------------------------* ++ ++ ++ * lsf interpolator and conversion from lsf to a coefficients ++ * (subrutine to SimpleInterpolateLSF) ++ *---------------------------------------------------------------*/ ++ ++static void LSFinterpolate2a_enc( ++ float *a, /* (o) lpc coefficients */ ++ float *lsf1,/* (i) first set of lsf coefficients */ ++ float *lsf2,/* (i) second set of lsf coefficients */ ++ float coef, /* (i) weighting coefficient to use between ++ lsf1 and lsf2 */ ++ long length /* (i) length of coefficient vectors */ ++){ ++ float lsftmp[LPC_FILTERORDER]; ++ ++ interpolate(lsftmp, lsf1, lsf2, coef, length); ++ lsf2a(a, lsftmp); ++} ++ ++/*----------------------------------------------------------------* ++ * lsf interpolator (subrutine to LPCencode) ++ *---------------------------------------------------------------*/ ++ ++static void SimpleInterpolateLSF( ++ float *syntdenum, /* (o) the synthesis filter denominator ++ resulting from the quantized ++ interpolated lsf */ ++ float *weightdenum, /* (o) the weighting filter denominator ++ resulting from the unquantized ++ interpolated lsf */ ++ float *lsf, /* (i) the unquantized lsf coefficients */ ++ float *lsfdeq, /* (i) the dequantized lsf coefficients */ ++ float *lsfold, /* (i) the unquantized lsf coefficients of ++ the previous signal frame */ ++ float *lsfdeqold, /* (i) the dequantized lsf coefficients of ++ the previous signal frame */ ++ int length, /* (i) should equate LPC_FILTERORDER */ ++ iLBC_Enc_Inst_t *iLBCenc_inst ++ /* (i/o) the encoder state structure */ ++){ ++ int i, pos, lp_length; ++ float lp[LPC_FILTERORDER + 1], *lsf2, *lsfdeq2; ++ ++ lsf2 = lsf + length; ++ lsfdeq2 = lsfdeq + length; ++ lp_length = length + 1; ++ ++ if (iLBCenc_inst->mode==30) { ++ /* sub-frame 1: Interpolation between old and first ++ set of lsf coefficients */ ++ ++ LSFinterpolate2a_enc(lp, lsfdeqold, lsfdeq, ++ lsf_weightTbl_30ms[0], length); ++ memcpy(syntdenum,lp,lp_length*sizeof(float)); ++ LSFinterpolate2a_enc(lp, lsfold, lsf, ++ ++ ++ lsf_weightTbl_30ms[0], length); ++ bwexpand(weightdenum, lp, LPC_CHIRP_WEIGHTDENUM, lp_length); ++ ++ /* sub-frame 2 to 6: Interpolation between first ++ and second set of lsf coefficients */ ++ ++ pos = lp_length; ++ for (i = 1; i < iLBCenc_inst->nsub; i++) { ++ LSFinterpolate2a_enc(lp, lsfdeq, lsfdeq2, ++ lsf_weightTbl_30ms[i], length); ++ memcpy(syntdenum + pos,lp,lp_length*sizeof(float)); ++ ++ LSFinterpolate2a_enc(lp, lsf, lsf2, ++ lsf_weightTbl_30ms[i], length); ++ bwexpand(weightdenum + pos, lp, ++ LPC_CHIRP_WEIGHTDENUM, lp_length); ++ pos += lp_length; ++ } ++ } ++ else { ++ pos = 0; ++ for (i = 0; i < iLBCenc_inst->nsub; i++) { ++ LSFinterpolate2a_enc(lp, lsfdeqold, lsfdeq, ++ lsf_weightTbl_20ms[i], length); ++ memcpy(syntdenum+pos,lp,lp_length*sizeof(float)); ++ LSFinterpolate2a_enc(lp, lsfold, lsf, ++ lsf_weightTbl_20ms[i], length); ++ bwexpand(weightdenum+pos, lp, ++ LPC_CHIRP_WEIGHTDENUM, lp_length); ++ pos += lp_length; ++ } ++ } ++ ++ /* update memory */ ++ ++ if (iLBCenc_inst->mode==30) { ++ memcpy(lsfold, lsf2, length*sizeof(float)); ++ memcpy(lsfdeqold, lsfdeq2, length*sizeof(float)); ++ } ++ else { ++ memcpy(lsfold, lsf, length*sizeof(float)); ++ memcpy(lsfdeqold, lsfdeq, length*sizeof(float)); ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * lsf quantizer (subrutine to LPCencode) ++ *---------------------------------------------------------------*/ ++ ++static void SimplelsfQ( ++ float *lsfdeq, /* (o) dequantized lsf coefficients ++ (dimension FILTERORDER) */ ++ int *index, /* (o) quantization index */ ++ float *lsf, /* (i) the lsf coefficient vector to be ++ ++ ++ quantized (dimension FILTERORDER ) */ ++ int lpc_n /* (i) number of lsf sets to quantize */ ++){ ++ /* Quantize first LSF with memoryless split VQ */ ++ SplitVQ(lsfdeq, index, lsf, lsfCbTbl, LSF_NSPLIT, ++ dim_lsfCbTbl, size_lsfCbTbl); ++ ++ if (lpc_n==2) { ++ /* Quantize second LSF with memoryless split VQ */ ++ SplitVQ(lsfdeq + LPC_FILTERORDER, index + LSF_NSPLIT, ++ lsf + LPC_FILTERORDER, lsfCbTbl, LSF_NSPLIT, ++ dim_lsfCbTbl, size_lsfCbTbl); ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * lpc encoder ++ *---------------------------------------------------------------*/ ++ ++void LPCencode( ++ float *syntdenum, /* (i/o) synthesis filter coefficients ++ before/after encoding */ ++ float *weightdenum, /* (i/o) weighting denumerator ++ coefficients before/after ++ encoding */ ++ int *lsf_index, /* (o) lsf quantization index */ ++ float *data, /* (i) lsf coefficients to quantize */ ++ iLBC_Enc_Inst_t *iLBCenc_inst ++ /* (i/o) the encoder state structure */ ++){ ++ float lsf[LPC_FILTERORDER * LPC_N_MAX]; ++ float lsfdeq[LPC_FILTERORDER * LPC_N_MAX]; ++ int change=0; ++ ++ SimpleAnalysis(lsf, data, iLBCenc_inst); ++ SimplelsfQ(lsfdeq, lsf_index, lsf, iLBCenc_inst->lpc_n); ++ change=LSF_check(lsfdeq, LPC_FILTERORDER, iLBCenc_inst->lpc_n); ++ SimpleInterpolateLSF(syntdenum, weightdenum, ++ lsf, lsfdeq, iLBCenc_inst->lsfold, ++ iLBCenc_inst->lsfdeqold, LPC_FILTERORDER, iLBCenc_inst); ++} ++ ++ ++ +diff -druN codecs/ilbc.orig/LPCencode.h codecs/ilbc/LPCencode.h +--- codecs/ilbc.orig/LPCencode.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/LPCencode.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,29 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ LPCencode.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __iLBC_LPCENCOD_H ++#define __iLBC_LPCENCOD_H ++ ++void LPCencode( ++ float *syntdenum, /* (i/o) synthesis filter coefficients ++ before/after encoding */ ++ float *weightdenum, /* (i/o) weighting denumerator coefficients ++ before/after encoding */ ++ int *lsf_index, /* (o) lsf quantization index */ ++ float *data, /* (i) lsf coefficients to quantize */ ++ iLBC_Enc_Inst_t *iLBCenc_inst ++ /* (i/o) the encoder state structure */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/Makefile codecs/ilbc/Makefile +--- codecs/ilbc.orig/Makefile 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/Makefile 2007-10-29 15:12:16.000000000 -0700 +@@ -0,0 +1,20 @@ ++LIB=libilbc.a ++CFLAGS+=-fPIC ++ ++OBJS=anaFilter.o iCBSearch.o packing.o \ ++ constants.o gainquant.o iLBC_decode.o StateConstructW.o \ ++ createCB.o getCBvec.o iLBC_encode.o StateSearchW.o doCPLC.o \ ++ helpfun.o syntFilter.o enhancer.o hpInput.o LPCdecode.o \ ++ filter.o hpOutput.o LPCencode.o FrameClassify.o iCBConstruct.o lsf.o ++ ++include $(ASTTOPDIR)/Makefile.rules ++ ++all: $(LIB) ++ ++$(LIB): $(OBJS) ++ $(ECHO_PREFIX) echo " [AR] $^ -> $@" ++ $(CMD_PREFIX) $(AR) cr $@ $^ ++ $(CMD_PREFIX) $(RANLIB) $@ ++ ++clean: ++ rm -f $(LIB) *.o .*.d *.s *.i +diff -druN codecs/ilbc.orig/StateConstructW.c codecs/ilbc/StateConstructW.c +--- codecs/ilbc.orig/StateConstructW.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/StateConstructW.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,76 @@ ++ ++/****************************************************************** ++ ++ ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ StateConstructW.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include ++#include ++ ++#include "iLBC_define.h" ++#include "StateConstructW.h" ++#include "constants.h" ++#include "filter.h" ++ ++/*----------------------------------------------------------------* ++ * decoding of the start state ++ *---------------------------------------------------------------*/ ++ ++void StateConstructW( ++ int idxForMax, /* (i) 6-bit index for the quantization of ++ max amplitude */ ++ int *idxVec, /* (i) vector of quantization indexes */ ++ float *syntDenum, /* (i) synthesis filter denumerator */ ++ float *out, /* (o) the decoded state vector */ ++ int len /* (i) length of a state vector */ ++){ ++ float maxVal, tmpbuf[LPC_FILTERORDER+2*STATE_LEN], *tmp, ++ numerator[LPC_FILTERORDER+1]; ++ float foutbuf[LPC_FILTERORDER+2*STATE_LEN], *fout; ++ int k,tmpi; ++ ++ /* decoding of the maximum value */ ++ ++ maxVal = state_frgqTbl[idxForMax]; ++ maxVal = (float)pow(10,maxVal)/(float)4.5; ++ ++ /* initialization of buffers and coefficients */ ++ ++ memset(tmpbuf, 0, LPC_FILTERORDER*sizeof(float)); ++ memset(foutbuf, 0, LPC_FILTERORDER*sizeof(float)); ++ for (k=0; k ++#include ++ ++#include "iLBC_define.h" ++#include "StateSearchW.h" ++#include "constants.h" ++#include "filter.h" ++#include "helpfun.h" ++ ++/*----------------------------------------------------------------* ++ * predictive noise shaping encoding of scaled start state ++ * (subrutine for StateSearchW) ++ *---------------------------------------------------------------*/ ++ ++void AbsQuantW( ++ iLBC_Enc_Inst_t *iLBCenc_inst, ++ /* (i) Encoder instance */ ++ float *in, /* (i) vector to encode */ ++ float *syntDenum, /* (i) denominator of synthesis filter */ ++ float *weightDenum, /* (i) denominator of weighting filter */ ++ int *out, /* (o) vector of quantizer indexes */ ++ int len, /* (i) length of vector to encode and ++ vector of quantizer indexes */ ++ int state_first /* (i) position of start state in the ++ 80 vec */ ++){ ++ float *syntOut; ++ float syntOutBuf[LPC_FILTERORDER+STATE_SHORT_LEN_30MS]; ++ float toQ, xq; ++ int n; ++ int index; ++ ++ /* initialization of buffer for filtering */ ++ ++ memset(syntOutBuf, 0, LPC_FILTERORDER*sizeof(float)); ++ ++ ++ ++ /* initialization of pointer for filtering */ ++ ++ syntOut = &syntOutBuf[LPC_FILTERORDER]; ++ ++ /* synthesis and weighting filters on input */ ++ ++ if (state_first) { ++ AllPoleFilter (in, weightDenum, SUBL, LPC_FILTERORDER); ++ } else { ++ AllPoleFilter (in, weightDenum, ++ iLBCenc_inst->state_short_len-SUBL, ++ LPC_FILTERORDER); ++ } ++ ++ /* encoding loop */ ++ ++ for (n=0; nstate_short_len-SUBL))) { ++ syntDenum += (LPC_FILTERORDER+1); ++ weightDenum += (LPC_FILTERORDER+1); ++ ++ /* synthesis and weighting filters on input */ ++ AllPoleFilter (&in[n], weightDenum, len-n, ++ LPC_FILTERORDER); ++ ++ } ++ ++ /* prediction of synthesized and weighted input */ ++ ++ syntOut[n] = 0.0; ++ AllPoleFilter (&syntOut[n], weightDenum, 1, ++ LPC_FILTERORDER); ++ ++ /* quantization */ ++ ++ toQ = in[n]-syntOut[n]; ++ sort_sq(&xq, &index, toQ, state_sq3Tbl, 8); ++ out[n]=index; ++ syntOut[n] = state_sq3Tbl[out[n]]; ++ ++ /* update of the prediction filter */ ++ ++ ++ ++ AllPoleFilter(&syntOut[n], weightDenum, 1, ++ LPC_FILTERORDER); ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * encoding of start state ++ *---------------------------------------------------------------*/ ++ ++void StateSearchW( ++ iLBC_Enc_Inst_t *iLBCenc_inst, ++ /* (i) Encoder instance */ ++ float *residual,/* (i) target residual vector */ ++ float *syntDenum, /* (i) lpc synthesis filter */ ++ float *weightDenum, /* (i) weighting filter denuminator */ ++ int *idxForMax, /* (o) quantizer index for maximum ++ amplitude */ ++ int *idxVec, /* (o) vector of quantization indexes */ ++ int len, /* (i) length of all vectors */ ++ int state_first /* (i) position of start state in the ++ 80 vec */ ++){ ++ float dtmp, maxVal; ++ float tmpbuf[LPC_FILTERORDER+2*STATE_SHORT_LEN_30MS]; ++ float *tmp, numerator[1+LPC_FILTERORDER]; ++ float foutbuf[LPC_FILTERORDER+2*STATE_SHORT_LEN_30MS], *fout; ++ int k; ++ float qmax, scal; ++ ++ /* initialization of buffers and filter coefficients */ ++ ++ memset(tmpbuf, 0, LPC_FILTERORDER*sizeof(float)); ++ memset(foutbuf, 0, LPC_FILTERORDER*sizeof(float)); ++ for (k=0; k maxVal*maxVal){ ++ maxVal = fout[k]; ++ } ++ } ++ maxVal=(float)fabs(maxVal); ++ ++ /* encoding of the maximum amplitude value */ ++ ++ if (maxVal < 10.0) { ++ maxVal = 10.0; ++ } ++ maxVal = (float)log10(maxVal); ++ sort_sq(&dtmp, idxForMax, maxVal, state_frgqTbl, 64); ++ ++ /* decoding of the maximum amplitude representation value, ++ and corresponding scaling of start state */ ++ ++ maxVal=state_frgqTbl[*idxForMax]; ++ qmax = (float)pow(10,maxVal); ++ scal = (float)(4.5)/qmax; ++ for (k=0; k ++#include "anaFilter.h" ++#include "iLBC_define.h" ++ ++/*----------------------------------------------------------------* ++ * LP analysis filter. ++ ++ ++ *---------------------------------------------------------------*/ ++ ++void anaFilter( ++ float *In, /* (i) Signal to be filtered */ ++ float *a, /* (i) LP parameters */ ++ int len,/* (i) Length of signal */ ++ float *Out, /* (o) Filtered signal */ ++ float *mem /* (i/o) Filter state */ ++){ ++ int i, j; ++ float *po, *pi, *pm, *pa; ++ ++ po = Out; ++ ++ /* Filter first part using memory from past */ ++ ++ for (i=0; i ++#include ++ ++/*----------------------------------------------------------------* ++ * Construct an additional codebook vector by filtering the ++ * initial codebook buffer. This vector is then used to expand ++ * the codebook with an additional section. ++ *---------------------------------------------------------------*/ ++ ++void filteredCBvecs( ++ float *cbvectors, /* (o) Codebook vectors for the ++ higher section */ ++ float *mem, /* (i) Buffer to create codebook ++ vector from */ ++ int lMem /* (i) Length of buffer */ ++){ ++ int j, k; ++ float *pp, *pp1; ++ float tempbuff2[CB_MEML+CB_FILTERLEN]; ++ float *pos; ++ ++ memset(tempbuff2, 0, (CB_HALFFILTERLEN-1)*sizeof(float)); ++ memcpy(&tempbuff2[CB_HALFFILTERLEN-1], mem, lMem*sizeof(float)); ++ memset(&tempbuff2[lMem+CB_HALFFILTERLEN-1], 0, ++ (CB_HALFFILTERLEN+1)*sizeof(float)); ++ ++ /* Create codebook vector for higher section by filtering */ ++ ++ /* do filtering */ ++ pos=cbvectors; ++ memset(pos, 0, lMem*sizeof(float)); ++ for (k=0; k0.0) { ++ invenergy[tmpIndex]=(float)1.0/(energy[tmpIndex]+EPS); ++ } else { ++ invenergy[tmpIndex] = (float) 0.0; ++ } ++ ++ if (stage==0) { ++ measure = (float)-10000000.0; ++ ++ if (crossDot > 0.0) { ++ measure = crossDot*crossDot*invenergy[tmpIndex]; ++ } ++ } ++ else { ++ measure = crossDot*crossDot*invenergy[tmpIndex]; ++ } ++ ++ /* check if measure is better */ ++ ftmp = crossDot*invenergy[tmpIndex]; ++ ++ if ((measure>*max_measure) && (fabs(ftmp) ++#include ++#include ++ ++#include "iLBC_define.h" ++#include "doCPLC.h" ++ ++/*----------------------------------------------------------------* ++ * Compute cross correlation and pitch gain for pitch prediction ++ * of last subframe at given lag. ++ *---------------------------------------------------------------*/ ++ ++static void compCorr( ++ float *cc, /* (o) cross correlation coefficient */ ++ float *gc, /* (o) gain */ ++ float *pm, ++ float *buffer, /* (i) signal buffer */ ++ int lag, /* (i) pitch lag */ ++ int bLen, /* (i) length of buffer */ ++ int sRange /* (i) correlation search length */ ++){ ++ ++ ++ int i; ++ float ftmp1, ftmp2, ftmp3; ++ ++ /* Guard against getting outside buffer */ ++ if ((bLen-sRange-lag)<0) { ++ sRange=bLen-lag; ++ } ++ ++ ftmp1 = 0.0; ++ ftmp2 = 0.0; ++ ftmp3 = 0.0; ++ for (i=0; i 0.0) { ++ *cc = ftmp1*ftmp1/ftmp2; ++ *gc = (float)fabs(ftmp1/ftmp2); ++ *pm=(float)fabs(ftmp1)/ ++ ((float)sqrt(ftmp2)*(float)sqrt(ftmp3)); ++ } ++ else { ++ *cc = 0.0; ++ *gc = 0.0; ++ *pm=0.0; ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * Packet loss concealment routine. Conceals a residual signal ++ * and LP parameters. If no packet loss, update state. ++ *---------------------------------------------------------------*/ ++ ++void doThePLC( ++ float *PLCresidual, /* (o) concealed residual */ ++ float *PLClpc, /* (o) concealed LP parameters */ ++ int PLI, /* (i) packet loss indicator ++ 0 - no PL, 1 = PL */ ++ float *decresidual, /* (i) decoded residual */ ++ float *lpc, /* (i) decoded LPC (only used for no PL) */ ++ int inlag, /* (i) pitch lag */ ++ iLBC_Dec_Inst_t *iLBCdec_inst ++ /* (i/o) decoder instance */ ++){ ++ int lag=20, randlag; ++ float gain, maxcc; ++ float use_gain; ++ float gain_comp, maxcc_comp, per, max_per; ++ int i, pick, use_lag; ++ ++ ++ float ftmp, randvec[BLOCKL_MAX], pitchfact, energy; ++ ++ /* Packet Loss */ ++ ++ if (PLI == 1) { ++ ++ iLBCdec_inst->consPLICount += 1; ++ ++ /* if previous frame not lost, ++ determine pitch pred. gain */ ++ ++ if (iLBCdec_inst->prevPLI != 1) { ++ ++ /* Search around the previous lag to find the ++ best pitch period */ ++ ++ lag=inlag-3; ++ compCorr(&maxcc, &gain, &max_per, ++ iLBCdec_inst->prevResidual, ++ lag, iLBCdec_inst->blockl, 60); ++ for (i=inlag-2;i<=inlag+3;i++) { ++ compCorr(&maxcc_comp, &gain_comp, &per, ++ iLBCdec_inst->prevResidual, ++ i, iLBCdec_inst->blockl, 60); ++ ++ if (maxcc_comp>maxcc) { ++ maxcc=maxcc_comp; ++ gain=gain_comp; ++ lag=i; ++ max_per=per; ++ } ++ } ++ ++ } ++ ++ /* previous frame lost, use recorded lag and periodicity */ ++ ++ else { ++ lag=iLBCdec_inst->prevLag; ++ max_per=iLBCdec_inst->per; ++ } ++ ++ /* downscaling */ ++ ++ use_gain=1.0; ++ if (iLBCdec_inst->consPLICount*iLBCdec_inst->blockl>320) ++ use_gain=(float)0.9; ++ else if (iLBCdec_inst->consPLICount* ++ iLBCdec_inst->blockl>2*320) ++ use_gain=(float)0.7; ++ else if (iLBCdec_inst->consPLICount* ++ iLBCdec_inst->blockl>3*320) ++ use_gain=(float)0.5; ++ else if (iLBCdec_inst->consPLICount* ++ ++ ++ iLBCdec_inst->blockl>4*320) ++ use_gain=(float)0.0; ++ ++ /* mix noise and pitch repeatition */ ++ ftmp=(float)sqrt(max_per); ++ if (ftmp>(float)0.7) ++ pitchfact=(float)1.0; ++ else if (ftmp>(float)0.4) ++ pitchfact=(ftmp-(float)0.4)/((float)0.7-(float)0.4); ++ else ++ pitchfact=0.0; ++ ++ ++ /* avoid repetition of same pitch cycle */ ++ use_lag=lag; ++ if (lag<80) { ++ use_lag=2*lag; ++ } ++ ++ /* compute concealed residual */ ++ ++ energy = 0.0; ++ for (i=0; iblockl; i++) { ++ ++ /* noise component */ ++ ++ iLBCdec_inst->seed=(iLBCdec_inst->seed*69069L+1) & ++ (0x80000000L-1); ++ randlag = 50 + ((signed long) iLBCdec_inst->seed)%70; ++ pick = i - randlag; ++ ++ if (pick < 0) { ++ randvec[i] = ++ iLBCdec_inst->prevResidual[ ++ iLBCdec_inst->blockl+pick]; ++ } else { ++ randvec[i] = randvec[pick]; ++ } ++ ++ /* pitch repeatition component */ ++ pick = i - use_lag; ++ ++ if (pick < 0) { ++ PLCresidual[i] = ++ iLBCdec_inst->prevResidual[ ++ iLBCdec_inst->blockl+pick]; ++ } else { ++ PLCresidual[i] = PLCresidual[pick]; ++ } ++ ++ /* mix random and periodicity component */ ++ ++ if (i<80) ++ PLCresidual[i] = use_gain*(pitchfact * ++ ++ ++ PLCresidual[i] + ++ ((float)1.0 - pitchfact) * randvec[i]); ++ else if (i<160) ++ PLCresidual[i] = (float)0.95*use_gain*(pitchfact * ++ PLCresidual[i] + ++ ((float)1.0 - pitchfact) * randvec[i]); ++ else ++ PLCresidual[i] = (float)0.9*use_gain*(pitchfact * ++ PLCresidual[i] + ++ ((float)1.0 - pitchfact) * randvec[i]); ++ ++ energy += PLCresidual[i] * PLCresidual[i]; ++ } ++ ++ /* less than 30 dB, use only noise */ ++ ++ if (sqrt(energy/(float)iLBCdec_inst->blockl) < 30.0) { ++ gain=0.0; ++ for (i=0; iblockl; i++) { ++ PLCresidual[i] = randvec[i]; ++ } ++ } ++ ++ /* use old LPC */ ++ ++ memcpy(PLClpc,iLBCdec_inst->prevLpc, ++ (LPC_FILTERORDER+1)*sizeof(float)); ++ ++ } ++ ++ /* no packet loss, copy input */ ++ ++ else { ++ memcpy(PLCresidual, decresidual, ++ iLBCdec_inst->blockl*sizeof(float)); ++ memcpy(PLClpc, lpc, (LPC_FILTERORDER+1)*sizeof(float)); ++ iLBCdec_inst->consPLICount = 0; ++ } ++ ++ /* update state */ ++ ++ if (PLI) { ++ iLBCdec_inst->prevLag = lag; ++ iLBCdec_inst->per=max_per; ++ } ++ ++ iLBCdec_inst->prevPLI = PLI; ++ memcpy(iLBCdec_inst->prevLpc, PLClpc, ++ (LPC_FILTERORDER+1)*sizeof(float)); ++ memcpy(iLBCdec_inst->prevResidual, PLCresidual, ++ iLBCdec_inst->blockl*sizeof(float)); ++} ++ ++ ++ ++ +diff -druN codecs/ilbc.orig/doCPLC.h codecs/ilbc/doCPLC.h +--- codecs/ilbc.orig/doCPLC.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/doCPLC.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,32 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ doCPLC.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++ ++ ++******************************************************************/ ++ ++#ifndef __iLBC_DOLPC_H ++#define __iLBC_DOLPC_H ++ ++void doThePLC( ++ float *PLCresidual, /* (o) concealed residual */ ++ float *PLClpc, /* (o) concealed LP parameters */ ++ int PLI, /* (i) packet loss indicator ++ 0 - no PL, 1 = PL */ ++ float *decresidual, /* (i) decoded residual */ ++ float *lpc, /* (i) decoded LPC (only used for no PL) */ ++ int inlag, /* (i) pitch lag */ ++ iLBC_Dec_Inst_t *iLBCdec_inst ++ /* (i/o) decoder instance */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/enhancer.c codecs/ilbc/enhancer.c +--- codecs/ilbc.orig/enhancer.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/enhancer.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,665 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ enhancer.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include ++#include ++#include "iLBC_define.h" ++#include "enhancer.h" ++#include "constants.h" ++#include "filter.h" ++ ++/*----------------------------------------------------------------* ++ ++ ++ * Find index in array such that the array element with said ++ * index is the element of said array closest to "value" ++ * according to the squared-error criterion ++ *---------------------------------------------------------------*/ ++ ++static void NearestNeighbor( ++ int *index, /* (o) index of array element closest ++ to value */ ++ float *array, /* (i) data array */ ++ float value,/* (i) value */ ++ int arlength/* (i) dimension of data array */ ++){ ++ int i; ++ float bestcrit,crit; ++ ++ crit=array[0]-value; ++ bestcrit=crit*crit; ++ *index=0; ++ for (i=1; i dim1 ) { ++ hfl2=(int) (dim1/2); ++ for (j=0; j= idatal) { ++ searchSegEndPos=idatal-ENH_BLOCKL-1; ++ } ++ corrdim=searchSegEndPos-searchSegStartPos+1; ++ ++ /* compute upsampled correlation (corr33) and find ++ location of max */ ++ ++ mycorr1(corrVec,idata+searchSegStartPos, ++ corrdim+ENH_BLOCKL-1,idata+centerStartPos,ENH_BLOCKL); ++ enh_upsample(corrVecUps,corrVec,corrdim,ENH_FL0); ++ tloc=0; maxv=corrVecUps[0]; ++ for (i=1; imaxv) { ++ tloc=i; ++ maxv=corrVecUps[i]; ++ } ++ } ++ ++ /* make vector can be upsampled without ever running outside ++ bounds */ ++ ++ *updStartPos= (float)searchSegStartPos + ++ (float)tloc/(float)ENH_UPS0+(float)1.0; ++ tloc2=(int)(tloc/ENH_UPS0); ++ ++ if (tloc>tloc2*ENH_UPS0) { ++ tloc2++; ++ } ++ st=searchSegStartPos+tloc2-ENH_FL0; ++ ++ if (st<0) { ++ memset(vect,0,-st*sizeof(float)); ++ memcpy(&vect[-st],idata, (ENH_VECTL+st)*sizeof(float)); ++ } ++ else { ++ en=st+ENH_VECTL; ++ ++ if (en>idatal) { ++ memcpy(vect, &idata[st], ++ (ENH_VECTL-(en-idatal))*sizeof(float)); ++ memset(&vect[ENH_VECTL-(en-idatal)], 0, ++ (en-idatal)*sizeof(float)); ++ } ++ else { ++ memcpy(vect, &idata[st], ENH_VECTL*sizeof(float)); ++ } ++ } ++ fraction=tloc2*ENH_UPS0-tloc; ++ ++ /* compute the segment (this is actually a convolution) */ ++ ++ mycorr1(seg,vect,ENH_VECTL,polyphaserTbl+(2*ENH_FL0+1)*fraction, ++ ++ ++ 2*ENH_FL0+1); ++} ++ ++/*----------------------------------------------------------------* ++ * find the smoothed output data ++ *---------------------------------------------------------------*/ ++ ++static void smath( ++ float *odata, /* (o) smoothed output */ ++ float *sseq,/* (i) said second sequence of waveforms */ ++ int hl, /* (i) 2*hl+1 is sseq dimension */ ++ float alpha0/* (i) max smoothing energy fraction */ ++){ ++ int i,k; ++ float w00,w10,w11,A,B,C,*psseq,err,errs; ++ float surround[BLOCKL_MAX]; /* shape contributed by other than ++ current */ ++ float wt[2*ENH_HL+1]; /* waveform weighting to get ++ surround shape */ ++ float denom; ++ ++ /* create shape of contribution from all waveforms except the ++ current one */ ++ ++ for (i=1; i<=2*hl+1; i++) { ++ wt[i-1] = (float)0.5*(1 - (float)cos(2*PI*i/(2*hl+2))); ++ } ++ wt[hl]=0.0; /* for clarity, not used */ ++ for (i=0; i alpha0 * w00) { ++ if ( w00 < 1) { ++ w00=1; ++ } ++ denom = (w11*w00-w10*w10)/(w00*w00); ++ ++ if (denom > 0.0001) { /* eliminates numerical problems ++ for if smooth */ ++ A = (float)sqrt( (alpha0- alpha0*alpha0/4)/denom); ++ B = -alpha0/2 - A * w10/w00; ++ B = B+1; ++ } ++ else { /* essentially no difference between cycles; ++ smoothing not needed */ ++ A= 0.0; ++ B= 1.0; ++ } ++ ++ /* create smoothed sequence */ ++ ++ psseq=sseq+hl*ENH_BLOCKL; ++ for (i=0; i=0; q--) { ++ blockStartPos[q]=blockStartPos[q+1]-period[lagBlock[q+1]]; ++ NearestNeighbor(lagBlock+q,plocs, ++ blockStartPos[q]+ ++ ENH_BLOCKL_HALF-period[lagBlock[q+1]], periodl); ++ ++ ++ if (blockStartPos[q]-ENH_OVERHANG>=0) { ++ refiner(sseq+q*ENH_BLOCKL, blockStartPos+q, idata, ++ idatal, centerStartPos, blockStartPos[q], ++ period[lagBlock[q+1]]); ++ } else { ++ psseq=sseq+q*ENH_BLOCKL; ++ memset(psseq, 0, ENH_BLOCKL*sizeof(float)); ++ } ++ } ++ ++ /* future */ ++ ++ for (i=0; i 0.0) { ++ return (float)(ftmp1*ftmp1/ftmp2); ++ } ++ else { ++ return (float)0.0; ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * interface for enhancer ++ *---------------------------------------------------------------*/ ++ ++int enhancerInterface( ++ float *out, /* (o) enhanced signal */ ++ float *in, /* (i) unenhanced signal */ ++ iLBC_Dec_Inst_t *iLBCdec_inst /* (i) buffers etc */ ++){ ++ float *enh_buf, *enh_period; ++ int iblock, isample; ++ int lag=0, ilag, i, ioffset; ++ float cc, maxcc; ++ float ftmp1, ftmp2; ++ float *inPtr, *enh_bufPtr1, *enh_bufPtr2; ++ float plc_pred[ENH_BLOCKL]; ++ ++ float lpState[6], downsampled[(ENH_NBLOCKS*ENH_BLOCKL+120)/2]; ++ int inLen=ENH_NBLOCKS*ENH_BLOCKL+120; ++ int start, plc_blockl, inlag; ++ ++ enh_buf=iLBCdec_inst->enh_buf; ++ enh_period=iLBCdec_inst->enh_period; ++ ++ memmove(enh_buf, &enh_buf[iLBCdec_inst->blockl], ++ (ENH_BUFL-iLBCdec_inst->blockl)*sizeof(float)); ++ ++ memcpy(&enh_buf[ENH_BUFL-iLBCdec_inst->blockl], in, ++ iLBCdec_inst->blockl*sizeof(float)); ++ ++ if (iLBCdec_inst->mode==30) ++ plc_blockl=ENH_BLOCKL; ++ else ++ plc_blockl=40; ++ ++ /* when 20 ms frame, move processing one block */ ++ ioffset=0; ++ if (iLBCdec_inst->mode==20) ioffset=1; ++ ++ i=3-ioffset; ++ memmove(enh_period, &enh_period[i], ++ ++ ++ (ENH_NBLOCKS_TOT-i)*sizeof(float)); ++ ++ /* Set state information to the 6 samples right before ++ the samples to be downsampled. */ ++ ++ memcpy(lpState, ++ enh_buf+(ENH_NBLOCKS_EXTRA+ioffset)*ENH_BLOCKL-126, ++ 6*sizeof(float)); ++ ++ /* Down sample a factor 2 to save computations */ ++ ++ DownSample(enh_buf+(ENH_NBLOCKS_EXTRA+ioffset)*ENH_BLOCKL-120, ++ lpFilt_coefsTbl, inLen-ioffset*ENH_BLOCKL, ++ lpState, downsampled); ++ ++ /* Estimate the pitch in the down sampled domain. */ ++ for (iblock = 0; iblock maxcc) { ++ maxcc = cc; ++ lag = ilag; ++ } ++ } ++ ++ /* Store the estimated lag in the non-downsampled domain */ ++ enh_period[iblock+ENH_NBLOCKS_EXTRA+ioffset] = (float)lag*2; ++ ++ ++ } ++ ++ ++ /* PLC was performed on the previous packet */ ++ if (iLBCdec_inst->prev_enh_pl==1) { ++ ++ inlag=(int)enh_period[ENH_NBLOCKS_EXTRA+ioffset]; ++ ++ lag = inlag-1; ++ maxcc = xCorrCoef(in, in+lag, plc_blockl); ++ for (ilag=inlag; ilag<=inlag+1; ilag++) { ++ cc = xCorrCoef(in, in+ilag, plc_blockl); ++ ++ if (cc > maxcc) { ++ maxcc = cc; ++ lag = ilag; ++ } ++ } ++ ++ ++ ++ enh_period[ENH_NBLOCKS_EXTRA+ioffset-1]=(float)lag; ++ ++ /* compute new concealed residual for the old lookahead, ++ mix the forward PLC with a backward PLC from ++ the new frame */ ++ ++ inPtr=&in[lag-1]; ++ ++ enh_bufPtr1=&plc_pred[plc_blockl-1]; ++ ++ if (lag>plc_blockl) { ++ start=plc_blockl; ++ } else { ++ start=lag; ++ } ++ ++ for (isample = start; isample>0; isample--) { ++ *enh_bufPtr1-- = *inPtr--; ++ } ++ ++ enh_bufPtr2=&enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl]; ++ for (isample = (plc_blockl-1-lag); isample>=0; isample--) ++{ ++ *enh_bufPtr1-- = *enh_bufPtr2--; ++ } ++ ++ /* limit energy change */ ++ ftmp2=0.0; ++ ftmp1=0.0; ++ for (i=0;iblockl-i]* ++ enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl-i]; ++ ftmp1+=plc_pred[i]*plc_pred[i]; ++ } ++ ftmp1=(float)sqrt(ftmp1/(float)plc_blockl); ++ ftmp2=(float)sqrt(ftmp2/(float)plc_blockl); ++ if (ftmp1>(float)2.0*ftmp2 && ftmp1>0.0) { ++ for (i=0;iblockl]; ++ for (i=0; imode==20) { ++ /* Enhancer with 40 samples delay */ ++ for (iblock = 0; iblock<2; iblock++) { ++ enhancer(out+iblock*ENH_BLOCKL, enh_buf, ++ ENH_BUFL, (5+iblock)*ENH_BLOCKL+40, ++ ENH_ALPHA0, enh_period, enh_plocsTbl, ++ ENH_NBLOCKS_TOT); ++ } ++ } else if (iLBCdec_inst->mode==30) { ++ /* Enhancer with 80 samples delay */ ++ for (iblock = 0; iblock<3; iblock++) { ++ enhancer(out+iblock*ENH_BLOCKL, enh_buf, ++ ENH_BUFL, (4+iblock)*ENH_BLOCKL, ++ ENH_ALPHA0, enh_period, enh_plocsTbl, ++ ENH_NBLOCKS_TOT); ++ } ++ } ++ ++ return (lag*2); ++} ++ ++ +diff -druN codecs/ilbc.orig/enhancer.h codecs/ilbc/enhancer.h +--- codecs/ilbc.orig/enhancer.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/enhancer.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,33 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ enhancer.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __ENHANCER_H ++#define __ENHANCER_H ++ ++#include "iLBC_define.h" ++ ++float xCorrCoef( ++ float *target, /* (i) first array */ ++ float *regressor, /* (i) second array */ ++ int subl /* (i) dimension arrays */ ++); ++ ++int enhancerInterface( ++ float *out, /* (o) the enhanced recidual signal */ ++ float *in, /* (i) the recidual signal to enhance */ ++ iLBC_Dec_Inst_t *iLBCdec_inst ++ /* (i/o) the decoder state structure */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/filter.c codecs/ilbc/filter.c +--- codecs/ilbc.orig/filter.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/filter.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,168 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ filter.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++ ++ ++#include "iLBC_define.h" ++#include "filter.h" ++ ++/*----------------------------------------------------------------* ++ * all-pole filter ++ *---------------------------------------------------------------*/ ++ ++void AllPoleFilter( ++ float *InOut, /* (i/o) on entrance InOut[-orderCoef] to ++ InOut[-1] contain the state of the ++ filter (delayed samples). InOut[0] to ++ InOut[lengthInOut-1] contain the filter ++ input, on en exit InOut[-orderCoef] to ++ InOut[-1] is unchanged and InOut[0] to ++ InOut[lengthInOut-1] contain filtered ++ samples */ ++ float *Coef,/* (i) filter coefficients, Coef[0] is assumed ++ to be 1.0 */ ++ int lengthInOut,/* (i) number of input/output samples */ ++ int orderCoef /* (i) number of filter coefficients */ ++){ ++ int n,k; ++ ++ for(n=0;n ++#include ++#include "constants.h" ++#include "gainquant.h" ++#include "filter.h" ++ ++/*----------------------------------------------------------------* ++ * quantizer for the gain in the gain-shape coding of residual ++ *---------------------------------------------------------------*/ ++ ++float gainquant(/* (o) quantized gain value */ ++ float in, /* (i) gain value */ ++ float maxIn,/* (i) maximum of gain value */ ++ int cblen, /* (i) number of quantization indices */ ++ int *index /* (o) quantization index */ ++){ ++ int i, tindex; ++ float minmeasure,measure, *cb, scale; ++ ++ /* ensure a lower bound on the scaling factor */ ++ ++ scale=maxIn; ++ ++ if (scale<0.1) { ++ scale=(float)0.1; ++ } ++ ++ /* select the quantization table */ ++ ++ if (cblen == 8) { ++ cb = gain_sq3Tbl; ++ } else if (cblen == 16) { ++ cb = gain_sq4Tbl; ++ } else { ++ cb = gain_sq5Tbl; ++ } ++ ++ /* select the best index in the quantization table */ ++ ++ minmeasure=10000000.0; ++ tindex=0; ++ for (i=0; i ++ ++/*----------------------------------------------------------------* ++ * Construct codebook vector for given index. ++ *---------------------------------------------------------------*/ ++ ++void getCBvec( ++ float *cbvec, /* (o) Constructed codebook vector */ ++ float *mem, /* (i) Codebook buffer */ ++ int index, /* (i) Codebook index */ ++ int lMem, /* (i) Length of codebook buffer */ ++ int cbveclen/* (i) Codebook vector length */ ++){ ++ int j, k, n, memInd, sFilt; ++ float tmpbuf[CB_MEML]; ++ int base_size; ++ int ilow, ihigh; ++ float alfa, alfa1; ++ ++ /* Determine size of codebook sections */ ++ ++ base_size=lMem-cbveclen+1; ++ ++ if (cbveclen==SUBL) { ++ base_size+=cbveclen/2; ++ } ++ ++ /* No filter -> First codebook section */ ++ ++ ++ ++ if (index ++ ++#include "iLBC_define.h" ++#include "helpfun.h" ++#include "constants.h" ++ ++/*----------------------------------------------------------------* ++ * calculation of auto correlation ++ *---------------------------------------------------------------*/ ++ ++void autocorr( ++ float *r, /* (o) autocorrelation vector */ ++ const float *x, /* (i) data vector */ ++ int N, /* (i) length of data vector */ ++ int order /* largest lag for calculated ++ autocorrelations */ ++){ ++ int lag, n; ++ float sum; ++ ++ for (lag = 0; lag <= order; lag++) { ++ sum = 0; ++ for (n = 0; n < N - lag; n++) { ++ sum += x[n] * x[n+lag]; ++ } ++ r[lag] = sum; ++ } ++} ++ ++ ++ ++/*----------------------------------------------------------------* ++ * window multiplication ++ *---------------------------------------------------------------*/ ++ ++void window( ++ float *z, /* (o) the windowed data */ ++ const float *x, /* (i) the original data vector */ ++ const float *y, /* (i) the window */ ++ int N /* (i) length of all vectors */ ++){ ++ int i; ++ ++ for (i = 0; i < N; i++) { ++ z[i] = x[i] * y[i]; ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * levinson-durbin solution for lpc coefficients ++ *---------------------------------------------------------------*/ ++ ++void levdurb( ++ float *a, /* (o) lpc coefficient vector starting ++ with 1.0 */ ++ float *k, /* (o) reflection coefficients */ ++ float *r, /* (i) autocorrelation vector */ ++ int order /* (i) order of lpc filter */ ++){ ++ float sum, alpha; ++ int m, m_h, i; ++ ++ a[0] = 1.0; ++ ++ if (r[0] < EPS) { /* if r[0] <= 0, set LPC coeff. to zero */ ++ for (i = 0; i < order; i++) { ++ k[i] = 0; ++ a[i+1] = 0; ++ } ++ } else { ++ a[1] = k[0] = -r[1]/r[0]; ++ alpha = r[0] + r[1] * k[0]; ++ for (m = 1; m < order; m++){ ++ sum = r[m + 1]; ++ for (i = 0; i < m; i++){ ++ sum += a[i+1] * r[m - i]; ++ } ++ k[m] = -sum / alpha; ++ alpha += k[m] * sum; ++ m_h = (m + 1) >> 1; ++ for (i = 0; i < m_h; i++){ ++ sum = a[i+1] + k[m] * a[m - i]; ++ a[m - i] += k[m] * a[i+1]; ++ a[i+1] = sum; ++ ++ ++ } ++ a[m+1] = k[m]; ++ } ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * interpolation between vectors ++ *---------------------------------------------------------------*/ ++ ++void interpolate( ++ float *out, /* (o) the interpolated vector */ ++ float *in1, /* (i) the first vector for the ++ interpolation */ ++ float *in2, /* (i) the second vector for the ++ interpolation */ ++ float coef, /* (i) interpolation weights */ ++ int length /* (i) length of all vectors */ ++){ ++ int i; ++ float invcoef; ++ ++ invcoef = (float)1.0 - coef; ++ for (i = 0; i < length; i++) { ++ out[i] = coef * in1[i] + invcoef * in2[i]; ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * lpc bandwidth expansion ++ *---------------------------------------------------------------*/ ++ ++void bwexpand( ++ float *out, /* (o) the bandwidth expanded lpc ++ coefficients */ ++ float *in, /* (i) the lpc coefficients before bandwidth ++ expansion */ ++ float coef, /* (i) the bandwidth expansion factor */ ++ int length /* (i) the length of lpc coefficient vectors */ ++){ ++ int i; ++ float chirp; ++ ++ chirp = coef; ++ ++ out[0] = in[0]; ++ for (i = 1; i < length; i++) { ++ out[i] = chirp * in[i]; ++ chirp *= coef; ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * vector quantization ++ ++ ++ *---------------------------------------------------------------*/ ++ ++void vq( ++ float *Xq, /* (o) the quantized vector */ ++ int *index, /* (o) the quantization index */ ++ const float *CB,/* (i) the vector quantization codebook */ ++ float *X, /* (i) the vector to quantize */ ++ int n_cb, /* (i) the number of vectors in the codebook */ ++ int dim /* (i) the dimension of all vectors */ ++){ ++ int i, j; ++ int pos, minindex; ++ float dist, tmp, mindist; ++ ++ pos = 0; ++ mindist = FLOAT_MAX; ++ minindex = 0; ++ for (j = 0; j < n_cb; j++) { ++ dist = X[0] - CB[pos]; ++ dist *= dist; ++ for (i = 1; i < dim; i++) { ++ tmp = X[i] - CB[pos + i]; ++ dist += tmp*tmp; ++ } ++ ++ if (dist < mindist) { ++ mindist = dist; ++ minindex = j; ++ } ++ pos += dim; ++ } ++ for (i = 0; i < dim; i++) { ++ Xq[i] = CB[minindex*dim + i]; ++ } ++ *index = minindex; ++} ++ ++/*----------------------------------------------------------------* ++ * split vector quantization ++ *---------------------------------------------------------------*/ ++ ++void SplitVQ( ++ float *qX, /* (o) the quantized vector */ ++ int *index, /* (o) a vector of indexes for all vector ++ codebooks in the split */ ++ float *X, /* (i) the vector to quantize */ ++ const float *CB,/* (i) the quantizer codebook */ ++ int nsplit, /* the number of vector splits */ ++ const int *dim, /* the dimension of X and qX */ ++ const int *cbsize /* the number of vectors in the codebook */ ++){ ++ int cb_pos, X_pos, i; ++ ++ cb_pos = 0; ++ ++ ++ X_pos= 0; ++ for (i = 0; i < nsplit; i++) { ++ vq(qX + X_pos, index + i, CB + cb_pos, X + X_pos, ++ cbsize[i], dim[i]); ++ X_pos += dim[i]; ++ cb_pos += dim[i] * cbsize[i]; ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * scalar quantization ++ *---------------------------------------------------------------*/ ++ ++void sort_sq( ++ float *xq, /* (o) the quantized value */ ++ int *index, /* (o) the quantization index */ ++ float x, /* (i) the value to quantize */ ++ const float *cb,/* (i) the quantization codebook */ ++ int cb_size /* (i) the size of the quantization codebook */ ++){ ++ int i; ++ ++ if (x <= cb[0]) { ++ *index = 0; ++ *xq = cb[0]; ++ } else { ++ i = 0; ++ while ((x > cb[i]) && i < cb_size - 1) { ++ i++; ++ } ++ ++ if (x > ((cb[i] + cb[i - 1])/2)) { ++ *index = i; ++ *xq = cb[i]; ++ } else { ++ *index = i - 1; ++ *xq = cb[i - 1]; ++ } ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * check for stability of lsf coefficients ++ *---------------------------------------------------------------*/ ++ ++int LSF_check( /* (o) 1 for stable lsf vectors and 0 for ++ nonstable ones */ ++ float *lsf, /* (i) a table of lsf vectors */ ++ int dim, /* (i) the dimension of each lsf vector */ ++ int NoAn /* (i) the number of lsf vectors in the ++ table */ ++){ ++ int k,n,m, Nit=2, change=0,pos; ++ float tmp; ++ ++ ++ static float eps=(float)0.039; /* 50 Hz */ ++ static float eps2=(float)0.0195; ++ static float maxlsf=(float)3.14; /* 4000 Hz */ ++ static float minlsf=(float)0.01; /* 0 Hz */ ++ ++ /* LSF separation check*/ ++ ++ for (n=0; nmaxlsf) { ++ lsf[pos]=maxlsf; ++ change=1; ++ } ++ } ++ } ++ } ++ ++ return change; ++} ++ ++ +diff -druN codecs/ilbc.orig/helpfun.h codecs/ilbc/helpfun.h +--- codecs/ilbc.orig/helpfun.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/helpfun.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,101 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ helpfun.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __iLBC_HELPFUN_H ++#define __iLBC_HELPFUN_H ++ ++void autocorr( ++ float *r, /* (o) autocorrelation vector */ ++ const float *x, /* (i) data vector */ ++ int N, /* (i) length of data vector */ ++ int order /* largest lag for calculated ++ autocorrelations */ ++); ++ ++void window( ++ float *z, /* (o) the windowed data */ ++ const float *x, /* (i) the original data vector */ ++ const float *y, /* (i) the window */ ++ int N /* (i) length of all vectors */ ++); ++ ++ ++ ++void levdurb( ++ float *a, /* (o) lpc coefficient vector starting ++ with 1.0 */ ++ float *k, /* (o) reflection coefficients */ ++ float *r, /* (i) autocorrelation vector */ ++ int order /* (i) order of lpc filter */ ++); ++ ++void interpolate( ++ float *out, /* (o) the interpolated vector */ ++ float *in1, /* (i) the first vector for the ++ interpolation */ ++ float *in2, /* (i) the second vector for the ++ interpolation */ ++ float coef, /* (i) interpolation weights */ ++ int length /* (i) length of all vectors */ ++); ++ ++void bwexpand( ++ float *out, /* (o) the bandwidth expanded lpc ++ coefficients */ ++ float *in, /* (i) the lpc coefficients before bandwidth ++ expansion */ ++ float coef, /* (i) the bandwidth expansion factor */ ++ int length /* (i) the length of lpc coefficient vectors */ ++); ++ ++void vq( ++ float *Xq, /* (o) the quantized vector */ ++ int *index, /* (o) the quantization index */ ++ const float *CB,/* (i) the vector quantization codebook */ ++ float *X, /* (i) the vector to quantize */ ++ int n_cb, /* (i) the number of vectors in the codebook */ ++ int dim /* (i) the dimension of all vectors */ ++); ++ ++void SplitVQ( ++ float *qX, /* (o) the quantized vector */ ++ int *index, /* (o) a vector of indexes for all vector ++ codebooks in the split */ ++ float *X, /* (i) the vector to quantize */ ++ const float *CB,/* (i) the quantizer codebook */ ++ int nsplit, /* the number of vector splits */ ++ const int *dim, /* the dimension of X and qX */ ++ const int *cbsize /* the number of vectors in the codebook */ ++); ++ ++ ++void sort_sq( ++ float *xq, /* (o) the quantized value */ ++ int *index, /* (o) the quantization index */ ++ float x, /* (i) the value to quantize */ ++ const float *cb,/* (i) the quantization codebook */ ++ ++ ++ int cb_size /* (i) the size of the quantization codebook */ ++); ++ ++int LSF_check( /* (o) 1 for stable lsf vectors and 0 for ++ nonstable ones */ ++ float *lsf, /* (i) a table of lsf vectors */ ++ int dim, /* (i) the dimension of each lsf vector */ ++ int NoAn /* (i) the number of lsf vectors in the ++ table */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/hpInput.c codecs/ilbc/hpInput.c +--- codecs/ilbc.orig/hpInput.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/hpInput.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,60 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ hpInput.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include "constants.h" ++#include "hpInput.h" ++ ++/*----------------------------------------------------------------* ++ * Input high-pass filter ++ *---------------------------------------------------------------*/ ++ ++void hpInput( ++ float *In, /* (i) vector to filter */ ++ int len, /* (i) length of vector to filter */ ++ float *Out, /* (o) the resulting filtered vector */ ++ float *mem /* (i/o) the filter state */ ++){ ++ int i; ++ float *pi, *po; ++ ++ /* all-zero section*/ ++ ++ pi = &In[0]; ++ po = &Out[0]; ++ for (i=0; i ++ ++#include "iLBC_define.h" ++#include "iCBConstruct.h" ++#include "gainquant.h" ++#include "getCBvec.h" ++ ++/*----------------------------------------------------------------* ++ * Convert the codebook indexes to make the search easier ++ *---------------------------------------------------------------*/ ++ ++ ++ ++void index_conv_enc( ++ int *index /* (i/o) Codebook indexes */ ++){ ++ int k; ++ ++ for (k=1; k=108)&&(index[k]<172)) { ++ index[k]-=64; ++ } else if (index[k]>=236) { ++ index[k]-=128; ++ } else { ++ /* ERROR */ ++ } ++ } ++} ++ ++void index_conv_dec( ++ int *index /* (i/o) Codebook indexes */ ++){ ++ int k; ++ ++ for (k=1; k=44)&&(index[k]<108)) { ++ index[k]+=64; ++ } else if ((index[k]>=108)&&(index[k]<128)) { ++ index[k]+=128; ++ } else { ++ /* ERROR */ ++ } ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * Construct decoded vector from codebook and gains. ++ *---------------------------------------------------------------*/ ++ ++void iCBConstruct( ++ float *decvector, /* (o) Decoded vector */ ++ int *index, /* (i) Codebook indices */ ++ int *gain_index,/* (i) Gain quantization indices */ ++ float *mem, /* (i) Buffer for codevector construction */ ++ int lMem, /* (i) Length of buffer */ ++ int veclen, /* (i) Length of vector */ ++ int nStages /* (i) Number of codebook stages */ ++){ ++ int j,k; ++ float gain[CB_NSTAGES]; ++ float cbvec[SUBL]; ++ ++ /* gain de-quantization */ ++ ++ gain[0] = gaindequant(gain_index[0], 1.0, 32); ++ ++ ++ if (nStages > 1) { ++ gain[1] = gaindequant(gain_index[1], ++ (float)fabs(gain[0]), 16); ++ } ++ if (nStages > 2) { ++ gain[2] = gaindequant(gain_index[2], ++ (float)fabs(gain[1]), 8); ++ } ++ ++ /* codebook vector construction and construction of ++ total vector */ ++ ++ getCBvec(cbvec, mem, index[0], lMem, veclen); ++ for (j=0;j 1) { ++ for (k=1; k ++#include ++ ++#include "iLBC_define.h" ++#include "iCBSearch.h" ++#include "gainquant.h" ++#include "createCB.h" ++#include "filter.h" ++#include "constants.h" ++ ++/*----------------------------------------------------------------* ++ * Search routine for codebook encoding and gain quantization. ++ *---------------------------------------------------------------*/ ++ ++void iCBSearch( ++ iLBC_Enc_Inst_t *iLBCenc_inst, ++ /* (i) the encoder state structure */ ++ int *index, /* (o) Codebook indices */ ++ int *gain_index,/* (o) Gain quantization indices */ ++ float *intarget,/* (i) Target vector for encoding */ ++ float *mem, /* (i) Buffer for codebook construction */ ++ int lMem, /* (i) Length of buffer */ ++ int lTarget, /* (i) Length of vector */ ++ int nStages, /* (i) Number of codebook stages */ ++ float *weightDenum, /* (i) weighting filter coefficients */ ++ float *weightState, /* (i) weighting filter state */ ++ int block /* (i) the sub-block number */ ++){ ++ int i, j, icount, stage, best_index, range, counter; ++ float max_measure, gain, measure, crossDot, ftmp; ++ float gains[CB_NSTAGES]; ++ float target[SUBL]; ++ int base_index, sInd, eInd, base_size; ++ int sIndAug=0, eIndAug=0; ++ float buf[CB_MEML+SUBL+2*LPC_FILTERORDER]; ++ ++ ++ float invenergy[CB_EXPAND*128], energy[CB_EXPAND*128]; ++ float *pp, *ppi=0, *ppo=0, *ppe=0; ++ float cbvectors[CB_MEML]; ++ float tene, cene, cvec[SUBL]; ++ float aug_vec[SUBL]; ++ ++ memset(cvec,0,SUBL*sizeof(float)); ++ ++ /* Determine size of codebook sections */ ++ ++ base_size=lMem-lTarget+1; ++ ++ if (lTarget==SUBL) { ++ base_size=lMem-lTarget+1+lTarget/2; ++ } ++ ++ /* setup buffer for weighting */ ++ ++ memcpy(buf,weightState,sizeof(float)*LPC_FILTERORDER); ++ memcpy(buf+LPC_FILTERORDER,mem,lMem*sizeof(float)); ++ memcpy(buf+LPC_FILTERORDER+lMem,intarget,lTarget*sizeof(float)); ++ ++ /* weighting */ ++ ++ AllPoleFilter(buf+LPC_FILTERORDER, weightDenum, ++ lMem+lTarget, LPC_FILTERORDER); ++ ++ /* Construct the codebook and target needed */ ++ ++ memcpy(target, buf+LPC_FILTERORDER+lMem, lTarget*sizeof(float)); ++ ++ tene=0.0; ++ for (i=0; i0.0) { ++ invenergy[0] = (float) 1.0 / (*ppe + EPS); ++ } else { ++ invenergy[0] = (float) 0.0; ++ } ++ ppe++; ++ ++ measure=(float)-10000000.0; ++ ++ if (crossDot > 0.0) { ++ measure = crossDot*crossDot*invenergy[0]; ++ } ++ } ++ else { ++ measure = crossDot*crossDot*invenergy[0]; ++ } ++ ++ /* check if measure is better */ ++ ftmp = crossDot*invenergy[0]; ++ ++ if ((measure>max_measure) && (fabs(ftmp)0.0) { ++ invenergy[icount] = ++ (float)1.0/(energy[icount]+EPS); ++ } else { ++ invenergy[icount] = (float) 0.0; ++ } ++ ++ measure=(float)-10000000.0; ++ ++ if (crossDot > 0.0) { ++ measure = crossDot*crossDot*invenergy[icount]; ++ } ++ } ++ else { ++ measure = crossDot*crossDot*invenergy[icount]; ++ } ++ ++ /* check if measure is better */ ++ ftmp = crossDot*invenergy[icount]; ++ ++ if ((measure>max_measure) && (fabs(ftmp) range) { ++ sInd -= (eInd-range); ++ eInd = range; ++ } ++ } else { /* base_index >= (base_size-20) */ ++ ++ if (sInd < (base_size-20)) { ++ sIndAug = 20; ++ sInd = 0; ++ eInd = 0; ++ eIndAug = 19 + CB_RESRANGE; ++ ++ if(eIndAug > 39) { ++ eInd = eIndAug-39; ++ eIndAug = 39; ++ } ++ } else { ++ sIndAug = 20 + sInd - (base_size-20); ++ eIndAug = 39; ++ ++ ++ sInd = 0; ++ eInd = CB_RESRANGE - (eIndAug-sIndAug+1); ++ } ++ } ++ ++ } else { /* lTarget = 22 or 23 */ ++ ++ if (sInd < 0) { ++ eInd -= sInd; ++ sInd = 0; ++ } ++ ++ if(eInd > range) { ++ sInd -= (eInd - range); ++ eInd = range; ++ } ++ } ++ } ++ ++ /* search of higher codebook section */ ++ ++ /* index search range */ ++ counter = sInd; ++ sInd += base_size; ++ eInd += base_size; ++ ++ ++ if (stage==0) { ++ ppe = energy+base_size; ++ *ppe=0.0; ++ ++ pp=cbvectors+lMem-lTarget; ++ for (j=0; j0.0) { ++ invenergy[icount] =(float)1.0/(energy[icount]+EPS); ++ } else { ++ invenergy[icount] =(float)0.0; ++ } ++ ++ if (stage==0) { ++ ++ measure=(float)-10000000.0; ++ ++ if (crossDot > 0.0) { ++ measure = crossDot*crossDot* ++ invenergy[icount]; ++ } ++ } ++ else { ++ measure = crossDot*crossDot*invenergy[icount]; ++ } ++ ++ /* check if measure is better */ ++ ftmp = crossDot*invenergy[icount]; ++ ++ if ((measure>max_measure) && (fabs(ftmp)CB_MAXGAIN) { ++ gain = (float)CB_MAXGAIN; ++ } ++ gain = gainquant(gain, 1.0, 32, &gain_index[stage]); ++ } ++ else { ++ if (stage==1) { ++ gain = gainquant(gain, (float)fabs(gains[stage-1]), ++ 16, &gain_index[stage]); ++ } else { ++ gain = gainquant(gain, (float)fabs(gains[stage-1]), ++ 8, &gain_index[stage]); ++ } ++ } ++ ++ /* Extract the best (according to measure) ++ codebook vector */ ++ ++ if (lTarget==(STATE_LEN-iLBCenc_inst->state_short_len)) { ++ ++ if (index[stage] ++#include ++ ++#include "iLBC_define.h" ++#include "iLBC_decode.h" ++#include "StateConstructW.h" ++#include "LPCdecode.h" ++#include "iCBConstruct.h" ++#include "doCPLC.h" ++#include "helpfun.h" ++#include "constants.h" ++#include "packing.h" ++#include "string.h" ++#include "enhancer.h" ++#include "hpOutput.h" ++#include "syntFilter.h" ++ ++/*----------------------------------------------------------------* ++ * Initiation of decoder instance. ++ *---------------------------------------------------------------*/ ++ ++short initDecode( /* (o) Number of decoded ++ samples */ ++ iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) Decoder instance */ ++ int mode, /* (i) frame size mode */ ++ int use_enhancer /* (i) 1 to use enhancer ++ 0 to run without ++ enhancer */ ++){ ++ int i; ++ ++ iLBCdec_inst->mode = mode; ++ ++ if (mode==30) { ++ iLBCdec_inst->blockl = BLOCKL_30MS; ++ iLBCdec_inst->nsub = NSUB_30MS; ++ iLBCdec_inst->nasub = NASUB_30MS; ++ iLBCdec_inst->lpc_n = LPC_N_30MS; ++ ++ ++ iLBCdec_inst->no_of_bytes = NO_OF_BYTES_30MS; ++ iLBCdec_inst->no_of_words = NO_OF_WORDS_30MS; ++ iLBCdec_inst->state_short_len=STATE_SHORT_LEN_30MS; ++ /* ULP init */ ++ iLBCdec_inst->ULP_inst=&ULP_30msTbl; ++ } ++ else if (mode==20) { ++ iLBCdec_inst->blockl = BLOCKL_20MS; ++ iLBCdec_inst->nsub = NSUB_20MS; ++ iLBCdec_inst->nasub = NASUB_20MS; ++ iLBCdec_inst->lpc_n = LPC_N_20MS; ++ iLBCdec_inst->no_of_bytes = NO_OF_BYTES_20MS; ++ iLBCdec_inst->no_of_words = NO_OF_WORDS_20MS; ++ iLBCdec_inst->state_short_len=STATE_SHORT_LEN_20MS; ++ /* ULP init */ ++ iLBCdec_inst->ULP_inst=&ULP_20msTbl; ++ } ++ else { ++ exit(2); ++ } ++ ++ memset(iLBCdec_inst->syntMem, 0, ++ LPC_FILTERORDER*sizeof(float)); ++ memcpy((*iLBCdec_inst).lsfdeqold, lsfmeanTbl, ++ LPC_FILTERORDER*sizeof(float)); ++ ++ memset(iLBCdec_inst->old_syntdenum, 0, ++ ((LPC_FILTERORDER + 1)*NSUB_MAX)*sizeof(float)); ++ for (i=0; iold_syntdenum[i*(LPC_FILTERORDER+1)]=1.0; ++ ++ iLBCdec_inst->last_lag = 20; ++ ++ iLBCdec_inst->prevLag = 120; ++ iLBCdec_inst->per = 0.0; ++ iLBCdec_inst->consPLICount = 0; ++ iLBCdec_inst->prevPLI = 0; ++ iLBCdec_inst->prevLpc[0] = 1.0; ++ memset(iLBCdec_inst->prevLpc+1,0, ++ LPC_FILTERORDER*sizeof(float)); ++ memset(iLBCdec_inst->prevResidual, 0, BLOCKL_MAX*sizeof(float)); ++ iLBCdec_inst->seed=777; ++ ++ memset(iLBCdec_inst->hpomem, 0, 4*sizeof(float)); ++ ++ iLBCdec_inst->use_enhancer = use_enhancer; ++ memset(iLBCdec_inst->enh_buf, 0, ENH_BUFL*sizeof(float)); ++ for (i=0;ienh_period[i]=(float)40.0; ++ ++ iLBCdec_inst->prev_enh_pl = 0; ++ ++ return (iLBCdec_inst->blockl); ++} ++ ++ ++ ++/*----------------------------------------------------------------* ++ * frame residual decoder function (subrutine to iLBC_decode) ++ *---------------------------------------------------------------*/ ++ ++static void Decode( ++ iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) the decoder state ++ structure */ ++ float *decresidual, /* (o) decoded residual frame */ ++ int start, /* (i) location of start ++ state */ ++ int idxForMax, /* (i) codebook index for the ++ maximum value */ ++ int *idxVec, /* (i) codebook indexes for the ++ samples in the start ++ state */ ++ float *syntdenum, /* (i) the decoded synthesis ++ filter coefficients */ ++ int *cb_index, /* (i) the indexes for the ++ adaptive codebook */ ++ int *gain_index, /* (i) the indexes for the ++ corresponding gains */ ++ int *extra_cb_index, /* (i) the indexes for the ++ adaptive codebook part ++ of start state */ ++ int *extra_gain_index, /* (i) the indexes for the ++ corresponding gains */ ++ int state_first /* (i) 1 if non adaptive part ++ of start state comes ++ first 0 if that part ++ comes last */ ++){ ++ float reverseDecresidual[BLOCKL_MAX], mem[CB_MEML]; ++ int k, meml_gotten, Nfor, Nback, i; ++ int diff, start_pos; ++ int subcount, subframe; ++ ++ diff = STATE_LEN - iLBCdec_inst->state_short_len; ++ ++ if (state_first == 1) { ++ start_pos = (start-1)*SUBL; ++ } else { ++ start_pos = (start-1)*SUBL + diff; ++ } ++ ++ /* decode scalar part of start state */ ++ ++ StateConstructW(idxForMax, idxVec, ++ &syntdenum[(start-1)*(LPC_FILTERORDER+1)], ++ &decresidual[start_pos], iLBCdec_inst->state_short_len); ++ ++ ++ if (state_first) { /* put adaptive part in the end */ ++ ++ ++ ++ /* setup memory */ ++ ++ memset(mem, 0, ++ (CB_MEML-iLBCdec_inst->state_short_len)*sizeof(float)); ++ memcpy(mem+CB_MEML-iLBCdec_inst->state_short_len, ++ decresidual+start_pos, ++ iLBCdec_inst->state_short_len*sizeof(float)); ++ ++ /* construct decoded vector */ ++ ++ iCBConstruct( ++ &decresidual[start_pos+iLBCdec_inst->state_short_len], ++ extra_cb_index, extra_gain_index, mem+CB_MEML-stMemLTbl, ++ stMemLTbl, diff, CB_NSTAGES); ++ ++ } ++ else {/* put adaptive part in the beginning */ ++ ++ /* create reversed vectors for prediction */ ++ ++ for (k=0; kstate_short_len)]; ++ } ++ ++ /* setup memory */ ++ ++ meml_gotten = iLBCdec_inst->state_short_len; ++ for (k=0; knsub-start-1; ++ ++ ++ ++ if ( Nfor > 0 ){ ++ ++ /* setup memory */ ++ ++ memset(mem, 0, (CB_MEML-STATE_LEN)*sizeof(float)); ++ memcpy(mem+CB_MEML-STATE_LEN, decresidual+(start-1)*SUBL, ++ STATE_LEN*sizeof(float)); ++ ++ /* loop over sub-frames to encode */ ++ ++ for (subframe=0; subframe 0 ) { ++ ++ /* setup memory */ ++ ++ meml_gotten = SUBL*(iLBCdec_inst->nsub+1-start); ++ ++ if ( meml_gotten > CB_MEML ) { ++ meml_gotten=CB_MEML; ++ } ++ for (k=0; k0) { /* the data are good */ ++ ++ /* decode data */ ++ ++ pbytes=bytes; ++ pos=0; ++ ++ /* Set everything to zero before decoding */ ++ ++ for (k=0; kstate_short_len; k++) { ++ idxVec[k]=0; ++ } ++ for (k=0; knasub; i++) { ++ for (k=0; knasub; i++) { ++ for (k=0; klpc_n; k++){ ++ unpack( &pbytes, &lastpart, ++ iLBCdec_inst->ULP_inst->lsf_bits[k][ulp], &pos); ++ packcombine(&lsf_i[k], lastpart, ++ iLBCdec_inst->ULP_inst->lsf_bits[k][ulp]); ++ } ++ ++ ++ ++ /* Start block info */ ++ ++ unpack( &pbytes, &lastpart, ++ iLBCdec_inst->ULP_inst->start_bits[ulp], &pos); ++ packcombine(&start, lastpart, ++ iLBCdec_inst->ULP_inst->start_bits[ulp]); ++ ++ unpack( &pbytes, &lastpart, ++ iLBCdec_inst->ULP_inst->startfirst_bits[ulp], &pos); ++ packcombine(&state_first, lastpart, ++ iLBCdec_inst->ULP_inst->startfirst_bits[ulp]); ++ ++ unpack( &pbytes, &lastpart, ++ iLBCdec_inst->ULP_inst->scale_bits[ulp], &pos); ++ packcombine(&idxForMax, lastpart, ++ iLBCdec_inst->ULP_inst->scale_bits[ulp]); ++ ++ for (k=0; kstate_short_len; k++) { ++ unpack( &pbytes, &lastpart, ++ iLBCdec_inst->ULP_inst->state_bits[ulp], &pos); ++ packcombine(idxVec+k, lastpart, ++ iLBCdec_inst->ULP_inst->state_bits[ulp]); ++ } ++ ++ /* 23/22 (20ms/30ms) sample block */ ++ ++ for (k=0; kULP_inst->extra_cb_index[k][ulp], ++ &pos); ++ packcombine(extra_cb_index+k, lastpart, ++ iLBCdec_inst->ULP_inst->extra_cb_index[k][ulp]); ++ } ++ for (k=0; kULP_inst->extra_cb_gain[k][ulp], ++ &pos); ++ packcombine(extra_gain_index+k, lastpart, ++ iLBCdec_inst->ULP_inst->extra_cb_gain[k][ulp]); ++ } ++ ++ /* The two/four (20ms/30ms) 40 sample sub-blocks */ ++ ++ for (i=0; inasub; i++) { ++ for (k=0; kULP_inst->cb_index[i][k][ulp], ++ &pos); ++ packcombine(cb_index+i*CB_NSTAGES+k, lastpart, ++ iLBCdec_inst->ULP_inst->cb_index[i][k][ulp]); ++ } ++ } ++ ++ for (i=0; inasub; i++) { ++ ++ ++ for (k=0; kULP_inst->cb_gain[i][k][ulp], ++ &pos); ++ packcombine(gain_index+i*CB_NSTAGES+k, lastpart, ++ iLBCdec_inst->ULP_inst->cb_gain[i][k][ulp]); ++ } ++ } ++ } ++ /* Extract last bit. If it is 1 this indicates an ++ empty/lost frame */ ++ unpack( &pbytes, &last_bit, 1, &pos); ++ ++ /* Check for bit errors or empty/lost frames */ ++ if (start<1) ++ mode = 0; ++ if (iLBCdec_inst->mode==20 && start>3) ++ mode = 0; ++ if (iLBCdec_inst->mode==30 && start>5) ++ mode = 0; ++ if (last_bit==1) ++ mode = 0; ++ ++ if (mode==1) { /* No bit errors was detected, ++ continue decoding */ ++ ++ /* adjust index */ ++ index_conv_dec(cb_index); ++ ++ /* decode the lsf */ ++ ++ SimplelsfDEQ(lsfdeq, lsf_i, iLBCdec_inst->lpc_n); ++ check=LSF_check(lsfdeq, LPC_FILTERORDER, ++ iLBCdec_inst->lpc_n); ++ DecoderInterpolateLSF(syntdenum, weightdenum, ++ lsfdeq, LPC_FILTERORDER, iLBCdec_inst); ++ ++ Decode(iLBCdec_inst, decresidual, start, idxForMax, ++ idxVec, syntdenum, cb_index, gain_index, ++ extra_cb_index, extra_gain_index, ++ state_first); ++ ++ /* preparing the plc for a future loss! */ ++ ++ doThePLC(PLCresidual, PLClpc, 0, decresidual, ++ syntdenum + ++ (LPC_FILTERORDER + 1)*(iLBCdec_inst->nsub - 1), ++ (*iLBCdec_inst).last_lag, iLBCdec_inst); ++ ++ ++ memcpy(decresidual, PLCresidual, ++ iLBCdec_inst->blockl*sizeof(float)); ++ } ++ ++ ++ ++ } ++ ++ if (mode == 0) { ++ /* the data is bad (either a PLC call ++ * was made or a severe bit error was detected) ++ */ ++ ++ /* packet loss conceal */ ++ ++ memset(zeros, 0, BLOCKL_MAX*sizeof(float)); ++ ++ one[0] = 1; ++ memset(one+1, 0, LPC_FILTERORDER*sizeof(float)); ++ ++ start=0; ++ ++ doThePLC(PLCresidual, PLClpc, 1, zeros, one, ++ (*iLBCdec_inst).last_lag, iLBCdec_inst); ++ memcpy(decresidual, PLCresidual, ++ iLBCdec_inst->blockl*sizeof(float)); ++ ++ order_plus_one = LPC_FILTERORDER + 1; ++ for (i = 0; i < iLBCdec_inst->nsub; i++) { ++ memcpy(syntdenum+(i*order_plus_one), PLClpc, ++ order_plus_one*sizeof(float)); ++ } ++ } ++ ++ if (iLBCdec_inst->use_enhancer == 1) { ++ ++ /* post filtering */ ++ ++ iLBCdec_inst->last_lag = ++ enhancerInterface(data, decresidual, iLBCdec_inst); ++ ++ /* synthesis filtering */ ++ ++ if (iLBCdec_inst->mode==20) { ++ /* Enhancer has 40 samples delay */ ++ i=0; ++ syntFilter(data + i*SUBL, ++ iLBCdec_inst->old_syntdenum + ++ (i+iLBCdec_inst->nsub-1)*(LPC_FILTERORDER+1), ++ SUBL, iLBCdec_inst->syntMem); ++ for (i=1; i < iLBCdec_inst->nsub; i++) { ++ syntFilter(data + i*SUBL, ++ syntdenum + (i-1)*(LPC_FILTERORDER+1), ++ SUBL, iLBCdec_inst->syntMem); ++ } ++ } else if (iLBCdec_inst->mode==30) { ++ /* Enhancer has 80 samples delay */ ++ for (i=0; i < 2; i++) { ++ syntFilter(data + i*SUBL, ++ ++ ++ iLBCdec_inst->old_syntdenum + ++ (i+iLBCdec_inst->nsub-2)*(LPC_FILTERORDER+1), ++ SUBL, iLBCdec_inst->syntMem); ++ } ++ for (i=2; i < iLBCdec_inst->nsub; i++) { ++ syntFilter(data + i*SUBL, ++ syntdenum + (i-2)*(LPC_FILTERORDER+1), SUBL, ++ iLBCdec_inst->syntMem); ++ } ++ } ++ ++ } else { ++ ++ /* Find last lag */ ++ lag = 20; ++ maxcc = xCorrCoef(&decresidual[BLOCKL_MAX-ENH_BLOCKL], ++ &decresidual[BLOCKL_MAX-ENH_BLOCKL-lag], ENH_BLOCKL); ++ ++ for (ilag=21; ilag<120; ilag++) { ++ cc = xCorrCoef(&decresidual[BLOCKL_MAX-ENH_BLOCKL], ++ &decresidual[BLOCKL_MAX-ENH_BLOCKL-ilag], ++ ENH_BLOCKL); ++ ++ if (cc > maxcc) { ++ maxcc = cc; ++ lag = ilag; ++ } ++ } ++ iLBCdec_inst->last_lag = lag; ++ ++ /* copy data and run synthesis filter */ ++ ++ memcpy(data, decresidual, ++ iLBCdec_inst->blockl*sizeof(float)); ++ for (i=0; i < iLBCdec_inst->nsub; i++) { ++ syntFilter(data + i*SUBL, ++ syntdenum + i*(LPC_FILTERORDER+1), SUBL, ++ iLBCdec_inst->syntMem); ++ } ++ } ++ ++ /* high pass filtering on output if desired, otherwise ++ copy to out */ ++ ++ hpOutput(data, iLBCdec_inst->blockl, ++ decblock,iLBCdec_inst->hpomem); ++ ++ /* memcpy(decblock,data,iLBCdec_inst->blockl*sizeof(float));*/ ++ ++ memcpy(iLBCdec_inst->old_syntdenum, syntdenum, ++ ++ iLBCdec_inst->nsub*(LPC_FILTERORDER+1)*sizeof(float)); ++ ++ iLBCdec_inst->prev_enh_pl=0; ++ ++ ++ ++ if (mode==0) { /* PLC was used */ ++ iLBCdec_inst->prev_enh_pl=1; ++ } ++} ++ ++ +diff -druN codecs/ilbc.orig/iLBC_decode.h codecs/ilbc/iLBC_decode.h +--- codecs/ilbc.orig/iLBC_decode.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/iLBC_decode.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,40 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ iLBC_decode.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __iLBC_ILBCDECODE_H ++#define __iLBC_ILBCDECODE_H ++ ++#include "iLBC_define.h" ++ ++short initDecode( /* (o) Number of decoded ++ samples */ ++ iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) Decoder instance */ ++ int mode, /* (i) frame size mode */ ++ int use_enhancer /* (i) 1 to use enhancer ++ 0 to run without ++ enhancer */ ++); ++ ++void iLBC_decode( ++ float *decblock, /* (o) decoded signal block */ ++ unsigned char *bytes, /* (i) encoded signal bits */ ++ iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) the decoder state ++ structure */ ++ int mode /* (i) 0: bad packet, PLC, ++ 1: normal */ ++); ++ ++ ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/iLBC_define.h codecs/ilbc/iLBC_define.h +--- codecs/ilbc.orig/iLBC_define.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/iLBC_define.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,201 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ iLBC_define.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++#include ++ ++#ifndef __iLBC_ILBCDEFINE_H ++#define __iLBC_ILBCDEFINE_H ++ ++/* general codec settings */ ++ ++#define FS (float)8000.0 ++#define BLOCKL_20MS 160 ++#define BLOCKL_30MS 240 ++#define BLOCKL_MAX 240 ++#define NSUB_20MS 4 ++#define NSUB_30MS 6 ++#define NSUB_MAX 6 ++#define NASUB_20MS 2 ++#define NASUB_30MS 4 ++#define NASUB_MAX 4 ++#define SUBL 40 ++#define STATE_LEN 80 ++#define STATE_SHORT_LEN_30MS 58 ++#define STATE_SHORT_LEN_20MS 57 ++ ++/* LPC settings */ ++ ++#define LPC_FILTERORDER 10 ++#define LPC_CHIRP_SYNTDENUM (float)0.9025 ++#define LPC_CHIRP_WEIGHTDENUM (float)0.4222 ++#define LPC_LOOKBACK 60 ++#define LPC_N_20MS 1 ++#define LPC_N_30MS 2 ++#define LPC_N_MAX 2 ++#define LPC_ASYMDIFF 20 ++#define LPC_BW (float)60.0 ++#define LPC_WN (float)1.0001 ++#define LSF_NSPLIT 3 ++ ++#define LSF_NUMBER_OF_STEPS 4 ++#define LPC_HALFORDER (LPC_FILTERORDER/2) ++ ++/* cb settings */ ++ ++#define CB_NSTAGES 3 ++#define CB_EXPAND 2 ++#define CB_MEML 147 ++#define CB_FILTERLEN 2*4 ++#define CB_HALFFILTERLEN 4 ++#define CB_RESRANGE 34 ++#define CB_MAXGAIN (float)1.3 ++ ++/* enhancer */ ++ ++#define ENH_BLOCKL 80 /* block length */ ++#define ENH_BLOCKL_HALF (ENH_BLOCKL/2) ++#define ENH_HL 3 /* 2*ENH_HL+1 is number blocks ++ in said second sequence */ ++#define ENH_SLOP 2 /* max difference estimated and ++ correct pitch period */ ++#define ENH_PLOCSL 20 /* pitch-estimates and pitch- ++ locations buffer length */ ++#define ENH_OVERHANG 2 ++#define ENH_UPS0 4 /* upsampling rate */ ++#define ENH_FL0 3 /* 2*FLO+1 is the length of ++ each filter */ ++#define ENH_VECTL (ENH_BLOCKL+2*ENH_FL0) ++#define ENH_CORRDIM (2*ENH_SLOP+1) ++#define ENH_NBLOCKS (BLOCKL_MAX/ENH_BLOCKL) ++#define ENH_NBLOCKS_EXTRA 5 ++#define ENH_NBLOCKS_TOT 8 /* ENH_NBLOCKS + ++ ENH_NBLOCKS_EXTRA */ ++#define ENH_BUFL (ENH_NBLOCKS_TOT)*ENH_BLOCKL ++#define ENH_ALPHA0 (float)0.05 ++ ++/* Down sampling */ ++ ++#define FILTERORDER_DS 7 ++#define DELAY_DS 3 ++#define FACTOR_DS 2 ++ ++/* bit stream defs */ ++ ++#define NO_OF_BYTES_20MS 38 ++#define NO_OF_BYTES_30MS 50 ++#define NO_OF_WORDS_20MS 19 ++#define NO_OF_WORDS_30MS 25 ++#define STATE_BITS 3 ++#define BYTE_LEN 8 ++#define ULP_CLASSES 3 ++ ++/* help parameters */ ++ ++ ++#define FLOAT_MAX (float)1.0e37 ++#define EPS (float)2.220446049250313e-016 ++#define PI (float)3.14159265358979323846 ++#define MIN_SAMPLE -32768 ++#define MAX_SAMPLE 32767 ++#define TWO_PI (float)6.283185307 ++#define PI2 (float)0.159154943 ++ ++/* type definition encoder instance */ ++typedef struct iLBC_ULP_Inst_t_ { ++ int lsf_bits[6][ULP_CLASSES+2]; ++ int start_bits[ULP_CLASSES+2]; ++ int startfirst_bits[ULP_CLASSES+2]; ++ int scale_bits[ULP_CLASSES+2]; ++ int state_bits[ULP_CLASSES+2]; ++ int extra_cb_index[CB_NSTAGES][ULP_CLASSES+2]; ++ int extra_cb_gain[CB_NSTAGES][ULP_CLASSES+2]; ++ int cb_index[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2]; ++ int cb_gain[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2]; ++} iLBC_ULP_Inst_t; ++ ++/* type definition encoder instance */ ++typedef struct iLBC_Enc_Inst_t_ { ++ ++ /* flag for frame size mode */ ++ int mode; ++ ++ /* basic parameters for different frame sizes */ ++ int blockl; ++ int nsub; ++ int nasub; ++ int no_of_bytes, no_of_words; ++ int lpc_n; ++ int state_short_len; ++ const iLBC_ULP_Inst_t *ULP_inst; ++ ++ /* analysis filter state */ ++ float anaMem[LPC_FILTERORDER]; ++ ++ /* old lsf parameters for interpolation */ ++ float lsfold[LPC_FILTERORDER]; ++ float lsfdeqold[LPC_FILTERORDER]; ++ ++ /* signal buffer for LP analysis */ ++ float lpc_buffer[LPC_LOOKBACK + BLOCKL_MAX]; ++ ++ /* state of input HP filter */ ++ float hpimem[4]; ++ ++} iLBC_Enc_Inst_t; ++ ++/* type definition decoder instance */ ++typedef struct iLBC_Dec_Inst_t_ { ++ ++ ++ /* flag for frame size mode */ ++ int mode; ++ ++ /* basic parameters for different frame sizes */ ++ int blockl; ++ int nsub; ++ int nasub; ++ int no_of_bytes, no_of_words; ++ int lpc_n; ++ int state_short_len; ++ const iLBC_ULP_Inst_t *ULP_inst; ++ ++ /* synthesis filter state */ ++ float syntMem[LPC_FILTERORDER]; ++ ++ /* old LSF for interpolation */ ++ float lsfdeqold[LPC_FILTERORDER]; ++ ++ /* pitch lag estimated in enhancer and used in PLC */ ++ int last_lag; ++ ++ /* PLC state information */ ++ int prevLag, consPLICount, prevPLI, prev_enh_pl; ++ float prevLpc[LPC_FILTERORDER+1]; ++ float prevResidual[NSUB_MAX*SUBL]; ++ float per; ++ unsigned long seed; ++ ++ /* previous synthesis filter parameters */ ++ float old_syntdenum[(LPC_FILTERORDER + 1)*NSUB_MAX]; ++ ++ /* state of output HP filter */ ++ float hpomem[4]; ++ ++ /* enhancer state information */ ++ int use_enhancer; ++ float enh_buf[ENH_BUFL]; ++ float enh_period[ENH_NBLOCKS_TOT]; ++ ++} iLBC_Dec_Inst_t; ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/iLBC_encode.c codecs/ilbc/iLBC_encode.c +--- codecs/ilbc.orig/iLBC_encode.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/iLBC_encode.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,514 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ iLBC_encode.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include ++#include ++#include ++ ++#include "iLBC_define.h" ++#include "iLBC_encode.h" ++#include "LPCencode.h" ++#include "FrameClassify.h" ++#include "StateSearchW.h" ++#include "StateConstructW.h" ++#include "helpfun.h" ++#include "constants.h" ++#include "packing.h" ++#include "iCBSearch.h" ++#include "iCBConstruct.h" ++#include "hpInput.h" ++#include "anaFilter.h" ++#include "syntFilter.h" ++ ++/*----------------------------------------------------------------* ++ * Initiation of encoder instance. ++ *---------------------------------------------------------------*/ ++ ++short initEncode( /* (o) Number of bytes ++ encoded */ ++ iLBC_Enc_Inst_t *iLBCenc_inst, /* (i/o) Encoder instance */ ++ int mode /* (i) frame size mode */ ++){ ++ iLBCenc_inst->mode = mode; ++ if (mode==30) { ++ iLBCenc_inst->blockl = BLOCKL_30MS; ++ iLBCenc_inst->nsub = NSUB_30MS; ++ ++ ++ iLBCenc_inst->nasub = NASUB_30MS; ++ iLBCenc_inst->lpc_n = LPC_N_30MS; ++ iLBCenc_inst->no_of_bytes = NO_OF_BYTES_30MS; ++ iLBCenc_inst->no_of_words = NO_OF_WORDS_30MS; ++ iLBCenc_inst->state_short_len=STATE_SHORT_LEN_30MS; ++ /* ULP init */ ++ iLBCenc_inst->ULP_inst=&ULP_30msTbl; ++ } ++ else if (mode==20) { ++ iLBCenc_inst->blockl = BLOCKL_20MS; ++ iLBCenc_inst->nsub = NSUB_20MS; ++ iLBCenc_inst->nasub = NASUB_20MS; ++ iLBCenc_inst->lpc_n = LPC_N_20MS; ++ iLBCenc_inst->no_of_bytes = NO_OF_BYTES_20MS; ++ iLBCenc_inst->no_of_words = NO_OF_WORDS_20MS; ++ iLBCenc_inst->state_short_len=STATE_SHORT_LEN_20MS; ++ /* ULP init */ ++ iLBCenc_inst->ULP_inst=&ULP_20msTbl; ++ } ++ else { ++ exit(2); ++ } ++ ++ memset((*iLBCenc_inst).anaMem, 0, ++ LPC_FILTERORDER*sizeof(float)); ++ memcpy((*iLBCenc_inst).lsfold, lsfmeanTbl, ++ LPC_FILTERORDER*sizeof(float)); ++ memcpy((*iLBCenc_inst).lsfdeqold, lsfmeanTbl, ++ LPC_FILTERORDER*sizeof(float)); ++ memset((*iLBCenc_inst).lpc_buffer, 0, ++ (LPC_LOOKBACK+BLOCKL_MAX)*sizeof(float)); ++ memset((*iLBCenc_inst).hpimem, 0, 4*sizeof(float)); ++ ++ return (iLBCenc_inst->no_of_bytes); ++} ++ ++/*----------------------------------------------------------------* ++ * main encoder function ++ *---------------------------------------------------------------*/ ++ ++void iLBC_encode( ++ unsigned char *bytes, /* (o) encoded data bits iLBC */ ++ float *block, /* (o) speech vector to ++ encode */ ++ iLBC_Enc_Inst_t *iLBCenc_inst /* (i/o) the general encoder ++ state */ ++){ ++ ++ float data[BLOCKL_MAX]; ++ float residual[BLOCKL_MAX], reverseResidual[BLOCKL_MAX]; ++ ++ int start, idxForMax, idxVec[STATE_LEN]; ++ float reverseDecresidual[BLOCKL_MAX], mem[CB_MEML]; ++ int n, k, meml_gotten, Nfor, Nback, i, pos; ++ ++ ++ int gain_index[CB_NSTAGES*NASUB_MAX], ++ extra_gain_index[CB_NSTAGES]; ++ int cb_index[CB_NSTAGES*NASUB_MAX],extra_cb_index[CB_NSTAGES]; ++ int lsf_i[LSF_NSPLIT*LPC_N_MAX]; ++ unsigned char *pbytes; ++ int diff, start_pos, state_first; ++ float en1, en2; ++ int index, ulp, firstpart; ++ int subcount, subframe; ++ float weightState[LPC_FILTERORDER]; ++ float syntdenum[NSUB_MAX*(LPC_FILTERORDER+1)]; ++ float weightdenum[NSUB_MAX*(LPC_FILTERORDER+1)]; ++ float decresidual[BLOCKL_MAX]; ++ ++ /* high pass filtering of input signal if such is not done ++ prior to calling this function */ ++ ++ hpInput(block, iLBCenc_inst->blockl, ++ data, (*iLBCenc_inst).hpimem); ++ ++ /* otherwise simply copy */ ++ ++ /*memcpy(data,block,iLBCenc_inst->blockl*sizeof(float));*/ ++ ++ /* LPC of hp filtered input data */ ++ ++ LPCencode(syntdenum, weightdenum, lsf_i, data, iLBCenc_inst); ++ ++ ++ /* inverse filter to get residual */ ++ ++ for (n=0; nnsub; n++) { ++ anaFilter(&data[n*SUBL], &syntdenum[n*(LPC_FILTERORDER+1)], ++ SUBL, &residual[n*SUBL], iLBCenc_inst->anaMem); ++ } ++ ++ /* find state location */ ++ ++ start = FrameClassify(iLBCenc_inst, residual); ++ ++ /* check if state should be in first or last part of the ++ two subframes */ ++ ++ diff = STATE_LEN - iLBCenc_inst->state_short_len; ++ en1 = 0; ++ index = (start-1)*SUBL; ++ for (i = 0; i < iLBCenc_inst->state_short_len; i++) { ++ en1 += residual[index+i]*residual[index+i]; ++ } ++ en2 = 0; ++ index = (start-1)*SUBL+diff; ++ for (i = 0; i < iLBCenc_inst->state_short_len; i++) { ++ en2 += residual[index+i]*residual[index+i]; ++ } ++ ++ ++ ++ ++ if (en1 > en2) { ++ state_first = 1; ++ start_pos = (start-1)*SUBL; ++ } else { ++ state_first = 0; ++ start_pos = (start-1)*SUBL + diff; ++ } ++ ++ /* scalar quantization of state */ ++ ++ StateSearchW(iLBCenc_inst, &residual[start_pos], ++ &syntdenum[(start-1)*(LPC_FILTERORDER+1)], ++ &weightdenum[(start-1)*(LPC_FILTERORDER+1)], &idxForMax, ++ idxVec, iLBCenc_inst->state_short_len, state_first); ++ ++ StateConstructW(idxForMax, idxVec, ++ &syntdenum[(start-1)*(LPC_FILTERORDER+1)], ++ &decresidual[start_pos], iLBCenc_inst->state_short_len); ++ ++ /* predictive quantization in state */ ++ ++ if (state_first) { /* put adaptive part in the end */ ++ ++ /* setup memory */ ++ ++ memset(mem, 0, ++ (CB_MEML-iLBCenc_inst->state_short_len)*sizeof(float)); ++ memcpy(mem+CB_MEML-iLBCenc_inst->state_short_len, ++ decresidual+start_pos, ++ iLBCenc_inst->state_short_len*sizeof(float)); ++ memset(weightState, 0, LPC_FILTERORDER*sizeof(float)); ++ ++ /* encode sub-frames */ ++ ++ iCBSearch(iLBCenc_inst, extra_cb_index, extra_gain_index, ++ &residual[start_pos+iLBCenc_inst->state_short_len], ++ mem+CB_MEML-stMemLTbl, ++ stMemLTbl, diff, CB_NSTAGES, ++ &weightdenum[start*(LPC_FILTERORDER+1)], ++ weightState, 0); ++ ++ /* construct decoded vector */ ++ ++ iCBConstruct( ++ &decresidual[start_pos+iLBCenc_inst->state_short_len], ++ extra_cb_index, extra_gain_index, ++ mem+CB_MEML-stMemLTbl, ++ stMemLTbl, diff, CB_NSTAGES); ++ ++ } ++ else { /* put adaptive part in the beginning */ ++ ++ ++ ++ /* create reversed vectors for prediction */ ++ ++ for (k=0; kstate_short_len)]; ++ } ++ ++ /* setup memory */ ++ ++ meml_gotten = iLBCenc_inst->state_short_len; ++ for (k=0; knsub-start-1; ++ ++ ++ if ( Nfor > 0 ) { ++ ++ /* setup memory */ ++ ++ memset(mem, 0, (CB_MEML-STATE_LEN)*sizeof(float)); ++ memcpy(mem+CB_MEML-STATE_LEN, decresidual+(start-1)*SUBL, ++ STATE_LEN*sizeof(float)); ++ memset(weightState, 0, LPC_FILTERORDER*sizeof(float)); ++ ++ ++ ++ /* loop over sub-frames to encode */ ++ ++ for (subframe=0; subframe 0 ) { ++ ++ /* create reverse order vectors */ ++ ++ for (n=0; nnsub+1-start); ++ ++ ++ if ( meml_gotten > CB_MEML ) { ++ meml_gotten=CB_MEML; ++ } ++ for (k=0; klpc_n; k++) { ++ packsplit(&lsf_i[k], &firstpart, &lsf_i[k], ++ iLBCenc_inst->ULP_inst->lsf_bits[k][ulp], ++ iLBCenc_inst->ULP_inst->lsf_bits[k][ulp]+ ++ iLBCenc_inst->ULP_inst->lsf_bits[k][ulp+1]+ ++ iLBCenc_inst->ULP_inst->lsf_bits[k][ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->lsf_bits[k][ulp], &pos); ++ } ++ ++ /* Start block info */ ++ ++ packsplit(&start, &firstpart, &start, ++ iLBCenc_inst->ULP_inst->start_bits[ulp], ++ iLBCenc_inst->ULP_inst->start_bits[ulp]+ ++ iLBCenc_inst->ULP_inst->start_bits[ulp+1]+ ++ iLBCenc_inst->ULP_inst->start_bits[ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->start_bits[ulp], &pos); ++ ++ packsplit(&state_first, &firstpart, &state_first, ++ iLBCenc_inst->ULP_inst->startfirst_bits[ulp], ++ iLBCenc_inst->ULP_inst->startfirst_bits[ulp]+ ++ iLBCenc_inst->ULP_inst->startfirst_bits[ulp+1]+ ++ iLBCenc_inst->ULP_inst->startfirst_bits[ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->startfirst_bits[ulp], &pos); ++ ++ packsplit(&idxForMax, &firstpart, &idxForMax, ++ iLBCenc_inst->ULP_inst->scale_bits[ulp], ++ iLBCenc_inst->ULP_inst->scale_bits[ulp]+ ++ iLBCenc_inst->ULP_inst->scale_bits[ulp+1]+ ++ iLBCenc_inst->ULP_inst->scale_bits[ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->scale_bits[ulp], &pos); ++ ++ ++ ++ for (k=0; kstate_short_len; k++) { ++ packsplit(idxVec+k, &firstpart, idxVec+k, ++ iLBCenc_inst->ULP_inst->state_bits[ulp], ++ iLBCenc_inst->ULP_inst->state_bits[ulp]+ ++ iLBCenc_inst->ULP_inst->state_bits[ulp+1]+ ++ iLBCenc_inst->ULP_inst->state_bits[ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->state_bits[ulp], &pos); ++ } ++ ++ /* 23/22 (20ms/30ms) sample block */ ++ ++ for (k=0;kULP_inst->extra_cb_index[k][ulp], ++ iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp]+ ++ iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp+1]+ ++ iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp], ++ &pos); ++ } ++ ++ for (k=0;kULP_inst->extra_cb_gain[k][ulp], ++ iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp]+ ++ iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp+1]+ ++ iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp], ++ &pos); ++ } ++ ++ /* The two/four (20ms/30ms) 40 sample sub-blocks */ ++ ++ for (i=0; inasub; i++) { ++ for (k=0; kULP_inst->cb_index[i][k][ulp], ++ iLBCenc_inst->ULP_inst->cb_index[i][k][ulp]+ ++ iLBCenc_inst->ULP_inst->cb_index[i][k][ulp+1]+ ++ iLBCenc_inst->ULP_inst->cb_index[i][k][ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->cb_index[i][k][ulp], ++ &pos); ++ } ++ } ++ ++ for (i=0; inasub; i++) { ++ for (k=0; kULP_inst->cb_gain[i][k][ulp], ++ iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp]+ ++ iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp+1]+ ++ iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp], ++ &pos); ++ } ++ } ++ } ++ ++ /* set the last bit to zero (otherwise the decoder ++ will treat it as a lost frame) */ ++ dopack( &pbytes, 0, 1, &pos); ++} ++ ++ ++ +diff -druN codecs/ilbc.orig/iLBC_encode.h codecs/ilbc/iLBC_encode.h +--- codecs/ilbc.orig/iLBC_encode.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/iLBC_encode.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,37 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ iLBC_encode.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __iLBC_ILBCENCODE_H ++#define __iLBC_ILBCENCODE_H ++ ++#include "iLBC_define.h" ++ ++short initEncode( /* (o) Number of bytes ++ encoded */ ++ iLBC_Enc_Inst_t *iLBCenc_inst, /* (i/o) Encoder instance */ ++ int mode /* (i) frame size mode */ ++); ++ ++void iLBC_encode( ++ ++ ++ unsigned char *bytes, /* (o) encoded data bits iLBC */ ++ float *block, /* (o) speech vector to ++ encode */ ++ iLBC_Enc_Inst_t *iLBCenc_inst /* (i/o) the general encoder ++ state */ ++); ++ ++#endif ++ ++ ++ +Files codecs/ilbc.orig/libilbc.a and codecs/ilbc/libilbc.a differ +diff -druN codecs/ilbc.orig/libilbc.vcproj codecs/ilbc/libilbc.vcproj +--- codecs/ilbc.orig/libilbc.vcproj 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/libilbc.vcproj 2006-03-20 13:25:50.000000000 -0800 +@@ -0,0 +1,353 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff -druN codecs/ilbc.orig/lsf.c codecs/ilbc/lsf.c +--- codecs/ilbc.orig/lsf.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/lsf.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,264 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ lsf.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include ++#include ++ ++#include "iLBC_define.h" ++#include "lsf.h" ++ ++/*----------------------------------------------------------------* ++ * conversion from lpc coefficients to lsf coefficients ++ *---------------------------------------------------------------*/ ++ ++void a2lsf( ++ float *freq,/* (o) lsf coefficients */ ++ float *a /* (i) lpc coefficients */ ++){ ++ float steps[LSF_NUMBER_OF_STEPS] = ++ {(float)0.00635, (float)0.003175, (float)0.0015875, ++ (float)0.00079375}; ++ float step; ++ int step_idx; ++ int lsp_index; ++ float p[LPC_HALFORDER]; ++ float q[LPC_HALFORDER]; ++ float p_pre[LPC_HALFORDER]; ++ ++ ++ float q_pre[LPC_HALFORDER]; ++ float old_p, old_q, *old; ++ float *pq_coef; ++ float omega, old_omega; ++ int i; ++ float hlp, hlp1, hlp2, hlp3, hlp4, hlp5; ++ ++ for (i=0; i= 0.5)){ ++ ++ if (step_idx == (LSF_NUMBER_OF_STEPS - 1)){ ++ ++ if (fabs(hlp5) >= fabs(*old)) { ++ freq[lsp_index] = omega - step; ++ } else { ++ freq[lsp_index] = omega; ++ } ++ ++ ++ if ((*old) >= 0.0){ ++ *old = (float)-1.0 * FLOAT_MAX; ++ } else { ++ *old = FLOAT_MAX; ++ } ++ ++ omega = old_omega; ++ step_idx = 0; ++ ++ step_idx = LSF_NUMBER_OF_STEPS; ++ } else { ++ ++ if (step_idx == 0) { ++ old_omega = omega; ++ } ++ ++ step_idx++; ++ omega -= steps[step_idx]; ++ ++ /* Go back one grid step */ ++ ++ step = steps[step_idx]; ++ } ++ } else { ++ ++ /* increment omega until they are of different sign, ++ and we know there is at least one root between omega ++ and old_omega */ ++ *old = hlp5; ++ omega += step; ++ } ++ ++ ++ } ++ } ++ ++ for (i = 0; i= 0.5)){ ++ ++ ++ if (freq[0] <= 0.0) { ++ freq[0] = (float)0.022; ++ } ++ ++ ++ if (freq[LPC_FILTERORDER - 1] >= 0.5) { ++ freq[LPC_FILTERORDER - 1] = (float)0.499; ++ } ++ ++ hlp = (freq[LPC_FILTERORDER - 1] - freq[0]) / ++ (float) (LPC_FILTERORDER - 1); ++ ++ for (i=1; i ++#include ++ ++#include "iLBC_define.h" ++#include "constants.h" ++#include "helpfun.h" ++#include "packing.h" ++#include "string.h" ++ ++/*----------------------------------------------------------------* ++ * splitting an integer into first most significant bits and ++ * remaining least significant bits ++ *---------------------------------------------------------------*/ ++ ++void packsplit( ++ int *index, /* (i) the value to split */ ++ int *firstpart, /* (o) the value specified by most ++ significant bits */ ++ int *rest, /* (o) the value specified by least ++ significant bits */ ++ int bitno_firstpart, /* (i) number of bits in most ++ significant part */ ++ int bitno_total /* (i) number of bits in full range ++ of value */ ++){ ++ int bitno_rest = bitno_total-bitno_firstpart; ++ ++ ++ ++ *firstpart = *index>>(bitno_rest); ++ *rest = *index-(*firstpart<<(bitno_rest)); ++} ++ ++/*----------------------------------------------------------------* ++ * combining a value corresponding to msb's with a value ++ * corresponding to lsb's ++ *---------------------------------------------------------------*/ ++ ++void packcombine( ++ int *index, /* (i/o) the msb value in the ++ combined value out */ ++ int rest, /* (i) the lsb value */ ++ int bitno_rest /* (i) the number of bits in the ++ lsb part */ ++){ ++ *index = *index<0) { ++ ++ /* Jump to the next byte if end of this byte is reached*/ ++ ++ if (*pos==8) { ++ *pos=0; ++ (*bitstream)++; ++ **bitstream=0; ++ } ++ ++ ++ ++ posLeft=8-(*pos); ++ ++ /* Insert index into the bitstream */ ++ ++ if (bitno <= posLeft) { ++ **bitstream |= (unsigned char)(index<<(posLeft-bitno)); ++ *pos+=bitno; ++ bitno=0; ++ } else { ++ **bitstream |= (unsigned char)(index>>(bitno-posLeft)); ++ ++ *pos=8; ++ index-=((index>>(bitno-posLeft))<<(bitno-posLeft)); ++ ++ bitno-=posLeft; ++ } ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * unpacking of bits from bitstream, i.e., vector of bytes ++ *---------------------------------------------------------------*/ ++ ++void unpack( ++ unsigned char **bitstream, /* (i/o) on entrance pointer to ++ place in bitstream to ++ unpack new data from, on ++ exit pointer to place in ++ bitstream to unpack future ++ data from */ ++ int *index, /* (o) resulting value */ ++ int bitno, /* (i) number of bits used to ++ represent the value */ ++ int *pos /* (i/o) read position in the ++ current byte */ ++){ ++ int BitsLeft; ++ ++ *index=0; ++ ++ while (bitno>0) { ++ ++ /* move forward in bitstream when the end of the ++ byte is reached */ ++ ++ if (*pos==8) { ++ *pos=0; ++ (*bitstream)++; ++ } ++ ++ BitsLeft=8-(*pos); ++ ++ /* Extract bits to index */ ++ ++ ++ ++ if (BitsLeft>=bitno) { ++ *index+=((((**bitstream)<<(*pos)) & 0xFF)>>(8-bitno)); ++ ++ *pos+=bitno; ++ bitno=0; ++ } else { ++ ++ if ((8-bitno)>0) { ++ *index+=((((**bitstream)<<(*pos)) & 0xFF)>> ++ (8-bitno)); ++ *pos=8; ++ } else { ++ *index+=(((int)(((**bitstream)<<(*pos)) & 0xFF))<< ++ (bitno-8)); ++ *pos=8; ++ } ++ bitno-=BitsLeft; ++ } ++ } ++} ++ ++ +diff -druN codecs/ilbc.orig/packing.h codecs/ilbc/packing.h +--- codecs/ilbc.orig/packing.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/packing.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,67 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ packing.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __PACKING_H ++#define __PACKING_H ++ ++void packsplit( ++ int *index, /* (i) the value to split */ ++ int *firstpart, /* (o) the value specified by most ++ significant bits */ ++ int *rest, /* (o) the value specified by least ++ significant bits */ ++ int bitno_firstpart, /* (i) number of bits in most ++ significant part */ ++ int bitno_total /* (i) number of bits in full range ++ of value */ ++); ++ ++void packcombine( ++ int *index, /* (i/o) the msb value in the ++ combined value out */ ++ int rest, /* (i) the lsb value */ ++ int bitno_rest /* (i) the number of bits in the ++ lsb part */ ++); ++ ++void dopack( ++ unsigned char **bitstream, /* (i/o) on entrance pointer to ++ place in bitstream to pack ++ new data, on exit pointer ++ to place in bitstream to ++ pack future data */ ++ int index, /* (i) the value to pack */ ++ int bitno, /* (i) the number of bits that the ++ value will fit within */ ++ int *pos /* (i/o) write position in the ++ current byte */ ++); ++ ++void unpack( ++ unsigned char **bitstream, /* (i/o) on entrance pointer to ++ ++ ++ place in bitstream to ++ unpack new data from, on ++ exit pointer to place in ++ bitstream to unpack future ++ data from */ ++ int *index, /* (o) resulting value */ ++ int bitno, /* (i) number of bits used to ++ represent the value */ ++ int *pos /* (i/o) read position in the ++ current byte */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/syntFilter.c codecs/ilbc/syntFilter.c +--- codecs/ilbc.orig/syntFilter.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/syntFilter.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,108 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ syntFilter.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include "iLBC_define.h" ++#include "syntFilter.h" ++ ++/*----------------------------------------------------------------* ++ * LP synthesis filter. ++ *---------------------------------------------------------------*/ ++ ++void syntFilter( ++ float *Out, /* (i/o) Signal to be filtered */ ++ float *a, /* (i) LP parameters */ ++ int len, /* (i) Length of signal */ ++ float *mem /* (i/o) Filter state */ ++){ ++ int i, j; ++ float *po, *pi, *pa, *pm; ++ ++ po=Out; ++ ++ /* Filter first part using memory from past */ ++ ++ for (i=0; igsm + + +- no + + + diff --git a/net/asterisk/files/nocodecnego-patch-Makefile b/net/asterisk/files/nocodecnego-patch-Makefile new file mode 100644 index 000000000000..c5df459f1b2c --- /dev/null +++ b/net/asterisk/files/nocodecnego-patch-Makefile @@ -0,0 +1,228 @@ +--- Makefile.orig 2009-10-23 17:00:01.000000000 +0300 ++++ Makefile 2009-11-23 16:44:36.000000000 +0200 +@@ -101,7 +101,7 @@ + OVERWRITE=y + + # Include debug and macro symbols in the executables (-g) and profiling info (-pg) +-DEBUG=-g3 ++#DEBUG=-g3 + + # Staging directory + # Files are copied here temporarily during the install process +@@ -135,7 +135,7 @@ + ASTMANDIR=$(mandir) + ifneq ($(findstring BSD,$(OSARCH)),) + ASTVARLIBDIR=$(prefix)/share/asterisk +- ASTVARRUNDIR=$(localstatedir)/run/asterisk ++ ASTVARRUNDIR=$(localstatedir)/run + else + ASTVARLIBDIR=$(localstatedir)/lib/asterisk + endif +@@ -225,9 +225,11 @@ + _ASTLDFLAGS+=-L/usr/local/lib + endif + ++ifneq ($(OSARCH),FreeBSD) + ifneq ($(PROC),ultrasparc) + _ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi) + endif ++endif + + ifeq ($(PROC),ppc) + _ASTCFLAGS+=-fsigned-char +@@ -235,7 +237,7 @@ + + ifeq ($(OSARCH),FreeBSD) + # -V is understood by BSD Make, not by GNU make. +- BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk) ++ BSDVERSION=$(OSVERSION) + _ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi) + AST_LIBS+=$(shell if test $(BSDVERSION) -lt 502102 ; then echo "-lc_r"; else echo "-pthread"; fi) + endif +@@ -410,21 +412,21 @@ + rm -f build_tools/menuselect-deps + + datafiles: _all +- if [ `$(ID) -u` = 0 ]; then \ +- CFLAGS="$(_ASTCFLAGS) $(ASTCFLAGS)" build_tools/mkpkgconfig $(DESTDIR)/usr/lib/pkgconfig; \ +- fi ++ #if [ `$(ID) -u` = 0 ]; then \ ++ # CFLAGS="$(_ASTCFLAGS) $(ASTCFLAGS)" build_tools/mkpkgconfig $(DESTDIR)/usr/lib/pkgconfig; \ ++ #fi + # Should static HTTP be installed during make samples or even with its own target ala + # webvoicemail? There are portions here that *could* be customized but might also be + # improved a lot. I'll put it here for now. +- mkdir -p $(DESTDIR)$(ASTDATADIR)/static-http ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/static-http + for x in static-http/*; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \ + done +- mkdir -p $(DESTDIR)$(ASTDATADIR)/images ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/images + for x in images/*.jpg; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/images ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTDATADIR)/images ; \ + done +- mkdir -p $(DESTDIR)$(AGI_DIR) ++ $(MKDIR) $(DESTDIR)$(AGI_DIR) + $(MAKE) -C sounds install + + update: +@@ -445,47 +447,47 @@ + OLDHEADERS=$(filter-out $(NEWHEADERS),$(notdir $(wildcard $(DESTDIR)$(ASTHEADERDIR)/*.h))) + + installdirs: +- mkdir -p $(DESTDIR)$(MODULES_DIR) +- mkdir -p $(DESTDIR)$(ASTSBINDIR) +- mkdir -p $(DESTDIR)$(ASTETCDIR) +- mkdir -p $(DESTDIR)$(ASTBINDIR) +- mkdir -p $(DESTDIR)$(ASTVARRUNDIR) +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/dictate +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/system +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/tmp +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/meetme +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/monitor ++ $(MKDIR) $(DESTDIR)$(MODULES_DIR) ++ $(MKDIR) $(DESTDIR)$(ASTSBINDIR) ++ $(MKDIR) $(DESTDIR)$(ASTETCDIR) ++ $(MKDIR) $(DESTDIR)$(ASTBINDIR) ++ $(MKDIR) $(DESTDIR)$(ASTVARRUNDIR) ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/voicemail ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/dictate ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/system ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/tmp ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/meetme ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/monitor + + bininstall: _all installdirs $(SUBDIRS_INSTALL) +- $(INSTALL) -m 755 main/asterisk $(DESTDIR)$(ASTSBINDIR)/ ++ $(BSD_INSTALL_PROGRAM) main/asterisk $(DESTDIR)$(ASTSBINDIR)/ + $(LN) -sf asterisk $(DESTDIR)$(ASTSBINDIR)/rasterisk +- $(INSTALL) -m 755 contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/ +- $(INSTALL) -m 755 contrib/scripts/autosupport $(DESTDIR)$(ASTSBINDIR)/ ++ $(BSD_INSTALL_SCRIPT) contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/ ++ $(BSD_INSTALL_SCRIPT) contrib/scripts/autosupport $(DESTDIR)$(ASTSBINDIR)/ + if [ ! -f $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ]; then \ +- cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ;\ +- chmod 755 $(DESTDIR)$(ASTSBINDIR)/safe_asterisk;\ ++ cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > contrib/scripts/safe_asterisk.out;\ ++ ${BSD_INSTALL_SCRIPT} contrib/scripts/safe_asterisk.out $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ;\ + fi +- $(INSTALL) -d $(DESTDIR)$(ASTHEADERDIR) +- $(INSTALL) -m 644 include/asterisk.h $(DESTDIR)$(includedir) +- $(INSTALL) -m 644 include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR) ++ $(MKDIR) $(DESTDIR)$(ASTHEADERDIR) ++ $(BSD_INSTALL_DATA) include/asterisk.h $(DESTDIR)$(includedir) ++ $(BSD_INSTALL_DATA) include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR) + if [ -n "$(OLDHEADERS)" ]; then \ + rm -f $(addprefix $(DESTDIR)$(ASTHEADERDIR)/,$(OLDHEADERS)) ;\ + fi +- mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-csv +- mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-custom +- mkdir -p $(DESTDIR)$(ASTDATADIR)/keys +- mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware +- mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware/iax +- mkdir -p $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 keys/iaxtel.pub $(DESTDIR)$(ASTDATADIR)/keys +- $(INSTALL) -m 644 keys/freeworlddialup.pub $(DESTDIR)$(ASTDATADIR)/keys +- $(INSTALL) -m 644 doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(MKDIR) $(DESTDIR)$(ASTLOGDIR)/cdr-csv ++ $(MKDIR) $(DESTDIR)$(ASTLOGDIR)/cdr-custom ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/keys ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/firmware ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/firmware/iax ++ $(MKDIR) $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_DATA) keys/iaxtel.pub $(DESTDIR)$(ASTDATADIR)/keys ++ $(BSD_INSTALL_DATA) keys/freeworlddialup.pub $(DESTDIR)$(ASTDATADIR)/keys ++ $(BSD_INSTALL_MAN) doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_MAN) contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_MAN) contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_MAN) contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 + if [ -f contrib/firmware/iax/iaxy.bin ] ; then \ +- $(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \ ++ $(BSD_INSTALL_DATA) contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \ + fi + + $(SUBDIRS_INSTALL): +@@ -521,7 +523,7 @@ + @exit 1 + endif + +-install: badshell datafiles bininstall ++install: badshell datafiles bininstall samples + @if [ -x /usr/sbin/asterisk-post-install ]; then \ + /usr/sbin/asterisk-post-install $(DESTDIR) . ; \ + fi +@@ -559,31 +561,23 @@ + upgrade: bininstall + + adsi: +- mkdir -p $(DESTDIR)$(ASTETCDIR) ++ $(MKDIR) $(DESTDIR)$(ASTETCDIR) + for x in configs/*.adsi; do \ + if [ ! -f $(DESTDIR)$(ASTETCDIR)/$$x ]; then \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \ + fi ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`-dist ; \ + done + + samples: adsi +- mkdir -p $(DESTDIR)$(ASTETCDIR) ++ $(MKDIR) $(DESTDIR)$(ASTETCDIR) + for x in configs/*.sample; do \ +- if [ -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ]; then \ +- if [ "$(OVERWRITE)" = "y" ]; then \ +- if cmp -s $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` $$x ; then \ +- echo "Config file $$x is unchanged"; \ +- continue; \ +- fi ; \ +- mv -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`.old ; \ +- else \ +- echo "Skipping config file $$x"; \ +- continue; \ +- fi ;\ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`-dist ;\ ++ if [ ! -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ]; then \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`;\ + fi ; \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ;\ + done +- if [ "$(OVERWRITE)" = "y" ] || [ ! -f $(DESTDIR)$(ASTCONFPATH) ]; then \ ++ if true; then \ + ( \ + echo "[directories]" ; \ + echo "astetcdir => $(ASTETCDIR)" ; \ +@@ -629,20 +623,23 @@ + echo ";astctlowner = root" ; \ + echo ";astctlgroup = apache" ; \ + echo ";astctl = asterisk.ctl" ; \ +- ) > $(DESTDIR)$(ASTCONFPATH) ; \ ++ ) > $(DESTDIR)$(ASTCONFPATH)-dist ; \ ++ if [ ! -f $(DESTDIR)$(ASTCONFPATH) ]; then \ ++ cp $(DESTDIR)$(ASTCONFPATH)-dist $(DESTDIR)$(ASTCONFPATH); \ ++ fi; \ + else \ + echo "Skipping asterisk.conf creation"; \ + fi +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX + build_tools/make_sample_voicemail $(DESTDIR)/$(ASTDATADIR) $(DESTDIR)/$(ASTSPOOLDIR) + + webvmail: + @[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 ) + @[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 ) + $(INSTALL) -m 4755 -o root -g root contrib/scripts/vmail.cgi $(DESTDIR)$(HTTP_CGIDIR)/vmail.cgi +- mkdir -p $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk ++ $(MKDIR) $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk + for x in images/*.gif; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \ + done + @echo " +--------- Asterisk Web Voicemail ----------+" + @echo " + +" diff --git a/net/asterisk/files/patch-Makefile b/net/asterisk/files/patch-Makefile new file mode 100644 index 000000000000..0fccb52e346a --- /dev/null +++ b/net/asterisk/files/patch-Makefile @@ -0,0 +1,112 @@ +--- Makefile.orig 2010-10-14 00:24:44.000000000 +0200 ++++ Makefile 2010-11-17 12:24:32.000000000 +0100 +@@ -122,7 +122,7 @@ + OVERWRITE=y + + # Include debug and macro symbols in the executables (-g) and profiling info (-pg) +-DEBUG=-g3 ++#DEBUG=-g3 + + # Asterisk.conf is located in ASTETCDIR or by using the -C flag + # when starting Asterisk +@@ -220,11 +220,13 @@ + _ASTCFLAGS+=-isystem /usr/local/include + endif + ++ifneq ($(OSARCH),FreeBSD) + ifeq ($(findstring -march,$(_ASTCFLAGS) $(ASTCFLAGS)),) + ifneq ($(PROC),ultrasparc) + _ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi) + endif + endif ++endif + + ifeq ($(PROC),ppc) + _ASTCFLAGS+=-fsigned-char +@@ -232,7 +234,7 @@ + + ifeq ($(OSARCH),FreeBSD) + # -V is understood by BSD Make, not by GNU make. +- BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk) ++ BSDVERSION=$(OSVERSION) + _ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi) + endif + +@@ -460,13 +462,14 @@ + done + $(INSTALL) -m 644 doc/core-en_US.xml $(DESTDIR)$(ASTDATADIR)/static-http; + if [ -d doc/tex/asterisk ] ; then \ +- $(INSTALL) -d $(DESTDIR)$(ASTDATADIR)/static-http/docs ; \ ++ $(INSTALL) -d $(DESTDIR)$(DOCSDIR) ; \ ++ $(INSTALL) -d $(DESTDIR)$(DOCSDIR)/images ; \ + for n in doc/tex/asterisk/* ; do \ +- $(INSTALL) -m 644 $$n $(DESTDIR)$(ASTDATADIR)/static-http/docs ; \ ++ $(INSTALL) -m 644 $$n $(DESTDIR)$(DOCSDIR) ; \ + done \ + fi + for x in images/*.jpg; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/images ; \ ++ $(INSTALL) -m 644 $$x $(DESTDIR)$(DOCSDIR)/images ; \ + done + $(MAKE) -C sounds install + +@@ -526,6 +529,7 @@ + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/dictate" + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/meetme" + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/monitor" ++ $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/outgoing" + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/system" + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/tmp" + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/voicemail" +@@ -547,6 +551,7 @@ + $(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/static-http" + $(INSTALL) -d "$(DESTDIR)$(ASTMANDIR)/man8" + $(INSTALL) -d "$(DESTDIR)$(AGI_DIR)" ++ $(INSTALL) -d "$(DESTDIR)$(ASTDBDIR)" + + bininstall: _all installdirs $(SUBDIRS_INSTALL) + $(INSTALL) -m 755 main/asterisk $(DESTDIR)$(ASTSBINDIR)/ +@@ -606,7 +611,7 @@ + @exit 1 + endif + +-install: badshell bininstall datafiles ++install: badshell bininstall datafiles samples + @if [ -x /usr/sbin/asterisk-post-install ]; then \ + /usr/sbin/asterisk-post-install $(DESTDIR) . ; \ + fi +@@ -648,29 +653,18 @@ + else \ + echo "Installing $$x" ; \ + fi ; \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \ ++ $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`-dist ; \ + done + + samples: adsi + @echo Installing other config files... + @for x in configs/*.sample; do \ +- dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`" ; \ +- if [ -f $${dst} ]; then \ +- if [ "$(OVERWRITE)" = "y" ]; then \ +- if cmp -s $${dst} $$x ; then \ +- echo "Config file $$x is unchanged"; \ +- continue; \ +- fi ; \ +- mv -f $${dst} $${dst}.old ; \ +- else \ +- echo "Skipping config file $$x"; \ +- continue; \ +- fi ;\ ++ $(INSTALL) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`-dist ; \ ++ if [ ! -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ]; then \ ++ $(INSTALL) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`; \ + fi ; \ +- echo "Installing file $$x"; \ +- $(INSTALL) -m 644 $$x $${dst} ;\ + done +- if [ "$(OVERWRITE)" = "y" ]; then \ ++ @if true; then \ + echo "Updating asterisk.conf" ; \ + sed -e 's|^astetcdir.*$$|astetcdir => $(ASTETCDIR)|' \ + -e 's|^astmoddir.*$$|astmoddir => $(MODULES_DIR)|' \ diff --git a/net/asterisk/files/patch-Makefile.rules b/net/asterisk/files/patch-Makefile.rules new file mode 100644 index 000000000000..f90430ec9ddd --- /dev/null +++ b/net/asterisk/files/patch-Makefile.rules @@ -0,0 +1,16 @@ +--- Makefile.rules.orig 2009-09-28 22:09:25.000000000 +0300 ++++ Makefile.rules 2009-11-23 16:15:23.000000000 +0200 +@@ -37,11 +37,13 @@ + + OPTIMIZE?=-O6 + ++ifneq ($(OSARCH),FreeBSD) + ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS)),) + _ASTCFLAGS+=$(OPTIMIZE) + else + _ASTCFLAGS+=-O0 + endif ++endif + + # shortcuts for common combinations of flags; these must be recursively expanded so that + # per-target settings will be applied diff --git a/net/asterisk/files/patch-agi::Makefile b/net/asterisk/files/patch-agi::Makefile new file mode 100644 index 000000000000..277e18e70b08 --- /dev/null +++ b/net/asterisk/files/patch-agi::Makefile @@ -0,0 +1,13 @@ +--- ./agi/Makefile.orig 2010-07-23 15:26:41.000000000 +0200 ++++ ./agi/Makefile 2010-11-06 14:54:36.000000000 +0100 +@@ -16,7 +16,9 @@ + + .PHONY: clean all uninstall + +-AGIS=$(MENUSELECT_AGIS) ++AGIS_BIN=eagi-test eagi-sphinx-test ++AGIS_SCR=agi-test.agi jukebox.agi ++AGIS=$(AGIS_SCR) $(AGIS_BIN) + + ifeq ($(OSARCH),SunOS) + LIBS+=-lsocket -lnsl diff --git a/net/asterisk/files/patch-channels-chan_dahdi.c b/net/asterisk/files/patch-channels-chan_dahdi.c new file mode 100644 index 000000000000..ef904b48472e --- /dev/null +++ b/net/asterisk/files/patch-channels-chan_dahdi.c @@ -0,0 +1,33 @@ +--- channels/chan_dahdi.c.orig 2010-11-09 11:18:39.000000000 +0100 ++++ channels/chan_dahdi.c 2010-11-09 11:22:15.000000000 +0100 +@@ -4688,6 +4688,8 @@ + return; + } + if (p->echocancel.head.tap_length) { ++ struct dahdi_echocanparams *pecp; ++ + #if defined(HAVE_PRI) || defined(HAVE_SS7) + switch (p->sig) { + #if defined(HAVE_PRI) +@@ -4718,7 +4720,9 @@ + break; + } + #endif /* defined(HAVE_PRI) || defined(HAVE_SS7) */ +- res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_PARAMS, &p->echocancel); ++ ++ pecp = &p->echocancel.head; ++ res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_PARAMS, &pecp); + if (res) { + ast_log(LOG_WARNING, "Unable to enable echo cancellation on channel %d (%s)\n", p->channel, strerror(errno)); + } else { +@@ -4752,8 +4756,9 @@ + + if (p->echocanon) { + struct dahdi_echocanparams ecp = { .tap_length = 0 }; ++ struct dahdi_echocanparams *pecp = &ecp; + +- res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_PARAMS, &ecp); ++ res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_PARAMS, &pecp); + + if (res) + ast_log(LOG_WARNING, "Unable to disable echo cancellation on channel %d: %s\n", p->channel, strerror(errno)); diff --git a/net/asterisk/files/patch-channels::Makefile b/net/asterisk/files/patch-channels::Makefile new file mode 100644 index 000000000000..323c78d86f9a --- /dev/null +++ b/net/asterisk/files/patch-channels::Makefile @@ -0,0 +1,29 @@ +--- ./channels/Makefile.orig 2010-06-07 22:04:42.000000000 +0200 ++++ ./channels/Makefile 2010-11-06 14:54:36.000000000 +0100 +@@ -27,9 +27,10 @@ + endif + + ifeq ($(OSARCH),FreeBSD) +- PTLIB=-lpt_FreeBSD_x86_r +- H323LIB=-lh323_FreeBSD_x86_r ++ PTLIB=-lpt_r ++ H323LIB=-lh323_r + CHANH323LIB=-pthread ++ H323LDLIBS=$(PTLIB) $(H323LIB) $(CHANH323LIB) + endif + + ifeq ($(OSARCH),NetBSD) +@@ -86,9 +87,13 @@ + else + chan_h323.so: chan_h323.o h323/libchanh323.a + $(ECHO_PREFIX) echo " [LD] $^ -> $@" ++ifeq ($(OSARCH),FreeBSD) ++ $(CMD_PREFIX) $(CXX) $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) -L$(LOCALBASE)/lib $(H323LDFLAGS) -o $@ $< h323/libchanh323.a $(H323LDLIBS) $(CHANH323LIB) ++else + $(CMD_PREFIX) $(CXX) $(PTHREAD_CFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(SOLINK) -o $@ $< h323/libchanh323.a $(CHANH323LIB) -L$(PWLIBDIR)/lib $(PTLIB) -L$(OPENH323DIR)/lib $(H323LIB) -L/usr/lib -lcrypto -lssl -lexpat + endif + endif ++endif + + chan_misdn.o: _ASTCFLAGS+=-Imisdn + diff --git a/net/asterisk/files/patch-channels::chan_sip.c b/net/asterisk/files/patch-channels::chan_sip.c new file mode 100644 index 000000000000..9bb8267ffcc5 --- /dev/null +++ b/net/asterisk/files/patch-channels::chan_sip.c @@ -0,0 +1,11 @@ +--- channels/chan_sip.c.orig 2008-06-10 00:46:46.000000000 -0700 ++++ channels/chan_sip.c 2008-06-10 00:46:46.000000000 -0700 +@@ -496,7 +496,7 @@ + #define DEFAULT_MOHINTERPRET "default" + #define DEFAULT_MOHSUGGEST "" + #define DEFAULT_VMEXTEN "asterisk" +-#define DEFAULT_CALLERID "asterisk" ++#define DEFAULT_CALLERID "Unknown" + #define DEFAULT_NOTIFYMIME "application/simple-message-summary" + #define DEFAULT_MWITIME 10 + #define DEFAULT_ALLOWGUEST TRUE diff --git a/net/asterisk/files/patch-channels__sip__include__sip.h b/net/asterisk/files/patch-channels__sip__include__sip.h new file mode 100644 index 000000000000..f19fbf763646 --- /dev/null +++ b/net/asterisk/files/patch-channels__sip__include__sip.h @@ -0,0 +1,11 @@ +--- ./channels/sip/include/sip.h.orig 2010-11-08 04:46:46.000000000 +0100 ++++ ./channels/sip/include/sip.h 2010-11-08 04:47:07.000000000 +0100 +@@ -180,7 +180,7 @@ + #define DEFAULT_MOHINTERPRET "default" /*!< The default music class */ + #define DEFAULT_MOHSUGGEST "" + #define DEFAULT_VMEXTEN "asterisk" /*!< Default voicemail extension */ +-#define DEFAULT_CALLERID "asterisk" /*!< Default caller ID */ ++#define DEFAULT_CALLERID "Unknown" /*!< Default caller ID */ + #define DEFAULT_MWI_FROM "" + #define DEFAULT_NOTIFYMIME "application/simple-message-summary" + #define DEFAULT_ALLOWGUEST TRUE diff --git a/net/asterisk/files/patch-channels_h323_Makefile.in b/net/asterisk/files/patch-channels_h323_Makefile.in new file mode 100644 index 000000000000..d5d5c99300c1 --- /dev/null +++ b/net/asterisk/files/patch-channels_h323_Makefile.in @@ -0,0 +1,11 @@ +--- ./channels/h323/Makefile.in.orig 2010-06-03 16:48:09.000000000 +0200 ++++ ./channels/h323/Makefile.in 2010-11-06 14:54:36.000000000 +0100 +@@ -13,7 +13,7 @@ + STDCCFLAGS += -I../../include -include ../../include/asterisk/autoconfig.h + STDCCFLAGS += -fPIC + #OPTCCFLAGS += +-CFLAGS = -pipe ++CFLAGS = -pipe @CXXFLAGS@ + TARGET = libchanh323.a + TARGET += Makefile.ast + SOURCES = ast_h323.cxx compat_h323.cxx cisco-h225.cxx caps_h323.cxx diff --git a/net/asterisk/files/patch-configure b/net/asterisk/files/patch-configure new file mode 100644 index 000000000000..0cc2a352b5a1 --- /dev/null +++ b/net/asterisk/files/patch-configure @@ -0,0 +1,33 @@ +--- configure.orig 2010-10-07 22:58:47.000000000 +0200 ++++ configure 2010-11-06 15:54:49.000000000 +0100 +@@ -4670,9 +4670,9 @@ + astheaderdir='${includedir}/asterisk' + astlibdir='${libdir}/asterisk' + astmandir='${mandir}' +-astvarlibdir='${localstatedir}/lib/asterisk' ++astvarlibdir='${prefix}/share/asterisk' + astdatadir='${astvarlibdir}' +-astdbdir='${astvarlibdir}' ++astdbdir='${localstatedir}/db/asterisk' + astkeydir='${astvarlibdir}' + astspooldir='${localstatedir}/spool/asterisk' + astlogdir='${localstatedir}/log/asterisk' +@@ -4694,9 +4694,6 @@ + + case "${host_os}" in + freebsd*) +- +- CPPFLAGS=-I/usr/local/include +- LDFLAGS=-L/usr/local/lib + ;; + openbsd*) + +@@ -25058,7 +25055,7 @@ + + fi + +- PLATFORM_OPENH323="h323_${PWLIB_PLATFORM}_${OPENH323_SUFFIX}" ++ PLATFORM_OPENH323="h323_${OPENH323_SUFFIX}" + + if test "${HAS_OPENH323:-unset}" != "unset"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking OpenH323 installation validity" >&5 diff --git a/net/asterisk/files/patch-include::asterisk::utils.h b/net/asterisk/files/patch-include::asterisk::utils.h new file mode 100644 index 000000000000..a06f7d065c84 --- /dev/null +++ b/net/asterisk/files/patch-include::asterisk::utils.h @@ -0,0 +1,13 @@ + +$FreeBSD$ + +--- include/asterisk/utils.h 2004/10/10 12:55:50 1.1 ++++ include/asterisk/utils.h 2004/10/10 12:56:43 +@@ -37,7 +37,6 @@ + #ifdef inet_ntoa + #undef inet_ntoa + #endif +-#define inet_ntoa __dont__use__inet_ntoa__use__ast_inet_ntoa__instead__ + + #ifdef LINUX + #define ast_pthread_create pthread_create diff --git a/net/asterisk/files/patch-main::Makefile b/net/asterisk/files/patch-main::Makefile new file mode 100644 index 000000000000..4bb726d70c0f --- /dev/null +++ b/net/asterisk/files/patch-main::Makefile @@ -0,0 +1,30 @@ +--- ./main/Makefile.orig 2010-08-02 16:41:46.000000000 +0200 ++++ ./main/Makefile 2010-11-06 14:54:37.000000000 +0100 +@@ -107,8 +107,8 @@ + cd editline && test -f config.h || CFLAGS="$(PTHREAD_CFLAGS) $(subst $(ASTTOPDIR),../../,$(_ASTCFLAGS:-Werror=) $(ASTCFLAGS))" LDFLAGS="$(_ASTLDFLAGS) $(ASTLDFLAGS)" ./configure --build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM) --with-ncurses=$(NCURSES_DIR) --with-curses=$(CURSES_DIR) --with-termcap=$(TERMCAP_DIR) --with-tinfo=$(TINFO_DIR) + $(MAKE) -C editline libedit.a + +-db1-ast/libdb1.a: CHECK_SUBDIR +- _ASTCFLAGS="$(_ASTCFLAGS) -Wno-strict-aliasing" ASTCFLAGS="$(ASTCFLAGS)" $(MAKE) -C db1-ast libdb1.a ++#db1-ast/libdb1.a: CHECK_SUBDIR ++# _ASTCFLAGS="$(_ASTCFLAGS) -Wno-strict-aliasing" ASTCFLAGS="$(ASTCFLAGS)" $(MAKE) -C db1-ast libdb1.a + + ifneq ($(findstring REBUILD_PARSERS,$(MENUSELECT_CFLAGS)),) + ast_expr2.c ast_expr2.h: ast_expr2.y +@@ -173,13 +173,13 @@ + + $(OBJS): _ASTCFLAGS+=-DAST_MODULE=\"core\" + +-$(MAIN_TGT): $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) ++$(MAIN_TGT): $(OBJS) editline/libedit.a $(AST_EMBED_LDSCRIPTS) + @$(CC) -c -o buildinfo.o $(_ASTCFLAGS) buildinfo.c $(ASTCFLAGS) + $(ECHO_PREFIX) echo " [LD] $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) -> $@" + ifneq ($(findstring chan_h323,$(MENUSELECT_CHANNELS)),) +- $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(GMIMELDFLAGS) ++ $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(LDFLAGS) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(OBJS) editline/libedit.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(GMIMELDFLAGS) + else +- $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) $(GMIMELDFLAGS) ++ $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(LDFLAGS) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $(OBJS) editline/libedit.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) $(GMIMELDFLAGS) + endif + + ifeq ($(GNU_LD),1) diff --git a/net/asterisk/files/patch-main::db.c b/net/asterisk/files/patch-main::db.c new file mode 100644 index 000000000000..34c9bd20a8a0 --- /dev/null +++ b/net/asterisk/files/patch-main::db.c @@ -0,0 +1,18 @@ +--- ./main/db.c.orig 2010-09-10 22:31:58.000000000 +0200 ++++ ./main/db.c 2010-11-06 14:54:37.000000000 +0100 +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + + #include "asterisk/channel.h" + #include "asterisk/file.h" +@@ -46,7 +47,6 @@ + #include "asterisk/utils.h" + #include "asterisk/lock.h" + #include "asterisk/manager.h" +-#include "db1-ast/include/db.h" + + /*** DOCUMENTATION + diff --git a/net/asterisk/files/patch-main::frame.c b/net/asterisk/files/patch-main::frame.c new file mode 100644 index 000000000000..232de08a9e21 --- /dev/null +++ b/net/asterisk/files/patch-main::frame.c @@ -0,0 +1,14 @@ + +$FreeBSD$ + +--- main/frame.c.orig Wed Jan 25 13:22:43 2006 ++++ main/frame.c Wed Jan 25 13:21:25 2006 +@@ -1170,7 +1170,7 @@ static int g723_len(unsigned char buf) + { + switch(buf & TYPE_MASK) { + case TYPE_DONTSEND: +- return 0; ++ return 2; + break; + case TYPE_SILENCE: + return 4; diff --git a/net/asterisk/files/patch-main::utils.c b/net/asterisk/files/patch-main::utils.c new file mode 100644 index 000000000000..7440848a1521 --- /dev/null +++ b/net/asterisk/files/patch-main::utils.c @@ -0,0 +1,13 @@ +--- ./main/utils.c.orig 2010-08-06 20:57:10.000000000 +0200 ++++ ./main/utils.c 2010-11-06 14:54:37.000000000 +0100 +@@ -990,8 +990,8 @@ + pthread_attr_init(attr); + } + +-#ifdef __linux__ +- /* On Linux, pthread_attr_init() defaults to PTHREAD_EXPLICIT_SCHED, ++#ifdef __linux__ || defined(__FreeBSD__) ++ /* On Linux and FreeBSD, pthread_attr_init() defaults to PTHREAD_EXPLICIT_SCHED, + which is kind of useless. Change this here to + PTHREAD_INHERIT_SCHED; that way the -p option to set realtime + priority will propagate down to new threads by default. diff --git a/net/asterisk/files/patch-main__lock.c b/net/asterisk/files/patch-main__lock.c new file mode 100644 index 000000000000..a802d8817a1e --- /dev/null +++ b/net/asterisk/files/patch-main__lock.c @@ -0,0 +1,13 @@ +--- ./main/lock.c.orig 2010-11-06 15:00:15.000000000 +0100 ++++ ./main/lock.c 2010-11-06 15:00:23.000000000 +0100 +@@ -679,10 +679,6 @@ + + pthread_rwlockattr_init(&attr); + +-#ifdef HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NP +- pthread_rwlockattr_setkind_np(&attr, PTHREAD_RWLOCK_PREFER_WRITER_NP); +-#endif +- + res = pthread_rwlock_init(&t->lock, &attr); + pthread_rwlockattr_destroy(&attr); + return res; diff --git a/net/asterisk/files/patch-rtp_timeout b/net/asterisk/files/patch-rtp_timeout new file mode 100644 index 000000000000..6f60c74cff41 --- /dev/null +++ b/net/asterisk/files/patch-rtp_timeout @@ -0,0 +1,25 @@ +--- channels/chan_sip.c.orig 2009-04-14 08:58:13.000000000 +0100 ++++ channels/chan_sip.c 2009-04-14 09:00:58.000000000 +0100 +@@ -16287,7 +16287,6 @@ + restartsearch: + /* Check for interfaces needing to be killed */ + ast_mutex_lock(&iflock); +- t = time(NULL); + /* don't scan the interface list if it hasn't been a reasonable period + of time since the last time we did it (when MWI is being sent, we can + get back to this point every millisecond or less) +@@ -16306,12 +16305,14 @@ + (sip->owner->_state == AST_STATE_UP) && + !sip->redirip.sin_addr.s_addr && + sip->t38.state != T38_ENABLED) { ++ t = time(NULL); + if (sip->lastrtptx && + ast_rtp_get_rtpkeepalive(sip->rtp) && + (t > sip->lastrtptx + ast_rtp_get_rtpkeepalive(sip->rtp))) { + /* Need to send an empty RTP packet */ + sip->lastrtptx = time(NULL); + ast_rtp_sendcng(sip->rtp, 0); ++ t = time(NULL); + } + if (sip->lastrtprx && + (ast_rtp_get_rtptimeout(sip->rtp) || ast_rtp_get_rtpholdtimeout(sip->rtp)) && diff --git a/net/asterisk/files/patch-suppress_log_dups.diff b/net/asterisk/files/patch-suppress_log_dups.diff new file mode 100644 index 000000000000..115b69f21ca1 --- /dev/null +++ b/net/asterisk/files/patch-suppress_log_dups.diff @@ -0,0 +1,270 @@ +Index: main/logger.c +=================================================================== +--- main/logger.c (revision 188505) ++++ main/logger.c (working copy) +@@ -140,6 +140,17 @@ + AST_THREADSTORAGE(log_buf, log_buf_init); + #define LOG_BUF_INIT_SIZE 128 + ++/* ++ * Storage for previous log message to prevent log storms ++ */ ++static int stored_log_level; ++static int stored_log_dup_count = 0; ++static char *stored_log_msg = NULL; ++static const char *stored_log_file; ++static int stored_log_line; ++static const char *stored_log_function; ++static ast_mutex_t stored_log_msg_lock; ++ + static int make_components(char *s, int lineno) + { + char *w; +@@ -591,6 +602,8 @@ + char tmp[256]; + int res = 0; + ++ ast_mutex_init(&stored_log_msg_lock); ++ + /* auto rotate if sig SIGXFSZ comes a-knockin */ + (void) signal(SIGXFSZ,(void *) handle_SIGXFSZ); + +@@ -655,14 +668,14 @@ + return; + } + +-static void __attribute__((format(printf, 5, 0))) ast_log_vsyslog(int level, const char *file, int line, const char *function, const char *fmt, va_list args) ++static void ast_log_syslog(int level, const char *file, int line, const char *function, const char *msg) + { + char buf[BUFSIZ]; + char *s; + + if (level >= SYSLOG_NLEVELS) { + /* we are locked here, so cannot ast_log() */ +- fprintf(stderr, "ast_log_vsyslog called with bogus level: %d\n", level); ++ fprintf(stderr, "ast_log_syslog called with bogus level: %d\n", level); + return; + } + if (level == __LOG_VERBOSE) { +@@ -676,27 +689,20 @@ + levels[level], (long)GETTID(), file, line, function); + } + s = buf + strlen(buf); +- vsnprintf(s, sizeof(buf) - strlen(buf), fmt, args); ++ snprintf(s, sizeof(buf) - strlen(buf), "%s", msg); + term_strip(s, s, strlen(s) + 1); + syslog(syslog_level_map[level], "%s", buf); + } + +-/*! +- * \brief send log messages to syslog and/or the console +- */ +-void ast_log(int level, const char *file, int line, const char *function, const char *fmt, ...) ++static void __ast_log(int level, const char *file, int line, const char *function, char *msg, int msglen) + { + struct logchannel *chan; +- struct ast_dynamic_str *buf; + time_t t; + struct tm tm; + char date[256]; ++ char buf[2048]; ++ int res; + +- va_list ap; +- +- if (!(buf = ast_dynamic_str_thread_get(&log_buf, LOG_BUF_INIT_SIZE))) +- return; +- + if (AST_LIST_EMPTY(&logchannels)) + { + /* +@@ -704,35 +710,12 @@ + * so just log to stdout + */ + if (level != __LOG_VERBOSE) { +- int res; +- va_start(ap, fmt); +- res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); +- va_end(ap); +- if (res != AST_DYNSTR_BUILD_FAILED) { +- term_filter_escapes(buf->str); +- fputs(buf->str, stdout); +- } ++ term_filter_escapes(msg); ++ fputs(msg, stdout); + } + return; + } + +- /* don't display LOG_DEBUG messages unless option_verbose _or_ option_debug +- are non-zero; LOG_DEBUG messages can still be displayed if option_debug +- is zero, if option_verbose is non-zero (this allows for 'level zero' +- LOG_DEBUG messages to be displayed, if the logmask on any channel +- allows it) +- */ +- if (!option_verbose && !option_debug && (level == __LOG_DEBUG)) +- return; +- +- /* Ignore anything that never gets logged anywhere */ +- if (!(global_logmask & (1 << level))) +- return; +- +- /* Ignore anything other than the currently debugged file if there is one */ +- if ((level == __LOG_DEBUG) && !ast_strlen_zero(debug_filename) && strcasecmp(debug_filename, file)) +- return; +- + time(&t); + ast_localtime(&t, &tm, NULL); + strftime(date, sizeof(date), dateformat, &tm); +@@ -740,13 +723,8 @@ + AST_LIST_LOCK(&logchannels); + + if (logfiles.event_log && level == __LOG_EVENT) { +- va_start(ap, fmt); +- +- fprintf(eventlog, "%s asterisk[%ld]: ", date, (long)getpid()); +- vfprintf(eventlog, fmt, ap); ++ fprintf(eventlog, "%s asterisk[%ld]: %s", date, (long)getpid(), msg); + fflush(eventlog); +- +- va_end(ap); + AST_LIST_UNLOCK(&logchannels); + return; + } +@@ -756,18 +734,15 @@ + break; + /* Check syslog channels */ + if (chan->type == LOGTYPE_SYSLOG && (chan->logmask & (1 << level))) { +- va_start(ap, fmt); +- ast_log_vsyslog(level, file, line, function, fmt, ap); +- va_end(ap); ++ ast_log_syslog(level, file, line, function, msg); + /* Console channels */ + } else if ((chan->logmask & (1 << level)) && (chan->type == LOGTYPE_CONSOLE)) { + char linestr[128]; + char tmp1[80], tmp2[80], tmp3[80], tmp4[80]; + + if (level != __LOG_VERBOSE) { +- int res; + sprintf(linestr, "%d", line); +- ast_dynamic_str_thread_set(&buf, BUFSIZ, &log_buf, ++ snprintf(buf, sizeof(buf), + "[%s] %s[%ld]: %s:%s %s: ", + date, + term_color(tmp1, levels[level], colors[level], 0, sizeof(tmp1)), +@@ -776,23 +751,17 @@ + term_color(tmp3, linestr, COLOR_BRWHITE, 0, sizeof(tmp3)), + term_color(tmp4, function, COLOR_BRWHITE, 0, sizeof(tmp4))); + /*filter to the console!*/ +- term_filter_escapes(buf->str); +- ast_console_puts_mutable(buf->str); +- +- va_start(ap, fmt); +- res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); +- va_end(ap); +- if (res != AST_DYNSTR_BUILD_FAILED) +- ast_console_puts_mutable(buf->str); ++ term_filter_escapes(buf); ++ ast_console_puts_mutable(buf); ++ ast_console_puts_mutable(msg); + } + /* File channels */ + } else if ((chan->logmask & (1 << level)) && (chan->fileptr)) { +- int res; +- ast_dynamic_str_thread_set(&buf, BUFSIZ, &log_buf, ++ snprintf(buf, sizeof(buf), + "[%s] %s[%ld] %s: ", + date, levels[level], (long)GETTID(), file); +- res = fprintf(chan->fileptr, "%s", buf->str); +- if (res <= 0 && !ast_strlen_zero(buf->str)) { /* Error, no characters printed */ ++ res = fprintf(chan->fileptr, "%s", buf); ++ if (res <= 0 && !ast_strlen_zero(buf)) { /* Error, no characters printed */ + fprintf(stderr,"**** Asterisk Logging Error: ***********\n"); + if (errno == ENOMEM || errno == ENOSPC) { + fprintf(stderr, "Asterisk logging error: Out of disk space, can't log to log file %s\n", chan->filename); +@@ -801,16 +770,10 @@ + manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: No\r\nReason: %d - %s\r\n", chan->filename, errno, strerror(errno)); + chan->disabled = 1; + } else { +- int res; + /* No error message, continue printing */ +- va_start(ap, fmt); +- res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); +- va_end(ap); +- if (res != AST_DYNSTR_BUILD_FAILED) { +- term_strip(buf->str, buf->str, buf->len); +- fputs(buf->str, chan->fileptr); +- fflush(chan->fileptr); +- } ++ term_strip(msg, msg, msglen); ++ fputs(msg, chan->fileptr); ++ fflush(chan->fileptr); + } + } + } +@@ -825,6 +788,65 @@ + } + } + ++/*! ++ * \brief send log messages to syslog and/or the console ++ */ ++void ast_log(int level, const char *file, int line, const char *function, const char *fmt, ...) ++{ ++ struct ast_dynamic_str *buf; ++ int res; ++ va_list ap; ++ ++ if (!(buf = ast_dynamic_str_thread_get(&log_buf, LOG_BUF_INIT_SIZE))) ++ return; ++ ++ va_start(ap, fmt); ++ res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); ++ va_end(ap); ++ if (res == AST_DYNSTR_BUILD_FAILED) ++ return; ++ ++ /* don't display LOG_DEBUG messages unless option_verbose _or_ option_debug ++ are non-zero; LOG_DEBUG messages can still be displayed if option_debug ++ is zero, if option_verbose is non-zero (this allows for 'level zero' ++ LOG_DEBUG messages to be displayed, if the logmask on any channel ++ allows it) ++ */ ++ if (!option_verbose && !option_debug && (level == __LOG_DEBUG)) ++ return; ++ ++ /* Ignore anything that never gets logged anywhere */ ++ if (!(global_logmask & (1 << level))) ++ return; ++ ++ /* Ignore anything other than the currently debugged file if there is one */ ++ if ((level == __LOG_DEBUG) && !ast_strlen_zero(debug_filename) && strcasecmp(debug_filename, file)) ++ return; ++ ++ ast_mutex_lock(&stored_log_msg_lock); ++ if (stored_log_msg == NULL || stored_log_level != level || strcmp(buf->str, stored_log_msg) != 0) { ++ if (stored_log_dup_count > 0) { ++ char buf2[1024]; ++ ++ snprintf(buf2, sizeof(buf2), "Last message repeated %d times\n", stored_log_dup_count); ++ __ast_log(stored_log_level, stored_log_file, stored_log_line, stored_log_function, buf2, strlen(buf2)); ++ } ++ if (stored_log_msg != NULL) ++ ast_free(stored_log_msg); ++ stored_log_msg = ast_strdup(buf->str); ++ stored_log_level = level; ++ stored_log_dup_count = 0; ++ stored_log_file = file; ++ stored_log_line = line; ++ stored_log_function = function; ++ __ast_log(level, file, line, function, buf->str, buf->len); ++ } ++ else ++ ++stored_log_dup_count; ++ ++ ast_mutex_unlock(&stored_log_msg_lock); ++} ++ + void ast_backtrace(void) + { + #ifdef linux diff --git a/net/asterisk/files/rtp_force_dtmf-codecnego.diff b/net/asterisk/files/rtp_force_dtmf-codecnego.diff new file mode 100644 index 000000000000..a670364ba603 --- /dev/null +++ b/net/asterisk/files/rtp_force_dtmf-codecnego.diff @@ -0,0 +1,86 @@ +--- channels/chan_sip.c.orig 2009-11-20 17:56:30.000000000 +0200 ++++ channels/chan_sip.c 2009-11-20 17:59:43.000000000 +0200 +@@ -565,6 +565,9 @@ + static unsigned int global_tos_sip; /*!< IP type of service for SIP packets */ + static unsigned int global_tos_audio; /*!< IP type of service for audio RTP packets */ + static unsigned int global_tos_video; /*!< IP type of service for video RTP packets */ ++static int global_force_dtmf_relay = 0; ++static int global_force_dtmf_relay_pt = 101; ++ + static int compactheaders; /*!< send compact sip headers */ + static int recordhistory; /*!< Record SIP history. Off by default */ + static int dumphistory; /*!< Dump history to verbose before destroying SIP dialog */ +@@ -5329,6 +5332,7 @@ + int x; + int codec_index = 0; + int codec_pt_order[256]; ++ int dtmf_present = 0; + + /* Host information */ + struct ast_hostent audiohp; +@@ -5600,12 +5604,21 @@ + for (x = 0; x < codec_index; ++x) { + struct rtpPayloadType pt; + pt = ast_rtp_lookup_pt(p->rtp, codec_pt_order[x]); ++ if (pt.code == AST_RTP_DTMF) ++ dtmf_present = 1; + if (!pt.isAstFormat && !pt.code && p->vrtp) + pt = ast_rtp_lookup_pt(p->vrtp, codec_pt_order[x]); + if (pt.isAstFormat) + ast_codec_pref_append(&p->formats, pt.code); + } + ast_codec_pref_remove2(&p->formats, ~p->usercapability); ++ if (!dtmf_present && global_force_dtmf_relay) { ++ newnoncodeccapability |= AST_RTP_DTMF; ++ ast_rtp_set_m_type(newaudiortp, global_force_dtmf_relay_pt); ++ codec_pt_order[codec_index++] = global_force_dtmf_relay_pt; ++ ast_rtp_set_rtpmap_type(newaudiortp, global_force_dtmf_relay_pt, "audio", "telephone-event", 0); ++ } ++ + + /* Now gather all of the codecs that we are asked for: */ + ast_rtp_get_current_formats(newaudiortp, &peercapability, &peernoncodeccapability); +@@ -18369,6 +18382,9 @@ + + global_matchexterniplocally = FALSE; + ++ global_force_dtmf_relay = 0; ++ global_force_dtmf_relay_pt = 101; ++ + /* Copy the default jb config over global_jbconf */ + memcpy(&global_jbconf, &default_jbconf, sizeof(struct ast_jb_conf)); + +@@ -18431,6 +18447,18 @@ + } + } else if (!strcasecmp(v->name, "vmexten")) { + ast_copy_string(default_vmexten, v->value, sizeof(default_vmexten)); ++ } else if (!strcasecmp(v->name, "rtp_force_dtmf_relay")) { ++ if ((global_force_dtmf_relay = ast_true(v->value))) ++ ast_verbose("RTP DTMF relaying will be enforced\n"); ++ else ++ ast_verbose("RTP DTMF relaying will not be enforced\n"); ++ } else if (!strcasecmp(v->name, "rtp_force_dtmf_relay_pt")) { ++ sscanf(v->value, "%d", &global_force_dtmf_relay_pt); ++ if (global_force_dtmf_relay_pt < 96 || global_force_dtmf_relay_pt > 255) { ++ ast_verbose("RTP forced DTMF relay payload type is not valid: %d. Using default (101)\n", global_force_dtmf_relay_pt); ++ global_force_dtmf_relay_pt = 101; ++ } else ++ ast_log(LOG_WARNING, "RTP forced DTMF relay payload type is %d\n", global_force_dtmf_relay_pt); + } else if (!strcasecmp(v->name, "rtptimeout")) { + if ((sscanf(v->value, "%30d", &global_rtptimeout) != 1) || (global_rtptimeout < 0)) { + ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d. Using default.\n", v->value, v->lineno); +--- configs/sip.conf.sample.orig 2008-04-25 08:53:52.000000000 -0700 ++++ configs/sip.conf.sample 2008-06-10 00:45:37.000000000 -0700 +@@ -53,6 +53,12 @@ + ; and multiline formatted headers for strict + ; SIP compatibility (defaults to "no") + ++;rtp_force_dtmf_relay=no ; Enable RFC2833 DTMFs to be sent even if peer ++ ; hasn't announced support for it. Default: no ++ ++;rtp_force_dtmf_relay_pt=101 ; RTP payload type value for enforced RFC2833 ++ ; DTMFs. Default: 101 ++ + ; See doc/ip-tos.txt for a description of these parameters. + ;tos_sip=cs3 ; Sets TOS for SIP packets. + ;tos_audio=ef ; Sets TOS for RTP audio packets. diff --git a/net/asterisk/files/rtp_force_dtmf-nocodecnego.diff b/net/asterisk/files/rtp_force_dtmf-nocodecnego.diff new file mode 100644 index 000000000000..9dcb7d8b134f --- /dev/null +++ b/net/asterisk/files/rtp_force_dtmf-nocodecnego.diff @@ -0,0 +1,69 @@ +--- channels/chan_sip.c.orig 2009-11-23 17:28:47.000000000 +0200 ++++ channels/chan_sip.c 2009-11-23 17:29:29.000000000 +0200 +@@ -565,6 +565,9 @@ + static unsigned int global_tos_sip; /*!< IP type of service for SIP packets */ + static unsigned int global_tos_audio; /*!< IP type of service for audio RTP packets */ + static unsigned int global_tos_video; /*!< IP type of service for video RTP packets */ ++static int global_force_dtmf_relay = 0; ++static int global_force_dtmf_relay_pt = 101; ++ + static int compactheaders; /*!< send compact sip headers */ + static int recordhistory; /*!< Record SIP history. Off by default */ + static int dumphistory; /*!< Dump history to verbose before destroying SIP dialog */ +@@ -5593,6 +5596,12 @@ + + /* Now gather all of the codecs that we are asked for: */ + ast_rtp_get_current_formats(newaudiortp, &peercapability, &peernoncodeccapability); ++ /* Add telephone-event */ ++ if (global_force_dtmf_relay && !(peernoncodeccapability & AST_RTP_DTMF)) { ++ ast_rtp_set_m_type(newaudiortp, global_force_dtmf_relay_pt); ++ ast_rtp_set_rtpmap_type(newaudiortp, global_force_dtmf_relay_pt, "audio", "telephone-event", 0); ++ peernoncodeccapability |= AST_RTP_DTMF; ++ } + ast_rtp_get_current_formats(newvideortp, &vpeercapability, &vpeernoncodeccapability); + + newjointcapability = p->capability & (peercapability | vpeercapability); +@@ -18366,6 +18375,9 @@ + + global_matchexterniplocally = FALSE; + ++ global_force_dtmf_relay = 0; ++ global_force_dtmf_relay_pt = 101; ++ + /* Copy the default jb config over global_jbconf */ + memcpy(&global_jbconf, &default_jbconf, sizeof(struct ast_jb_conf)); + +@@ -18428,6 +18440,18 @@ + } + } else if (!strcasecmp(v->name, "vmexten")) { + ast_copy_string(default_vmexten, v->value, sizeof(default_vmexten)); ++ } else if (!strcasecmp(v->name, "rtp_force_dtmf_relay")) { ++ if ((global_force_dtmf_relay = ast_true(v->value))) ++ ast_verbose("RTP DTMF relaying will be enforced\n"); ++ else ++ ast_verbose("RTP DTMF relaying will not be enforced\n"); ++ } else if (!strcasecmp(v->name, "rtp_force_dtmf_relay_pt")) { ++ sscanf(v->value, "%d", &global_force_dtmf_relay_pt); ++ if (global_force_dtmf_relay_pt < 96 || global_force_dtmf_relay_pt > 255) { ++ ast_verbose("RTP forced DTMF relay payload type is not valid: %d. Using default (101)\n", global_force_dtmf_relay_pt); ++ global_force_dtmf_relay_pt = 101; ++ } else ++ ast_log(LOG_WARNING, "RTP forced DTMF relay payload type is %d\n", global_force_dtmf_relay_pt); + } else if (!strcasecmp(v->name, "rtptimeout")) { + if ((sscanf(v->value, "%30d", &global_rtptimeout) != 1) || (global_rtptimeout < 0)) { + ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d. Using default.\n", v->value, v->lineno); +--- configs/sip.conf.sample.orig 2008-08-16 01:33:42.000000000 +0300 ++++ configs/sip.conf.sample 2008-12-12 17:03:11.000000000 +0200 +@@ -49,6 +49,12 @@ + ; and multiline formatted headers for strict + ; SIP compatibility (defaults to "no") + ++;rtp_force_dtmf_relay=no ; Enable RFC2833 DTMFs to be sent even if peer ++ ; hasn't announced support for it. Default: no ++ ++;rtp_force_dtmf_relay_pt=101 ; RTP payload type value for enforced RFC2833 ++ ; DTMFs. Default: 101 ++ + ; See doc/ip-tos.txt for a description of these parameters. + ;tos_sip=cs3 ; Sets TOS for SIP packets. + ;tos_audio=ef ; Sets TOS for RTP audio packets. diff --git a/net/asterisk/files/sip_force_callid.diff b/net/asterisk/files/sip_force_callid.diff new file mode 100644 index 000000000000..09cf274581d1 --- /dev/null +++ b/net/asterisk/files/sip_force_callid.diff @@ -0,0 +1,11 @@ +--- channels/chan_sip.c.orig 2009-05-12 21:18:44.000000000 +0300 ++++ channels/chan_sip.c 2009-05-26 12:58:10.000000000 +0300 +@@ -3061,6 +3061,8 @@ + } else if (!strcasecmp(ast_var_name(current), "SIPTRANSFER_REPLACES")) { + /* We're replacing a call. */ + p->options->replaces = ast_var_value(current); ++ } else if (!strcasecmp(ast_var_name(current), "SIP_FORCE_CALLID")) { ++ ast_string_field_set(p, callid, ast_var_value(current)); + } + } + diff --git a/net/asterisk/files/sip_set_auth.diff b/net/asterisk/files/sip_set_auth.diff new file mode 100644 index 000000000000..1addc4f48add --- /dev/null +++ b/net/asterisk/files/sip_set_auth.diff @@ -0,0 +1,45 @@ +--- channels/chan_sip.c.orig 2008-04-29 08:21:05.000000000 -0400 ++++ channels/chan_sip.c 2008-05-28 18:41:48.000000000 -0400 +@@ -15962,6 +15978,9 @@ + char *ext, *host; + char tmp[256]; + char *dest = data; ++ char *secret = NULL; ++ char *md5secret = NULL; ++ char *authname = NULL; + + if (!(p = sip_alloc(NULL, NULL, 0, SIP_INVITE))) { + ast_log(LOG_ERROR, "Unable to build sip pvt data for '%s' (Out of memory or socket error)\n", (char *)data); +@@ -15983,6 +16002,17 @@ + if (host) { + *host++ = '\0'; + ext = tmp; ++ secret = strchr(ext, ':'); ++ if (secret) { ++ *secret++ = '\0'; ++ md5secret = strchr(secret, ':'); ++ if (md5secret) { ++ *md5secret++ = '\0'; ++ authname = strchr(md5secret, ':'); ++ if (authname) ++ *authname++ = '\0'; ++ } ++ } + } else { + ext = strchr(tmp, '/'); + if (ext) +@@ -16015,6 +16045,14 @@ + ast_string_field_set(p, username, ext); + ast_string_field_free(p, fullcontact); + } ++ if (secret && !ast_strlen_zero(secret)) ++ ast_string_field_set(p, peersecret, secret); ++ ++ if (md5secret && !ast_strlen_zero(md5secret)) ++ ast_string_field_set(p, peermd5secret, md5secret); ++ ++ if (authname && !ast_strlen_zero(authname)) ++ ast_string_field_set(p, authname, authname); + #if 0 + printf("Setting up to call extension '%s' at '%s'\n", ext ? ext : "", host); + #endif diff --git a/net/asterisk/pkg-descr b/net/asterisk/pkg-descr new file mode 100644 index 000000000000..28b7a1deb011 --- /dev/null +++ b/net/asterisk/pkg-descr @@ -0,0 +1,5 @@ +Asterisk is an Open Source PBX and telephony toolkit. It is, in a +sense, middleware between Internet and telephony channels on the bottom, +and Internet and telephony applications at the top. + +WWW: http://www.asteriskpbx.com diff --git a/net/asterisk/pkg-plist b/net/asterisk/pkg-plist new file mode 100644 index 000000000000..be894e5b7850 --- /dev/null +++ b/net/asterisk/pkg-plist @@ -0,0 +1,1616 @@ +@unexec if cmp -s %D/etc/asterisk/ais.conf %D/etc/asterisk/ais.conf-dist; then rm -f %D/etc/asterisk/ais.conf; fi +etc/asterisk/ais.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_adaptive_odbc.conf %D/etc/asterisk/cdr_adaptive_odbc.conf-dist; then rm -f %D/etc/asterisk/cdr_adaptive_odbc.conf; fi +etc/asterisk/cdr_adaptive_odbc.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_sqlite3_custom.conf %D/etc/asterisk/cdr_sqlite3_custom.conf-dist; then rm -f %D/etc/asterisk/cdr_sqlite3_custom.conf; fi +etc/asterisk/cdr_sqlite3_custom.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_syslog.conf %D/etc/asterisk/cdr_syslog.conf-dist; then rm -f %D/etc/asterisk/cdr_syslog.conf; fi +etc/asterisk/cdr_syslog.conf-dist +@unexec if cmp -s %D/etc/asterisk/cli.conf %D/etc/asterisk/cli.conf-dist; then rm -f %D/etc/asterisk/cli.conf; fi +etc/asterisk/cli.conf-dist +@unexec if cmp -s %D/etc/asterisk/cli_aliases.conf %D/etc/asterisk/cli_aliases.conf-dist; then rm -f %D/etc/asterisk/cli_aliases.conf; fi +etc/asterisk/cli_aliases.conf-dist +@unexec if cmp -s %D/etc/asterisk/cli_permissions.conf %D/etc/asterisk/cli_permissions.conf-dist; then rm -f %D/etc/asterisk/cli_permissions.conf; fi +etc/asterisk/cli_permissions.conf-dist +@unexec if cmp -s %D/etc/asterisk/console.conf %D/etc/asterisk/console.conf-dist; then rm -f %D/etc/asterisk/console.conf; fi +etc/asterisk/console.conf-dist +@unexec if cmp -s %D/etc/asterisk/dbsep.conf %D/etc/asterisk/dbsep.conf-dist; then rm -f %D/etc/asterisk/dbsep.conf; fi +etc/asterisk/dbsep.conf-dist +@unexec if cmp -s %D/etc/asterisk/dsp.conf %D/etc/asterisk/dsp.conf-dist; then rm -f %D/etc/asterisk/dsp.conf; fi +etc/asterisk/dsp.conf-dist +@unexec if cmp -s %D/etc/asterisk/extensions.lua %D/etc/asterisk/extensions.lua-dist; then rm -f %D/etc/asterisk/extensions.lua; fi +etc/asterisk/extensions.lua-dist +@unexec if cmp -s %D/etc/asterisk/extensions_minivm.conf %D/etc/asterisk/extensions_minivm.conf-dist; then rm -f %D/etc/asterisk/extensions_minivm.conf; fi +etc/asterisk/extensions_minivm.conf-dist +@unexec if cmp -s %D/etc/asterisk/jingle.conf %D/etc/asterisk/jingle.conf-dist; then rm -f %D/etc/asterisk/jingle.conf; fi +etc/asterisk/jingle.conf-dist +@unexec if cmp -s %D/etc/asterisk/minivm.conf %D/etc/asterisk/minivm.conf-dist; then rm -f %D/etc/asterisk/minivm.conf; fi +etc/asterisk/minivm.conf-dist +@unexec if cmp -s %D/etc/asterisk/phoneprov.conf %D/etc/asterisk/phoneprov.conf-dist; then rm -f %D/etc/asterisk/phoneprov.conf; fi +etc/asterisk/phoneprov.conf-dist +@unexec if cmp -s %D/etc/asterisk/queuerules.conf %D/etc/asterisk/queuerules.conf-dist; then rm -f %D/etc/asterisk/queuerules.conf; fi +etc/asterisk/queuerules.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_ldap.conf %D/etc/asterisk/res_ldap.conf-dist; then rm -f %D/etc/asterisk/res_ldap.conf; fi +etc/asterisk/res_ldap.conf-dist +@unexec if cmp -s %D/etc/asterisk/unistim.conf %D/etc/asterisk/unistim.conf-dist; then rm -f %D/etc/asterisk/unistim.conf; fi +etc/asterisk/unistim.conf-dist +@unexec if cmp -s %D/etc/asterisk/usbradio.conf %D/etc/asterisk/usbradio.conf-dist; then rm -f %D/etc/asterisk/usbradio.conf; fi +etc/asterisk/usbradio.conf-dist +@unexec if cmp -s %D/etc/asterisk/adsi.conf %D/etc/asterisk/adsi.conf-dist; then rm -f %D/etc/asterisk/adsi.conf; fi +etc/asterisk/adsi.conf-dist +@unexec if cmp -s %D/etc/asterisk/agents.conf %D/etc/asterisk/agents.conf-dist; then rm -f %D/etc/asterisk/agents.conf; fi +etc/asterisk/agents.conf-dist +@unexec if cmp -s %D/etc/asterisk/alarmreceiver.conf %D/etc/asterisk/alarmreceiver.conf-dist; then rm -f %D/etc/asterisk/alarmreceiver.conf; fi +etc/asterisk/alarmreceiver.conf-dist +@unexec if cmp -s %D/etc/asterisk/alsa.conf %D/etc/asterisk/alsa.conf-dist; then rm -f %D/etc/asterisk/alsa.conf; fi +etc/asterisk/alsa.conf-dist +@unexec if cmp -s %D/etc/asterisk/asterisk.adsi %D/etc/asterisk/asterisk.adsi-dist; then rm -f %D/etc/asterisk/asterisk.adsi; fi +etc/asterisk/asterisk.adsi-dist +@unexec if cmp -s %D/etc/asterisk/asterisk.conf %D/etc/asterisk/asterisk.conf-dist; then rm -f %D/etc/asterisk/asterisk.conf; fi +etc/asterisk/asterisk.conf-dist +etc/asterisk/asterisk.conf +@unexec if cmp -s %D/etc/asterisk/calendar.conf %D/etc/asterisk/calendar.conf-dist; then rm -f %D/etc/asterisk/calendar.conf; fi +etc/asterisk/calendar.conf-dist +@unexec if cmp -s %D/etc/asterisk/ccss.conf %D/etc/asterisk/ccss.conf-dist; then rm -f %D/etc/asterisk/ccss.conf; fi +etc/asterisk/ccss.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr.conf %D/etc/asterisk/cdr.conf-dist; then rm -f %D/etc/asterisk/cdr.conf; fi +etc/asterisk/cdr.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_custom.conf %D/etc/asterisk/cdr_custom.conf-dist; then rm -f %D/etc/asterisk/cdr_custom.conf; fi +etc/asterisk/cdr_custom.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_manager.conf %D/etc/asterisk/cdr_manager.conf-dist; then rm -f %D/etc/asterisk/cdr_manager.conf; fi +etc/asterisk/cdr_manager.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_mysql.conf %D/etc/asterisk/cdr_mysql.conf-dist; then rm -f %D/etc/asterisk/cdr_mysql.conf; fi +etc/asterisk/cdr_mysql.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_odbc.conf %D/etc/asterisk/cdr_odbc.conf-dist; then rm -f %D/etc/asterisk/cdr_odbc.conf; fi +etc/asterisk/cdr_odbc.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_pgsql.conf %D/etc/asterisk/cdr_pgsql.conf-dist; then rm -f %D/etc/asterisk/cdr_pgsql.conf; fi +etc/asterisk/cdr_pgsql.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_tds.conf %D/etc/asterisk/cdr_tds.conf-dist; then rm -f %D/etc/asterisk/cdr_tds.conf; fi +etc/asterisk/cdr_tds.conf-dist +@unexec if cmp -s %D/etc/asterisk/cel.conf %D/etc/asterisk/cel.conf-dist; then rm -f %D/etc/asterisk/cel.conf; fi +etc/asterisk/cel.conf-dist +@unexec if cmp -s %D/etc/asterisk/cel_custom.conf %D/etc/asterisk/cel_custom.conf-dist; then rm -f %D/etc/asterisk/cel_custom.conf; fi +etc/asterisk/cel_custom.conf-dist +@unexec if cmp -s %D/etc/asterisk/cel_odbc.conf %D/etc/asterisk/cel_odbc.conf-dist; then rm -f %D/etc/asterisk/cel_odbc.conf; fi +etc/asterisk/cel_odbc.conf-dist +@unexec if cmp -s %D/etc/asterisk/cel_pgsql.conf %D/etc/asterisk/cel_pgsql.conf-dist; then rm -f %D/etc/asterisk/cel_pgsql.conf; fi +etc/asterisk/cel_pgsql.conf-dist +@unexec if cmp -s %D/etc/asterisk/cel_sqlite3_custom.conf %D/etc/asterisk/cel_sqlite3_custom.conf-dist; then rm -f %D/etc/asterisk/cel_sqlite3_custom.conf; fi +etc/asterisk/cel_sqlite3_custom.conf-dist +@unexec if cmp -s %D/etc/asterisk/cel_tds.conf %D/etc/asterisk/cel_tds.conf-dist; then rm -f %D/etc/asterisk/cel_tds.conf; fi +etc/asterisk/cel_tds.conf-dist +@unexec if cmp -s %D/etc/asterisk/codecs.conf %D/etc/asterisk/codecs.conf-dist; then rm -f %D/etc/asterisk/codecs.conf; fi +etc/asterisk/codecs.conf-dist +@unexec if cmp -s %D/etc/asterisk/dnsmgr.conf %D/etc/asterisk/dnsmgr.conf-dist; then rm -f %D/etc/asterisk/dnsmgr.conf; fi +etc/asterisk/dnsmgr.conf-dist +@unexec if cmp -s %D/etc/asterisk/dundi.conf %D/etc/asterisk/dundi.conf-dist; then rm -f %D/etc/asterisk/dundi.conf; fi +etc/asterisk/dundi.conf-dist +@unexec if cmp -s %D/etc/asterisk/enum.conf %D/etc/asterisk/enum.conf-dist; then rm -f %D/etc/asterisk/enum.conf; fi +etc/asterisk/enum.conf-dist +@unexec if cmp -s %D/etc/asterisk/extconfig.conf %D/etc/asterisk/extconfig.conf-dist; then rm -f %D/etc/asterisk/extconfig.conf; fi +etc/asterisk/extconfig.conf-dist +@unexec if cmp -s %D/etc/asterisk/extensions.ael %D/etc/asterisk/extensions.ael-dist; then rm -f %D/etc/asterisk/extensions.ael; fi +etc/asterisk/extensions.ael-dist +@unexec if cmp -s %D/etc/asterisk/extensions.conf %D/etc/asterisk/extensions.conf-dist; then rm -f %D/etc/asterisk/extensions.conf; fi +etc/asterisk/extensions.conf-dist +@unexec if cmp -s %D/etc/asterisk/features.conf %D/etc/asterisk/features.conf-dist; then rm -f %D/etc/asterisk/features.conf; fi +etc/asterisk/features.conf-dist +@unexec if cmp -s %D/etc/asterisk/festival.conf %D/etc/asterisk/festival.conf-dist; then rm -f %D/etc/asterisk/festival.conf; fi +etc/asterisk/festival.conf-dist +@unexec if cmp -s %D/etc/asterisk/iax.conf %D/etc/asterisk/iax.conf-dist; then rm -f %D/etc/asterisk/iax.conf; fi +etc/asterisk/iax.conf-dist +@unexec if cmp -s %D/etc/asterisk/iaxprov.conf %D/etc/asterisk/iaxprov.conf-dist; then rm -f %D/etc/asterisk/iaxprov.conf; fi +etc/asterisk/iaxprov.conf-dist +@unexec if cmp -s %D/etc/asterisk/indications.conf %D/etc/asterisk/indications.conf-dist; then rm -f %D/etc/asterisk/indications.conf; fi +etc/asterisk/indications.conf-dist +@unexec if cmp -s %D/etc/asterisk/logger.conf %D/etc/asterisk/logger.conf-dist; then rm -f %D/etc/asterisk/logger.conf; fi +etc/asterisk/logger.conf-dist +@unexec if cmp -s %D/etc/asterisk/manager.conf %D/etc/asterisk/manager.conf-dist; then rm -f %D/etc/asterisk/manager.conf; fi +etc/asterisk/manager.conf-dist +@unexec if cmp -s %D/etc/asterisk/meetme.conf %D/etc/asterisk/meetme.conf-dist; then rm -f %D/etc/asterisk/meetme.conf; fi +etc/asterisk/meetme.conf-dist +@unexec if cmp -s %D/etc/asterisk/mgcp.conf %D/etc/asterisk/mgcp.conf-dist; then rm -f %D/etc/asterisk/mgcp.conf; fi +etc/asterisk/mgcp.conf-dist +@unexec if cmp -s %D/etc/asterisk/misdn.conf %D/etc/asterisk/misdn.conf-dist; then rm -f %D/etc/asterisk/misdn.conf; fi +etc/asterisk/misdn.conf-dist +@unexec if cmp -s %D/etc/asterisk/modules.conf %D/etc/asterisk/modules.conf-dist; then rm -f %D/etc/asterisk/modules.conf; fi +etc/asterisk/modules.conf-dist +@unexec if cmp -s %D/etc/asterisk/musiconhold.conf %D/etc/asterisk/musiconhold.conf-dist; then rm -f %D/etc/asterisk/musiconhold.conf; fi +etc/asterisk/musiconhold.conf-dist +@unexec if cmp -s %D/etc/asterisk/osp.conf %D/etc/asterisk/osp.conf-dist; then rm -f %D/etc/asterisk/osp.conf; fi +etc/asterisk/osp.conf-dist +@unexec if cmp -s %D/etc/asterisk/oss.conf %D/etc/asterisk/oss.conf-dist; then rm -f %D/etc/asterisk/oss.conf; fi +etc/asterisk/oss.conf-dist +@unexec if cmp -s %D/etc/asterisk/phone.conf %D/etc/asterisk/phone.conf-dist; then rm -f %D/etc/asterisk/phone.conf; fi +etc/asterisk/phone.conf-dist +@unexec if cmp -s %D/etc/asterisk/queues.conf %D/etc/asterisk/queues.conf-dist; then rm -f %D/etc/asterisk/queues.conf; fi +etc/asterisk/queues.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_config_mysql.conf %D/etc/asterisk/res_config_mysql.conf-dist; then rm -f %D/etc/asterisk/res_config_mysql.conf; fi +etc/asterisk/res_config_mysql.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_pgsql.conf %D/etc/asterisk/res_pgsql.conf-dist; then rm -f %D/etc/asterisk/res_pgsql.conf; fi +etc/asterisk/res_pgsql.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_pktccops.conf %D/etc/asterisk/res_pktccops.conf-dist; then rm -f %D/etc/asterisk/res_pktccops.conf; fi +etc/asterisk/res_pktccops.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_odbc.conf %D/etc/asterisk/res_odbc.conf-dist; then rm -f %D/etc/asterisk/res_odbc.conf; fi +etc/asterisk/res_odbc.conf-dist +@unexec if cmp -s %D/etc/asterisk/rpt.conf %D/etc/asterisk/rpt.conf-dist; then rm -f %D/etc/asterisk/rpt.conf; fi +etc/asterisk/rpt.conf-dist +@unexec if cmp -s %D/etc/asterisk/rtp.conf %D/etc/asterisk/rtp.conf-dist; then rm -f %D/etc/asterisk/rtp.conf; fi +etc/asterisk/rtp.conf-dist +@unexec if cmp -s %D/etc/asterisk/sip.conf %D/etc/asterisk/sip.conf-dist; then rm -f %D/etc/asterisk/sip.conf; fi +etc/asterisk/sip.conf-dist +@unexec if cmp -s %D/etc/asterisk/sip_notify.conf %D/etc/asterisk/sip_notify.conf-dist; then rm -f %D/etc/asterisk/sip_notify.conf; fi +etc/asterisk/sip_notify.conf-dist +@unexec if cmp -s %D/etc/asterisk/skinny.conf %D/etc/asterisk/skinny.conf-dist; then rm -f %D/etc/asterisk/skinny.conf; fi +etc/asterisk/skinny.conf-dist +@unexec if cmp -s %D/etc/asterisk/telcordia-1.adsi %D/etc/asterisk/telcordia-1.adsi-dist; then rm -f %D/etc/asterisk/telcordia-1.adsi; fi +etc/asterisk/telcordia-1.adsi-dist +@unexec if cmp -s %D/etc/asterisk/voicemail.conf %D/etc/asterisk/voicemail.conf-dist; then rm -f %D/etc/asterisk/voicemail.conf; fi +etc/asterisk/voicemail.conf-dist +@unexec if cmp -s %D/etc/asterisk/vpb.conf %D/etc/asterisk/vpb.conf-dist; then rm -f %D/etc/asterisk/vpb.conf; fi +etc/asterisk/vpb.conf-dist +@unexec if cmp -s %D/etc/asterisk/chan_dahdi.conf %D/etc/asterisk/chan_dahdi.conf-dist; then rm -f %D/etc/asterisk/chan_dahdi.conf; fi +etc/asterisk/chan_dahdi.conf-dist +@unexec if cmp -s %D/etc/asterisk/chan_mobile.conf %D/etc/asterisk/chan_mobile.conf-dist; then rm -f %D/etc/asterisk/chan_mobile.conf; fi +etc/asterisk/chan_mobile.conf-dist +@unexec if cmp -s %D/etc/asterisk/chan_ooh323.conf %D/etc/asterisk/chan_ooh323.conf-dist; then rm -f %D/etc/asterisk/chan_ooh323.conf; fi +etc/asterisk/chan_ooh323.conf-dist +@unexec if cmp -s %D/etc/asterisk/udptl.conf %D/etc/asterisk/udptl.conf-dist; then rm -f %D/etc/asterisk/udptl.conf; fi +etc/asterisk/udptl.conf-dist +@unexec if cmp -s %D/etc/asterisk/users.conf %D/etc/asterisk/users.conf-dist; then rm -f %D/etc/asterisk/users.conf; fi +etc/asterisk/users.conf-dist +@unexec if cmp -s %D/etc/asterisk/smdi.conf %D/etc/asterisk/smdi.conf-dist; then rm -f %D/etc/asterisk/smdi.conf; fi +etc/asterisk/smdi.conf-dist +@unexec if cmp -s %D/etc/asterisk/sla.conf %D/etc/asterisk/sla.conf-dist; then rm -f %D/etc/asterisk/sla.conf; fi +etc/asterisk/sla.conf-dist +@unexec if cmp -s %D/etc/asterisk/say.conf %D/etc/asterisk/say.conf-dist; then rm -f %D/etc/asterisk/say.conf; fi +etc/asterisk/say.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_snmp.conf %D/etc/asterisk/res_snmp.conf-dist; then rm -f %D/etc/asterisk/res_snmp.conf; fi +etc/asterisk/res_snmp.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_stun_monitor.conf %D/etc/asterisk/res_stun_monitor.conf-dist; then rm -f %D/etc/asterisk/res_stun_monitor.conf; fi +etc/asterisk/res_stun_monitor.conf-dist +@unexec if cmp -s %D/etc/asterisk/muted.conf %D/etc/asterisk/muted.conf-dist; then rm -f %D/etc/asterisk/muted.conf; fi +etc/asterisk/muted.conf-dist +@unexec if cmp -s %D/etc/asterisk/jabber.conf %D/etc/asterisk/jabber.conf-dist; then rm -f %D/etc/asterisk/jabber.conf; fi +etc/asterisk/jabber.conf-dist +@unexec if cmp -s %D/etc/asterisk/http.conf %D/etc/asterisk/http.conf-dist; then rm -f %D/etc/asterisk/http.conf; fi +etc/asterisk/http.conf-dist +@unexec if cmp -s %D/etc/asterisk/h323.conf %D/etc/asterisk/h323.conf-dist; then rm -f %D/etc/asterisk/h323.conf; fi +etc/asterisk/h323.conf-dist +@unexec if cmp -s %D/etc/asterisk/gtalk.conf %D/etc/asterisk/gtalk.conf-dist; then rm -f %D/etc/asterisk/gtalk.conf; fi +etc/asterisk/gtalk.conf-dist +@unexec if cmp -s %D/etc/asterisk/func_odbc.conf %D/etc/asterisk/func_odbc.conf-dist; then rm -f %D/etc/asterisk/func_odbc.conf; fi +etc/asterisk/func_odbc.conf-dist +@unexec if cmp -s %D/etc/asterisk/followme.conf %D/etc/asterisk/followme.conf-dist; then rm -f %D/etc/asterisk/followme.conf; fi +etc/asterisk/followme.conf-dist +@unexec if cmp -s %D/etc/asterisk/amd.conf %D/etc/asterisk/amd.conf-dist; then rm -f %D/etc/asterisk/amd.conf; fi +etc/asterisk/amd.conf-dist +@unexec if cmp -s %D/etc/asterisk/app_mysql.conf %D/etc/asterisk/app_mysql.conf-dist; then rm -f %D/etc/asterisk/app_mysql.conf; fi +etc/asterisk/app_mysql.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_config_sqlite.conf %D/etc/asterisk/res_config_sqlite.conf-dist; then rm -f %D/etc/asterisk/res_config_sqlite.conf; fi +etc/asterisk/res_config_sqlite.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_curl.conf %D/etc/asterisk/res_curl.conf-dist; then rm -f %D/etc/asterisk/res_curl.conf; fi +etc/asterisk/res_curl.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_fax.conf %D/etc/asterisk/res_fax.conf-dist; then rm -f %D/etc/asterisk/res_fax.conf; fi +etc/asterisk/res_fax.conf-dist +@exec if test ! -e %D/etc/asterisk/cdr_adaptive_odbc.conf; then cp -p %D/etc/asterisk/cdr_adaptive_odbc.conf-dist %D/etc/asterisk/cdr_adaptive_odbc.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_syslog.conf; then cp -p %D/etc/asterisk/cdr_syslog.conf-dist %D/etc/asterisk/cdr_syslog.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_sqlite3_custom.conf; then cp -p %D/etc/asterisk/cdr_sqlite3_custom.conf-dist %D/etc/asterisk/cdr_sqlite3_custom.conf; fi +@exec if test ! -e %D/etc/asterisk/cli.conf; then cp -p %D/etc/asterisk/cli.conf-dist %D/etc/asterisk/cli.conf; fi +@exec if test ! -e %D/etc/asterisk/console.conf; then cp -p %D/etc/asterisk/console.conf-dist %D/etc/asterisk/console.conf; fi +@exec if test ! -e %D/etc/asterisk/extensions.lua; then cp -p %D/etc/asterisk/extensions.lua-dist %D/etc/asterisk/extensions.lua; fi +@exec if test ! -e %D/etc/asterisk/extensions_minivm.conf; then cp -p %D/etc/asterisk/extensions_minivm.conf-dist %D/etc/asterisk/extensions_minivm.conf; fi +@exec if test ! -e %D/etc/asterisk/jingle.conf; then cp -p %D/etc/asterisk/jingle.conf-dist %D/etc/asterisk/jingle.conf; fi +@exec if test ! -e %D/etc/asterisk/minivm.conf; then cp -p %D/etc/asterisk/minivm.conf-dist %D/etc/asterisk/minivm.conf; fi +@exec if test ! -e %D/etc/asterisk/phoneprov.conf; then cp -p %D/etc/asterisk/phoneprov.conf-dist %D/etc/asterisk/phoneprov.conf; fi +@exec if test ! -e %D/etc/asterisk/queuerules.conf; then cp -p %D/etc/asterisk/queuerules.conf-dist %D/etc/asterisk/queuerules.conf; fi +@exec if test ! -e %D/etc/asterisk/res_ldap.conf; then cp -p %D/etc/asterisk/res_ldap.conf-dist %D/etc/asterisk/res_ldap.conf; fi +@exec if test ! -e %D/etc/asterisk/unistim.conf; then cp -p %D/etc/asterisk/unistim.conf-dist %D/etc/asterisk/unistim.conf; fi +@exec if test ! -e %D/etc/asterisk/usbradio.conf; then cp -p %D/etc/asterisk/usbradio.conf-dist %D/etc/asterisk/usbradio.conf; fi +@exec if test ! -e %D/etc/asterisk/adsi.conf; then cp -p %D/etc/asterisk/adsi.conf-dist %D/etc/asterisk/adsi.conf; fi +@exec if test ! -e %D/etc/asterisk/agents.conf; then cp -p %D/etc/asterisk/agents.conf-dist %D/etc/asterisk/agents.conf; fi +@exec if test ! -e %D/etc/asterisk/alarmreceiver.conf; then cp -p %D/etc/asterisk/alarmreceiver.conf-dist %D/etc/asterisk/alarmreceiver.conf; fi +@exec if test ! -e %D/etc/asterisk/alsa.conf; then cp -p %D/etc/asterisk/alsa.conf-dist %D/etc/asterisk/alsa.conf; fi +@exec if test ! -e %D/etc/asterisk/asterisk.adsi; then cp -p %D/etc/asterisk/asterisk.adsi-dist %D/etc/asterisk/asterisk.adsi; fi +@exec if test ! -e %D/etc/asterisk/ccss.conf; then cp -p %D/etc/asterisk/ccss.conf-dist %D/etc/asterisk/ccss.conf; fi +@exec if test ! -e %D/etc/asterisk/calendar.conf; then cp -p %D/etc/asterisk/calendar.conf-dist %D/etc/asterisk/calendar.conf; fi +@exec if test ! -e %D/etc/asterisk/asterisk.conf; then cp -p %D/etc/asterisk/asterisk.conf-dist %D/etc/asterisk/asterisk.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr.conf; then cp -p %D/etc/asterisk/cdr.conf-dist %D/etc/asterisk/cdr.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_custom.conf; then cp -p %D/etc/asterisk/cdr_custom.conf-dist %D/etc/asterisk/cdr_custom.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_mysql.conf; then cp -p %D/etc/asterisk/cdr_mysql.conf-dist %D/etc/asterisk/cdr_mysql.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_manager.conf; then cp -p %D/etc/asterisk/cdr_manager.conf-dist %D/etc/asterisk/cdr_manager.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_odbc.conf; then cp -p %D/etc/asterisk/cdr_odbc.conf-dist %D/etc/asterisk/cdr_odbc.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_pgsql.conf; then cp -p %D/etc/asterisk/cdr_pgsql.conf-dist %D/etc/asterisk/cdr_pgsql.conf; fi +@exec if test ! -e %D/etc/asterisk/cel_tds.conf; then cp -p %D/etc/asterisk/cel_tds.conf-dist %D/etc/asterisk/cel_tds.conf; fi +@exec if test ! -e %D/etc/asterisk/cel_sqlite3_custom.conf; then cp -p %D/etc/asterisk/cel_sqlite3_custom.conf-dist %D/etc/asterisk/cel_sqlite3_custom.conf; fi +@exec if test ! -e %D/etc/asterisk/cel_pgsql.conf; then cp -p %D/etc/asterisk/cel_pgsql.conf-dist %D/etc/asterisk/cel_pgsql.conf; fi +@exec if test ! -e %D/etc/asterisk/cel_odbc.conf; then cp -p %D/etc/asterisk/cel_odbc.conf-dist %D/etc/asterisk/cel_odbc.conf; fi +@exec if test ! -e %D/etc/asterisk/cel_custom.conf; then cp -p %D/etc/asterisk/cel_custom.conf-dist %D/etc/asterisk/cel_custom.conf; fi +@exec if test ! -e %D/etc/asterisk/cel.conf; then cp -p %D/etc/asterisk/cel.conf-dist %D/etc/asterisk/cel.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_tds.conf; then cp -p %D/etc/asterisk/cdr_tds.conf-dist %D/etc/asterisk/cdr_tds.conf; fi +@exec if test ! -e %D/etc/asterisk/codecs.conf; then cp -p %D/etc/asterisk/codecs.conf-dist %D/etc/asterisk/codecs.conf; fi +@exec if test ! -e %D/etc/asterisk/dnsmgr.conf; then cp -p %D/etc/asterisk/dnsmgr.conf-dist %D/etc/asterisk/dnsmgr.conf; fi +@exec if test ! -e %D/etc/asterisk/dundi.conf; then cp -p %D/etc/asterisk/dundi.conf-dist %D/etc/asterisk/dundi.conf; fi +@exec if test ! -e %D/etc/asterisk/enum.conf; then cp -p %D/etc/asterisk/enum.conf-dist %D/etc/asterisk/enum.conf; fi +@exec if test ! -e %D/etc/asterisk/extconfig.conf; then cp -p %D/etc/asterisk/extconfig.conf-dist %D/etc/asterisk/extconfig.conf; fi +@exec if test ! -e %D/etc/asterisk/extensions.ael; then cp -p %D/etc/asterisk/extensions.ael-dist %D/etc/asterisk/extensions.ael; fi +@exec if test ! -e %D/etc/asterisk/extensions.conf; then cp -p %D/etc/asterisk/extensions.conf-dist %D/etc/asterisk/extensions.conf; fi +@exec if test ! -e %D/etc/asterisk/features.conf; then cp -p %D/etc/asterisk/features.conf-dist %D/etc/asterisk/features.conf; fi +@exec if test ! -e %D/etc/asterisk/festival.conf; then cp -p %D/etc/asterisk/festival.conf-dist %D/etc/asterisk/festival.conf; fi +@exec if test ! -e %D/etc/asterisk/iax.conf; then cp -p %D/etc/asterisk/iax.conf-dist %D/etc/asterisk/iax.conf; fi +@exec if test ! -e %D/etc/asterisk/iaxprov.conf; then cp -p %D/etc/asterisk/iaxprov.conf-dist %D/etc/asterisk/iaxprov.conf; fi +@exec if test ! -e %D/etc/asterisk/indications.conf; then cp -p %D/etc/asterisk/indications.conf-dist %D/etc/asterisk/indications.conf; fi +@exec if test ! -e %D/etc/asterisk/logger.conf; then cp -p %D/etc/asterisk/logger.conf-dist %D/etc/asterisk/logger.conf; fi +@exec if test ! -e %D/etc/asterisk/manager.conf; then cp -p %D/etc/asterisk/manager.conf-dist %D/etc/asterisk/manager.conf; fi +@exec if test ! -e %D/etc/asterisk/meetme.conf; then cp -p %D/etc/asterisk/meetme.conf-dist %D/etc/asterisk/meetme.conf; fi +@exec if test ! -e %D/etc/asterisk/mgcp.conf; then cp -p %D/etc/asterisk/mgcp.conf-dist %D/etc/asterisk/mgcp.conf; fi +@exec if test ! -e %D/etc/asterisk/misdn.conf; then cp -p %D/etc/asterisk/misdn.conf-dist %D/etc/asterisk/misdn.conf; fi +@exec if test ! -e %D/etc/asterisk/modules.conf; then cp -p %D/etc/asterisk/modules.conf-dist %D/etc/asterisk/modules.conf; fi +@exec if test ! -e %D/etc/asterisk/musiconhold.conf; then cp -p %D/etc/asterisk/musiconhold.conf-dist %D/etc/asterisk/musiconhold.conf; fi +@exec if test ! -e %D/etc/asterisk/osp.conf; then cp -p %D/etc/asterisk/osp.conf-dist %D/etc/asterisk/osp.conf; fi +@exec if test ! -e %D/etc/asterisk/oss.conf; then cp -p %D/etc/asterisk/oss.conf-dist %D/etc/asterisk/oss.conf; fi +@exec if test ! -e %D/etc/asterisk/phone.conf; then cp -p %D/etc/asterisk/phone.conf-dist %D/etc/asterisk/phone.conf; fi +@exec if test ! -e %D/etc/asterisk/res_fax.conf; then cp -p %D/etc/asterisk/res_fax.conf-dist %D/etc/asterisk/res_fax.conf; fi +@exec if test ! -e %D/etc/asterisk/res_curl.conf; then cp -p %D/etc/asterisk/res_curl.conf-dist %D/etc/asterisk/res_curl.conf; fi +@exec if test ! -e %D/etc/asterisk/res_config_sqlite.conf; then cp -p %D/etc/asterisk/res_config_sqlite.conf-dist %D/etc/asterisk/res_config_sqlite.conf; fi +@exec if test ! -e %D/etc/asterisk/res_config_mysql.conf; then cp -p %D/etc/asterisk/res_config_mysql.conf-dist %D/etc/asterisk/res_config_mysql.conf; fi +@exec if test ! -e %D/etc/asterisk/queues.conf; then cp -p %D/etc/asterisk/queues.conf-dist %D/etc/asterisk/queues.conf; fi +@exec if test ! -e %D/etc/asterisk/res_pktccops.conf; then cp -p %D/etc/asterisk/res_pktccops.conf-dist %D/etc/asterisk/res_pktccops.conf; fi +@exec if test ! -e %D/etc/asterisk/res_pgsql.conf; then cp -p %D/etc/asterisk/res_pgsql.conf-dist %D/etc/asterisk/res_pgsql.conf; fi +@exec if test ! -e %D/etc/asterisk/res_odbc.conf; then cp -p %D/etc/asterisk/res_odbc.conf-dist %D/etc/asterisk/res_odbc.conf; fi +@exec if test ! -e %D/etc/asterisk/rpt.conf; then cp -p %D/etc/asterisk/rpt.conf-dist %D/etc/asterisk/rpt.conf; fi +@exec if test ! -e %D/etc/asterisk/rtp.conf; then cp -p %D/etc/asterisk/rtp.conf-dist %D/etc/asterisk/rtp.conf; fi +@exec if test ! -e %D/etc/asterisk/sip.conf; then cp -p %D/etc/asterisk/sip.conf-dist %D/etc/asterisk/sip.conf; fi +@exec if test ! -e %D/etc/asterisk/sip_notify.conf; then cp -p %D/etc/asterisk/sip_notify.conf-dist %D/etc/asterisk/sip_notify.conf; fi +@exec if test ! -e %D/etc/asterisk/skinny.conf; then cp -p %D/etc/asterisk/skinny.conf-dist %D/etc/asterisk/skinny.conf; fi +@exec if test ! -e %D/etc/asterisk/telcordia-1.adsi; then cp -p %D/etc/asterisk/telcordia-1.adsi-dist %D/etc/asterisk/telcordia-1.adsi; fi +@exec if test ! -e %D/etc/asterisk/voicemail.conf; then cp -p %D/etc/asterisk/voicemail.conf-dist %D/etc/asterisk/voicemail.conf; fi +@exec if test ! -e %D/etc/asterisk/vpb.conf; then cp -p %D/etc/asterisk/vpb.conf-dist %D/etc/asterisk/vpb.conf; fi +@exec if test ! -e %D/etc/asterisk/chan_ooh323.conf; then cp -p %D/etc/asterisk/chan_ooh323.conf-dist %D/etc/asterisk/chan_ooh323.conf; fi +@exec if test ! -e %D/etc/asterisk/chan_mobile.conf; then cp -p %D/etc/asterisk/chan_mobile.conf-dist %D/etc/asterisk/chan_mobile.conf; fi +@exec if test ! -e %D/etc/asterisk/chan_dahdi.conf; then cp -p %D/etc/asterisk/chan_dahdi.conf-dist %D/etc/asterisk/chan_dahdi.conf; fi +@exec if test ! -e %D/etc/asterisk/udptl.conf; then cp -p %D/etc/asterisk/udptl.conf-dist %D/etc/asterisk/udptl.conf; fi +@exec if test ! -e %D/etc/asterisk/users.conf; then cp -p %D/etc/asterisk/users.conf-dist %D/etc/asterisk/users.conf; fi +@exec if test ! -e %D/etc/asterisk/smdi.conf; then cp -p %D/etc/asterisk/smdi.conf-dist %D/etc/asterisk/smdi.conf; fi +@exec if test ! -e %D/etc/asterisk/sla.conf; then cp -p %D/etc/asterisk/sla.conf-dist %D/etc/asterisk/sla.conf; fi +@exec if test ! -e %D/etc/asterisk/say.conf; then cp -p %D/etc/asterisk/say.conf-dist %D/etc/asterisk/say.conf; fi +@exec if test ! -e %D/etc/asterisk/res_stun_monitor.conf; then cp -p %D/etc/asterisk/res_stun_monitor.conf-dist %D/etc/asterisk/res_stun_monitor.conf; fi +@exec if test ! -e %D/etc/asterisk/res_snmp.conf; then cp -p %D/etc/asterisk/res_snmp.conf-dist %D/etc/asterisk/res_snmp.conf; fi +@exec if test ! -e %D/etc/asterisk/muted.conf; then cp -p %D/etc/asterisk/muted.conf-dist %D/etc/asterisk/muted.conf; fi +@exec if test ! -e %D/etc/asterisk/jabber.conf; then cp -p %D/etc/asterisk/jabber.conf-dist %D/etc/asterisk/jabber.conf; fi +@exec if test ! -e %D/etc/asterisk/http.conf; then cp -p %D/etc/asterisk/http.conf-dist %D/etc/asterisk/http.conf; fi +@exec if test ! -e %D/etc/asterisk/h323.conf; then cp -p %D/etc/asterisk/h323.conf-dist %D/etc/asterisk/h323.conf; fi +@exec if test ! -e %D/etc/asterisk/gtalk.conf; then cp -p %D/etc/asterisk/gtalk.conf-dist %D/etc/asterisk/gtalk.conf; fi +@exec if test ! -e %D/etc/asterisk/func_odbc.conf; then cp -p %D/etc/asterisk/func_odbc.conf-dist %D/etc/asterisk/func_odbc.conf; fi +@exec if test ! -e %D/etc/asterisk/followme.conf; then cp -p %D/etc/asterisk/followme.conf-dist %D/etc/asterisk/followme.conf; fi +@exec if test ! -e %D/etc/asterisk/app_mysql.conf; then cp -p %D/etc/asterisk/app_mysql.conf-dist %D/etc/asterisk/app_mysql.conf; fi +@exec if test ! -e %D/etc/asterisk/amd.conf; then cp -p %D/etc/asterisk/amd.conf-dist %D/etc/asterisk/amd.conf; fi +include/asterisk/doxygen/architecture.h +include/asterisk/doxygen/asterisk-git-howto.h +include/asterisk/doxygen/commits.h +include/asterisk/doxygen/licensing.h +include/asterisk/doxygen/mantisworkflow.h +include/asterisk/doxygen/releases.h +include/asterisk/doxygen/reviewboard.h +include/asterisk/_private.h +include/asterisk/aoc.h +include/asterisk/ast_version.h +include/asterisk/autochan.h +include/asterisk/calendar.h +include/asterisk/ccss.h +include/asterisk/cel.h +include/asterisk/channelstate.h +include/asterisk/data.h +include/asterisk/event.h +include/asterisk/event_defs.h +include/asterisk/extconf.h +include/asterisk/frame_defs.h +include/asterisk/framehook.h +include/asterisk/fskmodem_float.h +include/asterisk/fskmodem_int.h +include/asterisk/hashtab.h +include/asterisk/mod_format.h +include/asterisk/netsock2.h +include/asterisk/network.h +include/asterisk/optional_api.h +include/asterisk/pktccops.h +include/asterisk/pval.h +include/asterisk/res_fax.h +include/asterisk/res_srtp.h +include/asterisk/rtp_engine.h +include/asterisk/select.h +include/asterisk/security_events.h +include/asterisk/security_events_defs.h +include/asterisk/stun.h +include/asterisk/syslog.h +include/asterisk/tcptls.h +include/asterisk.h +include/asterisk/abstract_jb.h +include/asterisk/acl.h +include/asterisk/adsi.h +include/asterisk/ael_structs.h +include/asterisk/agi.h +include/asterisk/alaw.h +include/asterisk/app.h +include/asterisk/ast_expr.h +include/asterisk/astdb.h +include/asterisk/astmm.h +include/asterisk/astobj.h +include/asterisk/astobj2.h +include/asterisk/astosp.h +include/asterisk/audiohook.h +include/asterisk/autoconfig.h +include/asterisk/bridging.h +include/asterisk/bridging_features.h +include/asterisk/bridging_technology.h +include/asterisk/build.h +include/asterisk/buildinfo.h +include/asterisk/buildopts.h +include/asterisk/callerid.h +include/asterisk/causes.h +include/asterisk/cdr.h +include/asterisk/channel.h +include/asterisk/chanvars.h +include/asterisk/cli.h +include/asterisk/compat.h +include/asterisk/compiler.h +include/asterisk/config.h +include/asterisk/crypto.h +include/asterisk/datastore.h +include/asterisk/devicestate.h +include/asterisk/dial.h +include/asterisk/dlinkedlists.h +include/asterisk/dns.h +include/asterisk/dnsmgr.h +include/asterisk/doxyref.h +include/asterisk/dsp.h +include/asterisk/dundi.h +include/asterisk/endian.h +include/asterisk/enum.h +include/asterisk/features.h +include/asterisk/file.h +include/asterisk/frame.h +include/asterisk/fskmodem.h +include/asterisk/global_datastores.h +include/asterisk/heap.h +include/asterisk/http.h +include/asterisk/image.h +include/asterisk/indications.h +include/asterisk/inline_api.h +include/asterisk/io.h +include/asterisk/jabber.h +include/asterisk/jingle.h +include/asterisk/linkedlists.h +include/asterisk/localtime.h +include/asterisk/lock.h +include/asterisk/logger.h +include/asterisk/manager.h +include/asterisk/md5.h +include/asterisk/module.h +include/asterisk/monitor.h +include/asterisk/musiconhold.h +include/asterisk/netsock.h +include/asterisk/options.h +include/asterisk/paths.h +include/asterisk/pbx.h +include/asterisk/plc.h +include/asterisk/poll-compat.h +include/asterisk/privacy.h +include/asterisk/res_odbc.h +include/asterisk/say.h +include/asterisk/sched.h +include/asterisk/sha1.h +include/asterisk/slin.h +include/asterisk/slinfactory.h +include/asterisk/smdi.h +include/asterisk/speech.h +include/asterisk/srv.h +include/asterisk/stringfields.h +include/asterisk/strings.h +include/asterisk/taskprocessor.h +include/asterisk/tdd.h +include/asterisk/term.h +include/asterisk/test.h +include/asterisk/threadstorage.h +include/asterisk/time.h +include/asterisk/timing.h +include/asterisk/transcap.h +include/asterisk/translate.h +include/asterisk/udptl.h +include/asterisk/ulaw.h +include/asterisk/unaligned.h +include/asterisk/utils.h +include/asterisk/version.h +include/asterisk/xml.h +include/asterisk/xmldoc.h +lib/asterisk/modules/app_celgenuserevent.so +lib/asterisk/modules/app_confbridge.so +lib/asterisk/modules/app_minivm.so +lib/asterisk/modules/app_originate.so +lib/asterisk/modules/app_playtones.so +lib/asterisk/modules/app_readexten.so +lib/asterisk/modules/app_waituntil.so +lib/asterisk/modules/bridge_builtin_features.so +lib/asterisk/modules/bridge_multiplexed.so +lib/asterisk/modules/bridge_simple.so +lib/asterisk/modules/bridge_softmix.so +%%WITH_ODBC%%lib/asterisk/modules/cdr_adaptive_odbc.so +%%WITH_JABBER%%lib/asterisk/modules/chan_jingle.so +lib/asterisk/modules/chan_bridge.so +lib/asterisk/modules/chan_unistim.so +lib/asterisk/modules/codec_g722.so +lib/asterisk/modules/format_g719.so +lib/asterisk/modules/format_sln16.so +lib/asterisk/modules/format_siren14.so +lib/asterisk/modules/format_siren7.so +lib/asterisk/modules/func_aes.so +lib/asterisk/modules/func_audiohookinherit.so +lib/asterisk/modules/func_blacklist.so +lib/asterisk/modules/func_config.so +lib/asterisk/modules/func_devstate.so +lib/asterisk/modules/func_dialgroup.so +lib/asterisk/modules/func_dialplan.so +lib/asterisk/modules/func_extstate.so +lib/asterisk/modules/func_iconv.so +lib/asterisk/modules/func_lock.so +lib/asterisk/modules/func_module.so +lib/asterisk/modules/func_shell.so +lib/asterisk/modules/func_speex.so +lib/asterisk/modules/func_sprintf.so +lib/asterisk/modules/func_sysinfo.so +lib/asterisk/modules/func_version.so +lib/asterisk/modules/func_vmcount.so +lib/asterisk/modules/func_volume.so +lib/asterisk/modules/res_ael_share.so +lib/asterisk/modules/res_clialiases.so +%%WITH_CURL%%lib/asterisk/modules/res_curl.so +%%WITH_CURL%%lib/asterisk/modules/res_config_curl.so +%%WITH_H323%%lib/asterisk/modules/res_config_ldap.so +%%WITH_SQLITE%%lib/asterisk/modules/res_config_sqlite.so +lib/asterisk/modules/res_limit.so +lib/asterisk/modules/res_phoneprov.so +lib/asterisk/modules/res_realtime.so +%%WITH_DAHDI%%lib/asterisk/modules/res_timing_dahdi.so +lib/asterisk/modules/res_timing_pthread.so +lib/asterisk/modules/app_adsiprog.so +lib/asterisk/modules/app_alarmreceiver.so +lib/asterisk/modules/app_amd.so +lib/asterisk/modules/app_authenticate.so +lib/asterisk/modules/app_cdr.so +lib/asterisk/modules/app_chanisavail.so +lib/asterisk/modules/app_channelredirect.so +lib/asterisk/modules/app_chanspy.so +lib/asterisk/modules/app_controlplayback.so +lib/asterisk/modules/app_db.so +lib/asterisk/modules/app_dial.so +lib/asterisk/modules/app_dictate.so +lib/asterisk/modules/app_directed_pickup.so +lib/asterisk/modules/app_directory.so +lib/asterisk/modules/app_disa.so +lib/asterisk/modules/app_dumpchan.so +lib/asterisk/modules/app_echo.so +lib/asterisk/modules/app_exec.so +lib/asterisk/modules/app_externalivr.so +lib/asterisk/modules/app_festival.so +lib/asterisk/modules/app_followme.so +lib/asterisk/modules/app_forkcdr.so +lib/asterisk/modules/app_getcpeid.so +lib/asterisk/modules/app_ices.so +lib/asterisk/modules/app_image.so +lib/asterisk/modules/app_macro.so +lib/asterisk/modules/app_milliwatt.so +lib/asterisk/modules/app_mixmonitor.so +lib/asterisk/modules/app_morsecode.so +lib/asterisk/modules/app_mp3.so +lib/asterisk/modules/app_nbscat.so +lib/asterisk/modules/app_parkandannounce.so +lib/asterisk/modules/app_playback.so +lib/asterisk/modules/app_privacy.so +lib/asterisk/modules/app_queue.so +lib/asterisk/modules/app_read.so +lib/asterisk/modules/app_readfile.so +lib/asterisk/modules/app_record.so +lib/asterisk/modules/app_sayunixtime.so +lib/asterisk/modules/app_senddtmf.so +lib/asterisk/modules/app_sendtext.so +lib/asterisk/modules/app_setcallerid.so +lib/asterisk/modules/app_sms.so +lib/asterisk/modules/app_softhangup.so +lib/asterisk/modules/app_speech_utils.so +lib/asterisk/modules/app_stack.so +lib/asterisk/modules/app_system.so +lib/asterisk/modules/app_talkdetect.so +lib/asterisk/modules/app_test.so +lib/asterisk/modules/app_transfer.so +lib/asterisk/modules/app_url.so +lib/asterisk/modules/app_userevent.so +lib/asterisk/modules/app_verbose.so +lib/asterisk/modules/app_voicemail.so +lib/asterisk/modules/app_waitforring.so +lib/asterisk/modules/app_waitforsilence.so +lib/asterisk/modules/app_while.so +lib/asterisk/modules/app_zapateller.so +lib/asterisk/modules/cdr_csv.so +lib/asterisk/modules/cdr_custom.so +lib/asterisk/modules/cdr_manager.so +%%WITH_POSTGRES%%lib/asterisk/modules/cdr_pgsql.so +%%WITH_RADIUS%%lib/asterisk/modules/cdr_radius.so +%%WITH_SQLITE%%lib/asterisk/modules/cdr_sqlite.so +%%WITH_SQLITE%%lib/asterisk/modules/cdr_sqlite3_custom.so +lib/asterisk/modules/cdr_syslog.so +lib/asterisk/modules/cel_custom.so +lib/asterisk/modules/cel_manager.so +lib/asterisk/modules/cel_odbc.so +lib/asterisk/modules/cel_pgsql.so +lib/asterisk/modules/cel_radius.so +lib/asterisk/modules/cel_sqlite3_custom.so +%%WITH_FREETDS%%lib/asterisk/modules/cel_tds.so +lib/asterisk/modules/chan_agent.so +%%WITH_JABBER%%lib/asterisk/modules/chan_gtalk.so +lib/asterisk/modules/chan_iax2.so +lib/asterisk/modules/chan_local.so +lib/asterisk/modules/chan_mgcp.so +lib/asterisk/modules/chan_multicast_rtp.so +lib/asterisk/modules/chan_oss.so +lib/asterisk/modules/chan_sip.so +lib/asterisk/modules/chan_skinny.so +lib/asterisk/modules/codec_a_mu.so +lib/asterisk/modules/codec_adpcm.so +lib/asterisk/modules/codec_alaw.so +lib/asterisk/modules/codec_g726.so +%%WITH_GSM%%lib/asterisk/modules/codec_gsm.so +%%WITH_ILBC%%lib/asterisk/modules/codec_ilbc.so +lib/asterisk/modules/codec_lpc10.so +lib/asterisk/modules/codec_speex.so +lib/asterisk/modules/codec_ulaw.so +lib/asterisk/modules/format_g723.so +lib/asterisk/modules/format_g726.so +lib/asterisk/modules/format_g729.so +lib/asterisk/modules/format_gsm.so +lib/asterisk/modules/format_h263.so +lib/asterisk/modules/format_h264.so +lib/asterisk/modules/format_ilbc.so +lib/asterisk/modules/format_jpeg.so +%%WITH_OGGVORBIS%%lib/asterisk/modules/format_ogg_vorbis.so +lib/asterisk/modules/format_pcm.so +lib/asterisk/modules/format_sln.so +lib/asterisk/modules/format_vox.so +lib/asterisk/modules/format_wav.so +lib/asterisk/modules/format_wav_gsm.so +lib/asterisk/modules/func_base64.so +lib/asterisk/modules/func_callcompletion.so +lib/asterisk/modules/func_callerid.so +lib/asterisk/modules/func_cdr.so +lib/asterisk/modules/func_channel.so +%%WITH_CURL%%lib/asterisk/modules/func_curl.so +lib/asterisk/modules/func_cut.so +lib/asterisk/modules/func_db.so +lib/asterisk/modules/func_enum.so +lib/asterisk/modules/func_env.so +lib/asterisk/modules/func_frame_trace.so +lib/asterisk/modules/func_global.so +lib/asterisk/modules/func_groupcount.so +lib/asterisk/modules/func_logic.so +lib/asterisk/modules/func_math.so +lib/asterisk/modules/func_md5.so +%%WITH_ODBC%%lib/asterisk/modules/func_odbc.so +lib/asterisk/modules/func_pitchshift.so +lib/asterisk/modules/func_rand.so +lib/asterisk/modules/func_realtime.so +lib/asterisk/modules/func_sha1.so +lib/asterisk/modules/func_srv.so +lib/asterisk/modules/func_strings.so +lib/asterisk/modules/func_timeout.so +lib/asterisk/modules/func_uri.so +lib/asterisk/modules/pbx_ael.so +lib/asterisk/modules/pbx_config.so +lib/asterisk/modules/pbx_dundi.so +lib/asterisk/modules/pbx_loopback.so +lib/asterisk/modules/pbx_realtime.so +lib/asterisk/modules/pbx_spool.so +lib/asterisk/modules/res_adsi.so +lib/asterisk/modules/res_agi.so +lib/asterisk/modules/res_calendar.so +%%WITH_EXCHANGE%%lib/asterisk/modules/res_calendar_ews.so +lib/asterisk/modules/res_clioriginate.so +%%WITH_POSTGRES%%lib/asterisk/modules/res_config_pgsql.so +lib/asterisk/modules/res_convert.so +lib/asterisk/modules/res_crypto.so +lib/asterisk/modules/res_fax.so +%%WITH_SPANDSP%%lib/asterisk/modules/res_fax_spandsp.so +%%WITH_JABBER%%lib/asterisk/modules/res_jabber.so +lib/asterisk/modules/res_monitor.so +lib/asterisk/modules/res_musiconhold.so +lib/asterisk/modules/res_mutestream.so +lib/asterisk/modules/res_rtp_asterisk.so +lib/asterisk/modules/res_rtp_multicast.so +lib/asterisk/modules/res_security_log.so +lib/asterisk/modules/res_stun_monitor.so +lib/asterisk/modules/res_smdi.so +%%WITH_SNMP%%lib/asterisk/modules/res_snmp.so +lib/asterisk/modules/res_speech.so +sbin/astcanary +sbin/asterisk +sbin/astgenkey +sbin/autosupport +sbin/rasterisk +sbin/safe_asterisk +share/asterisk/agi-bin/agi-test.agi +share/asterisk/agi-bin/eagi-sphinx-test +share/asterisk/agi-bin/eagi-test +share/asterisk/agi-bin/jukebox.agi +share/asterisk/documentation/appdocsxml.dtd +share/asterisk/documentation/core-en_US.xml +share/asterisk/moh/.asterisk-moh-opsound-wav-2.03 +share/asterisk/moh/CHANGES-asterisk-moh-opsound-wav +share/asterisk/moh/CREDITS-asterisk-moh-opsound-wav +share/asterisk/moh/LICENSE-asterisk-moh-opsound-wav +share/asterisk/moh/macroform-cold_day.wav +share/asterisk/moh/macroform-robot_dity.wav +share/asterisk/moh/macroform-the_simplicity.wav +share/asterisk/moh/manolo_camp-morning_coffee.wav +share/asterisk/moh/reno_project-system.wav +share/asterisk/phoneprov/000000000000-directory.xml +share/asterisk/phoneprov/000000000000-phone.cfg +share/asterisk/phoneprov/000000000000.cfg +share/asterisk/phoneprov/polycom.xml +share/asterisk/phoneprov/polycom_line.xml +share/asterisk/sounds/en/CHANGES-asterisk-core-en-1.4.20 +share/asterisk/sounds/en/CREDITS-asterisk-core-en-1.4.20 +share/asterisk/sounds/en/LICENSE-asterisk-core-en-1.4.20 +share/asterisk/sounds/en/ascending-2tone.gsm +share/asterisk/sounds/en/conf-adminmenu-162.gsm +share/asterisk/sounds/en/conf-extended.gsm +share/asterisk/sounds/en/conf-nonextended.gsm +share/asterisk/sounds/en/conf-now-muted.gsm +share/asterisk/sounds/en/conf-now-recording.gsm +share/asterisk/sounds/en/conf-now-unmuted.gsm +share/asterisk/sounds/en/conf-roll-callcomplete.gsm +share/asterisk/sounds/en/conf-usermenu-162.gsm +share/asterisk/sounds/en/descending-2tone.gsm +share/asterisk/sounds/en/spy-dahdi.gsm +share/asterisk/sounds/en/vm-Urgent.gsm +share/asterisk/sounds/en/vm-forward-multiple.gsm +share/asterisk/sounds/en/vm-invalid-password.gsm +share/asterisk/sounds/en/vm-marked-nonurgent.gsm +share/asterisk/sounds/en/vm-marked-urgent.gsm +share/asterisk/sounds/en/vm-pls-try-again.gsm +share/asterisk/sounds/en/vm-record-prepend.gsm +share/asterisk/sounds/en/vm-review-nonurgent.gsm +share/asterisk/sounds/en/vm-review-urgent.gsm +share/asterisk/sounds/en/dir-usingkeypad.gsm +share/asterisk/sounds/en/dir-welcome.gsm +share/asterisk/sounds/en/agent-alreadyon.gsm +share/asterisk/sounds/en/agent-incorrect.gsm +share/asterisk/sounds/en/agent-loggedoff.gsm +share/asterisk/sounds/en/agent-loginok.gsm +share/asterisk/sounds/en/agent-newlocation.gsm +share/asterisk/sounds/en/agent-pass.gsm +share/asterisk/sounds/en/agent-user.gsm +share/asterisk/sounds/en/auth-incorrect.gsm +share/asterisk/sounds/en/auth-thankyou.gsm +share/asterisk/sounds/en/beep.gsm +share/asterisk/sounds/en/beeperr.gsm +share/asterisk/sounds/en/conf-adminmenu.gsm +share/asterisk/sounds/en/conf-enteringno.gsm +share/asterisk/sounds/en/conf-errormenu.gsm +share/asterisk/sounds/en/conf-getchannel.gsm +share/asterisk/sounds/en/conf-getconfno.gsm +share/asterisk/sounds/en/conf-getpin.gsm +share/asterisk/sounds/en/conf-hasjoin.gsm +share/asterisk/sounds/en/conf-hasleft.gsm +share/asterisk/sounds/en/conf-invalid.gsm +share/asterisk/sounds/en/conf-invalidpin.gsm +share/asterisk/sounds/en/conf-kicked.gsm +share/asterisk/sounds/en/conf-leaderhasleft.gsm +share/asterisk/sounds/en/conf-locked.gsm +share/asterisk/sounds/en/conf-lockednow.gsm +share/asterisk/sounds/en/conf-muted.gsm +share/asterisk/sounds/en/conf-noempty.gsm +share/asterisk/sounds/en/conf-onlyone.gsm +share/asterisk/sounds/en/conf-onlyperson.gsm +share/asterisk/sounds/en/conf-otherinparty.gsm +share/asterisk/sounds/en/conf-placeintoconf.gsm +share/asterisk/sounds/en/conf-thereare.gsm +share/asterisk/sounds/en/conf-unlockednow.gsm +share/asterisk/sounds/en/conf-unmuted.gsm +share/asterisk/sounds/en/conf-usermenu.gsm +share/asterisk/sounds/en/conf-userswilljoin.gsm +share/asterisk/sounds/en/conf-userwilljoin.gsm +share/asterisk/sounds/en/conf-waitforleader.gsm +share/asterisk/sounds/en/core-sounds-en.txt +share/asterisk/sounds/en/demo-abouttotry.gsm +share/asterisk/sounds/en/demo-congrats.gsm +share/asterisk/sounds/en/demo-echodone.gsm +share/asterisk/sounds/en/demo-echotest.gsm +share/asterisk/sounds/en/demo-enterkeywords.gsm +share/asterisk/sounds/en/demo-instruct.gsm +share/asterisk/sounds/en/demo-moreinfo.gsm +share/asterisk/sounds/en/demo-nogo.gsm +share/asterisk/sounds/en/demo-nomatch.gsm +share/asterisk/sounds/en/demo-thanks.gsm +share/asterisk/sounds/en/dictate/both_help.gsm +share/asterisk/sounds/en/dictate/enter_filename.gsm +share/asterisk/sounds/en/dictate/forhelp.gsm +share/asterisk/sounds/en/dictate/pause.gsm +share/asterisk/sounds/en/dictate/paused.gsm +share/asterisk/sounds/en/dictate/play_help.gsm +share/asterisk/sounds/en/dictate/playback.gsm +share/asterisk/sounds/en/dictate/playback_mode.gsm +share/asterisk/sounds/en/dictate/record.gsm +share/asterisk/sounds/en/dictate/record_help.gsm +share/asterisk/sounds/en/dictate/record_mode.gsm +share/asterisk/sounds/en/dictate/truncating_audio.gsm +share/asterisk/sounds/en/digits/0.gsm +share/asterisk/sounds/en/digits/1.gsm +share/asterisk/sounds/en/digits/10.gsm +share/asterisk/sounds/en/digits/11.gsm +share/asterisk/sounds/en/digits/12.gsm +share/asterisk/sounds/en/digits/13.gsm +share/asterisk/sounds/en/digits/14.gsm +share/asterisk/sounds/en/digits/15.gsm +share/asterisk/sounds/en/digits/16.gsm +share/asterisk/sounds/en/digits/17.gsm +share/asterisk/sounds/en/digits/18.gsm +share/asterisk/sounds/en/digits/19.gsm +share/asterisk/sounds/en/digits/2.gsm +share/asterisk/sounds/en/digits/20.gsm +share/asterisk/sounds/en/digits/3.gsm +share/asterisk/sounds/en/digits/30.gsm +share/asterisk/sounds/en/digits/4.gsm +share/asterisk/sounds/en/digits/40.gsm +share/asterisk/sounds/en/digits/5.gsm +share/asterisk/sounds/en/digits/50.gsm +share/asterisk/sounds/en/digits/6.gsm +share/asterisk/sounds/en/digits/60.gsm +share/asterisk/sounds/en/digits/7.gsm +share/asterisk/sounds/en/digits/70.gsm +share/asterisk/sounds/en/digits/8.gsm +share/asterisk/sounds/en/digits/80.gsm +share/asterisk/sounds/en/digits/9.gsm +share/asterisk/sounds/en/digits/90.gsm +share/asterisk/sounds/en/digits/a-m.gsm +share/asterisk/sounds/en/digits/at.gsm +share/asterisk/sounds/en/digits/billion.gsm +share/asterisk/sounds/en/digits/day-0.gsm +share/asterisk/sounds/en/digits/day-1.gsm +share/asterisk/sounds/en/digits/day-2.gsm +share/asterisk/sounds/en/digits/day-3.gsm +share/asterisk/sounds/en/digits/day-4.gsm +share/asterisk/sounds/en/digits/day-5.gsm +share/asterisk/sounds/en/digits/day-6.gsm +share/asterisk/sounds/en/digits/dollars.gsm +share/asterisk/sounds/en/digits/h-1.gsm +share/asterisk/sounds/en/digits/h-10.gsm +share/asterisk/sounds/en/digits/h-11.gsm +share/asterisk/sounds/en/digits/h-12.gsm +share/asterisk/sounds/en/digits/h-13.gsm +share/asterisk/sounds/en/digits/h-14.gsm +share/asterisk/sounds/en/digits/h-15.gsm +share/asterisk/sounds/en/digits/h-16.gsm +share/asterisk/sounds/en/digits/h-17.gsm +share/asterisk/sounds/en/digits/h-18.gsm +share/asterisk/sounds/en/digits/h-19.gsm +share/asterisk/sounds/en/digits/h-2.gsm +share/asterisk/sounds/en/digits/h-20.gsm +share/asterisk/sounds/en/digits/h-3.gsm +share/asterisk/sounds/en/digits/h-30.gsm +share/asterisk/sounds/en/digits/h-4.gsm +share/asterisk/sounds/en/digits/h-40.gsm +share/asterisk/sounds/en/digits/h-5.gsm +share/asterisk/sounds/en/digits/h-50.gsm +share/asterisk/sounds/en/digits/h-6.gsm +share/asterisk/sounds/en/digits/h-60.gsm +share/asterisk/sounds/en/digits/h-7.gsm +share/asterisk/sounds/en/digits/h-70.gsm +share/asterisk/sounds/en/digits/h-8.gsm +share/asterisk/sounds/en/digits/h-80.gsm +share/asterisk/sounds/en/digits/h-9.gsm +share/asterisk/sounds/en/digits/h-90.gsm +share/asterisk/sounds/en/digits/h-billion.gsm +share/asterisk/sounds/en/digits/h-hundred.gsm +share/asterisk/sounds/en/digits/h-million.gsm +share/asterisk/sounds/en/digits/h-thousand.gsm +share/asterisk/sounds/en/digits/hundred.gsm +share/asterisk/sounds/en/digits/million.gsm +share/asterisk/sounds/en/digits/minus.gsm +share/asterisk/sounds/en/digits/mon-0.gsm +share/asterisk/sounds/en/digits/mon-1.gsm +share/asterisk/sounds/en/digits/mon-10.gsm +share/asterisk/sounds/en/digits/mon-11.gsm +share/asterisk/sounds/en/digits/mon-2.gsm +share/asterisk/sounds/en/digits/mon-3.gsm +share/asterisk/sounds/en/digits/mon-4.gsm +share/asterisk/sounds/en/digits/mon-5.gsm +share/asterisk/sounds/en/digits/mon-6.gsm +share/asterisk/sounds/en/digits/mon-7.gsm +share/asterisk/sounds/en/digits/mon-8.gsm +share/asterisk/sounds/en/digits/mon-9.gsm +share/asterisk/sounds/en/digits/oclock.gsm +share/asterisk/sounds/en/digits/oh.gsm +share/asterisk/sounds/en/digits/p-m.gsm +share/asterisk/sounds/en/digits/pound.gsm +share/asterisk/sounds/en/digits/star.gsm +share/asterisk/sounds/en/digits/thousand.gsm +share/asterisk/sounds/en/digits/today.gsm +share/asterisk/sounds/en/digits/tomorrow.gsm +share/asterisk/sounds/en/digits/yesterday.gsm +share/asterisk/sounds/en/dir-first.gsm +share/asterisk/sounds/en/dir-firstlast.gsm +share/asterisk/sounds/en/dir-instr.gsm +share/asterisk/sounds/en/dir-intro-fn.gsm +share/asterisk/sounds/en/dir-intro.gsm +share/asterisk/sounds/en/dir-last.gsm +share/asterisk/sounds/en/dir-multi1.gsm +share/asterisk/sounds/en/dir-multi2.gsm +share/asterisk/sounds/en/dir-multi3.gsm +share/asterisk/sounds/en/dir-multi9.gsm +share/asterisk/sounds/en/dir-nomatch.gsm +share/asterisk/sounds/en/dir-nomore.gsm +share/asterisk/sounds/en/dir-pls-enter.gsm +share/asterisk/sounds/en/followme/call-from.gsm +share/asterisk/sounds/en/followme/no-recording.gsm +share/asterisk/sounds/en/followme/options.gsm +share/asterisk/sounds/en/followme/pls-hold-while-try.gsm +share/asterisk/sounds/en/followme/sorry.gsm +share/asterisk/sounds/en/followme/status.gsm +share/asterisk/sounds/en/hello-world.gsm +share/asterisk/sounds/en/hours.gsm +share/asterisk/sounds/en/invalid.gsm +share/asterisk/sounds/en/letters/a.gsm +share/asterisk/sounds/en/letters/ascii123.gsm +share/asterisk/sounds/en/letters/ascii124.gsm +share/asterisk/sounds/en/letters/ascii125.gsm +share/asterisk/sounds/en/letters/ascii126.gsm +share/asterisk/sounds/en/letters/ascii34.gsm +share/asterisk/sounds/en/letters/ascii36.gsm +share/asterisk/sounds/en/letters/ascii37.gsm +share/asterisk/sounds/en/letters/ascii38.gsm +share/asterisk/sounds/en/letters/ascii39.gsm +share/asterisk/sounds/en/letters/ascii40.gsm +share/asterisk/sounds/en/letters/ascii41.gsm +share/asterisk/sounds/en/letters/ascii42.gsm +share/asterisk/sounds/en/letters/ascii44.gsm +share/asterisk/sounds/en/letters/ascii58.gsm +share/asterisk/sounds/en/letters/ascii59.gsm +share/asterisk/sounds/en/letters/ascii60.gsm +share/asterisk/sounds/en/letters/ascii62.gsm +share/asterisk/sounds/en/letters/ascii63.gsm +share/asterisk/sounds/en/letters/ascii91.gsm +share/asterisk/sounds/en/letters/ascii92.gsm +share/asterisk/sounds/en/letters/ascii93.gsm +share/asterisk/sounds/en/letters/ascii94.gsm +share/asterisk/sounds/en/letters/ascii95.gsm +share/asterisk/sounds/en/letters/ascii96.gsm +share/asterisk/sounds/en/letters/asterisk.gsm +share/asterisk/sounds/en/letters/at.gsm +share/asterisk/sounds/en/letters/b.gsm +share/asterisk/sounds/en/letters/c.gsm +share/asterisk/sounds/en/letters/d.gsm +share/asterisk/sounds/en/letters/dash.gsm +share/asterisk/sounds/en/letters/dollar.gsm +share/asterisk/sounds/en/letters/dot.gsm +share/asterisk/sounds/en/letters/e.gsm +share/asterisk/sounds/en/letters/equals.gsm +share/asterisk/sounds/en/letters/exclaimation-point.gsm +share/asterisk/sounds/en/letters/f.gsm +share/asterisk/sounds/en/letters/g.gsm +share/asterisk/sounds/en/letters/h.gsm +share/asterisk/sounds/en/letters/i.gsm +share/asterisk/sounds/en/letters/j.gsm +share/asterisk/sounds/en/letters/k.gsm +share/asterisk/sounds/en/letters/l.gsm +share/asterisk/sounds/en/letters/m.gsm +share/asterisk/sounds/en/letters/n.gsm +share/asterisk/sounds/en/letters/o.gsm +share/asterisk/sounds/en/letters/p.gsm +share/asterisk/sounds/en/letters/plus.gsm +share/asterisk/sounds/en/letters/q.gsm +share/asterisk/sounds/en/letters/r.gsm +share/asterisk/sounds/en/letters/s.gsm +share/asterisk/sounds/en/letters/slash.gsm +share/asterisk/sounds/en/letters/space.gsm +share/asterisk/sounds/en/letters/t.gsm +share/asterisk/sounds/en/letters/u.gsm +share/asterisk/sounds/en/letters/v.gsm +share/asterisk/sounds/en/letters/w.gsm +share/asterisk/sounds/en/letters/x.gsm +share/asterisk/sounds/en/letters/y.gsm +share/asterisk/sounds/en/letters/z.gsm +share/asterisk/sounds/en/letters/zed.gsm +share/asterisk/sounds/en/minutes.gsm +share/asterisk/sounds/en/pbx-invalid.gsm +share/asterisk/sounds/en/pbx-invalidpark.gsm +share/asterisk/sounds/en/pbx-parkingfailed.gsm +share/asterisk/sounds/en/pbx-transfer.gsm +share/asterisk/sounds/en/phonetic/9_p.gsm +share/asterisk/sounds/en/phonetic/a_p.gsm +share/asterisk/sounds/en/phonetic/b_p.gsm +share/asterisk/sounds/en/phonetic/c_p.gsm +share/asterisk/sounds/en/phonetic/d_p.gsm +share/asterisk/sounds/en/phonetic/e_p.gsm +share/asterisk/sounds/en/phonetic/f_p.gsm +share/asterisk/sounds/en/phonetic/g_p.gsm +share/asterisk/sounds/en/phonetic/h_p.gsm +share/asterisk/sounds/en/phonetic/i_p.gsm +share/asterisk/sounds/en/phonetic/j_p.gsm +share/asterisk/sounds/en/phonetic/k_p.gsm +share/asterisk/sounds/en/phonetic/l_p.gsm +share/asterisk/sounds/en/phonetic/m_p.gsm +share/asterisk/sounds/en/phonetic/n_p.gsm +share/asterisk/sounds/en/phonetic/o_p.gsm +share/asterisk/sounds/en/phonetic/p_p.gsm +share/asterisk/sounds/en/phonetic/q_p.gsm +share/asterisk/sounds/en/phonetic/r_p.gsm +share/asterisk/sounds/en/phonetic/s_p.gsm +share/asterisk/sounds/en/phonetic/t_p.gsm +share/asterisk/sounds/en/phonetic/u_p.gsm +share/asterisk/sounds/en/phonetic/v_p.gsm +share/asterisk/sounds/en/phonetic/w_p.gsm +share/asterisk/sounds/en/phonetic/x_p.gsm +share/asterisk/sounds/en/phonetic/y_p.gsm +share/asterisk/sounds/en/phonetic/z_p.gsm +share/asterisk/sounds/en/priv-callee-options.gsm +share/asterisk/sounds/en/priv-callpending.gsm +share/asterisk/sounds/en/priv-introsaved.gsm +share/asterisk/sounds/en/priv-recordintro.gsm +share/asterisk/sounds/en/privacy-incorrect.gsm +share/asterisk/sounds/en/privacy-prompt.gsm +share/asterisk/sounds/en/privacy-thankyou.gsm +share/asterisk/sounds/en/privacy-unident.gsm +share/asterisk/sounds/en/queue-callswaiting.gsm +share/asterisk/sounds/en/queue-holdtime.gsm +share/asterisk/sounds/en/queue-less-than.gsm +share/asterisk/sounds/en/queue-minute.gsm +share/asterisk/sounds/en/queue-minutes.gsm +share/asterisk/sounds/en/queue-periodic-announce.gsm +share/asterisk/sounds/en/queue-quantity1.gsm +share/asterisk/sounds/en/queue-quantity2.gsm +share/asterisk/sounds/en/queue-reporthold.gsm +share/asterisk/sounds/en/queue-seconds.gsm +share/asterisk/sounds/en/queue-thankyou.gsm +share/asterisk/sounds/en/queue-thereare.gsm +share/asterisk/sounds/en/queue-youarenext.gsm +share/asterisk/sounds/en/screen-callee-options.gsm +share/asterisk/sounds/en/seconds.gsm +share/asterisk/sounds/en/silence/1.gsm +share/asterisk/sounds/en/silence/10.gsm +share/asterisk/sounds/en/silence/2.gsm +share/asterisk/sounds/en/silence/3.gsm +share/asterisk/sounds/en/silence/4.gsm +share/asterisk/sounds/en/silence/5.gsm +share/asterisk/sounds/en/silence/6.gsm +share/asterisk/sounds/en/silence/7.gsm +share/asterisk/sounds/en/silence/8.gsm +share/asterisk/sounds/en/silence/9.gsm +share/asterisk/sounds/en/spy-agent.gsm +share/asterisk/sounds/en/spy-console.gsm +share/asterisk/sounds/en/spy-h323.gsm +share/asterisk/sounds/en/spy-iax.gsm +share/asterisk/sounds/en/spy-iax2.gsm +share/asterisk/sounds/en/spy-jingle.gsm +share/asterisk/sounds/en/spy-local.gsm +share/asterisk/sounds/en/spy-mgcp.gsm +share/asterisk/sounds/en/spy-misdn.gsm +share/asterisk/sounds/en/spy-mobile.gsm +share/asterisk/sounds/en/spy-nbs.gsm +share/asterisk/sounds/en/spy-sip.gsm +share/asterisk/sounds/en/spy-skinny.gsm +share/asterisk/sounds/en/spy-unistim.gsm +share/asterisk/sounds/en/spy-usbradio.gsm +share/asterisk/sounds/en/spy-zap.gsm +share/asterisk/sounds/en/ss-noservice.gsm +share/asterisk/sounds/en/transfer.gsm +share/asterisk/sounds/en/tt-allbusy.gsm +share/asterisk/sounds/en/tt-monkeys.gsm +share/asterisk/sounds/en/tt-monkeysintro.gsm +share/asterisk/sounds/en/tt-somethingwrong.gsm +share/asterisk/sounds/en/tt-weasels.gsm +share/asterisk/sounds/en/vm-Cust1.gsm +share/asterisk/sounds/en/vm-Cust2.gsm +share/asterisk/sounds/en/vm-Cust3.gsm +share/asterisk/sounds/en/vm-Cust4.gsm +share/asterisk/sounds/en/vm-Cust5.gsm +share/asterisk/sounds/en/vm-Family.gsm +share/asterisk/sounds/en/vm-Friends.gsm +share/asterisk/sounds/en/vm-INBOX.gsm +share/asterisk/sounds/en/vm-Old.gsm +share/asterisk/sounds/en/vm-Work.gsm +share/asterisk/sounds/en/vm-advopts.gsm +share/asterisk/sounds/en/vm-and.gsm +share/asterisk/sounds/en/vm-calldiffnum.gsm +share/asterisk/sounds/en/vm-changeto.gsm +share/asterisk/sounds/en/vm-delete.gsm +share/asterisk/sounds/en/vm-deleted.gsm +share/asterisk/sounds/en/vm-dialout.gsm +share/asterisk/sounds/en/vm-duration.gsm +share/asterisk/sounds/en/vm-enter-num-to-call.gsm +share/asterisk/sounds/en/vm-extension.gsm +share/asterisk/sounds/en/vm-first.gsm +share/asterisk/sounds/en/vm-for.gsm +share/asterisk/sounds/en/vm-forward.gsm +share/asterisk/sounds/en/vm-forwardoptions.gsm +share/asterisk/sounds/en/vm-from-extension.gsm +share/asterisk/sounds/en/vm-from-phonenumber.gsm +share/asterisk/sounds/en/vm-from.gsm +share/asterisk/sounds/en/vm-goodbye.gsm +share/asterisk/sounds/en/vm-helpexit.gsm +share/asterisk/sounds/en/vm-incorrect-mailbox.gsm +share/asterisk/sounds/en/vm-incorrect.gsm +share/asterisk/sounds/en/vm-instructions.gsm +share/asterisk/sounds/en/vm-intro.gsm +share/asterisk/sounds/en/vm-invalidpassword.gsm +share/asterisk/sounds/en/vm-isonphone.gsm +share/asterisk/sounds/en/vm-isunavail.gsm +share/asterisk/sounds/en/vm-last.gsm +share/asterisk/sounds/en/vm-leavemsg.gsm +share/asterisk/sounds/en/vm-login.gsm +share/asterisk/sounds/en/vm-mailboxfull.gsm +share/asterisk/sounds/en/vm-message.gsm +share/asterisk/sounds/en/vm-messages.gsm +share/asterisk/sounds/en/vm-minutes.gsm +share/asterisk/sounds/en/vm-mismatch.gsm +share/asterisk/sounds/en/vm-msginstruct.gsm +share/asterisk/sounds/en/vm-msgsaved.gsm +share/asterisk/sounds/en/vm-newpassword.gsm +share/asterisk/sounds/en/vm-newuser.gsm +share/asterisk/sounds/en/vm-next.gsm +share/asterisk/sounds/en/vm-no.gsm +share/asterisk/sounds/en/vm-nobodyavail.gsm +share/asterisk/sounds/en/vm-nobox.gsm +share/asterisk/sounds/en/vm-nomore.gsm +share/asterisk/sounds/en/vm-nonumber.gsm +share/asterisk/sounds/en/vm-num-i-have.gsm +share/asterisk/sounds/en/vm-onefor.gsm +share/asterisk/sounds/en/vm-onefor-full.gsm +share/asterisk/sounds/en/vm-options.gsm +share/asterisk/sounds/en/vm-opts.gsm +share/asterisk/sounds/en/vm-opts-full.gsm +share/asterisk/sounds/en/vm-passchanged.gsm +share/asterisk/sounds/en/vm-password.gsm +share/asterisk/sounds/en/vm-press.gsm +share/asterisk/sounds/en/vm-prev.gsm +share/asterisk/sounds/en/vm-reachoper.gsm +share/asterisk/sounds/en/vm-rec-busy.gsm +share/asterisk/sounds/en/vm-rec-name.gsm +share/asterisk/sounds/en/vm-rec-temp.gsm +share/asterisk/sounds/en/vm-rec-unv.gsm +share/asterisk/sounds/en/vm-received.gsm +share/asterisk/sounds/en/vm-reenterpassword.gsm +share/asterisk/sounds/en/vm-repeat.gsm +share/asterisk/sounds/en/vm-review.gsm +share/asterisk/sounds/en/vm-saved.gsm +share/asterisk/sounds/en/vm-savedto.gsm +share/asterisk/sounds/en/vm-savefolder.gsm +share/asterisk/sounds/en/vm-savemessage.gsm +share/asterisk/sounds/en/vm-saveoper.gsm +share/asterisk/sounds/en/vm-sorry.gsm +share/asterisk/sounds/en/vm-star-cancel.gsm +share/asterisk/sounds/en/vm-starmain.gsm +share/asterisk/sounds/en/vm-tempgreetactive.gsm +share/asterisk/sounds/en/vm-tempgreeting.gsm +share/asterisk/sounds/en/vm-tempgreeting2.gsm +share/asterisk/sounds/en/vm-tempremoved.gsm +share/asterisk/sounds/en/vm-then-pound.gsm +share/asterisk/sounds/en/vm-theperson.gsm +share/asterisk/sounds/en/vm-tmpexists.gsm +share/asterisk/sounds/en/vm-tocallback.gsm +share/asterisk/sounds/en/vm-tocallnum.gsm +share/asterisk/sounds/en/vm-tocancel.gsm +share/asterisk/sounds/en/vm-tocancelmsg.gsm +share/asterisk/sounds/en/vm-toenternumber.gsm +share/asterisk/sounds/en/vm-toforward.gsm +share/asterisk/sounds/en/vm-tohearenv.gsm +share/asterisk/sounds/en/vm-tomakecall.gsm +share/asterisk/sounds/en/vm-tooshort.gsm +share/asterisk/sounds/en/vm-toreply.gsm +share/asterisk/sounds/en/vm-torerecord.gsm +share/asterisk/sounds/en/vm-undelete.gsm +share/asterisk/sounds/en/vm-undeleted.gsm +share/asterisk/sounds/en/vm-unknown-caller.gsm +share/asterisk/sounds/en/vm-whichbox.gsm +share/asterisk/sounds/en/vm-youhave.gsm +share/asterisk/sounds/.asterisk-core-sounds-en-gsm-1.4.20 +share/asterisk/static-http/ajamdemo.html +share/asterisk/static-http/astman.css +share/asterisk/static-http/astman.js +share/asterisk/static-http/core-en_US.xml +share/asterisk/static-http/prototype.js +share/asterisk/static-http/mantest.html +%%WITH_DAHDI%%lib/asterisk/modules/app_flash.so +%%WITH_DAHDI%%lib/asterisk/modules/app_meetme.so +%%WITH_DAHDI%%lib/asterisk/modules/app_page.so +%%WITH_DAHDI%%lib/asterisk/modules/app_dahdibarge.so +%%WITH_DAHDI%%lib/asterisk/modules/app_dahdiras.so +%%WITH_ODBC%%lib/asterisk/modules/cdr_odbc.so +%%WITH_FREETDS%%lib/asterisk/modules/cdr_tds.so +%%WITH_H323%%lib/asterisk/modules/chan_h323.so +%%WITH_DAHDI%%lib/asterisk/modules/chan_dahdi.so +%%WITH_DAHDI%%lib/asterisk/modules/codec_dahdi.so +%%WITH_ODBC%%lib/asterisk/modules/res_config_odbc.so +%%WITH_ODBC%%lib/asterisk/modules/res_odbc.so +%%DOCSDIR%%/WARNINGS +%%DOCSDIR%%/asterisk.css +%%DOCSDIR%%/asterisk.html +%%DOCSDIR%%/images.aux +%%DOCSDIR%%/images.log +%%DOCSDIR%%/images.out +%%DOCSDIR%%/images.pl +%%DOCSDIR%%/images.tex +%%DOCSDIR%%/img1.png +%%DOCSDIR%%/img2.png +%%DOCSDIR%%/img3.png +%%DOCSDIR%%/img4.png +%%DOCSDIR%%/img5.png +%%DOCSDIR%%/img6.png +%%DOCSDIR%%/img7.png +%%DOCSDIR%%/img8.png +%%DOCSDIR%%/img9.png +%%DOCSDIR%%/index.html +%%DOCSDIR%%/internals.pl +%%DOCSDIR%%/labels.pl +%%DOCSDIR%%/node1.html +%%DOCSDIR%%/node10.html +%%DOCSDIR%%/node100.html +%%DOCSDIR%%/node101.html +%%DOCSDIR%%/node102.html +%%DOCSDIR%%/node103.html +%%DOCSDIR%%/node104.html +%%DOCSDIR%%/node105.html +%%DOCSDIR%%/node106.html +%%DOCSDIR%%/node107.html +%%DOCSDIR%%/node108.html +%%DOCSDIR%%/node109.html +%%DOCSDIR%%/node11.html +%%DOCSDIR%%/node110.html +%%DOCSDIR%%/node111.html +%%DOCSDIR%%/node112.html +%%DOCSDIR%%/node113.html +%%DOCSDIR%%/node114.html +%%DOCSDIR%%/node115.html +%%DOCSDIR%%/node116.html +%%DOCSDIR%%/node117.html +%%DOCSDIR%%/node118.html +%%DOCSDIR%%/node119.html +%%DOCSDIR%%/node12.html +%%DOCSDIR%%/node120.html +%%DOCSDIR%%/node121.html +%%DOCSDIR%%/node122.html +%%DOCSDIR%%/node123.html +%%DOCSDIR%%/node124.html +%%DOCSDIR%%/node125.html +%%DOCSDIR%%/node126.html +%%DOCSDIR%%/node127.html +%%DOCSDIR%%/node128.html +%%DOCSDIR%%/node129.html +%%DOCSDIR%%/node13.html +%%DOCSDIR%%/node130.html +%%DOCSDIR%%/node131.html +%%DOCSDIR%%/node132.html +%%DOCSDIR%%/node133.html +%%DOCSDIR%%/node134.html +%%DOCSDIR%%/node135.html +%%DOCSDIR%%/node136.html +%%DOCSDIR%%/node137.html +%%DOCSDIR%%/node138.html +%%DOCSDIR%%/node139.html +%%DOCSDIR%%/node14.html +%%DOCSDIR%%/node140.html +%%DOCSDIR%%/node141.html +%%DOCSDIR%%/node142.html +%%DOCSDIR%%/node143.html +%%DOCSDIR%%/node144.html +%%DOCSDIR%%/node145.html +%%DOCSDIR%%/node146.html +%%DOCSDIR%%/node147.html +%%DOCSDIR%%/node148.html +%%DOCSDIR%%/node149.html +%%DOCSDIR%%/node15.html +%%DOCSDIR%%/node150.html +%%DOCSDIR%%/node151.html +%%DOCSDIR%%/node152.html +%%DOCSDIR%%/node153.html +%%DOCSDIR%%/node154.html +%%DOCSDIR%%/node155.html +%%DOCSDIR%%/node156.html +%%DOCSDIR%%/node157.html +%%DOCSDIR%%/node158.html +%%DOCSDIR%%/node159.html +%%DOCSDIR%%/node16.html +%%DOCSDIR%%/node160.html +%%DOCSDIR%%/node161.html +%%DOCSDIR%%/node162.html +%%DOCSDIR%%/node163.html +%%DOCSDIR%%/node164.html +%%DOCSDIR%%/node165.html +%%DOCSDIR%%/node166.html +%%DOCSDIR%%/node167.html +%%DOCSDIR%%/node168.html +%%DOCSDIR%%/node169.html +%%DOCSDIR%%/node17.html +%%DOCSDIR%%/node170.html +%%DOCSDIR%%/node171.html +%%DOCSDIR%%/node172.html +%%DOCSDIR%%/node173.html +%%DOCSDIR%%/node174.html +%%DOCSDIR%%/node175.html +%%DOCSDIR%%/node176.html +%%DOCSDIR%%/node177.html +%%DOCSDIR%%/node178.html +%%DOCSDIR%%/node179.html +%%DOCSDIR%%/node18.html +%%DOCSDIR%%/node180.html +%%DOCSDIR%%/node181.html +%%DOCSDIR%%/node182.html +%%DOCSDIR%%/node183.html +%%DOCSDIR%%/node184.html +%%DOCSDIR%%/node185.html +%%DOCSDIR%%/node186.html +%%DOCSDIR%%/node187.html +%%DOCSDIR%%/node188.html +%%DOCSDIR%%/node189.html +%%DOCSDIR%%/node19.html +%%DOCSDIR%%/node190.html +%%DOCSDIR%%/node191.html +%%DOCSDIR%%/node192.html +%%DOCSDIR%%/node193.html +%%DOCSDIR%%/node194.html +%%DOCSDIR%%/node195.html +%%DOCSDIR%%/node196.html +%%DOCSDIR%%/node197.html +%%DOCSDIR%%/node198.html +%%DOCSDIR%%/node199.html +%%DOCSDIR%%/node2.html +%%DOCSDIR%%/node20.html +%%DOCSDIR%%/node200.html +%%DOCSDIR%%/node201.html +%%DOCSDIR%%/node202.html +%%DOCSDIR%%/node203.html +%%DOCSDIR%%/node204.html +%%DOCSDIR%%/node205.html +%%DOCSDIR%%/node206.html +%%DOCSDIR%%/node207.html +%%DOCSDIR%%/node208.html +%%DOCSDIR%%/node209.html +%%DOCSDIR%%/node21.html +%%DOCSDIR%%/node210.html +%%DOCSDIR%%/node211.html +%%DOCSDIR%%/node212.html +%%DOCSDIR%%/node213.html +%%DOCSDIR%%/node214.html +%%DOCSDIR%%/node215.html +%%DOCSDIR%%/node216.html +%%DOCSDIR%%/node217.html +%%DOCSDIR%%/node218.html +%%DOCSDIR%%/node219.html +%%DOCSDIR%%/node22.html +%%DOCSDIR%%/node220.html +%%DOCSDIR%%/node221.html +%%DOCSDIR%%/node222.html +%%DOCSDIR%%/node223.html +%%DOCSDIR%%/node224.html +%%DOCSDIR%%/node225.html +%%DOCSDIR%%/node226.html +%%DOCSDIR%%/node227.html +%%DOCSDIR%%/node228.html +%%DOCSDIR%%/node229.html +%%DOCSDIR%%/node23.html +%%DOCSDIR%%/node230.html +%%DOCSDIR%%/node231.html +%%DOCSDIR%%/node232.html +%%DOCSDIR%%/node233.html +%%DOCSDIR%%/node234.html +%%DOCSDIR%%/node235.html +%%DOCSDIR%%/node236.html +%%DOCSDIR%%/node237.html +%%DOCSDIR%%/node238.html +%%DOCSDIR%%/node239.html +%%DOCSDIR%%/node24.html +%%DOCSDIR%%/node240.html +%%DOCSDIR%%/node241.html +%%DOCSDIR%%/node242.html +%%DOCSDIR%%/node243.html +%%DOCSDIR%%/node244.html +%%DOCSDIR%%/node245.html +%%DOCSDIR%%/node246.html +%%DOCSDIR%%/node247.html +%%DOCSDIR%%/node248.html +%%DOCSDIR%%/node249.html +%%DOCSDIR%%/node25.html +%%DOCSDIR%%/node250.html +%%DOCSDIR%%/node251.html +%%DOCSDIR%%/node252.html +%%DOCSDIR%%/node253.html +%%DOCSDIR%%/node254.html +%%DOCSDIR%%/node255.html +%%DOCSDIR%%/node256.html +%%DOCSDIR%%/node257.html +%%DOCSDIR%%/node258.html +%%DOCSDIR%%/node259.html +%%DOCSDIR%%/node26.html +%%DOCSDIR%%/node260.html +%%DOCSDIR%%/node261.html +%%DOCSDIR%%/node262.html +%%DOCSDIR%%/node263.html +%%DOCSDIR%%/node264.html +%%DOCSDIR%%/node265.html +%%DOCSDIR%%/node266.html +%%DOCSDIR%%/node267.html +%%DOCSDIR%%/node268.html +%%DOCSDIR%%/node269.html +%%DOCSDIR%%/node27.html +%%DOCSDIR%%/node270.html +%%DOCSDIR%%/node271.html +%%DOCSDIR%%/node272.html +%%DOCSDIR%%/node273.html +%%DOCSDIR%%/node274.html +%%DOCSDIR%%/node275.html +%%DOCSDIR%%/node276.html +%%DOCSDIR%%/node277.html +%%DOCSDIR%%/node278.html +%%DOCSDIR%%/node279.html +%%DOCSDIR%%/node28.html +%%DOCSDIR%%/node280.html +%%DOCSDIR%%/node281.html +%%DOCSDIR%%/node282.html +%%DOCSDIR%%/node283.html +%%DOCSDIR%%/node284.html +%%DOCSDIR%%/node285.html +%%DOCSDIR%%/node286.html +%%DOCSDIR%%/node287.html +%%DOCSDIR%%/node288.html +%%DOCSDIR%%/node289.html +%%DOCSDIR%%/node290.html +%%DOCSDIR%%/node291.html +%%DOCSDIR%%/node292.html +%%DOCSDIR%%/node293.html +%%DOCSDIR%%/node294.html +%%DOCSDIR%%/node295.html +%%DOCSDIR%%/node296.html +%%DOCSDIR%%/node297.html +%%DOCSDIR%%/node298.html +%%DOCSDIR%%/node299.html +%%DOCSDIR%%/node29.html +%%DOCSDIR%%/node3.html +%%DOCSDIR%%/node300.html +%%DOCSDIR%%/node301.html +%%DOCSDIR%%/node302.html +%%DOCSDIR%%/node303.html +%%DOCSDIR%%/node304.html +%%DOCSDIR%%/node305.html +%%DOCSDIR%%/node306.html +%%DOCSDIR%%/node307.html +%%DOCSDIR%%/node308.html +%%DOCSDIR%%/node309.html +%%DOCSDIR%%/node30.html +%%DOCSDIR%%/node310.html +%%DOCSDIR%%/node311.html +%%DOCSDIR%%/node312.html +%%DOCSDIR%%/node313.html +%%DOCSDIR%%/node314.html +%%DOCSDIR%%/node315.html +%%DOCSDIR%%/node316.html +%%DOCSDIR%%/node317.html +%%DOCSDIR%%/node318.html +%%DOCSDIR%%/node319.html +%%DOCSDIR%%/node31.html +%%DOCSDIR%%/node320.html +%%DOCSDIR%%/node321.html +%%DOCSDIR%%/node322.html +%%DOCSDIR%%/node323.html +%%DOCSDIR%%/node324.html +%%DOCSDIR%%/node325.html +%%DOCSDIR%%/node326.html +%%DOCSDIR%%/node327.html +%%DOCSDIR%%/node328.html +%%DOCSDIR%%/node329.html +%%DOCSDIR%%/node32.html +%%DOCSDIR%%/node330.html +%%DOCSDIR%%/node331.html +%%DOCSDIR%%/node332.html +%%DOCSDIR%%/node333.html +%%DOCSDIR%%/node334.html +%%DOCSDIR%%/node335.html +%%DOCSDIR%%/node336.html +%%DOCSDIR%%/node337.html +%%DOCSDIR%%/node338.html +%%DOCSDIR%%/node339.html +%%DOCSDIR%%/node33.html +%%DOCSDIR%%/node340.html +%%DOCSDIR%%/node341.html +%%DOCSDIR%%/node342.html +%%DOCSDIR%%/node343.html +%%DOCSDIR%%/node344.html +%%DOCSDIR%%/node345.html +%%DOCSDIR%%/node346.html +%%DOCSDIR%%/node347.html +%%DOCSDIR%%/node348.html +%%DOCSDIR%%/node349.html +%%DOCSDIR%%/node34.html +%%DOCSDIR%%/node350.html +%%DOCSDIR%%/node351.html +%%DOCSDIR%%/node352.html +%%DOCSDIR%%/node353.html +%%DOCSDIR%%/node354.html +%%DOCSDIR%%/node355.html +%%DOCSDIR%%/node356.html +%%DOCSDIR%%/node357.html +%%DOCSDIR%%/node358.html +%%DOCSDIR%%/node359.html +%%DOCSDIR%%/node35.html +%%DOCSDIR%%/node360.html +%%DOCSDIR%%/node361.html +%%DOCSDIR%%/node362.html +%%DOCSDIR%%/node363.html +%%DOCSDIR%%/node364.html +%%DOCSDIR%%/node365.html +%%DOCSDIR%%/node366.html +%%DOCSDIR%%/node367.html +%%DOCSDIR%%/node368.html +%%DOCSDIR%%/node369.html +%%DOCSDIR%%/node36.html +%%DOCSDIR%%/node370.html +%%DOCSDIR%%/node371.html +%%DOCSDIR%%/node372.html +%%DOCSDIR%%/node373.html +%%DOCSDIR%%/node374.html +%%DOCSDIR%%/node375.html +%%DOCSDIR%%/node376.html +%%DOCSDIR%%/node377.html +%%DOCSDIR%%/node378.html +%%DOCSDIR%%/node379.html +%%DOCSDIR%%/node37.html +%%DOCSDIR%%/node380.html +%%DOCSDIR%%/node381.html +%%DOCSDIR%%/node382.html +%%DOCSDIR%%/node383.html +%%DOCSDIR%%/node384.html +%%DOCSDIR%%/node385.html +%%DOCSDIR%%/node386.html +%%DOCSDIR%%/node387.html +%%DOCSDIR%%/node388.html +%%DOCSDIR%%/node389.html +%%DOCSDIR%%/node38.html +%%DOCSDIR%%/node390.html +%%DOCSDIR%%/node391.html +%%DOCSDIR%%/node39.html +%%DOCSDIR%%/node4.html +%%DOCSDIR%%/node40.html +%%DOCSDIR%%/node41.html +%%DOCSDIR%%/node42.html +%%DOCSDIR%%/node43.html +%%DOCSDIR%%/node44.html +%%DOCSDIR%%/node45.html +%%DOCSDIR%%/node46.html +%%DOCSDIR%%/node47.html +%%DOCSDIR%%/node48.html +%%DOCSDIR%%/node49.html +%%DOCSDIR%%/node5.html +%%DOCSDIR%%/node50.html +%%DOCSDIR%%/node51.html +%%DOCSDIR%%/node52.html +%%DOCSDIR%%/node53.html +%%DOCSDIR%%/node54.html +%%DOCSDIR%%/node55.html +%%DOCSDIR%%/node56.html +%%DOCSDIR%%/node57.html +%%DOCSDIR%%/node58.html +%%DOCSDIR%%/node59.html +%%DOCSDIR%%/node6.html +%%DOCSDIR%%/node60.html +%%DOCSDIR%%/node61.html +%%DOCSDIR%%/node62.html +%%DOCSDIR%%/node63.html +%%DOCSDIR%%/node64.html +%%DOCSDIR%%/node65.html +%%DOCSDIR%%/node66.html +%%DOCSDIR%%/node67.html +%%DOCSDIR%%/node68.html +%%DOCSDIR%%/node69.html +%%DOCSDIR%%/node7.html +%%DOCSDIR%%/node70.html +%%DOCSDIR%%/node71.html +%%DOCSDIR%%/node72.html +%%DOCSDIR%%/node73.html +%%DOCSDIR%%/node74.html +%%DOCSDIR%%/node75.html +%%DOCSDIR%%/node76.html +%%DOCSDIR%%/node77.html +%%DOCSDIR%%/node78.html +%%DOCSDIR%%/node79.html +%%DOCSDIR%%/node8.html +%%DOCSDIR%%/node80.html +%%DOCSDIR%%/node81.html +%%DOCSDIR%%/node82.html +%%DOCSDIR%%/node83.html +%%DOCSDIR%%/node84.html +%%DOCSDIR%%/node85.html +%%DOCSDIR%%/node86.html +%%DOCSDIR%%/node87.html +%%DOCSDIR%%/node88.html +%%DOCSDIR%%/node89.html +%%DOCSDIR%%/node9.html +%%DOCSDIR%%/node90.html +%%DOCSDIR%%/node91.html +%%DOCSDIR%%/node92.html +%%DOCSDIR%%/node93.html +%%DOCSDIR%%/node94.html +%%DOCSDIR%%/node95.html +%%DOCSDIR%%/node96.html +%%DOCSDIR%%/node97.html +%%DOCSDIR%%/node98.html +%%DOCSDIR%%/node99.html +%%DOCSDIR%%/images/asterisk-intro.jpg +%%DOCSDIR%%/images/kpad2.jpg +@dirrm %%DOCSDIR%%/images +@dirrm %%DOCSDIR%% +@dirrm share/asterisk/static-http +@dirrm share/asterisk/sounds/en/silence +@dirrm share/asterisk/sounds/en/phonetic +@dirrm share/asterisk/sounds/en/letters +@dirrm share/asterisk/sounds/en/followme +@dirrm share/asterisk/sounds/en/digits +@dirrm share/asterisk/sounds/en/dictate +@dirrm share/asterisk/sounds/en_AU +@dirrm share/asterisk/sounds/en +@dirrm share/asterisk/sounds/es +@dirrm share/asterisk/sounds/fr +@dirrm share/asterisk/sounds +@dirrm share/asterisk/phoneprov +@dirrm share/asterisk/moh +@dirrm share/asterisk/keys +@dirrm share/asterisk/images +@dirrm share/asterisk/firmware/iax +@dirrm share/asterisk/firmware +@dirrm share/asterisk/documentation/thirdparty +@dirrm share/asterisk/documentation +@dirrm share/asterisk/agi-bin +@dirrm share/asterisk +@dirrm lib/asterisk/modules +@dirrm lib/asterisk +@dirrm include/asterisk/doxygen +@dirrm include/asterisk +@dirrmtry etc/asterisk +@exec mkdir -p %D/share/asterisk/keys +@exec mkdir -p %D/share/asterisk/images +@exec mkdir -p %D/share/asterisk/firmware/iax +@exec mkdir -p %D/share/asterisk/documentation/thirdparty +@exec mkdir -p %D/share/asterisk/sounds/es +@exec mkdir -p %D/share/asterisk/sounds/fr +@exec mkdir -p %D/share/asterisk/sounds/en_AU +@cwd /var +spool/asterisk/voicemail/default/1234/en/busy.gsm +spool/asterisk/voicemail/default/1234/en/unavail.gsm +@exec mkdir -p %D/log/asterisk/cdr-csv +@exec mkdir -p %D/log/asterisk/cel-csv +@exec mkdir -p %D/log/asterisk/cdr-custom +@exec mkdir -p %D/log/asterisk/cel-custom +@exec mkdir -p %D/spool/asterisk/dictate +@exec mkdir -p %D/spool/asterisk/meetme +@exec mkdir -p %D/spool/asterisk/monitor +@exec mkdir -p %D/spool/asterisk/outgoing +@exec mkdir -p %D/spool/asterisk/system +@exec mkdir -p %D/spool/asterisk/voicemail/default/1234/INBOX +@exec mkdir -p %D/spool/asterisk/voicemail/default/1234/en +@exec mkdir -p %D/spool/asterisk/tmp +@exec mkdir -p %D/db/asterisk +@exec chown -R %%ASTERISK_USER%%:%%ASTERISK_GROUP%% %D/db/asterisk +@exec chown -R %%ASTERISK_USER%%:%%ASTERISK_GROUP%% %D/spool/asterisk +@exec chown -R %%ASTERISK_USER%%:%%ASTERISK_GROUP%% %D/log/asterisk +@dirrm spool/asterisk/dictate +@dirrm spool/asterisk/meetme +@dirrm spool/asterisk/monitor +@dirrm spool/asterisk/outgoing +@dirrm spool/asterisk/system +@dirrm spool/asterisk/voicemail/default/1234/INBOX +@dirrm spool/asterisk/voicemail/default/1234/en +@dirrm spool/asterisk/voicemail/default/1234 +@dirrm spool/asterisk/voicemail/default +@dirrm spool/asterisk/voicemail +@dirrm spool/asterisk/tmp +@dirrm spool/asterisk +@dirrm log/asterisk/cdr-csv +@dirrm log/asterisk/cel-csv +@dirrm log/asterisk/cdr-custom +@dirrm log/asterisk/cel-custom +@dirrm log/asterisk diff --git a/net/asterisk10/Makefile b/net/asterisk10/Makefile new file mode 100644 index 000000000000..17cb06bfa487 --- /dev/null +++ b/net/asterisk10/Makefile @@ -0,0 +1,244 @@ +# New ports collection makefile for: asterisk +# Date created: 17 October 2003 +# Whom: Maxim Sobolev +# +# $FreeBSD$ +# + +PORTNAME= asterisk +PORTVERSION= 1.8.0 +CATEGORIES= net +MASTER_SITES= http://downloads.asterisk.org/pub/telephony/asterisk/ \ + http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/ +PKGNAMESUFFIX= 18 + +MAINTAINER= flo@smeets.im +COMMENT= An Open Source PBX and telephony toolkit + +LIB_DEPENDS= speex.1:${PORTSDIR}/audio/speex \ + newt.52:${PORTSDIR}/devel/newt \ + execinfo:${PORTSDIR}/devel/libexecinfo +RUN_DEPENDS= mpg123:${PORTSDIR}/audio/mpg123 + +ONLY_FOR_ARCHS= i386 amd64 sparc64 + +GNU_CONFIGURE= yes +CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include -I${LOCALBASE}/include/openh323" \ + LDFLAGS="-L${LOCALBASE}/lib" +CONFIGURE_ARGS= --with-gsm=${LOCALBASE} --localstatedir=/var +CPPFLAGS= -I${LOCALBASE}/include -I${LOCALBASE}/include/openh323 +USE_GMAKE= yes +USE_GNOME= libxml2 +USE_BISON= build +USE_RC_SUBR= asterisk.sh +MAKE_ENV= PTHREAD_CFLAGS="${PTHREAD_CFLAGS}" \ + PTHREAD_LIBS="${PTHREAD_LIBS}" \ + MKDIR="${MKDIR}" \ + PWLIBDIR=${LOCALBASE}/share/pwlib \ + OPENH323DIR=${LOCALBASE}/share/openh323 \ + OSVERSION=${OSVERSION} \ + NOISY_BUILD=YES \ + DOCSDIR=${DOCSDIR} \ + ASTCFLAGS="${CFLAGS}" +MAN8= asterisk.8 astgenkey.8 autosupport.8 safe_asterisk.8 +CONFLICTS= asterisk*-1.2* asterisk*-1.4* asterisk*-1.6* + +OPTIONS= OGGVORBIS "Enable Ogg Vorbis support" on \ + ODBC "Enable ODBC support" on \ + POSTGRES "Enable PostgreSQL support" on \ + RADIUS "Enable RADIUS accounting support" on \ + SNMP "Enable SNMP support" on \ + H323 "Enable H.323 support" on \ + FREETDS "Enable FreeTDS support" on \ + JABBER "Enable Jabber and Gtalk support" on \ + SQLITE "Enable SQLITE support" on \ + GSM "Enable GSM codec" on \ + CURL "Enable CURL support" on \ + ILBC "Enable iLBC codec" off \ + SPANDSP "Enable Spandsp faxing support" off \ + EXCHANGE "Enable Exchange calendar support" off + +ASTERISK_USER?= asterisk +ASTERISK_GROUP?= asterisk + +USERS= ${ASTERISK_USER} +GROUPS= ${ASTERISK_GROUP} dahdi + +.include + +.if ${ARCH} == "i386" || ${ARCH} == "amd64" +OPTIONS+= DAHDI "Enable DAHDI support" on + +# Include this since we have altered OPTIONS. +.include +.endif + +SUB_LIST+= ASTERISK_USER=${ASTERISK_USER} +PLIST_SUB+= ASTERISK_USER=${ASTERISK_USER} +PLIST_SUB+= ASTERISK_GROUP=${ASTERISK_GROUP} + +.if !defined(WITH_H323) +PLIST_SUB+= WITH_H323="@comment " +CONFIGURE_ARGS+= --without-h323 +.else +PLIST_SUB+= WITH_H323="" +CONFIGURE_ARGS+= --with-h323=${LOCALBASE} +LIB_DEPENDS+= pt_r.1:${PORTSDIR}/devel/pwlib \ + h323_r.1:${PORTSDIR}/net/openh323 +.endif + +.if !defined(WITH_DAHDI) +PLIST_SUB+= WITH_DAHDI="@comment " +CONFIGURE_ARGS+= --without-dahdi +.else +PLIST_SUB+= WITH_DAHDI="" +CONFIGURE_ARGS+= --with-dahdi +BUILD_DEPENDS+= libpri>=1.4.10:${PORTSDIR}/misc/libpri \ + ${LOCALBASE}/include/dahdi/user.h:${PORTSDIR}/misc/dahdi +LIB_DEPENDS+= pri.1:${PORTSDIR}/misc/libpri +RUN_DEPENDS+= ${LOCALBASE}/lib/dahdi/dahdi.ko:${PORTSDIR}/misc/dahdi +.endif + +# +# WITH_FREETDS, WITH_PGSQL and WITH_SQLITE can also be added to MAKE_ENV +# similarly +.if !defined(WITH_ODBC) +PLIST_SUB+= WITH_ODBC="@comment " +CONFIGURE_ARGS+= --without-unixodbc +.else +PLIST_SUB+= WITH_ODBC="" +CONFIGURE_ARGS+= --with-unixodbc --with-ltdl +LIB_DEPENDS+= odbc.1:${PORTSDIR}/databases/unixODBC +USE_AUTOTOOLS= libltdl +.endif + +.if !defined(WITH_FREETDS) +PLIST_SUB+= WITH_FREETDS="@comment " +CONFIGURE_ARGS+= --without-tds +.else +PLIST_SUB+= WITH_FREETDS="" +CONFIGURE_ARGS+= --with-tds=${LOCALBASE} +LIB_DEPENDS+= tds.5:${PORTSDIR}/databases/freetds +.endif + +.if !defined(WITH_POSTGRES) +PLIST_SUB+= WITH_POSTGRES="@comment " +CONFIGURE_ARGS+= --without-postgres +.else +PLIST_SUB+= WITH_POSTGRES="" +USE_PGSQL= yes +CONFIGURE_ARGS+= --with-postgres +.endif + +.if !defined(WITH_OGGVORBIS) +PLIST_SUB+= WITH_OGGVORBIS="@comment " +CONFIGURE_ARGS+= --without-ogg +.else +PLIST_SUB+= WITH_OGGVORBIS="" +CONFIGURE_ARGS+= --with-ogg +LIB_DEPENDS+= vorbis.4:${PORTSDIR}/audio/libvorbis +.endif + +.if !defined(WITH_RADIUS) +PLIST_SUB+= WITH_RADIUS="@comment " +CONFIGURE_ARGS+= --without-radius +.else +PLIST_SUB+= WITH_RADIUS="" +CONFIGURE_ARGS+= --with-radius +LIB_DEPENDS+= radiusclient-ng.2:${PORTSDIR}/net/radiusclient +.endif + +.if !defined(WITH_SNMP) +PLIST_SUB+= WITH_SNMP="@comment " +CONFIGURE_ARGS+= --without-netsnmp +.else +PLIST_SUB+= WITH_SNMP="" +CONFIGURE_ARGS+= --with-netsnmp +LIB_DEPENDS+= netsnmp:${PORTSDIR}/net-mgmt/net-snmp +.endif + +.if !defined(WITH_JABBER) +PLIST_SUB+= WITH_JABBER="@comment " +CONFIGURE_ARGS+= --without-iksemel +.else +PLIST_SUB+= WITH_JABBER="" +CONFIGURE_ARGS+= --with-iksemel +LIB_DEPENDS+= iksemel.4:${PORTSDIR}/textproc/iksemel +.endif + +.if !defined(WITH_SQLITE) +PLIST_SUB+= WITH_SQLITE="@comment " +CONFIGURE_ARGS+= --without-sqlite \ + --with-sqlite3=no +.else +PLIST_SUB+= WITH_SQLITE="" +CONFIGURE_ARGS+= --with-sqlite +LIB_DEPENDS+= sqlite:${PORTSDIR}/databases/sqlite2 \ + sqlite3:${PORTSDIR}/databases/sqlite3 +.endif + +.if !defined(WITH_ILBC) +PLIST_SUB+= WITH_ILBC="@comment " +.else +PLIST_SUB+= WITH_ILBC="" +EXTRA_PATCHES+= ${PATCHDIR}/ilbc_enable.diff +.endif + +.if !defined(WITH_GSM) +PLIST_SUB+= WITH_GSM="@comment " +CONFIGURE_ARGS+= --without-gsm +.else +PLIST_SUB+= WITH_GSM="" +CONFIGURE_ARGS+= --with-gsm +LIB_DEPENDS+= gsm.1:${PORTSDIR}/audio/gsm +.endif + +.if !defined(WITH_CURL) +PLIST_SUB+= WITH_CURL="@comment " +CONFIGURE_ARGS+= --with-libcurl=no +.else +PLIST_SUB+= WITH_CURL="" +CONFIGURE_ARGS+= --with-libcurl +LIB_DEPENDS+= curl.6:${PORTSDIR}/ftp/curl +.endif + +.if !defined(WITH_SPANDSP) +PLIST_SUB+= WITH_SPANDSP="@comment " +CONFIGURE_ARGS+= --without-spandsp +.else +PLIST_SUB+= WITH_SPANDSP="" +CONFIGURE_ARGS+= --with-spandsp +LIB_DEPENDS+= spandsp.2:${PORTSDIR}/comms/spandsp-devel +.endif + +.if !defined(WITH_EXCHANGE) +CONFIGURE_ARGS+= --without-neon --without-neon29 +PLIST_SUB+= WITH_EXCHANGE="@comment " +.else +LIB_DEPENDS+= neon.27:${PORTSDIR}/www/neon29 +PLIST_SUB+= WITH_EXCHANGE="" +.endif + +.if defined(WITH_MISC_PATCHES) +EXTRA_PATCHES+= ${PATCHDIR}/dtmf_debug.diff +EXTRA_PATCHES+= ${PATCHDIR}/feature_disconnect.diff +EXTRA_PATCHES+= ${PATCHDIR}/sip_force_callid.diff +EXTRA_PATCHES+= ${PATCHDIR}/sip_set_auth.diff +.if defined(WITH_CODEC_PATCH) +EXTRA_PATCHES+= ${PATCHDIR}/rtp_force_dtmf-codecnego.diff +.else +EXTRA_PATCHES+= ${PATCHDIR}/rtp_force_dtmf-nocodecnego.diff +.endif +.endif + +post-extract: + ${MKDIR} ${WRKSRC}/codecs/ilbc + ${FIND} ${WRKSRC} -name '*.d' -delete + +post-patch: + ${REINPLACE_CMD} -e 's|/var/lib|${PREFIX}/share|g' ${WRKSRC}/configs/musiconhold.conf.sample + +post-install: + @${CHOWN} -R ${ASTERISK_USER}:${ASTERISK_GROUP} /var/db/asterisk /var/log/asterisk /var/spool/asterisk + +.include diff --git a/net/asterisk10/distinfo b/net/asterisk10/distinfo new file mode 100644 index 000000000000..2a2c2e11b045 --- /dev/null +++ b/net/asterisk10/distinfo @@ -0,0 +1,2 @@ +SHA256 (asterisk-1.8.0.tar.gz) = 8f1edbc8fab23596a6f6ee2881d67c22b4a6cb20bfad84125fcdcb3ff2e1de1b +SIZE (asterisk-1.8.0.tar.gz) = 26035124 diff --git a/net/asterisk10/files/asterisk.sh.in b/net/asterisk10/files/asterisk.sh.in new file mode 100644 index 000000000000..4d10717d64ae --- /dev/null +++ b/net/asterisk10/files/asterisk.sh.in @@ -0,0 +1,34 @@ +#!/bin/sh + +# PROVIDE: asterisk +# REQUIRE: LOGIN +# KEYWORD: shutdown +# +# Add the following lines to /etc/rc.conf to enable asterisk: +# +# asterisk_enable="YES" +# + +. /etc/rc.subr + +stop_cmd=asterisk_shutdown +asterisk_shutdown () { + echo 'Stopping asterisk' + %%PREFIX%%/sbin/asterisk -nqrx 'core stop now' + sleep 1 + return 0 +} + +name=asterisk +rcvar=`set_rcvar` + +command=%%PREFIX%%/sbin/asterisk +command_args="-n -U %%ASTERISK_USER%%" + +load_rc_config $name + +pidfile=${asterisk_pidfile:-"/var/run/asterisk.pid"} + +asterisk_enable=${asterisk_enable:-"NO"} + +run_rc_command "$1" diff --git a/net/asterisk10/files/codecnego-patch-Makefile b/net/asterisk10/files/codecnego-patch-Makefile new file mode 100644 index 000000000000..e39dd6f62082 --- /dev/null +++ b/net/asterisk10/files/codecnego-patch-Makefile @@ -0,0 +1,219 @@ +--- Makefile.orig 2009-11-20 17:48:05.000000000 +0200 ++++ Makefile 2009-11-20 17:50:33.000000000 +0200 +@@ -101,7 +101,7 @@ + OVERWRITE=y + + # Include debug and macro symbols in the executables (-g) and profiling info (-pg) +-DEBUG=-g3 ++#DEBUG=-g3 + + # Staging directory + # Files are copied here temporarily during the install process +@@ -135,7 +135,7 @@ + ASTMANDIR=$(mandir) + ifneq ($(findstring BSD,$(OSARCH)),) + ASTVARLIBDIR=$(prefix)/share/asterisk +- ASTVARRUNDIR=$(localstatedir)/run/asterisk ++ ASTVARRUNDIR=$(localstatedir)/run + else + ASTVARLIBDIR=$(localstatedir)/lib/asterisk + endif +@@ -225,9 +225,11 @@ + _ASTLDFLAGS+=-L/usr/local/lib + endif + ++ifneq ($(OSARCH),FreeBSD) + ifneq ($(PROC),ultrasparc) + _ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi) + endif ++endif + + ifeq ($(PROC),ppc) + _ASTCFLAGS+=-fsigned-char +@@ -235,7 +237,7 @@ + + ifeq ($(OSARCH),FreeBSD) + # -V is understood by BSD Make, not by GNU make. +- BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk) ++ BSDVERSION=$(OSVERSION) + _ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi) + AST_LIBS+=$(shell if test $(BSDVERSION) -lt 502102 ; then echo "-lc_r"; else echo "-pthread"; fi) + endif +@@ -416,15 +418,15 @@ + # Should static HTTP be installed during make samples or even with its own target ala + # webvoicemail? There are portions here that *could* be customized but might also be + # improved a lot. I'll put it here for now. +- mkdir -p $(DESTDIR)$(ASTDATADIR)/static-http ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/static-http + for x in static-http/*; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \ + done +- mkdir -p $(DESTDIR)$(ASTDATADIR)/images ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/images + for x in images/*.jpg; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/images ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTDATADIR)/images ; \ + done +- mkdir -p $(DESTDIR)$(AGI_DIR) ++ $(MKDIR) $(DESTDIR)$(AGI_DIR) + $(MAKE) -C sounds install + + update: +@@ -445,47 +447,47 @@ + OLDHEADERS=$(filter-out $(NEWHEADERS),$(notdir $(wildcard $(DESTDIR)$(ASTHEADERDIR)/*.h))) + + installdirs: +- mkdir -p $(DESTDIR)$(MODULES_DIR) +- mkdir -p $(DESTDIR)$(ASTSBINDIR) +- mkdir -p $(DESTDIR)$(ASTETCDIR) +- mkdir -p $(DESTDIR)$(ASTBINDIR) +- mkdir -p $(DESTDIR)$(ASTVARRUNDIR) +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/dictate +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/system +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/tmp +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/meetme +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/monitor ++ $(MKDIR) $(DESTDIR)$(MODULES_DIR) ++ $(MKDIR) $(DESTDIR)$(ASTSBINDIR) ++ $(MKDIR) $(DESTDIR)$(ASTETCDIR) ++ $(MKDIR) $(DESTDIR)$(ASTBINDIR) ++ $(MKDIR) $(DESTDIR)$(ASTVARRUNDIR) ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/voicemail ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/dictate ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/system ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/tmp ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/meetme ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/monitor + + bininstall: _all installdirs $(SUBDIRS_INSTALL) +- $(INSTALL) -m 755 main/asterisk $(DESTDIR)$(ASTSBINDIR)/ ++ $(BSD_INSTALL_PROGRAM) main/asterisk $(DESTDIR)$(ASTSBINDIR)/ + $(LN) -sf asterisk $(DESTDIR)$(ASTSBINDIR)/rasterisk +- $(INSTALL) -m 755 contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/ +- $(INSTALL) -m 755 contrib/scripts/autosupport $(DESTDIR)$(ASTSBINDIR)/ ++ $(BSD_INSTALL_SCRIPT) contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/ ++ $(BSD_INSTALL_SCRIPT) contrib/scripts/autosupport $(DESTDIR)$(ASTSBINDIR)/ + if [ ! -f $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ]; then \ +- cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ;\ +- chmod 755 $(DESTDIR)$(ASTSBINDIR)/safe_asterisk;\ ++ cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > contrib/scripts/safe_asterisk.out;\ ++ ${BSD_INSTALL_SCRIPT} contrib/scripts/safe_asterisk.out $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ;\ + fi +- $(INSTALL) -d $(DESTDIR)$(ASTHEADERDIR) +- $(INSTALL) -m 644 include/asterisk.h $(DESTDIR)$(includedir) +- $(INSTALL) -m 644 include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR) ++ $(MKDIR) $(DESTDIR)$(ASTHEADERDIR) ++ $(BSD_INSTALL_DATA) include/asterisk.h $(DESTDIR)$(includedir) ++ $(BSD_INSTALL_DATA) include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR) + if [ -n "$(OLDHEADERS)" ]; then \ + rm -f $(addprefix $(DESTDIR)$(ASTHEADERDIR)/,$(OLDHEADERS)) ;\ + fi +- mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-csv +- mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-custom +- mkdir -p $(DESTDIR)$(ASTDATADIR)/keys +- mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware +- mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware/iax +- mkdir -p $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 keys/iaxtel.pub $(DESTDIR)$(ASTDATADIR)/keys +- $(INSTALL) -m 644 keys/freeworlddialup.pub $(DESTDIR)$(ASTDATADIR)/keys +- $(INSTALL) -m 644 doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(MKDIR) $(DESTDIR)$(ASTLOGDIR)/cdr-csv ++ $(MKDIR) $(DESTDIR)$(ASTLOGDIR)/cdr-custom ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/keys ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/firmware ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/firmware/iax ++ $(MKDIR) $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_DATA) keys/iaxtel.pub $(DESTDIR)$(ASTDATADIR)/keys ++ $(BSD_INSTALL_DATA) keys/freeworlddialup.pub $(DESTDIR)$(ASTDATADIR)/keys ++ $(BSD_INSTALL_MAN) doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_MAN) contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_MAN) contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_MAN) contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 + if [ -f contrib/firmware/iax/iaxy.bin ] ; then \ +- $(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \ ++ $(BSD_INSTALL_DATA) contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \ + fi + + $(SUBDIRS_INSTALL): +@@ -521,7 +523,7 @@ + @exit 1 + endif + +-install: badshell datafiles bininstall ++install: badshell datafiles bininstall samples + @if [ -x /usr/sbin/asterisk-post-install ]; then \ + /usr/sbin/asterisk-post-install $(DESTDIR) . ; \ + fi +@@ -559,31 +561,23 @@ + upgrade: bininstall + + adsi: +- mkdir -p $(DESTDIR)$(ASTETCDIR) ++ $(MKDIR) $(DESTDIR)$(ASTETCDIR) + for x in configs/*.adsi; do \ + if [ ! -f $(DESTDIR)$(ASTETCDIR)/$$x ]; then \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \ + fi ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`-dist ; \ + done + + samples: adsi +- mkdir -p $(DESTDIR)$(ASTETCDIR) ++ $(MKDIR) $(DESTDIR)$(ASTETCDIR) + for x in configs/*.sample; do \ +- if [ -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ]; then \ +- if [ "$(OVERWRITE)" = "y" ]; then \ +- if cmp -s $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` $$x ; then \ +- echo "Config file $$x is unchanged"; \ +- continue; \ +- fi ; \ +- mv -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`.old ; \ +- else \ +- echo "Skipping config file $$x"; \ +- continue; \ +- fi ;\ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`-dist ;\ ++ if [ ! -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ]; then \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`;\ + fi ; \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ;\ + done +- if [ "$(OVERWRITE)" = "y" ] || [ ! -f $(DESTDIR)$(ASTCONFPATH) ]; then \ ++ if true; then \ + ( \ + echo "[directories]" ; \ + echo "astetcdir => $(ASTETCDIR)" ; \ +@@ -670,20 +664,23 @@ + echo "; Default: strict"; \ + echo ";"; \ + echo ";translation_algorithm = strict"; \ +- ) > $(DESTDIR)$(ASTCONFPATH) ; \ ++ ) > $(DESTDIR)$(ASTCONFPATH)-dist ; \ ++ if [ ! -f $(DESTDIR)$(ASTCONFPATH) ]; then \ ++ cp $(DESTDIR)$(ASTCONFPATH)-dist $(DESTDIR)$(ASTCONFPATH); \ ++ fi; \ + else \ + echo "Skipping asterisk.conf creation"; \ + fi +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX + build_tools/make_sample_voicemail $(DESTDIR)/$(ASTDATADIR) $(DESTDIR)/$(ASTSPOOLDIR) + + webvmail: + @[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 ) + @[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 ) + $(INSTALL) -m 4755 -o root -g root contrib/scripts/vmail.cgi $(DESTDIR)$(HTTP_CGIDIR)/vmail.cgi +- mkdir -p $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk ++ $(MKDIR) $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk + for x in images/*.gif; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \ + done + @echo " +--------- Asterisk Web Voicemail ----------+" + @echo " + +" diff --git a/net/asterisk10/files/dtmf_debug.diff b/net/asterisk10/files/dtmf_debug.diff new file mode 100644 index 000000000000..2a5b6bc9ea33 --- /dev/null +++ b/net/asterisk10/files/dtmf_debug.diff @@ -0,0 +1,226 @@ +--- channels/chan_sip.c.orig 2009-05-12 21:18:44.000000000 +0300 ++++ channels/chan_sip.c 2009-05-26 12:50:22.000000000 +0300 +@@ -3891,6 +3891,7 @@ + ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner); + else { + p->owner = newchan; ++ ast_rtp_set_chan_name(p->rtp, newchan->name); + /* Re-invite RTP back to Asterisk. Needed if channel is masqueraded out of a native + RTP bridge (i.e., RTP not going through Asterisk): RTP bridge code might not be + able to do this if the masquerade happens before the bridge breaks (e.g., AMI +@@ -4168,6 +4169,7 @@ + if (i->rtp) { + tmp->fds[0] = ast_rtp_fd(i->rtp); + tmp->fds[1] = ast_rtcp_fd(i->rtp); ++ ast_rtp_set_chan_id(i->rtp, i->callid); + } + if (needvideo && i->vrtp) { + tmp->fds[2] = ast_rtp_fd(i->vrtp); +@@ -4195,6 +4197,8 @@ + if (!ast_strlen_zero(i->language)) + ast_string_field_set(tmp, language, i->language); + i->owner = tmp; ++ ast_rtp_set_chan_name(i->rtp, tmp->name); ++ + ast_module_ref(ast_module_info->self); + ast_copy_string(tmp->context, i->context, sizeof(tmp->context)); + /*Since it is valid to have extensions in the dialplan that have unescaped characters in them +@@ -4621,8 +4625,10 @@ + build_via(p); + if (!callid) + build_callid_pvt(p); +- else ++ else { + ast_string_field_set(p, callid, callid); ++ ast_rtp_set_chan_id(p->rtp, p->callid); ++ } + /* Assign default music on hold class */ + ast_string_field_set(p, mohinterpret, default_mohinterpret); + ast_string_field_set(p, mohsuggest, default_mohsuggest); +--- include/asterisk/rtp.h.orig 2008-03-04 20:05:28.000000000 +0200 ++++ include/asterisk/rtp.h 2009-05-26 12:50:22.000000000 +0300 +@@ -243,6 +243,9 @@ + + int ast_rtp_codec_getformat(int pt); + ++void ast_rtp_set_chan_name(struct ast_rtp *, const char *); ++void ast_rtp_set_chan_id(struct ast_rtp *, const char *); ++ + /*! \brief Set rtp timeout */ + void ast_rtp_set_rtptimeout(struct ast_rtp *rtp, int timeout); + /*! \brief Set rtp hold timeout */ +--- main/rtp.c.orig 2009-11-20 17:51:49.000000000 +0200 ++++ main/rtp.c 2009-11-20 17:53:11.000000000 +0200 +@@ -81,6 +81,7 @@ + static int rtpstart; /*!< First port for RTP sessions (set in rtp.conf) */ + static int rtpend; /*!< Last port for RTP sessions (set in rtp.conf) */ + static int rtpdebug; /*!< Are we debugging? */ ++static int rtpdebugdtmf; /*!< Are we debugging DTMFs? */ + static int rtcpdebug; /*!< Are we debugging RTCP? */ + static int rtcpstats; /*!< Are we debugging RTCP? */ + static int rtcpinterval = RTCP_DEFAULT_INTERVALMS; /*!< Time between rtcp reports in millisecs */ +@@ -170,6 +171,8 @@ + struct ast_rtp *bridged; /*!< Who we are Packet bridged to */ + int set_marker_bit:1; /*!< Whether to set the marker bit or not */ + unsigned int constantssrc:1; ++ char chan_name[100]; ++ char chan_id[100]; + }; + + /* Forward declarations */ +@@ -676,8 +679,8 @@ + struct ast_frame *f = NULL; + event = ntohl(*((unsigned int *)(data))); + event &= 0x001F; +- if (option_debug > 2 || rtpdebug) +- ast_log(LOG_DEBUG, "Cisco DTMF Digit: %08x (len = %d)\n", event, len); ++ if (option_debug > 2 || rtpdebug || rtpdebugdtmf) ++ ast_log(LOG_DEBUG, "Channel: %s %s Cisco DTMF packet: %08x (len = %d)\n", rtp->chan_name, rtp->chan_id, event, len); + if (event < 10) { + resp = '0' + event; + } else if (event < 11) { +@@ -691,12 +694,25 @@ + } + if (rtp->resp && (rtp->resp != resp)) { + f = send_dtmf(rtp, AST_FRAME_DTMF_END); ++ ast_log(LOG_DEBUG, "Channel: %s %s Cisco DTMF event: %c\n", rtp->chan_name, rtp->chan_id, rtp->resp); + } + rtp->resp = resp; + rtp->dtmf_timeout = 0; + return f; + } + ++void ast_rtp_set_chan_id(struct ast_rtp *rtp, const char *chan_id) { ++ if (rtp == NULL || chan_id == NULL) ++ return; ++ snprintf(rtp->chan_id, sizeof(rtp->chan_id), "%s", chan_id); ++} ++ ++void ast_rtp_set_chan_name(struct ast_rtp *rtp, const char *chan_name) { ++ if (rtp == NULL || chan_name == NULL) ++ return; ++ snprintf(rtp->chan_name, sizeof(rtp->chan_name), "%s", chan_name); ++} ++ + /*! + * \brief Process RTP DTMF and events according to RFC 2833. + * +@@ -1101,6 +1117,10 @@ + struct rtpPayloadType rtpPT; + int reconstruct = ntohl(rtpheader[0]); + ++ /* If we are listening for DTMF - then feed all packets into the core to keep the RTP stream consistent when relaying DTMFs */ ++ if (ast_test_flag(rtp, FLAG_P2P_NEED_DTMF)) ++ return -1; ++ + /* Get fields from packet */ + payload = (reconstruct & 0x7f0000) >> 16; + mark = (((reconstruct & 0x800000) >> 23) != 0); +@@ -1108,10 +1128,6 @@ + /* Check what the payload value should be */ + rtpPT = ast_rtp_lookup_pt(rtp, payload); + +- /* If the payload is DTMF, and we are listening for DTMF - then feed it into the core */ +- if (ast_test_flag(rtp, FLAG_P2P_NEED_DTMF) && !rtpPT.isAstFormat && rtpPT.code == AST_RTP_DTMF) +- return -1; +- + /* Otherwise adjust bridged payload to match */ + bridged_payload = ast_rtp_lookup_code(bridged, rtpPT.isAstFormat, rtpPT.code); + +@@ -1306,11 +1322,12 @@ + /* This is special in-band data that's not one of our codecs */ + if (rtpPT.code == AST_RTP_DTMF) { + /* It's special -- rfc2833 process it */ +- if (rtp_debug_test_addr(&sin)) { ++ if (rtp_debug_test_addr(&sin) || rtpdebugdtmf) { + unsigned char *data; + unsigned int event; + unsigned int event_end; + unsigned int duration; ++ + data = rtp->rawdata + AST_FRIENDLY_OFFSET + hdrlen; + event = ntohl(*((unsigned int *)(data))); + event >>= 24; +@@ -1319,9 +1336,12 @@ + event_end >>= 24; + duration = ntohl(*((unsigned int *)(data))); + duration &= 0xFFFF; +- ast_verbose("Got RTP RFC2833 from %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u, mark %d, event %08x, end %d, duration %-5.5d) \n", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), payloadtype, seqno, timestamp, res - hdrlen, (mark?1:0), event, ((event_end & 0x80)?1:0), duration); ++ ++ ast_verbose("Channel: %s %s Got RTP RFC2833 from %s:%u to %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u, mark %d, event %08x, end %d, duration %-5.5d)\n", rtp->chan_name, rtp->chan_id, ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), ast_inet_ntoa(rtp->us.sin_addr), ntohs(rtp->us.sin_port), payloadtype, seqno, timestamp, res - hdrlen, (mark?1:0), event, ((event_end & 0x80)?1:0), duration); + } + f = process_rfc2833(rtp, rtp->rawdata + AST_FRIENDLY_OFFSET + hdrlen, res - hdrlen, seqno, timestamp); ++ if (rtpdebugdtmf && f) ++ ast_verbose("Channel: %s %s Got RFC2833 DTMF event %c of type %s\n", rtp->chan_name, rtp->chan_id, f->subclass, (f->frametype == AST_FRAME_DTMF_BEGIN ? "DTMF BEGIN" : (f->frametype == AST_FRAME_DTMF_END ? "DTMF_END" : "UNKNOWN"))); + } else if (rtpPT.code == AST_RTP_CISCO_DTMF) { + /* It's really special -- process it the Cisco way */ + if (rtp->lastevent <= seqno || (rtp->lastevent >= 65530 && seqno <= 6)) { +@@ -2287,8 +2307,9 @@ + ast_log(LOG_ERROR, "RTP Transmission error to %s:%u: %s\n", + ast_inet_ntoa(rtp->them.sin_addr), + ntohs(rtp->them.sin_port), strerror(errno)); +- if (rtp_debug_test_addr(&rtp->them)) +- ast_verbose("Sent RTP DTMF packet to %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u)\n", ++ if (rtp_debug_test_addr(&rtp->them) || rtpdebugdtmf) ++ ast_verbose("Channel: %s %s Sent RTP DTMF packet to %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u)\n", ++ rtp->chan_name, rtp->chan_id, + ast_inet_ntoa(rtp->them.sin_addr), + ntohs(rtp->them.sin_port), payload, rtp->seqno, rtp->lastdigitts, res - hdrlen); + /* Increment sequence number */ +@@ -2331,8 +2352,9 @@ + ast_log(LOG_ERROR, "RTP Transmission error to %s:%d: %s\n", + ast_inet_ntoa(rtp->them.sin_addr), + ntohs(rtp->them.sin_port), strerror(errno)); +- if (rtp_debug_test_addr(&rtp->them)) +- ast_verbose("Sent RTP DTMF packet to %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u)\n", ++ if (rtp_debug_test_addr(&rtp->them) || rtpdebugdtmf) ++ ast_verbose("Channel: %s %s Sent RTP DTMF packet to %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u)\n", ++ rtp->chan_name, rtp->chan_id, + ast_inet_ntoa(rtp->them.sin_addr), + ntohs(rtp->them.sin_port), rtp->send_payload, rtp->seqno, rtp->lastdigitts, res - hdrlen); + +@@ -3621,6 +3643,16 @@ + return RESULT_SUCCESS; + } + ++static int rtp_do_debug_dtmf(int fd, int argc, char *argv[]) ++{ ++ if (argc != 3) ++ return RESULT_SHOWUSAGE; ++ ++ rtpdebugdtmf = 1; ++ ast_cli(fd, "RTP DTMF debugging enabled\n"); ++ return RESULT_SUCCESS; ++} ++ + static int rtp_do_debug(int fd, int argc, char *argv[]) + { + if (argc != 2) { +@@ -3681,6 +3713,7 @@ + if (argc != 3) + return RESULT_SHOWUSAGE; + rtpdebug = 0; ++ rtpdebugdtmf = 0; + ast_cli(fd,"RTP Debugging Disabled\n"); + return RESULT_SUCCESS; + } +@@ -3741,7 +3774,7 @@ + } + + static char debug_usage[] = +- "Usage: rtp debug [ip host[:port]]\n" ++ "Usage: rtp debug [ip host[:port] | dtmf]\n" + " Enable dumping of all RTP packets to and from host.\n"; + + static char no_debug_usage[] = +@@ -3816,6 +3849,10 @@ + rtp_do_debug, "Enable RTP debugging", + debug_usage }, + ++ { { "rtp", "debug", "dtmf", NULL }, ++ rtp_do_debug_dtmf, "Enable RTP debugging on DTMFs", ++ debug_usage }, ++ + { { "rtp", "debug", "off", NULL }, + rtp_no_debug, "Disable RTP debugging", + no_debug_usage, NULL, &cli_rtp_no_debug_deprecated }, diff --git a/net/asterisk10/files/ilbc_enable.diff b/net/asterisk10/files/ilbc_enable.diff new file mode 100644 index 000000000000..a2a3c4f73d70 --- /dev/null +++ b/net/asterisk10/files/ilbc_enable.diff @@ -0,0 +1,7599 @@ + +$FreeBSD$ + +--- menuselect-tree ++++ menuselect-tree +@@ -269,7 +269,6 @@ + gsm + + +- no + + + +diff -druN codecs/ilbc.orig/FrameClassify.c codecs/ilbc/FrameClassify.c +--- codecs/ilbc.orig/FrameClassify.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/FrameClassify.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,110 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ FrameClassify.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include "iLBC_define.h" ++#include "FrameClassify.h" ++ ++/*---------------------------------------------------------------* ++ * Classification of subframes to localize start state ++ *--------------------------------------------------------------*/ ++ ++int FrameClassify( /* index to the max-energy sub-frame */ ++ iLBC_Enc_Inst_t *iLBCenc_inst, ++ /* (i/o) the encoder state structure */ ++ float *residual /* (i) lpc residual signal */ ++) { ++ float max_ssqEn, fssqEn[NSUB_MAX], bssqEn[NSUB_MAX], *pp; ++ int n, l, max_ssqEn_n; ++ const float ssqEn_win[NSUB_MAX-1]={(float)0.8,(float)0.9, ++ (float)1.0,(float)0.9,(float)0.8}; ++ const float sampEn_win[5]={(float)1.0/(float)6.0, ++ (float)2.0/(float)6.0, (float)3.0/(float)6.0, ++ (float)4.0/(float)6.0, (float)5.0/(float)6.0}; ++ ++ /* init the front and back energies to zero */ ++ ++ memset(fssqEn, 0, NSUB_MAX*sizeof(float)); ++ memset(bssqEn, 0, NSUB_MAX*sizeof(float)); ++ ++ /* Calculate front of first seqence */ ++ ++ n=0; ++ pp=residual; ++ ++ ++ for (l=0; l<5; l++) { ++ fssqEn[n] += sampEn_win[l] * (*pp) * (*pp); ++ pp++; ++ } ++ for (l=5; lnsub-1; n++) { ++ pp=residual+n*SUBL; ++ for (l=0; l<5; l++) { ++ fssqEn[n] += sampEn_win[l] * (*pp) * (*pp); ++ bssqEn[n] += (*pp) * (*pp); ++ pp++; ++ } ++ for (l=5; lnsub-1; ++ pp=residual+n*SUBL; ++ for (l=0; lmode==20) l=1; ++ else l=0; ++ ++ max_ssqEn=(fssqEn[0]+bssqEn[1])*ssqEn_win[l]; ++ max_ssqEn_n=1; ++ for (n=2; nnsub; n++) { ++ ++ l++; ++ ++ ++ if ((fssqEn[n-1]+bssqEn[n])*ssqEn_win[l] > max_ssqEn) { ++ max_ssqEn=(fssqEn[n-1]+bssqEn[n]) * ++ ssqEn_win[l]; ++ max_ssqEn_n=n; ++ } ++ } ++ ++ return max_ssqEn_n; ++} ++ ++ +diff -druN codecs/ilbc.orig/FrameClassify.h codecs/ilbc/FrameClassify.h +--- codecs/ilbc.orig/FrameClassify.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/FrameClassify.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,26 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ FrameClassify.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++ ++ ++#ifndef __iLBC_FRAMECLASSIFY_H ++#define __iLBC_FRAMECLASSIFY_H ++ ++int FrameClassify( /* index to the max-energy sub-frame */ ++ iLBC_Enc_Inst_t *iLBCenc_inst, ++ /* (i/o) the encoder state structure */ ++ float *residual /* (i) lpc residual signal */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/LPCdecode.c codecs/ilbc/LPCdecode.c +--- codecs/ilbc.orig/LPCdecode.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/LPCdecode.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,152 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ LPC_decode.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include ++#include ++ ++#include "helpfun.h" ++#include "lsf.h" ++#include "iLBC_define.h" ++#include "LPCdecode.h" ++#include "constants.h" ++ ++/*---------------------------------------------------------------* ++ * interpolation of lsf coefficients for the decoder ++ *--------------------------------------------------------------*/ ++ ++void LSFinterpolate2a_dec( ++ float *a, /* (o) lpc coefficients for a sub-frame */ ++ float *lsf1, /* (i) first lsf coefficient vector */ ++ ++ ++ float *lsf2, /* (i) second lsf coefficient vector */ ++ float coef, /* (i) interpolation weight */ ++ int length /* (i) length of lsf vectors */ ++){ ++ float lsftmp[LPC_FILTERORDER]; ++ ++ interpolate(lsftmp, lsf1, lsf2, coef, length); ++ lsf2a(a, lsftmp); ++} ++ ++/*---------------------------------------------------------------* ++ * obtain dequantized lsf coefficients from quantization index ++ *--------------------------------------------------------------*/ ++ ++void SimplelsfDEQ( ++ float *lsfdeq, /* (o) dequantized lsf coefficients */ ++ int *index, /* (i) quantization index */ ++ int lpc_n /* (i) number of LPCs */ ++){ ++ int i, j, pos, cb_pos; ++ ++ /* decode first LSF */ ++ ++ pos = 0; ++ cb_pos = 0; ++ for (i = 0; i < LSF_NSPLIT; i++) { ++ for (j = 0; j < dim_lsfCbTbl[i]; j++) { ++ lsfdeq[pos + j] = lsfCbTbl[cb_pos + ++ (long)(index[i])*dim_lsfCbTbl[i] + j]; ++ } ++ pos += dim_lsfCbTbl[i]; ++ cb_pos += size_lsfCbTbl[i]*dim_lsfCbTbl[i]; ++ } ++ ++ if (lpc_n>1) { ++ ++ /* decode last LSF */ ++ ++ pos = 0; ++ cb_pos = 0; ++ for (i = 0; i < LSF_NSPLIT; i++) { ++ for (j = 0; j < dim_lsfCbTbl[i]; j++) { ++ lsfdeq[LPC_FILTERORDER + pos + j] = ++ lsfCbTbl[cb_pos + ++ (long)(index[LSF_NSPLIT + i])* ++ dim_lsfCbTbl[i] + j]; ++ } ++ pos += dim_lsfCbTbl[i]; ++ cb_pos += size_lsfCbTbl[i]*dim_lsfCbTbl[i]; ++ } ++ } ++} ++ ++/*----------------------------------------------------------------* ++ ++ ++ * obtain synthesis and weighting filters form lsf coefficients ++ *---------------------------------------------------------------*/ ++ ++void DecoderInterpolateLSF( ++ float *syntdenum, /* (o) synthesis filter coefficients */ ++ float *weightdenum, /* (o) weighting denumerator ++ coefficients */ ++ float *lsfdeq, /* (i) dequantized lsf coefficients */ ++ int length, /* (i) length of lsf coefficient vector */ ++ iLBC_Dec_Inst_t *iLBCdec_inst ++ /* (i) the decoder state structure */ ++){ ++ int i, pos, lp_length; ++ float lp[LPC_FILTERORDER + 1], *lsfdeq2; ++ ++ lsfdeq2 = lsfdeq + length; ++ lp_length = length + 1; ++ ++ if (iLBCdec_inst->mode==30) { ++ /* sub-frame 1: Interpolation between old and first */ ++ ++ LSFinterpolate2a_dec(lp, iLBCdec_inst->lsfdeqold, lsfdeq, ++ lsf_weightTbl_30ms[0], length); ++ memcpy(syntdenum,lp,lp_length*sizeof(float)); ++ bwexpand(weightdenum, lp, LPC_CHIRP_WEIGHTDENUM, ++ lp_length); ++ ++ /* sub-frames 2 to 6: interpolation between first ++ and last LSF */ ++ ++ pos = lp_length; ++ for (i = 1; i < 6; i++) { ++ LSFinterpolate2a_dec(lp, lsfdeq, lsfdeq2, ++ lsf_weightTbl_30ms[i], length); ++ memcpy(syntdenum + pos,lp,lp_length*sizeof(float)); ++ bwexpand(weightdenum + pos, lp, ++ LPC_CHIRP_WEIGHTDENUM, lp_length); ++ pos += lp_length; ++ } ++ } ++ else { ++ pos = 0; ++ for (i = 0; i < iLBCdec_inst->nsub; i++) { ++ LSFinterpolate2a_dec(lp, iLBCdec_inst->lsfdeqold, ++ lsfdeq, lsf_weightTbl_20ms[i], length); ++ memcpy(syntdenum+pos,lp,lp_length*sizeof(float)); ++ bwexpand(weightdenum+pos, lp, LPC_CHIRP_WEIGHTDENUM, ++ lp_length); ++ pos += lp_length; ++ } ++ } ++ ++ /* update memory */ ++ ++ ++ ++ if (iLBCdec_inst->mode==30) ++ memcpy(iLBCdec_inst->lsfdeqold, lsfdeq2, ++ length*sizeof(float)); ++ else ++ memcpy(iLBCdec_inst->lsfdeqold, lsfdeq, ++ length*sizeof(float)); ++ ++} ++ ++ +diff -druN codecs/ilbc.orig/LPCdecode.h codecs/ilbc/LPCdecode.h +--- codecs/ilbc.orig/LPCdecode.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/LPCdecode.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,44 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ LPC_decode.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __iLBC_LPC_DECODE_H ++#define __iLBC_LPC_DECODE_H ++ ++void LSFinterpolate2a_dec( ++ ++ ++ float *a, /* (o) lpc coefficients for a sub-frame */ ++ float *lsf1, /* (i) first lsf coefficient vector */ ++ float *lsf2, /* (i) second lsf coefficient vector */ ++ float coef, /* (i) interpolation weight */ ++ int length /* (i) length of lsf vectors */ ++); ++ ++void SimplelsfDEQ( ++ float *lsfdeq, /* (o) dequantized lsf coefficients */ ++ int *index, /* (i) quantization index */ ++ int lpc_n /* (i) number of LPCs */ ++); ++ ++void DecoderInterpolateLSF( ++ float *syntdenum, /* (o) synthesis filter coefficients */ ++ float *weightdenum, /* (o) weighting denumerator ++ coefficients */ ++ float *lsfdeq, /* (i) dequantized lsf coefficients */ ++ int length, /* (i) length of lsf coefficient vector */ ++ iLBC_Dec_Inst_t *iLBCdec_inst ++ /* (i) the decoder state structure */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/LPCencode.c codecs/ilbc/LPCencode.c +--- codecs/ilbc.orig/LPCencode.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/LPCencode.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,228 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ LPCencode.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include ++ ++ ++ ++#include "iLBC_define.h" ++#include "LPCencode.h" ++#include "helpfun.h" ++#include "lsf.h" ++#include "constants.h" ++ ++/*----------------------------------------------------------------* ++ * lpc analysis (subrutine to LPCencode) ++ *---------------------------------------------------------------*/ ++ ++static void SimpleAnalysis( ++ float *lsf, /* (o) lsf coefficients */ ++ float *data, /* (i) new data vector */ ++ iLBC_Enc_Inst_t *iLBCenc_inst ++ /* (i/o) the encoder state structure */ ++){ ++ int k, is; ++ float temp[BLOCKL_MAX], lp[LPC_FILTERORDER + 1]; ++ float lp2[LPC_FILTERORDER + 1]; ++ float r[LPC_FILTERORDER + 1]; ++ ++ is=LPC_LOOKBACK+BLOCKL_MAX-iLBCenc_inst->blockl; ++ memcpy(iLBCenc_inst->lpc_buffer+is,data, ++ iLBCenc_inst->blockl*sizeof(float)); ++ ++ /* No lookahead, last window is asymmetric */ ++ ++ for (k = 0; k < iLBCenc_inst->lpc_n; k++) { ++ ++ is = LPC_LOOKBACK; ++ ++ if (k < (iLBCenc_inst->lpc_n - 1)) { ++ window(temp, lpc_winTbl, ++ iLBCenc_inst->lpc_buffer, BLOCKL_MAX); ++ } else { ++ window(temp, lpc_asymwinTbl, ++ iLBCenc_inst->lpc_buffer + is, BLOCKL_MAX); ++ } ++ ++ autocorr(r, temp, BLOCKL_MAX, LPC_FILTERORDER); ++ window(r, r, lpc_lagwinTbl, LPC_FILTERORDER + 1); ++ ++ levdurb(lp, temp, r, LPC_FILTERORDER); ++ bwexpand(lp2, lp, LPC_CHIRP_SYNTDENUM, LPC_FILTERORDER+1); ++ ++ a2lsf(lsf + k*LPC_FILTERORDER, lp2); ++ } ++ is=LPC_LOOKBACK+BLOCKL_MAX-iLBCenc_inst->blockl; ++ memmove(iLBCenc_inst->lpc_buffer, ++ iLBCenc_inst->lpc_buffer+LPC_LOOKBACK+BLOCKL_MAX-is, ++ is*sizeof(float)); ++} ++ ++/*----------------------------------------------------------------* ++ ++ ++ * lsf interpolator and conversion from lsf to a coefficients ++ * (subrutine to SimpleInterpolateLSF) ++ *---------------------------------------------------------------*/ ++ ++static void LSFinterpolate2a_enc( ++ float *a, /* (o) lpc coefficients */ ++ float *lsf1,/* (i) first set of lsf coefficients */ ++ float *lsf2,/* (i) second set of lsf coefficients */ ++ float coef, /* (i) weighting coefficient to use between ++ lsf1 and lsf2 */ ++ long length /* (i) length of coefficient vectors */ ++){ ++ float lsftmp[LPC_FILTERORDER]; ++ ++ interpolate(lsftmp, lsf1, lsf2, coef, length); ++ lsf2a(a, lsftmp); ++} ++ ++/*----------------------------------------------------------------* ++ * lsf interpolator (subrutine to LPCencode) ++ *---------------------------------------------------------------*/ ++ ++static void SimpleInterpolateLSF( ++ float *syntdenum, /* (o) the synthesis filter denominator ++ resulting from the quantized ++ interpolated lsf */ ++ float *weightdenum, /* (o) the weighting filter denominator ++ resulting from the unquantized ++ interpolated lsf */ ++ float *lsf, /* (i) the unquantized lsf coefficients */ ++ float *lsfdeq, /* (i) the dequantized lsf coefficients */ ++ float *lsfold, /* (i) the unquantized lsf coefficients of ++ the previous signal frame */ ++ float *lsfdeqold, /* (i) the dequantized lsf coefficients of ++ the previous signal frame */ ++ int length, /* (i) should equate LPC_FILTERORDER */ ++ iLBC_Enc_Inst_t *iLBCenc_inst ++ /* (i/o) the encoder state structure */ ++){ ++ int i, pos, lp_length; ++ float lp[LPC_FILTERORDER + 1], *lsf2, *lsfdeq2; ++ ++ lsf2 = lsf + length; ++ lsfdeq2 = lsfdeq + length; ++ lp_length = length + 1; ++ ++ if (iLBCenc_inst->mode==30) { ++ /* sub-frame 1: Interpolation between old and first ++ set of lsf coefficients */ ++ ++ LSFinterpolate2a_enc(lp, lsfdeqold, lsfdeq, ++ lsf_weightTbl_30ms[0], length); ++ memcpy(syntdenum,lp,lp_length*sizeof(float)); ++ LSFinterpolate2a_enc(lp, lsfold, lsf, ++ ++ ++ lsf_weightTbl_30ms[0], length); ++ bwexpand(weightdenum, lp, LPC_CHIRP_WEIGHTDENUM, lp_length); ++ ++ /* sub-frame 2 to 6: Interpolation between first ++ and second set of lsf coefficients */ ++ ++ pos = lp_length; ++ for (i = 1; i < iLBCenc_inst->nsub; i++) { ++ LSFinterpolate2a_enc(lp, lsfdeq, lsfdeq2, ++ lsf_weightTbl_30ms[i], length); ++ memcpy(syntdenum + pos,lp,lp_length*sizeof(float)); ++ ++ LSFinterpolate2a_enc(lp, lsf, lsf2, ++ lsf_weightTbl_30ms[i], length); ++ bwexpand(weightdenum + pos, lp, ++ LPC_CHIRP_WEIGHTDENUM, lp_length); ++ pos += lp_length; ++ } ++ } ++ else { ++ pos = 0; ++ for (i = 0; i < iLBCenc_inst->nsub; i++) { ++ LSFinterpolate2a_enc(lp, lsfdeqold, lsfdeq, ++ lsf_weightTbl_20ms[i], length); ++ memcpy(syntdenum+pos,lp,lp_length*sizeof(float)); ++ LSFinterpolate2a_enc(lp, lsfold, lsf, ++ lsf_weightTbl_20ms[i], length); ++ bwexpand(weightdenum+pos, lp, ++ LPC_CHIRP_WEIGHTDENUM, lp_length); ++ pos += lp_length; ++ } ++ } ++ ++ /* update memory */ ++ ++ if (iLBCenc_inst->mode==30) { ++ memcpy(lsfold, lsf2, length*sizeof(float)); ++ memcpy(lsfdeqold, lsfdeq2, length*sizeof(float)); ++ } ++ else { ++ memcpy(lsfold, lsf, length*sizeof(float)); ++ memcpy(lsfdeqold, lsfdeq, length*sizeof(float)); ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * lsf quantizer (subrutine to LPCencode) ++ *---------------------------------------------------------------*/ ++ ++static void SimplelsfQ( ++ float *lsfdeq, /* (o) dequantized lsf coefficients ++ (dimension FILTERORDER) */ ++ int *index, /* (o) quantization index */ ++ float *lsf, /* (i) the lsf coefficient vector to be ++ ++ ++ quantized (dimension FILTERORDER ) */ ++ int lpc_n /* (i) number of lsf sets to quantize */ ++){ ++ /* Quantize first LSF with memoryless split VQ */ ++ SplitVQ(lsfdeq, index, lsf, lsfCbTbl, LSF_NSPLIT, ++ dim_lsfCbTbl, size_lsfCbTbl); ++ ++ if (lpc_n==2) { ++ /* Quantize second LSF with memoryless split VQ */ ++ SplitVQ(lsfdeq + LPC_FILTERORDER, index + LSF_NSPLIT, ++ lsf + LPC_FILTERORDER, lsfCbTbl, LSF_NSPLIT, ++ dim_lsfCbTbl, size_lsfCbTbl); ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * lpc encoder ++ *---------------------------------------------------------------*/ ++ ++void LPCencode( ++ float *syntdenum, /* (i/o) synthesis filter coefficients ++ before/after encoding */ ++ float *weightdenum, /* (i/o) weighting denumerator ++ coefficients before/after ++ encoding */ ++ int *lsf_index, /* (o) lsf quantization index */ ++ float *data, /* (i) lsf coefficients to quantize */ ++ iLBC_Enc_Inst_t *iLBCenc_inst ++ /* (i/o) the encoder state structure */ ++){ ++ float lsf[LPC_FILTERORDER * LPC_N_MAX]; ++ float lsfdeq[LPC_FILTERORDER * LPC_N_MAX]; ++ int change=0; ++ ++ SimpleAnalysis(lsf, data, iLBCenc_inst); ++ SimplelsfQ(lsfdeq, lsf_index, lsf, iLBCenc_inst->lpc_n); ++ change=LSF_check(lsfdeq, LPC_FILTERORDER, iLBCenc_inst->lpc_n); ++ SimpleInterpolateLSF(syntdenum, weightdenum, ++ lsf, lsfdeq, iLBCenc_inst->lsfold, ++ iLBCenc_inst->lsfdeqold, LPC_FILTERORDER, iLBCenc_inst); ++} ++ ++ ++ +diff -druN codecs/ilbc.orig/LPCencode.h codecs/ilbc/LPCencode.h +--- codecs/ilbc.orig/LPCencode.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/LPCencode.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,29 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ LPCencode.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __iLBC_LPCENCOD_H ++#define __iLBC_LPCENCOD_H ++ ++void LPCencode( ++ float *syntdenum, /* (i/o) synthesis filter coefficients ++ before/after encoding */ ++ float *weightdenum, /* (i/o) weighting denumerator coefficients ++ before/after encoding */ ++ int *lsf_index, /* (o) lsf quantization index */ ++ float *data, /* (i) lsf coefficients to quantize */ ++ iLBC_Enc_Inst_t *iLBCenc_inst ++ /* (i/o) the encoder state structure */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/Makefile codecs/ilbc/Makefile +--- codecs/ilbc.orig/Makefile 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/Makefile 2007-10-29 15:12:16.000000000 -0700 +@@ -0,0 +1,20 @@ ++LIB=libilbc.a ++CFLAGS+=-fPIC ++ ++OBJS=anaFilter.o iCBSearch.o packing.o \ ++ constants.o gainquant.o iLBC_decode.o StateConstructW.o \ ++ createCB.o getCBvec.o iLBC_encode.o StateSearchW.o doCPLC.o \ ++ helpfun.o syntFilter.o enhancer.o hpInput.o LPCdecode.o \ ++ filter.o hpOutput.o LPCencode.o FrameClassify.o iCBConstruct.o lsf.o ++ ++include $(ASTTOPDIR)/Makefile.rules ++ ++all: $(LIB) ++ ++$(LIB): $(OBJS) ++ $(ECHO_PREFIX) echo " [AR] $^ -> $@" ++ $(CMD_PREFIX) $(AR) cr $@ $^ ++ $(CMD_PREFIX) $(RANLIB) $@ ++ ++clean: ++ rm -f $(LIB) *.o .*.d *.s *.i +diff -druN codecs/ilbc.orig/StateConstructW.c codecs/ilbc/StateConstructW.c +--- codecs/ilbc.orig/StateConstructW.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/StateConstructW.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,76 @@ ++ ++/****************************************************************** ++ ++ ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ StateConstructW.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include ++#include ++ ++#include "iLBC_define.h" ++#include "StateConstructW.h" ++#include "constants.h" ++#include "filter.h" ++ ++/*----------------------------------------------------------------* ++ * decoding of the start state ++ *---------------------------------------------------------------*/ ++ ++void StateConstructW( ++ int idxForMax, /* (i) 6-bit index for the quantization of ++ max amplitude */ ++ int *idxVec, /* (i) vector of quantization indexes */ ++ float *syntDenum, /* (i) synthesis filter denumerator */ ++ float *out, /* (o) the decoded state vector */ ++ int len /* (i) length of a state vector */ ++){ ++ float maxVal, tmpbuf[LPC_FILTERORDER+2*STATE_LEN], *tmp, ++ numerator[LPC_FILTERORDER+1]; ++ float foutbuf[LPC_FILTERORDER+2*STATE_LEN], *fout; ++ int k,tmpi; ++ ++ /* decoding of the maximum value */ ++ ++ maxVal = state_frgqTbl[idxForMax]; ++ maxVal = (float)pow(10,maxVal)/(float)4.5; ++ ++ /* initialization of buffers and coefficients */ ++ ++ memset(tmpbuf, 0, LPC_FILTERORDER*sizeof(float)); ++ memset(foutbuf, 0, LPC_FILTERORDER*sizeof(float)); ++ for (k=0; k ++#include ++ ++#include "iLBC_define.h" ++#include "StateSearchW.h" ++#include "constants.h" ++#include "filter.h" ++#include "helpfun.h" ++ ++/*----------------------------------------------------------------* ++ * predictive noise shaping encoding of scaled start state ++ * (subrutine for StateSearchW) ++ *---------------------------------------------------------------*/ ++ ++void AbsQuantW( ++ iLBC_Enc_Inst_t *iLBCenc_inst, ++ /* (i) Encoder instance */ ++ float *in, /* (i) vector to encode */ ++ float *syntDenum, /* (i) denominator of synthesis filter */ ++ float *weightDenum, /* (i) denominator of weighting filter */ ++ int *out, /* (o) vector of quantizer indexes */ ++ int len, /* (i) length of vector to encode and ++ vector of quantizer indexes */ ++ int state_first /* (i) position of start state in the ++ 80 vec */ ++){ ++ float *syntOut; ++ float syntOutBuf[LPC_FILTERORDER+STATE_SHORT_LEN_30MS]; ++ float toQ, xq; ++ int n; ++ int index; ++ ++ /* initialization of buffer for filtering */ ++ ++ memset(syntOutBuf, 0, LPC_FILTERORDER*sizeof(float)); ++ ++ ++ ++ /* initialization of pointer for filtering */ ++ ++ syntOut = &syntOutBuf[LPC_FILTERORDER]; ++ ++ /* synthesis and weighting filters on input */ ++ ++ if (state_first) { ++ AllPoleFilter (in, weightDenum, SUBL, LPC_FILTERORDER); ++ } else { ++ AllPoleFilter (in, weightDenum, ++ iLBCenc_inst->state_short_len-SUBL, ++ LPC_FILTERORDER); ++ } ++ ++ /* encoding loop */ ++ ++ for (n=0; nstate_short_len-SUBL))) { ++ syntDenum += (LPC_FILTERORDER+1); ++ weightDenum += (LPC_FILTERORDER+1); ++ ++ /* synthesis and weighting filters on input */ ++ AllPoleFilter (&in[n], weightDenum, len-n, ++ LPC_FILTERORDER); ++ ++ } ++ ++ /* prediction of synthesized and weighted input */ ++ ++ syntOut[n] = 0.0; ++ AllPoleFilter (&syntOut[n], weightDenum, 1, ++ LPC_FILTERORDER); ++ ++ /* quantization */ ++ ++ toQ = in[n]-syntOut[n]; ++ sort_sq(&xq, &index, toQ, state_sq3Tbl, 8); ++ out[n]=index; ++ syntOut[n] = state_sq3Tbl[out[n]]; ++ ++ /* update of the prediction filter */ ++ ++ ++ ++ AllPoleFilter(&syntOut[n], weightDenum, 1, ++ LPC_FILTERORDER); ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * encoding of start state ++ *---------------------------------------------------------------*/ ++ ++void StateSearchW( ++ iLBC_Enc_Inst_t *iLBCenc_inst, ++ /* (i) Encoder instance */ ++ float *residual,/* (i) target residual vector */ ++ float *syntDenum, /* (i) lpc synthesis filter */ ++ float *weightDenum, /* (i) weighting filter denuminator */ ++ int *idxForMax, /* (o) quantizer index for maximum ++ amplitude */ ++ int *idxVec, /* (o) vector of quantization indexes */ ++ int len, /* (i) length of all vectors */ ++ int state_first /* (i) position of start state in the ++ 80 vec */ ++){ ++ float dtmp, maxVal; ++ float tmpbuf[LPC_FILTERORDER+2*STATE_SHORT_LEN_30MS]; ++ float *tmp, numerator[1+LPC_FILTERORDER]; ++ float foutbuf[LPC_FILTERORDER+2*STATE_SHORT_LEN_30MS], *fout; ++ int k; ++ float qmax, scal; ++ ++ /* initialization of buffers and filter coefficients */ ++ ++ memset(tmpbuf, 0, LPC_FILTERORDER*sizeof(float)); ++ memset(foutbuf, 0, LPC_FILTERORDER*sizeof(float)); ++ for (k=0; k maxVal*maxVal){ ++ maxVal = fout[k]; ++ } ++ } ++ maxVal=(float)fabs(maxVal); ++ ++ /* encoding of the maximum amplitude value */ ++ ++ if (maxVal < 10.0) { ++ maxVal = 10.0; ++ } ++ maxVal = (float)log10(maxVal); ++ sort_sq(&dtmp, idxForMax, maxVal, state_frgqTbl, 64); ++ ++ /* decoding of the maximum amplitude representation value, ++ and corresponding scaling of start state */ ++ ++ maxVal=state_frgqTbl[*idxForMax]; ++ qmax = (float)pow(10,maxVal); ++ scal = (float)(4.5)/qmax; ++ for (k=0; k ++#include "anaFilter.h" ++#include "iLBC_define.h" ++ ++/*----------------------------------------------------------------* ++ * LP analysis filter. ++ ++ ++ *---------------------------------------------------------------*/ ++ ++void anaFilter( ++ float *In, /* (i) Signal to be filtered */ ++ float *a, /* (i) LP parameters */ ++ int len,/* (i) Length of signal */ ++ float *Out, /* (o) Filtered signal */ ++ float *mem /* (i/o) Filter state */ ++){ ++ int i, j; ++ float *po, *pi, *pm, *pa; ++ ++ po = Out; ++ ++ /* Filter first part using memory from past */ ++ ++ for (i=0; i ++#include ++ ++/*----------------------------------------------------------------* ++ * Construct an additional codebook vector by filtering the ++ * initial codebook buffer. This vector is then used to expand ++ * the codebook with an additional section. ++ *---------------------------------------------------------------*/ ++ ++void filteredCBvecs( ++ float *cbvectors, /* (o) Codebook vectors for the ++ higher section */ ++ float *mem, /* (i) Buffer to create codebook ++ vector from */ ++ int lMem /* (i) Length of buffer */ ++){ ++ int j, k; ++ float *pp, *pp1; ++ float tempbuff2[CB_MEML+CB_FILTERLEN]; ++ float *pos; ++ ++ memset(tempbuff2, 0, (CB_HALFFILTERLEN-1)*sizeof(float)); ++ memcpy(&tempbuff2[CB_HALFFILTERLEN-1], mem, lMem*sizeof(float)); ++ memset(&tempbuff2[lMem+CB_HALFFILTERLEN-1], 0, ++ (CB_HALFFILTERLEN+1)*sizeof(float)); ++ ++ /* Create codebook vector for higher section by filtering */ ++ ++ /* do filtering */ ++ pos=cbvectors; ++ memset(pos, 0, lMem*sizeof(float)); ++ for (k=0; k0.0) { ++ invenergy[tmpIndex]=(float)1.0/(energy[tmpIndex]+EPS); ++ } else { ++ invenergy[tmpIndex] = (float) 0.0; ++ } ++ ++ if (stage==0) { ++ measure = (float)-10000000.0; ++ ++ if (crossDot > 0.0) { ++ measure = crossDot*crossDot*invenergy[tmpIndex]; ++ } ++ } ++ else { ++ measure = crossDot*crossDot*invenergy[tmpIndex]; ++ } ++ ++ /* check if measure is better */ ++ ftmp = crossDot*invenergy[tmpIndex]; ++ ++ if ((measure>*max_measure) && (fabs(ftmp) ++#include ++#include ++ ++#include "iLBC_define.h" ++#include "doCPLC.h" ++ ++/*----------------------------------------------------------------* ++ * Compute cross correlation and pitch gain for pitch prediction ++ * of last subframe at given lag. ++ *---------------------------------------------------------------*/ ++ ++static void compCorr( ++ float *cc, /* (o) cross correlation coefficient */ ++ float *gc, /* (o) gain */ ++ float *pm, ++ float *buffer, /* (i) signal buffer */ ++ int lag, /* (i) pitch lag */ ++ int bLen, /* (i) length of buffer */ ++ int sRange /* (i) correlation search length */ ++){ ++ ++ ++ int i; ++ float ftmp1, ftmp2, ftmp3; ++ ++ /* Guard against getting outside buffer */ ++ if ((bLen-sRange-lag)<0) { ++ sRange=bLen-lag; ++ } ++ ++ ftmp1 = 0.0; ++ ftmp2 = 0.0; ++ ftmp3 = 0.0; ++ for (i=0; i 0.0) { ++ *cc = ftmp1*ftmp1/ftmp2; ++ *gc = (float)fabs(ftmp1/ftmp2); ++ *pm=(float)fabs(ftmp1)/ ++ ((float)sqrt(ftmp2)*(float)sqrt(ftmp3)); ++ } ++ else { ++ *cc = 0.0; ++ *gc = 0.0; ++ *pm=0.0; ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * Packet loss concealment routine. Conceals a residual signal ++ * and LP parameters. If no packet loss, update state. ++ *---------------------------------------------------------------*/ ++ ++void doThePLC( ++ float *PLCresidual, /* (o) concealed residual */ ++ float *PLClpc, /* (o) concealed LP parameters */ ++ int PLI, /* (i) packet loss indicator ++ 0 - no PL, 1 = PL */ ++ float *decresidual, /* (i) decoded residual */ ++ float *lpc, /* (i) decoded LPC (only used for no PL) */ ++ int inlag, /* (i) pitch lag */ ++ iLBC_Dec_Inst_t *iLBCdec_inst ++ /* (i/o) decoder instance */ ++){ ++ int lag=20, randlag; ++ float gain, maxcc; ++ float use_gain; ++ float gain_comp, maxcc_comp, per, max_per; ++ int i, pick, use_lag; ++ ++ ++ float ftmp, randvec[BLOCKL_MAX], pitchfact, energy; ++ ++ /* Packet Loss */ ++ ++ if (PLI == 1) { ++ ++ iLBCdec_inst->consPLICount += 1; ++ ++ /* if previous frame not lost, ++ determine pitch pred. gain */ ++ ++ if (iLBCdec_inst->prevPLI != 1) { ++ ++ /* Search around the previous lag to find the ++ best pitch period */ ++ ++ lag=inlag-3; ++ compCorr(&maxcc, &gain, &max_per, ++ iLBCdec_inst->prevResidual, ++ lag, iLBCdec_inst->blockl, 60); ++ for (i=inlag-2;i<=inlag+3;i++) { ++ compCorr(&maxcc_comp, &gain_comp, &per, ++ iLBCdec_inst->prevResidual, ++ i, iLBCdec_inst->blockl, 60); ++ ++ if (maxcc_comp>maxcc) { ++ maxcc=maxcc_comp; ++ gain=gain_comp; ++ lag=i; ++ max_per=per; ++ } ++ } ++ ++ } ++ ++ /* previous frame lost, use recorded lag and periodicity */ ++ ++ else { ++ lag=iLBCdec_inst->prevLag; ++ max_per=iLBCdec_inst->per; ++ } ++ ++ /* downscaling */ ++ ++ use_gain=1.0; ++ if (iLBCdec_inst->consPLICount*iLBCdec_inst->blockl>320) ++ use_gain=(float)0.9; ++ else if (iLBCdec_inst->consPLICount* ++ iLBCdec_inst->blockl>2*320) ++ use_gain=(float)0.7; ++ else if (iLBCdec_inst->consPLICount* ++ iLBCdec_inst->blockl>3*320) ++ use_gain=(float)0.5; ++ else if (iLBCdec_inst->consPLICount* ++ ++ ++ iLBCdec_inst->blockl>4*320) ++ use_gain=(float)0.0; ++ ++ /* mix noise and pitch repeatition */ ++ ftmp=(float)sqrt(max_per); ++ if (ftmp>(float)0.7) ++ pitchfact=(float)1.0; ++ else if (ftmp>(float)0.4) ++ pitchfact=(ftmp-(float)0.4)/((float)0.7-(float)0.4); ++ else ++ pitchfact=0.0; ++ ++ ++ /* avoid repetition of same pitch cycle */ ++ use_lag=lag; ++ if (lag<80) { ++ use_lag=2*lag; ++ } ++ ++ /* compute concealed residual */ ++ ++ energy = 0.0; ++ for (i=0; iblockl; i++) { ++ ++ /* noise component */ ++ ++ iLBCdec_inst->seed=(iLBCdec_inst->seed*69069L+1) & ++ (0x80000000L-1); ++ randlag = 50 + ((signed long) iLBCdec_inst->seed)%70; ++ pick = i - randlag; ++ ++ if (pick < 0) { ++ randvec[i] = ++ iLBCdec_inst->prevResidual[ ++ iLBCdec_inst->blockl+pick]; ++ } else { ++ randvec[i] = randvec[pick]; ++ } ++ ++ /* pitch repeatition component */ ++ pick = i - use_lag; ++ ++ if (pick < 0) { ++ PLCresidual[i] = ++ iLBCdec_inst->prevResidual[ ++ iLBCdec_inst->blockl+pick]; ++ } else { ++ PLCresidual[i] = PLCresidual[pick]; ++ } ++ ++ /* mix random and periodicity component */ ++ ++ if (i<80) ++ PLCresidual[i] = use_gain*(pitchfact * ++ ++ ++ PLCresidual[i] + ++ ((float)1.0 - pitchfact) * randvec[i]); ++ else if (i<160) ++ PLCresidual[i] = (float)0.95*use_gain*(pitchfact * ++ PLCresidual[i] + ++ ((float)1.0 - pitchfact) * randvec[i]); ++ else ++ PLCresidual[i] = (float)0.9*use_gain*(pitchfact * ++ PLCresidual[i] + ++ ((float)1.0 - pitchfact) * randvec[i]); ++ ++ energy += PLCresidual[i] * PLCresidual[i]; ++ } ++ ++ /* less than 30 dB, use only noise */ ++ ++ if (sqrt(energy/(float)iLBCdec_inst->blockl) < 30.0) { ++ gain=0.0; ++ for (i=0; iblockl; i++) { ++ PLCresidual[i] = randvec[i]; ++ } ++ } ++ ++ /* use old LPC */ ++ ++ memcpy(PLClpc,iLBCdec_inst->prevLpc, ++ (LPC_FILTERORDER+1)*sizeof(float)); ++ ++ } ++ ++ /* no packet loss, copy input */ ++ ++ else { ++ memcpy(PLCresidual, decresidual, ++ iLBCdec_inst->blockl*sizeof(float)); ++ memcpy(PLClpc, lpc, (LPC_FILTERORDER+1)*sizeof(float)); ++ iLBCdec_inst->consPLICount = 0; ++ } ++ ++ /* update state */ ++ ++ if (PLI) { ++ iLBCdec_inst->prevLag = lag; ++ iLBCdec_inst->per=max_per; ++ } ++ ++ iLBCdec_inst->prevPLI = PLI; ++ memcpy(iLBCdec_inst->prevLpc, PLClpc, ++ (LPC_FILTERORDER+1)*sizeof(float)); ++ memcpy(iLBCdec_inst->prevResidual, PLCresidual, ++ iLBCdec_inst->blockl*sizeof(float)); ++} ++ ++ ++ ++ +diff -druN codecs/ilbc.orig/doCPLC.h codecs/ilbc/doCPLC.h +--- codecs/ilbc.orig/doCPLC.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/doCPLC.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,32 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ doCPLC.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++ ++ ++******************************************************************/ ++ ++#ifndef __iLBC_DOLPC_H ++#define __iLBC_DOLPC_H ++ ++void doThePLC( ++ float *PLCresidual, /* (o) concealed residual */ ++ float *PLClpc, /* (o) concealed LP parameters */ ++ int PLI, /* (i) packet loss indicator ++ 0 - no PL, 1 = PL */ ++ float *decresidual, /* (i) decoded residual */ ++ float *lpc, /* (i) decoded LPC (only used for no PL) */ ++ int inlag, /* (i) pitch lag */ ++ iLBC_Dec_Inst_t *iLBCdec_inst ++ /* (i/o) decoder instance */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/enhancer.c codecs/ilbc/enhancer.c +--- codecs/ilbc.orig/enhancer.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/enhancer.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,665 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ enhancer.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include ++#include ++#include "iLBC_define.h" ++#include "enhancer.h" ++#include "constants.h" ++#include "filter.h" ++ ++/*----------------------------------------------------------------* ++ ++ ++ * Find index in array such that the array element with said ++ * index is the element of said array closest to "value" ++ * according to the squared-error criterion ++ *---------------------------------------------------------------*/ ++ ++static void NearestNeighbor( ++ int *index, /* (o) index of array element closest ++ to value */ ++ float *array, /* (i) data array */ ++ float value,/* (i) value */ ++ int arlength/* (i) dimension of data array */ ++){ ++ int i; ++ float bestcrit,crit; ++ ++ crit=array[0]-value; ++ bestcrit=crit*crit; ++ *index=0; ++ for (i=1; i dim1 ) { ++ hfl2=(int) (dim1/2); ++ for (j=0; j= idatal) { ++ searchSegEndPos=idatal-ENH_BLOCKL-1; ++ } ++ corrdim=searchSegEndPos-searchSegStartPos+1; ++ ++ /* compute upsampled correlation (corr33) and find ++ location of max */ ++ ++ mycorr1(corrVec,idata+searchSegStartPos, ++ corrdim+ENH_BLOCKL-1,idata+centerStartPos,ENH_BLOCKL); ++ enh_upsample(corrVecUps,corrVec,corrdim,ENH_FL0); ++ tloc=0; maxv=corrVecUps[0]; ++ for (i=1; imaxv) { ++ tloc=i; ++ maxv=corrVecUps[i]; ++ } ++ } ++ ++ /* make vector can be upsampled without ever running outside ++ bounds */ ++ ++ *updStartPos= (float)searchSegStartPos + ++ (float)tloc/(float)ENH_UPS0+(float)1.0; ++ tloc2=(int)(tloc/ENH_UPS0); ++ ++ if (tloc>tloc2*ENH_UPS0) { ++ tloc2++; ++ } ++ st=searchSegStartPos+tloc2-ENH_FL0; ++ ++ if (st<0) { ++ memset(vect,0,-st*sizeof(float)); ++ memcpy(&vect[-st],idata, (ENH_VECTL+st)*sizeof(float)); ++ } ++ else { ++ en=st+ENH_VECTL; ++ ++ if (en>idatal) { ++ memcpy(vect, &idata[st], ++ (ENH_VECTL-(en-idatal))*sizeof(float)); ++ memset(&vect[ENH_VECTL-(en-idatal)], 0, ++ (en-idatal)*sizeof(float)); ++ } ++ else { ++ memcpy(vect, &idata[st], ENH_VECTL*sizeof(float)); ++ } ++ } ++ fraction=tloc2*ENH_UPS0-tloc; ++ ++ /* compute the segment (this is actually a convolution) */ ++ ++ mycorr1(seg,vect,ENH_VECTL,polyphaserTbl+(2*ENH_FL0+1)*fraction, ++ ++ ++ 2*ENH_FL0+1); ++} ++ ++/*----------------------------------------------------------------* ++ * find the smoothed output data ++ *---------------------------------------------------------------*/ ++ ++static void smath( ++ float *odata, /* (o) smoothed output */ ++ float *sseq,/* (i) said second sequence of waveforms */ ++ int hl, /* (i) 2*hl+1 is sseq dimension */ ++ float alpha0/* (i) max smoothing energy fraction */ ++){ ++ int i,k; ++ float w00,w10,w11,A,B,C,*psseq,err,errs; ++ float surround[BLOCKL_MAX]; /* shape contributed by other than ++ current */ ++ float wt[2*ENH_HL+1]; /* waveform weighting to get ++ surround shape */ ++ float denom; ++ ++ /* create shape of contribution from all waveforms except the ++ current one */ ++ ++ for (i=1; i<=2*hl+1; i++) { ++ wt[i-1] = (float)0.5*(1 - (float)cos(2*PI*i/(2*hl+2))); ++ } ++ wt[hl]=0.0; /* for clarity, not used */ ++ for (i=0; i alpha0 * w00) { ++ if ( w00 < 1) { ++ w00=1; ++ } ++ denom = (w11*w00-w10*w10)/(w00*w00); ++ ++ if (denom > 0.0001) { /* eliminates numerical problems ++ for if smooth */ ++ A = (float)sqrt( (alpha0- alpha0*alpha0/4)/denom); ++ B = -alpha0/2 - A * w10/w00; ++ B = B+1; ++ } ++ else { /* essentially no difference between cycles; ++ smoothing not needed */ ++ A= 0.0; ++ B= 1.0; ++ } ++ ++ /* create smoothed sequence */ ++ ++ psseq=sseq+hl*ENH_BLOCKL; ++ for (i=0; i=0; q--) { ++ blockStartPos[q]=blockStartPos[q+1]-period[lagBlock[q+1]]; ++ NearestNeighbor(lagBlock+q,plocs, ++ blockStartPos[q]+ ++ ENH_BLOCKL_HALF-period[lagBlock[q+1]], periodl); ++ ++ ++ if (blockStartPos[q]-ENH_OVERHANG>=0) { ++ refiner(sseq+q*ENH_BLOCKL, blockStartPos+q, idata, ++ idatal, centerStartPos, blockStartPos[q], ++ period[lagBlock[q+1]]); ++ } else { ++ psseq=sseq+q*ENH_BLOCKL; ++ memset(psseq, 0, ENH_BLOCKL*sizeof(float)); ++ } ++ } ++ ++ /* future */ ++ ++ for (i=0; i 0.0) { ++ return (float)(ftmp1*ftmp1/ftmp2); ++ } ++ else { ++ return (float)0.0; ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * interface for enhancer ++ *---------------------------------------------------------------*/ ++ ++int enhancerInterface( ++ float *out, /* (o) enhanced signal */ ++ float *in, /* (i) unenhanced signal */ ++ iLBC_Dec_Inst_t *iLBCdec_inst /* (i) buffers etc */ ++){ ++ float *enh_buf, *enh_period; ++ int iblock, isample; ++ int lag=0, ilag, i, ioffset; ++ float cc, maxcc; ++ float ftmp1, ftmp2; ++ float *inPtr, *enh_bufPtr1, *enh_bufPtr2; ++ float plc_pred[ENH_BLOCKL]; ++ ++ float lpState[6], downsampled[(ENH_NBLOCKS*ENH_BLOCKL+120)/2]; ++ int inLen=ENH_NBLOCKS*ENH_BLOCKL+120; ++ int start, plc_blockl, inlag; ++ ++ enh_buf=iLBCdec_inst->enh_buf; ++ enh_period=iLBCdec_inst->enh_period; ++ ++ memmove(enh_buf, &enh_buf[iLBCdec_inst->blockl], ++ (ENH_BUFL-iLBCdec_inst->blockl)*sizeof(float)); ++ ++ memcpy(&enh_buf[ENH_BUFL-iLBCdec_inst->blockl], in, ++ iLBCdec_inst->blockl*sizeof(float)); ++ ++ if (iLBCdec_inst->mode==30) ++ plc_blockl=ENH_BLOCKL; ++ else ++ plc_blockl=40; ++ ++ /* when 20 ms frame, move processing one block */ ++ ioffset=0; ++ if (iLBCdec_inst->mode==20) ioffset=1; ++ ++ i=3-ioffset; ++ memmove(enh_period, &enh_period[i], ++ ++ ++ (ENH_NBLOCKS_TOT-i)*sizeof(float)); ++ ++ /* Set state information to the 6 samples right before ++ the samples to be downsampled. */ ++ ++ memcpy(lpState, ++ enh_buf+(ENH_NBLOCKS_EXTRA+ioffset)*ENH_BLOCKL-126, ++ 6*sizeof(float)); ++ ++ /* Down sample a factor 2 to save computations */ ++ ++ DownSample(enh_buf+(ENH_NBLOCKS_EXTRA+ioffset)*ENH_BLOCKL-120, ++ lpFilt_coefsTbl, inLen-ioffset*ENH_BLOCKL, ++ lpState, downsampled); ++ ++ /* Estimate the pitch in the down sampled domain. */ ++ for (iblock = 0; iblock maxcc) { ++ maxcc = cc; ++ lag = ilag; ++ } ++ } ++ ++ /* Store the estimated lag in the non-downsampled domain */ ++ enh_period[iblock+ENH_NBLOCKS_EXTRA+ioffset] = (float)lag*2; ++ ++ ++ } ++ ++ ++ /* PLC was performed on the previous packet */ ++ if (iLBCdec_inst->prev_enh_pl==1) { ++ ++ inlag=(int)enh_period[ENH_NBLOCKS_EXTRA+ioffset]; ++ ++ lag = inlag-1; ++ maxcc = xCorrCoef(in, in+lag, plc_blockl); ++ for (ilag=inlag; ilag<=inlag+1; ilag++) { ++ cc = xCorrCoef(in, in+ilag, plc_blockl); ++ ++ if (cc > maxcc) { ++ maxcc = cc; ++ lag = ilag; ++ } ++ } ++ ++ ++ ++ enh_period[ENH_NBLOCKS_EXTRA+ioffset-1]=(float)lag; ++ ++ /* compute new concealed residual for the old lookahead, ++ mix the forward PLC with a backward PLC from ++ the new frame */ ++ ++ inPtr=&in[lag-1]; ++ ++ enh_bufPtr1=&plc_pred[plc_blockl-1]; ++ ++ if (lag>plc_blockl) { ++ start=plc_blockl; ++ } else { ++ start=lag; ++ } ++ ++ for (isample = start; isample>0; isample--) { ++ *enh_bufPtr1-- = *inPtr--; ++ } ++ ++ enh_bufPtr2=&enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl]; ++ for (isample = (plc_blockl-1-lag); isample>=0; isample--) ++{ ++ *enh_bufPtr1-- = *enh_bufPtr2--; ++ } ++ ++ /* limit energy change */ ++ ftmp2=0.0; ++ ftmp1=0.0; ++ for (i=0;iblockl-i]* ++ enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl-i]; ++ ftmp1+=plc_pred[i]*plc_pred[i]; ++ } ++ ftmp1=(float)sqrt(ftmp1/(float)plc_blockl); ++ ftmp2=(float)sqrt(ftmp2/(float)plc_blockl); ++ if (ftmp1>(float)2.0*ftmp2 && ftmp1>0.0) { ++ for (i=0;iblockl]; ++ for (i=0; imode==20) { ++ /* Enhancer with 40 samples delay */ ++ for (iblock = 0; iblock<2; iblock++) { ++ enhancer(out+iblock*ENH_BLOCKL, enh_buf, ++ ENH_BUFL, (5+iblock)*ENH_BLOCKL+40, ++ ENH_ALPHA0, enh_period, enh_plocsTbl, ++ ENH_NBLOCKS_TOT); ++ } ++ } else if (iLBCdec_inst->mode==30) { ++ /* Enhancer with 80 samples delay */ ++ for (iblock = 0; iblock<3; iblock++) { ++ enhancer(out+iblock*ENH_BLOCKL, enh_buf, ++ ENH_BUFL, (4+iblock)*ENH_BLOCKL, ++ ENH_ALPHA0, enh_period, enh_plocsTbl, ++ ENH_NBLOCKS_TOT); ++ } ++ } ++ ++ return (lag*2); ++} ++ ++ +diff -druN codecs/ilbc.orig/enhancer.h codecs/ilbc/enhancer.h +--- codecs/ilbc.orig/enhancer.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/enhancer.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,33 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ enhancer.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __ENHANCER_H ++#define __ENHANCER_H ++ ++#include "iLBC_define.h" ++ ++float xCorrCoef( ++ float *target, /* (i) first array */ ++ float *regressor, /* (i) second array */ ++ int subl /* (i) dimension arrays */ ++); ++ ++int enhancerInterface( ++ float *out, /* (o) the enhanced recidual signal */ ++ float *in, /* (i) the recidual signal to enhance */ ++ iLBC_Dec_Inst_t *iLBCdec_inst ++ /* (i/o) the decoder state structure */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/filter.c codecs/ilbc/filter.c +--- codecs/ilbc.orig/filter.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/filter.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,168 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ filter.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++ ++ ++#include "iLBC_define.h" ++#include "filter.h" ++ ++/*----------------------------------------------------------------* ++ * all-pole filter ++ *---------------------------------------------------------------*/ ++ ++void AllPoleFilter( ++ float *InOut, /* (i/o) on entrance InOut[-orderCoef] to ++ InOut[-1] contain the state of the ++ filter (delayed samples). InOut[0] to ++ InOut[lengthInOut-1] contain the filter ++ input, on en exit InOut[-orderCoef] to ++ InOut[-1] is unchanged and InOut[0] to ++ InOut[lengthInOut-1] contain filtered ++ samples */ ++ float *Coef,/* (i) filter coefficients, Coef[0] is assumed ++ to be 1.0 */ ++ int lengthInOut,/* (i) number of input/output samples */ ++ int orderCoef /* (i) number of filter coefficients */ ++){ ++ int n,k; ++ ++ for(n=0;n ++#include ++#include "constants.h" ++#include "gainquant.h" ++#include "filter.h" ++ ++/*----------------------------------------------------------------* ++ * quantizer for the gain in the gain-shape coding of residual ++ *---------------------------------------------------------------*/ ++ ++float gainquant(/* (o) quantized gain value */ ++ float in, /* (i) gain value */ ++ float maxIn,/* (i) maximum of gain value */ ++ int cblen, /* (i) number of quantization indices */ ++ int *index /* (o) quantization index */ ++){ ++ int i, tindex; ++ float minmeasure,measure, *cb, scale; ++ ++ /* ensure a lower bound on the scaling factor */ ++ ++ scale=maxIn; ++ ++ if (scale<0.1) { ++ scale=(float)0.1; ++ } ++ ++ /* select the quantization table */ ++ ++ if (cblen == 8) { ++ cb = gain_sq3Tbl; ++ } else if (cblen == 16) { ++ cb = gain_sq4Tbl; ++ } else { ++ cb = gain_sq5Tbl; ++ } ++ ++ /* select the best index in the quantization table */ ++ ++ minmeasure=10000000.0; ++ tindex=0; ++ for (i=0; i ++ ++/*----------------------------------------------------------------* ++ * Construct codebook vector for given index. ++ *---------------------------------------------------------------*/ ++ ++void getCBvec( ++ float *cbvec, /* (o) Constructed codebook vector */ ++ float *mem, /* (i) Codebook buffer */ ++ int index, /* (i) Codebook index */ ++ int lMem, /* (i) Length of codebook buffer */ ++ int cbveclen/* (i) Codebook vector length */ ++){ ++ int j, k, n, memInd, sFilt; ++ float tmpbuf[CB_MEML]; ++ int base_size; ++ int ilow, ihigh; ++ float alfa, alfa1; ++ ++ /* Determine size of codebook sections */ ++ ++ base_size=lMem-cbveclen+1; ++ ++ if (cbveclen==SUBL) { ++ base_size+=cbveclen/2; ++ } ++ ++ /* No filter -> First codebook section */ ++ ++ ++ ++ if (index ++ ++#include "iLBC_define.h" ++#include "helpfun.h" ++#include "constants.h" ++ ++/*----------------------------------------------------------------* ++ * calculation of auto correlation ++ *---------------------------------------------------------------*/ ++ ++void autocorr( ++ float *r, /* (o) autocorrelation vector */ ++ const float *x, /* (i) data vector */ ++ int N, /* (i) length of data vector */ ++ int order /* largest lag for calculated ++ autocorrelations */ ++){ ++ int lag, n; ++ float sum; ++ ++ for (lag = 0; lag <= order; lag++) { ++ sum = 0; ++ for (n = 0; n < N - lag; n++) { ++ sum += x[n] * x[n+lag]; ++ } ++ r[lag] = sum; ++ } ++} ++ ++ ++ ++/*----------------------------------------------------------------* ++ * window multiplication ++ *---------------------------------------------------------------*/ ++ ++void window( ++ float *z, /* (o) the windowed data */ ++ const float *x, /* (i) the original data vector */ ++ const float *y, /* (i) the window */ ++ int N /* (i) length of all vectors */ ++){ ++ int i; ++ ++ for (i = 0; i < N; i++) { ++ z[i] = x[i] * y[i]; ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * levinson-durbin solution for lpc coefficients ++ *---------------------------------------------------------------*/ ++ ++void levdurb( ++ float *a, /* (o) lpc coefficient vector starting ++ with 1.0 */ ++ float *k, /* (o) reflection coefficients */ ++ float *r, /* (i) autocorrelation vector */ ++ int order /* (i) order of lpc filter */ ++){ ++ float sum, alpha; ++ int m, m_h, i; ++ ++ a[0] = 1.0; ++ ++ if (r[0] < EPS) { /* if r[0] <= 0, set LPC coeff. to zero */ ++ for (i = 0; i < order; i++) { ++ k[i] = 0; ++ a[i+1] = 0; ++ } ++ } else { ++ a[1] = k[0] = -r[1]/r[0]; ++ alpha = r[0] + r[1] * k[0]; ++ for (m = 1; m < order; m++){ ++ sum = r[m + 1]; ++ for (i = 0; i < m; i++){ ++ sum += a[i+1] * r[m - i]; ++ } ++ k[m] = -sum / alpha; ++ alpha += k[m] * sum; ++ m_h = (m + 1) >> 1; ++ for (i = 0; i < m_h; i++){ ++ sum = a[i+1] + k[m] * a[m - i]; ++ a[m - i] += k[m] * a[i+1]; ++ a[i+1] = sum; ++ ++ ++ } ++ a[m+1] = k[m]; ++ } ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * interpolation between vectors ++ *---------------------------------------------------------------*/ ++ ++void interpolate( ++ float *out, /* (o) the interpolated vector */ ++ float *in1, /* (i) the first vector for the ++ interpolation */ ++ float *in2, /* (i) the second vector for the ++ interpolation */ ++ float coef, /* (i) interpolation weights */ ++ int length /* (i) length of all vectors */ ++){ ++ int i; ++ float invcoef; ++ ++ invcoef = (float)1.0 - coef; ++ for (i = 0; i < length; i++) { ++ out[i] = coef * in1[i] + invcoef * in2[i]; ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * lpc bandwidth expansion ++ *---------------------------------------------------------------*/ ++ ++void bwexpand( ++ float *out, /* (o) the bandwidth expanded lpc ++ coefficients */ ++ float *in, /* (i) the lpc coefficients before bandwidth ++ expansion */ ++ float coef, /* (i) the bandwidth expansion factor */ ++ int length /* (i) the length of lpc coefficient vectors */ ++){ ++ int i; ++ float chirp; ++ ++ chirp = coef; ++ ++ out[0] = in[0]; ++ for (i = 1; i < length; i++) { ++ out[i] = chirp * in[i]; ++ chirp *= coef; ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * vector quantization ++ ++ ++ *---------------------------------------------------------------*/ ++ ++void vq( ++ float *Xq, /* (o) the quantized vector */ ++ int *index, /* (o) the quantization index */ ++ const float *CB,/* (i) the vector quantization codebook */ ++ float *X, /* (i) the vector to quantize */ ++ int n_cb, /* (i) the number of vectors in the codebook */ ++ int dim /* (i) the dimension of all vectors */ ++){ ++ int i, j; ++ int pos, minindex; ++ float dist, tmp, mindist; ++ ++ pos = 0; ++ mindist = FLOAT_MAX; ++ minindex = 0; ++ for (j = 0; j < n_cb; j++) { ++ dist = X[0] - CB[pos]; ++ dist *= dist; ++ for (i = 1; i < dim; i++) { ++ tmp = X[i] - CB[pos + i]; ++ dist += tmp*tmp; ++ } ++ ++ if (dist < mindist) { ++ mindist = dist; ++ minindex = j; ++ } ++ pos += dim; ++ } ++ for (i = 0; i < dim; i++) { ++ Xq[i] = CB[minindex*dim + i]; ++ } ++ *index = minindex; ++} ++ ++/*----------------------------------------------------------------* ++ * split vector quantization ++ *---------------------------------------------------------------*/ ++ ++void SplitVQ( ++ float *qX, /* (o) the quantized vector */ ++ int *index, /* (o) a vector of indexes for all vector ++ codebooks in the split */ ++ float *X, /* (i) the vector to quantize */ ++ const float *CB,/* (i) the quantizer codebook */ ++ int nsplit, /* the number of vector splits */ ++ const int *dim, /* the dimension of X and qX */ ++ const int *cbsize /* the number of vectors in the codebook */ ++){ ++ int cb_pos, X_pos, i; ++ ++ cb_pos = 0; ++ ++ ++ X_pos= 0; ++ for (i = 0; i < nsplit; i++) { ++ vq(qX + X_pos, index + i, CB + cb_pos, X + X_pos, ++ cbsize[i], dim[i]); ++ X_pos += dim[i]; ++ cb_pos += dim[i] * cbsize[i]; ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * scalar quantization ++ *---------------------------------------------------------------*/ ++ ++void sort_sq( ++ float *xq, /* (o) the quantized value */ ++ int *index, /* (o) the quantization index */ ++ float x, /* (i) the value to quantize */ ++ const float *cb,/* (i) the quantization codebook */ ++ int cb_size /* (i) the size of the quantization codebook */ ++){ ++ int i; ++ ++ if (x <= cb[0]) { ++ *index = 0; ++ *xq = cb[0]; ++ } else { ++ i = 0; ++ while ((x > cb[i]) && i < cb_size - 1) { ++ i++; ++ } ++ ++ if (x > ((cb[i] + cb[i - 1])/2)) { ++ *index = i; ++ *xq = cb[i]; ++ } else { ++ *index = i - 1; ++ *xq = cb[i - 1]; ++ } ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * check for stability of lsf coefficients ++ *---------------------------------------------------------------*/ ++ ++int LSF_check( /* (o) 1 for stable lsf vectors and 0 for ++ nonstable ones */ ++ float *lsf, /* (i) a table of lsf vectors */ ++ int dim, /* (i) the dimension of each lsf vector */ ++ int NoAn /* (i) the number of lsf vectors in the ++ table */ ++){ ++ int k,n,m, Nit=2, change=0,pos; ++ float tmp; ++ ++ ++ static float eps=(float)0.039; /* 50 Hz */ ++ static float eps2=(float)0.0195; ++ static float maxlsf=(float)3.14; /* 4000 Hz */ ++ static float minlsf=(float)0.01; /* 0 Hz */ ++ ++ /* LSF separation check*/ ++ ++ for (n=0; nmaxlsf) { ++ lsf[pos]=maxlsf; ++ change=1; ++ } ++ } ++ } ++ } ++ ++ return change; ++} ++ ++ +diff -druN codecs/ilbc.orig/helpfun.h codecs/ilbc/helpfun.h +--- codecs/ilbc.orig/helpfun.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/helpfun.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,101 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ helpfun.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __iLBC_HELPFUN_H ++#define __iLBC_HELPFUN_H ++ ++void autocorr( ++ float *r, /* (o) autocorrelation vector */ ++ const float *x, /* (i) data vector */ ++ int N, /* (i) length of data vector */ ++ int order /* largest lag for calculated ++ autocorrelations */ ++); ++ ++void window( ++ float *z, /* (o) the windowed data */ ++ const float *x, /* (i) the original data vector */ ++ const float *y, /* (i) the window */ ++ int N /* (i) length of all vectors */ ++); ++ ++ ++ ++void levdurb( ++ float *a, /* (o) lpc coefficient vector starting ++ with 1.0 */ ++ float *k, /* (o) reflection coefficients */ ++ float *r, /* (i) autocorrelation vector */ ++ int order /* (i) order of lpc filter */ ++); ++ ++void interpolate( ++ float *out, /* (o) the interpolated vector */ ++ float *in1, /* (i) the first vector for the ++ interpolation */ ++ float *in2, /* (i) the second vector for the ++ interpolation */ ++ float coef, /* (i) interpolation weights */ ++ int length /* (i) length of all vectors */ ++); ++ ++void bwexpand( ++ float *out, /* (o) the bandwidth expanded lpc ++ coefficients */ ++ float *in, /* (i) the lpc coefficients before bandwidth ++ expansion */ ++ float coef, /* (i) the bandwidth expansion factor */ ++ int length /* (i) the length of lpc coefficient vectors */ ++); ++ ++void vq( ++ float *Xq, /* (o) the quantized vector */ ++ int *index, /* (o) the quantization index */ ++ const float *CB,/* (i) the vector quantization codebook */ ++ float *X, /* (i) the vector to quantize */ ++ int n_cb, /* (i) the number of vectors in the codebook */ ++ int dim /* (i) the dimension of all vectors */ ++); ++ ++void SplitVQ( ++ float *qX, /* (o) the quantized vector */ ++ int *index, /* (o) a vector of indexes for all vector ++ codebooks in the split */ ++ float *X, /* (i) the vector to quantize */ ++ const float *CB,/* (i) the quantizer codebook */ ++ int nsplit, /* the number of vector splits */ ++ const int *dim, /* the dimension of X and qX */ ++ const int *cbsize /* the number of vectors in the codebook */ ++); ++ ++ ++void sort_sq( ++ float *xq, /* (o) the quantized value */ ++ int *index, /* (o) the quantization index */ ++ float x, /* (i) the value to quantize */ ++ const float *cb,/* (i) the quantization codebook */ ++ ++ ++ int cb_size /* (i) the size of the quantization codebook */ ++); ++ ++int LSF_check( /* (o) 1 for stable lsf vectors and 0 for ++ nonstable ones */ ++ float *lsf, /* (i) a table of lsf vectors */ ++ int dim, /* (i) the dimension of each lsf vector */ ++ int NoAn /* (i) the number of lsf vectors in the ++ table */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/hpInput.c codecs/ilbc/hpInput.c +--- codecs/ilbc.orig/hpInput.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/hpInput.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,60 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ hpInput.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include "constants.h" ++#include "hpInput.h" ++ ++/*----------------------------------------------------------------* ++ * Input high-pass filter ++ *---------------------------------------------------------------*/ ++ ++void hpInput( ++ float *In, /* (i) vector to filter */ ++ int len, /* (i) length of vector to filter */ ++ float *Out, /* (o) the resulting filtered vector */ ++ float *mem /* (i/o) the filter state */ ++){ ++ int i; ++ float *pi, *po; ++ ++ /* all-zero section*/ ++ ++ pi = &In[0]; ++ po = &Out[0]; ++ for (i=0; i ++ ++#include "iLBC_define.h" ++#include "iCBConstruct.h" ++#include "gainquant.h" ++#include "getCBvec.h" ++ ++/*----------------------------------------------------------------* ++ * Convert the codebook indexes to make the search easier ++ *---------------------------------------------------------------*/ ++ ++ ++ ++void index_conv_enc( ++ int *index /* (i/o) Codebook indexes */ ++){ ++ int k; ++ ++ for (k=1; k=108)&&(index[k]<172)) { ++ index[k]-=64; ++ } else if (index[k]>=236) { ++ index[k]-=128; ++ } else { ++ /* ERROR */ ++ } ++ } ++} ++ ++void index_conv_dec( ++ int *index /* (i/o) Codebook indexes */ ++){ ++ int k; ++ ++ for (k=1; k=44)&&(index[k]<108)) { ++ index[k]+=64; ++ } else if ((index[k]>=108)&&(index[k]<128)) { ++ index[k]+=128; ++ } else { ++ /* ERROR */ ++ } ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * Construct decoded vector from codebook and gains. ++ *---------------------------------------------------------------*/ ++ ++void iCBConstruct( ++ float *decvector, /* (o) Decoded vector */ ++ int *index, /* (i) Codebook indices */ ++ int *gain_index,/* (i) Gain quantization indices */ ++ float *mem, /* (i) Buffer for codevector construction */ ++ int lMem, /* (i) Length of buffer */ ++ int veclen, /* (i) Length of vector */ ++ int nStages /* (i) Number of codebook stages */ ++){ ++ int j,k; ++ float gain[CB_NSTAGES]; ++ float cbvec[SUBL]; ++ ++ /* gain de-quantization */ ++ ++ gain[0] = gaindequant(gain_index[0], 1.0, 32); ++ ++ ++ if (nStages > 1) { ++ gain[1] = gaindequant(gain_index[1], ++ (float)fabs(gain[0]), 16); ++ } ++ if (nStages > 2) { ++ gain[2] = gaindequant(gain_index[2], ++ (float)fabs(gain[1]), 8); ++ } ++ ++ /* codebook vector construction and construction of ++ total vector */ ++ ++ getCBvec(cbvec, mem, index[0], lMem, veclen); ++ for (j=0;j 1) { ++ for (k=1; k ++#include ++ ++#include "iLBC_define.h" ++#include "iCBSearch.h" ++#include "gainquant.h" ++#include "createCB.h" ++#include "filter.h" ++#include "constants.h" ++ ++/*----------------------------------------------------------------* ++ * Search routine for codebook encoding and gain quantization. ++ *---------------------------------------------------------------*/ ++ ++void iCBSearch( ++ iLBC_Enc_Inst_t *iLBCenc_inst, ++ /* (i) the encoder state structure */ ++ int *index, /* (o) Codebook indices */ ++ int *gain_index,/* (o) Gain quantization indices */ ++ float *intarget,/* (i) Target vector for encoding */ ++ float *mem, /* (i) Buffer for codebook construction */ ++ int lMem, /* (i) Length of buffer */ ++ int lTarget, /* (i) Length of vector */ ++ int nStages, /* (i) Number of codebook stages */ ++ float *weightDenum, /* (i) weighting filter coefficients */ ++ float *weightState, /* (i) weighting filter state */ ++ int block /* (i) the sub-block number */ ++){ ++ int i, j, icount, stage, best_index, range, counter; ++ float max_measure, gain, measure, crossDot, ftmp; ++ float gains[CB_NSTAGES]; ++ float target[SUBL]; ++ int base_index, sInd, eInd, base_size; ++ int sIndAug=0, eIndAug=0; ++ float buf[CB_MEML+SUBL+2*LPC_FILTERORDER]; ++ ++ ++ float invenergy[CB_EXPAND*128], energy[CB_EXPAND*128]; ++ float *pp, *ppi=0, *ppo=0, *ppe=0; ++ float cbvectors[CB_MEML]; ++ float tene, cene, cvec[SUBL]; ++ float aug_vec[SUBL]; ++ ++ memset(cvec,0,SUBL*sizeof(float)); ++ ++ /* Determine size of codebook sections */ ++ ++ base_size=lMem-lTarget+1; ++ ++ if (lTarget==SUBL) { ++ base_size=lMem-lTarget+1+lTarget/2; ++ } ++ ++ /* setup buffer for weighting */ ++ ++ memcpy(buf,weightState,sizeof(float)*LPC_FILTERORDER); ++ memcpy(buf+LPC_FILTERORDER,mem,lMem*sizeof(float)); ++ memcpy(buf+LPC_FILTERORDER+lMem,intarget,lTarget*sizeof(float)); ++ ++ /* weighting */ ++ ++ AllPoleFilter(buf+LPC_FILTERORDER, weightDenum, ++ lMem+lTarget, LPC_FILTERORDER); ++ ++ /* Construct the codebook and target needed */ ++ ++ memcpy(target, buf+LPC_FILTERORDER+lMem, lTarget*sizeof(float)); ++ ++ tene=0.0; ++ for (i=0; i0.0) { ++ invenergy[0] = (float) 1.0 / (*ppe + EPS); ++ } else { ++ invenergy[0] = (float) 0.0; ++ } ++ ppe++; ++ ++ measure=(float)-10000000.0; ++ ++ if (crossDot > 0.0) { ++ measure = crossDot*crossDot*invenergy[0]; ++ } ++ } ++ else { ++ measure = crossDot*crossDot*invenergy[0]; ++ } ++ ++ /* check if measure is better */ ++ ftmp = crossDot*invenergy[0]; ++ ++ if ((measure>max_measure) && (fabs(ftmp)0.0) { ++ invenergy[icount] = ++ (float)1.0/(energy[icount]+EPS); ++ } else { ++ invenergy[icount] = (float) 0.0; ++ } ++ ++ measure=(float)-10000000.0; ++ ++ if (crossDot > 0.0) { ++ measure = crossDot*crossDot*invenergy[icount]; ++ } ++ } ++ else { ++ measure = crossDot*crossDot*invenergy[icount]; ++ } ++ ++ /* check if measure is better */ ++ ftmp = crossDot*invenergy[icount]; ++ ++ if ((measure>max_measure) && (fabs(ftmp) range) { ++ sInd -= (eInd-range); ++ eInd = range; ++ } ++ } else { /* base_index >= (base_size-20) */ ++ ++ if (sInd < (base_size-20)) { ++ sIndAug = 20; ++ sInd = 0; ++ eInd = 0; ++ eIndAug = 19 + CB_RESRANGE; ++ ++ if(eIndAug > 39) { ++ eInd = eIndAug-39; ++ eIndAug = 39; ++ } ++ } else { ++ sIndAug = 20 + sInd - (base_size-20); ++ eIndAug = 39; ++ ++ ++ sInd = 0; ++ eInd = CB_RESRANGE - (eIndAug-sIndAug+1); ++ } ++ } ++ ++ } else { /* lTarget = 22 or 23 */ ++ ++ if (sInd < 0) { ++ eInd -= sInd; ++ sInd = 0; ++ } ++ ++ if(eInd > range) { ++ sInd -= (eInd - range); ++ eInd = range; ++ } ++ } ++ } ++ ++ /* search of higher codebook section */ ++ ++ /* index search range */ ++ counter = sInd; ++ sInd += base_size; ++ eInd += base_size; ++ ++ ++ if (stage==0) { ++ ppe = energy+base_size; ++ *ppe=0.0; ++ ++ pp=cbvectors+lMem-lTarget; ++ for (j=0; j0.0) { ++ invenergy[icount] =(float)1.0/(energy[icount]+EPS); ++ } else { ++ invenergy[icount] =(float)0.0; ++ } ++ ++ if (stage==0) { ++ ++ measure=(float)-10000000.0; ++ ++ if (crossDot > 0.0) { ++ measure = crossDot*crossDot* ++ invenergy[icount]; ++ } ++ } ++ else { ++ measure = crossDot*crossDot*invenergy[icount]; ++ } ++ ++ /* check if measure is better */ ++ ftmp = crossDot*invenergy[icount]; ++ ++ if ((measure>max_measure) && (fabs(ftmp)CB_MAXGAIN) { ++ gain = (float)CB_MAXGAIN; ++ } ++ gain = gainquant(gain, 1.0, 32, &gain_index[stage]); ++ } ++ else { ++ if (stage==1) { ++ gain = gainquant(gain, (float)fabs(gains[stage-1]), ++ 16, &gain_index[stage]); ++ } else { ++ gain = gainquant(gain, (float)fabs(gains[stage-1]), ++ 8, &gain_index[stage]); ++ } ++ } ++ ++ /* Extract the best (according to measure) ++ codebook vector */ ++ ++ if (lTarget==(STATE_LEN-iLBCenc_inst->state_short_len)) { ++ ++ if (index[stage] ++#include ++ ++#include "iLBC_define.h" ++#include "iLBC_decode.h" ++#include "StateConstructW.h" ++#include "LPCdecode.h" ++#include "iCBConstruct.h" ++#include "doCPLC.h" ++#include "helpfun.h" ++#include "constants.h" ++#include "packing.h" ++#include "string.h" ++#include "enhancer.h" ++#include "hpOutput.h" ++#include "syntFilter.h" ++ ++/*----------------------------------------------------------------* ++ * Initiation of decoder instance. ++ *---------------------------------------------------------------*/ ++ ++short initDecode( /* (o) Number of decoded ++ samples */ ++ iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) Decoder instance */ ++ int mode, /* (i) frame size mode */ ++ int use_enhancer /* (i) 1 to use enhancer ++ 0 to run without ++ enhancer */ ++){ ++ int i; ++ ++ iLBCdec_inst->mode = mode; ++ ++ if (mode==30) { ++ iLBCdec_inst->blockl = BLOCKL_30MS; ++ iLBCdec_inst->nsub = NSUB_30MS; ++ iLBCdec_inst->nasub = NASUB_30MS; ++ iLBCdec_inst->lpc_n = LPC_N_30MS; ++ ++ ++ iLBCdec_inst->no_of_bytes = NO_OF_BYTES_30MS; ++ iLBCdec_inst->no_of_words = NO_OF_WORDS_30MS; ++ iLBCdec_inst->state_short_len=STATE_SHORT_LEN_30MS; ++ /* ULP init */ ++ iLBCdec_inst->ULP_inst=&ULP_30msTbl; ++ } ++ else if (mode==20) { ++ iLBCdec_inst->blockl = BLOCKL_20MS; ++ iLBCdec_inst->nsub = NSUB_20MS; ++ iLBCdec_inst->nasub = NASUB_20MS; ++ iLBCdec_inst->lpc_n = LPC_N_20MS; ++ iLBCdec_inst->no_of_bytes = NO_OF_BYTES_20MS; ++ iLBCdec_inst->no_of_words = NO_OF_WORDS_20MS; ++ iLBCdec_inst->state_short_len=STATE_SHORT_LEN_20MS; ++ /* ULP init */ ++ iLBCdec_inst->ULP_inst=&ULP_20msTbl; ++ } ++ else { ++ exit(2); ++ } ++ ++ memset(iLBCdec_inst->syntMem, 0, ++ LPC_FILTERORDER*sizeof(float)); ++ memcpy((*iLBCdec_inst).lsfdeqold, lsfmeanTbl, ++ LPC_FILTERORDER*sizeof(float)); ++ ++ memset(iLBCdec_inst->old_syntdenum, 0, ++ ((LPC_FILTERORDER + 1)*NSUB_MAX)*sizeof(float)); ++ for (i=0; iold_syntdenum[i*(LPC_FILTERORDER+1)]=1.0; ++ ++ iLBCdec_inst->last_lag = 20; ++ ++ iLBCdec_inst->prevLag = 120; ++ iLBCdec_inst->per = 0.0; ++ iLBCdec_inst->consPLICount = 0; ++ iLBCdec_inst->prevPLI = 0; ++ iLBCdec_inst->prevLpc[0] = 1.0; ++ memset(iLBCdec_inst->prevLpc+1,0, ++ LPC_FILTERORDER*sizeof(float)); ++ memset(iLBCdec_inst->prevResidual, 0, BLOCKL_MAX*sizeof(float)); ++ iLBCdec_inst->seed=777; ++ ++ memset(iLBCdec_inst->hpomem, 0, 4*sizeof(float)); ++ ++ iLBCdec_inst->use_enhancer = use_enhancer; ++ memset(iLBCdec_inst->enh_buf, 0, ENH_BUFL*sizeof(float)); ++ for (i=0;ienh_period[i]=(float)40.0; ++ ++ iLBCdec_inst->prev_enh_pl = 0; ++ ++ return (iLBCdec_inst->blockl); ++} ++ ++ ++ ++/*----------------------------------------------------------------* ++ * frame residual decoder function (subrutine to iLBC_decode) ++ *---------------------------------------------------------------*/ ++ ++static void Decode( ++ iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) the decoder state ++ structure */ ++ float *decresidual, /* (o) decoded residual frame */ ++ int start, /* (i) location of start ++ state */ ++ int idxForMax, /* (i) codebook index for the ++ maximum value */ ++ int *idxVec, /* (i) codebook indexes for the ++ samples in the start ++ state */ ++ float *syntdenum, /* (i) the decoded synthesis ++ filter coefficients */ ++ int *cb_index, /* (i) the indexes for the ++ adaptive codebook */ ++ int *gain_index, /* (i) the indexes for the ++ corresponding gains */ ++ int *extra_cb_index, /* (i) the indexes for the ++ adaptive codebook part ++ of start state */ ++ int *extra_gain_index, /* (i) the indexes for the ++ corresponding gains */ ++ int state_first /* (i) 1 if non adaptive part ++ of start state comes ++ first 0 if that part ++ comes last */ ++){ ++ float reverseDecresidual[BLOCKL_MAX], mem[CB_MEML]; ++ int k, meml_gotten, Nfor, Nback, i; ++ int diff, start_pos; ++ int subcount, subframe; ++ ++ diff = STATE_LEN - iLBCdec_inst->state_short_len; ++ ++ if (state_first == 1) { ++ start_pos = (start-1)*SUBL; ++ } else { ++ start_pos = (start-1)*SUBL + diff; ++ } ++ ++ /* decode scalar part of start state */ ++ ++ StateConstructW(idxForMax, idxVec, ++ &syntdenum[(start-1)*(LPC_FILTERORDER+1)], ++ &decresidual[start_pos], iLBCdec_inst->state_short_len); ++ ++ ++ if (state_first) { /* put adaptive part in the end */ ++ ++ ++ ++ /* setup memory */ ++ ++ memset(mem, 0, ++ (CB_MEML-iLBCdec_inst->state_short_len)*sizeof(float)); ++ memcpy(mem+CB_MEML-iLBCdec_inst->state_short_len, ++ decresidual+start_pos, ++ iLBCdec_inst->state_short_len*sizeof(float)); ++ ++ /* construct decoded vector */ ++ ++ iCBConstruct( ++ &decresidual[start_pos+iLBCdec_inst->state_short_len], ++ extra_cb_index, extra_gain_index, mem+CB_MEML-stMemLTbl, ++ stMemLTbl, diff, CB_NSTAGES); ++ ++ } ++ else {/* put adaptive part in the beginning */ ++ ++ /* create reversed vectors for prediction */ ++ ++ for (k=0; kstate_short_len)]; ++ } ++ ++ /* setup memory */ ++ ++ meml_gotten = iLBCdec_inst->state_short_len; ++ for (k=0; knsub-start-1; ++ ++ ++ ++ if ( Nfor > 0 ){ ++ ++ /* setup memory */ ++ ++ memset(mem, 0, (CB_MEML-STATE_LEN)*sizeof(float)); ++ memcpy(mem+CB_MEML-STATE_LEN, decresidual+(start-1)*SUBL, ++ STATE_LEN*sizeof(float)); ++ ++ /* loop over sub-frames to encode */ ++ ++ for (subframe=0; subframe 0 ) { ++ ++ /* setup memory */ ++ ++ meml_gotten = SUBL*(iLBCdec_inst->nsub+1-start); ++ ++ if ( meml_gotten > CB_MEML ) { ++ meml_gotten=CB_MEML; ++ } ++ for (k=0; k0) { /* the data are good */ ++ ++ /* decode data */ ++ ++ pbytes=bytes; ++ pos=0; ++ ++ /* Set everything to zero before decoding */ ++ ++ for (k=0; kstate_short_len; k++) { ++ idxVec[k]=0; ++ } ++ for (k=0; knasub; i++) { ++ for (k=0; knasub; i++) { ++ for (k=0; klpc_n; k++){ ++ unpack( &pbytes, &lastpart, ++ iLBCdec_inst->ULP_inst->lsf_bits[k][ulp], &pos); ++ packcombine(&lsf_i[k], lastpart, ++ iLBCdec_inst->ULP_inst->lsf_bits[k][ulp]); ++ } ++ ++ ++ ++ /* Start block info */ ++ ++ unpack( &pbytes, &lastpart, ++ iLBCdec_inst->ULP_inst->start_bits[ulp], &pos); ++ packcombine(&start, lastpart, ++ iLBCdec_inst->ULP_inst->start_bits[ulp]); ++ ++ unpack( &pbytes, &lastpart, ++ iLBCdec_inst->ULP_inst->startfirst_bits[ulp], &pos); ++ packcombine(&state_first, lastpart, ++ iLBCdec_inst->ULP_inst->startfirst_bits[ulp]); ++ ++ unpack( &pbytes, &lastpart, ++ iLBCdec_inst->ULP_inst->scale_bits[ulp], &pos); ++ packcombine(&idxForMax, lastpart, ++ iLBCdec_inst->ULP_inst->scale_bits[ulp]); ++ ++ for (k=0; kstate_short_len; k++) { ++ unpack( &pbytes, &lastpart, ++ iLBCdec_inst->ULP_inst->state_bits[ulp], &pos); ++ packcombine(idxVec+k, lastpart, ++ iLBCdec_inst->ULP_inst->state_bits[ulp]); ++ } ++ ++ /* 23/22 (20ms/30ms) sample block */ ++ ++ for (k=0; kULP_inst->extra_cb_index[k][ulp], ++ &pos); ++ packcombine(extra_cb_index+k, lastpart, ++ iLBCdec_inst->ULP_inst->extra_cb_index[k][ulp]); ++ } ++ for (k=0; kULP_inst->extra_cb_gain[k][ulp], ++ &pos); ++ packcombine(extra_gain_index+k, lastpart, ++ iLBCdec_inst->ULP_inst->extra_cb_gain[k][ulp]); ++ } ++ ++ /* The two/four (20ms/30ms) 40 sample sub-blocks */ ++ ++ for (i=0; inasub; i++) { ++ for (k=0; kULP_inst->cb_index[i][k][ulp], ++ &pos); ++ packcombine(cb_index+i*CB_NSTAGES+k, lastpart, ++ iLBCdec_inst->ULP_inst->cb_index[i][k][ulp]); ++ } ++ } ++ ++ for (i=0; inasub; i++) { ++ ++ ++ for (k=0; kULP_inst->cb_gain[i][k][ulp], ++ &pos); ++ packcombine(gain_index+i*CB_NSTAGES+k, lastpart, ++ iLBCdec_inst->ULP_inst->cb_gain[i][k][ulp]); ++ } ++ } ++ } ++ /* Extract last bit. If it is 1 this indicates an ++ empty/lost frame */ ++ unpack( &pbytes, &last_bit, 1, &pos); ++ ++ /* Check for bit errors or empty/lost frames */ ++ if (start<1) ++ mode = 0; ++ if (iLBCdec_inst->mode==20 && start>3) ++ mode = 0; ++ if (iLBCdec_inst->mode==30 && start>5) ++ mode = 0; ++ if (last_bit==1) ++ mode = 0; ++ ++ if (mode==1) { /* No bit errors was detected, ++ continue decoding */ ++ ++ /* adjust index */ ++ index_conv_dec(cb_index); ++ ++ /* decode the lsf */ ++ ++ SimplelsfDEQ(lsfdeq, lsf_i, iLBCdec_inst->lpc_n); ++ check=LSF_check(lsfdeq, LPC_FILTERORDER, ++ iLBCdec_inst->lpc_n); ++ DecoderInterpolateLSF(syntdenum, weightdenum, ++ lsfdeq, LPC_FILTERORDER, iLBCdec_inst); ++ ++ Decode(iLBCdec_inst, decresidual, start, idxForMax, ++ idxVec, syntdenum, cb_index, gain_index, ++ extra_cb_index, extra_gain_index, ++ state_first); ++ ++ /* preparing the plc for a future loss! */ ++ ++ doThePLC(PLCresidual, PLClpc, 0, decresidual, ++ syntdenum + ++ (LPC_FILTERORDER + 1)*(iLBCdec_inst->nsub - 1), ++ (*iLBCdec_inst).last_lag, iLBCdec_inst); ++ ++ ++ memcpy(decresidual, PLCresidual, ++ iLBCdec_inst->blockl*sizeof(float)); ++ } ++ ++ ++ ++ } ++ ++ if (mode == 0) { ++ /* the data is bad (either a PLC call ++ * was made or a severe bit error was detected) ++ */ ++ ++ /* packet loss conceal */ ++ ++ memset(zeros, 0, BLOCKL_MAX*sizeof(float)); ++ ++ one[0] = 1; ++ memset(one+1, 0, LPC_FILTERORDER*sizeof(float)); ++ ++ start=0; ++ ++ doThePLC(PLCresidual, PLClpc, 1, zeros, one, ++ (*iLBCdec_inst).last_lag, iLBCdec_inst); ++ memcpy(decresidual, PLCresidual, ++ iLBCdec_inst->blockl*sizeof(float)); ++ ++ order_plus_one = LPC_FILTERORDER + 1; ++ for (i = 0; i < iLBCdec_inst->nsub; i++) { ++ memcpy(syntdenum+(i*order_plus_one), PLClpc, ++ order_plus_one*sizeof(float)); ++ } ++ } ++ ++ if (iLBCdec_inst->use_enhancer == 1) { ++ ++ /* post filtering */ ++ ++ iLBCdec_inst->last_lag = ++ enhancerInterface(data, decresidual, iLBCdec_inst); ++ ++ /* synthesis filtering */ ++ ++ if (iLBCdec_inst->mode==20) { ++ /* Enhancer has 40 samples delay */ ++ i=0; ++ syntFilter(data + i*SUBL, ++ iLBCdec_inst->old_syntdenum + ++ (i+iLBCdec_inst->nsub-1)*(LPC_FILTERORDER+1), ++ SUBL, iLBCdec_inst->syntMem); ++ for (i=1; i < iLBCdec_inst->nsub; i++) { ++ syntFilter(data + i*SUBL, ++ syntdenum + (i-1)*(LPC_FILTERORDER+1), ++ SUBL, iLBCdec_inst->syntMem); ++ } ++ } else if (iLBCdec_inst->mode==30) { ++ /* Enhancer has 80 samples delay */ ++ for (i=0; i < 2; i++) { ++ syntFilter(data + i*SUBL, ++ ++ ++ iLBCdec_inst->old_syntdenum + ++ (i+iLBCdec_inst->nsub-2)*(LPC_FILTERORDER+1), ++ SUBL, iLBCdec_inst->syntMem); ++ } ++ for (i=2; i < iLBCdec_inst->nsub; i++) { ++ syntFilter(data + i*SUBL, ++ syntdenum + (i-2)*(LPC_FILTERORDER+1), SUBL, ++ iLBCdec_inst->syntMem); ++ } ++ } ++ ++ } else { ++ ++ /* Find last lag */ ++ lag = 20; ++ maxcc = xCorrCoef(&decresidual[BLOCKL_MAX-ENH_BLOCKL], ++ &decresidual[BLOCKL_MAX-ENH_BLOCKL-lag], ENH_BLOCKL); ++ ++ for (ilag=21; ilag<120; ilag++) { ++ cc = xCorrCoef(&decresidual[BLOCKL_MAX-ENH_BLOCKL], ++ &decresidual[BLOCKL_MAX-ENH_BLOCKL-ilag], ++ ENH_BLOCKL); ++ ++ if (cc > maxcc) { ++ maxcc = cc; ++ lag = ilag; ++ } ++ } ++ iLBCdec_inst->last_lag = lag; ++ ++ /* copy data and run synthesis filter */ ++ ++ memcpy(data, decresidual, ++ iLBCdec_inst->blockl*sizeof(float)); ++ for (i=0; i < iLBCdec_inst->nsub; i++) { ++ syntFilter(data + i*SUBL, ++ syntdenum + i*(LPC_FILTERORDER+1), SUBL, ++ iLBCdec_inst->syntMem); ++ } ++ } ++ ++ /* high pass filtering on output if desired, otherwise ++ copy to out */ ++ ++ hpOutput(data, iLBCdec_inst->blockl, ++ decblock,iLBCdec_inst->hpomem); ++ ++ /* memcpy(decblock,data,iLBCdec_inst->blockl*sizeof(float));*/ ++ ++ memcpy(iLBCdec_inst->old_syntdenum, syntdenum, ++ ++ iLBCdec_inst->nsub*(LPC_FILTERORDER+1)*sizeof(float)); ++ ++ iLBCdec_inst->prev_enh_pl=0; ++ ++ ++ ++ if (mode==0) { /* PLC was used */ ++ iLBCdec_inst->prev_enh_pl=1; ++ } ++} ++ ++ +diff -druN codecs/ilbc.orig/iLBC_decode.h codecs/ilbc/iLBC_decode.h +--- codecs/ilbc.orig/iLBC_decode.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/iLBC_decode.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,40 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ iLBC_decode.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __iLBC_ILBCDECODE_H ++#define __iLBC_ILBCDECODE_H ++ ++#include "iLBC_define.h" ++ ++short initDecode( /* (o) Number of decoded ++ samples */ ++ iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) Decoder instance */ ++ int mode, /* (i) frame size mode */ ++ int use_enhancer /* (i) 1 to use enhancer ++ 0 to run without ++ enhancer */ ++); ++ ++void iLBC_decode( ++ float *decblock, /* (o) decoded signal block */ ++ unsigned char *bytes, /* (i) encoded signal bits */ ++ iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) the decoder state ++ structure */ ++ int mode /* (i) 0: bad packet, PLC, ++ 1: normal */ ++); ++ ++ ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/iLBC_define.h codecs/ilbc/iLBC_define.h +--- codecs/ilbc.orig/iLBC_define.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/iLBC_define.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,201 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ iLBC_define.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++#include ++ ++#ifndef __iLBC_ILBCDEFINE_H ++#define __iLBC_ILBCDEFINE_H ++ ++/* general codec settings */ ++ ++#define FS (float)8000.0 ++#define BLOCKL_20MS 160 ++#define BLOCKL_30MS 240 ++#define BLOCKL_MAX 240 ++#define NSUB_20MS 4 ++#define NSUB_30MS 6 ++#define NSUB_MAX 6 ++#define NASUB_20MS 2 ++#define NASUB_30MS 4 ++#define NASUB_MAX 4 ++#define SUBL 40 ++#define STATE_LEN 80 ++#define STATE_SHORT_LEN_30MS 58 ++#define STATE_SHORT_LEN_20MS 57 ++ ++/* LPC settings */ ++ ++#define LPC_FILTERORDER 10 ++#define LPC_CHIRP_SYNTDENUM (float)0.9025 ++#define LPC_CHIRP_WEIGHTDENUM (float)0.4222 ++#define LPC_LOOKBACK 60 ++#define LPC_N_20MS 1 ++#define LPC_N_30MS 2 ++#define LPC_N_MAX 2 ++#define LPC_ASYMDIFF 20 ++#define LPC_BW (float)60.0 ++#define LPC_WN (float)1.0001 ++#define LSF_NSPLIT 3 ++ ++#define LSF_NUMBER_OF_STEPS 4 ++#define LPC_HALFORDER (LPC_FILTERORDER/2) ++ ++/* cb settings */ ++ ++#define CB_NSTAGES 3 ++#define CB_EXPAND 2 ++#define CB_MEML 147 ++#define CB_FILTERLEN 2*4 ++#define CB_HALFFILTERLEN 4 ++#define CB_RESRANGE 34 ++#define CB_MAXGAIN (float)1.3 ++ ++/* enhancer */ ++ ++#define ENH_BLOCKL 80 /* block length */ ++#define ENH_BLOCKL_HALF (ENH_BLOCKL/2) ++#define ENH_HL 3 /* 2*ENH_HL+1 is number blocks ++ in said second sequence */ ++#define ENH_SLOP 2 /* max difference estimated and ++ correct pitch period */ ++#define ENH_PLOCSL 20 /* pitch-estimates and pitch- ++ locations buffer length */ ++#define ENH_OVERHANG 2 ++#define ENH_UPS0 4 /* upsampling rate */ ++#define ENH_FL0 3 /* 2*FLO+1 is the length of ++ each filter */ ++#define ENH_VECTL (ENH_BLOCKL+2*ENH_FL0) ++#define ENH_CORRDIM (2*ENH_SLOP+1) ++#define ENH_NBLOCKS (BLOCKL_MAX/ENH_BLOCKL) ++#define ENH_NBLOCKS_EXTRA 5 ++#define ENH_NBLOCKS_TOT 8 /* ENH_NBLOCKS + ++ ENH_NBLOCKS_EXTRA */ ++#define ENH_BUFL (ENH_NBLOCKS_TOT)*ENH_BLOCKL ++#define ENH_ALPHA0 (float)0.05 ++ ++/* Down sampling */ ++ ++#define FILTERORDER_DS 7 ++#define DELAY_DS 3 ++#define FACTOR_DS 2 ++ ++/* bit stream defs */ ++ ++#define NO_OF_BYTES_20MS 38 ++#define NO_OF_BYTES_30MS 50 ++#define NO_OF_WORDS_20MS 19 ++#define NO_OF_WORDS_30MS 25 ++#define STATE_BITS 3 ++#define BYTE_LEN 8 ++#define ULP_CLASSES 3 ++ ++/* help parameters */ ++ ++ ++#define FLOAT_MAX (float)1.0e37 ++#define EPS (float)2.220446049250313e-016 ++#define PI (float)3.14159265358979323846 ++#define MIN_SAMPLE -32768 ++#define MAX_SAMPLE 32767 ++#define TWO_PI (float)6.283185307 ++#define PI2 (float)0.159154943 ++ ++/* type definition encoder instance */ ++typedef struct iLBC_ULP_Inst_t_ { ++ int lsf_bits[6][ULP_CLASSES+2]; ++ int start_bits[ULP_CLASSES+2]; ++ int startfirst_bits[ULP_CLASSES+2]; ++ int scale_bits[ULP_CLASSES+2]; ++ int state_bits[ULP_CLASSES+2]; ++ int extra_cb_index[CB_NSTAGES][ULP_CLASSES+2]; ++ int extra_cb_gain[CB_NSTAGES][ULP_CLASSES+2]; ++ int cb_index[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2]; ++ int cb_gain[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2]; ++} iLBC_ULP_Inst_t; ++ ++/* type definition encoder instance */ ++typedef struct iLBC_Enc_Inst_t_ { ++ ++ /* flag for frame size mode */ ++ int mode; ++ ++ /* basic parameters for different frame sizes */ ++ int blockl; ++ int nsub; ++ int nasub; ++ int no_of_bytes, no_of_words; ++ int lpc_n; ++ int state_short_len; ++ const iLBC_ULP_Inst_t *ULP_inst; ++ ++ /* analysis filter state */ ++ float anaMem[LPC_FILTERORDER]; ++ ++ /* old lsf parameters for interpolation */ ++ float lsfold[LPC_FILTERORDER]; ++ float lsfdeqold[LPC_FILTERORDER]; ++ ++ /* signal buffer for LP analysis */ ++ float lpc_buffer[LPC_LOOKBACK + BLOCKL_MAX]; ++ ++ /* state of input HP filter */ ++ float hpimem[4]; ++ ++} iLBC_Enc_Inst_t; ++ ++/* type definition decoder instance */ ++typedef struct iLBC_Dec_Inst_t_ { ++ ++ ++ /* flag for frame size mode */ ++ int mode; ++ ++ /* basic parameters for different frame sizes */ ++ int blockl; ++ int nsub; ++ int nasub; ++ int no_of_bytes, no_of_words; ++ int lpc_n; ++ int state_short_len; ++ const iLBC_ULP_Inst_t *ULP_inst; ++ ++ /* synthesis filter state */ ++ float syntMem[LPC_FILTERORDER]; ++ ++ /* old LSF for interpolation */ ++ float lsfdeqold[LPC_FILTERORDER]; ++ ++ /* pitch lag estimated in enhancer and used in PLC */ ++ int last_lag; ++ ++ /* PLC state information */ ++ int prevLag, consPLICount, prevPLI, prev_enh_pl; ++ float prevLpc[LPC_FILTERORDER+1]; ++ float prevResidual[NSUB_MAX*SUBL]; ++ float per; ++ unsigned long seed; ++ ++ /* previous synthesis filter parameters */ ++ float old_syntdenum[(LPC_FILTERORDER + 1)*NSUB_MAX]; ++ ++ /* state of output HP filter */ ++ float hpomem[4]; ++ ++ /* enhancer state information */ ++ int use_enhancer; ++ float enh_buf[ENH_BUFL]; ++ float enh_period[ENH_NBLOCKS_TOT]; ++ ++} iLBC_Dec_Inst_t; ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/iLBC_encode.c codecs/ilbc/iLBC_encode.c +--- codecs/ilbc.orig/iLBC_encode.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/iLBC_encode.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,514 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ iLBC_encode.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include ++#include ++#include ++ ++#include "iLBC_define.h" ++#include "iLBC_encode.h" ++#include "LPCencode.h" ++#include "FrameClassify.h" ++#include "StateSearchW.h" ++#include "StateConstructW.h" ++#include "helpfun.h" ++#include "constants.h" ++#include "packing.h" ++#include "iCBSearch.h" ++#include "iCBConstruct.h" ++#include "hpInput.h" ++#include "anaFilter.h" ++#include "syntFilter.h" ++ ++/*----------------------------------------------------------------* ++ * Initiation of encoder instance. ++ *---------------------------------------------------------------*/ ++ ++short initEncode( /* (o) Number of bytes ++ encoded */ ++ iLBC_Enc_Inst_t *iLBCenc_inst, /* (i/o) Encoder instance */ ++ int mode /* (i) frame size mode */ ++){ ++ iLBCenc_inst->mode = mode; ++ if (mode==30) { ++ iLBCenc_inst->blockl = BLOCKL_30MS; ++ iLBCenc_inst->nsub = NSUB_30MS; ++ ++ ++ iLBCenc_inst->nasub = NASUB_30MS; ++ iLBCenc_inst->lpc_n = LPC_N_30MS; ++ iLBCenc_inst->no_of_bytes = NO_OF_BYTES_30MS; ++ iLBCenc_inst->no_of_words = NO_OF_WORDS_30MS; ++ iLBCenc_inst->state_short_len=STATE_SHORT_LEN_30MS; ++ /* ULP init */ ++ iLBCenc_inst->ULP_inst=&ULP_30msTbl; ++ } ++ else if (mode==20) { ++ iLBCenc_inst->blockl = BLOCKL_20MS; ++ iLBCenc_inst->nsub = NSUB_20MS; ++ iLBCenc_inst->nasub = NASUB_20MS; ++ iLBCenc_inst->lpc_n = LPC_N_20MS; ++ iLBCenc_inst->no_of_bytes = NO_OF_BYTES_20MS; ++ iLBCenc_inst->no_of_words = NO_OF_WORDS_20MS; ++ iLBCenc_inst->state_short_len=STATE_SHORT_LEN_20MS; ++ /* ULP init */ ++ iLBCenc_inst->ULP_inst=&ULP_20msTbl; ++ } ++ else { ++ exit(2); ++ } ++ ++ memset((*iLBCenc_inst).anaMem, 0, ++ LPC_FILTERORDER*sizeof(float)); ++ memcpy((*iLBCenc_inst).lsfold, lsfmeanTbl, ++ LPC_FILTERORDER*sizeof(float)); ++ memcpy((*iLBCenc_inst).lsfdeqold, lsfmeanTbl, ++ LPC_FILTERORDER*sizeof(float)); ++ memset((*iLBCenc_inst).lpc_buffer, 0, ++ (LPC_LOOKBACK+BLOCKL_MAX)*sizeof(float)); ++ memset((*iLBCenc_inst).hpimem, 0, 4*sizeof(float)); ++ ++ return (iLBCenc_inst->no_of_bytes); ++} ++ ++/*----------------------------------------------------------------* ++ * main encoder function ++ *---------------------------------------------------------------*/ ++ ++void iLBC_encode( ++ unsigned char *bytes, /* (o) encoded data bits iLBC */ ++ float *block, /* (o) speech vector to ++ encode */ ++ iLBC_Enc_Inst_t *iLBCenc_inst /* (i/o) the general encoder ++ state */ ++){ ++ ++ float data[BLOCKL_MAX]; ++ float residual[BLOCKL_MAX], reverseResidual[BLOCKL_MAX]; ++ ++ int start, idxForMax, idxVec[STATE_LEN]; ++ float reverseDecresidual[BLOCKL_MAX], mem[CB_MEML]; ++ int n, k, meml_gotten, Nfor, Nback, i, pos; ++ ++ ++ int gain_index[CB_NSTAGES*NASUB_MAX], ++ extra_gain_index[CB_NSTAGES]; ++ int cb_index[CB_NSTAGES*NASUB_MAX],extra_cb_index[CB_NSTAGES]; ++ int lsf_i[LSF_NSPLIT*LPC_N_MAX]; ++ unsigned char *pbytes; ++ int diff, start_pos, state_first; ++ float en1, en2; ++ int index, ulp, firstpart; ++ int subcount, subframe; ++ float weightState[LPC_FILTERORDER]; ++ float syntdenum[NSUB_MAX*(LPC_FILTERORDER+1)]; ++ float weightdenum[NSUB_MAX*(LPC_FILTERORDER+1)]; ++ float decresidual[BLOCKL_MAX]; ++ ++ /* high pass filtering of input signal if such is not done ++ prior to calling this function */ ++ ++ hpInput(block, iLBCenc_inst->blockl, ++ data, (*iLBCenc_inst).hpimem); ++ ++ /* otherwise simply copy */ ++ ++ /*memcpy(data,block,iLBCenc_inst->blockl*sizeof(float));*/ ++ ++ /* LPC of hp filtered input data */ ++ ++ LPCencode(syntdenum, weightdenum, lsf_i, data, iLBCenc_inst); ++ ++ ++ /* inverse filter to get residual */ ++ ++ for (n=0; nnsub; n++) { ++ anaFilter(&data[n*SUBL], &syntdenum[n*(LPC_FILTERORDER+1)], ++ SUBL, &residual[n*SUBL], iLBCenc_inst->anaMem); ++ } ++ ++ /* find state location */ ++ ++ start = FrameClassify(iLBCenc_inst, residual); ++ ++ /* check if state should be in first or last part of the ++ two subframes */ ++ ++ diff = STATE_LEN - iLBCenc_inst->state_short_len; ++ en1 = 0; ++ index = (start-1)*SUBL; ++ for (i = 0; i < iLBCenc_inst->state_short_len; i++) { ++ en1 += residual[index+i]*residual[index+i]; ++ } ++ en2 = 0; ++ index = (start-1)*SUBL+diff; ++ for (i = 0; i < iLBCenc_inst->state_short_len; i++) { ++ en2 += residual[index+i]*residual[index+i]; ++ } ++ ++ ++ ++ ++ if (en1 > en2) { ++ state_first = 1; ++ start_pos = (start-1)*SUBL; ++ } else { ++ state_first = 0; ++ start_pos = (start-1)*SUBL + diff; ++ } ++ ++ /* scalar quantization of state */ ++ ++ StateSearchW(iLBCenc_inst, &residual[start_pos], ++ &syntdenum[(start-1)*(LPC_FILTERORDER+1)], ++ &weightdenum[(start-1)*(LPC_FILTERORDER+1)], &idxForMax, ++ idxVec, iLBCenc_inst->state_short_len, state_first); ++ ++ StateConstructW(idxForMax, idxVec, ++ &syntdenum[(start-1)*(LPC_FILTERORDER+1)], ++ &decresidual[start_pos], iLBCenc_inst->state_short_len); ++ ++ /* predictive quantization in state */ ++ ++ if (state_first) { /* put adaptive part in the end */ ++ ++ /* setup memory */ ++ ++ memset(mem, 0, ++ (CB_MEML-iLBCenc_inst->state_short_len)*sizeof(float)); ++ memcpy(mem+CB_MEML-iLBCenc_inst->state_short_len, ++ decresidual+start_pos, ++ iLBCenc_inst->state_short_len*sizeof(float)); ++ memset(weightState, 0, LPC_FILTERORDER*sizeof(float)); ++ ++ /* encode sub-frames */ ++ ++ iCBSearch(iLBCenc_inst, extra_cb_index, extra_gain_index, ++ &residual[start_pos+iLBCenc_inst->state_short_len], ++ mem+CB_MEML-stMemLTbl, ++ stMemLTbl, diff, CB_NSTAGES, ++ &weightdenum[start*(LPC_FILTERORDER+1)], ++ weightState, 0); ++ ++ /* construct decoded vector */ ++ ++ iCBConstruct( ++ &decresidual[start_pos+iLBCenc_inst->state_short_len], ++ extra_cb_index, extra_gain_index, ++ mem+CB_MEML-stMemLTbl, ++ stMemLTbl, diff, CB_NSTAGES); ++ ++ } ++ else { /* put adaptive part in the beginning */ ++ ++ ++ ++ /* create reversed vectors for prediction */ ++ ++ for (k=0; kstate_short_len)]; ++ } ++ ++ /* setup memory */ ++ ++ meml_gotten = iLBCenc_inst->state_short_len; ++ for (k=0; knsub-start-1; ++ ++ ++ if ( Nfor > 0 ) { ++ ++ /* setup memory */ ++ ++ memset(mem, 0, (CB_MEML-STATE_LEN)*sizeof(float)); ++ memcpy(mem+CB_MEML-STATE_LEN, decresidual+(start-1)*SUBL, ++ STATE_LEN*sizeof(float)); ++ memset(weightState, 0, LPC_FILTERORDER*sizeof(float)); ++ ++ ++ ++ /* loop over sub-frames to encode */ ++ ++ for (subframe=0; subframe 0 ) { ++ ++ /* create reverse order vectors */ ++ ++ for (n=0; nnsub+1-start); ++ ++ ++ if ( meml_gotten > CB_MEML ) { ++ meml_gotten=CB_MEML; ++ } ++ for (k=0; klpc_n; k++) { ++ packsplit(&lsf_i[k], &firstpart, &lsf_i[k], ++ iLBCenc_inst->ULP_inst->lsf_bits[k][ulp], ++ iLBCenc_inst->ULP_inst->lsf_bits[k][ulp]+ ++ iLBCenc_inst->ULP_inst->lsf_bits[k][ulp+1]+ ++ iLBCenc_inst->ULP_inst->lsf_bits[k][ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->lsf_bits[k][ulp], &pos); ++ } ++ ++ /* Start block info */ ++ ++ packsplit(&start, &firstpart, &start, ++ iLBCenc_inst->ULP_inst->start_bits[ulp], ++ iLBCenc_inst->ULP_inst->start_bits[ulp]+ ++ iLBCenc_inst->ULP_inst->start_bits[ulp+1]+ ++ iLBCenc_inst->ULP_inst->start_bits[ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->start_bits[ulp], &pos); ++ ++ packsplit(&state_first, &firstpart, &state_first, ++ iLBCenc_inst->ULP_inst->startfirst_bits[ulp], ++ iLBCenc_inst->ULP_inst->startfirst_bits[ulp]+ ++ iLBCenc_inst->ULP_inst->startfirst_bits[ulp+1]+ ++ iLBCenc_inst->ULP_inst->startfirst_bits[ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->startfirst_bits[ulp], &pos); ++ ++ packsplit(&idxForMax, &firstpart, &idxForMax, ++ iLBCenc_inst->ULP_inst->scale_bits[ulp], ++ iLBCenc_inst->ULP_inst->scale_bits[ulp]+ ++ iLBCenc_inst->ULP_inst->scale_bits[ulp+1]+ ++ iLBCenc_inst->ULP_inst->scale_bits[ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->scale_bits[ulp], &pos); ++ ++ ++ ++ for (k=0; kstate_short_len; k++) { ++ packsplit(idxVec+k, &firstpart, idxVec+k, ++ iLBCenc_inst->ULP_inst->state_bits[ulp], ++ iLBCenc_inst->ULP_inst->state_bits[ulp]+ ++ iLBCenc_inst->ULP_inst->state_bits[ulp+1]+ ++ iLBCenc_inst->ULP_inst->state_bits[ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->state_bits[ulp], &pos); ++ } ++ ++ /* 23/22 (20ms/30ms) sample block */ ++ ++ for (k=0;kULP_inst->extra_cb_index[k][ulp], ++ iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp]+ ++ iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp+1]+ ++ iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp], ++ &pos); ++ } ++ ++ for (k=0;kULP_inst->extra_cb_gain[k][ulp], ++ iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp]+ ++ iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp+1]+ ++ iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp], ++ &pos); ++ } ++ ++ /* The two/four (20ms/30ms) 40 sample sub-blocks */ ++ ++ for (i=0; inasub; i++) { ++ for (k=0; kULP_inst->cb_index[i][k][ulp], ++ iLBCenc_inst->ULP_inst->cb_index[i][k][ulp]+ ++ iLBCenc_inst->ULP_inst->cb_index[i][k][ulp+1]+ ++ iLBCenc_inst->ULP_inst->cb_index[i][k][ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->cb_index[i][k][ulp], ++ &pos); ++ } ++ } ++ ++ for (i=0; inasub; i++) { ++ for (k=0; kULP_inst->cb_gain[i][k][ulp], ++ iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp]+ ++ iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp+1]+ ++ iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp+2]); ++ dopack( &pbytes, firstpart, ++ iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp], ++ &pos); ++ } ++ } ++ } ++ ++ /* set the last bit to zero (otherwise the decoder ++ will treat it as a lost frame) */ ++ dopack( &pbytes, 0, 1, &pos); ++} ++ ++ ++ +diff -druN codecs/ilbc.orig/iLBC_encode.h codecs/ilbc/iLBC_encode.h +--- codecs/ilbc.orig/iLBC_encode.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/iLBC_encode.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,37 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ iLBC_encode.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __iLBC_ILBCENCODE_H ++#define __iLBC_ILBCENCODE_H ++ ++#include "iLBC_define.h" ++ ++short initEncode( /* (o) Number of bytes ++ encoded */ ++ iLBC_Enc_Inst_t *iLBCenc_inst, /* (i/o) Encoder instance */ ++ int mode /* (i) frame size mode */ ++); ++ ++void iLBC_encode( ++ ++ ++ unsigned char *bytes, /* (o) encoded data bits iLBC */ ++ float *block, /* (o) speech vector to ++ encode */ ++ iLBC_Enc_Inst_t *iLBCenc_inst /* (i/o) the general encoder ++ state */ ++); ++ ++#endif ++ ++ ++ +Files codecs/ilbc.orig/libilbc.a and codecs/ilbc/libilbc.a differ +diff -druN codecs/ilbc.orig/libilbc.vcproj codecs/ilbc/libilbc.vcproj +--- codecs/ilbc.orig/libilbc.vcproj 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/libilbc.vcproj 2006-03-20 13:25:50.000000000 -0800 +@@ -0,0 +1,353 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff -druN codecs/ilbc.orig/lsf.c codecs/ilbc/lsf.c +--- codecs/ilbc.orig/lsf.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/lsf.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,264 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ lsf.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include ++#include ++ ++#include "iLBC_define.h" ++#include "lsf.h" ++ ++/*----------------------------------------------------------------* ++ * conversion from lpc coefficients to lsf coefficients ++ *---------------------------------------------------------------*/ ++ ++void a2lsf( ++ float *freq,/* (o) lsf coefficients */ ++ float *a /* (i) lpc coefficients */ ++){ ++ float steps[LSF_NUMBER_OF_STEPS] = ++ {(float)0.00635, (float)0.003175, (float)0.0015875, ++ (float)0.00079375}; ++ float step; ++ int step_idx; ++ int lsp_index; ++ float p[LPC_HALFORDER]; ++ float q[LPC_HALFORDER]; ++ float p_pre[LPC_HALFORDER]; ++ ++ ++ float q_pre[LPC_HALFORDER]; ++ float old_p, old_q, *old; ++ float *pq_coef; ++ float omega, old_omega; ++ int i; ++ float hlp, hlp1, hlp2, hlp3, hlp4, hlp5; ++ ++ for (i=0; i= 0.5)){ ++ ++ if (step_idx == (LSF_NUMBER_OF_STEPS - 1)){ ++ ++ if (fabs(hlp5) >= fabs(*old)) { ++ freq[lsp_index] = omega - step; ++ } else { ++ freq[lsp_index] = omega; ++ } ++ ++ ++ if ((*old) >= 0.0){ ++ *old = (float)-1.0 * FLOAT_MAX; ++ } else { ++ *old = FLOAT_MAX; ++ } ++ ++ omega = old_omega; ++ step_idx = 0; ++ ++ step_idx = LSF_NUMBER_OF_STEPS; ++ } else { ++ ++ if (step_idx == 0) { ++ old_omega = omega; ++ } ++ ++ step_idx++; ++ omega -= steps[step_idx]; ++ ++ /* Go back one grid step */ ++ ++ step = steps[step_idx]; ++ } ++ } else { ++ ++ /* increment omega until they are of different sign, ++ and we know there is at least one root between omega ++ and old_omega */ ++ *old = hlp5; ++ omega += step; ++ } ++ ++ ++ } ++ } ++ ++ for (i = 0; i= 0.5)){ ++ ++ ++ if (freq[0] <= 0.0) { ++ freq[0] = (float)0.022; ++ } ++ ++ ++ if (freq[LPC_FILTERORDER - 1] >= 0.5) { ++ freq[LPC_FILTERORDER - 1] = (float)0.499; ++ } ++ ++ hlp = (freq[LPC_FILTERORDER - 1] - freq[0]) / ++ (float) (LPC_FILTERORDER - 1); ++ ++ for (i=1; i ++#include ++ ++#include "iLBC_define.h" ++#include "constants.h" ++#include "helpfun.h" ++#include "packing.h" ++#include "string.h" ++ ++/*----------------------------------------------------------------* ++ * splitting an integer into first most significant bits and ++ * remaining least significant bits ++ *---------------------------------------------------------------*/ ++ ++void packsplit( ++ int *index, /* (i) the value to split */ ++ int *firstpart, /* (o) the value specified by most ++ significant bits */ ++ int *rest, /* (o) the value specified by least ++ significant bits */ ++ int bitno_firstpart, /* (i) number of bits in most ++ significant part */ ++ int bitno_total /* (i) number of bits in full range ++ of value */ ++){ ++ int bitno_rest = bitno_total-bitno_firstpart; ++ ++ ++ ++ *firstpart = *index>>(bitno_rest); ++ *rest = *index-(*firstpart<<(bitno_rest)); ++} ++ ++/*----------------------------------------------------------------* ++ * combining a value corresponding to msb's with a value ++ * corresponding to lsb's ++ *---------------------------------------------------------------*/ ++ ++void packcombine( ++ int *index, /* (i/o) the msb value in the ++ combined value out */ ++ int rest, /* (i) the lsb value */ ++ int bitno_rest /* (i) the number of bits in the ++ lsb part */ ++){ ++ *index = *index<0) { ++ ++ /* Jump to the next byte if end of this byte is reached*/ ++ ++ if (*pos==8) { ++ *pos=0; ++ (*bitstream)++; ++ **bitstream=0; ++ } ++ ++ ++ ++ posLeft=8-(*pos); ++ ++ /* Insert index into the bitstream */ ++ ++ if (bitno <= posLeft) { ++ **bitstream |= (unsigned char)(index<<(posLeft-bitno)); ++ *pos+=bitno; ++ bitno=0; ++ } else { ++ **bitstream |= (unsigned char)(index>>(bitno-posLeft)); ++ ++ *pos=8; ++ index-=((index>>(bitno-posLeft))<<(bitno-posLeft)); ++ ++ bitno-=posLeft; ++ } ++ } ++} ++ ++/*----------------------------------------------------------------* ++ * unpacking of bits from bitstream, i.e., vector of bytes ++ *---------------------------------------------------------------*/ ++ ++void unpack( ++ unsigned char **bitstream, /* (i/o) on entrance pointer to ++ place in bitstream to ++ unpack new data from, on ++ exit pointer to place in ++ bitstream to unpack future ++ data from */ ++ int *index, /* (o) resulting value */ ++ int bitno, /* (i) number of bits used to ++ represent the value */ ++ int *pos /* (i/o) read position in the ++ current byte */ ++){ ++ int BitsLeft; ++ ++ *index=0; ++ ++ while (bitno>0) { ++ ++ /* move forward in bitstream when the end of the ++ byte is reached */ ++ ++ if (*pos==8) { ++ *pos=0; ++ (*bitstream)++; ++ } ++ ++ BitsLeft=8-(*pos); ++ ++ /* Extract bits to index */ ++ ++ ++ ++ if (BitsLeft>=bitno) { ++ *index+=((((**bitstream)<<(*pos)) & 0xFF)>>(8-bitno)); ++ ++ *pos+=bitno; ++ bitno=0; ++ } else { ++ ++ if ((8-bitno)>0) { ++ *index+=((((**bitstream)<<(*pos)) & 0xFF)>> ++ (8-bitno)); ++ *pos=8; ++ } else { ++ *index+=(((int)(((**bitstream)<<(*pos)) & 0xFF))<< ++ (bitno-8)); ++ *pos=8; ++ } ++ bitno-=BitsLeft; ++ } ++ } ++} ++ ++ +diff -druN codecs/ilbc.orig/packing.h codecs/ilbc/packing.h +--- codecs/ilbc.orig/packing.h 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/packing.h 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,67 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ packing.h ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#ifndef __PACKING_H ++#define __PACKING_H ++ ++void packsplit( ++ int *index, /* (i) the value to split */ ++ int *firstpart, /* (o) the value specified by most ++ significant bits */ ++ int *rest, /* (o) the value specified by least ++ significant bits */ ++ int bitno_firstpart, /* (i) number of bits in most ++ significant part */ ++ int bitno_total /* (i) number of bits in full range ++ of value */ ++); ++ ++void packcombine( ++ int *index, /* (i/o) the msb value in the ++ combined value out */ ++ int rest, /* (i) the lsb value */ ++ int bitno_rest /* (i) the number of bits in the ++ lsb part */ ++); ++ ++void dopack( ++ unsigned char **bitstream, /* (i/o) on entrance pointer to ++ place in bitstream to pack ++ new data, on exit pointer ++ to place in bitstream to ++ pack future data */ ++ int index, /* (i) the value to pack */ ++ int bitno, /* (i) the number of bits that the ++ value will fit within */ ++ int *pos /* (i/o) write position in the ++ current byte */ ++); ++ ++void unpack( ++ unsigned char **bitstream, /* (i/o) on entrance pointer to ++ ++ ++ place in bitstream to ++ unpack new data from, on ++ exit pointer to place in ++ bitstream to unpack future ++ data from */ ++ int *index, /* (o) resulting value */ ++ int bitno, /* (i) number of bits used to ++ represent the value */ ++ int *pos /* (i/o) read position in the ++ current byte */ ++); ++ ++#endif ++ ++ +diff -druN codecs/ilbc.orig/syntFilter.c codecs/ilbc/syntFilter.c +--- codecs/ilbc.orig/syntFilter.c 1969-12-31 16:00:00.000000000 -0800 ++++ codecs/ilbc/syntFilter.c 2006-02-14 11:14:15.000000000 -0800 +@@ -0,0 +1,108 @@ ++ ++/****************************************************************** ++ ++ iLBC Speech Coder ANSI-C Source Code ++ ++ syntFilter.c ++ ++ Copyright (C) The Internet Society (2004). ++ All Rights Reserved. ++ ++******************************************************************/ ++ ++#include "iLBC_define.h" ++#include "syntFilter.h" ++ ++/*----------------------------------------------------------------* ++ * LP synthesis filter. ++ *---------------------------------------------------------------*/ ++ ++void syntFilter( ++ float *Out, /* (i/o) Signal to be filtered */ ++ float *a, /* (i) LP parameters */ ++ int len, /* (i) Length of signal */ ++ float *mem /* (i/o) Filter state */ ++){ ++ int i, j; ++ float *po, *pi, *pa, *pm; ++ ++ po=Out; ++ ++ /* Filter first part using memory from past */ ++ ++ for (i=0; igsm + + +- no + + + diff --git a/net/asterisk10/files/nocodecnego-patch-Makefile b/net/asterisk10/files/nocodecnego-patch-Makefile new file mode 100644 index 000000000000..c5df459f1b2c --- /dev/null +++ b/net/asterisk10/files/nocodecnego-patch-Makefile @@ -0,0 +1,228 @@ +--- Makefile.orig 2009-10-23 17:00:01.000000000 +0300 ++++ Makefile 2009-11-23 16:44:36.000000000 +0200 +@@ -101,7 +101,7 @@ + OVERWRITE=y + + # Include debug and macro symbols in the executables (-g) and profiling info (-pg) +-DEBUG=-g3 ++#DEBUG=-g3 + + # Staging directory + # Files are copied here temporarily during the install process +@@ -135,7 +135,7 @@ + ASTMANDIR=$(mandir) + ifneq ($(findstring BSD,$(OSARCH)),) + ASTVARLIBDIR=$(prefix)/share/asterisk +- ASTVARRUNDIR=$(localstatedir)/run/asterisk ++ ASTVARRUNDIR=$(localstatedir)/run + else + ASTVARLIBDIR=$(localstatedir)/lib/asterisk + endif +@@ -225,9 +225,11 @@ + _ASTLDFLAGS+=-L/usr/local/lib + endif + ++ifneq ($(OSARCH),FreeBSD) + ifneq ($(PROC),ultrasparc) + _ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi) + endif ++endif + + ifeq ($(PROC),ppc) + _ASTCFLAGS+=-fsigned-char +@@ -235,7 +237,7 @@ + + ifeq ($(OSARCH),FreeBSD) + # -V is understood by BSD Make, not by GNU make. +- BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk) ++ BSDVERSION=$(OSVERSION) + _ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi) + AST_LIBS+=$(shell if test $(BSDVERSION) -lt 502102 ; then echo "-lc_r"; else echo "-pthread"; fi) + endif +@@ -410,21 +412,21 @@ + rm -f build_tools/menuselect-deps + + datafiles: _all +- if [ `$(ID) -u` = 0 ]; then \ +- CFLAGS="$(_ASTCFLAGS) $(ASTCFLAGS)" build_tools/mkpkgconfig $(DESTDIR)/usr/lib/pkgconfig; \ +- fi ++ #if [ `$(ID) -u` = 0 ]; then \ ++ # CFLAGS="$(_ASTCFLAGS) $(ASTCFLAGS)" build_tools/mkpkgconfig $(DESTDIR)/usr/lib/pkgconfig; \ ++ #fi + # Should static HTTP be installed during make samples or even with its own target ala + # webvoicemail? There are portions here that *could* be customized but might also be + # improved a lot. I'll put it here for now. +- mkdir -p $(DESTDIR)$(ASTDATADIR)/static-http ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/static-http + for x in static-http/*; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \ + done +- mkdir -p $(DESTDIR)$(ASTDATADIR)/images ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/images + for x in images/*.jpg; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/images ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTDATADIR)/images ; \ + done +- mkdir -p $(DESTDIR)$(AGI_DIR) ++ $(MKDIR) $(DESTDIR)$(AGI_DIR) + $(MAKE) -C sounds install + + update: +@@ -445,47 +447,47 @@ + OLDHEADERS=$(filter-out $(NEWHEADERS),$(notdir $(wildcard $(DESTDIR)$(ASTHEADERDIR)/*.h))) + + installdirs: +- mkdir -p $(DESTDIR)$(MODULES_DIR) +- mkdir -p $(DESTDIR)$(ASTSBINDIR) +- mkdir -p $(DESTDIR)$(ASTETCDIR) +- mkdir -p $(DESTDIR)$(ASTBINDIR) +- mkdir -p $(DESTDIR)$(ASTVARRUNDIR) +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/dictate +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/system +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/tmp +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/meetme +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/monitor ++ $(MKDIR) $(DESTDIR)$(MODULES_DIR) ++ $(MKDIR) $(DESTDIR)$(ASTSBINDIR) ++ $(MKDIR) $(DESTDIR)$(ASTETCDIR) ++ $(MKDIR) $(DESTDIR)$(ASTBINDIR) ++ $(MKDIR) $(DESTDIR)$(ASTVARRUNDIR) ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/voicemail ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/dictate ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/system ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/tmp ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/meetme ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/monitor + + bininstall: _all installdirs $(SUBDIRS_INSTALL) +- $(INSTALL) -m 755 main/asterisk $(DESTDIR)$(ASTSBINDIR)/ ++ $(BSD_INSTALL_PROGRAM) main/asterisk $(DESTDIR)$(ASTSBINDIR)/ + $(LN) -sf asterisk $(DESTDIR)$(ASTSBINDIR)/rasterisk +- $(INSTALL) -m 755 contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/ +- $(INSTALL) -m 755 contrib/scripts/autosupport $(DESTDIR)$(ASTSBINDIR)/ ++ $(BSD_INSTALL_SCRIPT) contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/ ++ $(BSD_INSTALL_SCRIPT) contrib/scripts/autosupport $(DESTDIR)$(ASTSBINDIR)/ + if [ ! -f $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ]; then \ +- cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ;\ +- chmod 755 $(DESTDIR)$(ASTSBINDIR)/safe_asterisk;\ ++ cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > contrib/scripts/safe_asterisk.out;\ ++ ${BSD_INSTALL_SCRIPT} contrib/scripts/safe_asterisk.out $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ;\ + fi +- $(INSTALL) -d $(DESTDIR)$(ASTHEADERDIR) +- $(INSTALL) -m 644 include/asterisk.h $(DESTDIR)$(includedir) +- $(INSTALL) -m 644 include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR) ++ $(MKDIR) $(DESTDIR)$(ASTHEADERDIR) ++ $(BSD_INSTALL_DATA) include/asterisk.h $(DESTDIR)$(includedir) ++ $(BSD_INSTALL_DATA) include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR) + if [ -n "$(OLDHEADERS)" ]; then \ + rm -f $(addprefix $(DESTDIR)$(ASTHEADERDIR)/,$(OLDHEADERS)) ;\ + fi +- mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-csv +- mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-custom +- mkdir -p $(DESTDIR)$(ASTDATADIR)/keys +- mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware +- mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware/iax +- mkdir -p $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 keys/iaxtel.pub $(DESTDIR)$(ASTDATADIR)/keys +- $(INSTALL) -m 644 keys/freeworlddialup.pub $(DESTDIR)$(ASTDATADIR)/keys +- $(INSTALL) -m 644 doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8 +- $(INSTALL) -m 644 contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(MKDIR) $(DESTDIR)$(ASTLOGDIR)/cdr-csv ++ $(MKDIR) $(DESTDIR)$(ASTLOGDIR)/cdr-custom ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/keys ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/firmware ++ $(MKDIR) $(DESTDIR)$(ASTDATADIR)/firmware/iax ++ $(MKDIR) $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_DATA) keys/iaxtel.pub $(DESTDIR)$(ASTDATADIR)/keys ++ $(BSD_INSTALL_DATA) keys/freeworlddialup.pub $(DESTDIR)$(ASTDATADIR)/keys ++ $(BSD_INSTALL_MAN) doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_MAN) contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_MAN) contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8 ++ $(BSD_INSTALL_MAN) contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8 + if [ -f contrib/firmware/iax/iaxy.bin ] ; then \ +- $(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \ ++ $(BSD_INSTALL_DATA) contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \ + fi + + $(SUBDIRS_INSTALL): +@@ -521,7 +523,7 @@ + @exit 1 + endif + +-install: badshell datafiles bininstall ++install: badshell datafiles bininstall samples + @if [ -x /usr/sbin/asterisk-post-install ]; then \ + /usr/sbin/asterisk-post-install $(DESTDIR) . ; \ + fi +@@ -559,31 +561,23 @@ + upgrade: bininstall + + adsi: +- mkdir -p $(DESTDIR)$(ASTETCDIR) ++ $(MKDIR) $(DESTDIR)$(ASTETCDIR) + for x in configs/*.adsi; do \ + if [ ! -f $(DESTDIR)$(ASTETCDIR)/$$x ]; then \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \ + fi ; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`-dist ; \ + done + + samples: adsi +- mkdir -p $(DESTDIR)$(ASTETCDIR) ++ $(MKDIR) $(DESTDIR)$(ASTETCDIR) + for x in configs/*.sample; do \ +- if [ -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ]; then \ +- if [ "$(OVERWRITE)" = "y" ]; then \ +- if cmp -s $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` $$x ; then \ +- echo "Config file $$x is unchanged"; \ +- continue; \ +- fi ; \ +- mv -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`.old ; \ +- else \ +- echo "Skipping config file $$x"; \ +- continue; \ +- fi ;\ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`-dist ;\ ++ if [ ! -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ]; then \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`;\ + fi ; \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ;\ + done +- if [ "$(OVERWRITE)" = "y" ] || [ ! -f $(DESTDIR)$(ASTCONFPATH) ]; then \ ++ if true; then \ + ( \ + echo "[directories]" ; \ + echo "astetcdir => $(ASTETCDIR)" ; \ +@@ -629,20 +623,23 @@ + echo ";astctlowner = root" ; \ + echo ";astctlgroup = apache" ; \ + echo ";astctl = asterisk.ctl" ; \ +- ) > $(DESTDIR)$(ASTCONFPATH) ; \ ++ ) > $(DESTDIR)$(ASTCONFPATH)-dist ; \ ++ if [ ! -f $(DESTDIR)$(ASTCONFPATH) ]; then \ ++ cp $(DESTDIR)$(ASTCONFPATH)-dist $(DESTDIR)$(ASTCONFPATH); \ ++ fi; \ + else \ + echo "Skipping asterisk.conf creation"; \ + fi +- mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX ++ $(MKDIR) $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX + build_tools/make_sample_voicemail $(DESTDIR)/$(ASTDATADIR) $(DESTDIR)/$(ASTSPOOLDIR) + + webvmail: + @[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 ) + @[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 ) + $(INSTALL) -m 4755 -o root -g root contrib/scripts/vmail.cgi $(DESTDIR)$(HTTP_CGIDIR)/vmail.cgi +- mkdir -p $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk ++ $(MKDIR) $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk + for x in images/*.gif; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \ ++ $(BSD_INSTALL_DATA) $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \ + done + @echo " +--------- Asterisk Web Voicemail ----------+" + @echo " + +" diff --git a/net/asterisk10/files/patch-Makefile b/net/asterisk10/files/patch-Makefile new file mode 100644 index 000000000000..0fccb52e346a --- /dev/null +++ b/net/asterisk10/files/patch-Makefile @@ -0,0 +1,112 @@ +--- Makefile.orig 2010-10-14 00:24:44.000000000 +0200 ++++ Makefile 2010-11-17 12:24:32.000000000 +0100 +@@ -122,7 +122,7 @@ + OVERWRITE=y + + # Include debug and macro symbols in the executables (-g) and profiling info (-pg) +-DEBUG=-g3 ++#DEBUG=-g3 + + # Asterisk.conf is located in ASTETCDIR or by using the -C flag + # when starting Asterisk +@@ -220,11 +220,13 @@ + _ASTCFLAGS+=-isystem /usr/local/include + endif + ++ifneq ($(OSARCH),FreeBSD) + ifeq ($(findstring -march,$(_ASTCFLAGS) $(ASTCFLAGS)),) + ifneq ($(PROC),ultrasparc) + _ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi) + endif + endif ++endif + + ifeq ($(PROC),ppc) + _ASTCFLAGS+=-fsigned-char +@@ -232,7 +234,7 @@ + + ifeq ($(OSARCH),FreeBSD) + # -V is understood by BSD Make, not by GNU make. +- BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk) ++ BSDVERSION=$(OSVERSION) + _ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi) + endif + +@@ -460,13 +462,14 @@ + done + $(INSTALL) -m 644 doc/core-en_US.xml $(DESTDIR)$(ASTDATADIR)/static-http; + if [ -d doc/tex/asterisk ] ; then \ +- $(INSTALL) -d $(DESTDIR)$(ASTDATADIR)/static-http/docs ; \ ++ $(INSTALL) -d $(DESTDIR)$(DOCSDIR) ; \ ++ $(INSTALL) -d $(DESTDIR)$(DOCSDIR)/images ; \ + for n in doc/tex/asterisk/* ; do \ +- $(INSTALL) -m 644 $$n $(DESTDIR)$(ASTDATADIR)/static-http/docs ; \ ++ $(INSTALL) -m 644 $$n $(DESTDIR)$(DOCSDIR) ; \ + done \ + fi + for x in images/*.jpg; do \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/images ; \ ++ $(INSTALL) -m 644 $$x $(DESTDIR)$(DOCSDIR)/images ; \ + done + $(MAKE) -C sounds install + +@@ -526,6 +529,7 @@ + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/dictate" + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/meetme" + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/monitor" ++ $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/outgoing" + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/system" + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/tmp" + $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/voicemail" +@@ -547,6 +551,7 @@ + $(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/static-http" + $(INSTALL) -d "$(DESTDIR)$(ASTMANDIR)/man8" + $(INSTALL) -d "$(DESTDIR)$(AGI_DIR)" ++ $(INSTALL) -d "$(DESTDIR)$(ASTDBDIR)" + + bininstall: _all installdirs $(SUBDIRS_INSTALL) + $(INSTALL) -m 755 main/asterisk $(DESTDIR)$(ASTSBINDIR)/ +@@ -606,7 +611,7 @@ + @exit 1 + endif + +-install: badshell bininstall datafiles ++install: badshell bininstall datafiles samples + @if [ -x /usr/sbin/asterisk-post-install ]; then \ + /usr/sbin/asterisk-post-install $(DESTDIR) . ; \ + fi +@@ -648,29 +653,18 @@ + else \ + echo "Installing $$x" ; \ + fi ; \ +- $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \ ++ $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`-dist ; \ + done + + samples: adsi + @echo Installing other config files... + @for x in configs/*.sample; do \ +- dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`" ; \ +- if [ -f $${dst} ]; then \ +- if [ "$(OVERWRITE)" = "y" ]; then \ +- if cmp -s $${dst} $$x ; then \ +- echo "Config file $$x is unchanged"; \ +- continue; \ +- fi ; \ +- mv -f $${dst} $${dst}.old ; \ +- else \ +- echo "Skipping config file $$x"; \ +- continue; \ +- fi ;\ ++ $(INSTALL) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`-dist ; \ ++ if [ ! -f $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample` ]; then \ ++ $(INSTALL) $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`; \ + fi ; \ +- echo "Installing file $$x"; \ +- $(INSTALL) -m 644 $$x $${dst} ;\ + done +- if [ "$(OVERWRITE)" = "y" ]; then \ ++ @if true; then \ + echo "Updating asterisk.conf" ; \ + sed -e 's|^astetcdir.*$$|astetcdir => $(ASTETCDIR)|' \ + -e 's|^astmoddir.*$$|astmoddir => $(MODULES_DIR)|' \ diff --git a/net/asterisk10/files/patch-Makefile.rules b/net/asterisk10/files/patch-Makefile.rules new file mode 100644 index 000000000000..f90430ec9ddd --- /dev/null +++ b/net/asterisk10/files/patch-Makefile.rules @@ -0,0 +1,16 @@ +--- Makefile.rules.orig 2009-09-28 22:09:25.000000000 +0300 ++++ Makefile.rules 2009-11-23 16:15:23.000000000 +0200 +@@ -37,11 +37,13 @@ + + OPTIMIZE?=-O6 + ++ifneq ($(OSARCH),FreeBSD) + ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS)),) + _ASTCFLAGS+=$(OPTIMIZE) + else + _ASTCFLAGS+=-O0 + endif ++endif + + # shortcuts for common combinations of flags; these must be recursively expanded so that + # per-target settings will be applied diff --git a/net/asterisk10/files/patch-agi::Makefile b/net/asterisk10/files/patch-agi::Makefile new file mode 100644 index 000000000000..277e18e70b08 --- /dev/null +++ b/net/asterisk10/files/patch-agi::Makefile @@ -0,0 +1,13 @@ +--- ./agi/Makefile.orig 2010-07-23 15:26:41.000000000 +0200 ++++ ./agi/Makefile 2010-11-06 14:54:36.000000000 +0100 +@@ -16,7 +16,9 @@ + + .PHONY: clean all uninstall + +-AGIS=$(MENUSELECT_AGIS) ++AGIS_BIN=eagi-test eagi-sphinx-test ++AGIS_SCR=agi-test.agi jukebox.agi ++AGIS=$(AGIS_SCR) $(AGIS_BIN) + + ifeq ($(OSARCH),SunOS) + LIBS+=-lsocket -lnsl diff --git a/net/asterisk10/files/patch-channels-chan_dahdi.c b/net/asterisk10/files/patch-channels-chan_dahdi.c new file mode 100644 index 000000000000..ef904b48472e --- /dev/null +++ b/net/asterisk10/files/patch-channels-chan_dahdi.c @@ -0,0 +1,33 @@ +--- channels/chan_dahdi.c.orig 2010-11-09 11:18:39.000000000 +0100 ++++ channels/chan_dahdi.c 2010-11-09 11:22:15.000000000 +0100 +@@ -4688,6 +4688,8 @@ + return; + } + if (p->echocancel.head.tap_length) { ++ struct dahdi_echocanparams *pecp; ++ + #if defined(HAVE_PRI) || defined(HAVE_SS7) + switch (p->sig) { + #if defined(HAVE_PRI) +@@ -4718,7 +4720,9 @@ + break; + } + #endif /* defined(HAVE_PRI) || defined(HAVE_SS7) */ +- res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_PARAMS, &p->echocancel); ++ ++ pecp = &p->echocancel.head; ++ res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_PARAMS, &pecp); + if (res) { + ast_log(LOG_WARNING, "Unable to enable echo cancellation on channel %d (%s)\n", p->channel, strerror(errno)); + } else { +@@ -4752,8 +4756,9 @@ + + if (p->echocanon) { + struct dahdi_echocanparams ecp = { .tap_length = 0 }; ++ struct dahdi_echocanparams *pecp = &ecp; + +- res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_PARAMS, &ecp); ++ res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_PARAMS, &pecp); + + if (res) + ast_log(LOG_WARNING, "Unable to disable echo cancellation on channel %d: %s\n", p->channel, strerror(errno)); diff --git a/net/asterisk10/files/patch-channels::Makefile b/net/asterisk10/files/patch-channels::Makefile new file mode 100644 index 000000000000..323c78d86f9a --- /dev/null +++ b/net/asterisk10/files/patch-channels::Makefile @@ -0,0 +1,29 @@ +--- ./channels/Makefile.orig 2010-06-07 22:04:42.000000000 +0200 ++++ ./channels/Makefile 2010-11-06 14:54:36.000000000 +0100 +@@ -27,9 +27,10 @@ + endif + + ifeq ($(OSARCH),FreeBSD) +- PTLIB=-lpt_FreeBSD_x86_r +- H323LIB=-lh323_FreeBSD_x86_r ++ PTLIB=-lpt_r ++ H323LIB=-lh323_r + CHANH323LIB=-pthread ++ H323LDLIBS=$(PTLIB) $(H323LIB) $(CHANH323LIB) + endif + + ifeq ($(OSARCH),NetBSD) +@@ -86,9 +87,13 @@ + else + chan_h323.so: chan_h323.o h323/libchanh323.a + $(ECHO_PREFIX) echo " [LD] $^ -> $@" ++ifeq ($(OSARCH),FreeBSD) ++ $(CMD_PREFIX) $(CXX) $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) -L$(LOCALBASE)/lib $(H323LDFLAGS) -o $@ $< h323/libchanh323.a $(H323LDLIBS) $(CHANH323LIB) ++else + $(CMD_PREFIX) $(CXX) $(PTHREAD_CFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(SOLINK) -o $@ $< h323/libchanh323.a $(CHANH323LIB) -L$(PWLIBDIR)/lib $(PTLIB) -L$(OPENH323DIR)/lib $(H323LIB) -L/usr/lib -lcrypto -lssl -lexpat + endif + endif ++endif + + chan_misdn.o: _ASTCFLAGS+=-Imisdn + diff --git a/net/asterisk10/files/patch-channels::chan_sip.c b/net/asterisk10/files/patch-channels::chan_sip.c new file mode 100644 index 000000000000..9bb8267ffcc5 --- /dev/null +++ b/net/asterisk10/files/patch-channels::chan_sip.c @@ -0,0 +1,11 @@ +--- channels/chan_sip.c.orig 2008-06-10 00:46:46.000000000 -0700 ++++ channels/chan_sip.c 2008-06-10 00:46:46.000000000 -0700 +@@ -496,7 +496,7 @@ + #define DEFAULT_MOHINTERPRET "default" + #define DEFAULT_MOHSUGGEST "" + #define DEFAULT_VMEXTEN "asterisk" +-#define DEFAULT_CALLERID "asterisk" ++#define DEFAULT_CALLERID "Unknown" + #define DEFAULT_NOTIFYMIME "application/simple-message-summary" + #define DEFAULT_MWITIME 10 + #define DEFAULT_ALLOWGUEST TRUE diff --git a/net/asterisk10/files/patch-channels__sip__include__sip.h b/net/asterisk10/files/patch-channels__sip__include__sip.h new file mode 100644 index 000000000000..f19fbf763646 --- /dev/null +++ b/net/asterisk10/files/patch-channels__sip__include__sip.h @@ -0,0 +1,11 @@ +--- ./channels/sip/include/sip.h.orig 2010-11-08 04:46:46.000000000 +0100 ++++ ./channels/sip/include/sip.h 2010-11-08 04:47:07.000000000 +0100 +@@ -180,7 +180,7 @@ + #define DEFAULT_MOHINTERPRET "default" /*!< The default music class */ + #define DEFAULT_MOHSUGGEST "" + #define DEFAULT_VMEXTEN "asterisk" /*!< Default voicemail extension */ +-#define DEFAULT_CALLERID "asterisk" /*!< Default caller ID */ ++#define DEFAULT_CALLERID "Unknown" /*!< Default caller ID */ + #define DEFAULT_MWI_FROM "" + #define DEFAULT_NOTIFYMIME "application/simple-message-summary" + #define DEFAULT_ALLOWGUEST TRUE diff --git a/net/asterisk10/files/patch-channels_h323_Makefile.in b/net/asterisk10/files/patch-channels_h323_Makefile.in new file mode 100644 index 000000000000..d5d5c99300c1 --- /dev/null +++ b/net/asterisk10/files/patch-channels_h323_Makefile.in @@ -0,0 +1,11 @@ +--- ./channels/h323/Makefile.in.orig 2010-06-03 16:48:09.000000000 +0200 ++++ ./channels/h323/Makefile.in 2010-11-06 14:54:36.000000000 +0100 +@@ -13,7 +13,7 @@ + STDCCFLAGS += -I../../include -include ../../include/asterisk/autoconfig.h + STDCCFLAGS += -fPIC + #OPTCCFLAGS += +-CFLAGS = -pipe ++CFLAGS = -pipe @CXXFLAGS@ + TARGET = libchanh323.a + TARGET += Makefile.ast + SOURCES = ast_h323.cxx compat_h323.cxx cisco-h225.cxx caps_h323.cxx diff --git a/net/asterisk10/files/patch-configure b/net/asterisk10/files/patch-configure new file mode 100644 index 000000000000..0cc2a352b5a1 --- /dev/null +++ b/net/asterisk10/files/patch-configure @@ -0,0 +1,33 @@ +--- configure.orig 2010-10-07 22:58:47.000000000 +0200 ++++ configure 2010-11-06 15:54:49.000000000 +0100 +@@ -4670,9 +4670,9 @@ + astheaderdir='${includedir}/asterisk' + astlibdir='${libdir}/asterisk' + astmandir='${mandir}' +-astvarlibdir='${localstatedir}/lib/asterisk' ++astvarlibdir='${prefix}/share/asterisk' + astdatadir='${astvarlibdir}' +-astdbdir='${astvarlibdir}' ++astdbdir='${localstatedir}/db/asterisk' + astkeydir='${astvarlibdir}' + astspooldir='${localstatedir}/spool/asterisk' + astlogdir='${localstatedir}/log/asterisk' +@@ -4694,9 +4694,6 @@ + + case "${host_os}" in + freebsd*) +- +- CPPFLAGS=-I/usr/local/include +- LDFLAGS=-L/usr/local/lib + ;; + openbsd*) + +@@ -25058,7 +25055,7 @@ + + fi + +- PLATFORM_OPENH323="h323_${PWLIB_PLATFORM}_${OPENH323_SUFFIX}" ++ PLATFORM_OPENH323="h323_${OPENH323_SUFFIX}" + + if test "${HAS_OPENH323:-unset}" != "unset"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking OpenH323 installation validity" >&5 diff --git a/net/asterisk10/files/patch-include::asterisk::utils.h b/net/asterisk10/files/patch-include::asterisk::utils.h new file mode 100644 index 000000000000..a06f7d065c84 --- /dev/null +++ b/net/asterisk10/files/patch-include::asterisk::utils.h @@ -0,0 +1,13 @@ + +$FreeBSD$ + +--- include/asterisk/utils.h 2004/10/10 12:55:50 1.1 ++++ include/asterisk/utils.h 2004/10/10 12:56:43 +@@ -37,7 +37,6 @@ + #ifdef inet_ntoa + #undef inet_ntoa + #endif +-#define inet_ntoa __dont__use__inet_ntoa__use__ast_inet_ntoa__instead__ + + #ifdef LINUX + #define ast_pthread_create pthread_create diff --git a/net/asterisk10/files/patch-main::Makefile b/net/asterisk10/files/patch-main::Makefile new file mode 100644 index 000000000000..4bb726d70c0f --- /dev/null +++ b/net/asterisk10/files/patch-main::Makefile @@ -0,0 +1,30 @@ +--- ./main/Makefile.orig 2010-08-02 16:41:46.000000000 +0200 ++++ ./main/Makefile 2010-11-06 14:54:37.000000000 +0100 +@@ -107,8 +107,8 @@ + cd editline && test -f config.h || CFLAGS="$(PTHREAD_CFLAGS) $(subst $(ASTTOPDIR),../../,$(_ASTCFLAGS:-Werror=) $(ASTCFLAGS))" LDFLAGS="$(_ASTLDFLAGS) $(ASTLDFLAGS)" ./configure --build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM) --with-ncurses=$(NCURSES_DIR) --with-curses=$(CURSES_DIR) --with-termcap=$(TERMCAP_DIR) --with-tinfo=$(TINFO_DIR) + $(MAKE) -C editline libedit.a + +-db1-ast/libdb1.a: CHECK_SUBDIR +- _ASTCFLAGS="$(_ASTCFLAGS) -Wno-strict-aliasing" ASTCFLAGS="$(ASTCFLAGS)" $(MAKE) -C db1-ast libdb1.a ++#db1-ast/libdb1.a: CHECK_SUBDIR ++# _ASTCFLAGS="$(_ASTCFLAGS) -Wno-strict-aliasing" ASTCFLAGS="$(ASTCFLAGS)" $(MAKE) -C db1-ast libdb1.a + + ifneq ($(findstring REBUILD_PARSERS,$(MENUSELECT_CFLAGS)),) + ast_expr2.c ast_expr2.h: ast_expr2.y +@@ -173,13 +173,13 @@ + + $(OBJS): _ASTCFLAGS+=-DAST_MODULE=\"core\" + +-$(MAIN_TGT): $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) ++$(MAIN_TGT): $(OBJS) editline/libedit.a $(AST_EMBED_LDSCRIPTS) + @$(CC) -c -o buildinfo.o $(_ASTCFLAGS) buildinfo.c $(ASTCFLAGS) + $(ECHO_PREFIX) echo " [LD] $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) -> $@" + ifneq ($(findstring chan_h323,$(MENUSELECT_CHANNELS)),) +- $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(GMIMELDFLAGS) ++ $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(LDFLAGS) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(OBJS) editline/libedit.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(GMIMELDFLAGS) + else +- $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) $(GMIMELDFLAGS) ++ $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(LDFLAGS) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $(OBJS) editline/libedit.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) $(GMIMELDFLAGS) + endif + + ifeq ($(GNU_LD),1) diff --git a/net/asterisk10/files/patch-main::db.c b/net/asterisk10/files/patch-main::db.c new file mode 100644 index 000000000000..34c9bd20a8a0 --- /dev/null +++ b/net/asterisk10/files/patch-main::db.c @@ -0,0 +1,18 @@ +--- ./main/db.c.orig 2010-09-10 22:31:58.000000000 +0200 ++++ ./main/db.c 2010-11-06 14:54:37.000000000 +0100 +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + + #include "asterisk/channel.h" + #include "asterisk/file.h" +@@ -46,7 +47,6 @@ + #include "asterisk/utils.h" + #include "asterisk/lock.h" + #include "asterisk/manager.h" +-#include "db1-ast/include/db.h" + + /*** DOCUMENTATION + diff --git a/net/asterisk10/files/patch-main::frame.c b/net/asterisk10/files/patch-main::frame.c new file mode 100644 index 000000000000..232de08a9e21 --- /dev/null +++ b/net/asterisk10/files/patch-main::frame.c @@ -0,0 +1,14 @@ + +$FreeBSD$ + +--- main/frame.c.orig Wed Jan 25 13:22:43 2006 ++++ main/frame.c Wed Jan 25 13:21:25 2006 +@@ -1170,7 +1170,7 @@ static int g723_len(unsigned char buf) + { + switch(buf & TYPE_MASK) { + case TYPE_DONTSEND: +- return 0; ++ return 2; + break; + case TYPE_SILENCE: + return 4; diff --git a/net/asterisk10/files/patch-main::utils.c b/net/asterisk10/files/patch-main::utils.c new file mode 100644 index 000000000000..7440848a1521 --- /dev/null +++ b/net/asterisk10/files/patch-main::utils.c @@ -0,0 +1,13 @@ +--- ./main/utils.c.orig 2010-08-06 20:57:10.000000000 +0200 ++++ ./main/utils.c 2010-11-06 14:54:37.000000000 +0100 +@@ -990,8 +990,8 @@ + pthread_attr_init(attr); + } + +-#ifdef __linux__ +- /* On Linux, pthread_attr_init() defaults to PTHREAD_EXPLICIT_SCHED, ++#ifdef __linux__ || defined(__FreeBSD__) ++ /* On Linux and FreeBSD, pthread_attr_init() defaults to PTHREAD_EXPLICIT_SCHED, + which is kind of useless. Change this here to + PTHREAD_INHERIT_SCHED; that way the -p option to set realtime + priority will propagate down to new threads by default. diff --git a/net/asterisk10/files/patch-main__lock.c b/net/asterisk10/files/patch-main__lock.c new file mode 100644 index 000000000000..a802d8817a1e --- /dev/null +++ b/net/asterisk10/files/patch-main__lock.c @@ -0,0 +1,13 @@ +--- ./main/lock.c.orig 2010-11-06 15:00:15.000000000 +0100 ++++ ./main/lock.c 2010-11-06 15:00:23.000000000 +0100 +@@ -679,10 +679,6 @@ + + pthread_rwlockattr_init(&attr); + +-#ifdef HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NP +- pthread_rwlockattr_setkind_np(&attr, PTHREAD_RWLOCK_PREFER_WRITER_NP); +-#endif +- + res = pthread_rwlock_init(&t->lock, &attr); + pthread_rwlockattr_destroy(&attr); + return res; diff --git a/net/asterisk10/files/patch-rtp_timeout b/net/asterisk10/files/patch-rtp_timeout new file mode 100644 index 000000000000..6f60c74cff41 --- /dev/null +++ b/net/asterisk10/files/patch-rtp_timeout @@ -0,0 +1,25 @@ +--- channels/chan_sip.c.orig 2009-04-14 08:58:13.000000000 +0100 ++++ channels/chan_sip.c 2009-04-14 09:00:58.000000000 +0100 +@@ -16287,7 +16287,6 @@ + restartsearch: + /* Check for interfaces needing to be killed */ + ast_mutex_lock(&iflock); +- t = time(NULL); + /* don't scan the interface list if it hasn't been a reasonable period + of time since the last time we did it (when MWI is being sent, we can + get back to this point every millisecond or less) +@@ -16306,12 +16305,14 @@ + (sip->owner->_state == AST_STATE_UP) && + !sip->redirip.sin_addr.s_addr && + sip->t38.state != T38_ENABLED) { ++ t = time(NULL); + if (sip->lastrtptx && + ast_rtp_get_rtpkeepalive(sip->rtp) && + (t > sip->lastrtptx + ast_rtp_get_rtpkeepalive(sip->rtp))) { + /* Need to send an empty RTP packet */ + sip->lastrtptx = time(NULL); + ast_rtp_sendcng(sip->rtp, 0); ++ t = time(NULL); + } + if (sip->lastrtprx && + (ast_rtp_get_rtptimeout(sip->rtp) || ast_rtp_get_rtpholdtimeout(sip->rtp)) && diff --git a/net/asterisk10/files/patch-suppress_log_dups.diff b/net/asterisk10/files/patch-suppress_log_dups.diff new file mode 100644 index 000000000000..115b69f21ca1 --- /dev/null +++ b/net/asterisk10/files/patch-suppress_log_dups.diff @@ -0,0 +1,270 @@ +Index: main/logger.c +=================================================================== +--- main/logger.c (revision 188505) ++++ main/logger.c (working copy) +@@ -140,6 +140,17 @@ + AST_THREADSTORAGE(log_buf, log_buf_init); + #define LOG_BUF_INIT_SIZE 128 + ++/* ++ * Storage for previous log message to prevent log storms ++ */ ++static int stored_log_level; ++static int stored_log_dup_count = 0; ++static char *stored_log_msg = NULL; ++static const char *stored_log_file; ++static int stored_log_line; ++static const char *stored_log_function; ++static ast_mutex_t stored_log_msg_lock; ++ + static int make_components(char *s, int lineno) + { + char *w; +@@ -591,6 +602,8 @@ + char tmp[256]; + int res = 0; + ++ ast_mutex_init(&stored_log_msg_lock); ++ + /* auto rotate if sig SIGXFSZ comes a-knockin */ + (void) signal(SIGXFSZ,(void *) handle_SIGXFSZ); + +@@ -655,14 +668,14 @@ + return; + } + +-static void __attribute__((format(printf, 5, 0))) ast_log_vsyslog(int level, const char *file, int line, const char *function, const char *fmt, va_list args) ++static void ast_log_syslog(int level, const char *file, int line, const char *function, const char *msg) + { + char buf[BUFSIZ]; + char *s; + + if (level >= SYSLOG_NLEVELS) { + /* we are locked here, so cannot ast_log() */ +- fprintf(stderr, "ast_log_vsyslog called with bogus level: %d\n", level); ++ fprintf(stderr, "ast_log_syslog called with bogus level: %d\n", level); + return; + } + if (level == __LOG_VERBOSE) { +@@ -676,27 +689,20 @@ + levels[level], (long)GETTID(), file, line, function); + } + s = buf + strlen(buf); +- vsnprintf(s, sizeof(buf) - strlen(buf), fmt, args); ++ snprintf(s, sizeof(buf) - strlen(buf), "%s", msg); + term_strip(s, s, strlen(s) + 1); + syslog(syslog_level_map[level], "%s", buf); + } + +-/*! +- * \brief send log messages to syslog and/or the console +- */ +-void ast_log(int level, const char *file, int line, const char *function, const char *fmt, ...) ++static void __ast_log(int level, const char *file, int line, const char *function, char *msg, int msglen) + { + struct logchannel *chan; +- struct ast_dynamic_str *buf; + time_t t; + struct tm tm; + char date[256]; ++ char buf[2048]; ++ int res; + +- va_list ap; +- +- if (!(buf = ast_dynamic_str_thread_get(&log_buf, LOG_BUF_INIT_SIZE))) +- return; +- + if (AST_LIST_EMPTY(&logchannels)) + { + /* +@@ -704,35 +710,12 @@ + * so just log to stdout + */ + if (level != __LOG_VERBOSE) { +- int res; +- va_start(ap, fmt); +- res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); +- va_end(ap); +- if (res != AST_DYNSTR_BUILD_FAILED) { +- term_filter_escapes(buf->str); +- fputs(buf->str, stdout); +- } ++ term_filter_escapes(msg); ++ fputs(msg, stdout); + } + return; + } + +- /* don't display LOG_DEBUG messages unless option_verbose _or_ option_debug +- are non-zero; LOG_DEBUG messages can still be displayed if option_debug +- is zero, if option_verbose is non-zero (this allows for 'level zero' +- LOG_DEBUG messages to be displayed, if the logmask on any channel +- allows it) +- */ +- if (!option_verbose && !option_debug && (level == __LOG_DEBUG)) +- return; +- +- /* Ignore anything that never gets logged anywhere */ +- if (!(global_logmask & (1 << level))) +- return; +- +- /* Ignore anything other than the currently debugged file if there is one */ +- if ((level == __LOG_DEBUG) && !ast_strlen_zero(debug_filename) && strcasecmp(debug_filename, file)) +- return; +- + time(&t); + ast_localtime(&t, &tm, NULL); + strftime(date, sizeof(date), dateformat, &tm); +@@ -740,13 +723,8 @@ + AST_LIST_LOCK(&logchannels); + + if (logfiles.event_log && level == __LOG_EVENT) { +- va_start(ap, fmt); +- +- fprintf(eventlog, "%s asterisk[%ld]: ", date, (long)getpid()); +- vfprintf(eventlog, fmt, ap); ++ fprintf(eventlog, "%s asterisk[%ld]: %s", date, (long)getpid(), msg); + fflush(eventlog); +- +- va_end(ap); + AST_LIST_UNLOCK(&logchannels); + return; + } +@@ -756,18 +734,15 @@ + break; + /* Check syslog channels */ + if (chan->type == LOGTYPE_SYSLOG && (chan->logmask & (1 << level))) { +- va_start(ap, fmt); +- ast_log_vsyslog(level, file, line, function, fmt, ap); +- va_end(ap); ++ ast_log_syslog(level, file, line, function, msg); + /* Console channels */ + } else if ((chan->logmask & (1 << level)) && (chan->type == LOGTYPE_CONSOLE)) { + char linestr[128]; + char tmp1[80], tmp2[80], tmp3[80], tmp4[80]; + + if (level != __LOG_VERBOSE) { +- int res; + sprintf(linestr, "%d", line); +- ast_dynamic_str_thread_set(&buf, BUFSIZ, &log_buf, ++ snprintf(buf, sizeof(buf), + "[%s] %s[%ld]: %s:%s %s: ", + date, + term_color(tmp1, levels[level], colors[level], 0, sizeof(tmp1)), +@@ -776,23 +751,17 @@ + term_color(tmp3, linestr, COLOR_BRWHITE, 0, sizeof(tmp3)), + term_color(tmp4, function, COLOR_BRWHITE, 0, sizeof(tmp4))); + /*filter to the console!*/ +- term_filter_escapes(buf->str); +- ast_console_puts_mutable(buf->str); +- +- va_start(ap, fmt); +- res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); +- va_end(ap); +- if (res != AST_DYNSTR_BUILD_FAILED) +- ast_console_puts_mutable(buf->str); ++ term_filter_escapes(buf); ++ ast_console_puts_mutable(buf); ++ ast_console_puts_mutable(msg); + } + /* File channels */ + } else if ((chan->logmask & (1 << level)) && (chan->fileptr)) { +- int res; +- ast_dynamic_str_thread_set(&buf, BUFSIZ, &log_buf, ++ snprintf(buf, sizeof(buf), + "[%s] %s[%ld] %s: ", + date, levels[level], (long)GETTID(), file); +- res = fprintf(chan->fileptr, "%s", buf->str); +- if (res <= 0 && !ast_strlen_zero(buf->str)) { /* Error, no characters printed */ ++ res = fprintf(chan->fileptr, "%s", buf); ++ if (res <= 0 && !ast_strlen_zero(buf)) { /* Error, no characters printed */ + fprintf(stderr,"**** Asterisk Logging Error: ***********\n"); + if (errno == ENOMEM || errno == ENOSPC) { + fprintf(stderr, "Asterisk logging error: Out of disk space, can't log to log file %s\n", chan->filename); +@@ -801,16 +770,10 @@ + manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: No\r\nReason: %d - %s\r\n", chan->filename, errno, strerror(errno)); + chan->disabled = 1; + } else { +- int res; + /* No error message, continue printing */ +- va_start(ap, fmt); +- res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); +- va_end(ap); +- if (res != AST_DYNSTR_BUILD_FAILED) { +- term_strip(buf->str, buf->str, buf->len); +- fputs(buf->str, chan->fileptr); +- fflush(chan->fileptr); +- } ++ term_strip(msg, msg, msglen); ++ fputs(msg, chan->fileptr); ++ fflush(chan->fileptr); + } + } + } +@@ -825,6 +788,65 @@ + } + } + ++/*! ++ * \brief send log messages to syslog and/or the console ++ */ ++void ast_log(int level, const char *file, int line, const char *function, const char *fmt, ...) ++{ ++ struct ast_dynamic_str *buf; ++ int res; ++ va_list ap; ++ ++ if (!(buf = ast_dynamic_str_thread_get(&log_buf, LOG_BUF_INIT_SIZE))) ++ return; ++ ++ va_start(ap, fmt); ++ res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); ++ va_end(ap); ++ if (res == AST_DYNSTR_BUILD_FAILED) ++ return; ++ ++ /* don't display LOG_DEBUG messages unless option_verbose _or_ option_debug ++ are non-zero; LOG_DEBUG messages can still be displayed if option_debug ++ is zero, if option_verbose is non-zero (this allows for 'level zero' ++ LOG_DEBUG messages to be displayed, if the logmask on any channel ++ allows it) ++ */ ++ if (!option_verbose && !option_debug && (level == __LOG_DEBUG)) ++ return; ++ ++ /* Ignore anything that never gets logged anywhere */ ++ if (!(global_logmask & (1 << level))) ++ return; ++ ++ /* Ignore anything other than the currently debugged file if there is one */ ++ if ((level == __LOG_DEBUG) && !ast_strlen_zero(debug_filename) && strcasecmp(debug_filename, file)) ++ return; ++ ++ ast_mutex_lock(&stored_log_msg_lock); ++ if (stored_log_msg == NULL || stored_log_level != level || strcmp(buf->str, stored_log_msg) != 0) { ++ if (stored_log_dup_count > 0) { ++ char buf2[1024]; ++ ++ snprintf(buf2, sizeof(buf2), "Last message repeated %d times\n", stored_log_dup_count); ++ __ast_log(stored_log_level, stored_log_file, stored_log_line, stored_log_function, buf2, strlen(buf2)); ++ } ++ if (stored_log_msg != NULL) ++ ast_free(stored_log_msg); ++ stored_log_msg = ast_strdup(buf->str); ++ stored_log_level = level; ++ stored_log_dup_count = 0; ++ stored_log_file = file; ++ stored_log_line = line; ++ stored_log_function = function; ++ __ast_log(level, file, line, function, buf->str, buf->len); ++ } ++ else ++ ++stored_log_dup_count; ++ ++ ast_mutex_unlock(&stored_log_msg_lock); ++} ++ + void ast_backtrace(void) + { + #ifdef linux diff --git a/net/asterisk10/files/rtp_force_dtmf-codecnego.diff b/net/asterisk10/files/rtp_force_dtmf-codecnego.diff new file mode 100644 index 000000000000..a670364ba603 --- /dev/null +++ b/net/asterisk10/files/rtp_force_dtmf-codecnego.diff @@ -0,0 +1,86 @@ +--- channels/chan_sip.c.orig 2009-11-20 17:56:30.000000000 +0200 ++++ channels/chan_sip.c 2009-11-20 17:59:43.000000000 +0200 +@@ -565,6 +565,9 @@ + static unsigned int global_tos_sip; /*!< IP type of service for SIP packets */ + static unsigned int global_tos_audio; /*!< IP type of service for audio RTP packets */ + static unsigned int global_tos_video; /*!< IP type of service for video RTP packets */ ++static int global_force_dtmf_relay = 0; ++static int global_force_dtmf_relay_pt = 101; ++ + static int compactheaders; /*!< send compact sip headers */ + static int recordhistory; /*!< Record SIP history. Off by default */ + static int dumphistory; /*!< Dump history to verbose before destroying SIP dialog */ +@@ -5329,6 +5332,7 @@ + int x; + int codec_index = 0; + int codec_pt_order[256]; ++ int dtmf_present = 0; + + /* Host information */ + struct ast_hostent audiohp; +@@ -5600,12 +5604,21 @@ + for (x = 0; x < codec_index; ++x) { + struct rtpPayloadType pt; + pt = ast_rtp_lookup_pt(p->rtp, codec_pt_order[x]); ++ if (pt.code == AST_RTP_DTMF) ++ dtmf_present = 1; + if (!pt.isAstFormat && !pt.code && p->vrtp) + pt = ast_rtp_lookup_pt(p->vrtp, codec_pt_order[x]); + if (pt.isAstFormat) + ast_codec_pref_append(&p->formats, pt.code); + } + ast_codec_pref_remove2(&p->formats, ~p->usercapability); ++ if (!dtmf_present && global_force_dtmf_relay) { ++ newnoncodeccapability |= AST_RTP_DTMF; ++ ast_rtp_set_m_type(newaudiortp, global_force_dtmf_relay_pt); ++ codec_pt_order[codec_index++] = global_force_dtmf_relay_pt; ++ ast_rtp_set_rtpmap_type(newaudiortp, global_force_dtmf_relay_pt, "audio", "telephone-event", 0); ++ } ++ + + /* Now gather all of the codecs that we are asked for: */ + ast_rtp_get_current_formats(newaudiortp, &peercapability, &peernoncodeccapability); +@@ -18369,6 +18382,9 @@ + + global_matchexterniplocally = FALSE; + ++ global_force_dtmf_relay = 0; ++ global_force_dtmf_relay_pt = 101; ++ + /* Copy the default jb config over global_jbconf */ + memcpy(&global_jbconf, &default_jbconf, sizeof(struct ast_jb_conf)); + +@@ -18431,6 +18447,18 @@ + } + } else if (!strcasecmp(v->name, "vmexten")) { + ast_copy_string(default_vmexten, v->value, sizeof(default_vmexten)); ++ } else if (!strcasecmp(v->name, "rtp_force_dtmf_relay")) { ++ if ((global_force_dtmf_relay = ast_true(v->value))) ++ ast_verbose("RTP DTMF relaying will be enforced\n"); ++ else ++ ast_verbose("RTP DTMF relaying will not be enforced\n"); ++ } else if (!strcasecmp(v->name, "rtp_force_dtmf_relay_pt")) { ++ sscanf(v->value, "%d", &global_force_dtmf_relay_pt); ++ if (global_force_dtmf_relay_pt < 96 || global_force_dtmf_relay_pt > 255) { ++ ast_verbose("RTP forced DTMF relay payload type is not valid: %d. Using default (101)\n", global_force_dtmf_relay_pt); ++ global_force_dtmf_relay_pt = 101; ++ } else ++ ast_log(LOG_WARNING, "RTP forced DTMF relay payload type is %d\n", global_force_dtmf_relay_pt); + } else if (!strcasecmp(v->name, "rtptimeout")) { + if ((sscanf(v->value, "%30d", &global_rtptimeout) != 1) || (global_rtptimeout < 0)) { + ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d. Using default.\n", v->value, v->lineno); +--- configs/sip.conf.sample.orig 2008-04-25 08:53:52.000000000 -0700 ++++ configs/sip.conf.sample 2008-06-10 00:45:37.000000000 -0700 +@@ -53,6 +53,12 @@ + ; and multiline formatted headers for strict + ; SIP compatibility (defaults to "no") + ++;rtp_force_dtmf_relay=no ; Enable RFC2833 DTMFs to be sent even if peer ++ ; hasn't announced support for it. Default: no ++ ++;rtp_force_dtmf_relay_pt=101 ; RTP payload type value for enforced RFC2833 ++ ; DTMFs. Default: 101 ++ + ; See doc/ip-tos.txt for a description of these parameters. + ;tos_sip=cs3 ; Sets TOS for SIP packets. + ;tos_audio=ef ; Sets TOS for RTP audio packets. diff --git a/net/asterisk10/files/rtp_force_dtmf-nocodecnego.diff b/net/asterisk10/files/rtp_force_dtmf-nocodecnego.diff new file mode 100644 index 000000000000..9dcb7d8b134f --- /dev/null +++ b/net/asterisk10/files/rtp_force_dtmf-nocodecnego.diff @@ -0,0 +1,69 @@ +--- channels/chan_sip.c.orig 2009-11-23 17:28:47.000000000 +0200 ++++ channels/chan_sip.c 2009-11-23 17:29:29.000000000 +0200 +@@ -565,6 +565,9 @@ + static unsigned int global_tos_sip; /*!< IP type of service for SIP packets */ + static unsigned int global_tos_audio; /*!< IP type of service for audio RTP packets */ + static unsigned int global_tos_video; /*!< IP type of service for video RTP packets */ ++static int global_force_dtmf_relay = 0; ++static int global_force_dtmf_relay_pt = 101; ++ + static int compactheaders; /*!< send compact sip headers */ + static int recordhistory; /*!< Record SIP history. Off by default */ + static int dumphistory; /*!< Dump history to verbose before destroying SIP dialog */ +@@ -5593,6 +5596,12 @@ + + /* Now gather all of the codecs that we are asked for: */ + ast_rtp_get_current_formats(newaudiortp, &peercapability, &peernoncodeccapability); ++ /* Add telephone-event */ ++ if (global_force_dtmf_relay && !(peernoncodeccapability & AST_RTP_DTMF)) { ++ ast_rtp_set_m_type(newaudiortp, global_force_dtmf_relay_pt); ++ ast_rtp_set_rtpmap_type(newaudiortp, global_force_dtmf_relay_pt, "audio", "telephone-event", 0); ++ peernoncodeccapability |= AST_RTP_DTMF; ++ } + ast_rtp_get_current_formats(newvideortp, &vpeercapability, &vpeernoncodeccapability); + + newjointcapability = p->capability & (peercapability | vpeercapability); +@@ -18366,6 +18375,9 @@ + + global_matchexterniplocally = FALSE; + ++ global_force_dtmf_relay = 0; ++ global_force_dtmf_relay_pt = 101; ++ + /* Copy the default jb config over global_jbconf */ + memcpy(&global_jbconf, &default_jbconf, sizeof(struct ast_jb_conf)); + +@@ -18428,6 +18440,18 @@ + } + } else if (!strcasecmp(v->name, "vmexten")) { + ast_copy_string(default_vmexten, v->value, sizeof(default_vmexten)); ++ } else if (!strcasecmp(v->name, "rtp_force_dtmf_relay")) { ++ if ((global_force_dtmf_relay = ast_true(v->value))) ++ ast_verbose("RTP DTMF relaying will be enforced\n"); ++ else ++ ast_verbose("RTP DTMF relaying will not be enforced\n"); ++ } else if (!strcasecmp(v->name, "rtp_force_dtmf_relay_pt")) { ++ sscanf(v->value, "%d", &global_force_dtmf_relay_pt); ++ if (global_force_dtmf_relay_pt < 96 || global_force_dtmf_relay_pt > 255) { ++ ast_verbose("RTP forced DTMF relay payload type is not valid: %d. Using default (101)\n", global_force_dtmf_relay_pt); ++ global_force_dtmf_relay_pt = 101; ++ } else ++ ast_log(LOG_WARNING, "RTP forced DTMF relay payload type is %d\n", global_force_dtmf_relay_pt); + } else if (!strcasecmp(v->name, "rtptimeout")) { + if ((sscanf(v->value, "%30d", &global_rtptimeout) != 1) || (global_rtptimeout < 0)) { + ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d. Using default.\n", v->value, v->lineno); +--- configs/sip.conf.sample.orig 2008-08-16 01:33:42.000000000 +0300 ++++ configs/sip.conf.sample 2008-12-12 17:03:11.000000000 +0200 +@@ -49,6 +49,12 @@ + ; and multiline formatted headers for strict + ; SIP compatibility (defaults to "no") + ++;rtp_force_dtmf_relay=no ; Enable RFC2833 DTMFs to be sent even if peer ++ ; hasn't announced support for it. Default: no ++ ++;rtp_force_dtmf_relay_pt=101 ; RTP payload type value for enforced RFC2833 ++ ; DTMFs. Default: 101 ++ + ; See doc/ip-tos.txt for a description of these parameters. + ;tos_sip=cs3 ; Sets TOS for SIP packets. + ;tos_audio=ef ; Sets TOS for RTP audio packets. diff --git a/net/asterisk10/files/sip_force_callid.diff b/net/asterisk10/files/sip_force_callid.diff new file mode 100644 index 000000000000..09cf274581d1 --- /dev/null +++ b/net/asterisk10/files/sip_force_callid.diff @@ -0,0 +1,11 @@ +--- channels/chan_sip.c.orig 2009-05-12 21:18:44.000000000 +0300 ++++ channels/chan_sip.c 2009-05-26 12:58:10.000000000 +0300 +@@ -3061,6 +3061,8 @@ + } else if (!strcasecmp(ast_var_name(current), "SIPTRANSFER_REPLACES")) { + /* We're replacing a call. */ + p->options->replaces = ast_var_value(current); ++ } else if (!strcasecmp(ast_var_name(current), "SIP_FORCE_CALLID")) { ++ ast_string_field_set(p, callid, ast_var_value(current)); + } + } + diff --git a/net/asterisk10/files/sip_set_auth.diff b/net/asterisk10/files/sip_set_auth.diff new file mode 100644 index 000000000000..1addc4f48add --- /dev/null +++ b/net/asterisk10/files/sip_set_auth.diff @@ -0,0 +1,45 @@ +--- channels/chan_sip.c.orig 2008-04-29 08:21:05.000000000 -0400 ++++ channels/chan_sip.c 2008-05-28 18:41:48.000000000 -0400 +@@ -15962,6 +15978,9 @@ + char *ext, *host; + char tmp[256]; + char *dest = data; ++ char *secret = NULL; ++ char *md5secret = NULL; ++ char *authname = NULL; + + if (!(p = sip_alloc(NULL, NULL, 0, SIP_INVITE))) { + ast_log(LOG_ERROR, "Unable to build sip pvt data for '%s' (Out of memory or socket error)\n", (char *)data); +@@ -15983,6 +16002,17 @@ + if (host) { + *host++ = '\0'; + ext = tmp; ++ secret = strchr(ext, ':'); ++ if (secret) { ++ *secret++ = '\0'; ++ md5secret = strchr(secret, ':'); ++ if (md5secret) { ++ *md5secret++ = '\0'; ++ authname = strchr(md5secret, ':'); ++ if (authname) ++ *authname++ = '\0'; ++ } ++ } + } else { + ext = strchr(tmp, '/'); + if (ext) +@@ -16015,6 +16045,14 @@ + ast_string_field_set(p, username, ext); + ast_string_field_free(p, fullcontact); + } ++ if (secret && !ast_strlen_zero(secret)) ++ ast_string_field_set(p, peersecret, secret); ++ ++ if (md5secret && !ast_strlen_zero(md5secret)) ++ ast_string_field_set(p, peermd5secret, md5secret); ++ ++ if (authname && !ast_strlen_zero(authname)) ++ ast_string_field_set(p, authname, authname); + #if 0 + printf("Setting up to call extension '%s' at '%s'\n", ext ? ext : "", host); + #endif diff --git a/net/asterisk10/pkg-descr b/net/asterisk10/pkg-descr new file mode 100644 index 000000000000..28b7a1deb011 --- /dev/null +++ b/net/asterisk10/pkg-descr @@ -0,0 +1,5 @@ +Asterisk is an Open Source PBX and telephony toolkit. It is, in a +sense, middleware between Internet and telephony channels on the bottom, +and Internet and telephony applications at the top. + +WWW: http://www.asteriskpbx.com diff --git a/net/asterisk10/pkg-plist b/net/asterisk10/pkg-plist new file mode 100644 index 000000000000..be894e5b7850 --- /dev/null +++ b/net/asterisk10/pkg-plist @@ -0,0 +1,1616 @@ +@unexec if cmp -s %D/etc/asterisk/ais.conf %D/etc/asterisk/ais.conf-dist; then rm -f %D/etc/asterisk/ais.conf; fi +etc/asterisk/ais.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_adaptive_odbc.conf %D/etc/asterisk/cdr_adaptive_odbc.conf-dist; then rm -f %D/etc/asterisk/cdr_adaptive_odbc.conf; fi +etc/asterisk/cdr_adaptive_odbc.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_sqlite3_custom.conf %D/etc/asterisk/cdr_sqlite3_custom.conf-dist; then rm -f %D/etc/asterisk/cdr_sqlite3_custom.conf; fi +etc/asterisk/cdr_sqlite3_custom.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_syslog.conf %D/etc/asterisk/cdr_syslog.conf-dist; then rm -f %D/etc/asterisk/cdr_syslog.conf; fi +etc/asterisk/cdr_syslog.conf-dist +@unexec if cmp -s %D/etc/asterisk/cli.conf %D/etc/asterisk/cli.conf-dist; then rm -f %D/etc/asterisk/cli.conf; fi +etc/asterisk/cli.conf-dist +@unexec if cmp -s %D/etc/asterisk/cli_aliases.conf %D/etc/asterisk/cli_aliases.conf-dist; then rm -f %D/etc/asterisk/cli_aliases.conf; fi +etc/asterisk/cli_aliases.conf-dist +@unexec if cmp -s %D/etc/asterisk/cli_permissions.conf %D/etc/asterisk/cli_permissions.conf-dist; then rm -f %D/etc/asterisk/cli_permissions.conf; fi +etc/asterisk/cli_permissions.conf-dist +@unexec if cmp -s %D/etc/asterisk/console.conf %D/etc/asterisk/console.conf-dist; then rm -f %D/etc/asterisk/console.conf; fi +etc/asterisk/console.conf-dist +@unexec if cmp -s %D/etc/asterisk/dbsep.conf %D/etc/asterisk/dbsep.conf-dist; then rm -f %D/etc/asterisk/dbsep.conf; fi +etc/asterisk/dbsep.conf-dist +@unexec if cmp -s %D/etc/asterisk/dsp.conf %D/etc/asterisk/dsp.conf-dist; then rm -f %D/etc/asterisk/dsp.conf; fi +etc/asterisk/dsp.conf-dist +@unexec if cmp -s %D/etc/asterisk/extensions.lua %D/etc/asterisk/extensions.lua-dist; then rm -f %D/etc/asterisk/extensions.lua; fi +etc/asterisk/extensions.lua-dist +@unexec if cmp -s %D/etc/asterisk/extensions_minivm.conf %D/etc/asterisk/extensions_minivm.conf-dist; then rm -f %D/etc/asterisk/extensions_minivm.conf; fi +etc/asterisk/extensions_minivm.conf-dist +@unexec if cmp -s %D/etc/asterisk/jingle.conf %D/etc/asterisk/jingle.conf-dist; then rm -f %D/etc/asterisk/jingle.conf; fi +etc/asterisk/jingle.conf-dist +@unexec if cmp -s %D/etc/asterisk/minivm.conf %D/etc/asterisk/minivm.conf-dist; then rm -f %D/etc/asterisk/minivm.conf; fi +etc/asterisk/minivm.conf-dist +@unexec if cmp -s %D/etc/asterisk/phoneprov.conf %D/etc/asterisk/phoneprov.conf-dist; then rm -f %D/etc/asterisk/phoneprov.conf; fi +etc/asterisk/phoneprov.conf-dist +@unexec if cmp -s %D/etc/asterisk/queuerules.conf %D/etc/asterisk/queuerules.conf-dist; then rm -f %D/etc/asterisk/queuerules.conf; fi +etc/asterisk/queuerules.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_ldap.conf %D/etc/asterisk/res_ldap.conf-dist; then rm -f %D/etc/asterisk/res_ldap.conf; fi +etc/asterisk/res_ldap.conf-dist +@unexec if cmp -s %D/etc/asterisk/unistim.conf %D/etc/asterisk/unistim.conf-dist; then rm -f %D/etc/asterisk/unistim.conf; fi +etc/asterisk/unistim.conf-dist +@unexec if cmp -s %D/etc/asterisk/usbradio.conf %D/etc/asterisk/usbradio.conf-dist; then rm -f %D/etc/asterisk/usbradio.conf; fi +etc/asterisk/usbradio.conf-dist +@unexec if cmp -s %D/etc/asterisk/adsi.conf %D/etc/asterisk/adsi.conf-dist; then rm -f %D/etc/asterisk/adsi.conf; fi +etc/asterisk/adsi.conf-dist +@unexec if cmp -s %D/etc/asterisk/agents.conf %D/etc/asterisk/agents.conf-dist; then rm -f %D/etc/asterisk/agents.conf; fi +etc/asterisk/agents.conf-dist +@unexec if cmp -s %D/etc/asterisk/alarmreceiver.conf %D/etc/asterisk/alarmreceiver.conf-dist; then rm -f %D/etc/asterisk/alarmreceiver.conf; fi +etc/asterisk/alarmreceiver.conf-dist +@unexec if cmp -s %D/etc/asterisk/alsa.conf %D/etc/asterisk/alsa.conf-dist; then rm -f %D/etc/asterisk/alsa.conf; fi +etc/asterisk/alsa.conf-dist +@unexec if cmp -s %D/etc/asterisk/asterisk.adsi %D/etc/asterisk/asterisk.adsi-dist; then rm -f %D/etc/asterisk/asterisk.adsi; fi +etc/asterisk/asterisk.adsi-dist +@unexec if cmp -s %D/etc/asterisk/asterisk.conf %D/etc/asterisk/asterisk.conf-dist; then rm -f %D/etc/asterisk/asterisk.conf; fi +etc/asterisk/asterisk.conf-dist +etc/asterisk/asterisk.conf +@unexec if cmp -s %D/etc/asterisk/calendar.conf %D/etc/asterisk/calendar.conf-dist; then rm -f %D/etc/asterisk/calendar.conf; fi +etc/asterisk/calendar.conf-dist +@unexec if cmp -s %D/etc/asterisk/ccss.conf %D/etc/asterisk/ccss.conf-dist; then rm -f %D/etc/asterisk/ccss.conf; fi +etc/asterisk/ccss.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr.conf %D/etc/asterisk/cdr.conf-dist; then rm -f %D/etc/asterisk/cdr.conf; fi +etc/asterisk/cdr.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_custom.conf %D/etc/asterisk/cdr_custom.conf-dist; then rm -f %D/etc/asterisk/cdr_custom.conf; fi +etc/asterisk/cdr_custom.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_manager.conf %D/etc/asterisk/cdr_manager.conf-dist; then rm -f %D/etc/asterisk/cdr_manager.conf; fi +etc/asterisk/cdr_manager.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_mysql.conf %D/etc/asterisk/cdr_mysql.conf-dist; then rm -f %D/etc/asterisk/cdr_mysql.conf; fi +etc/asterisk/cdr_mysql.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_odbc.conf %D/etc/asterisk/cdr_odbc.conf-dist; then rm -f %D/etc/asterisk/cdr_odbc.conf; fi +etc/asterisk/cdr_odbc.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_pgsql.conf %D/etc/asterisk/cdr_pgsql.conf-dist; then rm -f %D/etc/asterisk/cdr_pgsql.conf; fi +etc/asterisk/cdr_pgsql.conf-dist +@unexec if cmp -s %D/etc/asterisk/cdr_tds.conf %D/etc/asterisk/cdr_tds.conf-dist; then rm -f %D/etc/asterisk/cdr_tds.conf; fi +etc/asterisk/cdr_tds.conf-dist +@unexec if cmp -s %D/etc/asterisk/cel.conf %D/etc/asterisk/cel.conf-dist; then rm -f %D/etc/asterisk/cel.conf; fi +etc/asterisk/cel.conf-dist +@unexec if cmp -s %D/etc/asterisk/cel_custom.conf %D/etc/asterisk/cel_custom.conf-dist; then rm -f %D/etc/asterisk/cel_custom.conf; fi +etc/asterisk/cel_custom.conf-dist +@unexec if cmp -s %D/etc/asterisk/cel_odbc.conf %D/etc/asterisk/cel_odbc.conf-dist; then rm -f %D/etc/asterisk/cel_odbc.conf; fi +etc/asterisk/cel_odbc.conf-dist +@unexec if cmp -s %D/etc/asterisk/cel_pgsql.conf %D/etc/asterisk/cel_pgsql.conf-dist; then rm -f %D/etc/asterisk/cel_pgsql.conf; fi +etc/asterisk/cel_pgsql.conf-dist +@unexec if cmp -s %D/etc/asterisk/cel_sqlite3_custom.conf %D/etc/asterisk/cel_sqlite3_custom.conf-dist; then rm -f %D/etc/asterisk/cel_sqlite3_custom.conf; fi +etc/asterisk/cel_sqlite3_custom.conf-dist +@unexec if cmp -s %D/etc/asterisk/cel_tds.conf %D/etc/asterisk/cel_tds.conf-dist; then rm -f %D/etc/asterisk/cel_tds.conf; fi +etc/asterisk/cel_tds.conf-dist +@unexec if cmp -s %D/etc/asterisk/codecs.conf %D/etc/asterisk/codecs.conf-dist; then rm -f %D/etc/asterisk/codecs.conf; fi +etc/asterisk/codecs.conf-dist +@unexec if cmp -s %D/etc/asterisk/dnsmgr.conf %D/etc/asterisk/dnsmgr.conf-dist; then rm -f %D/etc/asterisk/dnsmgr.conf; fi +etc/asterisk/dnsmgr.conf-dist +@unexec if cmp -s %D/etc/asterisk/dundi.conf %D/etc/asterisk/dundi.conf-dist; then rm -f %D/etc/asterisk/dundi.conf; fi +etc/asterisk/dundi.conf-dist +@unexec if cmp -s %D/etc/asterisk/enum.conf %D/etc/asterisk/enum.conf-dist; then rm -f %D/etc/asterisk/enum.conf; fi +etc/asterisk/enum.conf-dist +@unexec if cmp -s %D/etc/asterisk/extconfig.conf %D/etc/asterisk/extconfig.conf-dist; then rm -f %D/etc/asterisk/extconfig.conf; fi +etc/asterisk/extconfig.conf-dist +@unexec if cmp -s %D/etc/asterisk/extensions.ael %D/etc/asterisk/extensions.ael-dist; then rm -f %D/etc/asterisk/extensions.ael; fi +etc/asterisk/extensions.ael-dist +@unexec if cmp -s %D/etc/asterisk/extensions.conf %D/etc/asterisk/extensions.conf-dist; then rm -f %D/etc/asterisk/extensions.conf; fi +etc/asterisk/extensions.conf-dist +@unexec if cmp -s %D/etc/asterisk/features.conf %D/etc/asterisk/features.conf-dist; then rm -f %D/etc/asterisk/features.conf; fi +etc/asterisk/features.conf-dist +@unexec if cmp -s %D/etc/asterisk/festival.conf %D/etc/asterisk/festival.conf-dist; then rm -f %D/etc/asterisk/festival.conf; fi +etc/asterisk/festival.conf-dist +@unexec if cmp -s %D/etc/asterisk/iax.conf %D/etc/asterisk/iax.conf-dist; then rm -f %D/etc/asterisk/iax.conf; fi +etc/asterisk/iax.conf-dist +@unexec if cmp -s %D/etc/asterisk/iaxprov.conf %D/etc/asterisk/iaxprov.conf-dist; then rm -f %D/etc/asterisk/iaxprov.conf; fi +etc/asterisk/iaxprov.conf-dist +@unexec if cmp -s %D/etc/asterisk/indications.conf %D/etc/asterisk/indications.conf-dist; then rm -f %D/etc/asterisk/indications.conf; fi +etc/asterisk/indications.conf-dist +@unexec if cmp -s %D/etc/asterisk/logger.conf %D/etc/asterisk/logger.conf-dist; then rm -f %D/etc/asterisk/logger.conf; fi +etc/asterisk/logger.conf-dist +@unexec if cmp -s %D/etc/asterisk/manager.conf %D/etc/asterisk/manager.conf-dist; then rm -f %D/etc/asterisk/manager.conf; fi +etc/asterisk/manager.conf-dist +@unexec if cmp -s %D/etc/asterisk/meetme.conf %D/etc/asterisk/meetme.conf-dist; then rm -f %D/etc/asterisk/meetme.conf; fi +etc/asterisk/meetme.conf-dist +@unexec if cmp -s %D/etc/asterisk/mgcp.conf %D/etc/asterisk/mgcp.conf-dist; then rm -f %D/etc/asterisk/mgcp.conf; fi +etc/asterisk/mgcp.conf-dist +@unexec if cmp -s %D/etc/asterisk/misdn.conf %D/etc/asterisk/misdn.conf-dist; then rm -f %D/etc/asterisk/misdn.conf; fi +etc/asterisk/misdn.conf-dist +@unexec if cmp -s %D/etc/asterisk/modules.conf %D/etc/asterisk/modules.conf-dist; then rm -f %D/etc/asterisk/modules.conf; fi +etc/asterisk/modules.conf-dist +@unexec if cmp -s %D/etc/asterisk/musiconhold.conf %D/etc/asterisk/musiconhold.conf-dist; then rm -f %D/etc/asterisk/musiconhold.conf; fi +etc/asterisk/musiconhold.conf-dist +@unexec if cmp -s %D/etc/asterisk/osp.conf %D/etc/asterisk/osp.conf-dist; then rm -f %D/etc/asterisk/osp.conf; fi +etc/asterisk/osp.conf-dist +@unexec if cmp -s %D/etc/asterisk/oss.conf %D/etc/asterisk/oss.conf-dist; then rm -f %D/etc/asterisk/oss.conf; fi +etc/asterisk/oss.conf-dist +@unexec if cmp -s %D/etc/asterisk/phone.conf %D/etc/asterisk/phone.conf-dist; then rm -f %D/etc/asterisk/phone.conf; fi +etc/asterisk/phone.conf-dist +@unexec if cmp -s %D/etc/asterisk/queues.conf %D/etc/asterisk/queues.conf-dist; then rm -f %D/etc/asterisk/queues.conf; fi +etc/asterisk/queues.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_config_mysql.conf %D/etc/asterisk/res_config_mysql.conf-dist; then rm -f %D/etc/asterisk/res_config_mysql.conf; fi +etc/asterisk/res_config_mysql.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_pgsql.conf %D/etc/asterisk/res_pgsql.conf-dist; then rm -f %D/etc/asterisk/res_pgsql.conf; fi +etc/asterisk/res_pgsql.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_pktccops.conf %D/etc/asterisk/res_pktccops.conf-dist; then rm -f %D/etc/asterisk/res_pktccops.conf; fi +etc/asterisk/res_pktccops.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_odbc.conf %D/etc/asterisk/res_odbc.conf-dist; then rm -f %D/etc/asterisk/res_odbc.conf; fi +etc/asterisk/res_odbc.conf-dist +@unexec if cmp -s %D/etc/asterisk/rpt.conf %D/etc/asterisk/rpt.conf-dist; then rm -f %D/etc/asterisk/rpt.conf; fi +etc/asterisk/rpt.conf-dist +@unexec if cmp -s %D/etc/asterisk/rtp.conf %D/etc/asterisk/rtp.conf-dist; then rm -f %D/etc/asterisk/rtp.conf; fi +etc/asterisk/rtp.conf-dist +@unexec if cmp -s %D/etc/asterisk/sip.conf %D/etc/asterisk/sip.conf-dist; then rm -f %D/etc/asterisk/sip.conf; fi +etc/asterisk/sip.conf-dist +@unexec if cmp -s %D/etc/asterisk/sip_notify.conf %D/etc/asterisk/sip_notify.conf-dist; then rm -f %D/etc/asterisk/sip_notify.conf; fi +etc/asterisk/sip_notify.conf-dist +@unexec if cmp -s %D/etc/asterisk/skinny.conf %D/etc/asterisk/skinny.conf-dist; then rm -f %D/etc/asterisk/skinny.conf; fi +etc/asterisk/skinny.conf-dist +@unexec if cmp -s %D/etc/asterisk/telcordia-1.adsi %D/etc/asterisk/telcordia-1.adsi-dist; then rm -f %D/etc/asterisk/telcordia-1.adsi; fi +etc/asterisk/telcordia-1.adsi-dist +@unexec if cmp -s %D/etc/asterisk/voicemail.conf %D/etc/asterisk/voicemail.conf-dist; then rm -f %D/etc/asterisk/voicemail.conf; fi +etc/asterisk/voicemail.conf-dist +@unexec if cmp -s %D/etc/asterisk/vpb.conf %D/etc/asterisk/vpb.conf-dist; then rm -f %D/etc/asterisk/vpb.conf; fi +etc/asterisk/vpb.conf-dist +@unexec if cmp -s %D/etc/asterisk/chan_dahdi.conf %D/etc/asterisk/chan_dahdi.conf-dist; then rm -f %D/etc/asterisk/chan_dahdi.conf; fi +etc/asterisk/chan_dahdi.conf-dist +@unexec if cmp -s %D/etc/asterisk/chan_mobile.conf %D/etc/asterisk/chan_mobile.conf-dist; then rm -f %D/etc/asterisk/chan_mobile.conf; fi +etc/asterisk/chan_mobile.conf-dist +@unexec if cmp -s %D/etc/asterisk/chan_ooh323.conf %D/etc/asterisk/chan_ooh323.conf-dist; then rm -f %D/etc/asterisk/chan_ooh323.conf; fi +etc/asterisk/chan_ooh323.conf-dist +@unexec if cmp -s %D/etc/asterisk/udptl.conf %D/etc/asterisk/udptl.conf-dist; then rm -f %D/etc/asterisk/udptl.conf; fi +etc/asterisk/udptl.conf-dist +@unexec if cmp -s %D/etc/asterisk/users.conf %D/etc/asterisk/users.conf-dist; then rm -f %D/etc/asterisk/users.conf; fi +etc/asterisk/users.conf-dist +@unexec if cmp -s %D/etc/asterisk/smdi.conf %D/etc/asterisk/smdi.conf-dist; then rm -f %D/etc/asterisk/smdi.conf; fi +etc/asterisk/smdi.conf-dist +@unexec if cmp -s %D/etc/asterisk/sla.conf %D/etc/asterisk/sla.conf-dist; then rm -f %D/etc/asterisk/sla.conf; fi +etc/asterisk/sla.conf-dist +@unexec if cmp -s %D/etc/asterisk/say.conf %D/etc/asterisk/say.conf-dist; then rm -f %D/etc/asterisk/say.conf; fi +etc/asterisk/say.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_snmp.conf %D/etc/asterisk/res_snmp.conf-dist; then rm -f %D/etc/asterisk/res_snmp.conf; fi +etc/asterisk/res_snmp.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_stun_monitor.conf %D/etc/asterisk/res_stun_monitor.conf-dist; then rm -f %D/etc/asterisk/res_stun_monitor.conf; fi +etc/asterisk/res_stun_monitor.conf-dist +@unexec if cmp -s %D/etc/asterisk/muted.conf %D/etc/asterisk/muted.conf-dist; then rm -f %D/etc/asterisk/muted.conf; fi +etc/asterisk/muted.conf-dist +@unexec if cmp -s %D/etc/asterisk/jabber.conf %D/etc/asterisk/jabber.conf-dist; then rm -f %D/etc/asterisk/jabber.conf; fi +etc/asterisk/jabber.conf-dist +@unexec if cmp -s %D/etc/asterisk/http.conf %D/etc/asterisk/http.conf-dist; then rm -f %D/etc/asterisk/http.conf; fi +etc/asterisk/http.conf-dist +@unexec if cmp -s %D/etc/asterisk/h323.conf %D/etc/asterisk/h323.conf-dist; then rm -f %D/etc/asterisk/h323.conf; fi +etc/asterisk/h323.conf-dist +@unexec if cmp -s %D/etc/asterisk/gtalk.conf %D/etc/asterisk/gtalk.conf-dist; then rm -f %D/etc/asterisk/gtalk.conf; fi +etc/asterisk/gtalk.conf-dist +@unexec if cmp -s %D/etc/asterisk/func_odbc.conf %D/etc/asterisk/func_odbc.conf-dist; then rm -f %D/etc/asterisk/func_odbc.conf; fi +etc/asterisk/func_odbc.conf-dist +@unexec if cmp -s %D/etc/asterisk/followme.conf %D/etc/asterisk/followme.conf-dist; then rm -f %D/etc/asterisk/followme.conf; fi +etc/asterisk/followme.conf-dist +@unexec if cmp -s %D/etc/asterisk/amd.conf %D/etc/asterisk/amd.conf-dist; then rm -f %D/etc/asterisk/amd.conf; fi +etc/asterisk/amd.conf-dist +@unexec if cmp -s %D/etc/asterisk/app_mysql.conf %D/etc/asterisk/app_mysql.conf-dist; then rm -f %D/etc/asterisk/app_mysql.conf; fi +etc/asterisk/app_mysql.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_config_sqlite.conf %D/etc/asterisk/res_config_sqlite.conf-dist; then rm -f %D/etc/asterisk/res_config_sqlite.conf; fi +etc/asterisk/res_config_sqlite.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_curl.conf %D/etc/asterisk/res_curl.conf-dist; then rm -f %D/etc/asterisk/res_curl.conf; fi +etc/asterisk/res_curl.conf-dist +@unexec if cmp -s %D/etc/asterisk/res_fax.conf %D/etc/asterisk/res_fax.conf-dist; then rm -f %D/etc/asterisk/res_fax.conf; fi +etc/asterisk/res_fax.conf-dist +@exec if test ! -e %D/etc/asterisk/cdr_adaptive_odbc.conf; then cp -p %D/etc/asterisk/cdr_adaptive_odbc.conf-dist %D/etc/asterisk/cdr_adaptive_odbc.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_syslog.conf; then cp -p %D/etc/asterisk/cdr_syslog.conf-dist %D/etc/asterisk/cdr_syslog.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_sqlite3_custom.conf; then cp -p %D/etc/asterisk/cdr_sqlite3_custom.conf-dist %D/etc/asterisk/cdr_sqlite3_custom.conf; fi +@exec if test ! -e %D/etc/asterisk/cli.conf; then cp -p %D/etc/asterisk/cli.conf-dist %D/etc/asterisk/cli.conf; fi +@exec if test ! -e %D/etc/asterisk/console.conf; then cp -p %D/etc/asterisk/console.conf-dist %D/etc/asterisk/console.conf; fi +@exec if test ! -e %D/etc/asterisk/extensions.lua; then cp -p %D/etc/asterisk/extensions.lua-dist %D/etc/asterisk/extensions.lua; fi +@exec if test ! -e %D/etc/asterisk/extensions_minivm.conf; then cp -p %D/etc/asterisk/extensions_minivm.conf-dist %D/etc/asterisk/extensions_minivm.conf; fi +@exec if test ! -e %D/etc/asterisk/jingle.conf; then cp -p %D/etc/asterisk/jingle.conf-dist %D/etc/asterisk/jingle.conf; fi +@exec if test ! -e %D/etc/asterisk/minivm.conf; then cp -p %D/etc/asterisk/minivm.conf-dist %D/etc/asterisk/minivm.conf; fi +@exec if test ! -e %D/etc/asterisk/phoneprov.conf; then cp -p %D/etc/asterisk/phoneprov.conf-dist %D/etc/asterisk/phoneprov.conf; fi +@exec if test ! -e %D/etc/asterisk/queuerules.conf; then cp -p %D/etc/asterisk/queuerules.conf-dist %D/etc/asterisk/queuerules.conf; fi +@exec if test ! -e %D/etc/asterisk/res_ldap.conf; then cp -p %D/etc/asterisk/res_ldap.conf-dist %D/etc/asterisk/res_ldap.conf; fi +@exec if test ! -e %D/etc/asterisk/unistim.conf; then cp -p %D/etc/asterisk/unistim.conf-dist %D/etc/asterisk/unistim.conf; fi +@exec if test ! -e %D/etc/asterisk/usbradio.conf; then cp -p %D/etc/asterisk/usbradio.conf-dist %D/etc/asterisk/usbradio.conf; fi +@exec if test ! -e %D/etc/asterisk/adsi.conf; then cp -p %D/etc/asterisk/adsi.conf-dist %D/etc/asterisk/adsi.conf; fi +@exec if test ! -e %D/etc/asterisk/agents.conf; then cp -p %D/etc/asterisk/agents.conf-dist %D/etc/asterisk/agents.conf; fi +@exec if test ! -e %D/etc/asterisk/alarmreceiver.conf; then cp -p %D/etc/asterisk/alarmreceiver.conf-dist %D/etc/asterisk/alarmreceiver.conf; fi +@exec if test ! -e %D/etc/asterisk/alsa.conf; then cp -p %D/etc/asterisk/alsa.conf-dist %D/etc/asterisk/alsa.conf; fi +@exec if test ! -e %D/etc/asterisk/asterisk.adsi; then cp -p %D/etc/asterisk/asterisk.adsi-dist %D/etc/asterisk/asterisk.adsi; fi +@exec if test ! -e %D/etc/asterisk/ccss.conf; then cp -p %D/etc/asterisk/ccss.conf-dist %D/etc/asterisk/ccss.conf; fi +@exec if test ! -e %D/etc/asterisk/calendar.conf; then cp -p %D/etc/asterisk/calendar.conf-dist %D/etc/asterisk/calendar.conf; fi +@exec if test ! -e %D/etc/asterisk/asterisk.conf; then cp -p %D/etc/asterisk/asterisk.conf-dist %D/etc/asterisk/asterisk.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr.conf; then cp -p %D/etc/asterisk/cdr.conf-dist %D/etc/asterisk/cdr.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_custom.conf; then cp -p %D/etc/asterisk/cdr_custom.conf-dist %D/etc/asterisk/cdr_custom.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_mysql.conf; then cp -p %D/etc/asterisk/cdr_mysql.conf-dist %D/etc/asterisk/cdr_mysql.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_manager.conf; then cp -p %D/etc/asterisk/cdr_manager.conf-dist %D/etc/asterisk/cdr_manager.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_odbc.conf; then cp -p %D/etc/asterisk/cdr_odbc.conf-dist %D/etc/asterisk/cdr_odbc.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_pgsql.conf; then cp -p %D/etc/asterisk/cdr_pgsql.conf-dist %D/etc/asterisk/cdr_pgsql.conf; fi +@exec if test ! -e %D/etc/asterisk/cel_tds.conf; then cp -p %D/etc/asterisk/cel_tds.conf-dist %D/etc/asterisk/cel_tds.conf; fi +@exec if test ! -e %D/etc/asterisk/cel_sqlite3_custom.conf; then cp -p %D/etc/asterisk/cel_sqlite3_custom.conf-dist %D/etc/asterisk/cel_sqlite3_custom.conf; fi +@exec if test ! -e %D/etc/asterisk/cel_pgsql.conf; then cp -p %D/etc/asterisk/cel_pgsql.conf-dist %D/etc/asterisk/cel_pgsql.conf; fi +@exec if test ! -e %D/etc/asterisk/cel_odbc.conf; then cp -p %D/etc/asterisk/cel_odbc.conf-dist %D/etc/asterisk/cel_odbc.conf; fi +@exec if test ! -e %D/etc/asterisk/cel_custom.conf; then cp -p %D/etc/asterisk/cel_custom.conf-dist %D/etc/asterisk/cel_custom.conf; fi +@exec if test ! -e %D/etc/asterisk/cel.conf; then cp -p %D/etc/asterisk/cel.conf-dist %D/etc/asterisk/cel.conf; fi +@exec if test ! -e %D/etc/asterisk/cdr_tds.conf; then cp -p %D/etc/asterisk/cdr_tds.conf-dist %D/etc/asterisk/cdr_tds.conf; fi +@exec if test ! -e %D/etc/asterisk/codecs.conf; then cp -p %D/etc/asterisk/codecs.conf-dist %D/etc/asterisk/codecs.conf; fi +@exec if test ! -e %D/etc/asterisk/dnsmgr.conf; then cp -p %D/etc/asterisk/dnsmgr.conf-dist %D/etc/asterisk/dnsmgr.conf; fi +@exec if test ! -e %D/etc/asterisk/dundi.conf; then cp -p %D/etc/asterisk/dundi.conf-dist %D/etc/asterisk/dundi.conf; fi +@exec if test ! -e %D/etc/asterisk/enum.conf; then cp -p %D/etc/asterisk/enum.conf-dist %D/etc/asterisk/enum.conf; fi +@exec if test ! -e %D/etc/asterisk/extconfig.conf; then cp -p %D/etc/asterisk/extconfig.conf-dist %D/etc/asterisk/extconfig.conf; fi +@exec if test ! -e %D/etc/asterisk/extensions.ael; then cp -p %D/etc/asterisk/extensions.ael-dist %D/etc/asterisk/extensions.ael; fi +@exec if test ! -e %D/etc/asterisk/extensions.conf; then cp -p %D/etc/asterisk/extensions.conf-dist %D/etc/asterisk/extensions.conf; fi +@exec if test ! -e %D/etc/asterisk/features.conf; then cp -p %D/etc/asterisk/features.conf-dist %D/etc/asterisk/features.conf; fi +@exec if test ! -e %D/etc/asterisk/festival.conf; then cp -p %D/etc/asterisk/festival.conf-dist %D/etc/asterisk/festival.conf; fi +@exec if test ! -e %D/etc/asterisk/iax.conf; then cp -p %D/etc/asterisk/iax.conf-dist %D/etc/asterisk/iax.conf; fi +@exec if test ! -e %D/etc/asterisk/iaxprov.conf; then cp -p %D/etc/asterisk/iaxprov.conf-dist %D/etc/asterisk/iaxprov.conf; fi +@exec if test ! -e %D/etc/asterisk/indications.conf; then cp -p %D/etc/asterisk/indications.conf-dist %D/etc/asterisk/indications.conf; fi +@exec if test ! -e %D/etc/asterisk/logger.conf; then cp -p %D/etc/asterisk/logger.conf-dist %D/etc/asterisk/logger.conf; fi +@exec if test ! -e %D/etc/asterisk/manager.conf; then cp -p %D/etc/asterisk/manager.conf-dist %D/etc/asterisk/manager.conf; fi +@exec if test ! -e %D/etc/asterisk/meetme.conf; then cp -p %D/etc/asterisk/meetme.conf-dist %D/etc/asterisk/meetme.conf; fi +@exec if test ! -e %D/etc/asterisk/mgcp.conf; then cp -p %D/etc/asterisk/mgcp.conf-dist %D/etc/asterisk/mgcp.conf; fi +@exec if test ! -e %D/etc/asterisk/misdn.conf; then cp -p %D/etc/asterisk/misdn.conf-dist %D/etc/asterisk/misdn.conf; fi +@exec if test ! -e %D/etc/asterisk/modules.conf; then cp -p %D/etc/asterisk/modules.conf-dist %D/etc/asterisk/modules.conf; fi +@exec if test ! -e %D/etc/asterisk/musiconhold.conf; then cp -p %D/etc/asterisk/musiconhold.conf-dist %D/etc/asterisk/musiconhold.conf; fi +@exec if test ! -e %D/etc/asterisk/osp.conf; then cp -p %D/etc/asterisk/osp.conf-dist %D/etc/asterisk/osp.conf; fi +@exec if test ! -e %D/etc/asterisk/oss.conf; then cp -p %D/etc/asterisk/oss.conf-dist %D/etc/asterisk/oss.conf; fi +@exec if test ! -e %D/etc/asterisk/phone.conf; then cp -p %D/etc/asterisk/phone.conf-dist %D/etc/asterisk/phone.conf; fi +@exec if test ! -e %D/etc/asterisk/res_fax.conf; then cp -p %D/etc/asterisk/res_fax.conf-dist %D/etc/asterisk/res_fax.conf; fi +@exec if test ! -e %D/etc/asterisk/res_curl.conf; then cp -p %D/etc/asterisk/res_curl.conf-dist %D/etc/asterisk/res_curl.conf; fi +@exec if test ! -e %D/etc/asterisk/res_config_sqlite.conf; then cp -p %D/etc/asterisk/res_config_sqlite.conf-dist %D/etc/asterisk/res_config_sqlite.conf; fi +@exec if test ! -e %D/etc/asterisk/res_config_mysql.conf; then cp -p %D/etc/asterisk/res_config_mysql.conf-dist %D/etc/asterisk/res_config_mysql.conf; fi +@exec if test ! -e %D/etc/asterisk/queues.conf; then cp -p %D/etc/asterisk/queues.conf-dist %D/etc/asterisk/queues.conf; fi +@exec if test ! -e %D/etc/asterisk/res_pktccops.conf; then cp -p %D/etc/asterisk/res_pktccops.conf-dist %D/etc/asterisk/res_pktccops.conf; fi +@exec if test ! -e %D/etc/asterisk/res_pgsql.conf; then cp -p %D/etc/asterisk/res_pgsql.conf-dist %D/etc/asterisk/res_pgsql.conf; fi +@exec if test ! -e %D/etc/asterisk/res_odbc.conf; then cp -p %D/etc/asterisk/res_odbc.conf-dist %D/etc/asterisk/res_odbc.conf; fi +@exec if test ! -e %D/etc/asterisk/rpt.conf; then cp -p %D/etc/asterisk/rpt.conf-dist %D/etc/asterisk/rpt.conf; fi +@exec if test ! -e %D/etc/asterisk/rtp.conf; then cp -p %D/etc/asterisk/rtp.conf-dist %D/etc/asterisk/rtp.conf; fi +@exec if test ! -e %D/etc/asterisk/sip.conf; then cp -p %D/etc/asterisk/sip.conf-dist %D/etc/asterisk/sip.conf; fi +@exec if test ! -e %D/etc/asterisk/sip_notify.conf; then cp -p %D/etc/asterisk/sip_notify.conf-dist %D/etc/asterisk/sip_notify.conf; fi +@exec if test ! -e %D/etc/asterisk/skinny.conf; then cp -p %D/etc/asterisk/skinny.conf-dist %D/etc/asterisk/skinny.conf; fi +@exec if test ! -e %D/etc/asterisk/telcordia-1.adsi; then cp -p %D/etc/asterisk/telcordia-1.adsi-dist %D/etc/asterisk/telcordia-1.adsi; fi +@exec if test ! -e %D/etc/asterisk/voicemail.conf; then cp -p %D/etc/asterisk/voicemail.conf-dist %D/etc/asterisk/voicemail.conf; fi +@exec if test ! -e %D/etc/asterisk/vpb.conf; then cp -p %D/etc/asterisk/vpb.conf-dist %D/etc/asterisk/vpb.conf; fi +@exec if test ! -e %D/etc/asterisk/chan_ooh323.conf; then cp -p %D/etc/asterisk/chan_ooh323.conf-dist %D/etc/asterisk/chan_ooh323.conf; fi +@exec if test ! -e %D/etc/asterisk/chan_mobile.conf; then cp -p %D/etc/asterisk/chan_mobile.conf-dist %D/etc/asterisk/chan_mobile.conf; fi +@exec if test ! -e %D/etc/asterisk/chan_dahdi.conf; then cp -p %D/etc/asterisk/chan_dahdi.conf-dist %D/etc/asterisk/chan_dahdi.conf; fi +@exec if test ! -e %D/etc/asterisk/udptl.conf; then cp -p %D/etc/asterisk/udptl.conf-dist %D/etc/asterisk/udptl.conf; fi +@exec if test ! -e %D/etc/asterisk/users.conf; then cp -p %D/etc/asterisk/users.conf-dist %D/etc/asterisk/users.conf; fi +@exec if test ! -e %D/etc/asterisk/smdi.conf; then cp -p %D/etc/asterisk/smdi.conf-dist %D/etc/asterisk/smdi.conf; fi +@exec if test ! -e %D/etc/asterisk/sla.conf; then cp -p %D/etc/asterisk/sla.conf-dist %D/etc/asterisk/sla.conf; fi +@exec if test ! -e %D/etc/asterisk/say.conf; then cp -p %D/etc/asterisk/say.conf-dist %D/etc/asterisk/say.conf; fi +@exec if test ! -e %D/etc/asterisk/res_stun_monitor.conf; then cp -p %D/etc/asterisk/res_stun_monitor.conf-dist %D/etc/asterisk/res_stun_monitor.conf; fi +@exec if test ! -e %D/etc/asterisk/res_snmp.conf; then cp -p %D/etc/asterisk/res_snmp.conf-dist %D/etc/asterisk/res_snmp.conf; fi +@exec if test ! -e %D/etc/asterisk/muted.conf; then cp -p %D/etc/asterisk/muted.conf-dist %D/etc/asterisk/muted.conf; fi +@exec if test ! -e %D/etc/asterisk/jabber.conf; then cp -p %D/etc/asterisk/jabber.conf-dist %D/etc/asterisk/jabber.conf; fi +@exec if test ! -e %D/etc/asterisk/http.conf; then cp -p %D/etc/asterisk/http.conf-dist %D/etc/asterisk/http.conf; fi +@exec if test ! -e %D/etc/asterisk/h323.conf; then cp -p %D/etc/asterisk/h323.conf-dist %D/etc/asterisk/h323.conf; fi +@exec if test ! -e %D/etc/asterisk/gtalk.conf; then cp -p %D/etc/asterisk/gtalk.conf-dist %D/etc/asterisk/gtalk.conf; fi +@exec if test ! -e %D/etc/asterisk/func_odbc.conf; then cp -p %D/etc/asterisk/func_odbc.conf-dist %D/etc/asterisk/func_odbc.conf; fi +@exec if test ! -e %D/etc/asterisk/followme.conf; then cp -p %D/etc/asterisk/followme.conf-dist %D/etc/asterisk/followme.conf; fi +@exec if test ! -e %D/etc/asterisk/app_mysql.conf; then cp -p %D/etc/asterisk/app_mysql.conf-dist %D/etc/asterisk/app_mysql.conf; fi +@exec if test ! -e %D/etc/asterisk/amd.conf; then cp -p %D/etc/asterisk/amd.conf-dist %D/etc/asterisk/amd.conf; fi +include/asterisk/doxygen/architecture.h +include/asterisk/doxygen/asterisk-git-howto.h +include/asterisk/doxygen/commits.h +include/asterisk/doxygen/licensing.h +include/asterisk/doxygen/mantisworkflow.h +include/asterisk/doxygen/releases.h +include/asterisk/doxygen/reviewboard.h +include/asterisk/_private.h +include/asterisk/aoc.h +include/asterisk/ast_version.h +include/asterisk/autochan.h +include/asterisk/calendar.h +include/asterisk/ccss.h +include/asterisk/cel.h +include/asterisk/channelstate.h +include/asterisk/data.h +include/asterisk/event.h +include/asterisk/event_defs.h +include/asterisk/extconf.h +include/asterisk/frame_defs.h +include/asterisk/framehook.h +include/asterisk/fskmodem_float.h +include/asterisk/fskmodem_int.h +include/asterisk/hashtab.h +include/asterisk/mod_format.h +include/asterisk/netsock2.h +include/asterisk/network.h +include/asterisk/optional_api.h +include/asterisk/pktccops.h +include/asterisk/pval.h +include/asterisk/res_fax.h +include/asterisk/res_srtp.h +include/asterisk/rtp_engine.h +include/asterisk/select.h +include/asterisk/security_events.h +include/asterisk/security_events_defs.h +include/asterisk/stun.h +include/asterisk/syslog.h +include/asterisk/tcptls.h +include/asterisk.h +include/asterisk/abstract_jb.h +include/asterisk/acl.h +include/asterisk/adsi.h +include/asterisk/ael_structs.h +include/asterisk/agi.h +include/asterisk/alaw.h +include/asterisk/app.h +include/asterisk/ast_expr.h +include/asterisk/astdb.h +include/asterisk/astmm.h +include/asterisk/astobj.h +include/asterisk/astobj2.h +include/asterisk/astosp.h +include/asterisk/audiohook.h +include/asterisk/autoconfig.h +include/asterisk/bridging.h +include/asterisk/bridging_features.h +include/asterisk/bridging_technology.h +include/asterisk/build.h +include/asterisk/buildinfo.h +include/asterisk/buildopts.h +include/asterisk/callerid.h +include/asterisk/causes.h +include/asterisk/cdr.h +include/asterisk/channel.h +include/asterisk/chanvars.h +include/asterisk/cli.h +include/asterisk/compat.h +include/asterisk/compiler.h +include/asterisk/config.h +include/asterisk/crypto.h +include/asterisk/datastore.h +include/asterisk/devicestate.h +include/asterisk/dial.h +include/asterisk/dlinkedlists.h +include/asterisk/dns.h +include/asterisk/dnsmgr.h +include/asterisk/doxyref.h +include/asterisk/dsp.h +include/asterisk/dundi.h +include/asterisk/endian.h +include/asterisk/enum.h +include/asterisk/features.h +include/asterisk/file.h +include/asterisk/frame.h +include/asterisk/fskmodem.h +include/asterisk/global_datastores.h +include/asterisk/heap.h +include/asterisk/http.h +include/asterisk/image.h +include/asterisk/indications.h +include/asterisk/inline_api.h +include/asterisk/io.h +include/asterisk/jabber.h +include/asterisk/jingle.h +include/asterisk/linkedlists.h +include/asterisk/localtime.h +include/asterisk/lock.h +include/asterisk/logger.h +include/asterisk/manager.h +include/asterisk/md5.h +include/asterisk/module.h +include/asterisk/monitor.h +include/asterisk/musiconhold.h +include/asterisk/netsock.h +include/asterisk/options.h +include/asterisk/paths.h +include/asterisk/pbx.h +include/asterisk/plc.h +include/asterisk/poll-compat.h +include/asterisk/privacy.h +include/asterisk/res_odbc.h +include/asterisk/say.h +include/asterisk/sched.h +include/asterisk/sha1.h +include/asterisk/slin.h +include/asterisk/slinfactory.h +include/asterisk/smdi.h +include/asterisk/speech.h +include/asterisk/srv.h +include/asterisk/stringfields.h +include/asterisk/strings.h +include/asterisk/taskprocessor.h +include/asterisk/tdd.h +include/asterisk/term.h +include/asterisk/test.h +include/asterisk/threadstorage.h +include/asterisk/time.h +include/asterisk/timing.h +include/asterisk/transcap.h +include/asterisk/translate.h +include/asterisk/udptl.h +include/asterisk/ulaw.h +include/asterisk/unaligned.h +include/asterisk/utils.h +include/asterisk/version.h +include/asterisk/xml.h +include/asterisk/xmldoc.h +lib/asterisk/modules/app_celgenuserevent.so +lib/asterisk/modules/app_confbridge.so +lib/asterisk/modules/app_minivm.so +lib/asterisk/modules/app_originate.so +lib/asterisk/modules/app_playtones.so +lib/asterisk/modules/app_readexten.so +lib/asterisk/modules/app_waituntil.so +lib/asterisk/modules/bridge_builtin_features.so +lib/asterisk/modules/bridge_multiplexed.so +lib/asterisk/modules/bridge_simple.so +lib/asterisk/modules/bridge_softmix.so +%%WITH_ODBC%%lib/asterisk/modules/cdr_adaptive_odbc.so +%%WITH_JABBER%%lib/asterisk/modules/chan_jingle.so +lib/asterisk/modules/chan_bridge.so +lib/asterisk/modules/chan_unistim.so +lib/asterisk/modules/codec_g722.so +lib/asterisk/modules/format_g719.so +lib/asterisk/modules/format_sln16.so +lib/asterisk/modules/format_siren14.so +lib/asterisk/modules/format_siren7.so +lib/asterisk/modules/func_aes.so +lib/asterisk/modules/func_audiohookinherit.so +lib/asterisk/modules/func_blacklist.so +lib/asterisk/modules/func_config.so +lib/asterisk/modules/func_devstate.so +lib/asterisk/modules/func_dialgroup.so +lib/asterisk/modules/func_dialplan.so +lib/asterisk/modules/func_extstate.so +lib/asterisk/modules/func_iconv.so +lib/asterisk/modules/func_lock.so +lib/asterisk/modules/func_module.so +lib/asterisk/modules/func_shell.so +lib/asterisk/modules/func_speex.so +lib/asterisk/modules/func_sprintf.so +lib/asterisk/modules/func_sysinfo.so +lib/asterisk/modules/func_version.so +lib/asterisk/modules/func_vmcount.so +lib/asterisk/modules/func_volume.so +lib/asterisk/modules/res_ael_share.so +lib/asterisk/modules/res_clialiases.so +%%WITH_CURL%%lib/asterisk/modules/res_curl.so +%%WITH_CURL%%lib/asterisk/modules/res_config_curl.so +%%WITH_H323%%lib/asterisk/modules/res_config_ldap.so +%%WITH_SQLITE%%lib/asterisk/modules/res_config_sqlite.so +lib/asterisk/modules/res_limit.so +lib/asterisk/modules/res_phoneprov.so +lib/asterisk/modules/res_realtime.so +%%WITH_DAHDI%%lib/asterisk/modules/res_timing_dahdi.so +lib/asterisk/modules/res_timing_pthread.so +lib/asterisk/modules/app_adsiprog.so +lib/asterisk/modules/app_alarmreceiver.so +lib/asterisk/modules/app_amd.so +lib/asterisk/modules/app_authenticate.so +lib/asterisk/modules/app_cdr.so +lib/asterisk/modules/app_chanisavail.so +lib/asterisk/modules/app_channelredirect.so +lib/asterisk/modules/app_chanspy.so +lib/asterisk/modules/app_controlplayback.so +lib/asterisk/modules/app_db.so +lib/asterisk/modules/app_dial.so +lib/asterisk/modules/app_dictate.so +lib/asterisk/modules/app_directed_pickup.so +lib/asterisk/modules/app_directory.so +lib/asterisk/modules/app_disa.so +lib/asterisk/modules/app_dumpchan.so +lib/asterisk/modules/app_echo.so +lib/asterisk/modules/app_exec.so +lib/asterisk/modules/app_externalivr.so +lib/asterisk/modules/app_festival.so +lib/asterisk/modules/app_followme.so +lib/asterisk/modules/app_forkcdr.so +lib/asterisk/modules/app_getcpeid.so +lib/asterisk/modules/app_ices.so +lib/asterisk/modules/app_image.so +lib/asterisk/modules/app_macro.so +lib/asterisk/modules/app_milliwatt.so +lib/asterisk/modules/app_mixmonitor.so +lib/asterisk/modules/app_morsecode.so +lib/asterisk/modules/app_mp3.so +lib/asterisk/modules/app_nbscat.so +lib/asterisk/modules/app_parkandannounce.so +lib/asterisk/modules/app_playback.so +lib/asterisk/modules/app_privacy.so +lib/asterisk/modules/app_queue.so +lib/asterisk/modules/app_read.so +lib/asterisk/modules/app_readfile.so +lib/asterisk/modules/app_record.so +lib/asterisk/modules/app_sayunixtime.so +lib/asterisk/modules/app_senddtmf.so +lib/asterisk/modules/app_sendtext.so +lib/asterisk/modules/app_setcallerid.so +lib/asterisk/modules/app_sms.so +lib/asterisk/modules/app_softhangup.so +lib/asterisk/modules/app_speech_utils.so +lib/asterisk/modules/app_stack.so +lib/asterisk/modules/app_system.so +lib/asterisk/modules/app_talkdetect.so +lib/asterisk/modules/app_test.so +lib/asterisk/modules/app_transfer.so +lib/asterisk/modules/app_url.so +lib/asterisk/modules/app_userevent.so +lib/asterisk/modules/app_verbose.so +lib/asterisk/modules/app_voicemail.so +lib/asterisk/modules/app_waitforring.so +lib/asterisk/modules/app_waitforsilence.so +lib/asterisk/modules/app_while.so +lib/asterisk/modules/app_zapateller.so +lib/asterisk/modules/cdr_csv.so +lib/asterisk/modules/cdr_custom.so +lib/asterisk/modules/cdr_manager.so +%%WITH_POSTGRES%%lib/asterisk/modules/cdr_pgsql.so +%%WITH_RADIUS%%lib/asterisk/modules/cdr_radius.so +%%WITH_SQLITE%%lib/asterisk/modules/cdr_sqlite.so +%%WITH_SQLITE%%lib/asterisk/modules/cdr_sqlite3_custom.so +lib/asterisk/modules/cdr_syslog.so +lib/asterisk/modules/cel_custom.so +lib/asterisk/modules/cel_manager.so +lib/asterisk/modules/cel_odbc.so +lib/asterisk/modules/cel_pgsql.so +lib/asterisk/modules/cel_radius.so +lib/asterisk/modules/cel_sqlite3_custom.so +%%WITH_FREETDS%%lib/asterisk/modules/cel_tds.so +lib/asterisk/modules/chan_agent.so +%%WITH_JABBER%%lib/asterisk/modules/chan_gtalk.so +lib/asterisk/modules/chan_iax2.so +lib/asterisk/modules/chan_local.so +lib/asterisk/modules/chan_mgcp.so +lib/asterisk/modules/chan_multicast_rtp.so +lib/asterisk/modules/chan_oss.so +lib/asterisk/modules/chan_sip.so +lib/asterisk/modules/chan_skinny.so +lib/asterisk/modules/codec_a_mu.so +lib/asterisk/modules/codec_adpcm.so +lib/asterisk/modules/codec_alaw.so +lib/asterisk/modules/codec_g726.so +%%WITH_GSM%%lib/asterisk/modules/codec_gsm.so +%%WITH_ILBC%%lib/asterisk/modules/codec_ilbc.so +lib/asterisk/modules/codec_lpc10.so +lib/asterisk/modules/codec_speex.so +lib/asterisk/modules/codec_ulaw.so +lib/asterisk/modules/format_g723.so +lib/asterisk/modules/format_g726.so +lib/asterisk/modules/format_g729.so +lib/asterisk/modules/format_gsm.so +lib/asterisk/modules/format_h263.so +lib/asterisk/modules/format_h264.so +lib/asterisk/modules/format_ilbc.so +lib/asterisk/modules/format_jpeg.so +%%WITH_OGGVORBIS%%lib/asterisk/modules/format_ogg_vorbis.so +lib/asterisk/modules/format_pcm.so +lib/asterisk/modules/format_sln.so +lib/asterisk/modules/format_vox.so +lib/asterisk/modules/format_wav.so +lib/asterisk/modules/format_wav_gsm.so +lib/asterisk/modules/func_base64.so +lib/asterisk/modules/func_callcompletion.so +lib/asterisk/modules/func_callerid.so +lib/asterisk/modules/func_cdr.so +lib/asterisk/modules/func_channel.so +%%WITH_CURL%%lib/asterisk/modules/func_curl.so +lib/asterisk/modules/func_cut.so +lib/asterisk/modules/func_db.so +lib/asterisk/modules/func_enum.so +lib/asterisk/modules/func_env.so +lib/asterisk/modules/func_frame_trace.so +lib/asterisk/modules/func_global.so +lib/asterisk/modules/func_groupcount.so +lib/asterisk/modules/func_logic.so +lib/asterisk/modules/func_math.so +lib/asterisk/modules/func_md5.so +%%WITH_ODBC%%lib/asterisk/modules/func_odbc.so +lib/asterisk/modules/func_pitchshift.so +lib/asterisk/modules/func_rand.so +lib/asterisk/modules/func_realtime.so +lib/asterisk/modules/func_sha1.so +lib/asterisk/modules/func_srv.so +lib/asterisk/modules/func_strings.so +lib/asterisk/modules/func_timeout.so +lib/asterisk/modules/func_uri.so +lib/asterisk/modules/pbx_ael.so +lib/asterisk/modules/pbx_config.so +lib/asterisk/modules/pbx_dundi.so +lib/asterisk/modules/pbx_loopback.so +lib/asterisk/modules/pbx_realtime.so +lib/asterisk/modules/pbx_spool.so +lib/asterisk/modules/res_adsi.so +lib/asterisk/modules/res_agi.so +lib/asterisk/modules/res_calendar.so +%%WITH_EXCHANGE%%lib/asterisk/modules/res_calendar_ews.so +lib/asterisk/modules/res_clioriginate.so +%%WITH_POSTGRES%%lib/asterisk/modules/res_config_pgsql.so +lib/asterisk/modules/res_convert.so +lib/asterisk/modules/res_crypto.so +lib/asterisk/modules/res_fax.so +%%WITH_SPANDSP%%lib/asterisk/modules/res_fax_spandsp.so +%%WITH_JABBER%%lib/asterisk/modules/res_jabber.so +lib/asterisk/modules/res_monitor.so +lib/asterisk/modules/res_musiconhold.so +lib/asterisk/modules/res_mutestream.so +lib/asterisk/modules/res_rtp_asterisk.so +lib/asterisk/modules/res_rtp_multicast.so +lib/asterisk/modules/res_security_log.so +lib/asterisk/modules/res_stun_monitor.so +lib/asterisk/modules/res_smdi.so +%%WITH_SNMP%%lib/asterisk/modules/res_snmp.so +lib/asterisk/modules/res_speech.so +sbin/astcanary +sbin/asterisk +sbin/astgenkey +sbin/autosupport +sbin/rasterisk +sbin/safe_asterisk +share/asterisk/agi-bin/agi-test.agi +share/asterisk/agi-bin/eagi-sphinx-test +share/asterisk/agi-bin/eagi-test +share/asterisk/agi-bin/jukebox.agi +share/asterisk/documentation/appdocsxml.dtd +share/asterisk/documentation/core-en_US.xml +share/asterisk/moh/.asterisk-moh-opsound-wav-2.03 +share/asterisk/moh/CHANGES-asterisk-moh-opsound-wav +share/asterisk/moh/CREDITS-asterisk-moh-opsound-wav +share/asterisk/moh/LICENSE-asterisk-moh-opsound-wav +share/asterisk/moh/macroform-cold_day.wav +share/asterisk/moh/macroform-robot_dity.wav +share/asterisk/moh/macroform-the_simplicity.wav +share/asterisk/moh/manolo_camp-morning_coffee.wav +share/asterisk/moh/reno_project-system.wav +share/asterisk/phoneprov/000000000000-directory.xml +share/asterisk/phoneprov/000000000000-phone.cfg +share/asterisk/phoneprov/000000000000.cfg +share/asterisk/phoneprov/polycom.xml +share/asterisk/phoneprov/polycom_line.xml +share/asterisk/sounds/en/CHANGES-asterisk-core-en-1.4.20 +share/asterisk/sounds/en/CREDITS-asterisk-core-en-1.4.20 +share/asterisk/sounds/en/LICENSE-asterisk-core-en-1.4.20 +share/asterisk/sounds/en/ascending-2tone.gsm +share/asterisk/sounds/en/conf-adminmenu-162.gsm +share/asterisk/sounds/en/conf-extended.gsm +share/asterisk/sounds/en/conf-nonextended.gsm +share/asterisk/sounds/en/conf-now-muted.gsm +share/asterisk/sounds/en/conf-now-recording.gsm +share/asterisk/sounds/en/conf-now-unmuted.gsm +share/asterisk/sounds/en/conf-roll-callcomplete.gsm +share/asterisk/sounds/en/conf-usermenu-162.gsm +share/asterisk/sounds/en/descending-2tone.gsm +share/asterisk/sounds/en/spy-dahdi.gsm +share/asterisk/sounds/en/vm-Urgent.gsm +share/asterisk/sounds/en/vm-forward-multiple.gsm +share/asterisk/sounds/en/vm-invalid-password.gsm +share/asterisk/sounds/en/vm-marked-nonurgent.gsm +share/asterisk/sounds/en/vm-marked-urgent.gsm +share/asterisk/sounds/en/vm-pls-try-again.gsm +share/asterisk/sounds/en/vm-record-prepend.gsm +share/asterisk/sounds/en/vm-review-nonurgent.gsm +share/asterisk/sounds/en/vm-review-urgent.gsm +share/asterisk/sounds/en/dir-usingkeypad.gsm +share/asterisk/sounds/en/dir-welcome.gsm +share/asterisk/sounds/en/agent-alreadyon.gsm +share/asterisk/sounds/en/agent-incorrect.gsm +share/asterisk/sounds/en/agent-loggedoff.gsm +share/asterisk/sounds/en/agent-loginok.gsm +share/asterisk/sounds/en/agent-newlocation.gsm +share/asterisk/sounds/en/agent-pass.gsm +share/asterisk/sounds/en/agent-user.gsm +share/asterisk/sounds/en/auth-incorrect.gsm +share/asterisk/sounds/en/auth-thankyou.gsm +share/asterisk/sounds/en/beep.gsm +share/asterisk/sounds/en/beeperr.gsm +share/asterisk/sounds/en/conf-adminmenu.gsm +share/asterisk/sounds/en/conf-enteringno.gsm +share/asterisk/sounds/en/conf-errormenu.gsm +share/asterisk/sounds/en/conf-getchannel.gsm +share/asterisk/sounds/en/conf-getconfno.gsm +share/asterisk/sounds/en/conf-getpin.gsm +share/asterisk/sounds/en/conf-hasjoin.gsm +share/asterisk/sounds/en/conf-hasleft.gsm +share/asterisk/sounds/en/conf-invalid.gsm +share/asterisk/sounds/en/conf-invalidpin.gsm +share/asterisk/sounds/en/conf-kicked.gsm +share/asterisk/sounds/en/conf-leaderhasleft.gsm +share/asterisk/sounds/en/conf-locked.gsm +share/asterisk/sounds/en/conf-lockednow.gsm +share/asterisk/sounds/en/conf-muted.gsm +share/asterisk/sounds/en/conf-noempty.gsm +share/asterisk/sounds/en/conf-onlyone.gsm +share/asterisk/sounds/en/conf-onlyperson.gsm +share/asterisk/sounds/en/conf-otherinparty.gsm +share/asterisk/sounds/en/conf-placeintoconf.gsm +share/asterisk/sounds/en/conf-thereare.gsm +share/asterisk/sounds/en/conf-unlockednow.gsm +share/asterisk/sounds/en/conf-unmuted.gsm +share/asterisk/sounds/en/conf-usermenu.gsm +share/asterisk/sounds/en/conf-userswilljoin.gsm +share/asterisk/sounds/en/conf-userwilljoin.gsm +share/asterisk/sounds/en/conf-waitforleader.gsm +share/asterisk/sounds/en/core-sounds-en.txt +share/asterisk/sounds/en/demo-abouttotry.gsm +share/asterisk/sounds/en/demo-congrats.gsm +share/asterisk/sounds/en/demo-echodone.gsm +share/asterisk/sounds/en/demo-echotest.gsm +share/asterisk/sounds/en/demo-enterkeywords.gsm +share/asterisk/sounds/en/demo-instruct.gsm +share/asterisk/sounds/en/demo-moreinfo.gsm +share/asterisk/sounds/en/demo-nogo.gsm +share/asterisk/sounds/en/demo-nomatch.gsm +share/asterisk/sounds/en/demo-thanks.gsm +share/asterisk/sounds/en/dictate/both_help.gsm +share/asterisk/sounds/en/dictate/enter_filename.gsm +share/asterisk/sounds/en/dictate/forhelp.gsm +share/asterisk/sounds/en/dictate/pause.gsm +share/asterisk/sounds/en/dictate/paused.gsm +share/asterisk/sounds/en/dictate/play_help.gsm +share/asterisk/sounds/en/dictate/playback.gsm +share/asterisk/sounds/en/dictate/playback_mode.gsm +share/asterisk/sounds/en/dictate/record.gsm +share/asterisk/sounds/en/dictate/record_help.gsm +share/asterisk/sounds/en/dictate/record_mode.gsm +share/asterisk/sounds/en/dictate/truncating_audio.gsm +share/asterisk/sounds/en/digits/0.gsm +share/asterisk/sounds/en/digits/1.gsm +share/asterisk/sounds/en/digits/10.gsm +share/asterisk/sounds/en/digits/11.gsm +share/asterisk/sounds/en/digits/12.gsm +share/asterisk/sounds/en/digits/13.gsm +share/asterisk/sounds/en/digits/14.gsm +share/asterisk/sounds/en/digits/15.gsm +share/asterisk/sounds/en/digits/16.gsm +share/asterisk/sounds/en/digits/17.gsm +share/asterisk/sounds/en/digits/18.gsm +share/asterisk/sounds/en/digits/19.gsm +share/asterisk/sounds/en/digits/2.gsm +share/asterisk/sounds/en/digits/20.gsm +share/asterisk/sounds/en/digits/3.gsm +share/asterisk/sounds/en/digits/30.gsm +share/asterisk/sounds/en/digits/4.gsm +share/asterisk/sounds/en/digits/40.gsm +share/asterisk/sounds/en/digits/5.gsm +share/asterisk/sounds/en/digits/50.gsm +share/asterisk/sounds/en/digits/6.gsm +share/asterisk/sounds/en/digits/60.gsm +share/asterisk/sounds/en/digits/7.gsm +share/asterisk/sounds/en/digits/70.gsm +share/asterisk/sounds/en/digits/8.gsm +share/asterisk/sounds/en/digits/80.gsm +share/asterisk/sounds/en/digits/9.gsm +share/asterisk/sounds/en/digits/90.gsm +share/asterisk/sounds/en/digits/a-m.gsm +share/asterisk/sounds/en/digits/at.gsm +share/asterisk/sounds/en/digits/billion.gsm +share/asterisk/sounds/en/digits/day-0.gsm +share/asterisk/sounds/en/digits/day-1.gsm +share/asterisk/sounds/en/digits/day-2.gsm +share/asterisk/sounds/en/digits/day-3.gsm +share/asterisk/sounds/en/digits/day-4.gsm +share/asterisk/sounds/en/digits/day-5.gsm +share/asterisk/sounds/en/digits/day-6.gsm +share/asterisk/sounds/en/digits/dollars.gsm +share/asterisk/sounds/en/digits/h-1.gsm +share/asterisk/sounds/en/digits/h-10.gsm +share/asterisk/sounds/en/digits/h-11.gsm +share/asterisk/sounds/en/digits/h-12.gsm +share/asterisk/sounds/en/digits/h-13.gsm +share/asterisk/sounds/en/digits/h-14.gsm +share/asterisk/sounds/en/digits/h-15.gsm +share/asterisk/sounds/en/digits/h-16.gsm +share/asterisk/sounds/en/digits/h-17.gsm +share/asterisk/sounds/en/digits/h-18.gsm +share/asterisk/sounds/en/digits/h-19.gsm +share/asterisk/sounds/en/digits/h-2.gsm +share/asterisk/sounds/en/digits/h-20.gsm +share/asterisk/sounds/en/digits/h-3.gsm +share/asterisk/sounds/en/digits/h-30.gsm +share/asterisk/sounds/en/digits/h-4.gsm +share/asterisk/sounds/en/digits/h-40.gsm +share/asterisk/sounds/en/digits/h-5.gsm +share/asterisk/sounds/en/digits/h-50.gsm +share/asterisk/sounds/en/digits/h-6.gsm +share/asterisk/sounds/en/digits/h-60.gsm +share/asterisk/sounds/en/digits/h-7.gsm +share/asterisk/sounds/en/digits/h-70.gsm +share/asterisk/sounds/en/digits/h-8.gsm +share/asterisk/sounds/en/digits/h-80.gsm +share/asterisk/sounds/en/digits/h-9.gsm +share/asterisk/sounds/en/digits/h-90.gsm +share/asterisk/sounds/en/digits/h-billion.gsm +share/asterisk/sounds/en/digits/h-hundred.gsm +share/asterisk/sounds/en/digits/h-million.gsm +share/asterisk/sounds/en/digits/h-thousand.gsm +share/asterisk/sounds/en/digits/hundred.gsm +share/asterisk/sounds/en/digits/million.gsm +share/asterisk/sounds/en/digits/minus.gsm +share/asterisk/sounds/en/digits/mon-0.gsm +share/asterisk/sounds/en/digits/mon-1.gsm +share/asterisk/sounds/en/digits/mon-10.gsm +share/asterisk/sounds/en/digits/mon-11.gsm +share/asterisk/sounds/en/digits/mon-2.gsm +share/asterisk/sounds/en/digits/mon-3.gsm +share/asterisk/sounds/en/digits/mon-4.gsm +share/asterisk/sounds/en/digits/mon-5.gsm +share/asterisk/sounds/en/digits/mon-6.gsm +share/asterisk/sounds/en/digits/mon-7.gsm +share/asterisk/sounds/en/digits/mon-8.gsm +share/asterisk/sounds/en/digits/mon-9.gsm +share/asterisk/sounds/en/digits/oclock.gsm +share/asterisk/sounds/en/digits/oh.gsm +share/asterisk/sounds/en/digits/p-m.gsm +share/asterisk/sounds/en/digits/pound.gsm +share/asterisk/sounds/en/digits/star.gsm +share/asterisk/sounds/en/digits/thousand.gsm +share/asterisk/sounds/en/digits/today.gsm +share/asterisk/sounds/en/digits/tomorrow.gsm +share/asterisk/sounds/en/digits/yesterday.gsm +share/asterisk/sounds/en/dir-first.gsm +share/asterisk/sounds/en/dir-firstlast.gsm +share/asterisk/sounds/en/dir-instr.gsm +share/asterisk/sounds/en/dir-intro-fn.gsm +share/asterisk/sounds/en/dir-intro.gsm +share/asterisk/sounds/en/dir-last.gsm +share/asterisk/sounds/en/dir-multi1.gsm +share/asterisk/sounds/en/dir-multi2.gsm +share/asterisk/sounds/en/dir-multi3.gsm +share/asterisk/sounds/en/dir-multi9.gsm +share/asterisk/sounds/en/dir-nomatch.gsm +share/asterisk/sounds/en/dir-nomore.gsm +share/asterisk/sounds/en/dir-pls-enter.gsm +share/asterisk/sounds/en/followme/call-from.gsm +share/asterisk/sounds/en/followme/no-recording.gsm +share/asterisk/sounds/en/followme/options.gsm +share/asterisk/sounds/en/followme/pls-hold-while-try.gsm +share/asterisk/sounds/en/followme/sorry.gsm +share/asterisk/sounds/en/followme/status.gsm +share/asterisk/sounds/en/hello-world.gsm +share/asterisk/sounds/en/hours.gsm +share/asterisk/sounds/en/invalid.gsm +share/asterisk/sounds/en/letters/a.gsm +share/asterisk/sounds/en/letters/ascii123.gsm +share/asterisk/sounds/en/letters/ascii124.gsm +share/asterisk/sounds/en/letters/ascii125.gsm +share/asterisk/sounds/en/letters/ascii126.gsm +share/asterisk/sounds/en/letters/ascii34.gsm +share/asterisk/sounds/en/letters/ascii36.gsm +share/asterisk/sounds/en/letters/ascii37.gsm +share/asterisk/sounds/en/letters/ascii38.gsm +share/asterisk/sounds/en/letters/ascii39.gsm +share/asterisk/sounds/en/letters/ascii40.gsm +share/asterisk/sounds/en/letters/ascii41.gsm +share/asterisk/sounds/en/letters/ascii42.gsm +share/asterisk/sounds/en/letters/ascii44.gsm +share/asterisk/sounds/en/letters/ascii58.gsm +share/asterisk/sounds/en/letters/ascii59.gsm +share/asterisk/sounds/en/letters/ascii60.gsm +share/asterisk/sounds/en/letters/ascii62.gsm +share/asterisk/sounds/en/letters/ascii63.gsm +share/asterisk/sounds/en/letters/ascii91.gsm +share/asterisk/sounds/en/letters/ascii92.gsm +share/asterisk/sounds/en/letters/ascii93.gsm +share/asterisk/sounds/en/letters/ascii94.gsm +share/asterisk/sounds/en/letters/ascii95.gsm +share/asterisk/sounds/en/letters/ascii96.gsm +share/asterisk/sounds/en/letters/asterisk.gsm +share/asterisk/sounds/en/letters/at.gsm +share/asterisk/sounds/en/letters/b.gsm +share/asterisk/sounds/en/letters/c.gsm +share/asterisk/sounds/en/letters/d.gsm +share/asterisk/sounds/en/letters/dash.gsm +share/asterisk/sounds/en/letters/dollar.gsm +share/asterisk/sounds/en/letters/dot.gsm +share/asterisk/sounds/en/letters/e.gsm +share/asterisk/sounds/en/letters/equals.gsm +share/asterisk/sounds/en/letters/exclaimation-point.gsm +share/asterisk/sounds/en/letters/f.gsm +share/asterisk/sounds/en/letters/g.gsm +share/asterisk/sounds/en/letters/h.gsm +share/asterisk/sounds/en/letters/i.gsm +share/asterisk/sounds/en/letters/j.gsm +share/asterisk/sounds/en/letters/k.gsm +share/asterisk/sounds/en/letters/l.gsm +share/asterisk/sounds/en/letters/m.gsm +share/asterisk/sounds/en/letters/n.gsm +share/asterisk/sounds/en/letters/o.gsm +share/asterisk/sounds/en/letters/p.gsm +share/asterisk/sounds/en/letters/plus.gsm +share/asterisk/sounds/en/letters/q.gsm +share/asterisk/sounds/en/letters/r.gsm +share/asterisk/sounds/en/letters/s.gsm +share/asterisk/sounds/en/letters/slash.gsm +share/asterisk/sounds/en/letters/space.gsm +share/asterisk/sounds/en/letters/t.gsm +share/asterisk/sounds/en/letters/u.gsm +share/asterisk/sounds/en/letters/v.gsm +share/asterisk/sounds/en/letters/w.gsm +share/asterisk/sounds/en/letters/x.gsm +share/asterisk/sounds/en/letters/y.gsm +share/asterisk/sounds/en/letters/z.gsm +share/asterisk/sounds/en/letters/zed.gsm +share/asterisk/sounds/en/minutes.gsm +share/asterisk/sounds/en/pbx-invalid.gsm +share/asterisk/sounds/en/pbx-invalidpark.gsm +share/asterisk/sounds/en/pbx-parkingfailed.gsm +share/asterisk/sounds/en/pbx-transfer.gsm +share/asterisk/sounds/en/phonetic/9_p.gsm +share/asterisk/sounds/en/phonetic/a_p.gsm +share/asterisk/sounds/en/phonetic/b_p.gsm +share/asterisk/sounds/en/phonetic/c_p.gsm +share/asterisk/sounds/en/phonetic/d_p.gsm +share/asterisk/sounds/en/phonetic/e_p.gsm +share/asterisk/sounds/en/phonetic/f_p.gsm +share/asterisk/sounds/en/phonetic/g_p.gsm +share/asterisk/sounds/en/phonetic/h_p.gsm +share/asterisk/sounds/en/phonetic/i_p.gsm +share/asterisk/sounds/en/phonetic/j_p.gsm +share/asterisk/sounds/en/phonetic/k_p.gsm +share/asterisk/sounds/en/phonetic/l_p.gsm +share/asterisk/sounds/en/phonetic/m_p.gsm +share/asterisk/sounds/en/phonetic/n_p.gsm +share/asterisk/sounds/en/phonetic/o_p.gsm +share/asterisk/sounds/en/phonetic/p_p.gsm +share/asterisk/sounds/en/phonetic/q_p.gsm +share/asterisk/sounds/en/phonetic/r_p.gsm +share/asterisk/sounds/en/phonetic/s_p.gsm +share/asterisk/sounds/en/phonetic/t_p.gsm +share/asterisk/sounds/en/phonetic/u_p.gsm +share/asterisk/sounds/en/phonetic/v_p.gsm +share/asterisk/sounds/en/phonetic/w_p.gsm +share/asterisk/sounds/en/phonetic/x_p.gsm +share/asterisk/sounds/en/phonetic/y_p.gsm +share/asterisk/sounds/en/phonetic/z_p.gsm +share/asterisk/sounds/en/priv-callee-options.gsm +share/asterisk/sounds/en/priv-callpending.gsm +share/asterisk/sounds/en/priv-introsaved.gsm +share/asterisk/sounds/en/priv-recordintro.gsm +share/asterisk/sounds/en/privacy-incorrect.gsm +share/asterisk/sounds/en/privacy-prompt.gsm +share/asterisk/sounds/en/privacy-thankyou.gsm +share/asterisk/sounds/en/privacy-unident.gsm +share/asterisk/sounds/en/queue-callswaiting.gsm +share/asterisk/sounds/en/queue-holdtime.gsm +share/asterisk/sounds/en/queue-less-than.gsm +share/asterisk/sounds/en/queue-minute.gsm +share/asterisk/sounds/en/queue-minutes.gsm +share/asterisk/sounds/en/queue-periodic-announce.gsm +share/asterisk/sounds/en/queue-quantity1.gsm +share/asterisk/sounds/en/queue-quantity2.gsm +share/asterisk/sounds/en/queue-reporthold.gsm +share/asterisk/sounds/en/queue-seconds.gsm +share/asterisk/sounds/en/queue-thankyou.gsm +share/asterisk/sounds/en/queue-thereare.gsm +share/asterisk/sounds/en/queue-youarenext.gsm +share/asterisk/sounds/en/screen-callee-options.gsm +share/asterisk/sounds/en/seconds.gsm +share/asterisk/sounds/en/silence/1.gsm +share/asterisk/sounds/en/silence/10.gsm +share/asterisk/sounds/en/silence/2.gsm +share/asterisk/sounds/en/silence/3.gsm +share/asterisk/sounds/en/silence/4.gsm +share/asterisk/sounds/en/silence/5.gsm +share/asterisk/sounds/en/silence/6.gsm +share/asterisk/sounds/en/silence/7.gsm +share/asterisk/sounds/en/silence/8.gsm +share/asterisk/sounds/en/silence/9.gsm +share/asterisk/sounds/en/spy-agent.gsm +share/asterisk/sounds/en/spy-console.gsm +share/asterisk/sounds/en/spy-h323.gsm +share/asterisk/sounds/en/spy-iax.gsm +share/asterisk/sounds/en/spy-iax2.gsm +share/asterisk/sounds/en/spy-jingle.gsm +share/asterisk/sounds/en/spy-local.gsm +share/asterisk/sounds/en/spy-mgcp.gsm +share/asterisk/sounds/en/spy-misdn.gsm +share/asterisk/sounds/en/spy-mobile.gsm +share/asterisk/sounds/en/spy-nbs.gsm +share/asterisk/sounds/en/spy-sip.gsm +share/asterisk/sounds/en/spy-skinny.gsm +share/asterisk/sounds/en/spy-unistim.gsm +share/asterisk/sounds/en/spy-usbradio.gsm +share/asterisk/sounds/en/spy-zap.gsm +share/asterisk/sounds/en/ss-noservice.gsm +share/asterisk/sounds/en/transfer.gsm +share/asterisk/sounds/en/tt-allbusy.gsm +share/asterisk/sounds/en/tt-monkeys.gsm +share/asterisk/sounds/en/tt-monkeysintro.gsm +share/asterisk/sounds/en/tt-somethingwrong.gsm +share/asterisk/sounds/en/tt-weasels.gsm +share/asterisk/sounds/en/vm-Cust1.gsm +share/asterisk/sounds/en/vm-Cust2.gsm +share/asterisk/sounds/en/vm-Cust3.gsm +share/asterisk/sounds/en/vm-Cust4.gsm +share/asterisk/sounds/en/vm-Cust5.gsm +share/asterisk/sounds/en/vm-Family.gsm +share/asterisk/sounds/en/vm-Friends.gsm +share/asterisk/sounds/en/vm-INBOX.gsm +share/asterisk/sounds/en/vm-Old.gsm +share/asterisk/sounds/en/vm-Work.gsm +share/asterisk/sounds/en/vm-advopts.gsm +share/asterisk/sounds/en/vm-and.gsm +share/asterisk/sounds/en/vm-calldiffnum.gsm +share/asterisk/sounds/en/vm-changeto.gsm +share/asterisk/sounds/en/vm-delete.gsm +share/asterisk/sounds/en/vm-deleted.gsm +share/asterisk/sounds/en/vm-dialout.gsm +share/asterisk/sounds/en/vm-duration.gsm +share/asterisk/sounds/en/vm-enter-num-to-call.gsm +share/asterisk/sounds/en/vm-extension.gsm +share/asterisk/sounds/en/vm-first.gsm +share/asterisk/sounds/en/vm-for.gsm +share/asterisk/sounds/en/vm-forward.gsm +share/asterisk/sounds/en/vm-forwardoptions.gsm +share/asterisk/sounds/en/vm-from-extension.gsm +share/asterisk/sounds/en/vm-from-phonenumber.gsm +share/asterisk/sounds/en/vm-from.gsm +share/asterisk/sounds/en/vm-goodbye.gsm +share/asterisk/sounds/en/vm-helpexit.gsm +share/asterisk/sounds/en/vm-incorrect-mailbox.gsm +share/asterisk/sounds/en/vm-incorrect.gsm +share/asterisk/sounds/en/vm-instructions.gsm +share/asterisk/sounds/en/vm-intro.gsm +share/asterisk/sounds/en/vm-invalidpassword.gsm +share/asterisk/sounds/en/vm-isonphone.gsm +share/asterisk/sounds/en/vm-isunavail.gsm +share/asterisk/sounds/en/vm-last.gsm +share/asterisk/sounds/en/vm-leavemsg.gsm +share/asterisk/sounds/en/vm-login.gsm +share/asterisk/sounds/en/vm-mailboxfull.gsm +share/asterisk/sounds/en/vm-message.gsm +share/asterisk/sounds/en/vm-messages.gsm +share/asterisk/sounds/en/vm-minutes.gsm +share/asterisk/sounds/en/vm-mismatch.gsm +share/asterisk/sounds/en/vm-msginstruct.gsm +share/asterisk/sounds/en/vm-msgsaved.gsm +share/asterisk/sounds/en/vm-newpassword.gsm +share/asterisk/sounds/en/vm-newuser.gsm +share/asterisk/sounds/en/vm-next.gsm +share/asterisk/sounds/en/vm-no.gsm +share/asterisk/sounds/en/vm-nobodyavail.gsm +share/asterisk/sounds/en/vm-nobox.gsm +share/asterisk/sounds/en/vm-nomore.gsm +share/asterisk/sounds/en/vm-nonumber.gsm +share/asterisk/sounds/en/vm-num-i-have.gsm +share/asterisk/sounds/en/vm-onefor.gsm +share/asterisk/sounds/en/vm-onefor-full.gsm +share/asterisk/sounds/en/vm-options.gsm +share/asterisk/sounds/en/vm-opts.gsm +share/asterisk/sounds/en/vm-opts-full.gsm +share/asterisk/sounds/en/vm-passchanged.gsm +share/asterisk/sounds/en/vm-password.gsm +share/asterisk/sounds/en/vm-press.gsm +share/asterisk/sounds/en/vm-prev.gsm +share/asterisk/sounds/en/vm-reachoper.gsm +share/asterisk/sounds/en/vm-rec-busy.gsm +share/asterisk/sounds/en/vm-rec-name.gsm +share/asterisk/sounds/en/vm-rec-temp.gsm +share/asterisk/sounds/en/vm-rec-unv.gsm +share/asterisk/sounds/en/vm-received.gsm +share/asterisk/sounds/en/vm-reenterpassword.gsm +share/asterisk/sounds/en/vm-repeat.gsm +share/asterisk/sounds/en/vm-review.gsm +share/asterisk/sounds/en/vm-saved.gsm +share/asterisk/sounds/en/vm-savedto.gsm +share/asterisk/sounds/en/vm-savefolder.gsm +share/asterisk/sounds/en/vm-savemessage.gsm +share/asterisk/sounds/en/vm-saveoper.gsm +share/asterisk/sounds/en/vm-sorry.gsm +share/asterisk/sounds/en/vm-star-cancel.gsm +share/asterisk/sounds/en/vm-starmain.gsm +share/asterisk/sounds/en/vm-tempgreetactive.gsm +share/asterisk/sounds/en/vm-tempgreeting.gsm +share/asterisk/sounds/en/vm-tempgreeting2.gsm +share/asterisk/sounds/en/vm-tempremoved.gsm +share/asterisk/sounds/en/vm-then-pound.gsm +share/asterisk/sounds/en/vm-theperson.gsm +share/asterisk/sounds/en/vm-tmpexists.gsm +share/asterisk/sounds/en/vm-tocallback.gsm +share/asterisk/sounds/en/vm-tocallnum.gsm +share/asterisk/sounds/en/vm-tocancel.gsm +share/asterisk/sounds/en/vm-tocancelmsg.gsm +share/asterisk/sounds/en/vm-toenternumber.gsm +share/asterisk/sounds/en/vm-toforward.gsm +share/asterisk/sounds/en/vm-tohearenv.gsm +share/asterisk/sounds/en/vm-tomakecall.gsm +share/asterisk/sounds/en/vm-tooshort.gsm +share/asterisk/sounds/en/vm-toreply.gsm +share/asterisk/sounds/en/vm-torerecord.gsm +share/asterisk/sounds/en/vm-undelete.gsm +share/asterisk/sounds/en/vm-undeleted.gsm +share/asterisk/sounds/en/vm-unknown-caller.gsm +share/asterisk/sounds/en/vm-whichbox.gsm +share/asterisk/sounds/en/vm-youhave.gsm +share/asterisk/sounds/.asterisk-core-sounds-en-gsm-1.4.20 +share/asterisk/static-http/ajamdemo.html +share/asterisk/static-http/astman.css +share/asterisk/static-http/astman.js +share/asterisk/static-http/core-en_US.xml +share/asterisk/static-http/prototype.js +share/asterisk/static-http/mantest.html +%%WITH_DAHDI%%lib/asterisk/modules/app_flash.so +%%WITH_DAHDI%%lib/asterisk/modules/app_meetme.so +%%WITH_DAHDI%%lib/asterisk/modules/app_page.so +%%WITH_DAHDI%%lib/asterisk/modules/app_dahdibarge.so +%%WITH_DAHDI%%lib/asterisk/modules/app_dahdiras.so +%%WITH_ODBC%%lib/asterisk/modules/cdr_odbc.so +%%WITH_FREETDS%%lib/asterisk/modules/cdr_tds.so +%%WITH_H323%%lib/asterisk/modules/chan_h323.so +%%WITH_DAHDI%%lib/asterisk/modules/chan_dahdi.so +%%WITH_DAHDI%%lib/asterisk/modules/codec_dahdi.so +%%WITH_ODBC%%lib/asterisk/modules/res_config_odbc.so +%%WITH_ODBC%%lib/asterisk/modules/res_odbc.so +%%DOCSDIR%%/WARNINGS +%%DOCSDIR%%/asterisk.css +%%DOCSDIR%%/asterisk.html +%%DOCSDIR%%/images.aux +%%DOCSDIR%%/images.log +%%DOCSDIR%%/images.out +%%DOCSDIR%%/images.pl +%%DOCSDIR%%/images.tex +%%DOCSDIR%%/img1.png +%%DOCSDIR%%/img2.png +%%DOCSDIR%%/img3.png +%%DOCSDIR%%/img4.png +%%DOCSDIR%%/img5.png +%%DOCSDIR%%/img6.png +%%DOCSDIR%%/img7.png +%%DOCSDIR%%/img8.png +%%DOCSDIR%%/img9.png +%%DOCSDIR%%/index.html +%%DOCSDIR%%/internals.pl +%%DOCSDIR%%/labels.pl +%%DOCSDIR%%/node1.html +%%DOCSDIR%%/node10.html +%%DOCSDIR%%/node100.html +%%DOCSDIR%%/node101.html +%%DOCSDIR%%/node102.html +%%DOCSDIR%%/node103.html +%%DOCSDIR%%/node104.html +%%DOCSDIR%%/node105.html +%%DOCSDIR%%/node106.html +%%DOCSDIR%%/node107.html +%%DOCSDIR%%/node108.html +%%DOCSDIR%%/node109.html +%%DOCSDIR%%/node11.html +%%DOCSDIR%%/node110.html +%%DOCSDIR%%/node111.html +%%DOCSDIR%%/node112.html +%%DOCSDIR%%/node113.html +%%DOCSDIR%%/node114.html +%%DOCSDIR%%/node115.html +%%DOCSDIR%%/node116.html +%%DOCSDIR%%/node117.html +%%DOCSDIR%%/node118.html +%%DOCSDIR%%/node119.html +%%DOCSDIR%%/node12.html +%%DOCSDIR%%/node120.html +%%DOCSDIR%%/node121.html +%%DOCSDIR%%/node122.html +%%DOCSDIR%%/node123.html +%%DOCSDIR%%/node124.html +%%DOCSDIR%%/node125.html +%%DOCSDIR%%/node126.html +%%DOCSDIR%%/node127.html +%%DOCSDIR%%/node128.html +%%DOCSDIR%%/node129.html +%%DOCSDIR%%/node13.html +%%DOCSDIR%%/node130.html +%%DOCSDIR%%/node131.html +%%DOCSDIR%%/node132.html +%%DOCSDIR%%/node133.html +%%DOCSDIR%%/node134.html +%%DOCSDIR%%/node135.html +%%DOCSDIR%%/node136.html +%%DOCSDIR%%/node137.html +%%DOCSDIR%%/node138.html +%%DOCSDIR%%/node139.html +%%DOCSDIR%%/node14.html +%%DOCSDIR%%/node140.html +%%DOCSDIR%%/node141.html +%%DOCSDIR%%/node142.html +%%DOCSDIR%%/node143.html +%%DOCSDIR%%/node144.html +%%DOCSDIR%%/node145.html +%%DOCSDIR%%/node146.html +%%DOCSDIR%%/node147.html +%%DOCSDIR%%/node148.html +%%DOCSDIR%%/node149.html +%%DOCSDIR%%/node15.html +%%DOCSDIR%%/node150.html +%%DOCSDIR%%/node151.html +%%DOCSDIR%%/node152.html +%%DOCSDIR%%/node153.html +%%DOCSDIR%%/node154.html +%%DOCSDIR%%/node155.html +%%DOCSDIR%%/node156.html +%%DOCSDIR%%/node157.html +%%DOCSDIR%%/node158.html +%%DOCSDIR%%/node159.html +%%DOCSDIR%%/node16.html +%%DOCSDIR%%/node160.html +%%DOCSDIR%%/node161.html +%%DOCSDIR%%/node162.html +%%DOCSDIR%%/node163.html +%%DOCSDIR%%/node164.html +%%DOCSDIR%%/node165.html +%%DOCSDIR%%/node166.html +%%DOCSDIR%%/node167.html +%%DOCSDIR%%/node168.html +%%DOCSDIR%%/node169.html +%%DOCSDIR%%/node17.html +%%DOCSDIR%%/node170.html +%%DOCSDIR%%/node171.html +%%DOCSDIR%%/node172.html +%%DOCSDIR%%/node173.html +%%DOCSDIR%%/node174.html +%%DOCSDIR%%/node175.html +%%DOCSDIR%%/node176.html +%%DOCSDIR%%/node177.html +%%DOCSDIR%%/node178.html +%%DOCSDIR%%/node179.html +%%DOCSDIR%%/node18.html +%%DOCSDIR%%/node180.html +%%DOCSDIR%%/node181.html +%%DOCSDIR%%/node182.html +%%DOCSDIR%%/node183.html +%%DOCSDIR%%/node184.html +%%DOCSDIR%%/node185.html +%%DOCSDIR%%/node186.html +%%DOCSDIR%%/node187.html +%%DOCSDIR%%/node188.html +%%DOCSDIR%%/node189.html +%%DOCSDIR%%/node19.html +%%DOCSDIR%%/node190.html +%%DOCSDIR%%/node191.html +%%DOCSDIR%%/node192.html +%%DOCSDIR%%/node193.html +%%DOCSDIR%%/node194.html +%%DOCSDIR%%/node195.html +%%DOCSDIR%%/node196.html +%%DOCSDIR%%/node197.html +%%DOCSDIR%%/node198.html +%%DOCSDIR%%/node199.html +%%DOCSDIR%%/node2.html +%%DOCSDIR%%/node20.html +%%DOCSDIR%%/node200.html +%%DOCSDIR%%/node201.html +%%DOCSDIR%%/node202.html +%%DOCSDIR%%/node203.html +%%DOCSDIR%%/node204.html +%%DOCSDIR%%/node205.html +%%DOCSDIR%%/node206.html +%%DOCSDIR%%/node207.html +%%DOCSDIR%%/node208.html +%%DOCSDIR%%/node209.html +%%DOCSDIR%%/node21.html +%%DOCSDIR%%/node210.html +%%DOCSDIR%%/node211.html +%%DOCSDIR%%/node212.html +%%DOCSDIR%%/node213.html +%%DOCSDIR%%/node214.html +%%DOCSDIR%%/node215.html +%%DOCSDIR%%/node216.html +%%DOCSDIR%%/node217.html +%%DOCSDIR%%/node218.html +%%DOCSDIR%%/node219.html +%%DOCSDIR%%/node22.html +%%DOCSDIR%%/node220.html +%%DOCSDIR%%/node221.html +%%DOCSDIR%%/node222.html +%%DOCSDIR%%/node223.html +%%DOCSDIR%%/node224.html +%%DOCSDIR%%/node225.html +%%DOCSDIR%%/node226.html +%%DOCSDIR%%/node227.html +%%DOCSDIR%%/node228.html +%%DOCSDIR%%/node229.html +%%DOCSDIR%%/node23.html +%%DOCSDIR%%/node230.html +%%DOCSDIR%%/node231.html +%%DOCSDIR%%/node232.html +%%DOCSDIR%%/node233.html +%%DOCSDIR%%/node234.html +%%DOCSDIR%%/node235.html +%%DOCSDIR%%/node236.html +%%DOCSDIR%%/node237.html +%%DOCSDIR%%/node238.html +%%DOCSDIR%%/node239.html +%%DOCSDIR%%/node24.html +%%DOCSDIR%%/node240.html +%%DOCSDIR%%/node241.html +%%DOCSDIR%%/node242.html +%%DOCSDIR%%/node243.html +%%DOCSDIR%%/node244.html +%%DOCSDIR%%/node245.html +%%DOCSDIR%%/node246.html +%%DOCSDIR%%/node247.html +%%DOCSDIR%%/node248.html +%%DOCSDIR%%/node249.html +%%DOCSDIR%%/node25.html +%%DOCSDIR%%/node250.html +%%DOCSDIR%%/node251.html +%%DOCSDIR%%/node252.html +%%DOCSDIR%%/node253.html +%%DOCSDIR%%/node254.html +%%DOCSDIR%%/node255.html +%%DOCSDIR%%/node256.html +%%DOCSDIR%%/node257.html +%%DOCSDIR%%/node258.html +%%DOCSDIR%%/node259.html +%%DOCSDIR%%/node26.html +%%DOCSDIR%%/node260.html +%%DOCSDIR%%/node261.html +%%DOCSDIR%%/node262.html +%%DOCSDIR%%/node263.html +%%DOCSDIR%%/node264.html +%%DOCSDIR%%/node265.html +%%DOCSDIR%%/node266.html +%%DOCSDIR%%/node267.html +%%DOCSDIR%%/node268.html +%%DOCSDIR%%/node269.html +%%DOCSDIR%%/node27.html +%%DOCSDIR%%/node270.html +%%DOCSDIR%%/node271.html +%%DOCSDIR%%/node272.html +%%DOCSDIR%%/node273.html +%%DOCSDIR%%/node274.html +%%DOCSDIR%%/node275.html +%%DOCSDIR%%/node276.html +%%DOCSDIR%%/node277.html +%%DOCSDIR%%/node278.html +%%DOCSDIR%%/node279.html +%%DOCSDIR%%/node28.html +%%DOCSDIR%%/node280.html +%%DOCSDIR%%/node281.html +%%DOCSDIR%%/node282.html +%%DOCSDIR%%/node283.html +%%DOCSDIR%%/node284.html +%%DOCSDIR%%/node285.html +%%DOCSDIR%%/node286.html +%%DOCSDIR%%/node287.html +%%DOCSDIR%%/node288.html +%%DOCSDIR%%/node289.html +%%DOCSDIR%%/node290.html +%%DOCSDIR%%/node291.html +%%DOCSDIR%%/node292.html +%%DOCSDIR%%/node293.html +%%DOCSDIR%%/node294.html +%%DOCSDIR%%/node295.html +%%DOCSDIR%%/node296.html +%%DOCSDIR%%/node297.html +%%DOCSDIR%%/node298.html +%%DOCSDIR%%/node299.html +%%DOCSDIR%%/node29.html +%%DOCSDIR%%/node3.html +%%DOCSDIR%%/node300.html +%%DOCSDIR%%/node301.html +%%DOCSDIR%%/node302.html +%%DOCSDIR%%/node303.html +%%DOCSDIR%%/node304.html +%%DOCSDIR%%/node305.html +%%DOCSDIR%%/node306.html +%%DOCSDIR%%/node307.html +%%DOCSDIR%%/node308.html +%%DOCSDIR%%/node309.html +%%DOCSDIR%%/node30.html +%%DOCSDIR%%/node310.html +%%DOCSDIR%%/node311.html +%%DOCSDIR%%/node312.html +%%DOCSDIR%%/node313.html +%%DOCSDIR%%/node314.html +%%DOCSDIR%%/node315.html +%%DOCSDIR%%/node316.html +%%DOCSDIR%%/node317.html +%%DOCSDIR%%/node318.html +%%DOCSDIR%%/node319.html +%%DOCSDIR%%/node31.html +%%DOCSDIR%%/node320.html +%%DOCSDIR%%/node321.html +%%DOCSDIR%%/node322.html +%%DOCSDIR%%/node323.html +%%DOCSDIR%%/node324.html +%%DOCSDIR%%/node325.html +%%DOCSDIR%%/node326.html +%%DOCSDIR%%/node327.html +%%DOCSDIR%%/node328.html +%%DOCSDIR%%/node329.html +%%DOCSDIR%%/node32.html +%%DOCSDIR%%/node330.html +%%DOCSDIR%%/node331.html +%%DOCSDIR%%/node332.html +%%DOCSDIR%%/node333.html +%%DOCSDIR%%/node334.html +%%DOCSDIR%%/node335.html +%%DOCSDIR%%/node336.html +%%DOCSDIR%%/node337.html +%%DOCSDIR%%/node338.html +%%DOCSDIR%%/node339.html +%%DOCSDIR%%/node33.html +%%DOCSDIR%%/node340.html +%%DOCSDIR%%/node341.html +%%DOCSDIR%%/node342.html +%%DOCSDIR%%/node343.html +%%DOCSDIR%%/node344.html +%%DOCSDIR%%/node345.html +%%DOCSDIR%%/node346.html +%%DOCSDIR%%/node347.html +%%DOCSDIR%%/node348.html +%%DOCSDIR%%/node349.html +%%DOCSDIR%%/node34.html +%%DOCSDIR%%/node350.html +%%DOCSDIR%%/node351.html +%%DOCSDIR%%/node352.html +%%DOCSDIR%%/node353.html +%%DOCSDIR%%/node354.html +%%DOCSDIR%%/node355.html +%%DOCSDIR%%/node356.html +%%DOCSDIR%%/node357.html +%%DOCSDIR%%/node358.html +%%DOCSDIR%%/node359.html +%%DOCSDIR%%/node35.html +%%DOCSDIR%%/node360.html +%%DOCSDIR%%/node361.html +%%DOCSDIR%%/node362.html +%%DOCSDIR%%/node363.html +%%DOCSDIR%%/node364.html +%%DOCSDIR%%/node365.html +%%DOCSDIR%%/node366.html +%%DOCSDIR%%/node367.html +%%DOCSDIR%%/node368.html +%%DOCSDIR%%/node369.html +%%DOCSDIR%%/node36.html +%%DOCSDIR%%/node370.html +%%DOCSDIR%%/node371.html +%%DOCSDIR%%/node372.html +%%DOCSDIR%%/node373.html +%%DOCSDIR%%/node374.html +%%DOCSDIR%%/node375.html +%%DOCSDIR%%/node376.html +%%DOCSDIR%%/node377.html +%%DOCSDIR%%/node378.html +%%DOCSDIR%%/node379.html +%%DOCSDIR%%/node37.html +%%DOCSDIR%%/node380.html +%%DOCSDIR%%/node381.html +%%DOCSDIR%%/node382.html +%%DOCSDIR%%/node383.html +%%DOCSDIR%%/node384.html +%%DOCSDIR%%/node385.html +%%DOCSDIR%%/node386.html +%%DOCSDIR%%/node387.html +%%DOCSDIR%%/node388.html +%%DOCSDIR%%/node389.html +%%DOCSDIR%%/node38.html +%%DOCSDIR%%/node390.html +%%DOCSDIR%%/node391.html +%%DOCSDIR%%/node39.html +%%DOCSDIR%%/node4.html +%%DOCSDIR%%/node40.html +%%DOCSDIR%%/node41.html +%%DOCSDIR%%/node42.html +%%DOCSDIR%%/node43.html +%%DOCSDIR%%/node44.html +%%DOCSDIR%%/node45.html +%%DOCSDIR%%/node46.html +%%DOCSDIR%%/node47.html +%%DOCSDIR%%/node48.html +%%DOCSDIR%%/node49.html +%%DOCSDIR%%/node5.html +%%DOCSDIR%%/node50.html +%%DOCSDIR%%/node51.html +%%DOCSDIR%%/node52.html +%%DOCSDIR%%/node53.html +%%DOCSDIR%%/node54.html +%%DOCSDIR%%/node55.html +%%DOCSDIR%%/node56.html +%%DOCSDIR%%/node57.html +%%DOCSDIR%%/node58.html +%%DOCSDIR%%/node59.html +%%DOCSDIR%%/node6.html +%%DOCSDIR%%/node60.html +%%DOCSDIR%%/node61.html +%%DOCSDIR%%/node62.html +%%DOCSDIR%%/node63.html +%%DOCSDIR%%/node64.html +%%DOCSDIR%%/node65.html +%%DOCSDIR%%/node66.html +%%DOCSDIR%%/node67.html +%%DOCSDIR%%/node68.html +%%DOCSDIR%%/node69.html +%%DOCSDIR%%/node7.html +%%DOCSDIR%%/node70.html +%%DOCSDIR%%/node71.html +%%DOCSDIR%%/node72.html +%%DOCSDIR%%/node73.html +%%DOCSDIR%%/node74.html +%%DOCSDIR%%/node75.html +%%DOCSDIR%%/node76.html +%%DOCSDIR%%/node77.html +%%DOCSDIR%%/node78.html +%%DOCSDIR%%/node79.html +%%DOCSDIR%%/node8.html +%%DOCSDIR%%/node80.html +%%DOCSDIR%%/node81.html +%%DOCSDIR%%/node82.html +%%DOCSDIR%%/node83.html +%%DOCSDIR%%/node84.html +%%DOCSDIR%%/node85.html +%%DOCSDIR%%/node86.html +%%DOCSDIR%%/node87.html +%%DOCSDIR%%/node88.html +%%DOCSDIR%%/node89.html +%%DOCSDIR%%/node9.html +%%DOCSDIR%%/node90.html +%%DOCSDIR%%/node91.html +%%DOCSDIR%%/node92.html +%%DOCSDIR%%/node93.html +%%DOCSDIR%%/node94.html +%%DOCSDIR%%/node95.html +%%DOCSDIR%%/node96.html +%%DOCSDIR%%/node97.html +%%DOCSDIR%%/node98.html +%%DOCSDIR%%/node99.html +%%DOCSDIR%%/images/asterisk-intro.jpg +%%DOCSDIR%%/images/kpad2.jpg +@dirrm %%DOCSDIR%%/images +@dirrm %%DOCSDIR%% +@dirrm share/asterisk/static-http +@dirrm share/asterisk/sounds/en/silence +@dirrm share/asterisk/sounds/en/phonetic +@dirrm share/asterisk/sounds/en/letters +@dirrm share/asterisk/sounds/en/followme +@dirrm share/asterisk/sounds/en/digits +@dirrm share/asterisk/sounds/en/dictate +@dirrm share/asterisk/sounds/en_AU +@dirrm share/asterisk/sounds/en +@dirrm share/asterisk/sounds/es +@dirrm share/asterisk/sounds/fr +@dirrm share/asterisk/sounds +@dirrm share/asterisk/phoneprov +@dirrm share/asterisk/moh +@dirrm share/asterisk/keys +@dirrm share/asterisk/images +@dirrm share/asterisk/firmware/iax +@dirrm share/asterisk/firmware +@dirrm share/asterisk/documentation/thirdparty +@dirrm share/asterisk/documentation +@dirrm share/asterisk/agi-bin +@dirrm share/asterisk +@dirrm lib/asterisk/modules +@dirrm lib/asterisk +@dirrm include/asterisk/doxygen +@dirrm include/asterisk +@dirrmtry etc/asterisk +@exec mkdir -p %D/share/asterisk/keys +@exec mkdir -p %D/share/asterisk/images +@exec mkdir -p %D/share/asterisk/firmware/iax +@exec mkdir -p %D/share/asterisk/documentation/thirdparty +@exec mkdir -p %D/share/asterisk/sounds/es +@exec mkdir -p %D/share/asterisk/sounds/fr +@exec mkdir -p %D/share/asterisk/sounds/en_AU +@cwd /var +spool/asterisk/voicemail/default/1234/en/busy.gsm +spool/asterisk/voicemail/default/1234/en/unavail.gsm +@exec mkdir -p %D/log/asterisk/cdr-csv +@exec mkdir -p %D/log/asterisk/cel-csv +@exec mkdir -p %D/log/asterisk/cdr-custom +@exec mkdir -p %D/log/asterisk/cel-custom +@exec mkdir -p %D/spool/asterisk/dictate +@exec mkdir -p %D/spool/asterisk/meetme +@exec mkdir -p %D/spool/asterisk/monitor +@exec mkdir -p %D/spool/asterisk/outgoing +@exec mkdir -p %D/spool/asterisk/system +@exec mkdir -p %D/spool/asterisk/voicemail/default/1234/INBOX +@exec mkdir -p %D/spool/asterisk/voicemail/default/1234/en +@exec mkdir -p %D/spool/asterisk/tmp +@exec mkdir -p %D/db/asterisk +@exec chown -R %%ASTERISK_USER%%:%%ASTERISK_GROUP%% %D/db/asterisk +@exec chown -R %%ASTERISK_USER%%:%%ASTERISK_GROUP%% %D/spool/asterisk +@exec chown -R %%ASTERISK_USER%%:%%ASTERISK_GROUP%% %D/log/asterisk +@dirrm spool/asterisk/dictate +@dirrm spool/asterisk/meetme +@dirrm spool/asterisk/monitor +@dirrm spool/asterisk/outgoing +@dirrm spool/asterisk/system +@dirrm spool/asterisk/voicemail/default/1234/INBOX +@dirrm spool/asterisk/voicemail/default/1234/en +@dirrm spool/asterisk/voicemail/default/1234 +@dirrm spool/asterisk/voicemail/default +@dirrm spool/asterisk/voicemail +@dirrm spool/asterisk/tmp +@dirrm spool/asterisk +@dirrm log/asterisk/cdr-csv +@dirrm log/asterisk/cel-csv +@dirrm log/asterisk/cdr-custom +@dirrm log/asterisk/cel-custom +@dirrm log/asterisk