dect
/
asterisk
Archived
13
0
Fork 0

Fix/Implement error events for non-existing files

also include a better cmd define for S command

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


git-svn-id: http://svn.digium.com/svn/asterisk/trunk@230584 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
diruggles 2009-11-20 17:28:01 +00:00
parent 56608fa6db
commit 01b456e553
2 changed files with 27 additions and 26 deletions

View File

@ -98,7 +98,7 @@ static const char app[] = "ExternalIVR";
/* Commands */
#define EIVR_CMD_PARM 'P' /* return supplied params */
#define EIVR_CMD_ANS 'T' /* answer channel */
#define EIVR_CMD_STRT 'S' /* start prompt queue over */
#define EIVR_CMD_SQUE 'S' /* (re)set prompt queue */
#define EIVR_CMD_APND 'A' /* append to prompt queue */
#define EIVR_CMD_GET 'G' /* get channel varable(s) */
#define EIVR_CMD_SVAR 'V' /* set channel varable(s) */
@ -706,23 +706,23 @@ static int eivr_comm(struct ast_channel *chan, struct ivr_localuser *u,
u->gen_active = 1;
}
}
} else if (input[0] == EIVR_CMD_STRT) {
} else if (input[0] == EIVR_CMD_SQUE) {
if (chan->_state != AST_STATE_UP || ast_check_hangup(chan)) {
ast_chan_log(LOG_WARNING, chan, "Queue 'S'et called on unanswered channel\n");
ast_chan_log(LOG_WARNING, chan, "Queue re'S'et called on unanswered channel\n");
send_eivr_event(eivr_events, 'Z', NULL, chan);
continue;
}
if (ast_fileexists(&input[2], NULL, u->chan->language) == -1) {
if (!ast_fileexists(&input[2], NULL, u->chan->language)) {
ast_chan_log(LOG_WARNING, chan, "Unknown file requested '%s'\n", &input[2]);
send_eivr_event(eivr_events, 'Z', NULL, chan);
strcpy(&input[2], "exception");
}
if (!u->abort_current_sound && !u->playing_silence)
send_eivr_event(eivr_events, 'T', NULL, chan);
AST_LIST_LOCK(&u->playlist);
while ((entry = AST_LIST_REMOVE_HEAD(&u->playlist, list))) {
send_eivr_event(eivr_events, 'D', entry->filename, chan);
ast_free(entry);
send_eivr_event(eivr_events, 'Z', &input[2], chan);
} else {
if (!u->abort_current_sound && !u->playing_silence)
send_eivr_event(eivr_events, 'T', NULL, chan);
AST_LIST_LOCK(&u->playlist);
while ((entry = AST_LIST_REMOVE_HEAD(&u->playlist, list))) {
send_eivr_event(eivr_events, 'D', entry->filename, chan);
ast_free(entry);
}
}
if (!u->playing_silence)
u->abort_current_sound = 1;
@ -736,16 +736,16 @@ static int eivr_comm(struct ast_channel *chan, struct ivr_localuser *u,
send_eivr_event(eivr_events, 'Z', NULL, chan);
continue;
}
if (ast_fileexists(&input[2], NULL, u->chan->language) == -1) {
if (!ast_fileexists(&input[2], NULL, u->chan->language)) {
ast_chan_log(LOG_WARNING, chan, "Unknown file requested '%s'\n", &input[2]);
send_eivr_event(eivr_events, 'Z', NULL, chan);
strcpy(&input[2], "exception");
}
entry = make_entry(&input[2]);
if (entry) {
AST_LIST_LOCK(&u->playlist);
AST_LIST_INSERT_TAIL(&u->playlist, entry, list);
AST_LIST_UNLOCK(&u->playlist);
send_eivr_event(eivr_events, 'Z', &input[2], chan);
} else {
entry = make_entry(&input[2]);
if (entry) {
AST_LIST_LOCK(&u->playlist);
AST_LIST_INSERT_TAIL(&u->playlist, entry, list);
AST_LIST_UNLOCK(&u->playlist);
}
}
} else if (input[0] == EIVR_CMD_GET) {
char response[2048];

View File

@ -103,10 +103,11 @@ The 'S' command checks to see if there is a playable audio file with
the specified name, and if so, clear's the generator's playlist and
places the file onto the list. Note that the playability check does
not take into account transcoding requirements, so it is possible for
the file to not be played even though it was found. If the generator
is not currently playing silence, then T and D events will be sent
to the child to signal the playlist interruption and notify it of
the files that will not be played.
the file to not be played even though it was found. If the file does
not exist it sends a Z response with the data element set to the file
requested. If the generator is not currently playing silence, then T
and D events will be sent to the child to signal the playlist
interruption and notify it of the files that will not be played.
The 'A' command checks to see if there is a playable audio file with
the specified name, and if so, adds it to the generator's