diff --git a/apps/app_queue.c b/apps/app_queue.c index 2e79909ca9..421ddbae48 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;