Index: apps/app_queue.c =================================================================== --- apps/app_queue.c (revision 232810) +++ apps/app_queue.c (working copy) @@ -153,6 +153,9 @@ + @@ -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 */ @@ -3086,6 +3090,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]; @@ -3386,6 +3397,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 */ @@ -5511,6 +5528,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;