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: https://origsvn.digium.com/svn/asterisk/branches/1.4@139145 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Kevin P. Fleming
2008-08-20 19:35:59 +00:00
parent 811faa8612
commit e2fc623d88
4 changed files with 147 additions and 4 deletions

View File

@@ -3666,14 +3666,33 @@ static int get_alarms(struct dahdi_pvt *p)
{ {
int res; int res;
struct dahdi_spaninfo zi; 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)); memset(&zi, 0, sizeof(zi));
zi.spanno = p->span; 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)); ast_log(LOG_WARNING, "Unable to determine alarm on channel %d: %s\n", p->channel, strerror(errno));
return 0; return 0;
} }
if (zi.alarms != DAHDI_ALARM_NONE)
return zi.alarms; 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) static void dahdi_handle_dtmfup(struct ast_channel *ast, int index, struct ast_frame **dest)

114
configure vendored
View File

@@ -1,5 +1,5 @@
#! /bin/sh #! /bin/sh
# From configure.ac Revision: 136999 . # From configure.ac Revision: 137677 .
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61 for asterisk 1.4. # Generated by GNU Autoconf 2.61 for asterisk 1.4.
# #
@@ -30475,6 +30475,118 @@ cat >>confdefs.h <<\_ACEOF
#define HAVE_ZAPTEL 1 #define HAVE_ZAPTEL 1
_ACEOF _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}"; elif test -n "${ZAPTEL_MANDATORY}";
then then
{ echo "$as_me:$LINENO: ***" >&5 { echo "$as_me:$LINENO: ***" >&5

View File

@@ -1458,6 +1458,15 @@ if test "${USE_ZAPTEL}" != "no" && test "x${PBX_DAHDI}" != "x1"; then
fi fi
PBX_ZAPTEL=1 PBX_ZAPTEL=1
AC_DEFINE([HAVE_ZAPTEL], 1, [Define if your system has the Zaptel headers.]) 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}"; elif test -n "${ZAPTEL_MANDATORY}";
then then
AC_MSG_NOTICE([***]) AC_MSG_NOTICE([***])

View File

@@ -546,6 +546,9 @@
/* Define if your system has the Zaptel headers. */ /* Define if your system has the Zaptel headers. */
#undef HAVE_ZAPTEL #undef HAVE_ZAPTEL
/* Define if your Zaptel drivers have chan_alarms. */
#undef HAVE_ZAPTEL_CHANALARMS
/* Define to indicate the ${ZLIB_DESCRIP} library */ /* Define to indicate the ${ZLIB_DESCRIP} library */
#undef HAVE_ZLIB #undef HAVE_ZLIB