From a5f8e484e6824ba4f450992b68491208ca1e4fcc Mon Sep 17 00:00:00 2001 From: Jiri Slachta Date: Tue, 5 Apr 2016 10:17:38 +0200 Subject: [PATCH] asterisk-1.8.x: remove obsolete package, it is after its EOL Signed-off-by: Jiri Slachta --- net/asterisk-1.8.x/Makefile | 391 ---- net/asterisk-1.8.x/files/asterisk.default | 4 - net/asterisk-1.8.x/files/asterisk.init | 32 - .../030-GNU-GLOB-exts-only-on-glibc.patch | 26 - .../patches/100-build_tools-iconv.patch | 11 - .../patches/200-addons-defaultenable.patch | 77 - .../patches/201-utils-defaultenable.patch | 11 - net/asterisk-1.8.x/patches/500-nres.patch | 11 - .../patches/900-revert-r416994.patch | 162 -- .../src-lantiq/channels/chan_lantiq.c | 1680 ----------------- .../src-lantiq/configs/lantiq.conf.sample | 138 -- 11 files changed, 2543 deletions(-) delete mode 100644 net/asterisk-1.8.x/Makefile delete mode 100644 net/asterisk-1.8.x/files/asterisk.default delete mode 100644 net/asterisk-1.8.x/files/asterisk.init delete mode 100644 net/asterisk-1.8.x/patches/030-GNU-GLOB-exts-only-on-glibc.patch delete mode 100644 net/asterisk-1.8.x/patches/100-build_tools-iconv.patch delete mode 100644 net/asterisk-1.8.x/patches/200-addons-defaultenable.patch delete mode 100644 net/asterisk-1.8.x/patches/201-utils-defaultenable.patch delete mode 100644 net/asterisk-1.8.x/patches/500-nres.patch delete mode 100644 net/asterisk-1.8.x/patches/900-revert-r416994.patch delete mode 100644 net/asterisk-1.8.x/src-lantiq/channels/chan_lantiq.c delete mode 100644 net/asterisk-1.8.x/src-lantiq/configs/lantiq.conf.sample diff --git a/net/asterisk-1.8.x/Makefile b/net/asterisk-1.8.x/Makefile deleted file mode 100644 index 26854d0..0000000 --- a/net/asterisk-1.8.x/Makefile +++ /dev/null @@ -1,391 +0,0 @@ -# -# Copyright (C) 2015 OpenWrt.org -# Copyright (C) 2015 Cesnet, z.s.p.o. -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=asterisk18 -PKG_VERSION:=1.8.32.3 -PKG_RELEASE:=4 - -PKG_SOURCE:=asterisk-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=http://downloads.asterisk.org/pub/telephony/asterisk/releases/ -PKG_MD5SUM:=f13f126e7730710223f2fbbc8832966f - -PKG_BUILD_DIR=$(BUILD_DIR)/asterisk-$(PKG_VERSION) - -PKG_LICENSE:=GPL-2.0 -PKG_LICENSE_FILES:=COPYING LICENSE -PKG_MAINTAINER:=Jiri Slachta - -include $(INCLUDE_DIR)/package.mk - -define Package/asterisk18/install/module - $(INSTALL_DIR) $(1)/usr/lib/asterisk/modules - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/asterisk/modules/*$(2).so* $(1)/usr/lib/asterisk/modules/ -endef - -define Package/asterisk18/install/conffile - $(INSTALL_DIR) $(1)/etc/asterisk - $(CP) $(PKG_INSTALL_DIR)/etc/asterisk/*$(2)* $(1)/etc/asterisk/ -endef - -define Package/asterisk18/install/lib - $(INSTALL_DIR) $(1)/usr/lib - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/$(2).so* $(1)/usr/lib/ -endef - -define Package/asterisk18/install/sbin - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/$(2) $(1)/usr/sbin/ -endef - -define Package/asterisk18/install/sounds - $(INSTALL_DIR) $(1)/usr/lib/asterisk/sounds/ - $(CP) $(PKG_INSTALL_DIR)/usr/lib/asterisk/sounds/en/$(2) $(1)/usr/lib/asterisk/sounds/ -endef - -define BuildAsterisk18Module - define Package/asterisk18-$(1) - $$(call Package/asterisk18/Default) - TITLE:=$(2) support - DEPENDS:= asterisk18 $(patsubst +%,+PACKAGE_asterisk18-$(1):%,$(4)) - endef - - define Package/asterisk18-$(1)/conffiles -$(5) - endef - - define Package/asterisk18-$(1)/description -This package provides support for '$(3)' in Asterisk. - endef - - define Package/asterisk18-$(1)/install -$(foreach c,$(6),$(call Package/asterisk18/install/conffile,$$(1),$(c));) -$(foreach m,$(7),$(call Package/asterisk18/install/module,$$(1),$(m));) -$(foreach s,$(8),$(call Package/asterisk18/install/sounds,$$(1),$(s));) -$(foreach b,$(9),$(call Package/asterisk18/install/sbin,$$(1),$(b));) - endef - - $$(eval $$(call BuildPackage,asterisk18-$(1))) -endef - -define Package/asterisk18/Default - SUBMENU:=Telephony - SECTION:=net - CATEGORY:=Network - URL:=http://www.asterisk.org/ -endef - -define Package/asterisk18/Default/description - Asterisk is a complete PBX in software. It provides all of the features - you would expect from a PBX and more. Asterisk does voice over IP in three - protocols, and can interoperate with almost all standards-based telephony - equipment using relatively inexpensive hardware. -endef - -define Package/asterisk18 -$(call Package/asterisk18/Default) - TITLE:=Complete open source PBX, v1.8.x - MENU:=1 - DEPENDS:=+libopenssl +libncurses +libpopt +libpthread +zlib @!TARGET_avr32 -endef - -define Package/asterisk18/description -$(call Package/asterisk18/Default/description) -endef - -define Package/asterisk18/conffiles -/etc/asterisk/cel.conf -/etc/asterisk/asterisk.conf -/etc/asterisk/modules.conf -/etc/asterisk/extensions.conf -/etc/asterisk/sip.conf -/etc/asterisk/sip_notify.conf -/etc/asterisk/features.conf -/etc/asterisk/indications.conf -/etc/asterisk/logger.conf -/etc/asterisk/manager.conf -/etc/asterisk/rtp.conf -/etc/init.d/asterisk -endef - -AST_CFG_FILES:=\ - asterisk.conf cel.conf ccss.conf extensions.conf features.conf indications.conf logger.conf manager.conf \ - modules.conf sip.conf sip_notify.conf rtp.conf users.conf -AST_EMB_MODULES:=\ - app_dial app_echo app_macro app_playback codec_ulaw codec_gsm format_gsm format_pcm format_wav format_wav_gsm \ - func_strings func_timeout func_callerid func_logic chan_sip pbx_config res_rtp_asterisk res_rtp_multicast - -define Package/asterisk18/install -$(call Package/asterisk18/install/sbin,$(1),asterisk) -$(foreach m,$(AST_CFG_FILES),$(call Package/asterisk18/install/conffile,$(1),$(m));) -$(foreach m,$(AST_EMB_MODULES),$(call Package/asterisk18/install/module,$(1),$(m));) - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/asterisk.init $(1)/etc/init.d/asterisk -endef - -define Package/asterisk18-sounds -$(call Package/asterisk18/Default) - TITLE:=Sounds support - DEPENDS:=asterisk18 -endef - -define Package/asterisk18-sounds/description -This package provides sound-files for Asterisk-1.8.x. -endef - -define Package/asterisk18-sounds/install - $(INSTALL_DIR) $(1)/usr/lib/asterisk/sounds/ - $(CP) $(PKG_INSTALL_DIR)/usr/lib/asterisk/sounds/en/* $(1)/usr/lib/asterisk/sounds/ - rm -f $(1)/usr/lib/asterisk/sounds/vm-* - rm -f $(1)/usr/lib/asterisk/sounds/conf-* -endef - -ifneq ($(SDK)$(CONFIG_PACKAGE_asterisk18-chan-dahdi),) - CONFIGURE_ARGS+= \ - --with-dahdi="$(STAGING_DIR)/usr" \ - --with-pri="$(STAGING_DIR)/usr" \ - --with-tonezone="$(STAGING_DIR)/usr" -else - CONFIGURE_ARGS+= \ - --without-dahdi \ - --without-pri \ - --without-tonezone -endif - -ifneq ($(SDK)$(CONFIG_PACKAGE_asterisk18-chan-gtalk),) - CONFIGURE_ARGS+= \ - --with-iksemel="$(STAGING_DIR)/usr" - SITE_VARS+= \ - ac_cv_lib_iksemel_iks_start_sasl=yes -else - CONFIGURE_ARGS+= \ - --without-iksemel -endif - -ifneq ($(SDK)$(CONFIG_PACKAGE_asterisk18-curl),) - CONFIGURE_ARGS+= \ - --with-libcurl="$(STAGING_DIR)/usr" -else - CONFIGURE_ARGS+= \ - --without-libcurl -endif - -ifneq ($(SDK)$(CONFIG_PACKAGE_asterisk18-mysql),) - CONFIGURE_ARGS+= \ - --with-mysqlclient="$(STAGING_DIR)/usr" -else - CONFIGURE_ARGS+= \ - --without-mysqlclient -endif - -ifneq ($(SDK)$(CONFIG_PACKAGE_asterisk18-pbx-lua),) - CONFIGURE_ARGS+= \ - --with-lua="$(STAGING_DIR)/usr" - TARGET_LDFLAGS+=-ldl -lcrypt -else - CONFIGURE_ARGS+= \ - --without-lua -endif - -ifneq ($(SDK)$(CONFIG_PACKAGE_asterisk18-pgsql),) - CONFIGURE_ARGS+= \ - --with-postgres="$(STAGING_DIR)/usr" -else - CONFIGURE_ARGS+= \ - --without-postgres -endif - -ifneq ($(SDK)$(CONFIG_PACKAGE_asterisk18-res-fax-spandsp),) - CONFIGURE_ARGS+= \ - --with-spandsp="$(STAGING_DIR)/usr" -else - CONFIGURE_ARGS+= \ - --without-spandsp -endif - -ifneq ($(SDK)$(CONFIG_PACKAGE_asterisk18-res-srtp),) - CONFIGURE_ARGS+= \ - --with-srtp="$(STAGING_DIR)/usr" -else - CONFIGURE_ARGS+= \ - --without-srtp -endif - -EXTRA_CFLAGS+= $(TARGET_CPPFLAGS) -EXTRA_LDFLAGS+= $(TARGET_LDFLAGS) -CONFIGURE_ARGS+= \ - --without-curses \ - --with-gsm=internal \ - --without-bluetooth \ - --without-cap \ - --without-gtk2 \ - --without-isdnnet \ - --without-misdn \ - --without-nbs \ - --with-ncurses="$(STAGING_DIR)/usr" \ - --without-neon \ - --without-neon29 \ - --without-netsnmp \ - --without-newt \ - --without-ogg \ - --without-osptk \ - --with-popt="$(STAGING_DIR)/usr" \ - --without-radius \ - --without-sdl \ - --without-suppserv \ - --without-tds \ - --without-termcap \ - --without-tinfo \ - --without-vorbis \ - --without-vpb \ - --with-z="$(STAGING_DIR)/usr" \ - --with-sounds-cache="$(DL_DIR)" \ - --disable-xmldoc - -define Build/Prepare - $(call Build/Prepare/Default) -ifneq ($(CONFIG_TARGET_lantiq),) -ifneq ($(CONFIG_TARGET_lantiq_xrx200),y) - $(CP) ./src-lantiq/* $(PKG_BUILD_DIR)/ -endif -endif -endef - -define Build/Configure - $(call Build/Configure/Default,,$(SITE_VARS)) -endef - -define Build/Compile - $(MAKE) -C "$(PKG_BUILD_DIR)" \ - include/asterisk/version.h \ - include/asterisk/buildopts.h defaults.h \ - makeopts.embed_rules - ASTCFLAGS="$(EXTRA_CFLAGS) -DLOW_MEMORY" \ - ASTLDFLAGS="$(EXTRA_LDFLAGS)" \ - $(MAKE) -C "$(PKG_BUILD_DIR)" \ - ASTVARLIBDIR="/usr/lib/asterisk" \ - ASTDATADIR="/usr/lib/asterisk" \ - ASTKEYDIR="/usr/lib/asterisk" \ - ASTDBDIR="/usr/lib/asterisk" \ - NOISY_BUILD="1" \ - DEBUG="" \ - OPTIMIZE="" \ - DESTDIR="$(PKG_INSTALL_DIR)" \ - all install samples -endef - -define Build/InstallDev - $(INSTALL_DIR) $(1)/usr/include/asterisk-1.8/include/asterisk/ - $(CP) $(PKG_INSTALL_DIR)/usr/include/asterisk/*.h $(1)/usr/include/asterisk-1.8/include/asterisk/ - $(CP) $(PKG_INSTALL_DIR)/usr/include/asterisk.h $(1)/usr/include/asterisk-1.8/include/ -endef - -$(eval $(call BuildPackage,asterisk18)) -$(eval $(call BuildPackage,asterisk18-sounds)) - -################################ -# AST modules -# Params: -# 1 - Package subname -# 2 - Package title -# 3 - Module description -# 4 - Module dependencies -# 5 - Full path to multiple conffiles -# 6 - conf files -# 7 - module files -# 8 - sound files -# 9 - binary files -################################ - -$(eval $(call BuildAsterisk18Module,app-alarmreceiver,Alarm receiver,Central Station Alarm receiver for Ademco Contact ID,,,,app_alarmreceiver,)) -$(eval $(call BuildAsterisk18Module,app-authenticate,Authenticate commands,Execute arbitrary authenticate commands,,,,app_authenticate,)) -$(eval $(call BuildAsterisk18Module,app-dahdiras,Execute an ISDN RAS,support for executing an ISDN RAS using DAHDI,+asterisk18-chan-dahdi,,,app_dahdiras,)) -$(eval $(call BuildAsterisk18Module,app-directed_pickup,Directed call pickup,support for directed call pickup,,,,app_directed_pickup,)) -$(eval $(call BuildAsterisk18Module,app-disa,Direct Inward System Access,Direct Inward System Access,,,,app_disa,)) -$(eval $(call BuildAsterisk18Module,app-exec,Exec application,support for application execution,,,,app_exec,)) -$(eval $(call BuildAsterisk18Module,app-chanisavail,Channel availability check,support for checking if a channel is available,,,,app_chanisavail,)) -$(eval $(call BuildAsterisk18Module,app-chanspy,Channel listen in,support for listening in on any channel,,,,app_chanspy,)) -$(eval $(call BuildAsterisk18Module,app-minivm,Minimal voicemail system,a voicemail system in small building blocks working together based on the Comedian Mail voicemail,,/etc/asterisk/extensions_minivm.conf /etc/asterisk/minivm.conf,extensions_minivm.conf minivm.conf,app_minivm,)) -$(eval $(call BuildAsterisk18Module,app-mixmonitor,Record a call and mix the audio,record a call and mix the audio during the recording,,,,app_mixmonitor,)) -$(eval $(call BuildAsterisk18Module,app-originate,Originate a call,originating an outbound call and connecting it to a specified extension or application,,,,app_originate,)) -$(eval $(call BuildAsterisk18Module,app-playtones,Playtones application,play a tone list,,,,app_playtones,)) -$(eval $(call BuildAsterisk18Module,app-read,Variable read,a trivial application to read a variable,,,,app_read,)) -$(eval $(call BuildAsterisk18Module,app-readexten,Extension to variable,a trivial application to read an extension into a variable,,,,app_readexten,)) -$(eval $(call BuildAsterisk18Module,app-record,Record sound file,to record a sound file,,,,app_record,)) -$(eval $(call BuildAsterisk18Module,app-sayunixtime,Say Unix time,an application to say Unix time,,,,app_sayunixtime,)) -$(eval $(call BuildAsterisk18Module,app-senddtmf,Send DTMF digits,Sends arbitrary DTMF digits,,,,app_senddtmf,)) -$(eval $(call BuildAsterisk18Module,app-setcallerid,Set callerid,Support for setting callerid,,,,app_setcallerid,)) -$(eval $(call BuildAsterisk18Module,app-sms,SMS,SMS support (ETSI ES 201 912 protocol 1),+libpopt +libstdcpp,,,app_sms,,smsq)) -$(eval $(call BuildAsterisk18Module,app-stack,Stack applications, stack applications Gosub Return etc., +asterisk18-res-agi,,,app_stack,)) -$(eval $(call BuildAsterisk18Module,app-system,System exec,support for executing system commands,,,,app_system,)) -$(eval $(call BuildAsterisk18Module,app-talkdetect,File playback with audio detect,for file playback with audio detect,,,,app_talkdetect,)) -$(eval $(call BuildAsterisk18Module,app-verbose,Verbose logging,Verbose logging application,,,,app_verbose,)) -$(eval $(call BuildAsterisk18Module,app-waituntil,Sleep,support sleeping until the given epoch,,,,app_waituntil,)) -$(eval $(call BuildAsterisk18Module,app-while,While loop,a while loop implementation,,,,app_while,)) -$(eval $(call BuildAsterisk18Module,cdr-csv,Provides CDR CSV,Call Detail Record with CSV support,,,,cdr_csv,)) -$(eval $(call BuildAsterisk18Module,cdr,Provides CDR,Call Detail Record,,/etc/asterisk/cdr.conf /etc/asterisk/cdr_custom.conf /etc/asterisk/cdr_manager.conf /etc/asterisk/cdr_syslog.conf,cdr cdr_custom cdr_manager cdr_syslog,app_cdr app_forkcdr cdr_custom cdr_manager cdr_syslog func_cdr,)) -$(eval $(call BuildAsterisk18Module,codec-a-mu,Alaw to ulaw translation,translation between alaw and ulaw codecs,,,,codec_a_mu,)) -$(eval $(call BuildAsterisk18Module,codec-alaw,Signed linear to alaw translation,translation between signed linear and alaw codecs,,,,codec_alaw,)) -$(eval $(call BuildAsterisk18Module,codec-dahdi,DAHDI codec,DAHDI native transcoding support,+asterisk18-chan-dahdi,,,codec_dahdi,)) -$(eval $(call BuildAsterisk18Module,codec-g722,G.722,a high bit rate 48/56/64Kbps ITU standard codec,,,,codec_g722,)) -$(eval $(call BuildAsterisk18Module,codec-g726,Signed linear to G.726 translation,translation between signed linear and ITU G.726-32kbps codecs,,,,codec_g726,)) -$(eval $(call BuildAsterisk18Module,curl,CURL,CURL support,+libcurl,,,func_curl res_curl,)) -$(eval $(call BuildAsterisk18Module,format-g726,G.726,support for headerless G.726 16/24/32/40kbps data format,,,,format_g726,)) -$(eval $(call BuildAsterisk18Module,format-g729,G.729,support for raw headerless G729 data,,,,format_g729,)) -$(eval $(call BuildAsterisk18Module,format-sln,Raw slinear format,support for raw slinear format,,,,format_sln,)) -$(eval $(call BuildAsterisk18Module,format-sln16,Raw slinear 16 format,support for raw slinear 16 format,,,,format_sln16,)) -$(eval $(call BuildAsterisk18Module,func-base64,base64 support,support of base64 function,,,,func_base64,)) -$(eval $(call BuildAsterisk18Module,func-blacklist,Blacklist on callerid,looking up the callerid number and see if it is blacklisted,,,,func_blacklist,)) -$(eval $(call BuildAsterisk18Module,func-cut,CUT function,CUT function,,,,func_cut,)) -$(eval $(call BuildAsterisk18Module,func-db,Database interaction,functions for interaction with the database,,,,func_db app_db,)) -$(eval $(call BuildAsterisk18Module,func-devstate,Blinky lights control,functions for manually controlled blinky lights,,,,func_devstate,)) -$(eval $(call BuildAsterisk18Module,func-enum,ENUM,ENUM,,/etc/asterisk/enum.conf,enum.conf,func_enum,)) -$(eval $(call BuildAsterisk18Module,func-env,Environment functions,Environment dialplan functions,,,,func_env,)) -$(eval $(call BuildAsterisk18Module,func-extstate,Hinted extension state,retrieving the state of a hinted extension for dialplan control,,,,func_extstate,)) -$(eval $(call BuildAsterisk18Module,func-global,Global variable,global variable dialplan functions,,,,func_global,)) -$(eval $(call BuildAsterisk18Module,func-groupcount,Group count,for counting number of channels in the specified group,,,,func_groupcount,)) -$(eval $(call BuildAsterisk18Module,func-channel,Channel info,Channel info dialplan function,,,,func_channel,)) -$(eval $(call BuildAsterisk18Module,func-math,Math functions,Math functions,,,,func_math,)) -$(eval $(call BuildAsterisk18Module,func-module,Simple module check function,Simple module check function,,,,func_module,)) -$(eval $(call BuildAsterisk18Module,func-shell,Shell,support for shell execution,,,,func_shell,)) -$(eval $(call BuildAsterisk18Module,func-uri,URI encoding and decoding,Encodes and decodes URI-safe strings,,,,func_uri,)) -$(eval $(call BuildAsterisk18Module,func-vmcount,vmcount dialplan,a vmcount dialplan function,,,,func_vmcount,)) -$(eval $(call BuildAsterisk18Module,chan-agent,Agents proxy channel,An implementation of agents proxy channel,,,,chan_agent,)) -$(eval $(call BuildAsterisk18Module,chan-dahdi,DAHDI channel,DAHDI channel support,+dahdi-tools-libtonezone +kmod-dahdi +libpri,/etc/asterisk/chan_dahdi.conf,chan_dahdi.conf,chan_dahdi,)) -$(eval $(call BuildAsterisk18Module,chan-gtalk,GTalk,An implementation of chan_gtalk and res_jabber for GTalk support,+libiksemel,/etc/asterisk/gtalk.conf /etc/asterisk/jabber.conf,gtalk.conf jabber.conf,chan_gtalk res_jabber,)) -$(eval $(call BuildAsterisk18Module,chan-iax2,IAX2 channel,An implementation of IAX2 channel,+asterisk18-res-timing-timerfd,/etc/asterisk/iax.conf /etc/asterisk/iaxprov.conf,iax.conf iaxprov.conf,chan_iax2,)) -$(eval $(call BuildAsterisk18Module,chan-lantiq,Lantiq TAPI channel,An implementation of Lantiq TAPI channel,@TARGET_lantiq @!TARGET_lantiq_xrx200 +kmod-ltq-vmmc,/etc/asterisk/lantiq.conf,lantiq.conf,chan_lantiq,)) -$(eval $(call BuildAsterisk18Module,chan-local,Local proxy channel,An implementation of local proxy channel,,,,chan_local,)) -$(eval $(call BuildAsterisk18Module,chan-mgcp,MGCP channel,the channel chan_mgcp,,/etc/asterisk/mgcp.conf,mgcp.conf,chan_mgcp,)) -$(eval $(call BuildAsterisk18Module,chan-ooh323,ooH323 channel,the channel chan_ooh323,,/etc/asterisk/ooh323.conf,ooh323.conf,chan_ooh323,)) -$(eval $(call BuildAsterisk18Module,chan-skinny,Skinny channel,the channel chan_skinny,,/etc/asterisk/skinny.conf,skinny.conf,chan_skinny,)) -$(eval $(call BuildAsterisk18Module,mysql,MySQL,MySQL support,+libmysqlclient,/etc/asterisk/res_config_mysql.conf,res_config_mysql.conf,res_config_mysql,)) -$(eval $(call BuildAsterisk18Module,odbc,ODBC,ODBC support,+libpthread +libc +unixodbc,/etc/asterisk/cdr_adaptive_odbc.conf /etc/asterisk/cdr_odbc.conf /etc/asterisk/cel_odbc.conf /etc/asterisk/func_odbc.conf /etc/asterisk/res_odbc.conf,cdr_adaptive_odbc cdr_odbc cel_odbc func_odbc res_odbc,cdr_adaptive_odbc cdr_odbc cel_odbc func_odbc res_config_odbc res_odbc,)) -$(eval $(call BuildAsterisk18Module,pbx-ael,Asterisk Extension Logic,support for symbolic Asterisk Extension Logic,,,extensions.ael,pbx_ael,)) -$(eval $(call BuildAsterisk18Module,pbx-dundi,Dundi,provides Dundi Lookup service for Asterisk,,/etc/asterisk/dundi.conf,dundi.conf,pbx_dundi,)) -$(eval $(call BuildAsterisk18Module,pbx-lua,Lua,provides Lua resources for Asterisk,+libpthread +libc +liblua,/etc/asterisk/extensions.lua,extensions.lua,pbx_lua,)) -$(eval $(call BuildAsterisk18Module,pbx-spool,Call Spool,Outgoing call spool support,,,,pbx_spool,)) -$(eval $(call BuildAsterisk18Module,pgsql,PostgreSQL,PostgreSQL support,+libpq,/etc/asterisk/cel_pgsql.conf /etc/asterisk/cdr_pgsql.conf /etc/asterisk/res_pgsql.conf,cel_pgsql.conf cdr_pgsql.conf res_pgsql.conf,cel_pgsql cdr_pgsql res_config_pgsql,)) -$(eval $(call BuildAsterisk18Module,res-ael-share,Shareable AEL code,support for shareable AEL code mainly between internal and external modules,,,,res_ael_share,)) -$(eval $(call BuildAsterisk18Module,res-agi,Asterisk Gateway Interface,support for the Asterisk Gateway Interface extension,,,,res_agi,)) -$(eval $(call BuildAsterisk18Module,res-clioriginate,Calls via CLI,Originate calls via the CLI,,,,res_clioriginate,)) -$(eval $(call BuildAsterisk18Module,res-crypto,Provides Crypto,Cryptographic Signature capability,,,,res_crypto,)) -$(eval $(call BuildAsterisk18Module,res-fax-spandsp,Spandsp T.38 and G.711,Spandsp T.38 and G.711 FAX Resource,+asterisk18-res-fax +libspandsp +libtiff,,,res_fax_spandsp,)) -$(eval $(call BuildAsterisk18Module,res-fax,FAX modules,Generic FAX resource for FAX technology resource modules,+asterisk18-res-timing-pthread,/etc/asterisk/res_fax.conf /etc/asterisk/udptl.conf,udptl.conf res_fax.conf,res_fax,)) -$(eval $(call BuildAsterisk18Module,res-monitor,Provides Monitor,Cryptographic Signature capability,,,,res_monitor,)) -$(eval $(call BuildAsterisk18Module,res-musiconhold,MOH,Music On Hold support,,/etc/asterisk/musiconhold.conf,musiconhold.conf,res_musiconhold,)) -$(eval $(call BuildAsterisk18Module,res-phoneprov,Phone Provisioning,Phone provisioning application for the asterisk internal http server,,/etc/asterisk/phoneprov.conf,phoneprov.conf,res_phoneprov,)) -$(eval $(call BuildAsterisk18Module,res-pktccops,Provide PacketCable COPS,simple client/server model for supporting policy control over QoS signaling protocols,,/etc/asterisk/res_pktccops.conf,res_pktccops.conf,res_pktccops,)) -$(eval $(call BuildAsterisk18Module,res-smdi,Provide SMDI,Simple Message Desk Interface capability,,/etc/asterisk/smdi.conf,smdi.conf,res_smdi,)) -$(eval $(call BuildAsterisk18Module,res-srtp,SRTP,Secure RTP,+libsrtp,,,res_srtp,)) -$(eval $(call BuildAsterisk18Module,res-timing-dahdi,DAHDI Timing Interface,,+asterisk18-chan-dahdi,,,res_timing_dahdi,)) -$(eval $(call BuildAsterisk18Module,res-timing-pthread,pthread Timing Interface,,,,,res_timing_pthread,)) -$(eval $(call BuildAsterisk18Module,res-timing-timerfd,Timerfd Timing Interface,,,,,res_timing_timerfd,)) -$(eval $(call BuildAsterisk18Module,voicemail,Voicemail,voicemail related modules,,/etc/asterisk/voicemail.conf,voicemail.conf,*voicemail res_adsi res_smdi,vm-*)) - diff --git a/net/asterisk-1.8.x/files/asterisk.default b/net/asterisk-1.8.x/files/asterisk.default deleted file mode 100644 index 9d046c4..0000000 --- a/net/asterisk-1.8.x/files/asterisk.default +++ /dev/null @@ -1,4 +0,0 @@ -## startup options for /etc/init.d/asterisk - -ENABLE_ASTERISK="yes" -OPTIONS="" diff --git a/net/asterisk-1.8.x/files/asterisk.init b/net/asterisk-1.8.x/files/asterisk.init deleted file mode 100644 index cce8a09..0000000 --- a/net/asterisk-1.8.x/files/asterisk.init +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh /etc/rc.common -# Copyright (C) 2014 OpenWrt.org - -START=99 -APP=asterisk -OPTIONS= -DEST= -BIN_FILE=$DEST/usr/sbin/$APP -PID_FILE=$DEST/var/run/$APP/$APP.pid - -start() { - [ -d $DEST/var/run/asterisk ] || mkdir -p $DEST/var/run/asterisk - [ -d $DEST/var/log/asterisk ] || mkdir -p $DEST/var/log/asterisk - [ -d $DEST/var/spool/asterisk ] || mkdir -p $DEST/var/spool/asterisk - [ -d $DEST/var/lib ] || mkdir -p $DEST/var/lib - [ -h $DEST/var/lib/asterisk ] || ln -s /usr/lib/asterisk /var/lib/asterisk - [ -d $DEST/var/lib/asterisk/keys ] || mkdir -p $DEST/var/lib/asterisk/keys - [ -d $DEST/var/log/asterisk/cdr-csv/ ] || mkdir -p $DEST/var/log/asterisk/cdr-csv - - SERVICE_PID_FILE="/var/run/asterisk/asterisk.pid" \ - service_start $BIN_FILE $OPTIONS -} - -stop() { - SERVICE_PID_FILE="/var/run/asterisk/asterisk.pid" \ - service_stop $BIN_FILE -} - -reload() { - SERVICE_PID_FILE="/var/run/asterisk/asterisk.pid" \ - service_reload $BIN_FILE -} diff --git a/net/asterisk-1.8.x/patches/030-GNU-GLOB-exts-only-on-glibc.patch b/net/asterisk-1.8.x/patches/030-GNU-GLOB-exts-only-on-glibc.patch deleted file mode 100644 index 739a939..0000000 --- a/net/asterisk-1.8.x/patches/030-GNU-GLOB-exts-only-on-glibc.patch +++ /dev/null @@ -1,26 +0,0 @@ -Index: asterisk-1.8.32.3/res/ael/ael.flex -=================================================================== ---- asterisk-1.8.32.3.orig/res/ael/ael.flex -+++ asterisk-1.8.32.3/res/ael/ael.flex -@@ -595,7 +595,7 @@ includes { STORE_POS; return KW_INCLUDES - snprintf(fnamebuf2,sizeof(fnamebuf2), "%s/%s", (char *)ast_config_AST_CONFIG_DIR, fnamebuf); - ast_copy_string(fnamebuf,fnamebuf2,sizeof(fnamebuf)); - } --#ifdef SOLARIS -+#if !defined(HAVE_GLOB_NOMAGIC) || !defined(HAVE_GLOB_BRACE) || defined(DEBUG_NONGNU) - glob_ret = glob(fnamebuf, GLOB_NOCHECK, NULL, &globbuf); - #else - glob_ret = glob(fnamebuf, GLOB_NOMAGIC|GLOB_BRACE, NULL, &globbuf); -Index: asterisk-1.8.32.3/res/ael/ael_lex.c -=================================================================== ---- asterisk-1.8.32.3.orig/res/ael/ael_lex.c -+++ asterisk-1.8.32.3/res/ael/ael_lex.c -@@ -1966,7 +1966,7 @@ YY_RULE_SETUP - snprintf(fnamebuf2,sizeof(fnamebuf2), "%s/%s", (char *)ast_config_AST_CONFIG_DIR, fnamebuf); - ast_copy_string(fnamebuf,fnamebuf2,sizeof(fnamebuf)); - } --#ifdef SOLARIS -+#if !defined(HAVE_GLOB_NOMAGIC) || !defined(HAVE_GLOB_BRACE) || defined(DEBUG_NONGNU) - glob_ret = glob(fnamebuf, GLOB_NOCHECK, NULL, &globbuf); - #else - glob_ret = glob(fnamebuf, GLOB_NOMAGIC|GLOB_BRACE, NULL, &globbuf); diff --git a/net/asterisk-1.8.x/patches/100-build_tools-iconv.patch b/net/asterisk-1.8.x/patches/100-build_tools-iconv.patch deleted file mode 100644 index d3cad82..0000000 --- a/net/asterisk-1.8.x/patches/100-build_tools-iconv.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/build_tools/menuselect-deps.in -+++ b/build_tools/menuselect-deps.in -@@ -16,7 +16,7 @@ GTK2=@PBX_GTK2@ - H323=@PBX_H323@ - HOARD=@PBX_HOARD@ - ICAL=@PBX_ICAL@ --ICONV=@PBX_ICONV@ -+ICONV=0 - IKSEMEL=@PBX_IKSEMEL@ - IMAP_TK=@PBX_IMAP_TK@ - IODBC=@PBX_IODBC@ diff --git a/net/asterisk-1.8.x/patches/200-addons-defaultenable.patch b/net/asterisk-1.8.x/patches/200-addons-defaultenable.patch deleted file mode 100644 index 65b9e79..0000000 --- a/net/asterisk-1.8.x/patches/200-addons-defaultenable.patch +++ /dev/null @@ -1,77 +0,0 @@ ---- a/addons/app_mysql.c -+++ b/addons/app_mysql.c -@@ -25,7 +25,7 @@ - - /*** MODULEINFO - mysqlclient -- no -+ yes - deprecated - func_odbc - ***/ ---- a/addons/app_saycountpl.c -+++ b/addons/app_saycountpl.c -@@ -21,7 +21,7 @@ - */ - - /*** MODULEINFO -- no -+ yes - deprecated - say.conf - ***/ ---- a/addons/cdr_mysql.c -+++ b/addons/cdr_mysql.c -@@ -35,7 +35,7 @@ - - /*** MODULEINFO - mysqlclient -- no -+ yes - deprecated - cdr_adaptive_odbc - ***/ ---- a/addons/chan_mobile.c -+++ b/addons/chan_mobile.c -@@ -27,7 +27,7 @@ - - /*** MODULEINFO - bluetooth -- no -+ yes - extended - ***/ - ---- a/addons/chan_ooh323.c -+++ b/addons/chan_ooh323.c -@@ -18,7 +18,7 @@ - - - /*** MODULEINFO -- no -+ yes - extended - ***/ - ---- a/addons/res_config_mysql.c -+++ b/addons/res_config_mysql.c -@@ -24,7 +24,7 @@ - - /*** MODULEINFO - mysqlclient -- no -+ yes - extended - ***/ - ---- a/res/res_pktccops.c -+++ b/res/res_pktccops.c -@@ -31,7 +31,7 @@ - */ - - /*** MODULEINFO -- no -+ yes - extended - ***/ - diff --git a/net/asterisk-1.8.x/patches/201-utils-defaultenable.patch b/net/asterisk-1.8.x/patches/201-utils-defaultenable.patch deleted file mode 100644 index dcc0aa7..0000000 --- a/net/asterisk-1.8.x/patches/201-utils-defaultenable.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/utils/utils.xml -+++ b/utils/utils.xml -@@ -33,7 +33,7 @@ - extended - - -- no -+ yes - popt - extended - diff --git a/net/asterisk-1.8.x/patches/500-nres.patch b/net/asterisk-1.8.x/patches/500-nres.patch deleted file mode 100644 index 7f1a9a9..0000000 --- a/net/asterisk-1.8.x/patches/500-nres.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/configure -+++ b/configure -@@ -16902,8 +16902,6 @@ if ac_fn_c_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 - $as_echo "yes" >&6; } - --$as_echo "#define HAVE_RES_NINIT 1" >>confdefs.h -- - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing res_9_ndestroy" >&5 - $as_echo_n "checking for library containing res_9_ndestroy... " >&6; } - if ${ac_cv_search_res_9_ndestroy+:} false; then : diff --git a/net/asterisk-1.8.x/patches/900-revert-r416994.patch b/net/asterisk-1.8.x/patches/900-revert-r416994.patch deleted file mode 100644 index a1e30e6..0000000 --- a/net/asterisk-1.8.x/patches/900-revert-r416994.patch +++ /dev/null @@ -1,162 +0,0 @@ -Index: asterisk-1.8.32.3/autoconf/ast_ext_tool_check.m4 -=================================================================== ---- asterisk-1.8.32.3.orig/autoconf/ast_ext_tool_check.m4 -+++ asterisk-1.8.32.3/autoconf/ast_ext_tool_check.m4 -@@ -5,37 +5,39 @@ - # AST_EXT_TOOL_CHECK([package], [tool name], [--cflags], [--libs], [includes], [expression]) - AC_DEFUN([AST_EXT_TOOL_CHECK], - [ -- if test "x${PBX_$1}" != "x1" -a "${USE_$1}" != "no"; then -- PBX_$1=0 -- AC_PATH_TOOL(CONFIG_$1, $2, No, [${$1_DIR}/bin:$PATH]) -- if test ! "x${CONFIG_$1}" = xNo; then -- if test x"$3" = x ; then A=--cflags ; else A="$3" ; fi -- $1_INCLUDE=$(${CONFIG_$1} $A) -- $1_INCLUDE=$(echo ${$1_INCLUDE} | $SED -e "s|-I|-I${$1_DIR}|g") -- -- if test x"$4" = x ; then A=--libs ; else A="$4" ; fi -- $1_LIB=$(${CONFIG_$1} $A) -- $1_LIB=$(echo ${$1_LIB} | $SED -e "s|-L|-L${$1_DIR}|g") -- -- if test x"$5" != x ; then -- saved_cppflags="${CPPFLAGS}" -- CPPFLAGS="${CPPFLAGS} ${$1_INCLUDE}" -+ if test "x${PBX_$1}" != "x1" -a "${USE_$1}" != "no"; then -+ PBX_$1=0 -+ AC_PATH_TOOL(CONFIG_$1, $2, No, [${$1_DIR}/bin:$PATH]) -+ if test ! "x${CONFIG_$1}" = xNo; then -+ if test x"$3" = x ; then A=--cflags ; else A="$3" ; fi -+ $1_INCLUDE=$(${CONFIG_$1} $A) -+ if test x"$4" = x ; then A=--libs ; else A="$4" ; fi -+ $1_LIB=$(${CONFIG_$1} $A) -+ if test x"$5" != x ; then -+ saved_cppflags="${CPPFLAGS}" -+ if test "x${$1_DIR}" != "x"; then -+ $1_INCLUDE="-I${$1_DIR}/include" -+ fi -+ CPPFLAGS="${CPPFLAGS} ${$1_INCLUDE}" - -- saved_libs="${LIBS}" -- LIBS=${$1_LIB} -+ saved_libs="${LIBS}" -+ LIBS="${$1_LIB}" - -- AC_LINK_IFELSE( -- [ AC_LANG_PROGRAM( [ $5 ], [ $6; ])], -- [ PBX_$1=1 AC_DEFINE([HAVE_$1], 1, -- [Define if your system has the $1 headers.])], -- [] -- ) -- CPPFLAGS="${saved_cppflags}" -- LIBS="${saved_libs}" -- else -- PBX_$1=1 -- AC_DEFINE([HAVE_$1], 1, [Define if your system has the $1 libraries.]) -- fi -- fi -+ AC_LINK_IFELSE( -+ [ AC_LANG_PROGRAM( [ $5 ], -+ [ $6; ] -+ )], -+ [ PBX_$1=1 -+ AC_DEFINE([HAVE_$1], 1, [Define if your system has the $1 headers.]) -+ ], -+ [] -+ ) -+ CPPFLAGS="${saved_cppflags}" -+ LIBS="${saved_libs}" -+ else -+ PBX_$1=1 -+ AC_DEFINE([HAVE_$1], 1, [Define if your system has the $1 libraries.]) -+ fi - fi -+ fi - ]) -Index: asterisk-1.8.32.3/configure -=================================================================== ---- asterisk-1.8.32.3.orig/configure -+++ asterisk-1.8.32.3/configure -@@ -12663,11 +12663,9 @@ fi - if test ! "x${CONFIG_LIBXML2}" = xNo; then - if test x"" = x ; then A=--cflags ; else A="" ; fi - LIBXML2_INCLUDE=$(${CONFIG_LIBXML2} $A) -- LIBXML2_INCLUDE=$(echo ${LIBXML2_INCLUDE} | $SED -e "s|-I|-I${LIBXML2_DIR}|g") - - if test x"" = x ; then A=--libs ; else A="" ; fi - LIBXML2_LIB=$(${CONFIG_LIBXML2} $A) -- LIBXML2_LIB=$(echo ${LIBXML2_LIB} | $SED -e "s|-L|-L${LIBXML2_DIR}|g") - - if test x"#include - #include " != x ; then -@@ -21027,11 +21025,9 @@ fi - if test ! "x${CONFIG_MYSQLCLIENT}" = xNo; then - if test x"" = x ; then A=--cflags ; else A="" ; fi - MYSQLCLIENT_INCLUDE=$(${CONFIG_MYSQLCLIENT} $A) -- MYSQLCLIENT_INCLUDE=$(echo ${MYSQLCLIENT_INCLUDE} | $SED -e "s|-I|-I${MYSQLCLIENT_DIR}|g") - - if test x"" = x ; then A=--libs ; else A="" ; fi - MYSQLCLIENT_LIB=$(${CONFIG_MYSQLCLIENT} $A) -- MYSQLCLIENT_LIB=$(echo ${MYSQLCLIENT_LIB} | $SED -e "s|-L|-L${MYSQLCLIENT_DIR}|g") - - if test x"" != x ; then - saved_cppflags="${CPPFLAGS}" -@@ -21281,11 +21277,9 @@ fi - if test ! "x${CONFIG_NEON}" = xNo; then - if test x"" = x ; then A=--cflags ; else A="" ; fi - NEON_INCLUDE=$(${CONFIG_NEON} $A) -- NEON_INCLUDE=$(echo ${NEON_INCLUDE} | $SED -e "s|-I|-I${NEON_DIR}|g") - - if test x"" = x ; then A=--libs ; else A="" ; fi - NEON_LIB=$(${CONFIG_NEON} $A) -- NEON_LIB=$(echo ${NEON_LIB} | $SED -e "s|-L|-L${NEON_DIR}|g") - - if test x"" != x ; then - saved_cppflags="${CPPFLAGS}" -@@ -21430,11 +21424,9 @@ fi - if test ! "x${CONFIG_NEON29}" = xNo; then - if test x"" = x ; then A=--cflags ; else A="" ; fi - NEON29_INCLUDE=$(${CONFIG_NEON29} $A) -- NEON29_INCLUDE=$(echo ${NEON29_INCLUDE} | $SED -e "s|-I|-I${NEON29_DIR}|g") - - if test x"--libs" = x ; then A=--libs ; else A="--libs" ; fi - NEON29_LIB=$(${CONFIG_NEON29} $A) -- NEON29_LIB=$(echo ${NEON29_LIB} | $SED -e "s|-L|-L${NEON29_DIR}|g") - - if test x"#include " != x ; then - saved_cppflags="${CPPFLAGS}" -@@ -21581,11 +21573,9 @@ fi - if test ! "x${CONFIG_NETSNMP}" = xNo; then - if test x"" = x ; then A=--cflags ; else A="" ; fi - NETSNMP_INCLUDE=$(${CONFIG_NETSNMP} $A) -- NETSNMP_INCLUDE=$(echo ${NETSNMP_INCLUDE} | $SED -e "s|-I|-I${NETSNMP_DIR}|g") - - if test x"--agent-libs" = x ; then A=--libs ; else A="--agent-libs" ; fi - NETSNMP_LIB=$(${CONFIG_NETSNMP} $A) -- NETSNMP_LIB=$(echo ${NETSNMP_LIB} | $SED -e "s|-L|-L${NETSNMP_DIR}|g") - - if test x"#include - #include -@@ -28255,11 +28245,9 @@ fi - if test ! "x${CONFIG_GMIME}" = xNo; then - if test x"" = x ; then A=--cflags ; else A="" ; fi - GMIME_INCLUDE=$(${CONFIG_GMIME} $A) -- GMIME_INCLUDE=$(echo ${GMIME_INCLUDE} | $SED -e "s|-I|-I${GMIME_DIR}|g") - - if test x"" = x ; then A=--libs ; else A="" ; fi - GMIME_LIB=$(${CONFIG_GMIME} $A) -- GMIME_LIB=$(echo ${GMIME_LIB} | $SED -e "s|-L|-L${GMIME_DIR}|g") - - if test x"#include " != x ; then - saved_cppflags="${CPPFLAGS}" -@@ -29377,11 +29365,9 @@ fi - if test ! "x${CONFIG_SDL}" = xNo; then - if test x"" = x ; then A=--cflags ; else A="" ; fi - SDL_INCLUDE=$(${CONFIG_SDL} $A) -- SDL_INCLUDE=$(echo ${SDL_INCLUDE} | $SED -e "s|-I|-I${SDL_DIR}|g") - - if test x"" = x ; then A=--libs ; else A="" ; fi - SDL_LIB=$(${CONFIG_SDL} $A) -- SDL_LIB=$(echo ${SDL_LIB} | $SED -e "s|-L|-L${SDL_DIR}|g") - - if test x"" != x ; then - saved_cppflags="${CPPFLAGS}" diff --git a/net/asterisk-1.8.x/src-lantiq/channels/chan_lantiq.c b/net/asterisk-1.8.x/src-lantiq/channels/chan_lantiq.c deleted file mode 100644 index 1537309..0000000 --- a/net/asterisk-1.8.x/src-lantiq/channels/chan_lantiq.c +++ /dev/null @@ -1,1680 +0,0 @@ -/* - * Asterisk -- An open source telephony toolkit. - * - * Copyright (C) 2012, Luka Perkov - * Copyright (C) 2012, John Crispin - * Copyright (C) 2012, Andrej VlaÅ¡ić - * Copyright (C) 2012, Kaspar Schleiser for T-Labs - * (Deutsche Telekom Innovation Laboratories) - * Copyright (C) 2012, Mirko Vogt for T-Labs - * (Deutsche Telekom Innovation Laboratories) - * - * Luka Perkov - * John Crispin - * Andrej VlaÅ¡ić - * Kaspar Schleiser - * Mirko Vogt - * - * See http://www.asterisk.org for more information about - * the Asterisk project. Please do not directly contact - * any of the maintainers of this project for assistance; - * the project provides a web site, mailing lists and IRC - * channels for your use. - * - * This program is free software, distributed under the terms of - * the GNU General Public License Version 2. See the LICENSE file - * at the top of the source tree. - */ - -/*! \file - * - * \brief Asterisk channel line driver for Lantiq based TAPI boards - * - * \author Luka Perkov - * \author John Crispin - * \author Andrej VlaÅ¡ić - * \author Kaspar Schleiser - * \author Mirko Vogt - * - * \ingroup channel_drivers - */ - -#include "asterisk.h" - -ASTERISK_FILE_VERSION(__FILE__, "$Revision: xxx $") - -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_LINUX_COMPILER_H -#include -#endif -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Lantiq TAPI includes */ -#include -#include - -#define RTP_HEADER_LEN 12 - -#define TAPI_AUDIO_PORT_NUM_MAX 2 -#define TAPI_TONE_LOCALE_NONE 0 -#define TAPI_TONE_LOCALE_RINGING_CODE 26 -#define TAPI_TONE_LOCALE_BUSY_CODE 27 -#define TAPI_TONE_LOCALE_CONGESTION_CODE 27 -#define TAPI_TONE_LOCALE_DIAL_CODE 25 -#define TAPI_TONE_LOCALE_WAITING_CODE 37 - -#define LANTIQ_CONTEXT_PREFIX "lantiq" - -static const char config[] = "lantiq.conf"; - -static char firmware_filename[PATH_MAX] = "/lib/firmware/ifx_firmware.bin"; -static char bbd_filename[PATH_MAX] = "/lib/firmware/ifx_bbd_fxs.bin"; -static char base_path[PATH_MAX] = "/dev/vmmc"; -static int per_channel_context = 0; - -/* - * The private structures of the Phone Jack channels are linked for selecting - * outgoing channels. - */ -enum channel_state { - ONHOOK, - OFFHOOK, - DIALING, - INCALL, - CALL_ENDED, - RINGING, - UNKNOWN -}; - -static struct lantiq_pvt { - struct ast_channel *owner; /* Channel we belong to, possibly NULL */ - int port_id; /* Port number of this object, 0..n */ - int channel_state; - char context[AST_MAX_CONTEXT]; /* this port's dialplan context */ - char ext[AST_MAX_EXTENSION+1]; /* the extension this port is connecting */ - int dial_timer; /* timer handle for autodial timeout */ - char dtmfbuf[AST_MAX_EXTENSION+1]; /* buffer holding dialed digits */ - int dtmfbuf_len; /* lenght of dtmfbuf */ - int rtp_timestamp; /* timestamp for RTP packets */ - uint16_t rtp_seqno; /* Sequence nr for RTP packets */ - uint32_t call_setup_start; /* Start of dialling in ms */ - uint32_t call_setup_delay; /* time between ^ and 1st ring in ms */ - uint16_t jb_size; /* Jitter buffer size */ - uint32_t jb_underflow; /* Jitter buffer injected samples */ - uint32_t jb_overflow; /* Jitter buffer dropped samples */ - uint16_t jb_delay; /* Jitter buffer: playout delay */ - uint16_t jb_invalid; /* Jitter buffer: Nr. of invalid packets */ - -} *iflist = NULL; - -static struct lantiq_ctx { - int dev_fd; - int channels; - int ch_fd[TAPI_AUDIO_PORT_NUM_MAX]; -} dev_ctx; - -static int ast_digit_begin(struct ast_channel *ast, char digit); -static int ast_digit_end(struct ast_channel *ast, char digit, unsigned int duration); -static int ast_lantiq_call(struct ast_channel *ast, char *dest, int timeout); -static int ast_lantiq_hangup(struct ast_channel *ast); -static int ast_lantiq_answer(struct ast_channel *ast); -static struct ast_frame *ast_lantiq_read(struct ast_channel *ast); -static int ast_lantiq_write(struct ast_channel *ast, struct ast_frame *frame); -static struct ast_frame *ast_lantiq_exception(struct ast_channel *ast); -static int ast_lantiq_indicate(struct ast_channel *chan, int condition, const void *data, size_t datalen); -static int ast_lantiq_fixup(struct ast_channel *old, struct ast_channel *new); -static struct ast_channel *ast_lantiq_requester(const char *type, format_t format, const struct ast_channel *requestor, void *data, int *cause); -static int acf_channel_read(struct ast_channel *chan, const char *funcname, char *args, char *buf, size_t buflen); -static void lantiq_jb_get_stats(int c); - -static const struct ast_channel_tech lantiq_tech = { - .type = "TAPI", - .description = "Lantiq TAPI Telephony API Driver", - .capabilities = AST_FORMAT_G723_1 | AST_FORMAT_SLINEAR | AST_FORMAT_ULAW | AST_FORMAT_G729A, - .send_digit_begin = ast_digit_begin, - .send_digit_end = ast_digit_end, - .call = ast_lantiq_call, - .hangup = ast_lantiq_hangup, - .answer = ast_lantiq_answer, - .read = ast_lantiq_read, - .write = ast_lantiq_write, - .exception = ast_lantiq_exception, - .indicate = ast_lantiq_indicate, - .fixup = ast_lantiq_fixup, - .requester = ast_lantiq_requester, - .func_channel_read = acf_channel_read -}; - -/* Protect the interface list (of lantiq_pvt's) */ -AST_MUTEX_DEFINE_STATIC(iflock); - -/* - * Protect the monitoring thread, so only one process can kill or start it, and - * not when it's doing something critical. - */ -AST_MUTEX_DEFINE_STATIC(monlock); - -/* Boolean value whether the monitoring thread shall continue. */ -static unsigned int monitor; - -/* The scheduling thread */ -struct ast_sched_thread *sched_thread; - -/* - * This is the thread for the monitor which checks for input on the channels - * which are not currently in use. - */ -static pthread_t monitor_thread = AST_PTHREADT_NULL; - - -#define WORDS_BIGENDIAN -/* struct taken from some GPLed code by Mike Borella */ -typedef struct rtp_header -{ -#if defined(WORDS_BIGENDIAN) - uint8_t version:2, padding:1, extension:1, csrc_count:4; -#else - uint8_t csrc_count:4, extension:1, padding:1, version:2; -#endif -#if defined(WORDS_BIGENDIAN) - uint8_t marker:1, payload_type:7; -#else - uint8_t payload_type:7, marker:1; -#endif - uint16_t seqno; - uint32_t timestamp; - uint32_t ssrc; -} rtp_header_t; - -static uint32_t now(void) { - struct timespec ts; - clock_gettime(CLOCK_MONOTONIC, &ts); - - uint64_t tmp = ts.tv_sec*1000 + (ts.tv_nsec/1000000); - return (uint32_t) tmp; -} - -static int lantiq_dev_open(const char *dev_path, const int32_t ch_num) -{ - char dev_name[PATH_MAX]; - memset(dev_name, 0, sizeof(dev_name)); - snprintf(dev_name, PATH_MAX, "%s%u%u", dev_path, 1, ch_num); - return open((const char*)dev_name, O_RDWR, 0644); -} - -static void lantiq_ring(int c, int r, const char *cid) -{ - uint8_t status; - - if (r) { - if (!cid) { - status = (uint8_t) ioctl(dev_ctx.ch_fd[c], IFX_TAPI_RING_START, 0); - } else { - IFX_TAPI_CID_MSG_t msg; - IFX_TAPI_CID_MSG_STRING_t cid_el; - - memset(&msg, 0, sizeof(msg)); - memset(&cid_el, 0, sizeof(cid_el)); - - cid_el.elementType = IFX_TAPI_CID_ST_CLI; - cid_el.len = strlen(cid); - strncpy((char*)cid_el.element, cid, (size_t)cid_el.len); - - msg.txMode = IFX_TAPI_CID_HM_ONHOOK; - msg.messageType = IFX_TAPI_CID_MT_CSUP; - msg.message = (IFX_TAPI_CID_MSG_ELEMENT_t *)&cid_el; - msg.nMsgElements = 1; - - status = (uint8_t) ioctl(dev_ctx.ch_fd[c], IFX_TAPI_CID_TX_SEQ_START, (IFX_int32_t) &msg); - } - } else { - status = (uint8_t) ioctl(dev_ctx.ch_fd[c], IFX_TAPI_RING_STOP, 0); - } - - if (status) { - ast_log(LOG_ERROR, "%s ioctl failed\n", - (r ? "IFX_TAPI_RING_START" : "IFX_TAPI_RING_STOP")); - } -} - -static int lantiq_play_tone(int c, int t) -{ - /* stop currently playing tone before starting new one */ - if (t != TAPI_TONE_LOCALE_NONE) { - ioctl(dev_ctx.ch_fd[c], IFX_TAPI_TONE_LOCAL_PLAY, TAPI_TONE_LOCALE_NONE); - } - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_TONE_LOCAL_PLAY, t)) { - ast_log(LOG_ERROR, "IFX_TAPI_TONE_LOCAL_PLAY ioctl failed\n"); - return -1; - } - - return 0; -} - -static enum channel_state lantiq_get_hookstatus(int port) -{ - uint8_t status; - - if (ioctl(dev_ctx.ch_fd[port], IFX_TAPI_LINE_HOOK_STATUS_GET, &status)) { - ast_log(LOG_ERROR, "IFX_TAPI_LINE_HOOK_STATUS_GET ioctl failed\n"); - return UNKNOWN; - } - - if (status) { - return OFFHOOK; - } else { - return ONHOOK; - } -} - -static int -lantiq_dev_binary_buffer_create(const char *path, uint8_t **ppBuf, uint32_t *pBufSz) -{ - FILE *fd; - struct stat file_stat; - int32_t status = 0; - - fd = fopen(path, "rb"); - if (fd == NULL) { - ast_log(LOG_ERROR, "binary file %s open failed\n", path); - return -1; - } - - if (stat(path, &file_stat)) { - ast_log(LOG_ERROR, "file %s statistics get failed\n", path); - return -1; - } - - *ppBuf = malloc(file_stat.st_size); - if (*ppBuf == NULL) { - ast_log(LOG_ERROR, "binary file %s memory allocation failed\n", path); - status = -1; - goto on_exit; - } - - if (fread (*ppBuf, sizeof(uint8_t), file_stat.st_size, fd) <= 0) { - ast_log(LOG_ERROR, "file %s read failed\n", path); - status = -1; - goto on_exit; - } - - *pBufSz = file_stat.st_size; - -on_exit: - if (fd != NULL) - fclose(fd); - - if (*ppBuf != NULL && status) - free(*ppBuf); - - return status; -} - -static int32_t lantiq_dev_firmware_download(int32_t fd, const char *path) -{ - uint8_t *firmware = NULL; - uint32_t size = 0; - VMMC_IO_INIT vmmc_io_init; - - ast_log(LOG_DEBUG, "loading firmware: \"%s\".", path); - - if (lantiq_dev_binary_buffer_create(path, &firmware, &size)) - return -1; - - memset(&vmmc_io_init, 0, sizeof(VMMC_IO_INIT)); - vmmc_io_init.pPRAMfw = firmware; - vmmc_io_init.pram_size = size; - - if (ioctl(fd, FIO_FW_DOWNLOAD, &vmmc_io_init)) { - ast_log(LOG_ERROR, "FIO_FW_DOWNLOAD ioctl failed\n"); - return -1; - } - - if (firmware != NULL) - free(firmware); - - return 0; -} - -static const char *state_string(enum channel_state s) -{ - switch (s) { - case ONHOOK: return "ONHOOK"; - case OFFHOOK: return "OFFHOOK"; - case DIALING: return "DIALING"; - case INCALL: return "INCALL"; - case CALL_ENDED: return "CALL_ENDED"; - case RINGING: return "RINGING"; - default: return "UNKNOWN"; - } -} - -static const char *control_string(int c) -{ - switch (c) { - case AST_CONTROL_HANGUP: return "Other end has hungup"; - case AST_CONTROL_RING: return "Local ring"; - case AST_CONTROL_RINGING: return "Remote end is ringing"; - case AST_CONTROL_ANSWER: return "Remote end has answered"; - case AST_CONTROL_BUSY: return "Remote end is busy"; - case AST_CONTROL_TAKEOFFHOOK: return "Make it go off hook"; - case AST_CONTROL_OFFHOOK: return "Line is off hook"; - case AST_CONTROL_CONGESTION: return "Congestion (circuits busy)"; - case AST_CONTROL_FLASH: return "Flash hook"; - case AST_CONTROL_WINK: return "Wink"; - case AST_CONTROL_OPTION: return "Set a low-level option"; - case AST_CONTROL_RADIO_KEY: return "Key Radio"; - case AST_CONTROL_RADIO_UNKEY: return "Un-Key Radio"; - case AST_CONTROL_PROGRESS: return "Remote end is making Progress"; - case AST_CONTROL_PROCEEDING: return "Remote end is proceeding"; - case AST_CONTROL_HOLD: return "Hold"; - case AST_CONTROL_UNHOLD: return "Unhold"; - case AST_CONTROL_SRCUPDATE: return "Media Source Update"; - case AST_CONTROL_CONNECTED_LINE: return "Connected Line"; - case AST_CONTROL_REDIRECTING: return "Redirecting"; - case AST_CONTROL_INCOMPLETE: return "Incomplete"; - case -1: return "Stop tone"; - default: return "Unknown"; - } -} - -static int ast_lantiq_indicate(struct ast_channel *chan, int condition, const void *data, size_t datalen) -{ - ast_verb(3, "phone indication \"%s\"\n", control_string(condition)); - - struct lantiq_pvt *pvt = chan->tech_pvt; - - switch (condition) { - case -1: - { - lantiq_play_tone(pvt->port_id, TAPI_TONE_LOCALE_NONE); - return 0; - } - case AST_CONTROL_CONGESTION: - case AST_CONTROL_BUSY: - { - lantiq_play_tone(pvt->port_id, TAPI_TONE_LOCALE_BUSY_CODE); - return 0; - } - case AST_CONTROL_RINGING: - { - pvt->call_setup_delay = now() - pvt->call_setup_start; - lantiq_play_tone(pvt->port_id, TAPI_TONE_LOCALE_RINGING_CODE); - return 0; - } - default: - { - /* -1 lets asterisk generate the tone */ - return -1; - } - } -} - -static int ast_lantiq_fixup(struct ast_channel *old, struct ast_channel *new) -{ - ast_log(LOG_DEBUG, "entering... no code here...\n"); - return 0; -} - -static int ast_digit_begin(struct ast_channel *chan, char digit) -{ - /* TODO: Modify this callback to let Asterisk support controlling the length of DTMF */ - ast_log(LOG_DEBUG, "entering... no code here...\n"); - return 0; -} - -static int ast_digit_end(struct ast_channel *ast, char digit, unsigned int duration) -{ - ast_log(LOG_DEBUG, "entering... no code here...\n"); - return 0; -} - -static int ast_lantiq_call(struct ast_channel *ast, char *dest, int timeout) -{ - /* lock to prevent simultaneous access with do_monitor thread processing */ - ast_mutex_lock(&iflock); - - struct lantiq_pvt *pvt = ast->tech_pvt; - ast_log(LOG_DEBUG, "state: %s\n", state_string(pvt->channel_state)); - - if (pvt->channel_state == ONHOOK) { - ast_log(LOG_DEBUG, "port %i is ringing\n", pvt->port_id); - - char *cid = ast->connected.id.number.valid ? ast->connected.id.number.str : NULL; - ast_log(LOG_DEBUG, "port %i CID: %s\n", pvt->port_id, cid ? cid : "none"); - - lantiq_ring(pvt->port_id, 1, cid); - pvt->channel_state = RINGING; - - ast_setstate(ast, AST_STATE_RINGING); - ast_queue_control(ast, AST_CONTROL_RINGING); - } else { - ast_log(LOG_DEBUG, "port %i is busy\n", pvt->port_id); - ast_setstate(ast, AST_STATE_BUSY); - ast_queue_control(ast, AST_CONTROL_BUSY); - } - - ast_mutex_unlock(&iflock); - - return 0; -} - -static int ast_lantiq_hangup(struct ast_channel *ast) -{ - /* lock to prevent simultaneous access with do_monitor thread processing */ - ast_mutex_lock(&iflock); - - struct lantiq_pvt *pvt = ast->tech_pvt; - ast_log(LOG_DEBUG, "state: %s\n", state_string(pvt->channel_state)); - - if (ast->_state == AST_STATE_RINGING) { - // FIXME - ast_debug(1, "TAPI: ast_lantiq_hangup(): ast->_state == AST_STATE_RINGING\n"); - } - - switch (pvt->channel_state) { - case RINGING: - case ONHOOK: - lantiq_ring(pvt->port_id, 0, NULL); - pvt->channel_state = ONHOOK; - break; - default: - ast_log(LOG_DEBUG, "we were hung up, play busy tone\n"); - pvt->channel_state = CALL_ENDED; - lantiq_play_tone(pvt->port_id, TAPI_TONE_LOCALE_BUSY_CODE); - } - - lantiq_jb_get_stats(pvt->port_id); - - ast_setstate(ast, AST_STATE_DOWN); - ast_module_unref(ast_module_info->self); - ast->tech_pvt = NULL; - pvt->owner = NULL; - - ast_mutex_unlock(&iflock); - - return 0; -} - -static int ast_lantiq_answer(struct ast_channel *ast) -{ - ast_log(LOG_DEBUG, "entering... no code here...\n"); - return 0; -} - -static struct ast_frame * ast_lantiq_read(struct ast_channel *ast) -{ - ast_log(LOG_DEBUG, "entering... no code here...\n"); - return NULL; -} - -static int ast_lantiq_write(struct ast_channel *ast, struct ast_frame *frame) -{ - char buf[2048]; - struct lantiq_pvt *pvt = ast->tech_pvt; - int ret = -1; - rtp_header_t *rtp_header = (rtp_header_t *) buf; - - if(frame->frametype != AST_FRAME_VOICE) { - ast_log(LOG_DEBUG, "unhandled frame type\n"); - return 0; - } - - if (frame->datalen == 0) { - ast_log(LOG_DEBUG, "we've been prodded\n"); - return 0; - } - - memset(buf, 0, sizeof(rtp_header_t)); - rtp_header->version = 2; - rtp_header->padding = 0; - rtp_header->extension = 0; - rtp_header->csrc_count = 0; - rtp_header->marker = 0; - rtp_header->timestamp = pvt->rtp_timestamp; - rtp_header->seqno = pvt->rtp_seqno++; - rtp_header->ssrc = 0; - rtp_header->payload_type = (uint8_t) frame->subclass.codec; - - pvt->rtp_timestamp += 160; - - memcpy(buf+RTP_HEADER_LEN, frame->data.ptr, frame->datalen); - - ret = write(dev_ctx.ch_fd[pvt->port_id], buf, frame->datalen+RTP_HEADER_LEN); - if (ret <= 0) { - ast_debug(1, "TAPI: ast_lantiq_write(): error writing.\n"); - return -1; - } - -#ifdef TODO_DEVEL_INFO - ast_debug(1, "ast_lantiq_write(): size: %i version: %i padding: %i extension: %i csrc_count: %i\n" - "marker: %i payload_type: %s seqno: %i timestamp: %i ssrc: %i\n", - (int)ret, - (int)rtp_header->version, - (int)rtp_header->padding, - (int)rtp_header->extension, - (int)rtp_header->csrc_count, - (int)rtp_header->marker, - ast_codec2str(rtp_header->payload_type), - (int)rtp_header->seqno, - (int)rtp_header->timestamp, - (int)rtp_header->ssrc); -#endif - - return 0; -} - -static int acf_channel_read(struct ast_channel *chan, const char *funcname, char *args, char *buf, size_t buflen) -{ - struct lantiq_pvt *pvt; - int res = 0; - - if (!chan || chan->tech != &lantiq_tech) { - ast_log(LOG_ERROR, "This function requires a valid Lantiq TAPI channel\n"); - return -1; - } - - ast_mutex_lock(&iflock); - - pvt = (struct lantiq_pvt*) chan->tech_pvt; - - if (!strcasecmp(args, "csd")) { - snprintf(buf, buflen, "%lu", (unsigned long int) pvt->call_setup_delay); - } else if (!strcasecmp(args, "jitter_stats")){ - lantiq_jb_get_stats(pvt->port_id); - snprintf(buf, buflen, "jbBufSize=%u,jbUnderflow=%u,jbOverflow=%u,jbDelay=%u,jbInvalid=%u", - (uint32_t) pvt->jb_size, - (uint32_t) pvt->jb_underflow, - (uint32_t) pvt->jb_overflow, - (uint32_t) pvt->jb_delay, - (uint32_t) pvt->jb_invalid); - } else { - res = -1; - } - - ast_mutex_unlock(&iflock); - - return res; -} - - -static struct ast_frame * ast_lantiq_exception(struct ast_channel *ast) -{ - ast_log(LOG_DEBUG, "entering... no code here...\n"); - return NULL; -} - -static void lantiq_jb_get_stats(int c) { - struct lantiq_pvt *pvt = &iflist[c]; - - IFX_TAPI_JB_STATISTICS_t param; - memset (¶m, 0, sizeof (param)); - if (ioctl (dev_ctx.ch_fd[c], IFX_TAPI_JB_STATISTICS_GET, (IFX_int32_t) ¶m) != IFX_SUCCESS) { - ast_debug(1, "Error getting jitter buffer stats.\n"); - } else { -#if !defined (TAPI_VERSION3) && defined (TAPI_VERSION4) - ast_debug(1, "Jitter buffer stats: dev=%u, ch=%u, nType=%u, nBufSize=%u, nIsUnderflow=%u, nDsOverflow=%u, nPODelay=%u, nInvalid=%u", - (uint32_t) param.dev, - (uint32_t) param.ch, -#else - ast_debug(1, "Jitter buffer stats: nType=%u, nBufSize=%u, nIsUnderflow=%u, nDsOverflow=%u, nPODelay=%u, nInvalid=%u", -#endif - (uint32_t) param.nType, - (uint32_t) param.nBufSize, - (uint32_t) param.nIsUnderflow, - (uint32_t) param.nDsOverflow, - (uint32_t) param.nPODelay, - (uint32_t) param.nInvalid); - - pvt->jb_size = param.nBufSize; - pvt->jb_underflow = param.nIsUnderflow; - pvt->jb_overflow = param.nDsOverflow; - pvt->jb_invalid = param.nInvalid; - pvt->jb_delay = param.nPODelay; - } -} - - -static int lantiq_standby(int c) -{ - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_LINE_FEED_SET, IFX_TAPI_LINE_FEED_STANDBY)) { - ast_log(LOG_ERROR, "IFX_TAPI_LINE_FEED_SET ioctl failed\n"); - return -1; - } - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_ENC_STOP, 0)) { - ast_log(LOG_ERROR, "IFX_TAPI_ENC_STOP ioctl failed\n"); - return -1; - } - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_DEC_STOP, 0)) { - ast_log(LOG_ERROR, "IFX_TAPI_DEC_STOP ioctl failed\n"); - return -1; - } - - return lantiq_play_tone(c, TAPI_TONE_LOCALE_NONE); -} - -static int lantiq_end_dialing(int c) -{ - ast_log(LOG_DEBUG, "TODO - DEBUG MSG\n"); - struct lantiq_pvt *pvt = &iflist[c]; - - if (pvt->dial_timer) { - ast_sched_thread_del(sched_thread, pvt->dial_timer); - pvt->dial_timer = 0; - } - - if(pvt->owner) { - ast_hangup(pvt->owner); - } - - return 0; -} - -static int lantiq_end_call(int c) -{ - ast_log(LOG_DEBUG, "TODO - DEBUG MSG\n"); - - struct lantiq_pvt *pvt = &iflist[c]; - - if(pvt->owner) { - lantiq_jb_get_stats(c); - ast_queue_hangup(pvt->owner); - } - - return 0; -} - -static struct ast_channel * lantiq_channel(int state, int c, char *ext, char *ctx) -{ - ast_log(LOG_DEBUG, "TODO - DEBUG MSG\n"); - - struct ast_channel *chan = NULL; - - struct lantiq_pvt *pvt = &iflist[c]; - - chan = ast_channel_alloc(1, state, NULL, NULL, "", ext, ctx, 0, c, "TAPI/%s", "1"); - - chan->tech = &lantiq_tech; - chan->nativeformats = AST_FORMAT_ULAW; - chan->readformat = AST_FORMAT_ULAW; - chan->writeformat = AST_FORMAT_ULAW; - chan->tech_pvt = pvt; - - pvt->owner = chan; - - return chan; -} - -static struct ast_channel * ast_lantiq_requester(const char *type, format_t format, const struct ast_channel *requestor, void *data, int *cause) -{ - ast_mutex_lock(&iflock); - - char buf[BUFSIZ]; - struct ast_channel *chan = NULL; - int port_id = -1; - - ast_debug(1, "Asked to create a TAPI channel with formats: %s\n", ast_getformatname_multiple(buf, sizeof(buf), format)); - - - /* check for correct data argument */ - if (ast_strlen_zero(data)) { - ast_log(LOG_ERROR, "Unable to create channel with empty destination.\n"); - *cause = AST_CAUSE_CHANNEL_UNACCEPTABLE; - return NULL; - } - - /* get our port number */ - port_id = atoi((char*) data); - if (port_id < 1 || port_id > dev_ctx.channels) { - ast_log(LOG_ERROR, "Unknown channel ID: \"%s\"\n", (char*) data); - *cause = AST_CAUSE_CHANNEL_UNACCEPTABLE; - return NULL; - } - - /* on asterisk user's side, we're using port 1-2. - * Here in non normal human's world, we begin - * counting at 0. - */ - port_id -= 1; - - chan = lantiq_channel(AST_STATE_DOWN, port_id, NULL, NULL); - - ast_mutex_unlock(&iflock); - return chan; -} - -static int lantiq_dev_data_handler(int c) -{ - char buf[BUFSIZ]; - struct ast_frame frame = {0}; - - int res = read(dev_ctx.ch_fd[c], buf, sizeof(buf)); - if (res <= 0) ast_log(LOG_ERROR, "we got read error %i\n", res); - - rtp_header_t *rtp = (rtp_header_t*) buf; - - frame.src = "TAPI"; - frame.frametype = AST_FRAME_VOICE; - frame.subclass.codec = rtp->payload_type; - frame.samples = res - RTP_HEADER_LEN; - frame.datalen = res - RTP_HEADER_LEN; - frame.data.ptr = buf + RTP_HEADER_LEN; - - struct lantiq_pvt *pvt = (struct lantiq_pvt *) &iflist[c]; - if (pvt->owner && (pvt->owner->_state == AST_STATE_UP)) { - if(!ast_channel_trylock(pvt->owner)) { - ast_queue_frame(pvt->owner, &frame); - ast_channel_unlock(pvt->owner); - } - } - -/* ast_debug(1, "lantiq_dev_data_handler(): size: %i version: %i padding: %i extension: %i csrc_count: %i \n" - "marker: %i payload_type: %s seqno: %i timestamp: %i ssrc: %i\n", - (int)res, - (int)rtp->version, - (int)rtp->padding, - (int)rtp->extension, - (int)rtp->csrc_count, - (int)rtp->marker, - ast_codec2str(rtp->payload_type), - (int)rtp->seqno, - (int)rtp->timestamp, - (int)rtp->ssrc); -*/ - return 0; -} - -static int accept_call(int c) -{ - ast_log(LOG_DEBUG, "TODO - DEBUG MSG\n"); - - struct lantiq_pvt *pvt = &iflist[c]; - - if (pvt->owner) { - struct ast_channel *chan = pvt->owner; - - switch (chan->_state) { - case AST_STATE_RINGING: - lantiq_play_tone(c, TAPI_TONE_LOCALE_NONE); - ast_queue_control(pvt->owner, AST_CONTROL_ANSWER); - pvt->channel_state = INCALL; - break; - default: - ast_log(LOG_WARNING, "entered unhandled state %s\n", ast_state2str(chan->_state)); - } - } - - return 0; -} - -static int lantiq_dev_event_hook(int c, int state) -{ - ast_mutex_lock(&iflock); - - ast_log(LOG_DEBUG, "on port %i detected event %s hook\n", c, state ? "on" : "off"); - - int ret = -1; - if (state) { /* going onhook */ - switch (iflist[c].channel_state) { - case OFFHOOK: - ret = lantiq_standby(c); - break; - case DIALING: - ret = lantiq_end_dialing(c); - break; - case INCALL: - ret = lantiq_end_call(c); - break; - case CALL_ENDED: - ret = lantiq_standby(c); // TODO: are we sure for this ? - break; - default: - break; - } - iflist[c].channel_state = ONHOOK; - } else { /* going offhook */ - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_LINE_FEED_SET, IFX_TAPI_LINE_FEED_ACTIVE)) { - ast_log(LOG_ERROR, "IFX_TAPI_LINE_FEED_SET ioctl failed\n"); - goto out; - } - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_ENC_START, 0)) { - ast_log(LOG_ERROR, "IFX_TAPI_ENC_START ioctl failed\n"); - goto out; - } - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_DEC_START, 0)) { - ast_log(LOG_ERROR, "IFX_TAPI_DEC_START ioctl failed\n"); - goto out; - } - - switch (iflist[c].channel_state) { - case RINGING: - ret = accept_call(c); - break; - default: - iflist[c].channel_state = OFFHOOK; - lantiq_play_tone(c, TAPI_TONE_LOCALE_DIAL_CODE); - ret = 0; - break; - } - - } - -out: - ast_mutex_unlock(&iflock); - - return ret; -} - -static void lantiq_reset_dtmfbuf(struct lantiq_pvt *pvt) -{ - pvt->dtmfbuf[0] = '\0'; - pvt->dtmfbuf_len = 0; - pvt->ext[0] = '\0'; -} - -static void lantiq_dial(struct lantiq_pvt *pvt) -{ - struct ast_channel *chan = NULL; - - ast_log(LOG_DEBUG, "user want's to dial %s.\n", pvt->dtmfbuf); - - if (ast_exists_extension(NULL, pvt->context, pvt->dtmfbuf, 1, NULL)) { - ast_debug(1, "found extension %s, dialing\n", pvt->dtmfbuf); - - strcpy(pvt->ext, pvt->dtmfbuf); - - ast_verbose(VERBOSE_PREFIX_3 " extension exists, starting PBX %s\n", pvt->ext); - - chan = lantiq_channel(AST_STATE_UP, pvt->port_id, pvt->ext+1, pvt->context); - chan->tech_pvt = pvt; - pvt->owner = chan; - - strcpy(chan->exten, pvt->ext); - ast_setstate(chan, AST_STATE_RING); - pvt->channel_state = INCALL; - - pvt->call_setup_start = now(); - - if (ast_pbx_start(chan)) { - ast_log(LOG_WARNING, " unable to start PBX on %s\n", chan->name); - ast_hangup(chan); - } - } else { - ast_log(LOG_DEBUG, "no extension found\n"); - lantiq_play_tone(pvt->port_id, TAPI_TONE_LOCALE_BUSY_CODE); - pvt->channel_state = CALL_ENDED; - } - - lantiq_reset_dtmfbuf(pvt); -} - -static int lantiq_event_dial_timeout(const void* data) -{ - ast_debug(1, "TAPI: lantiq_event_dial_timeout()\n"); - - struct lantiq_pvt *pvt = (struct lantiq_pvt *) data; - pvt->dial_timer = 0; - - if (! pvt->channel_state == ONHOOK) { - lantiq_dial(pvt); - } else { - ast_debug(1, "TAPI: lantiq_event_dial_timeout(): dial timeout in state ONHOOK.\n"); - } - - return 0; -} - -static int lantiq_send_digit(int c, char digit) -{ - struct lantiq_pvt *pvt = &iflist[c]; - - struct ast_frame f = { .frametype = AST_FRAME_DTMF, .subclass.integer = digit }; - - if (pvt->owner) { - ast_log(LOG_DEBUG, "Port %i transmitting digit \"%c\"\n", c, digit); - return ast_queue_frame(pvt->owner, &f); - } else { - ast_debug(1, "Warning: lantiq_send_digit() without owner!\n"); - return -1; - } -} - -static void lantiq_dev_event_digit(int c, char digit) -{ - ast_mutex_lock(&iflock); - - ast_log(LOG_DEBUG, "on port %i detected digit \"%c\"\n", c, digit); - - struct lantiq_pvt *pvt = &iflist[c]; - - switch (pvt->channel_state) { - case INCALL: - { - lantiq_send_digit(c, digit); - break; - } - case OFFHOOK: - pvt->channel_state = DIALING; - - lantiq_play_tone(c, TAPI_TONE_LOCALE_NONE); - - /* fall through */ - case DIALING: - if (digit == '#') { - if (pvt->dial_timer) { - ast_sched_thread_del(sched_thread, pvt->dial_timer); - pvt->dial_timer = 0; - } - - lantiq_dial(pvt); - } else { - pvt->dtmfbuf[pvt->dtmfbuf_len] = digit; - pvt->dtmfbuf_len++; - pvt->dtmfbuf[pvt->dtmfbuf_len] = '\0'; - - /* setup autodial timer */ - if (!pvt->dial_timer) { - ast_log(LOG_DEBUG, "setting new timer\n"); - pvt->dial_timer = ast_sched_thread_add(sched_thread, 2000, lantiq_event_dial_timeout, (const void*) pvt); - } else { - ast_log(LOG_DEBUG, "replacing timer\n"); - struct sched_context *sched = ast_sched_thread_get_context(sched_thread); - AST_SCHED_REPLACE(pvt->dial_timer, sched, 2000, lantiq_event_dial_timeout, (const void*) pvt); - } - } - break; - default: - ast_log(LOG_ERROR, "don't know what to do in unhandled state\n"); - break; - } - - ast_mutex_unlock(&iflock); - return; -} - -static void lantiq_dev_event_handler(void) -{ - IFX_TAPI_EVENT_t event; - unsigned int i; - - for (i = 0; i < dev_ctx.channels ; i++) { - ast_mutex_lock(&iflock); - - memset (&event, 0, sizeof(event)); - event.ch = i; - if (ioctl(dev_ctx.dev_fd, IFX_TAPI_EVENT_GET, &event)) { - ast_mutex_unlock(&iflock); - continue; - } - if (event.id == IFX_TAPI_EVENT_NONE) { - ast_mutex_unlock(&iflock); - continue; - } - - ast_mutex_unlock(&iflock); - - switch(event.id) { - case IFX_TAPI_EVENT_FXS_ONHOOK: - lantiq_dev_event_hook(i, 1); - break; - case IFX_TAPI_EVENT_FXS_OFFHOOK: - lantiq_dev_event_hook(i, 0); - break; - case IFX_TAPI_EVENT_DTMF_DIGIT: - lantiq_dev_event_digit(i, (char)event.data.dtmf.ascii); - break; - case IFX_TAPI_EVENT_PULSE_DIGIT: - if (event.data.pulse.digit == 0xB) { - lantiq_dev_event_digit(i, '0'); - } else { - lantiq_dev_event_digit(i, '0' + (char)event.data.pulse.digit); - } - break; - case IFX_TAPI_EVENT_COD_DEC_CHG: - case IFX_TAPI_EVENT_TONE_GEN_END: - case IFX_TAPI_EVENT_CID_TX_SEQ_END: - break; - default: - ast_log(LOG_ERROR, "unknown TAPI event %08X\n", event.id); - break; - } - } -} - -static void * lantiq_events_monitor(void *data) -{ - ast_verbose("TAPI thread started\n"); - - struct pollfd fds[3]; - - fds[0].fd = dev_ctx.dev_fd; - fds[0].events = POLLIN; - fds[1].fd = dev_ctx.ch_fd[0]; - fds[1].events = POLLIN; - fds[2].fd = dev_ctx.ch_fd[1]; - fds[2].events = POLLIN; - - while (monitor) { - ast_mutex_lock(&monlock); - - if (poll(fds, dev_ctx.channels + 1, 2000) <= 0) { - ast_mutex_unlock(&monlock); - continue; - } - - if (fds[0].revents & POLLIN) { - lantiq_dev_event_handler(); - } - - ast_mutex_unlock(&monlock); - - if ((fds[1].revents & POLLIN) && (lantiq_dev_data_handler(0))) { - ast_log(LOG_ERROR, "data handler 0 failed\n"); - break; - } - - if ((fds[2].revents & POLLIN) && (lantiq_dev_data_handler(1))) { - ast_log(LOG_ERROR, "data handler 1 failed\n"); - break; - } - } - - return NULL; -} - -static int restart_monitor(void) -{ - /* If we're supposed to be stopped -- stay stopped */ - if (monitor_thread == AST_PTHREADT_STOP) - return 0; - - ast_mutex_lock(&monlock); - - if (monitor_thread == pthread_self()) { - ast_mutex_unlock(&monlock); - ast_log(LOG_WARNING, "Cannot kill myself\n"); - return -1; - } - - if (monitor_thread != AST_PTHREADT_NULL) { - if (ast_mutex_lock(&iflock)) { - ast_mutex_unlock(&monlock); - ast_log(LOG_WARNING, "Unable to lock the interface list\n"); - return -1; - } - monitor = 0; - while (pthread_kill(monitor_thread, SIGURG) == 0) - sched_yield(); - pthread_join(monitor_thread, NULL); - ast_mutex_unlock(&iflock); - } - - monitor = 1; - /* Start a new monitor */ - if (ast_pthread_create_background(&monitor_thread, NULL, lantiq_events_monitor, NULL) < 0) { - ast_mutex_unlock(&monlock); - ast_log(LOG_ERROR, "Unable to start monitor thread.\n"); - return -1; - } - - ast_mutex_unlock(&monlock); - - return 0; -} - -static void lantiq_cleanup(void) -{ - int c; - - for (c = 0; c < dev_ctx.channels ; c++) { - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_LINE_FEED_SET, IFX_TAPI_LINE_FEED_STANDBY)) { - ast_log(LOG_WARNING, "IFX_TAPI_LINE_FEED_SET ioctl failed\n"); - } - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_ENC_STOP, 0)) { - ast_log(LOG_WARNING, "IFX_TAPI_ENC_STOP ioctl failed\n"); - } - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_DEC_STOP, 0)) { - ast_log(LOG_WARNING, "IFX_TAPI_DEC_STOP ioctl failed\n"); - } - } - - if (ioctl(dev_ctx.dev_fd, IFX_TAPI_DEV_STOP, 0)) { - ast_log(LOG_WARNING, "IFX_TAPI_DEV_STOP ioctl failed\n"); - } - - close(dev_ctx.dev_fd); -} - -static int unload_module(void) -{ - int c; - - ast_channel_unregister(&lantiq_tech); - - if (!ast_mutex_lock(&iflock)) { - for (c = 0; c < dev_ctx.channels ; c++) { - if (iflist[c].owner) - ast_softhangup(iflist[c].owner, AST_SOFTHANGUP_APPUNLOAD); - } - ast_mutex_unlock(&iflock); - } else { - ast_log(LOG_WARNING, "Unable to lock the monitor\n"); - return -1; - } - - if (!ast_mutex_lock(&monlock)) { - if (monitor_thread > AST_PTHREADT_NULL) { - monitor = 0; - while (pthread_kill(monitor_thread, SIGURG) == 0) - sched_yield(); - pthread_join(monitor_thread, NULL); - } - monitor_thread = AST_PTHREADT_STOP; - ast_mutex_unlock(&monlock); - } else { - ast_log(LOG_WARNING, "Unable to lock the monitor\n"); - return -1; - } - - return 0; -} - -static struct lantiq_pvt *lantiq_init_pvt(struct lantiq_pvt *pvt) -{ - if (pvt) { - pvt->owner = NULL; - pvt->port_id = -1; - pvt->channel_state = UNKNOWN; - pvt->context[0] = '\0'; - pvt->ext[0] = '\0'; - pvt->dial_timer = 0; - pvt->dtmfbuf[0] = '\0'; - pvt->dtmfbuf_len = 0; - pvt->call_setup_start = 0; - pvt->call_setup_delay = 0; - pvt->jb_size = 0; - pvt->jb_underflow = 0; - pvt->jb_overflow = 0; - pvt->jb_delay = 0; - pvt->jb_invalid = 0; - } else { - ast_log(LOG_ERROR, "unable to clear pvt structure\n"); - } - - return pvt; -} - -static int lantiq_create_pvts(void) -{ - int i; - - iflist = ast_calloc(1, sizeof(struct lantiq_pvt) * dev_ctx.channels); - - if (iflist) { - for (i=0 ; inext) { - if (!strcasecmp(v->name, "channels")) { - dev_ctx.channels = atoi(v->value); - if (!dev_ctx.channels) { - ast_log(LOG_ERROR, "Invalid value for channels in config %s\n", config); - ast_config_destroy(cfg); - return AST_MODULE_LOAD_DECLINE; - } - } else if (!strcasecmp(v->name, "firmwarefilename")) { - ast_copy_string(firmware_filename, v->value, sizeof(firmware_filename)); - } else if (!strcasecmp(v->name, "bbdfilename")) { - ast_copy_string(bbd_filename, v->value, sizeof(bbd_filename)); - } else if (!strcasecmp(v->name, "basepath")) { - ast_copy_string(base_path, v->value, sizeof(base_path)); - } else if (!strcasecmp(v->name, "per_channel_context")) { - if (!strcasecmp(v->value, "on")) { - per_channel_context = 1; - } else if (!strcasecmp(v->value, "off")) { - per_channel_context = 0; - } else { - ast_log(LOG_ERROR, "Unknown per_channel_context value '%s'. Try 'on' or 'off'.\n", v->value); - ast_config_destroy(cfg); - return AST_MODULE_LOAD_DECLINE; - } - } - } - - for (v = ast_variable_browse(cfg, "general"); v; v = v->next) { - if (!strcasecmp(v->name, "rxgain")) { - rxgain = atoi(v->value); - if (!rxgain) { - rxgain = 0; - ast_log(LOG_WARNING, "Invalid rxgain: %s, using default.\n", v->value); - } - } else if (!strcasecmp(v->name, "txgain")) { - txgain = atoi(v->value); - if (!txgain) { - txgain = 0; - ast_log(LOG_WARNING, "Invalid txgain: %s, using default.\n", v->value); - } - } else if (!strcasecmp(v->name, "echocancel")) { - if (!strcasecmp(v->value, "off")) { - wlec_type = IFX_TAPI_WLEC_TYPE_OFF; - } else if (!strcasecmp(v->value, "nlec")) { - wlec_type = IFX_TAPI_WLEC_TYPE_NE; - if (!strcasecmp(v->name, "echocancelfixedwindowsize")) { - wlec_nbne = atoi(v->value); - } - } else if (!strcasecmp(v->value, "wlec")) { - wlec_type = IFX_TAPI_WLEC_TYPE_NFE; - if (!strcasecmp(v->name, "echocancelnfemovingwindowsize")) { - wlec_nbfe = atoi(v->value); - } else if (!strcasecmp(v->name, "echocancelfixedwindowsize")) { - wlec_nbne = atoi(v->value); - } else if (!strcasecmp(v->name, "echocancelwidefixedwindowsize")) { - wlec_wbne = atoi(v->value); - } - } else if (!strcasecmp(v->value, "nees")) { - wlec_type = IFX_TAPI_WLEC_TYPE_NE_ES; - } else if (!strcasecmp(v->value, "nfees")) { - wlec_type = IFX_TAPI_WLEC_TYPE_NFE_ES; - } else if (!strcasecmp(v->value, "es")) { - wlec_type = IFX_TAPI_WLEC_TYPE_ES; - } else { - wlec_type = IFX_TAPI_WLEC_TYPE_OFF; - ast_log(LOG_ERROR, "Unknown echo cancellation type '%s'\n", v->value); - ast_config_destroy(cfg); - return AST_MODULE_LOAD_DECLINE; - } - } else if (!strcasecmp(v->name, "echocancelnlp")) { - if (!strcasecmp(v->value, "on")) { - wlec_nlp = IFX_TAPI_WLEC_NLP_ON; - } else if (!strcasecmp(v->value, "off")) { - wlec_nlp = IFX_TAPI_WLEC_NLP_OFF; - } else { - ast_log(LOG_ERROR, "Unknown echo cancellation nlp '%s'\n", v->value); - ast_config_destroy(cfg); - return AST_MODULE_LOAD_DECLINE; - } - } else if (!strcasecmp(v->name, "jitterbuffertype")) { - if (!strcasecmp(v->value, "fixed")) { - jb_type = IFX_TAPI_JB_TYPE_FIXED; - } else if (!strcasecmp(v->value, "adaptive")) { - jb_type = IFX_TAPI_JB_TYPE_ADAPTIVE; - jb_localadpt = IFX_TAPI_JB_LOCAL_ADAPT_DEFAULT; - if (!strcasecmp(v->name, "jitterbufferadaptation")) { - if (!strcasecmp(v->value, "on")) { - jb_localadpt = IFX_TAPI_JB_LOCAL_ADAPT_ON; - } else if (!strcasecmp(v->value, "off")) { - jb_localadpt = IFX_TAPI_JB_LOCAL_ADAPT_OFF; - } - } else if (!strcasecmp(v->name, "jitterbufferscalling")) { - jb_scaling = atoi(v->value); - } else if (!strcasecmp(v->name, "jitterbufferinitialsize")) { - jb_initialsize = atoi(v->value); - } else if (!strcasecmp(v->name, "jitterbufferminsize")) { - jb_minsize = atoi(v->value); - } else if (!strcasecmp(v->name, "jitterbuffermaxsize")) { - jb_maxsize = atoi(v->value); - } - } else { - ast_log(LOG_ERROR, "Unknown jitter buffer type '%s'\n", v->value); - ast_config_destroy(cfg); - return AST_MODULE_LOAD_DECLINE; - } - } else if (!strcasecmp(v->name, "jitterbufferpackettype")) { - if (!strcasecmp(v->value, "voice")) { - jb_pckadpt = IFX_TAPI_JB_PKT_ADAPT_VOICE; - } else if (!strcasecmp(v->value, "data")) { - jb_pckadpt = IFX_TAPI_JB_PKT_ADAPT_DATA; - } else if (!strcasecmp(v->value, "datanorep")) { - jb_pckadpt = IFX_TAPI_JB_PKT_ADAPT_DATA_NO_REP; - } else { - ast_log(LOG_ERROR, "Unknown jitter buffer packet adaptation type '%s'\n", v->value); - ast_config_destroy(cfg); - return AST_MODULE_LOAD_DECLINE; - } - } else if (!strcasecmp(v->name, "calleridtype")) { - ast_log(LOG_DEBUG, "Setting CID type to %s.\n", v->value); - if (!strcasecmp(v->value, "telecordia")) { - cid_type = IFX_TAPI_CID_STD_TELCORDIA; - } else if (!strcasecmp(v->value, "etsifsk")) { - cid_type = IFX_TAPI_CID_STD_ETSI_FSK; - } else if (!strcasecmp(v->value, "etsidtmf")) { - cid_type = IFX_TAPI_CID_STD_ETSI_DTMF; - } else if (!strcasecmp(v->value, "sin")) { - cid_type = IFX_TAPI_CID_STD_SIN; - } else if (!strcasecmp(v->value, "ntt")) { - cid_type = IFX_TAPI_CID_STD_NTT; - } else if (!strcasecmp(v->value, "kpndtmf")) { - cid_type = IFX_TAPI_CID_STD_KPN_DTMF; - } else if (!strcasecmp(v->value, "kpndtmffsk")) { - cid_type = IFX_TAPI_CID_STD_KPN_DTMF_FSK; - } else { - ast_log(LOG_ERROR, "Unknown caller id type '%s'\n", v->value); - ast_config_destroy(cfg); - return AST_MODULE_LOAD_DECLINE; - } - } else if (!strcasecmp(v->name, "voiceactivitydetection")) { - if (!strcasecmp(v->value, "on")) { - vad_type = IFX_TAPI_ENC_VAD_ON; - } else if (!strcasecmp(v->value, "g711")) { - vad_type = IFX_TAPI_ENC_VAD_G711; - } else if (!strcasecmp(v->value, "cng")) { - vad_type = IFX_TAPI_ENC_VAD_CNG_ONLY; - } else if (!strcasecmp(v->value, "sc")) { - vad_type = IFX_TAPI_ENC_VAD_SC_ONLY; - } else { - ast_log(LOG_ERROR, "Unknown voice activity detection value '%s'\n", v->value); - ast_config_destroy(cfg); - return AST_MODULE_LOAD_DECLINE; - } - } - } - - lantiq_create_pvts(); - - ast_mutex_unlock(&iflock); - - if (ast_channel_register(&lantiq_tech)) { - ast_log(LOG_ERROR, "Unable to register channel class 'Phone'\n"); - ast_config_destroy(cfg); - unload_module(); - return AST_MODULE_LOAD_FAILURE; - } - ast_config_destroy(cfg); - - /* tapi */ -#ifdef TODO_TONES - IFX_TAPI_TONE_t tone; -#endif - IFX_TAPI_DEV_START_CFG_t dev_start; - IFX_TAPI_MAP_DATA_t map_data; - IFX_TAPI_ENC_CFG_t enc_cfg; - IFX_TAPI_LINE_VOLUME_t line_vol; - IFX_TAPI_WLEC_CFG_t wlec_cfg; - IFX_TAPI_JB_CFG_t jb_cfg; - IFX_TAPI_CID_CFG_t cid_cfg; - uint8_t c; - - /* open device */ - dev_ctx.dev_fd = lantiq_dev_open(base_path, 0); - - if (dev_ctx.dev_fd < 0) { - ast_log(LOG_ERROR, "lantiq tapi device open function failed\n"); - return AST_MODULE_LOAD_FAILURE; - } - - for (c = 0; c < dev_ctx.channels ; c++) { - dev_ctx.ch_fd[c] = lantiq_dev_open(base_path, c + 1); - - if (dev_ctx.ch_fd[c] < 0) { - ast_log(LOG_ERROR, "lantiq tapi channel %d open function failed\n", c); - return AST_MODULE_LOAD_FAILURE; - } - } - - if (lantiq_dev_firmware_download(dev_ctx.dev_fd, firmware_filename)) { - ast_log(LOG_ERROR, "voice firmware download failed\n"); - return AST_MODULE_LOAD_FAILURE; - } - - if (ioctl(dev_ctx.dev_fd, IFX_TAPI_DEV_STOP, 0)) { - ast_log(LOG_ERROR, "IFX_TAPI_DEV_STOP ioctl failed\n"); - return AST_MODULE_LOAD_FAILURE; - } - - memset(&dev_start, 0x0, sizeof(IFX_TAPI_DEV_START_CFG_t)); - dev_start.nMode = IFX_TAPI_INIT_MODE_VOICE_CODER; - - /* Start TAPI */ - if (ioctl(dev_ctx.dev_fd, IFX_TAPI_DEV_START, &dev_start)) { - ast_log(LOG_ERROR, "IFX_TAPI_DEV_START ioctl failed\n"); - return AST_MODULE_LOAD_FAILURE; - } - - for (c = 0; c < dev_ctx.channels ; c++) { - /* tones */ -#ifdef TODO_TONES - memset(&tone, 0, sizeof(IFX_TAPI_TONE_t)); - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_TONE_TABLE_CFG_SET, &tone)) { - ast_log(LOG_ERROR, "IFX_TAPI_TONE_TABLE_CFG_SET %d failed\n", c); - return AST_MODULE_LOAD_FAILURE; - } -#endif - /* ringing type */ - IFX_TAPI_RING_CFG_t ringingType; - memset(&ringingType, 0, sizeof(IFX_TAPI_RING_CFG_t)); - ringingType.nMode = IFX_TAPI_RING_CFG_MODE_INTERNAL_BALANCED; - ringingType.nSubmode = IFX_TAPI_RING_CFG_SUBMODE_DC_RNG_TRIP_FAST; - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_RING_CFG_SET, (IFX_int32_t) &ringingType)) { - ast_log(LOG_ERROR, "IFX_TAPI_RING_CFG_SET failed\n"); - return AST_MODULE_LOAD_FAILURE; - } - - /* ring cadence */ - IFX_char_t data[15] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00 }; - - IFX_TAPI_RING_CADENCE_t ringCadence; - memset(&ringCadence, 0, sizeof(IFX_TAPI_RING_CADENCE_t)); - memcpy(&ringCadence.data, data, sizeof(data)); - ringCadence.nr = sizeof(data) * 8; - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_RING_CADENCE_HR_SET, &ringCadence)) { - ast_log(LOG_ERROR, "IFX_TAPI_RING_CADENCE_HR_SET failed\n"); - return AST_MODULE_LOAD_FAILURE; - } - - /* perform mapping */ - memset(&map_data, 0x0, sizeof(IFX_TAPI_MAP_DATA_t)); - map_data.nDstCh = c; - map_data.nChType = IFX_TAPI_MAP_TYPE_PHONE; - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_MAP_DATA_ADD, &map_data)) { - ast_log(LOG_ERROR, "IFX_TAPI_MAP_DATA_ADD %d failed\n", c); - return AST_MODULE_LOAD_FAILURE; - } - - /* set line feed */ - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_LINE_FEED_SET, IFX_TAPI_LINE_FEED_STANDBY)) { - ast_log(LOG_ERROR, "IFX_TAPI_LINE_FEED_SET %d failed\n", c); - return AST_MODULE_LOAD_FAILURE; - } - - /* Configure encoder */ - memset(&enc_cfg, 0x0, sizeof(IFX_TAPI_ENC_CFG_t)); - enc_cfg.nFrameLen = IFX_TAPI_COD_LENGTH_20; - enc_cfg.nEncType = IFX_TAPI_COD_TYPE_MLAW; - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_ENC_CFG_SET, &enc_cfg)) { - ast_log(LOG_ERROR, "IFX_TAPI_ENC_CFG_SET %d failed\n", c); - return AST_MODULE_LOAD_FAILURE; - } - - /* set volume */ - memset(&line_vol, 0, sizeof(line_vol)); - line_vol.nGainRx = rxgain; - line_vol.nGainTx = txgain; - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_PHONE_VOLUME_SET, &line_vol)) { - ast_log(LOG_ERROR, "IFX_TAPI_PHONE_VOLUME_SET %d failed\n", c); - return AST_MODULE_LOAD_FAILURE; - } - - /* Configure line echo canceller */ - memset(&wlec_cfg, 0, sizeof(wlec_cfg)); - wlec_cfg.nType = wlec_type; - wlec_cfg.bNlp = wlec_nlp; - wlec_cfg.nNBFEwindow = wlec_nbfe; - wlec_cfg.nNBNEwindow = wlec_nbne; - wlec_cfg.nWBNEwindow = wlec_wbne; - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_WLEC_PHONE_CFG_SET, &wlec_cfg)) { - ast_log(LOG_ERROR, "IFX_TAPI_WLEC_PHONE_CFG_SET %d failed\n", c); - return AST_MODULE_LOAD_FAILURE; - } - - /* Configure jitter buffer */ - memset(&jb_cfg, 0, sizeof(jb_cfg)); - jb_cfg.nJbType = jb_type; - jb_cfg.nPckAdpt = jb_pckadpt; - jb_cfg.nLocalAdpt = jb_localadpt; - jb_cfg.nScaling = jb_scaling; - jb_cfg.nInitialSize = jb_initialsize; - jb_cfg.nMinSize = jb_minsize; - jb_cfg.nMaxSize = jb_maxsize; - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_JB_CFG_SET, &jb_cfg)) { - ast_log(LOG_ERROR, "IFX_TAPI_JB_CFG_SET %d failed\n", c); - return AST_MODULE_LOAD_FAILURE; - } - - /* Configure Caller ID type */ - memset(&cid_cfg, 0, sizeof(cid_cfg)); - cid_cfg.nStandard = cid_type; - - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_CID_CFG_SET, &cid_cfg)) { - ast_log(LOG_ERROR, "IIFX_TAPI_CID_CFG_SET %d failed\n", c); - return AST_MODULE_LOAD_FAILURE; - } - - /* Configure voice activity detection */ - if (ioctl(dev_ctx.ch_fd[c], IFX_TAPI_ENC_VAD_CFG_SET, vad_type)) { - ast_log(LOG_ERROR, "IFX_TAPI_ENC_VAD_CFG_SET %d failed\n", c); - return AST_MODULE_LOAD_FAILURE; - } - - /* Setup TAPI <-> Asterisk codec type mapping */ - if (lantiq_setup_rtp(c)) { - return AST_MODULE_LOAD_FAILURE; - } - - /* Set initial hook status */ - iflist[c].channel_state = lantiq_get_hookstatus(c); - - if (iflist[c].channel_state == UNKNOWN) { - return AST_MODULE_LOAD_FAILURE; - } - } - - /* make sure our device will be closed properly */ - ast_register_atexit(lantiq_cleanup); - - restart_monitor(); - return AST_MODULE_LOAD_SUCCESS; -} - -AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Lantiq TAPI Telephony API Support"); diff --git a/net/asterisk-1.8.x/src-lantiq/configs/lantiq.conf.sample b/net/asterisk-1.8.x/src-lantiq/configs/lantiq.conf.sample deleted file mode 100644 index 16ba174..0000000 --- a/net/asterisk-1.8.x/src-lantiq/configs/lantiq.conf.sample +++ /dev/null @@ -1,138 +0,0 @@ -; -; TAPI Telephony Interface -; -; Configuration file - -[interfaces] -; -; Number of FXS ports (default: 2) -channels = 2 -; -; Set tapi firmware file path -;firmwarefilename = /lib/firmware/danube_firmware.bin -; -; Set tapi bbd file path -;bbdfilename = /lib/firmware/danube_bbd_fxs.bin -; -; Set vmmc device path -;basepath = /dev/vmmc -; -[general] -; -; Gain setting for the receive and transmit path. -; The value is given in dB within the range (-24dB to +12dB), in 1 dB steps. -; -;rxgain = 1 -;txgain = 1 -; -; -; -; Line echo cancller valid types: -; -; off LEC and echo suppressor turned off. -; nlec LEC using fixed window; no echo suppressor. -; wlec LEC using fixed and moving window; no echo suppressor. -; nees LEC using fixed window and echo suppressor. -; nfees LEC using fixed and moving window and echo suppressor. -; es Echo suppressor -; -;echocancel = off -; -; If nlec or wlec is selected than size of the fixed window in narrowband (8 kHz) sampling mode -; can be defined with: -; A value of 0 defaults to: 16 ms if type is nlec or 8 ms if type is wlec: -; -;echocancelfixedwindowsize = 0 -; -; If wlec is selected than size of the moving window in narrowband (8 kHz) sampling mode -; can be defined with: -; A value of 0 defaults to 8 ms. -; -;echocancelnfemovingwindowsize = 0 -; -; If wlec is selected than size of the moving window in wideband (16 kHz) sampling mode -; can be defined with: -; A value of 0 defaults to 8 ms. -; -;echocancelwidefixedwindowsize = 0 -; -; Activate or deactivate line echo cancller NLP (Non Linear Processor) if the LEC is active, -; valid is on or off: -; -;echocancelnlp = off -; -; -; -; Jitter buffer valid types: -; -; fixed Fixed jitter buffer. -; adaptive Adaptive jitter buffer. -; -;jitterbuffertype = fixed -; -; Jitter buffer packet adaptation valid types: -; -; voice Jitter buffer optimized for voice. -; data Jitter buffer optimized for data. -; datanorep Jitter buffer optimized for data but without doing packet repetition. -; -;jitterbufferpackettype = voice -; -; Following jitter buffer values can only be used with jitter buffer adaptive type: -; Turns on or off jitter buffer adaptation: -; -;jitterbufferadaptation = off -; -; Scaling factor multiplied by 16; in adaptive jitter buffer mode, the target average playout delay is -; equal to the estimated jitter multiplied by the scaling factor. The default value for the scaling factor -; is about 1.4 (scaling=22), meaning that the target average playout delay is equal to the estimated -; jitter. If less packets should be dropped because of jitter, the scaling factor has to be increased. An -; increase in the scaling factor will eventually lead to an increased playout delay. -; The supported range is 1 to 16 (16 up to 256). -; -;jitterbufferscalling = 1 -; -; Initial size of the jitter buffer in time stamps of 125 us: -; -;jitterbufferinitialsize = 125 -; -; Minimum size of the jitter buffer in time stamps of 125 us -; -;jitterbufferminsize = 125 -; -; Maximum size of the jitter buffer in time stamps of 125 us -; -;jitterbuffermaxsize = 125 -; -; -; -; Caller id valid standards: -; -; telecordia Bellcore/Telcordia GR-30-CORE; use Bell202 FSK coding of CID information. (default) -; etsifsk ETSI 300-659-1/2/3 V1.3.1; use V.23 FSK coding to transmit CID information. -; etsidtmf ETSI 300-659-1/2/3 V1.3.1; use DTMF transmission of CID information. -; sin SIN 227 Issue 3.4; use V.23 FSK coding of CID information. -; ntt NTT standard: TELEPHONE SERVICE INTERFACES, edition 5; use a modified V.23 FSK coding of -; CID information. -; kpndtmf KPN; use DTMF transmission of CID information. -; kpndtmffsk KPN; use DTMF and FSK transmission of CID information. -; -;calleridtype = telecordia -; -; -; -; Voice activity detection: -; -; on Voice activity detection on; in this case also comfort noise and spectral -; information (nicer noise) is switched on. -; g711 Voice activity detection on with comfort noise generation, -; but without spectral information. -; cng Voice activity detection on with comfort noise generation, but without silence compression -; sc Voice activity detection on with silence compression, -; but without comfort noise generation. -; -;voiceactivitydetection = on -; -; -; -; -- 2.30.2