[asterisk-commits] dvossel: trunk r236304 - /trunk/apps/app_queue.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Dec 23 12:39:40 CST 2009


Author: dvossel
Date: Wed Dec 23 12:39:37 2009
New Revision: 236304

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=236304
Log:
new parameter 'R' to the Queue application

The 'R' argument stops moh and indicates ringing once the agent is
ringing.  This allows the person in the queue to know their call
is potentially about to be answered.

(closes issue #16384)
Reported by: haakon
Patches:
      new_app_queue.c.patch uploaded by haakon (license 880)
Tested by: haakon, loloski, dvossel

Modified:
    trunk/apps/app_queue.c

Modified: trunk/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/trunk/apps/app_queue.c?view=diff&rev=236304&r1=236303&r2=236304
==============================================================================
--- trunk/apps/app_queue.c (original)
+++ trunk/apps/app_queue.c Wed Dec 23 12:39:37 2009
@@ -152,6 +152,9 @@
 					</option>
 					<option name="r">
 						<para>Ring instead of playing MOH. Periodic Announcements are still made, if applicable.</para>
+					</option>
+					<option name="R">
+						<para>Ring instead of playing MOH when a member channel is actually ringing.</para>
 					</option>
 					<option name="t">
 						<para>Allow the <emphasis>called</emphasis> user to transfer the calling user.</para>
@@ -807,6 +810,7 @@
 	int pos;                               /*!< Where we are in the queue */
 	int prio;                              /*!< Our priority */
 	int last_pos_said;                     /*!< Last position we told the user */
+	int ring_when_ringing;                 /*!< Should we only use ring indication when a channel is ringing? */
 	time_t last_periodic_announce_time;    /*!< The last time we played a periodic announcement */
 	int last_periodic_announce_sound;      /*!< The last periodic announcement we made */
 	time_t last_pos;                       /*!< Last time we told the user their position */
@@ -3092,6 +3096,13 @@
 static void rna(int rnatime, struct queue_ent *qe, char *interface, char *membername, int pause)
 {
 	ast_verb(3, "Nobody picked up in %d ms\n", rnatime);
+
+	/* Stop ringing, and resume MOH if specified */
+	if (qe->ring_when_ringing) {
+		ast_indicate(qe->chan, -1);
+		ast_moh_start(qe->chan, qe->moh, NULL);
+	}
+
 	if (qe->parent->eventwhencalled) {
 		char vars[2048];
 
@@ -3392,6 +3403,12 @@
 							break;
 						case AST_CONTROL_RINGING:
 							ast_verb(3, "%s is ringing\n", ochan_name);
+
+							/* Start ring indication when the channel is ringing, if specified */
+							if (qe->ring_when_ringing) {
+								ast_moh_stop(qe->chan);
+								ast_indicate(qe->chan, AST_CONTROL_RINGING);
+							}
 							break;
 						case AST_CONTROL_OFFHOOK:
 							/* Ignore going off hook */
@@ -5527,6 +5544,12 @@
 	if (args.options && (strchr(args.options, 'r')))
 		ringing = 1;
 
+	if (ringing != 1 && args.options && (strchr(args.options, 'R'))) {
+		qe.ring_when_ringing = 1;
+	} else {
+		qe.ring_when_ringing = 0;
+	}
+
 	if (args.options && (strchr(args.options, 'c')))
 		qcontinue = 1;
 




More information about the asterisk-commits mailing list