aboutsummaryrefslogtreecommitdiffstats
path: root/src/input/CurlInputPlugin.cxx (unfollow)
Commit message (Collapse)AuthorFilesLines
2013-01-15input/Curl: simpler GPollFD initialisationMax Kellermann1-5/+2
Using initializer list.
2013-01-15input/Curl: don't remove/add modified GPollFDMax Kellermann1-9/+2
Not necessary, GLib will pick up the updated GPollFD automatically.
2013-01-14Main, IOThread: move GMainLoop setup code to class EventLoopMax Kellermann1-1/+3
2013-01-10input/curl: use std::list instead of GQueueMax Kellermann1-93/+80
2013-01-10icy_metadata: convert to C++Max Kellermann1-13/+11
2013-01-10input/Curl: add constructor to input_curl classMax Kellermann1-32/+30
2013-01-10input/Curl: remove unused source/source_id attributesMax Kellermann1-7/+0
2013-01-10input/Curl: remove redundant attribute "url"Max Kellermann1-4/+2
Use the "url" attribute from the base class instead.
2013-01-10input/Curl: use std::forward_list instead of GSListMax Kellermann1-27/+21
2013-01-10input/Curl: remove unused attribute "fds"Max Kellermann1-3/+1
2013-01-10input/Curl: require libcurl 7.18Max Kellermann1-24/+4
2013-01-10io_thread: convert to C++Max Kellermann1-1/+1
2013-01-10input/{curl,soup}: convert to C++Max Kellermann1-37/+47
2012-04-04input/curl: use g_source_get_time()Max Kellermann1-12/+5
g_source_get_current_time() is deprecated since GLib 2.28. This patch adds a compatibility wrapper for older GLib versions to glib_compat.h.
2011-09-16input_stream: non-blocking I/OMax Kellermann1-72/+36
Add GMutex, GCond attributes which will be used by callers to conditionally wait on the stream. Remove the (now-useless) plugin method buffer(), wait on GCond instead. Lock the input_stream before each method call. Do the same with the playlist plugins.
2011-09-16input_plugin: add method check()Max Kellermann1-0/+18
To check for errors without reading. The decoder thread wants to do that, before it passes the input stream to the plugin.
2011-09-16input/{soup,curl}: free unused postponed_errorMax Kellermann1-0/+5
Fix memory leak.
2011-09-16input/curl: wait some more before resuming the streamMax Kellermann1-1/+6
Pausing and resuming after every little chunk adds lots of overhead. Add a lower level for resuming the stream.
2011-09-16input/curl: clear the "paused" flag before resumingMax Kellermann1-1/+1
curl_easy_pause(CURLPAUSE_CONT) may have added enough data to go into pause again.
2011-09-16input/curl: remove _schedule_update()Max Kellermann1-48/+1
Call _update_fds() directly. This is possible because it's only called from within the I/O thread.
2011-09-16input/curl: unlock the mutex for io_thread_call()Max Kellermann1-1/+4
Fix deadlock.
2011-09-16input/curl, output/pulse: fix "unused local variable" warningsMax Kellermann1-1/+1
2011-09-15input/curl: per-request mutex/condMax Kellermann1-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.
2011-09-15input/curl: move all libCURL calls to the I/O threadMax Kellermann1-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.
2011-09-15input/curl: don't set "ready" on _easy_free()Max Kellermann1-3/+2
Move the assignment to _request_done(), right before the GCond is signalled. This might fix spurious wakeups.
2011-09-15input/curl: add assertions on io_thread_inside()Max Kellermann1-0/+9
2011-09-15input/curl: merge _request_abort() into _request_done()Max Kellermann1-31/+19
This is a trivial function. Merge some duplicate code, e.g. the g_cond_broadcast() call.
2011-09-15input/curl: API documentation fixMax Kellermann1-1/+1
2011-09-14input_stream: move input_stream_init(), _deinit() to _internal.cMax Kellermann1-0/+1
2011-08-26input/curl: implement a hard-coded timeout of 10 secondsMax Kellermann1-0/+3
Be sure to stop the operation at some point when the server isn't responding.
2011-08-25input/curl: use the I/O threadMax Kellermann1-222/+653
Background buffering and better timeout handling. This patch sort of obsoletes the input_plugin method buffer().
2011-08-25input/curl: eliminate attribute "eof"Max Kellermann1-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.
2011-08-25input/curl: release "easy" CURL handle as early as possibleMax Kellermann1-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.
2011-08-25input/curl: move code to input_curl_flush_buffers()Max Kellermann1-3/+9
Allow closing the handle while preserving the remaining buffers.
2011-08-25input/curl: pass input_curl to fill_buffer()Max Kellermann1-4/+3
Remove a cast.
2011-08-25input/curl: set GError when init() failsMax Kellermann1-2/+3
Let the caller know what happened, he's responsible for logging.
2011-08-24input/curl: remove obsolete function input_curl_reinit()Max Kellermann1-12/+0
2011-08-23input/curl: limit the receive buffer sizeMax Kellermann1-0/+30
2011-01-29copyright year 2011Max Kellermann1-1/+1
2011-01-29input/curl: enable CURLOPT_NETRCIan Zimmerman1-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.
2010-09-07input/curl: fix version check for curl_multi_timeout()Max Kellermann1-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
2010-07-20input/curl: remove assertion after curl_multi_fdset()Max Kellermann1-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.
2010-07-20input/curl: query timeout from CURLMax Kellermann1-1/+18
Use curl_multi_timeout() to determine the select() timeout, instead of hard-coding one second.
2010-01-18input_stream: added attribute "uri"Max Kellermann1-1/+1
2010-01-18input_stream: added function input_stream_deinit()Max Kellermann1-0/+1
All close() implementations must call this method.
2010-01-01input_stream: return allocated input_stream objectsMax Kellermann1-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).
2009-12-31Update copyright notices.Avuton Olrich1-1/+1
2009-12-30input/curl: removed the built-in rewinding codeMax Kellermann1-181/+10
This has been reimplemented in the "rewind" input plugin.
2009-12-29input/rewind: new input_stream wrapper to allow stream rewindingMax Kellermann1-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).
2009-12-15input_stream: return errors with GErrorMax Kellermann1-36/+61