Adding support for seeking HTTP streams.
git-svn-id: https://svn.musicpd.org/mpd/trunk@5159 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
202ae2270d
commit
9bdb0b0df2
@ -285,7 +285,6 @@ static void decodeStart(PlayerControl * pc, OutputBuffer * cb,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dc->seekable = inStream.seekable;
|
|
||||||
dc->state = DECODE_STATE_START;
|
dc->state = DECODE_STATE_START;
|
||||||
dc->start = 0;
|
dc->start = 0;
|
||||||
|
|
||||||
@ -295,6 +294,9 @@ static void decodeStart(PlayerControl * pc, OutputBuffer * cb,
|
|||||||
my_usleep(1000);
|
my_usleep(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* for http streams, seekable is determined in bufferInputStream */
|
||||||
|
dc->seekable = inStream.seekable;
|
||||||
|
|
||||||
if (dc->stop) {
|
if (dc->stop) {
|
||||||
dc->state = DECODE_STATE_STOP;
|
dc->state = DECODE_STATE_STOP;
|
||||||
dc->stop = 0;
|
dc->stop = 0;
|
||||||
|
@ -480,11 +480,11 @@ static int finishHTTPInit(InputStream * inStream)
|
|||||||
snprintf(request, 2048, "GET %s HTTP/1.0\r\n" "Host: %s\r\n"
|
snprintf(request, 2048, "GET %s HTTP/1.0\r\n" "Host: %s\r\n"
|
||||||
/*"Connection: close\r\n" */
|
/*"Connection: close\r\n" */
|
||||||
"User-Agent: %s/%s\r\n"
|
"User-Agent: %s/%s\r\n"
|
||||||
/*"Range: bytes=%ld-\r\n" */
|
"Range: bytes=%ld-\r\n"
|
||||||
"%s" /* authorization */
|
"%s" /* authorization */
|
||||||
"Icy-Metadata:1\r\n"
|
"Icy-Metadata:1\r\n"
|
||||||
"\r\n", data->path, data->host, PACKAGE_NAME, PACKAGE_VERSION,
|
"\r\n", data->path, data->host, PACKAGE_NAME, PACKAGE_VERSION,
|
||||||
/*inStream->offset, */
|
inStream->offset,
|
||||||
data->proxyAuth ? data->proxyAuth :
|
data->proxyAuth ? data->proxyAuth :
|
||||||
(data->httpAuth ? data->httpAuth : "")
|
(data->httpAuth ? data->httpAuth : "")
|
||||||
);
|
);
|
||||||
@ -681,9 +681,6 @@ static int getHTTPHello(InputStream * inStream)
|
|||||||
|
|
||||||
data->prebuffer = 1;
|
data->prebuffer = 1;
|
||||||
|
|
||||||
/*mark as unseekable till we actually implement seeking */
|
|
||||||
inStream->seekable = 0;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -714,21 +711,31 @@ int inputStream_httpOpen(InputStream * inStream, char *url)
|
|||||||
|
|
||||||
int inputStream_httpSeek(InputStream * inStream, long offset, int whence)
|
int inputStream_httpSeek(InputStream * inStream, long offset, int whence)
|
||||||
{
|
{
|
||||||
/* hack to reopen an HTTP stream if we're trying to seek to
|
if (!inStream->seekable)
|
||||||
* the beginning */
|
return -1;
|
||||||
if ((whence == SEEK_SET) && (offset == 0)) {
|
|
||||||
InputStreamHTTPData *data;
|
|
||||||
|
|
||||||
data = (InputStreamHTTPData *) inStream->data;
|
switch (whence) {
|
||||||
close(data->sock);
|
case SEEK_SET:
|
||||||
data->connState = HTTP_CONN_STATE_REOPEN;
|
inStream->offset = offset;
|
||||||
data->buflen = 0;
|
break;
|
||||||
inStream->offset = 0;
|
case SEEK_CUR:
|
||||||
return 0;
|
inStream->offset += offset;
|
||||||
|
break;
|
||||||
|
case SEEK_END:
|
||||||
|
inStream->offset = inStream->size + offset;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* otherwise, we don't know how to seek in HTTP yet */
|
InputStreamHTTPData *data = (InputStreamHTTPData *)inStream->data;
|
||||||
return -1;
|
close(data->sock);
|
||||||
|
data->connState = HTTP_CONN_STATE_REOPEN;
|
||||||
|
data->buflen = 0;
|
||||||
|
|
||||||
|
inputStream_httpBuffer(inStream);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parseIcyMetadata(InputStream * inStream, char *metadata, int size)
|
static void parseIcyMetadata(InputStream * inStream, char *metadata, int size)
|
||||||
|
Loading…
Reference in New Issue
Block a user