From c6ff40e6aaf3da9a20e7ae984ca8c26514c076af Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Wed, 23 Apr 2003 04:39:18 +0000 Subject: Make MP3 app timeout after a couple of seconds of no audio git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@884 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_mp3.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'apps/app_mp3.c') diff --git a/apps/app_mp3.c b/apps/app_mp3.c index b2bddb7fd..791840106 100755 --- a/apps/app_mp3.c +++ b/apps/app_mp3.c @@ -68,6 +68,22 @@ static int mp3play(char *filename, int fd) return -1; } +static int timed_read(int fd, void *data, int datalen) +{ + int res; + fd_set fds; + struct timeval tv = { 2, 0 }; /* Wait no more than 2 seconds */ + FD_ZERO(&fds); + FD_SET(fd, &fds); + res = select(fd + 1, &fds, NULL, NULL, &tv); + if (res < 1) { + ast_log(LOG_NOTICE, "Selected timed out/errored out with %d\n", res); + return -1; + } + return read(fd, data, datalen); + +} + static int mp3_exec(struct ast_channel *chan, void *data) { int res=0; @@ -132,7 +148,7 @@ static int mp3_exec(struct ast_channel *chan, void *data) } ast_frfree(f); } else { - res = read(fds[0], myf.frdata, sizeof(myf.frdata)); + res = timed_read(fds[0], myf.frdata, sizeof(myf.frdata)); if (res > 0) { myf.f.frametype = AST_FRAME_VOICE; myf.f.subclass = AST_FORMAT_SLINEAR; -- cgit v1.2.3