aboutsummaryrefslogtreecommitdiffstats
path: root/src/input/curl_input_plugin.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* input/curl: per-request mutex/condMax Kellermann2011-09-151-33/+35
| | | | | | | The global data structures are now lock-free, because they are accessed only from the I/O thread. By using per-request locks, we have finer grained locking, preparing for locks shared with the client.
* input/curl: move all libCURL calls to the I/O threadMax Kellermann2011-09-151-29/+69
| | | | | | This adds some overheads for indirect calls to the I/O thread, but reduces the amount of global locks. Next step will be switching to per-request locks.
* input/curl: don't set "ready" on _easy_free()Max Kellermann2011-09-151-3/+2
| | | | | Move the assignment to _request_done(), right before the GCond is signalled. This might fix spurious wakeups.
* input/curl: add assertions on io_thread_inside()Max Kellermann2011-09-151-0/+9
|
* input/curl: merge _request_abort() into _request_done()Max Kellermann2011-09-151-31/+19
| | | | | This is a trivial function. Merge some duplicate code, e.g. the g_cond_broadcast() call.
* input/curl: API documentation fixMax Kellermann2011-09-151-1/+1
|
* input_stream: move input_stream_init(), _deinit() to _internal.cMax Kellermann2011-09-141-0/+1
|
* Merge branch 'v0.16.x'Max Kellermann2011-09-011-0/+3
|\ | | | | | | | | | | Conflicts: configure.ac src/output_control.c
| * input/curl: implement a hard-coded timeout of 10 secondsMax Kellermann2011-08-261-0/+3
| | | | | | | | | | Be sure to stop the operation at some point when the server isn't responding.
* | input/curl: use the I/O threadMax Kellermann2011-08-251-222/+653
| | | | | | | | | | Background buffering and better timeout handling. This patch sort of obsoletes the input_plugin method buffer().
* | input/curl: eliminate attribute "eof"Max Kellermann2011-08-251-11/+4
| | | | | | | | | | | | Assume the flag is true when the "easy" CURL handle is NULL. That way, we don't need to keep track if CURL has sent us the "DONE" information yet.
* | input/curl: release "easy" CURL handle as early as possibleMax Kellermann2011-08-251-9/+10
| | | | | | | | | | | | Release it immediately when end-of-file has been reached. We don't need that handle anymore, because the rest is delivered from the buffers.
* | input/curl: move code to input_curl_flush_buffers()Max Kellermann2011-08-251-3/+9
| | | | | | | | Allow closing the handle while preserving the remaining buffers.
* | input/curl: pass input_curl to fill_buffer()Max Kellermann2011-08-251-4/+3
| | | | | | | | Remove a cast.
* | input/curl: set GError when init() failsMax Kellermann2011-08-251-2/+3
| | | | | | | | Let the caller know what happened, he's responsible for logging.
* | input/curl: remove obsolete function input_curl_reinit()Max Kellermann2011-08-241-12/+0
| |
* | Merge branch 'v0.16.x'Max Kellermann2011-08-241-0/+30
|\|
| * input/curl: limit the receive buffer sizeMax Kellermann2011-08-231-0/+30
| |
* | copyright year 2011Max Kellermann2011-01-291-1/+1
| |
* | input/curl: enable CURLOPT_NETRCIan Zimmerman2011-01-291-0/+1
|/ | | | | | | | | | | | | | | | I wanted mpd to play a mp3 stream from a music website. The stream is only available to subscribers, which restriction is enforced through normal http authentication. However, the URL I get from the website is not the final URL of the stream, but a generic URL which points to the real one through a redirect (code 301). Thus, I cannot predict the final URL, and so I cannot use the username:password hack to force the authentication, and mpd (libcurl on mpds behalf) fails to grab the stream. libcurl allows the option CURLOPT_NETRC to be set and then the credentials can be stored in the good old .netrc file (in this case it would be ~mpd/.netrc, of course). But mpd doesn't set this option. I think it should.
* Merge release 0.15.13 from branch 'v0.15.x'Max Kellermann2010-10-111-1/+1
|\ | | | | | | | | | | | | | | Conflicts: NEWS configure.ac src/input/rewind_input_plugin.c src/output/httpd_output_plugin.c
| * input/curl: fix version check for curl_multi_timeout()Max Kellermann2010-09-071-1/+1
| | | | | | | | | | | | | | According to the CURL web site, curl_multi_timeout() was added in version 7.15.4: http://curl.haxx.se/libcurl/c/curl_multi_timeout.html
* | Merge release 0.15.12 from branch 'v0.15.x'Max Kellermann2010-07-201-2/+17
|\| | | | | | | | | | | Conflicts: NEWS configure.ac
| * input/curl: remove assertion after curl_multi_fdset()Max Kellermann2010-07-201-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some users reported that MPD crashes when using a new CURL version with the threaded DNS resolver enabled. It seems that curl_multi_fdset() returns no file descriptor when the DNS resolver runs in another thread, so MPD does not have any event to wait for. On the CURL mailing list, somebody suggested to sleep for a fixed amount of time. This is not an elegant solution, because daemons should never have to sleep without waiting for an event. I hope the CURL developers will review the API and remove the threaded DNS resolver. Meanwhile, I'm removing the assertion in question, to allow those unfortunate users running the latest CURL version to continue using MPD.
| * input/curl: query timeout from CURLMax Kellermann2010-07-201-1/+18
| | | | | | | | | | Use curl_multi_timeout() to determine the select() timeout, instead of hard-coding one second.
* | input_stream: added attribute "uri"Max Kellermann2010-01-181-1/+1
| |
* | input_stream: added function input_stream_deinit()Max Kellermann2010-01-181-0/+1
| | | | | | | | All close() implementations must call this method.
* | input_stream: return allocated input_stream objectsMax Kellermann2010-01-011-50/+47
| | | | | | | | | | | | | | | | Major API redesign: don't let the caller allocate the input_stream object. Let each input plugin allocate its own (derived/extended) input_stream pointer. The "data" attribute can now be removed, and all input plugins simply cast the input_stream pointer to their own structure (with an "struct input_stream base" as the first attribute).
* | Update copyright notices.Avuton Olrich2009-12-311-1/+1
| |
* | Merge vorbis+icy fixes from branch 'v0.15.x'Max Kellermann2009-12-301-181/+22
|\| | | | | | | | | | | | | | | | | Conflicts: Makefile.am NEWS configure.ac src/input/curl_input_plugin.c src/input_stream.c
| * input/curl: removed the built-in rewinding codeMax Kellermann2009-12-301-181/+10
| | | | | | | | This has been reimplemented in the "rewind" input plugin.
| * input/rewind: new input_stream wrapper to allow stream rewindingMax Kellermann2009-12-291-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | This replaces the rewinding buffer code from the CURL input plugin. It is more generic, and allows rewinding even when the server sends Icy-Metadata (which would have been too difficult to implement within the CURL plugin). This is a rather complex patch for the stable branch (v0.15.x), but it fixes a serious problem: the "vorbis" decoder plugin was unable to play streams with Icy-Metadata, because it couldn't rewind the stream after detecting the codec (Vorbis vs. FLAC).
* | input_stream: return errors with GErrorMax Kellermann2009-12-151-36/+61
| |
* | input_plugin: method init() returns errors with GErrorMax Kellermann2009-12-141-1/+2
| | | | | | | | | | Not used by any plugin currently, but this eliminates the g_error() call in input_plugin_config(), so it's worth it.
* | include config.h in all sourcesMax Kellermann2009-11-121-1/+1
| | | | | | | | | | | | After we've been hit by Large File Support problems several times in the past week (which only occur on 32 bit platforms, which I don't have), this is yet another attempt to fix the issue.
* | configure.ac: require GLib 2.12Max Kellermann2009-11-101-0/+1
| | | | | | | | | | | | Drop the required GLib version from 2.16 to 2.12, because many current systems still don't have GLib 2.16. This requires several new compatibility functions in glib_compat.h.
* | Merge branch 'v0.15.x'Max Kellermann2009-10-131-1/+1
|\|
| * input/curl: fixed endless loop during bufferingMax Kellermann2009-10-131-1/+1
| | | | | | | | | | | | | | When the connection is lost while buffering, the CURL input plugin may enter an endless loop, because it does not check the EOF condition. This patch makes fill_buffer() return success only if there's at least one buffer, which is enough of a check.x
* | tag: removed the "_ITEM_" suffix from the enum namesMax Kellermann2009-10-131-3/+3
| |
* | configure.ac: require GLib 2.16Max Kellermann2009-10-131-5/+0
| | | | | | | | | | | | | | Accidently, MPD has been using several GLib 2.16 functions for a while, and nobody noticed yet. To simplify the code base, let's bump the minimum GLib version for MPD to 2.16. That version is old enough, and it's reasonable to expect users to have it.
* | input_stream: use "goffset" instead of "off_t"Max Kellermann2009-10-111-8/+8
|/ | | | | | | | | | | | The "off_t" type may change when you enable or disable large file support on 32 bit platforms. This caused severe ABI problems within MPD when we enabled LFS for the first time: two sources included config.h and sys/types.h in different order, and had different off_t sizes - leading to memory corruption because of ABI incompatibility. This patch attempts to get rid of all public "off_t" uses: it removes "off_t" from the input_stream ABI/API, and switches to GLib's 64 bit "goffset" type. This may hurt 32 bit embedded platforms a tiny bit, but that's not even measurable.
* input/curl: don't abort if a packet has only metadataMax Kellermann2009-10-111-20/+22
| | | | | | | | | When a received chunk of data has only icy-metadata, there was no usable data left for input_curl_read() to return, and thus it returned 0 bytes. "0" however is a special value for "end of file" or "error". This patch makes input_curl_read() read more data from the socket, until the read request can be fulfilled (or until there's really EOF).
* input/curl: moved code to fill_buffer()Max Kellermann2009-10-111-27/+40
|
* input_curl: use g_ascii_strcasecmp() instead of strcasecmp()Max Kellermann2009-04-281-7/+7
| | | | | strcasecmp() is locale dependent, making it a bad choice for internal string comparisons.
* curl: moved proxy settings to "input" blockMax Kellermann2009-04-251-24/+26
| | | | | The old global settings "http_proxy_host", "http_proxy_port", "http_proxy_user" and "http_proxy_password" continue to work.
* Add winsock2 headers for curl's use of select() on socketsSean McNamara2009-03-271-1/+7
|
* all: Update copyright header.Avuton Olrich2009-03-131-6/+7
| | | | | | | | This updates the copyright header to all be the same, which is pretty much an update of where to mail request for a copy of the GPL and the years of the MPD project. This also puts all committers under 'The Music Player Project' umbrella. These entries should go individually in the AUTHORS file, for consistancy.
* curl: reverse GLIB_CHECK_VERSION()Max Kellermann2009-03-061-1/+1
| | | | | The GLIB_CHECK_VERSION() macro was used improperly, which broke build on GLib < 2.14. Add a "!" for negation.
* input: pass config_param to input_plugin.init()Max Kellermann2009-03-021-1/+2
| | | | | Allow input plugins to configure with an "input" block in mpd.conf. Also allow the user to disable a plugin completely.
* input_plugin: added methods init(), finish()Max Kellermann2009-03-021-3/+12
| | | | | | Instead of hard-coding the plugin global initialization in input_stream_global_init(), make it walk the plugin list and initialize all plugins.