[asterisk-commits] dhubbard: branch group/issue3450 r132276 - /team/group/issue3450/channels/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Jul 18 21:04:25 CDT 2008


Author: dhubbard
Date: Fri Jul 18 21:04:25 2008
New Revision: 132276

URL: http://svn.digium.com/view/asterisk?view=rev&rev=132276
Log:
ATT TR 41459, section 3.13.5 Maintenance Procedures states that a disabled b-channel must return cause 44, requested channel not available

Modified:
    team/group/issue3450/channels/chan_dahdi.c

Modified: team/group/issue3450/channels/chan_dahdi.c
URL: http://svn.digium.com/view/asterisk/team/group/issue3450/channels/chan_dahdi.c?view=diff&rev=132276&r1=132275&r2=132276
==============================================================================
--- team/group/issue3450/channels/chan_dahdi.c (original)
+++ team/group/issue3450/channels/chan_dahdi.c Fri Jul 18 21:04:25 2008
@@ -586,7 +586,7 @@
 	unsigned int progress:1;
 	unsigned int resetting:1;
 	unsigned int setup_ack:1;
-	unsigned int changestatus;	/* for NFAS MAINTenance service message handling */
+	unsigned int changestatus;
 #endif
 	unsigned int use_smdi:1;		/* Whether to use SMDI on this channel */
 	struct ast_smdi_interface *smdi_iface;	/* The serial port to listen for SMDI data on */
@@ -8778,7 +8778,7 @@
 	return tmp;
 }
 
-static inline int available(struct dahdi_pvt *p, int channelmatch, ast_group_t groupmatch, int *busy, int *channelmatched, int *groupmatched)
+static inline int available(struct dahdi_pvt *p, int channelmatch, ast_group_t groupmatch, int *reason, int *channelmatched, int *groupmatched)
 {
 	int res;
 	DAHDI_PARAMS par;
@@ -8796,9 +8796,9 @@
 		*channelmatched = 1;
 	}
 	/* We're at least busy at this point */
-	if (busy) {
+	if (reason) {
 		if ((p->sig == SIG_FXOKS) || (p->sig == SIG_FXOLS) || (p->sig == SIG_FXOGS))
-			*busy = 1;
+			*reason = AST_CAUSE_BUSY;
 	}
 	/* If do not disturb, definitely not */
 	if (p->dnd)
@@ -8810,18 +8810,16 @@
 	if (p->locallyblocked || p->remotelyblocked)
 		return 0;
 
-	/* If channel is not in service, definitely not */
-	if (p->changestatus > 0)
-		return 0;
-
 	/* If no owner definitely available */
 	if (!p->owner) {
 #ifdef HAVE_PRI
 		/* Trust PRI */
 		if (p->pri) {
-			if (p->resetting || p->call)
+			if ((p->resetting || p->call) || (p->changestatus > 0)) {
+				if (p->changestatus) 
+					*reason = AST_CAUSE_REQUESTED_CHAN_UNAVAIL;
 				return 0;
-			else
+			} else
 				return 1;
 		}
 #endif
@@ -8969,7 +8967,7 @@
 	int channelmatch = -1;
 	int roundrobin = 0;
 	int callwait = 0;
-	int busy = 0;
+	int unavailreason = 0;
 	struct dahdi_pvt *p;
 	struct ast_channel *tmp = NULL;
 	char *dest=NULL;
@@ -9079,7 +9077,7 @@
 		ast_verbose("name = %s, %d, %d, %d\n",p->owner ? p->owner->name : "<none>", p->channel, channelmatch, groupmatch);
 #endif
 
-		if (p && available(p, channelmatch, groupmatch, &busy, &channelmatched, &groupmatched)) {
+		if (p && available(p, channelmatch, groupmatch, &unavailreason, &channelmatched, &groupmatched)) {
 			ast_debug(1, "Using channel %d\n", p->channel);
 			if (p->inalarm) 
 				goto next;
@@ -9174,10 +9172,10 @@
 		*cause = AST_CAUSE_BUSY;
 	else if (!tmp) {
 		if (channelmatched) {
-			if (busy)
+			if (unavailreason)
 				*cause = AST_CAUSE_BUSY;
 		} else if (groupmatched) {
-			*cause = AST_CAUSE_CONGESTION;
+			*cause = (unavailreason) ? unavailreason : AST_CAUSE_CONGESTION;
 		}
 	}
 		




More information about the asterisk-commits mailing list