correct logic for group-match CONGESTION checking
authorKevin P. Fleming <kpfleming@digium.com>
Wed, 9 Nov 2005 01:42:38 +0000 (01:42 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Wed, 9 Nov 2005 01:42:38 +0000 (01:42 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7038 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_zap.c

index e4b64cc..ca3936a 100755 (executable)
@@ -7240,6 +7240,7 @@ static inline int available(struct zt_pvt *p, int channelmatch, int groupmatch,
 {
        int res;
        ZT_PARAMS par;
+
        /* First, check group matching */
        if (groupmatch) {
                if ((p->group & groupmatch) != groupmatch)
@@ -7247,7 +7248,7 @@ static inline int available(struct zt_pvt *p, int channelmatch, int groupmatch,
                *groupmatched = 1;
        }
        /* Check to see if we have a channel match */
-       if (channelmatch) {
+       if (channelmatch != -1) {
                if (p->channel != channelmatch)
                        return 0;
                *channelmatched = 1;
@@ -7336,7 +7337,7 @@ static inline int available(struct zt_pvt *p, int channelmatch, int groupmatch,
        }
        
        if ((p->owner->_state != AST_STATE_UP) &&
-               ((p->owner->_state != AST_STATE_RINGING) || p->outgoing)) {
+           ((p->owner->_state != AST_STATE_RINGING) || p->outgoing)) {
                /* If the current call is not up, then don't allow the call */
                return 0;
        }
@@ -7628,11 +7629,15 @@ next:
        }
        ast_mutex_unlock(lock);
        restart_monitor();
-       if (channelmatched) {
-               if (callwait || (!tmp && busy))
-                       *cause = AST_CAUSE_BUSY;
-       } else if (groupmatched) {
-               *cause = AST_CAUSE_CONGESTION;
+       if (callwait)
+               *cause = AST_CAUSE_BUSY;
+       else if (!tmp) {
+               if (channelmatched) {
+                       if (busy)
+                               *cause = AST_CAUSE_BUSY;
+               } else if (groupmatched) {
+                       *cause = AST_CAUSE_CONGESTION;
+               }
        }
                
        return tmp;