From 98d156c5dd2238d13c88b4a92c3d909c6bcbbe21 Mon Sep 17 00:00:00 2001 From: Richard Mudgett <rmudgett@digium.com> Date: Thu, 10 Sep 2009 00:35:30 +0000 Subject: [PATCH] Fix available() for SS7, MFC/R2, and pseudo channels. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@217560 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_dahdi.c | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index 53ddf2a1be..f5217ea533 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -946,12 +946,12 @@ static struct dahdi_pvt { unsigned int inservice:1; /*! * \brief TRUE if the channel is locally blocked. - * \note Applies to SS7 channels. + * \note Applies to SS7 and MFCR2 channels. */ unsigned int locallyblocked:1; /*! * \brief TRUE if the channel is remotely blocked. - * \note Applies to SS7 channels. + * \note Applies to SS7 and MFCR2 channels. */ unsigned int remotelyblocked:1; #if defined(HAVE_PRI) @@ -11400,24 +11400,34 @@ static inline int available(struct dahdi_pvt *p, int channelmatch, ast_group_t g } #endif -#ifdef HAVE_SS7 - /* Trust SS7 */ - if (p->ss7) { - if (p->ss7call) - return 0; - else - return 1; + if (p->locallyblocked || p->remotelyblocked) { + return 0; } + + /* If no owner definitely available */ + if (!p->owner) { +#ifdef HAVE_SS7 + /* Trust SS7 */ + if (p->ss7) { + if (p->ss7call) { + return 0; + } else { + return 1; + } + } #endif #ifdef HAVE_OPENR2 - /* Trust MFC/R2 */ - if (p->mfcr2) { - if (p->mfcr2call) - return 0; - else - return 1; - } + /* Trust MFC/R2 */ + if (p->mfcr2) { + if (p->mfcr2call) { + return 0; + } else { + return 1; + } + } #endif + return 1; + } return 0; } -- GitLab