mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 12:36:58 +00:00
Merged revisions 29971 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r29971 | kpfleming | 2006-05-24 11:52:08 -0500 (Wed, 24 May 2006) | 2 lines fix various bugs related to exiting from queue via keypress and moh handling (issue #6776, different fix) ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@29972 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -1213,13 +1213,16 @@ static int say_position(struct queue_ent *qe)
|
||||
ast_verbose(VERBOSE_PREFIX_3 "Told %s in %s their queue position (which was %d)\n",
|
||||
qe->chan->name, qe->parent->name, qe->pos);
|
||||
res = play_file(qe->chan, qe->parent->sound_thanks);
|
||||
if (res && !valid_exit(qe, res))
|
||||
res = 0;
|
||||
|
||||
playout:
|
||||
/* Set our last_pos indicators */
|
||||
qe->last_pos = now;
|
||||
qe->last_pos_said = qe->pos;
|
||||
|
||||
/* Don't restart music on hold if we're about to exit the caller from the queue */
|
||||
if (res)
|
||||
if (!res)
|
||||
ast_moh_start(qe->chan, qe->moh);
|
||||
|
||||
return res;
|
||||
@@ -1585,7 +1588,7 @@ static int background_file(struct queue_ent *qe, struct ast_channel *chan, char
|
||||
if (!res) {
|
||||
/* Wait for a keypress */
|
||||
res = ast_waitstream(chan, AST_DIGIT_ANY);
|
||||
if (res <= 0 || !valid_exit(qe, res))
|
||||
if (res < 0 || !valid_exit(qe, res))
|
||||
res = 0;
|
||||
|
||||
/* Stop playback */
|
||||
@@ -1628,7 +1631,8 @@ static int say_periodic_announcement(struct queue_ent *qe)
|
||||
/* play the announcement */
|
||||
res = background_file(qe, qe->chan, qe->parent->sound_periodicannounce[qe->last_periodic_announce_sound]);
|
||||
|
||||
/* Resume Music on Hold */
|
||||
/* Resume Music on Hold if the caller is going to stay in the queue */
|
||||
if (!res)
|
||||
ast_moh_start(qe->chan, qe->moh);
|
||||
|
||||
/* update last_periodic_announce_time */
|
||||
@@ -1993,18 +1997,17 @@ static int wait_our_turn(struct queue_ent *qe, int ringing, enum queue_result *r
|
||||
}
|
||||
|
||||
/* Make a position announcement, if enabled */
|
||||
if (qe->parent->announcefrequency && !ringing)
|
||||
res = say_position(qe);
|
||||
if (res)
|
||||
if (qe->parent->announcefrequency && !ringing &&
|
||||
(res = say_position(qe)))
|
||||
break;
|
||||
|
||||
/* Make a periodic announcement, if enabled */
|
||||
if (qe->parent->periodicannouncefrequency && !ringing)
|
||||
res = say_periodic_announcement(qe);
|
||||
if (qe->parent->periodicannouncefrequency && !ringing &&
|
||||
(res = say_periodic_announcement(qe)))
|
||||
break;
|
||||
|
||||
/* Wait a second before checking again */
|
||||
if (!res) res = ast_waitfordigit(qe->chan, RECHECK * 1000);
|
||||
if (res)
|
||||
if ((res = ast_waitfordigit(qe->chan, RECHECK * 1000)))
|
||||
break;
|
||||
}
|
||||
return res;
|
||||
@@ -2459,13 +2462,10 @@ static int try_calling(struct queue_ent *qe, const char *options, char *announce
|
||||
(long)(time(NULL) - callstart));
|
||||
}
|
||||
|
||||
if(bridge != AST_PBX_NO_HANGUP_PEER)
|
||||
if (bridge != AST_PBX_NO_HANGUP_PEER)
|
||||
ast_hangup(peer);
|
||||
update_queue(qe->parent, member);
|
||||
if (bridge == 0)
|
||||
res = 1; /* JDG: bridge successfully, leave app_queue */
|
||||
else
|
||||
res = bridge; /* bridge error, stay in the queue */
|
||||
res = bridge ? 0 : -1;
|
||||
}
|
||||
out:
|
||||
hangupcalls(outgoing, NULL);
|
||||
@@ -3142,9 +3142,8 @@ check_turns:
|
||||
|
||||
if (makeannouncement) {
|
||||
/* Make a position announcement, if enabled */
|
||||
if (qe.parent->announcefrequency && !ringing)
|
||||
res = say_position(&qe);
|
||||
if (res) {
|
||||
if (qe.parent->announcefrequency && !ringing &&
|
||||
(res = say_position(&qe))) {
|
||||
ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHKEY", "%s|%d", qe.digits, qe.pos);
|
||||
break;
|
||||
}
|
||||
@@ -3153,10 +3152,8 @@ check_turns:
|
||||
makeannouncement = 1;
|
||||
|
||||
/* Make a periodic announcement, if enabled */
|
||||
if (qe.parent->periodicannouncefrequency && !ringing)
|
||||
res = say_periodic_announcement(&qe);
|
||||
|
||||
if (res && valid_exit(&qe, res)) {
|
||||
if (qe.parent->periodicannouncefrequency && !ringing &&
|
||||
(res = say_periodic_announcement(&qe))) {
|
||||
ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHKEY", "%c|%d", res, qe.pos);
|
||||
break;
|
||||
}
|
||||
@@ -3170,8 +3167,9 @@ check_turns:
|
||||
record_abandoned(&qe);
|
||||
ast_queue_log(args.queuename, chan->uniqueid, "NONE", "ABANDON", "%d|%d|%ld", qe.pos, qe.opos, (long)time(NULL) - qe.start);
|
||||
}
|
||||
} else if (res > 0)
|
||||
} else if (valid_exit(&qe, res)) {
|
||||
ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHKEY", "%s|%d", qe.digits, qe.pos);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user