[asterisk-commits] trunk r34193 - /trunk/apps/app_queue.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Wed Jun 14 16:20:09 MST 2006


Author: kpfleming
Date: Wed Jun 14 18:20:08 2006
New Revision: 34193

URL: http://svn.digium.com/view/asterisk?rev=34193&view=rev
Log:
various coding style cleanup and minor fixes

Modified:
    trunk/apps/app_queue.c

Modified: trunk/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_queue.c?rev=34193&r1=34192&r2=34193&view=diff
==============================================================================
--- trunk/apps/app_queue.c (original)
+++ trunk/apps/app_queue.c Wed Jun 14 18:20:08 2006
@@ -420,20 +420,24 @@
 static char *int2strat(int strategy)
 {
 	int x;
-	for (x=0;x<sizeof(strategies) / sizeof(strategies[0]);x++) {
+
+	for (x = 0; x < sizeof(strategies) / sizeof(strategies[0]); x++) {
 		if (strategy == strategies[x].strategy)
 			return strategies[x].name;
 	}
+
 	return "<unknown>";
 }
 
 static int strat2int(const char *strategy)
 {
 	int x;
-	for (x=0;x<sizeof(strategies) / sizeof(strategies[0]);x++) {
+
+	for (x = 0; x < sizeof(strategies) / sizeof(strategies[0]); x++) {
 		if (!strcasecmp(strategy, strategies[x].name))
 			return strategies[x].strategy;
 	}
+
 	return -1;
 }
 
@@ -587,8 +591,6 @@
 {
 	struct member *cur;
 	
-	/* Add a new member */
-
 	if ((cur = ast_calloc(1, sizeof(*cur)))) {
 		cur->penalty = penalty;
 		cur->paused = paused;
@@ -615,6 +617,7 @@
 static void init_queue(struct ast_call_queue *q)
 {
 	int i;
+
 	q->dead = 0;
 	q->retry = DEFAULT_RETRY;
 	q->timeout = -1;
@@ -642,7 +645,7 @@
 	ast_copy_string(q->sound_lessthan, "queue-less-than", sizeof(q->sound_lessthan));
 	ast_copy_string(q->sound_reporthold, "queue-reporthold", sizeof(q->sound_reporthold));
 	ast_copy_string(q->sound_periodicannounce[0], "queue-periodic-announce", sizeof(q->sound_periodicannounce[0]));
-	for (i=1;i<MAX_PERIODIC_ANNOUNCEMENTS;i++) {
+	for (i = 1; i < MAX_PERIODIC_ANNOUNCEMENTS; i++) {
 		q->sound_periodicannounce[i][0]='\0';
 	}
 }
@@ -749,6 +752,7 @@
 	int i = 0;
 	char *c, *lastc;
 	char buff[80];
+
 	if (!strcasecmp(param, "music") || !strcasecmp(param, "musiconhold")) {
 		ast_copy_string(q->moh, val, sizeof(q->moh));
 	} else if (!strcasecmp(param, "announce")) {
@@ -898,24 +902,20 @@
 	struct member *m, *prev_m;
 	int penalty = 0;
 
-	if(penalty_str) {
+	if (penalty_str) {
 		penalty = atoi(penalty_str);
-		if(penalty < 0)
+		if (penalty < 0)
 			penalty = 0;
 	}
 
 	/* Find the member, or the place to put a new one. */
-	prev_m = NULL;
-	m = q->members;
-	while (m && strcmp(m->interface, interface)) {
-		prev_m = m;
-		m = m->next;
-	}
+	for (m = q->members, prev_m = NULL;
+	     m && strcmp(m->interface, interface);
+	     prev_m = m, m = m->next);
 
 	/* Create a new one if not found, else update penalty */
 	if (!m) {
-		m = create_queue_member(interface, penalty, 0);
-		if (m) {
+		if ((m = create_queue_member(interface, penalty, 0))) {
 			m->dead = 0;
 			add_to_interfaces(interface);
 			if (prev_m) {
@@ -970,9 +970,8 @@
 
 	/* Find the queue in the in-core list (we will create a new one if not found). */
 	AST_LIST_TRAVERSE(&queues, q, list) {
-		if (!strcasecmp(q->name, queuename)) {
+		if (!strcasecmp(q->name, queuename))
 			break;
-		}
 	}
 
 	/* Static queues override realtime. */
@@ -1024,38 +1023,32 @@
 	}
 	init_queue(q);		/* Ensure defaults for all parameters not set explicitly. */
 
-	v = queue_vars;
 	memset(tmpbuf, 0, sizeof(tmpbuf));
-	while(v) {
+	for (v = queue_vars; v; v = v->next) {
 		/* Convert to dashes `-' from underscores `_' as the latter are more SQL friendly. */
-		if((tmp = strchr(v->name, '_')) != NULL) {
+		if ((tmp = strchr(v->name, '_'))) {
 			ast_copy_string(tmpbuf, v->name, sizeof(tmpbuf));
 			tmp_name = tmpbuf;
 			tmp = tmp_name;
-			while((tmp = strchr(tmp, '_')) != NULL)
+			while ((tmp = strchr(tmp, '_')))
 				*tmp++ = '-';
 		} else
 			tmp_name = v->name;
 		queue_set_param(q, tmp_name, v->value, -1, 0);
-		v = v->next;
 	}
 
 	if (q->strategy == QUEUE_STRATEGY_ROUNDROBIN)
 		rr_dep_warning();
 
 	/* Temporarily set non-dynamic members dead so we can detect deleted ones. */
-	m = q->members;
-	while (m) {
+	for (m = q->members; m; m = m->next) {
 		if (!m->dynamic)
 			m->dead = 1;
-		m = m->next;
-	}
-
-	interface = ast_category_browse(member_config, NULL);
-	while (interface) {
+	}
+
+	interface = NULL;
+	while (ast_category_browse(member_config, interface))
 		rt_handle_member_record(q, interface, ast_variable_retrieve(member_config, interface, "penalty"));
-		interface = ast_category_browse(member_config, interface);
-	}
 
 	/* Delete all realtime members that have been deleted in DB. */
 	m = q->members;
@@ -1083,7 +1076,7 @@
 
 static struct ast_call_queue *load_realtime_queue(char *queuename)
 {
-	struct ast_variable *queue_vars = NULL;
+	struct ast_variable *queue_vars;
 	struct ast_config *member_config = NULL;
 	struct ast_call_queue *q;
 
@@ -1137,8 +1130,7 @@
 	int inserted = 0;
 	enum queue_member_status stat;
 
-	q = load_realtime_queue(queuename);
-	if (!q)
+	if (!(q = load_realtime_queue(queuename)))
 		return res;
 
 	AST_LIST_LOCK(&queues);
@@ -1159,7 +1151,7 @@
 		inserted = 0;
 		prev = NULL;
 		cur = q->head;
-		while(cur) {
+		while (cur) {
 			/* We have higher priority than the current user, enter
 			 * before him, after all the other users with priority
 			 * higher or equal to our priority. */
@@ -1179,7 +1171,6 @@
 		ast_copy_string(qe->context, q->context, sizeof(qe->context));
 		q->count++;
 		res = 0;
-		/* XXX missing CalledIDnum ? */
 		manager_event(EVENT_FLAG_CALL, "Join", 
 			      "Channel: %s\r\nCallerID: %s\r\nCallerIDName: %s\r\nQueue: %s\r\nPosition: %d\r\nCount: %d\r\nUniqueid: %s\r\n",
 			      qe->chan->name, 
@@ -1191,6 +1182,7 @@
 	}
 	ast_mutex_unlock(&q->lock);
 	AST_LIST_UNLOCK(&queues);
+
 	return res;
 }
 
@@ -1200,12 +1192,8 @@
 
 	ast_stopstream(chan);
 	res = ast_streamfile(chan, filename, chan->language);
-
 	if (!res)
 		res = ast_waitstream(chan, AST_DIGIT_ANY);
-	else
-		res = 0;
-
 	ast_stopstream(chan);
 
 	return res;
@@ -1239,6 +1227,7 @@
 		/* Return 1 on a successful goto */
 		return 1;
 	}
+
 	return 0;
 }
 
@@ -1249,11 +1238,11 @@
 
 	/* Check to see if this is ludicrous -- if we just announced position, don't do it again*/
 	time(&now);
-	if ( (now - qe->last_pos) < 15 )
+	if ((now - qe->last_pos) < 15)
 		return 0;
 
 	/* If either our position has changed, or we are over the freq timer, say position */
-	if ( (qe->last_pos_said == qe->pos) && ((now - qe->last_pos) < qe->parent->announcefrequency) )
+	if ((qe->last_pos_said == qe->pos) && ((now - qe->last_pos) < qe->parent->announcefrequency))
 		return 0;
 
 	ast_moh_stop(qe->chan);
@@ -1276,14 +1265,14 @@
 			goto playout;
 	}
 	/* Round hold time to nearest minute */
-	avgholdmins = abs(( (qe->parent->holdtime + 30) - (now - qe->start) ) / 60);
+	avgholdmins = abs(((qe->parent->holdtime + 30) - (now - qe->start)) / 60);
 
 	/* If they have specified a rounding then round the seconds as well */
-	if(qe->parent->roundingseconds) {
-		avgholdsecs = (abs(( (qe->parent->holdtime + 30) - (now - qe->start) )) - 60 * avgholdmins) / qe->parent->roundingseconds;
-		avgholdsecs*= qe->parent->roundingseconds;
+	if (qe->parent->roundingseconds) {
+		avgholdsecs = (abs(((qe->parent->holdtime + 30) - (now - qe->start))) - 60 * avgholdmins) / qe->parent->roundingseconds;
+		avgholdsecs *= qe->parent->roundingseconds;
 	} else {
-		avgholdsecs=0;
+		avgholdsecs = 0;
 	}
 
 	if (option_verbose > 2)
@@ -1297,17 +1286,17 @@
 		if (res && valid_exit(qe, res))
 			goto playout;
 
-		if (avgholdmins>0) {
+		if (avgholdmins > 0) {
 			if (avgholdmins < 2) {
 				res = play_file(qe->chan, qe->parent->sound_lessthan);
 				if (res && valid_exit(qe, res))
 					goto playout;
 
-				res = ast_say_number(qe->chan, 2, AST_DIGIT_ANY, qe->chan->language, (char *)NULL);
+				res = ast_say_number(qe->chan, 2, AST_DIGIT_ANY, qe->chan->language, NULL);
 				if (res && valid_exit(qe, res))
 					goto playout;
 			} else {
-				res = ast_say_number(qe->chan, avgholdmins, AST_DIGIT_ANY, qe->chan->language, (char*) NULL);
+				res = ast_say_number(qe->chan, avgholdmins, AST_DIGIT_ANY, qe->chan->language, NULL);
 				if (res && valid_exit(qe, res))
 					goto playout;
 			}
@@ -1317,7 +1306,7 @@
 				goto playout;
 		}
 		if (avgholdsecs>0) {
-			res = ast_say_number(qe->chan, avgholdsecs, AST_DIGIT_ANY, qe->chan->language, (char*) NULL);
+			res = ast_say_number(qe->chan, avgholdsecs, AST_DIGIT_ANY, qe->chan->language, NULL);
 			if (res && valid_exit(qe, res))
 				goto playout;
 
@@ -1373,14 +1362,12 @@
 	struct queue_ent *cur, *prev = NULL;
 	int pos = 0;
 
-	q = qe->parent;
-	if (!q)
+	if (!(q = qe->parent))
 		return;
 	ast_mutex_lock(&q->lock);
 
 	prev = NULL;
-	cur = q->head;
-	while(cur) {
+	for (cur = q->head; cur; cur = cur->next) {
 		if (cur == qe) {
 			q->count--;
 
@@ -1400,9 +1387,9 @@
 			cur->pos = ++pos;
 			prev = cur;
 		}
-		cur = cur->next;
 	}
 	ast_mutex_unlock(&q->lock);
+
 	if (q->dead && !q->count) {	
 		/* It's dead and nobody is in it, so kill it */
 		AST_LIST_LOCK(&queues);
@@ -1417,12 +1404,12 @@
 {
 	struct callattempt *oo;
 
-	while(outgoing) {
+	while (outgoing) {
 		/* Hangup any existing lines we have open */
 		if (outgoing->chan && (outgoing->chan != exception))
 			ast_hangup(outgoing->chan);
 		oo = outgoing;
-		outgoing=outgoing->q_next;
+		outgoing = outgoing->q_next;
 		free(oo);
 	}
 }
@@ -1435,22 +1422,22 @@
 		be sure it's still valid */
 	ast_mutex_lock(&q->lock);
 	for (cur = q->members; cur; cur = cur->next) {
-		if (member == cur) {
-			cur->status = status;
-			if (!q->maskmemberstatus) {
-				manager_event(EVENT_FLAG_AGENT, "QueueMemberStatus",
-					"Queue: %s\r\n"
-					"Location: %s\r\n"
-					"Membership: %s\r\n"
-					"Penalty: %d\r\n"
-					"CallsTaken: %d\r\n"
-					"LastCall: %d\r\n"
-					"Status: %d\r\n"
-					"Paused: %d\r\n",
-				q->name, cur->interface, cur->dynamic ? "dynamic" : "static",
-				cur->penalty, cur->calls, (int)cur->lastcall, cur->status, cur->paused);
-			}
-			break;
+		if (member != cur)
+			continue;
+
+		cur->status = status;
+		if (!q->maskmemberstatus) {
+			manager_event(EVENT_FLAG_AGENT, "QueueMemberStatus",
+				      "Queue: %s\r\n"
+				      "Location: %s\r\n"
+				      "Membership: %s\r\n"
+				      "Penalty: %d\r\n"
+				      "CallsTaken: %d\r\n"
+				      "LastCall: %d\r\n"
+				      "Status: %d\r\n"
+				      "Paused: %d\r\n",
+				      q->name, cur->interface, cur->dynamic ? "dynamic" : "static",
+				      cur->penalty, cur->calls, (int)cur->lastcall, cur->status, cur->paused);
 		}
 	}
 	ast_mutex_unlock(&q->lock);
@@ -1486,13 +1473,14 @@
 		ast_mutex_lock(&q->lock);
 		if (q->count && q->members) {
 			for (mem = q->members; mem; mem = mem->next) {
-				if (!strcmp(mem->interface, member->interface)) {
-					ast_log(LOG_DEBUG, "Found matching member %s in queue '%s'\n", mem->interface, q->name);
-					if (q->weight > rq->weight) {
-						ast_log(LOG_DEBUG, "Queue '%s' (weight %d, calls %d) is preferred over '%s' (weight %d, calls %d)\n", q->name, q->weight, q->count, rq->name, rq->weight, rq->count);
-						found = 1;
-						break;
-					}
+				if (strcmp(mem->interface, member->interface))
+					continue;
+
+				ast_log(LOG_DEBUG, "Found matching member %s in queue '%s'\n", mem->interface, q->name);
+				if (q->weight > rq->weight) {
+					ast_log(LOG_DEBUG, "Queue '%s' (weight %d, calls %d) is preferred over '%s' (weight %d, calls %d)\n", q->name, q->weight, q->count, rq->name, rq->weight, rq->count);
+					found = 1;
+					break;
 				}
 			}
 		}
@@ -1564,9 +1552,6 @@
 	/* Request the peer */
 	tmp->chan = ast_request(tech, qe->chan->nativeformats, location, &status);
 	if (!tmp->chan) {			/* If we can't, just go on to the next call */
-#if 0
-		ast_log(LOG_NOTICE, "Unable to create channel of type '%s' for Queue\n", cur->tech);
-#endif			
 		if (qe->chan->cdr)
 			ast_cdr_busy(qe->chan->cdr);
 		tmp->stillgoing = 0;
@@ -1596,8 +1581,7 @@
 	tmp->chan->adsicpe = qe->chan->adsicpe;
 
 	/* Place the call, but don't wait on the answer */
-	res = ast_call(tmp->chan, location, 0);
-	if (res) {
+	if ((res = ast_call(tmp->chan, location, 0))) {
 		/* Again, keep going even if there's an error */
 		if (option_debug)
 			ast_log(LOG_DEBUG, "ast call on peer returned %d\n", res);
@@ -1624,6 +1608,7 @@
 		if (option_verbose > 2)
 			ast_verbose(VERBOSE_PREFIX_3 "Called %s\n", tmp->interface);
 	}
+
 	return 1;
 }
 
@@ -1634,11 +1619,12 @@
 
 	for (cur = outgoing; cur; cur = cur->q_next) {
 		if (cur->stillgoing &&					/* Not already done */
-			!cur->chan &&					/* Isn't already going */
-			(!best || cur->metric < best->metric)) {	/* We haven't found one yet, or it's better */
-				best = cur;
-		}
-	}
+		    !cur->chan &&					/* Isn't already going */
+		    (!best || cur->metric < best->metric)) {		/* We haven't found one yet, or it's better */
+			best = cur;
+		}
+	}
+
 	return best;
 }
 
@@ -1672,6 +1658,7 @@
 		if (best->chan) /* break out with result = 1 */
 			ret = 1;
 	}
+
 	return ret;
 }
 
@@ -1695,6 +1682,7 @@
 		}
 	}
 	qe->parent->wrapped = 0;
+
 	return 0;
 }
 
@@ -1713,15 +1701,8 @@
 
 		/* Stop playback */
 		ast_stopstream(chan);
-	} else {
-		res = 0;
 	}
 	
-	/*if (res) {
-		ast_log(LOG_WARNING, "ast_streamfile failed on %s \n", chan->name);
-		res = 0;
-	}*/
-
 	return res;
 }
 
@@ -1782,7 +1763,6 @@
 /*! \brief RNA == Ring No Answer. Common code that is executed when we try a queue member and they don't answer. */
 static void rna(int rnatime, struct queue_ent *qe, char *membername)
 {
-
 	if (option_verbose > 2)
 		ast_verbose( VERBOSE_PREFIX_3 "Nobody picked up in %d ms\n", rnatime);
 	ast_queue_log(qe->parent->name, qe->chan->uniqueid, membername, "RINGNOANSWER", "%d", rnatime);
@@ -1818,7 +1798,7 @@
 	long starttime = 0;
 	long endtime = 0;	
 
-	starttime = (long)time(NULL);
+	starttime = (long) time(NULL);
 	
 	while(*to && !peer) {
 		int numlines, retry, pos = 1;
@@ -1863,9 +1843,10 @@
 			} else if (o->chan && (o->chan == winner)) {
 				ast_copy_string(on, o->member->interface, sizeof(on));
 				if (!ast_strlen_zero(o->chan->call_forward)) {
-					char tmpchan[256]="";
+					char tmpchan[256];
 					char *stuff;
 					char *tech;
+
 					ast_copy_string(tmpchan, o->chan->call_forward, sizeof(tmpchan));
 					if ((stuff = strchr(tmpchan, '/'))) {
 						*stuff++ = '\0';
@@ -1979,9 +1960,8 @@
 					}
 					ast_frfree(f);
 				} else {
-					endtime = (long)time(NULL);
-					endtime -= starttime;
-					rna(endtime*1000, qe, on);
+					endtime = (long) time(NULL) - starttime;
+					rna(endtime * 1000, qe, on);
 					do_hang(o);
 					if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
 						if (qe->parent->timeoutrestart)
@@ -1993,15 +1973,9 @@
 		}
 		if (winner == in) {
 			f = ast_read(in);
-#if 0
-			if (f && (f->frametype != AST_FRAME_VOICE))
-					printf("Frame type: %d, %d\n", f->frametype, f->subclass);
-			else if (!f || (f->frametype != AST_FRAME_VOICE))
-				printf("Hangup received on %s\n", in->name);
-#endif
 			if (!f || ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_HANGUP))) {
 				/* Got hung up */
-				*to=-1;
+				*to = -1;
 				if (f)
 					ast_frfree(f);
 				return NULL;
@@ -2009,15 +1983,15 @@
 			if ((f->frametype == AST_FRAME_DTMF) && caller_disconnect && (f->subclass == '*')) {
 				if (option_verbose > 3)
 					ast_verbose(VERBOSE_PREFIX_3 "User hit %c to disconnect call.\n", f->subclass);
-				*to=0;
+				*to = 0;
 				ast_frfree(f);
 				return NULL;
 			}
 			if ((f->frametype == AST_FRAME_DTMF) && (f->subclass != '*') && valid_exit(qe, f->subclass)) {
 				if (option_verbose > 3)
 					ast_verbose(VERBOSE_PREFIX_3 "User pressed digit: %c\n", f->subclass);
-				*to=0;
-				*digit=f->subclass;
+				*to = 0;
+				*digit = f->subclass;
 				ast_frfree(f);
 				return NULL;
 			}
@@ -2028,7 +2002,6 @@
 	}
 
 	return peer;
-	
 }
 
 static int is_our_turn(struct queue_ent *qe)
@@ -2054,28 +2027,26 @@
 		}	
 
 	} else {
-
 		/* This needs a lock. How many members are available to be served? */
-	
 		ast_mutex_lock(&qe->parent->lock);
 			
 		ch = qe->parent->head;
-		cur = qe->parent->members;
-	
-		while (cur) {
-			if (cur->status == 1) 
-				avl++;
-			cur = cur->next;
-		}
-
-		if (option_debug)
-			ast_log(LOG_DEBUG, "There are %d available members.\n", avl);
 	
 		if (qe->parent->strategy == QUEUE_STRATEGY_RINGALL) {
 			if (option_debug)
-				ast_log(LOG_DEBUG, "Even though there are %d available members, the strategy is ringall so only the head call is allowed in!\n", avl);
+				ast_log(LOG_DEBUG, "Even though there are %d available members, the strategy is ringall so only the head call is allowed in\n", avl);
 			avl = 1;
-		}
+		} else {
+			cur = qe->parent->members;
+			while (cur) {
+				if (cur->status == 1) 
+					avl++;
+				cur = cur->next;
+			}
+		}
+
+		if (option_debug)
+			ast_log(LOG_DEBUG, "There are %d available members.\n", avl);
 	
 		while ((idx < avl) && (ch) && (ch != qe)) {
 			idx++;
@@ -2149,6 +2120,7 @@
 		if ((res = ast_waitfordigit(qe->chan, RECHECK * 1000)))
 			break;
 	}
+
 	return res;
 }
 
@@ -2231,7 +2203,7 @@
 static int try_calling(struct queue_ent *qe, const char *options, char *announceoverride, const char *url, int *go_on, const char *agi)
 {
 	struct member *cur;
-	struct callattempt *outgoing=NULL; /* the queue we are building */
+	struct callattempt *outgoing = NULL; /* the list of calls we are building */
 	int to;
 	char oldexten[AST_MAX_EXTENSION]="";
 	char oldcontext[AST_MAX_CONTEXT]="";
@@ -2260,7 +2232,6 @@
 	char mixmonargs[1512];
 	struct ast_app *mixmonapp = NULL;
 	char *p;
-
 
 	memset(&bridge_config, 0, sizeof(bridge_config));
 	time(&now);
@@ -2308,8 +2279,9 @@
 	if (!ast_strlen_zero(announceoverride))
 		announce = announceoverride;
 
-	for (;cur; cur = cur->next) {
+	for (; cur; cur = cur->next) {
 		struct callattempt *tmp = ast_calloc(1, sizeof(*tmp));
+
 		if (!tmp) {
 			ast_mutex_unlock(&qe->parent->lock);
 			if (use_weight) 
@@ -2317,13 +2289,6 @@
 			goto out;
 		}
 		tmp->stillgoing = -1;
-		if (option_debug) {
-			if (url)
-				ast_log(LOG_DEBUG, "Queue with URL=%s_\n", url);
-			else 
-				ast_log(LOG_DEBUG, "Simple queue (no URL)\n");
-		}
-
 		tmp->member = cur;		/* Never directly dereference!  Could change on reload */
 		tmp->oldstatus = cur->status;
 		tmp->lastcall = cur->lastcall;
@@ -2383,6 +2348,7 @@
 		outgoing = NULL;
 		if (announce || qe->parent->reportholdtime || qe->parent->memberdelay) {
 			int res2;
+
 			res2 = ast_autoservice_start(qe->chan);
 			if (!res2) {
 				if (qe->parent->memberdelay) {
@@ -2514,13 +2480,12 @@
 				}
 
 				if (!monitor_options)
-					monitor_options = ast_strdupa("");
+					monitor_options = "";
 				
 				if (strchr(monitor_options, '|')) {
 					ast_log(LOG_WARNING, "MONITOR_OPTIONS cannot contain a '|'! Not recording.\n");
 					mixmonapp = NULL;
 				}
-
 
 				if (mixmonapp) {
 					if (!ast_strlen_zero(monitor_exec) && !ast_strlen_zero(monitor_options)) 
@@ -2567,7 +2532,7 @@
 				      "Holdtime: %ld\r\n"
 				      "BridgedChannel: %s\r\n",
 				      queuename, qe->chan->uniqueid, peer->name, member->interface,
-				      (long)time(NULL) - qe->start,peer->uniqueid);
+				      (long) time(NULL) - qe->start,peer->uniqueid);
 		ast_copy_string(oldcontext, qe->chan->context, sizeof(oldcontext));
 		ast_copy_string(oldexten, qe->chan->exten, sizeof(oldexten));
 		time(&callstart);
@@ -2576,10 +2541,11 @@
 
 		if (strcasecmp(oldcontext, qe->chan->context) || strcasecmp(oldexten, qe->chan->exten)) {
 			ast_queue_log(queuename, qe->chan->uniqueid, peer->name, "TRANSFER", "%s|%s|%ld|%ld", 
-					  qe->chan->exten, qe->chan->context, (long)(callstart - qe->start), (long)(time(NULL) - callstart));
+				      qe->chan->exten, qe->chan->context, (long) (callstart - qe->start),
+				      (long) (time(NULL) - callstart));
 		} else if (qe->chan->_softhangup) {
 			ast_queue_log(queuename, qe->chan->uniqueid, peer->name, "COMPLETECALLER", "%ld|%ld",
-				      (long)(callstart - qe->start), (long)(time(NULL) - callstart));
+				      (long) (callstart - qe->start), (long) (time(NULL) - callstart));
 			if (qe->parent->eventwhencalled)
 				manager_event(EVENT_FLAG_AGENT, "AgentComplete",
 					      "Queue: %s\r\n"
@@ -2590,9 +2556,10 @@
 					      "TalkTime: %ld\r\n"
 					      "Reason: caller\r\n",
 					      queuename, qe->chan->uniqueid, peer->name, member->interface,
-					      (long)(callstart - qe->start), (long)(time(NULL) - callstart));
+					      (long) (callstart - qe->start), (long) (time(NULL) - callstart));
 		} else {
-			ast_queue_log(queuename, qe->chan->uniqueid, peer->name, "COMPLETEAGENT", "%ld|%ld", (long)(callstart - qe->start), (long)(time(NULL) - callstart));
+			ast_queue_log(queuename, qe->chan->uniqueid, peer->name, "COMPLETEAGENT", "%ld|%ld",
+				      (long) (callstart - qe->start), (long) (time(NULL) - callstart));
 			if (qe->parent->eventwhencalled)
 				manager_event(EVENT_FLAG_AGENT, "AgentComplete",
 					      "Queue: %s\r\n"
@@ -2602,7 +2569,7 @@
 					      "TalkTime: %ld\r\n"
 					      "Reason: agent\r\n",
 					      queuename, qe->chan->uniqueid, peer->name, (long)(callstart - qe->start),
-					      (long)(time(NULL) - callstart));
+					      (long) (time(NULL) - callstart));
 		}
 
 		if (bridge != AST_PBX_NO_HANGUP_PEER)
@@ -2612,6 +2579,7 @@
 	}
 out:
 	hangupcalls(outgoing, NULL);
+
 	return res;
 }
 
@@ -2627,10 +2595,13 @@
 {
 	struct member *mem;
 
-	if (q)
-		for (mem = q->members; mem; mem = mem->next)
-			if (!strcasecmp(interface, mem->interface))
-				return mem;
+	if (!q)
+		return NULL;
+
+	for (mem = q->members; mem; mem = mem->next) {
+		if (!strcasecmp(interface, mem->interface))
+			return mem;
+	}
 
 	return NULL;
 }
@@ -2684,42 +2655,46 @@
 	AST_LIST_LOCK(&queues);
 	AST_LIST_TRAVERSE(&queues, q, list) {
 		ast_mutex_lock(&q->lock);
-		if (!strcmp(q->name, queuename)) {
-			if ((last_member = interface_exists(q, interface))) {
-				if ((look = q->members) == last_member) {
-					q->members = last_member->next;
-				} else {
-					while (look != NULL) {
-						if (look->next == last_member) {
-							look->next = last_member->next;
-							break;
-						} else {
-							 look = look->next;
-						}
+		if (strcmp(q->name, queuename)) {
+			ast_mutex_unlock(&q->lock);
+			continue;
+		}
+
+		if ((last_member = interface_exists(q, interface))) {
+			if ((look = q->members) == last_member) {
+				q->members = last_member->next;
+			} else {
+				while (look != NULL) {
+					if (look->next == last_member) {
+						look->next = last_member->next;
+						break;
+					} else {
+						look = look->next;
 					}
 				}
-				manager_event(EVENT_FLAG_AGENT, "QueueMemberRemoved",
-						"Queue: %s\r\n"
-						"Location: %s\r\n",
-					q->name, last_member->interface);
-				free(last_member);
-
-				if (queue_persistent_members)
-					dump_queue_members(q);
-
-				res = RES_OKAY;
-			} else {
-				res = RES_EXISTS;
-			}
-			ast_mutex_unlock(&q->lock);
-			break;
+			}
+			manager_event(EVENT_FLAG_AGENT, "QueueMemberRemoved",
+				      "Queue: %s\r\n"
+				      "Location: %s\r\n",
+				      q->name, last_member->interface);
+			free(last_member);
+			
+			if (queue_persistent_members)
+				dump_queue_members(q);
+			
+			res = RES_OKAY;
+		} else {
+			res = RES_EXISTS;
 		}
 		ast_mutex_unlock(&q->lock);
-	}
-	if (res == RES_OKAY) {
+		break;
+	}
+
+	if (res == RES_OKAY)
 		remove_from_interfaces(interface);
-	}
+
 	AST_LIST_UNLOCK(&queues);
+
 	return res;
 }
 
@@ -2732,47 +2707,44 @@
 
 	/* \note Ensure the appropriate realtime queue is loaded.  Note that this
 	 * short-circuits if the queue is already in memory. */
-	q = load_realtime_queue(queuename);
+	if (!(q = load_realtime_queue(queuename)))
+		return res;
 
 	AST_LIST_LOCK(&queues);
 
-	if (q) {
-		ast_mutex_lock(&q->lock);
-		if (interface_exists(q, interface) == NULL) {
-
-			add_to_interfaces(interface);
-
-			new_member = create_queue_member(interface, penalty, paused);
-
-			if (new_member != NULL) {
-				new_member->dynamic = 1;
-				new_member->next = q->members;
-				q->members = new_member;
-				manager_event(EVENT_FLAG_AGENT, "QueueMemberAdded",
-						"Queue: %s\r\n"
-						"Location: %s\r\n"
-						"Membership: %s\r\n"
-						"Penalty: %d\r\n"
-						"CallsTaken: %d\r\n"
-						"LastCall: %d\r\n"
-						"Status: %d\r\n"
-						"Paused: %d\r\n",
-						q->name, new_member->interface, new_member->dynamic ? "dynamic" : "static",
-						new_member->penalty, new_member->calls, (int)new_member->lastcall, new_member->status, new_member->paused);
-
-				if (dump)
-					dump_queue_members(q);
-
-				res = RES_OKAY;
-			} else {
-				res = RES_OUTOFMEMORY;
-			}
+	ast_mutex_lock(&q->lock);
+	if (interface_exists(q, interface) == NULL) {
+		add_to_interfaces(interface);
+		if ((new_member = create_queue_member(interface, penalty, paused))) {
+			new_member->dynamic = 1;
+			new_member->next = q->members;
+			q->members = new_member;
+			manager_event(EVENT_FLAG_AGENT, "QueueMemberAdded",
+				      "Queue: %s\r\n"
+				      "Location: %s\r\n"
+				      "Membership: %s\r\n"
+				      "Penalty: %d\r\n"
+				      "CallsTaken: %d\r\n"
+				      "LastCall: %d\r\n"
+				      "Status: %d\r\n"
+				      "Paused: %d\r\n",
+				      q->name, new_member->interface, new_member->dynamic ? "dynamic" : "static",
+				      new_member->penalty, new_member->calls, (int) new_member->lastcall,
+				      new_member->status, new_member->paused);
+			
+			if (dump)
+				dump_queue_members(q);
+			
+			res = RES_OKAY;
 		} else {
-			res = RES_EXISTS;
-		}
-		ast_mutex_unlock(&q->lock);
-	}
+			res = RES_OUTOFMEMORY;
+		}
+	} else {
+		res = RES_EXISTS;
+	}
+	ast_mutex_unlock(&q->lock);
 	AST_LIST_UNLOCK(&queues);
+
 	return res;
 }
 
@@ -2813,10 +2785,7 @@
 	}
 	AST_LIST_UNLOCK(&queues);
 
-	if (found)
-		return RESULT_SUCCESS;
-	else
-		return RESULT_FAILURE;
+	return found ? RESULT_SUCCESS : RESULT_FAILURE;
 }
 
 /* Reload dynamic queue members persisted into the astdb */
@@ -2956,6 +2925,7 @@
 
 	LOCAL_USER_REMOVE(lu);
 	pbx_builtin_setvar_helper(chan, "PQMSTATUS", "PAUSED");
+
 	return 0;
 }
 
@@ -3008,6 +2978,7 @@
 
 	LOCAL_USER_REMOVE(lu);
 	pbx_builtin_setvar_helper(chan, "UPQMSTATUS", "UNPAUSED");
+
 	return 0;
 }
 
@@ -3071,6 +3042,7 @@
 	}
 
 	LOCAL_USER_REMOVE(lu);
+
 	return res;
 }
 
@@ -3143,6 +3115,7 @@
 	}
 
 	LOCAL_USER_REMOVE(lu);
+
 	return res;
 }
 
@@ -3156,10 +3129,8 @@
 	int prio;
 	int max_penalty;
 	enum queue_result reason = QUEUE_UNKNOWN;
-
 	/* whether to exit Queue application after the timeout hits */
 	int go_on = 0;
-
 	char *parse;
 	AST_DECLARE_APP_ARGS(args,
 		 AST_APP_ARG(queuename);
@@ -3169,7 +3140,6 @@
 		 AST_APP_ARG(queuetimeoutstr);
 		 AST_APP_ARG(agi);
 	);
-	
 	/* Our queue entry */
 	struct queue_ent qe;
 	
@@ -3257,7 +3227,8 @@
 			if (res < 0) {
 				/* Record this abandoned call */
 				record_abandoned(&qe);
-				ast_queue_log(args.queuename, chan->uniqueid, "NONE", "ABANDON", "%d|%d|%ld", qe.pos, qe.opos, (long)time(NULL) - qe.start);
+				ast_queue_log(args.queuename, chan->uniqueid, "NONE", "ABANDON", "%d|%d|%ld",
+					      qe.pos, qe.opos, (long) time(NULL) - qe.start);
 				if (option_verbose > 2) {
 					ast_verbose(VERBOSE_PREFIX_3 "User disconnected from queue %s while waiting their turn\n", args.queuename);
 				}
@@ -3273,6 +3244,7 @@
 		}
 		if (!res) {
 			int makeannouncement = 0;
+
 			for (;;) {
 				/* This is the wait loop for the head caller*/
 				/* To exit, they may get their call answered; */
@@ -3314,10 +3286,13 @@
 					if (res < 0) {
 						if (!qe.handled) {
 							record_abandoned(&qe);
-							ast_queue_log(args.queuename, chan->uniqueid, "NONE", "ABANDON", "%d|%d|%ld", qe.pos, qe.opos, (long)time(NULL) - qe.start);
+							ast_queue_log(args.queuename, chan->uniqueid, "NONE", "ABANDON",
+								      "%d|%d|%ld", qe.pos, qe.opos,
+								      (long) time(NULL) - qe.start);
 						}
 					} else if (valid_exit(&qe, res)) {
-						 ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHKEY", "%s|%d", qe.digits, qe.pos);
+						 ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHKEY",
+							       "%s|%d", qe.digits, qe.pos);
 					}
 					break;
 				}
@@ -3405,6 +3380,7 @@
 		res = 0;
 	}
 	LOCAL_USER_REMOVE(lu);
+
 	return res;
 }
 
@@ -3425,15 +3401,12 @@
 	LOCAL_USER_ADD(lu);
 	
 	AST_LIST_LOCK(&queues);
-
-	/* Find the right queue */
 	AST_LIST_TRAVERSE(&queues, q, list) {
 		if (!strcasecmp(q->name, data)) {
 			ast_mutex_lock(&q->lock);
 			break;
 		}
 	}
-
 	AST_LIST_UNLOCK(&queues);
 
 	if (q) {
@@ -3449,6 +3422,7 @@
 
 	snprintf(buf, len, "%d", count);
 	LOCAL_USER_REMOVE(lu);
+
 	return 0;
 }
 
@@ -3468,15 +3442,12 @@
 	LOCAL_USER_ADD(lu);
 	
 	AST_LIST_LOCK(&queues);
-
-	/* Find the right queue */
 	AST_LIST_TRAVERSE(&queues, q, list) {
 		if (!strcasecmp(q->name, data)) {
 			ast_mutex_lock(&q->lock);
 			break;
 		}
 	}
-
 	AST_LIST_UNLOCK(&queues);
 
 	if (q) {
@@ -3507,19 +3478,17 @@
 	LOCAL_USER_ADD(u);
 
 	AST_LIST_LOCK(&queues);
-
-	/* Find the right queue */
 	AST_LIST_TRAVERSE(&queues, q, list) {
 		if (!strcasecmp(q->name, data)) {
 			ast_mutex_lock(&q->lock);
 			break;
 		}
 	}
-
 	AST_LIST_UNLOCK(&queues);
 
 	if (q) {
 		int buflen = 0, count = 0;
+
 		for (m = q->members; m; m = m->next) {
 			/* strcat() is always faster than printf() */
 			if (count++) {
@@ -3541,6 +3510,7 @@
 	/* We should already be terminated, but let's make sure. */
 	buf[len - 1] = '\0';
 	LOCAL_USER_REMOVE(u);
+
 	return 0;
 }
 
@@ -3593,8 +3563,7 @@
 	char interface[80];
 	int penalty;
 	
-	cfg = ast_config_load("queues.conf");
-	if (!cfg) {
+	if (!(cfg = ast_config_load("queues.conf"))) {
 		ast_log(LOG_NOTICE, "No call queueing config file (queues.conf), so no call queues\n");
 		return;
 	}
@@ -3602,9 +3571,9 @@
 	AST_LIST_LOCK(&queues);
 	use_weight=0;
 	/* Mark all queues as dead for the moment */
-	AST_LIST_TRAVERSE(&queues, q, list) {
+	AST_LIST_TRAVERSE(&queues, q, list)
 		q->dead = 1;
-	}
+
 	/* Chug through config file */
 	cat = NULL;
 	while ((cat = ast_category_browse(cfg, cat)) ) {
@@ -3791,11 +3760,12 @@
 		else
 			ast_build_string(&max, &max_left, "unlimited");
 		sl = 0;
-		if(q->callscompleted > 0)
-			sl = 100*((float)q->callscompletedinsl/(float)q->callscompleted);
+		if (q->callscompleted > 0)
+			sl = 100 * ((float) q->callscompletedinsl / (float) q->callscompleted);
 		if (s)
 			astman_append(s, "%-12.12s has %d calls (max %s) in '%s' strategy (%ds holdtime), W:%d, C:%d, A:%d, SL:%2.1f%% within %ds%s",
-				q->name, q->count, max_buf, int2strat(q->strategy), q->holdtime, q->weight, q->callscompleted, q->callsabandoned,sl,q->servicelevel, term);
+				      q->name, q->count, max_buf, int2strat(q->strategy), q->holdtime, q->weight,
+				      q->callscompleted, q->callsabandoned,sl,q->servicelevel, term);
 		else
 			ast_cli(fd, "%-12.12s has %d calls (max %s) in '%s' strategy (%ds holdtime), W:%d, C:%d, A:%d, SL:%2.1f%% within %ds%s",
 				q->name, q->count, max_buf, int2strat(q->strategy), q->holdtime, q->weight, q->callscompleted, q->callsabandoned,sl,q->servicelevel, term);
@@ -3817,7 +3787,7 @@
 				ast_build_string(&max, &max_left, " (%s)", devstate2str(mem->status));
 				if (mem->calls) {
 					ast_build_string(&max, &max_left, " has taken %d calls (last was %ld secs ago)",
-							 mem->calls, (long)(time(NULL) - mem->lastcall));
+							 mem->calls, (long) (time(NULL) - mem->lastcall));
 				} else
 					ast_build_string(&max, &max_left, " has taken no calls yet");
 				if (s)
@@ -3837,11 +3807,13 @@
 				ast_cli(fd, "   Callers: %s", term);
 			for (qe = q->head; qe; qe = qe->next) {
 				if (s)
-					astman_append(s, "      %d. %s (wait: %ld:%2.2ld, prio: %d)%s", pos++, qe->chan->name,
-						(long)(now - qe->start) / 60, (long)(now - qe->start) % 60, qe->prio, term);
+					astman_append(s, "      %d. %s (wait: %ld:%2.2ld, prio: %d)%s",
+						      pos++, qe->chan->name, (long) (now - qe->start) / 60,
+						      (long) (now - qe->start) % 60, qe->prio, term);
 				else
-					ast_cli(fd, "      %d. %s (wait: %ld:%2.2ld, prio: %d)%s", pos++, qe->chan->name,
-						(long)(now - qe->start) / 60, (long)(now - qe->start) % 60, qe->prio, term);
+					ast_cli(fd, "      %d. %s (wait: %ld:%2.2ld, prio: %d)%s", pos++,
+						qe->chan->name, (long) (now - qe->start) / 60,
+						(long) (now - qe->start) % 60, qe->prio, term);
 			}
 		} else if (s)
 			astman_append(s, "   No Callers%s", term);
@@ -3894,6 +3866,7 @@
 static int manager_queues_show( struct mansession *s, struct message *m )
 {
 	char *a[] = { "show", "queues" };
+
 	__queues_show(s, 1, -1, 2, a, 0);
 	astman_append(s, "\r\n\r\n");	/* Properly terminate Manager output */
 
@@ -3917,73 +3890,73 @@
 	astman_send_ack(s, m, "Queue status will follow");
 	time(&now);
 	AST_LIST_LOCK(&queues);
-	if (!ast_strlen_zero(id)) {
-		snprintf(idText,256,"ActionID: %s\r\n",id);
-	}
+	if (!ast_strlen_zero(id))
+		snprintf(idText, sizeof(idText), "ActionID: %s\r\n", id);
+
 	AST_LIST_TRAVERSE(&queues, q, list) {
 		ast_mutex_lock(&q->lock);
 
 		/* List queue properties */
 		if (ast_strlen_zero(queuefilter) || !strcmp(q->name, queuefilter)) {
-			if(q->callscompleted > 0)
-				sl = 100*((float)q->callscompletedinsl/(float)q->callscompleted);
+			if (q->callscompleted > 0)
+				sl = 100 * ((float) q->callscompletedinsl / (float) q->callscompleted);
 			astman_append(s, "Event: QueueParams\r\n"
-						"Queue: %s\r\n"
-						"Max: %d\r\n"
-						"Calls: %d\r\n"
-						"Holdtime: %d\r\n"
-						"Completed: %d\r\n"
-						"Abandoned: %d\r\n"
-						"ServiceLevel: %d\r\n"
-						"ServicelevelPerf: %2.1f\r\n"
-						"Weight: %d\r\n"
-						"%s"
-						"\r\n",
-							q->name, q->maxlen, q->count, q->holdtime, q->callscompleted,
-							q->callsabandoned, q->servicelevel, sl, q->weight, idText);
+				      "Queue: %s\r\n"
+				      "Max: %d\r\n"
+				      "Calls: %d\r\n"
+				      "Holdtime: %d\r\n"
+				      "Completed: %d\r\n"
+				      "Abandoned: %d\r\n"
+				      "ServiceLevel: %d\r\n"
+				      "ServicelevelPerf: %2.1f\r\n"
+				      "Weight: %d\r\n"
+				      "%s"
+				      "\r\n",
+				      q->name, q->maxlen, q->count, q->holdtime, q->callscompleted,
+				      q->callsabandoned, q->servicelevel, sl, q->weight, idText);
 			/* List Queue Members */
 			for (mem = q->members; mem; mem = mem->next) {
 				if (ast_strlen_zero(memberfilter) || !strcmp(mem->interface, memberfilter)) {
 					astman_append(s, "Event: QueueMember\r\n"
-						"Queue: %s\r\n"
-						"Location: %s\r\n"
-						"Membership: %s\r\n"
-						"Penalty: %d\r\n"
-						"CallsTaken: %d\r\n"
-						"LastCall: %d\r\n"
-						"Status: %d\r\n"
-						"Paused: %d\r\n"
-						"%s"
-						"\r\n",
-							q->name, mem->interface, mem->dynamic ? "dynamic" : "static",
-							mem->penalty, mem->calls, (int)mem->lastcall, mem->status, mem->paused, idText);
+						      "Queue: %s\r\n"
+						      "Location: %s\r\n"
+						      "Membership: %s\r\n"
+						      "Penalty: %d\r\n"
+						      "CallsTaken: %d\r\n"
+						      "LastCall: %d\r\n"
+						      "Status: %d\r\n"
+						      "Paused: %d\r\n"
+						      "%s"
+						      "\r\n",
+						      q->name, mem->interface, mem->dynamic ? "dynamic" : "static",
+						      mem->penalty, mem->calls, (int)mem->lastcall, mem->status, mem->paused, idText);
 				}
 			}
 			/* List Queue Entries */
 			pos = 1;
 			for (qe = q->head; qe; qe = qe->next) {
 				astman_append(s, "Event: QueueEntry\r\n"
-					"Queue: %s\r\n"
-					"Position: %d\r\n"
-					"Channel: %s\r\n"
-					"CallerID: %s\r\n"
-					"CallerIDName: %s\r\n"
-					"Wait: %ld\r\n"
-					"%s"
-					"\r\n", 
-					q->name, pos++, qe->chan->name, 
-					S_OR(qe->chan->cid.cid_num, "unknown"),
-					S_OR(qe->chan->cid.cid_name, "unknown"),
-					(long)(now - qe->start), idText);
+					      "Queue: %s\r\n"
+					      "Position: %d\r\n"
+					      "Channel: %s\r\n"
+					      "CallerID: %s\r\n"
+					      "CallerIDName: %s\r\n"
+					      "Wait: %ld\r\n"
+					      "%s"
+					      "\r\n", 
+					      q->name, pos++, qe->chan->name, 
+					      S_OR(qe->chan->cid.cid_num, "unknown"),
+					      S_OR(qe->chan->cid.cid_name, "unknown"),
+					      (long) (now - qe->start), idText);
 			}
 		}
 		ast_mutex_unlock(&q->lock);
 	}
 
 	astman_append(s,
-		"Event: QueueStatusComplete\r\n"
-		"%s"
-		"\r\n",idText);
+		      "Event: QueueStatusComplete\r\n"
+		      "%s"
+		      "\r\n",idText);
 
 	AST_LIST_UNLOCK(&queues);
 
@@ -4035,6 +4008,7 @@
 		astman_send_error(s, m, "Out of memory");
 		break;
 	}
+
 	return 0;
 }
 
@@ -4064,6 +4038,7 @@
 		astman_send_error(s, m, "Out of memory");
 		break;
 	}
+
 	return 0;
 }
 
@@ -4223,6 +4198,7 @@
 			ast_mutex_unlock(&q->lock);
 		}
 	}
+
 	return NULL;
 }
 
@@ -4260,7 +4236,6 @@
 {
 	int res;
 
-	clear_and_free_interfaces();
 	res = ast_cli_unregister(&cli_show_queue);
 	res |= ast_cli_unregister(&cli_show_queues);
 	res |= ast_cli_unregister(&cli_add_queue_member);
@@ -4279,6 +4254,8 @@
 	res |= ast_custom_function_unregister(&queuememberlist_function);
 	res |= ast_custom_function_unregister(&queuewaitingcount_function);
 	res |= ast_unregister_application(app);
+
+	clear_and_free_interfaces();
 
 	STANDARD_HANGUP_LOCALUSERS;
 



More information about the asterisk-commits mailing list