diff options
-rw-r--r-- | channels/chan_dahdi.c | 25 | ||||
-rwxr-xr-x | configure | 114 | ||||
-rw-r--r-- | configure.ac | 9 | ||||
-rw-r--r-- | include/asterisk/autoconfig.h.in | 3 |
4 files changed, 147 insertions, 4 deletions
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index 07b6e9ef9..125a971e1 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -3666,14 +3666,33 @@ static int get_alarms(struct dahdi_pvt *p) { int res; struct dahdi_spaninfo zi; +#if defined(HAVE_DAHDI) || defined(HAVE_ZAPTEL_CHANALARMS) + /* + * The conditional compilation is needed only in asterisk-1.4 for + * backward compatibility with old zaptel drivers that don't have + * a DAHDI_PARAMS.chan_alarms field. + */ + struct dahdi_params params; +#endif + memset(&zi, 0, sizeof(zi)); zi.spanno = p->span; - res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SPANSTAT, &zi); - if (res < 0) { + + /* First check for span alarms */ + if((res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SPANSTAT, &zi)) < 0) { ast_log(LOG_WARNING, "Unable to determine alarm on channel %d: %s\n", p->channel, strerror(errno)); return 0; } - return zi.alarms; + if (zi.alarms != DAHDI_ALARM_NONE) + return zi.alarms; +#if defined(HAVE_DAHDI) || defined(HAVE_ZAPTEL_CHANALARMS) + /* No alarms on the span. Check for channel alarms. */ + if ((res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_GET_PARAMS, ¶ms)) >= 0) + return params.chan_alarms; + /* ioctl failed */ + ast_log(LOG_WARNING, "Unable to determine alarm on channel %d\n", p->channel); +#endif + return DAHDI_ALARM_NONE; } static void dahdi_handle_dtmfup(struct ast_channel *ast, int index, struct ast_frame **dest) @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac Revision: 136999 . +# From configure.ac Revision: 137677 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for asterisk 1.4. # @@ -30475,6 +30475,118 @@ cat >>confdefs.h <<\_ACEOF #define HAVE_ZAPTEL 1 _ACEOF + saved_cppflags="${CPPFLAGS}" + CPPFLAGS="${CPPFLAGS} ${ZAPTEL_INCLUDE}" + { echo "$as_me:$LINENO: checking for ZT_PARAMS.chan_alarms" >&5 +echo $ECHO_N "checking for ZT_PARAMS.chan_alarms... $ECHO_C" >&6; } +if test "${ac_cv_member_ZT_PARAMS_chan_alarms+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <zaptel/zaptel.h> + +int +main () +{ +static ZT_PARAMS ac_aggr; +if (ac_aggr.chan_alarms) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_member_ZT_PARAMS_chan_alarms=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <zaptel/zaptel.h> + +int +main () +{ +static ZT_PARAMS ac_aggr; +if (sizeof ac_aggr.chan_alarms) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_member_ZT_PARAMS_chan_alarms=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_member_ZT_PARAMS_chan_alarms=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_member_ZT_PARAMS_chan_alarms" >&5 +echo "${ECHO_T}$ac_cv_member_ZT_PARAMS_chan_alarms" >&6; } + + CPPFLAGS="${saved_cppflags}" + if test "${ac_cv_member_ZT_PARAMS_chan_alarms}" = "yes"; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ZAPTEL_CHANALARMS 1 +_ACEOF + + else + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ZAPTEL_CHANALARMS 0 +_ACEOF + + fi elif test -n "${ZAPTEL_MANDATORY}"; then { echo "$as_me:$LINENO: ***" >&5 diff --git a/configure.ac b/configure.ac index e7f91a3d9..6bc07331b 100644 --- a/configure.ac +++ b/configure.ac @@ -1458,6 +1458,15 @@ if test "${USE_ZAPTEL}" != "no" && test "x${PBX_DAHDI}" != "x1"; then fi PBX_ZAPTEL=1 AC_DEFINE([HAVE_ZAPTEL], 1, [Define if your system has the Zaptel headers.]) + saved_cppflags="${CPPFLAGS}" + CPPFLAGS="${CPPFLAGS} ${ZAPTEL_INCLUDE}" + AC_CHECK_MEMBER([ZT_PARAMS.chan_alarms],,,[#include <zaptel/zaptel.h>]) + CPPFLAGS="${saved_cppflags}" + if test "${ac_cv_member_ZT_PARAMS_chan_alarms}" = "yes"; then + AC_DEFINE([HAVE_ZAPTEL_CHANALARMS], 1, [Define if your Zaptel drivers have chan_alarms.]) + else + AC_DEFINE([HAVE_ZAPTEL_CHANALARMS], 0, [Define if your Zaptel drivers have chan_alarms.]) + fi elif test -n "${ZAPTEL_MANDATORY}"; then AC_MSG_NOTICE([***]) diff --git a/include/asterisk/autoconfig.h.in b/include/asterisk/autoconfig.h.in index d662bc79f..4b41b921f 100644 --- a/include/asterisk/autoconfig.h.in +++ b/include/asterisk/autoconfig.h.in @@ -546,6 +546,9 @@ /* Define if your system has the Zaptel headers. */ #undef HAVE_ZAPTEL +/* Define if your Zaptel drivers have chan_alarms. */ +#undef HAVE_ZAPTEL_CHANALARMS + /* Define to indicate the ${ZLIB_DESCRIP} library */ #undef HAVE_ZLIB |