From b4afeaa930370569f4cd8302c6e57de126bc5b2c Mon Sep 17 00:00:00 2001 From: paulc Date: Fri, 2 Oct 2009 13:13:45 +0000 Subject: [PATCH] Accept some spandsp versions older than 0.0.6, provide wrappers around incompatible member access methods. git-svn-id: http://yate.null.ro/svn/yate/trunk@2861 acf43c95-373e-0410-b603-e72c3f656dc1 --- configure.in | 31 +++++++++++++++++++++++++++++-- modules/faxchan.cpp | 15 ++++++++++++--- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/configure.in b/configure.in index 43ceedf2..5dea9972 100644 --- a/configure.in +++ b/configure.in @@ -695,12 +695,39 @@ t38_gateway_init(&t38_g_state,NULL,NULL); ], HAVE_SPANDSP="yes" ) -CFLAGS="$SAVE_CFLAGS" -AC_LANG_RESTORE if [[ "x$HAVE_SPANDSP" = "xyes" ]]; then SPANDSP_INC="-I$ac_cv_use_spandsp" +else +AC_TRY_COMPILE([ +#define __STDC_LIMIT_MACROS +#define SPANDSP_EXPOSE_INTERNAL_STRUCTURES +#include +#include +#include +#include +#include +],[ +#define fax_get_t30_state(x) (&(x)->t30_state) +fax_state_t fax_state; +t38_terminal_state_t t38_t_state; +t38_gateway_state_t t38_g_state; +fax_init(&fax_state,TRUE); +t30_set_ecm_capability(fax_get_t30_state(&fax_state),1); +t30_set_supported_compressions(fax_get_t30_state(&fax_state),T30_SUPPORT_T6_COMPRESSION); +t30_set_tx_file(fax_get_t30_state(&fax_state),"abc",-1,-1); +fax_set_transmit_on_idle(&fax_state,1); +t38_terminal_init(&t38_t_state,TRUE,NULL,NULL); +t38_gateway_init(&t38_g_state,NULL,NULL); +], +HAVE_SPANDSP="yes" +) +if [[ "x$HAVE_SPANDSP" = "xyes" ]]; then +SPANDSP_INC="-I$ac_cv_use_spandsp -DSPANDSP_PRE006" fi fi +CFLAGS="$SAVE_CFLAGS" +AC_LANG_RESTORE +fi AC_MSG_RESULT([$HAVE_SPANDSP]) fi AC_SUBST(HAVE_SPANDSP) diff --git a/modules/faxchan.cpp b/modules/faxchan.cpp index 2eca78f7..527d446b 100644 --- a/modules/faxchan.cpp +++ b/modules/faxchan.cpp @@ -47,6 +47,15 @@ #include #include +#ifdef SPANDSP_PRE006 +#define fax_get_t30_state(x) (&(x)->t30_state) +#define t38_get_t38_state(x) (&(x)->t38) +#define t38_get_t30_state(x) (&(x)->t30_state) +#else +#define t38_get_t38_state(x) (&(x)->t38_fe.t38) +#define t38_get_t30_state(x) (&(x)->t30) +#endif + using namespace TelEngine; namespace { // anonymous @@ -473,8 +482,8 @@ T38Terminal::T38Terminal(const char *file, const char *ident, bool sender, bool (sender ? "transmit" : "receive"), file,ident,this); t38_terminal_init(&m_t38,iscaller,txHandler,this); - t38_set_t38_version(&m_t38.t38_fe.t38,1); - init(&m_t38.t30,ident,file,sender); + t38_set_t38_version(t38_get_t38_state(&m_t38),1); + init(t38_get_t30_state(&m_t38),ident,file,sender); } T38Terminal::~T38Terminal() @@ -502,7 +511,7 @@ int T38Terminal::txHandler(t38_core_state_t* t38s, void* userData, void T38Terminal::rxData(const DataBlock& data, unsigned long tStamp) { Debug(this,DebugStub,"Please implement T38Terminal::rxData()"); - t38_core_rx_ifp_packet(&m_t38.t38_fe.t38,(uint8_t*)data.data(),data.length(),tStamp); + t38_core_rx_ifp_packet(t38_get_t38_state(&m_t38),(uint8_t*)data.data(),data.length(),tStamp); } int T38Terminal::txData(const void* buf, int len, int seq, int count)