diff --git a/doc/mpd.conf.5 b/doc/mpd.conf.5 index d52f07200..7db2eee05 100644 --- a/doc/mpd.conf.5 +++ b/doc/mpd.conf.5 @@ -375,6 +375,10 @@ default is "source". This specifies whether to request that the stream be listed in all public stream directories that the icecast server knows about. The default is no. .TP +.B timeout +This specifies the number of seconds to wait before giving up on trying to +connect to the icecast server. The default is 2 seconds. +.TP .B description This specifies a description of the stream. .TP diff --git a/doc/mpdconf.example b/doc/mpdconf.example index bddc4d482..be04adb91 100644 --- a/doc/mpdconf.example +++ b/doc/mpdconf.example @@ -124,6 +124,7 @@ error_file "~/.mpd/mpd.error" # description "My Stream Description" # optional # genre "jazz" # optional # public "no" # optional +# timeout "2" # optional #} # # An example of a null output (for no audio output): diff --git a/src/audioOutputs/audioOutput_shout.c b/src/audioOutputs/audioOutput_shout.c index 41e19a450..5444912c5 100644 --- a/src/audioOutputs/audioOutput_shout.c +++ b/src/audioOutputs/audioOutput_shout.c @@ -33,7 +33,7 @@ #include #define CONN_ATTEMPT_INTERVAL 60 -#define CONN_TIMEOUT 2 +#define DEFAULT_CONN_TIMEOUT 2 static int shoutInitCount; @@ -63,6 +63,7 @@ typedef struct _ShoutData { MpdTag *tag; int tagToSend; + int timeout; int connAttempts; time_t lastAttempt; @@ -80,6 +81,7 @@ static ShoutData *newShoutData(void) ret->tagToSend = 0; ret->bitrate = -1; ret->quality = -2.0; + ret->timeout = DEFAULT_CONN_TIMEOUT; ret->connAttempts = 0; ret->lastAttempt = 0; ret->audioFormat = NULL; @@ -221,6 +223,15 @@ static int myShout_initDriver(AudioOutput * audioOutput, ConfigParam * param) } /* optional paramters */ + blockParam = getBlockParam(param, "timeout"); + if (blockParam) { + sd->timeout = strtod(blockParam->value, &test); + if (*test != '\0' || sd->timeout <= 0) { + FATAL("shout timeout is not a positive integer, " + "line %i\n", blockParam->line); + } + } + blockParam = getBlockParam(param, "genre"); if (blockParam && shout_set_genre(sd->shoutConn, blockParam->value)) { FATAL("error configuring shout defined at line %i: %s\n", @@ -451,7 +462,7 @@ static int myShout_openShoutConn(AudioOutput * audioOutput) state = shout_open(sd->shoutConn); - while (state == SHOUTERR_BUSY && (t - sd->lastAttempt) < CONN_TIMEOUT) { + while (state == SHOUTERR_BUSY && (t - sd->lastAttempt) < sd->timeout) { my_usleep(10000); state = shout_get_connected(sd->shoutConn); t = time(NULL);