aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2008-08-20 19:35:59 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2008-08-20 19:35:59 +0000
commit892056dbc69137f78a8036fcda23ec6fcf1808b2 (patch)
tree884204c3d034ed74e2e06101cb1af869b925c391
parent1643fa63cf953401a1d7dc6f5117e6cddbe6724a (diff)
Backport support for Zaptel/DAHDI channel-level alarms from trunk/1.6, because not doing so just makes it difficult for people with channels that are in alarm when Asterisk starts up to get them going once the alarm is cleared
(closes issue #12160) Reported by: tzafrir Patches: asterisk-chanalarms_14.patch uploaded by tzafrir (license 46) Tested by: tzafrir git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@139145 f38db490-d61c-443f-a65b-d21fe96a405b
-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