aboutsummaryrefslogtreecommitdiffstats
path: root/src/input_curl.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* input_curl: use select() to eliminate busy loop during connectMax Kellermann2009-01-131-0/+6
| | | | | | | When decoder_run_song() (decoder_thread.c) waits for the input stream to become ready, it did that in a busy loop. Add a select() call to input_curl_buffer() during connect/handshake (i.e. before the first chunk of body data was received), to let the CPU relax.
* curl: use GQueue instead of dlist.h for buffer listMax Kellermann2009-01-071-69/+138
| | | | Get rid of the non-portable Linux list library, part II.
* input_curl: disable "seekable" when icy-metadata is enabledMax Kellermann2009-01-071-1/+1
| | | | Fix a typo in the icy-metadata patch.
* input_curl: enabled Icy-Metadata supportMax Kellermann2009-01-031-10/+93
|
* input_stream: added tag() methodMax Kellermann2009-01-031-2/+33
| | | | | The tag() method reads a tag from the stream. This replaces the meta_name and meta_title attributes.
* input_curl: follow HTTP redirectsMax Kellermann2008-11-301-0/+2
| | | | Follow HTTP redirects, but no more than 5.
* input_curl: send a User-Agent headerMax Kellermann2008-11-301-0/+3
| | | | | Send "Music Player Daemon " + VERSION as the User-Agent request header.
* input_curl: disable Icy-MetadataMax Kellermann2008-11-251-0/+2
| | | | | | 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-241-2/+1
|
* input_curl: try to seek by fast-forwarding the bufferMax Kellermann2008-11-211-0/+26
| | | | | | 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-211-12/+26
| | | | Added some assertions.
* input_curl: don't do temporary calculations with input_stream.offsetMax Kellermann2008-11-211-4/+4
| | | | | | | 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-201-0/+8
| | | | | | | 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-201-7/+1
| | | | | | 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-201-5/+7
| | | | | | | 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-161-0/+4
| | | | | | 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-061-2/+5
| | | | | 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-061-1/+2
| | | | | | 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-061-0/+1
| | | | | | | 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-031-1/+32
| | | | | The function curl_multi_info_read() provides access to errors from the curl easy interface.
* input_curl: buffered rewindingMax Kellermann2008-11-021-3/+115
| | | | | | | | 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-281-6/+5
| | | | | | 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-271-0/+3
| | | | | 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-261-0/+5
| | | | | 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-261-0/+3
|
* input_curl: added local variable "value"Max Kellermann2008-10-261-14/+22
| | | | | | 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-261-8/+8
| | | | | 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-261-2/+1
| | | | close() shouldn't fail with read-only streams.
* input_stream: added struct input_pluginMax Kellermann2008-10-261-7/+11
| | | | | | | 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-261-1/+1
| | | | Renamed inputStream.c and inputStream_file.c.
* http: use libcurlMax Kellermann2008-10-261-0/+493
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.