aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/decode.c4
-rw-r--r--src/inputStream.c5
-rw-r--r--src/inputStream_file.c3
-rw-r--r--src/inputStream_file.h2
-rw-r--r--src/inputStream_http.c50
-rw-r--r--src/inputStream_http.h2
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);