aboutsummaryrefslogtreecommitdiff
path: root/src/input_curl.c
Commit message (Collapse)AuthorAge
* input_curl: follow HTTP redirectsMax Kellermann2008-11-30
| | | | Follow HTTP redirects, but no more than 5.
* input_curl: send a User-Agent headerMax Kellermann2008-11-30
| | | | | Send "Music Player Daemon " + VERSION as the User-Agent request header.
* input_curl: disable Icy-MetadataMax Kellermann2008-11-25
| | | | | | input_curl.c does not support parsing shoutcast metadata yet. Disable the "Icy-Metadata" header for now, since it may cause corruptions in the stream.
* input_curl.c: replaced mpd_unused by G_GNUC_UNUSEDThomas Jansen2008-11-24
|
* input_curl: try to seek by fast-forwarding the bufferMax Kellermann2008-11-21
| | | | | | If the caller attempts to seek only a few bytes forward, chances are good that the offset is already in the buffer. In this case, simply fast-forward the buffer.
* input_curl: moved code to consume_buffer()Max Kellermann2008-11-21
| | | | Added some assertions.
* input_curl: don't do temporary calculations with input_stream.offsetMax Kellermann2008-11-21
| | | | | | | If someone calls seek() with an invalid (negative) offset, the curl implementation of that method returned false, but left this invalid offset in input_stream.offset. Move the calculation to a temporary variable.
* input_curl: don't fail when seek to EOF is requestedMax Kellermann2008-11-20
| | | | | | | HTTP servers respond with "416 Requested Range Not Satisfiable" when a client attempts to seek to the end of the file. Catch this special case in input_curl_seek(). This fixes a glitch in the ogg vorbis decoder plugin.
* curl: don't check running_handles for EOFMax Kellermann2008-11-20
| | | | | | Since we are using curl_multi_info_read() / CURLMSG_DONE for detecting end-of-response, we can remove all running_handles==0 checks. For some reason, that has never worked correctly.
* input_curl: always set eof=true on CURLMSG_DONEMax Kellermann2008-11-20
| | | | | | | curl_multi_info_read() is the authoritative source of the "end-of-response" information. Always set c->eof when a CURLMSG_DONE message is received, and check the result (success/failure) after that.
* input_stream: size==-1 means unknown sizeMax Kellermann2008-11-16
| | | | | | Define the special value "-1" as "unknown size". Previously, there was no indicator for streams with unknown size, which might confuse some decoders.
* input_curl: retrieve error message from ERRORBUFFERMax Kellermann2008-11-06
| | | | | libcurl provides better error messages than curl_multi_strerror() when you set the ERRORBUFFER option.
* input_curl: return 0 on error from read()Max Kellermann2008-11-06
| | | | | | The read() method must not return a negative value. Make it return 0 on error, just like the file input stream. Also set the "error" attribute to -1.
* input_curl: enable FAILONERRORMax Kellermann2008-11-06
| | | | | | | I had this option enabled during development, but at some point, it must have gotten lost. FAILONERROR makes the curl stream fail when the server returns a status code 400 or higher. We are not interested in the server's error document.
* input_curl: use curl_multi_info_read()Max Kellermann2008-11-03
| | | | | The function curl_multi_info_read() provides access to errors from the curl easy interface.
* input_curl: buffered rewindingMax Kellermann2008-11-02
| | | | | | | | During codec detection, the beginning of the stream is consumed. This is a common operation, which takes a lot of time when handling remote resources. To optimize this, remember the first 64 kB of a stream. This way, we can rewind the stream without actually fetching the start of the stream again.
* input_stream: convert offset and size to the off_t data typeMax Kellermann2008-10-28
| | | | | | size_t and long aren't 64 bit safe (i.e. files larger than 2 GB on a 32 bit OS). Use off_t instead, which is a 64 bit integer if compiled with large file support.
* input_file, input_curl: check URL type before attempting to openMax Kellermann2008-10-27
| | | | | Don't attempt to open a HTTP URL as a local file, and don't send a local path to libcurl.
* curl: read stream name from HTTP response headersMax Kellermann2008-10-26
| | | | | If the server sends the headers "icy-name", "ice-name", "x-audiocast-name", set the stream title.
* input_curl: set input_stream.mime from Content-Type response headerMax Kellermann2008-10-26
|
* input_curl: added local variable "value"Max Kellermann2008-10-26
| | | | | | Replaced the local variable "colon" (which had only temporary meaning) with the variable "value". It is a pointer to the first byte of the header value.
* input_stream: use "bool" instead of "int"Max Kellermann2008-10-26
| | | | | For boolean values and success flags, use bool instead of integer (1/0 for true/false, 0/-1 for success/failure).
* input_stream: input_stream_close() returns voidMax Kellermann2008-10-26
| | | | close() shouldn't fail with read-only streams.
* input_stream: added struct input_pluginMax Kellermann2008-10-26
| | | | | | | Instead of managing a set of method pointers in each input_stream struct, move these into the new input_plugin struct. Each input_stream has only a pointer to the plugin struct. Pointers to all implementations are kept in the array "input_plugins".
* input_stream: renamed sources, no CamelCaseMax Kellermann2008-10-26
| | | | Renamed inputStream.c and inputStream_file.c.
* http: use libcurlMax Kellermann2008-10-26
MPD's HTTP client code has always been broken, no matter how effort was put into fixing it. Replace it with libcurl, which is known to be quite stable. This adds a fat library dependency, but only for people who need streaming.