aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-01-10 20:46:47 +0100
committerMax Kellermann <max@duempel.org>2013-01-10 20:46:47 +0100
commit3bb711837ebd0514c9a55c992d3a98cd39dfe086 (patch)
treef5281fffddc697dfb8d896106229a14ece899a03
parented8798e82fc59a0007447fd41c32416f809c0410 (diff)
downloadmpd-3bb711837ebd0514c9a55c992d3a98cd39dfe086.tar.gz
mpd-3bb711837ebd0514c9a55c992d3a98cd39dfe086.tar.xz
mpd-3bb711837ebd0514c9a55c992d3a98cd39dfe086.zip
input/Curl: require libcurl 7.18
Diffstat (limited to '')
-rw-r--r--configure.ac2
-rw-r--r--src/input/CurlInputPlugin.cxx28
2 files changed, 5 insertions, 25 deletions
diff --git a/configure.ac b/configure.ac
index f9c7a0caa..1cd27ffe5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -691,7 +691,7 @@ dnl Input Plugins
dnl ---------------------------------------------------------------------------
dnl ----------------------------------- CURL ----------------------------------
-MPD_AUTO_PKG(curl, CURL, [libcurl],
+MPD_AUTO_PKG(curl, CURL, [libcurl >= 7.18],
[libcurl HTTP streaming], [libcurl not found])
if test x$enable_curl = xyes; then
AC_DEFINE(ENABLE_CURL, 1, [Define when libcurl is used for HTTP streaming])
diff --git a/src/input/CurlInputPlugin.cxx b/src/input/CurlInputPlugin.cxx
index 8210a8432..c4f9ef0d6 100644
--- a/src/input/CurlInputPlugin.cxx
+++ b/src/input/CurlInputPlugin.cxx
@@ -45,6 +45,10 @@ extern "C" {
#include <curl/curl.h>
#include <glib.h>
+#if LIBCURL_VERSION_NUM < 0x071200
+#error libcurl is too old
+#endif
+
#undef G_LOG_DOMAIN
#define G_LOG_DOMAIN "input_curl"
@@ -99,14 +103,12 @@ struct input_curl {
to, and input_curl_read() reads from them */
GQueue *buffers;
-#if LIBCURL_VERSION_NUM >= 0x071200
/**
* Is the connection currently paused? That happens when the
* buffer was getting too large. It will be unpaused when the
* buffer is below the threshold again.
*/
bool paused;
-#endif
/** error message provided by libcurl */
char error[CURL_ERROR_SIZE];
@@ -153,7 +155,6 @@ static struct {
GSList *fds;
-#if LIBCURL_VERSION_NUM >= 0x070f04
/**
* Did CURL give us a timeout? If yes, then we need to call
* curl_multi_perform(), even if there was no event on any
@@ -166,7 +167,6 @@ static struct {
* used in the GSource method check().
*/
gint64 absolute_timeout;
-#endif
} curl;
static inline GQuark
@@ -194,8 +194,6 @@ input_curl_find_request(CURL *easy)
return NULL;
}
-#if LIBCURL_VERSION_NUM >= 0x071200
-
static gpointer
input_curl_resume(gpointer data)
{
@@ -211,8 +209,6 @@ input_curl_resume(gpointer data)
return NULL;
}
-#endif
-
/**
* Calculates the GLib event bit mask for one file descriptor,
* obtained from three #fd_set objects filled by curl_multi_fdset().
@@ -551,7 +547,6 @@ input_curl_source_prepare(G_GNUC_UNUSED GSource *source, gint *timeout_r)
{
curl_update_fds();
-#if LIBCURL_VERSION_NUM >= 0x070f04
curl.timeout = false;
long timeout2;
@@ -574,9 +569,6 @@ input_curl_source_prepare(G_GNUC_UNUSED GSource *source, gint *timeout_r)
} else
g_warning("curl_multi_timeout() failed: %s\n",
curl_multi_strerror(mcode));
-#else
- (void)timeout_r;
-#endif
return false;
}
@@ -587,7 +579,6 @@ input_curl_source_prepare(G_GNUC_UNUSED GSource *source, gint *timeout_r)
static gboolean
input_curl_source_check(G_GNUC_UNUSED GSource *source)
{
-#if LIBCURL_VERSION_NUM >= 0x070f04
if (curl.timeout) {
/* when a timeout has expired, we need to call
curl_multi_perform(), even if there was no file
@@ -596,7 +587,6 @@ input_curl_source_check(G_GNUC_UNUSED GSource *source)
if (g_source_get_time(source) >= curl.absolute_timeout)
return true;
}
-#endif
for (GSList *i = curl.fds; i != NULL; i = i->next) {
GPollFD *poll_fd = (GPollFD *)i->data;
@@ -705,8 +695,6 @@ input_curl_finish(void)
curl_global_cleanup();
}
-#if LIBCURL_VERSION_NUM >= 0x071200
-
/**
* Determine the total sizes of all buffers, including portions that
* have already been consumed.
@@ -728,8 +716,6 @@ curl_total_buffer_size(const struct input_curl *c)
return total;
}
-#endif
-
static void
buffer_free_callback(gpointer data, G_GNUC_UNUSED gpointer user_data)
{
@@ -940,13 +926,11 @@ input_curl_read(struct input_stream *is, void *ptr, size_t size,
is->offset += (goffset)nbytes;
-#if LIBCURL_VERSION_NUM >= 0x071200
if (c->paused && curl_total_buffer_size(c) < CURL_RESUME_AT) {
g_mutex_unlock(c->base.mutex);
io_thread_call(input_curl_resume, c);
g_mutex_lock(c->base.mutex);
}
-#endif
return nbytes;
}
@@ -1064,13 +1048,11 @@ input_curl_writefunction(void *ptr, size_t size, size_t nmemb, void *stream)
g_mutex_lock(c->base.mutex);
-#if LIBCURL_VERSION_NUM >= 0x071200
if (curl_total_buffer_size(c) + size >= CURL_MAX_BUFFERED) {
c->paused = true;
g_mutex_unlock(c->base.mutex);
return CURL_WRITEFUNC_PAUSE;
}
-#endif
struct buffer *buffer = (struct buffer *)
g_malloc(sizeof(*buffer) - sizeof(buffer->data) + size);
@@ -1278,9 +1260,7 @@ input_curl_open(const char *url, GMutex *mutex, GCond *cond,
c->postponed_error = NULL;
-#if LIBCURL_VERSION_NUM >= 0x071200
c->paused = false;
-#endif
if (!input_curl_easy_init(c, error_r)) {
input_curl_free(c);