diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/decode.c | 4 | ||||
-rw-r--r-- | src/inputStream.c | 5 | ||||
-rw-r--r-- | src/inputStream_file.c | 3 | ||||
-rw-r--r-- | src/inputStream_file.h | 2 | ||||
-rw-r--r-- | src/inputStream_http.c | 50 | ||||
-rw-r--r-- | src/inputStream_http.h | 2 |
6 files changed, 65 insertions, 1 deletions
diff --git a/src/decode.c b/src/decode.c index e81cddb76..c42d130d6 100644 --- a/src/decode.c +++ b/src/decode.c @@ -486,7 +486,9 @@ void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * cb) { pc->queueState = PLAYER_QUEUE_DECODE; kill(getppid(),SIGUSR1); } - if(next>=0 && doCrossFade==0 && !dc->start) { + if(next>=0 && doCrossFade==0 && !dc->start && + dc->state!=DECODE_STATE_START) + { nextChunk = -1; if(isCurrentAudioFormat(&(cb->audioFormat))) { doCrossFade = 1; diff --git a/src/inputStream.c b/src/inputStream.c index e15788a13..465ea63eb 100644 --- a/src/inputStream.c +++ b/src/inputStream.c @@ -25,6 +25,11 @@ #include <sys/types.h> #include <unistd.h> +void initInputStream() { + inputStream_initFile(); + inputStream_initHttp(); +} + int openInputStream(InputStream * inStream, char * url) { inStream->offset = 0; inStream->size = 0; diff --git a/src/inputStream_file.c b/src/inputStream_file.c index 5d88fa5ac..ac0b2d173 100644 --- a/src/inputStream_file.c +++ b/src/inputStream_file.c @@ -23,6 +23,9 @@ #include <unistd.h> #include <errno.h> +void inputStream_initFile() { +} + int inputStream_fileOpen(InputStream * inStream, char * filename) { FILE * fp; diff --git a/src/inputStream_file.h b/src/inputStream_file.h index b4b53f3c0..e45fe714e 100644 --- a/src/inputStream_file.h +++ b/src/inputStream_file.h @@ -21,6 +21,8 @@ #include "inputStream.h" +void inputStream_initFile(); + int inputStream_fileOpen(InputStream * inStream, char * filename); int inputStream_fileSeek(InputStream * inStream, long offset, int whence); diff --git a/src/inputStream_http.c b/src/inputStream_http.c index 66e98b5a8..7ea4470a4 100644 --- a/src/inputStream_http.c +++ b/src/inputStream_http.c @@ -20,6 +20,7 @@ #include "utils.h" #include "log.h" +#include "conf.h" #include <stdio.h> #include <sys/time.h> @@ -61,6 +62,55 @@ typedef struct _InputStreemHTTPData { int icyOffset; } InputStreamHTTPData; +void inputStream_initHttp() { + if(getConf()[CONF_HTTP_PROXY_HOST]) { + char * portStr = getConf()[CONF_HTTP_PROXY_PORT]; + int port = 0; + char * test; + + if(!portStr) { + ERROR("http_proxy_host specified but not the http_" + "proxy_port\n"); + exit(EXIT_FAILURE); + } + + port = strtol(portStr, &test, 10); + if(port <= 0 || *test != '\0') { + ERROR("http_proxy_port \"%s\" is not a positive integer" + "\n", portStr); + } + + if(getConf()[CONF_HTTP_PROXY_USER] && + !getConf()[CONF_HTTP_PROXY_PASSWORD]) + { + ERROR("http_proxy_user specified, but not http_proxy_" + "password\n"); + exit(EXIT_FAILURE); + } + + if(getConf()[CONF_HTTP_PROXY_PASSWORD] && + !getConf()[CONF_HTTP_PROXY_USER]) + { + ERROR("http proxy password specified, but not http " + "proxy user\n"); + exit(EXIT_FAILURE); + } + } + else if(getConf()[CONF_HTTP_PROXY_PORT]) { + ERROR("http_proxy_port specified but not http_proxy_host\n"); + exit(EXIT_FAILURE); + } + else if(getConf()[CONF_HTTP_PROXY_USER]) { + ERROR("http_proxy_user specified but not http_proxy_host\n"); + exit(EXIT_FAILURE); + } + else if(getConf()[CONF_HTTP_PROXY_PASSWORD]) { + ERROR("http_proxy_password specified but not http_proxy_host" + "\n"); + exit(EXIT_FAILURE); + } +} + static InputStreamHTTPData * newInputStreamHTTPData() { InputStreamHTTPData * ret = malloc(sizeof(InputStreamHTTPData)); diff --git a/src/inputStream_http.h b/src/inputStream_http.h index 021ae2c76..4e213cd57 100644 --- a/src/inputStream_http.h +++ b/src/inputStream_http.h @@ -21,6 +21,8 @@ #include "inputStream.h" +void inputStream_initHttp(); + int inputStream_httpOpen(InputStream * inStream, char * filename); int inputStream_httpSeek(InputStream * inStream, long offset, int whence); |