[Asterisk-cvs] asterisk/apps app_queue.c,1.59,1.60

markster at lists.digium.com markster at lists.digium.com
Sun May 9 15:04:01 CDT 2004


Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv10849/apps

Modified Files:
	app_queue.c 
Log Message:
Merge Connor's ringback feature for queue (bug #1560)


Index: app_queue.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_queue.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- app_queue.c	9 May 2004 07:51:44 -0000	1.59
+++ app_queue.c	9 May 2004 19:13:43 -0000	1.60
@@ -96,6 +96,7 @@
 "      'd' -- data-quality (modem) call (minimum delay).\n"
 "      'H' -- allow caller to hang up by hitting *.\n"
 "      'n' -- no retries on the timeout; will exit this application and go to the next step.\n"
+"      'r' -- ring instead of playing MOH\n"
 "  In addition to transferring the call, a call may be parked and then picked\n"
 "up by another user.\n"
 "  The optional URL will be sent to the called party if the channel supports\n"
@@ -747,7 +748,7 @@
 	
 }
 
-static int wait_our_turn(struct queue_ent *qe)
+static int wait_our_turn(struct queue_ent *qe, int ringing)
 {
 	struct queue_ent *ch;
 	int res = 0;
@@ -770,7 +771,7 @@
 		}
 
 		/* Make a position announcement, if enabled */
-		if (qe->parent->announcefrequency)
+		if (qe->parent->announcefrequency && !ringing)
 			say_position(qe);
 
 
@@ -1305,6 +1306,7 @@
 static int queue_exec(struct ast_channel *chan, void *data)
 {
 	int res=-1;
+	int ringing=0;
 	struct localuser *u;
 	char *queuename;
 	char info[512];
@@ -1359,6 +1361,12 @@
 	}
 	}
 
+	if (options) {
+		if (strchr(options, 'r')) {
+			ringing = 1;
+	  	}
+        }
+
 	printf("queue: %s, options: %s, url: %s, announce: %s, timeout: %d\n",
 		queuename, options, url, announceoverride, qe.queuetimeout);
 
@@ -1370,11 +1378,15 @@
 	if (!join_queue(queuename, &qe)) {
 		ast_queue_log(queuename, chan->uniqueid, "NONE", "ENTERQUEUE", "%s|%s", url ? url : "", chan->callerid ? chan->callerid : "");
 		/* Start music on hold */
-		ast_moh_start(chan, qe.moh);
+		if (ringing) {
+			ast_indicate(chan, AST_CONTROL_RINGING);
+		} else {              
+			ast_moh_start(chan, qe.moh);
+		}
 		for (;;) {
 			/* This is the wait loop for callers 2 through maxlen */
 
-			res = wait_our_turn(&qe);
+			res = wait_our_turn(&qe, ringing);
 			/* If they hungup, return immediately */
 			if (res < 0) {
 				/* Record this abandoned call */
@@ -1407,7 +1419,7 @@
 				}
 
 				/* Make a position announcement, if enabled */
-				if (qe.parent->announcefrequency)
+				if (qe.parent->announcefrequency && !ringing)
 					say_position(&qe);
 
 				/* Try calling all queue members for 'timeout' seconds */
@@ -1457,7 +1469,11 @@
 		/* Don't allow return code > 0 */
 		if (res > 0 && res != AST_PBX_KEEPALIVE) {
 			res = 0;	
-			ast_moh_stop(chan);
+			if (ringing) {
+				ast_indicate(chan, -1);
+			} else {
+				ast_moh_stop(chan);
+			}			
 			ast_stopstream(chan);
 		}
 		leave_queue(&qe);




More information about the svn-commits mailing list