aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--channels/chan_dahdi.c25
-rwxr-xr-xconfigure114
-rw-r--r--configure.ac9
-rw-r--r--include/asterisk/autoconfig.h.in3
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, &params)) >= 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)
diff --git a/configure b/configure
index d9bf7ac8f..d1552c2b4 100755
--- a/configure
+++ b/configure
@@ -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