mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
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: https://origsvn.digium.com/svn/asterisk/trunk@230584 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -98,7 +98,7 @@ static const char app[] = "ExternalIVR";
|
|||||||
/* Commands */
|
/* Commands */
|
||||||
#define EIVR_CMD_PARM 'P' /* return supplied params */
|
#define EIVR_CMD_PARM 'P' /* return supplied params */
|
||||||
#define EIVR_CMD_ANS 'T' /* answer channel */
|
#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_APND 'A' /* append to prompt queue */
|
||||||
#define EIVR_CMD_GET 'G' /* get channel varable(s) */
|
#define EIVR_CMD_GET 'G' /* get channel varable(s) */
|
||||||
#define EIVR_CMD_SVAR 'V' /* set 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;
|
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)) {
|
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);
|
send_eivr_event(eivr_events, 'Z', NULL, chan);
|
||||||
continue;
|
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]);
|
ast_chan_log(LOG_WARNING, chan, "Unknown file requested '%s'\n", &input[2]);
|
||||||
send_eivr_event(eivr_events, 'Z', NULL, chan);
|
send_eivr_event(eivr_events, 'Z', &input[2], chan);
|
||||||
strcpy(&input[2], "exception");
|
} else {
|
||||||
}
|
if (!u->abort_current_sound && !u->playing_silence)
|
||||||
if (!u->abort_current_sound && !u->playing_silence)
|
send_eivr_event(eivr_events, 'T', NULL, chan);
|
||||||
send_eivr_event(eivr_events, 'T', NULL, chan);
|
AST_LIST_LOCK(&u->playlist);
|
||||||
AST_LIST_LOCK(&u->playlist);
|
while ((entry = AST_LIST_REMOVE_HEAD(&u->playlist, list))) {
|
||||||
while ((entry = AST_LIST_REMOVE_HEAD(&u->playlist, list))) {
|
send_eivr_event(eivr_events, 'D', entry->filename, chan);
|
||||||
send_eivr_event(eivr_events, 'D', entry->filename, chan);
|
ast_free(entry);
|
||||||
ast_free(entry);
|
}
|
||||||
}
|
}
|
||||||
if (!u->playing_silence)
|
if (!u->playing_silence)
|
||||||
u->abort_current_sound = 1;
|
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);
|
send_eivr_event(eivr_events, 'Z', NULL, chan);
|
||||||
continue;
|
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]);
|
ast_chan_log(LOG_WARNING, chan, "Unknown file requested '%s'\n", &input[2]);
|
||||||
send_eivr_event(eivr_events, 'Z', NULL, chan);
|
send_eivr_event(eivr_events, 'Z', &input[2], chan);
|
||||||
strcpy(&input[2], "exception");
|
} else {
|
||||||
}
|
entry = make_entry(&input[2]);
|
||||||
entry = make_entry(&input[2]);
|
if (entry) {
|
||||||
if (entry) {
|
AST_LIST_LOCK(&u->playlist);
|
||||||
AST_LIST_LOCK(&u->playlist);
|
AST_LIST_INSERT_TAIL(&u->playlist, entry, list);
|
||||||
AST_LIST_INSERT_TAIL(&u->playlist, entry, list);
|
AST_LIST_UNLOCK(&u->playlist);
|
||||||
AST_LIST_UNLOCK(&u->playlist);
|
}
|
||||||
}
|
}
|
||||||
} else if (input[0] == EIVR_CMD_GET) {
|
} else if (input[0] == EIVR_CMD_GET) {
|
||||||
char response[2048];
|
char response[2048];
|
||||||
|
@@ -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
|
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
|
places the file onto the list. Note that the playability check does
|
||||||
not take into account transcoding requirements, so it is possible for
|
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
|
the file to not be played even though it was found. If the file does
|
||||||
is not currently playing silence, then T and D events will be sent
|
not exist it sends a Z response with the data element set to the file
|
||||||
to the child to signal the playlist interruption and notify it of
|
requested. If the generator is not currently playing silence, then T
|
||||||
the files that will not be played.
|
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 '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
|
the specified name, and if so, adds it to the generator's
|
||||||
|
Reference in New Issue
Block a user