Fix available() for SS7, MFC/R2, and pseudo channels.
authorRichard Mudgett <rmudgett@digium.com>
Thu, 10 Sep 2009 00:35:30 +0000 (00:35 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Thu, 10 Sep 2009 00:35:30 +0000 (00:35 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@217560 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_dahdi.c

index 53ddf2a..f5217ea 100644 (file)
@@ -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;
 }