aboutsummaryrefslogtreecommitdiffstats
path: root/src/input/curl_input_plugin.c (unfollow)
Commit message (Collapse)AuthorFilesLines
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
2009-12-14input_plugin: method init() returns errors with GErrorMax Kellermann1-1/+2
Not used by any plugin currently, but this eliminates the g_error() call in input_plugin_config(), so it's worth it.
2009-11-12include config.h in all sourcesMax Kellermann1-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.
2009-11-10configure.ac: require GLib 2.12Max Kellermann1-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.
2009-10-13input/curl: fixed endless loop during bufferingMax Kellermann1-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
2009-10-13tag: removed the "_ITEM_" suffix from the enum namesMax Kellermann1-3/+3
2009-10-13configure.ac: require GLib 2.16Max Kellermann1-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.
2009-10-11input_stream: use "goffset" instead of "off_t"Max Kellermann1-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.
2009-10-11input/curl: don't abort if a packet has only metadataMax Kellermann1-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).
2009-10-11input/curl: moved code to fill_buffer()Max Kellermann1-27/+40
2009-04-28input_curl: use g_ascii_strcasecmp() instead of strcasecmp()Max Kellermann1-7/+7
strcasecmp() is locale dependent, making it a bad choice for internal string comparisons.
2009-04-25curl: moved proxy settings to "input" blockMax Kellermann1-24/+26
The old global settings "http_proxy_host", "http_proxy_port", "http_proxy_user" and "http_proxy_password" continue to work.
2009-03-27Add winsock2 headers for curl's use of select() on socketsSean McNamara1-1/+7
2009-03-13all: Update copyright header.Avuton Olrich1-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.
2009-03-06curl: reverse GLIB_CHECK_VERSION()Max Kellermann1-1/+1
The GLIB_CHECK_VERSION() macro was used improperly, which broke build on GLib < 2.14. Add a "!" for negation.
2009-03-02input: pass config_param to input_plugin.init()Max Kellermann1-1/+2
Allow input plugins to configure with an "input" block in mpd.conf. Also allow the user to disable a plugin completely.
2009-03-02input_plugin: added methods init(), finish()Max Kellermann1-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.
2009-03-02input: moved plugins to ./src/input/Max Kellermann1-1/+1
Create a sub directory for input plugins.
2009-03-02input_stream: moved struct input_plugin to input_plugin.hMax Kellermann1-1/+1
Start to separate private from public input_stream API.
2009-03-01use GLIB_CHECK_VERSION()Max Kellermann1-1/+1
Use GLIB_CHECK_VERSION() instead of manually checking GLIB_MAJOR_VERSION, ...
2009-02-17input_file, input_curl, icy_metadata: added GLib log domainsMax Kellermann1-0/+3
Define G_LOG_DOMAIN.
2009-01-30input_stream: let the implementation assign is->pluginMax Kellermann1-0/+1
This way, plugins can manipulate the plugin pointer during open().
2009-01-25use config_get_string() instead of config_get_param()Max Kellermann1-11/+12
config_get_string() is easier to use than config_get_param() because it unpacks the config_param struct.
2009-01-17conf: no CamelCase, part IMax Kellermann1-8/+8
Renamed functions, types, variables.
2009-01-15input_curl: don't call input_curl_select() when already at EOFMax Kellermann1-1/+3
Calling input_curl_select() after EOF has been reached causes an assertion failure. This can happen if the HTTP response is empty. Check c->eof before calling input_curl_select().
2009-01-15input_curl: set "ready" flag on EOFMax Kellermann1-0/+5
Set the "ready" flag for empty resources.
2009-01-15input_curl: call curl_multi_info_read() in constructorMax Kellermann1-0/+6
To check for early connect failures, call curl_multi_info_read() in the constructor input_curl_open(). This fixes an assertion failure.
2009-01-15input_curl: added fallback for g_queue_clear()Max Kellermann1-0/+5
g_queue_clear() was introduced in GLib 2.14. Add a macro hack for older GLib versions to emulate it.
2009-01-13input_curl: honour http_proxy_* config directivesJoe Milbourn1-0/+30
If http_proxy_{host, port, user, password} are provided in mpd.conf they are not passed on to libcurl. As a result mpd cannot stream from behind an http proxy. The attached patch `http_proxy.patch` makes the relevant calls to curl_easy_setopt(...) for all proxy configuration parameters, but is only tested for host and port.
2009-01-13input_curl: use select() to eliminate busy loop during connectMax Kellermann1-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.
2009-01-07curl: use GQueue instead of dlist.h for buffer listMax Kellermann1-69/+138
Get rid of the non-portable Linux list library, part II.
2009-01-07input_curl: disable "seekable" when icy-metadata is enabledMax Kellermann1-1/+1
Fix a typo in the icy-metadata patch.
2009-01-03input_curl: enabled Icy-Metadata supportMax Kellermann1-10/+93
2009-01-03input_stream: added tag() methodMax Kellermann1-2/+33
The tag() method reads a tag from the stream. This replaces the meta_name and meta_title attributes.
2008-11-30input_curl: follow HTTP redirectsMax Kellermann1-0/+2
Follow HTTP redirects, but no more than 5.
2008-11-30input_curl: send a User-Agent headerMax Kellermann1-0/+3
Send "Music Player Daemon " + VERSION as the User-Agent request header.
2008-11-25input_curl: disable Icy-MetadataMax Kellermann1-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.
2008-11-24input_curl.c: replaced mpd_unused by G_GNUC_UNUSEDThomas Jansen1-2/+1
2008-11-21input_curl: try to seek by fast-forwarding the bufferMax Kellermann1-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.
2008-11-21input_curl: moved code to consume_buffer()Max Kellermann1-12/+26
Added some assertions.
2008-11-21input_curl: don't do temporary calculations with input_stream.offsetMax Kellermann1-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.
2008-11-20input_curl: don't fail when seek to EOF is requestedMax Kellermann1-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.