]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Backport support for Zaptel/DAHDI channel-level alarms from trunk/1.6, because not...
authorKevin P. Fleming <kpfleming@digium.com>
Wed, 20 Aug 2008 19:35:59 +0000 (19:35 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Wed, 20 Aug 2008 19:35:59 +0000 (19:35 +0000)
(closes issue #12160)
Reported by: tzafrir
Patches:
      asterisk-chanalarms_14.patch uploaded by tzafrir (license 46)
Tested by: tzafrir

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@139145 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_dahdi.c
configure
configure.ac
include/asterisk/autoconfig.h.in

index 07b6e9ef902f07fcc074a0dd91f3dbf9cf6afce3..125a971e1907556a445ab8bf96d1fe003c4b279d 100644 (file)
@@ -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)
index d9bf7ac8fa18ad413cda9c840b059d2495d99c81..d1552c2b45bec7cde0cfe64f41aeab76a21d1894 100755 (executable)
--- 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
index e7f91a3d981475472a5a8686660706dffe5c4e3d..6bc07331b536b3863eb0f08d70aeec47415a9b76 100644 (file)
@@ -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([***])
index d662bc79f6959ef95f756f9414f081ccda9c514c..4b41b921f07c85ab38f079a23573c5fbd0a151c2 100644 (file)
 /* 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