From 465d0f4a22aa38d01e16cc49138d701249de52e4 Mon Sep 17 00:00:00 2001
From: Olle Johansson <oej@edvina.net>
Date: Mon, 29 Apr 2013 13:38:59 +0000
Subject: [PATCH] Play periodic prompts for first call in a call queue

Review: https://reviewboard.asterisk.org/r/2263/
........

Merged revisions 386792 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 386794 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@386841 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 CHANGES          |  5 +++++
 apps/app_queue.c | 14 ++++++++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/CHANGES b/CHANGES
index 04d5463468..4178f6bd16 100644
--- a/CHANGES
+++ b/CHANGES
@@ -157,6 +157,8 @@ Sorcery
 --- Functionality changes from Asterisk 10 to Asterisk 11 --------------------
 ------------------------------------------------------------------------------
 
+
+
 Build System
 -------------------
  * The Asterisk build system will now build and install a shared library
@@ -301,6 +303,9 @@ Queue
 
  * Add queue monitoring hints.  exten => 8501,hint,Queue:markq.
 
+ * App_queue will now play periodic announcements for the caller that
+   holds the first position in the queue while waiting for answer.
+
 SayUnixTime
 ------------------
  * Added 'j' option to SayUnixTime. SayUnixTime no longer auto jumps to extension
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 9de87892cf..887f8f0b0c 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -4071,7 +4071,7 @@ static void rna(int rnatime, struct queue_ent *qe, char *interface, char *member
  *
  * \todo eventually all call forward logic should be intergerated into and replaced by ast_call_forward()
  */
-static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callattempt *outgoing, int *to, char *digit, int prebusies, int caller_disconnect, int forwardsallowed)
+static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callattempt *outgoing, int *to, char *digit, int prebusies, int caller_disconnect, int forwardsallowed, int ringing)
 {
 	const char *queue = qe->parent->name;
 	struct callattempt *o, *start = NULL, *prev = NULL;
@@ -4582,6 +4582,16 @@ skip_frame:;
 		}
 	}
 
+	/* Make a position announcement, if enabled */
+ 	if (qe->parent->announcefrequency) {
+		say_position(qe, ringing);
+	}
+
+ 	/* Make a periodic announcement, if enabled */
+ 	if (qe->parent->periodicannouncefrequency) {
+ 		say_periodic_announcement(qe, ringing);
+ 	}
+ 
 	if (!*to) {
 		for (o = start; o; o = o->call_next) {
 			rna(orig, qe, o->interface, o->member->membername, 1);
@@ -5378,7 +5388,7 @@ static int try_calling(struct queue_ent *qe, const struct ast_flags opts, char *
 	ring_one(qe, outgoing, &numbusies);
 	lpeer = wait_for_answer(qe, outgoing, &to, &digit, numbusies,
 		ast_test_flag(&(bridge_config.features_caller), AST_FEATURE_DISCONNECT),
-		forwardsallowed);
+		forwardsallowed, ringing);
 	/* The ast_channel_datastore_remove() function could fail here if the
 	 * datastore was moved to another channel during a masquerade. If this is
 	 * the case, don't free the datastore here because later, when the channel
-- 
GitLab