From 6892b103abe53ec534fceb7a66f2215970a4c598 Mon Sep 17 00:00:00 2001 From: David Vossel Date: Wed, 23 Dec 2009 18:39:37 +0000 Subject: 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@236304 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_queue.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'apps/app_queue.c') diff --git a/apps/app_queue.c b/apps/app_queue.c index 2e79909ca..421ddbae4 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -153,6 +153,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") + @@ -807,6 +810,7 @@ struct queue_ent { 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 record_abandoned(struct queue_ent *qe) 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 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte 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 @@ static int queue_exec(struct ast_channel *chan, const char *data) 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; -- cgit v1.2.3