summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleg Pudeyev <oleg@bsdpower.com>2014-01-15 00:47:18 -0800
committerOleg Pudeyev <oleg@bsdpower.com>2014-01-15 00:47:18 -0800
commitf3d35fb0a5494c7e1d4c9ac49157bd3360773a94 (patch)
tree794253d30f3d72660b66774613f1d0967e818d5c
parentd3a39a5e750a7336fe8f05e68327cc97b53da31d (diff)
parentbaa6bd7141c765590734b4197c2d2a6452a3e46b (diff)
downloadpycurl-f3d35fb0a5494c7e1d4c9ac49157bd3360773a94.tar.gz
Merge pull request #156 from p-push/curl-7-30-0-pipeline-options
Curl 7 30 0 pipeline options
-rw-r--r--ChangeLog5
-rw-r--r--src/pycurl.c22
-rw-r--r--tests/multi_option_constants_test.py24
3 files changed, 48 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 7898fbd..311eaa5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,11 @@
master
------
+ * Added CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE,
+ CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLMOPT_MAX_HOST_CONNECTIONS
+ CURLMOPT_MAX_PIPELINE_LENGTH, CURLMOPT_MAX_TOTAL_CONNECTIONS
+ multi options (patch by Jakob Truelsen).
+
* SSL detection logic changed to consult `curl-config --static-libs`
even if `curl-config --libs` succeeded. This should achieve
pre-7.19.3 behavior with respect to automatic SSL detection.
diff --git a/src/pycurl.c b/src/pycurl.c
index 0a9f7b8..9612868 100644
--- a/src/pycurl.c
+++ b/src/pycurl.c
@@ -117,6 +117,10 @@
#define HAVE_CURL_REDIR_POST_303
#endif
+#if LIBCURL_VERSION_NUM >= 0x071E00 /* check for 7.30.0 or greater */
+#define HAVE_CURL_7_30_0_PIPELINE_OPTS
+#endif
+
/* Python < 2.5 compat for Py_ssize_t */
#if PY_VERSION_HEX < 0x02050000
typedef int Py_ssize_t;
@@ -3200,10 +3204,15 @@ do_multi_setopt(CurlMultiObject *self, PyObject *args)
if (PyInt_Check(obj)) {
long d = PyInt_AsLong(obj);
switch(option) {
- case CURLMOPT_PIPELINING:
- curl_multi_setopt(self->multi_handle, option, d);
- break;
case CURLMOPT_MAXCONNECTS:
+ case CURLMOPT_PIPELINING:
+#ifdef HAVE_CURL_7_30_0_PIPELINE_OPTS
+ case CURLMOPT_MAX_HOST_CONNECTIONS:
+ case CURLMOPT_MAX_TOTAL_CONNECTIONS:
+ case CURLMOPT_MAX_PIPELINE_LENGTH:
+ case CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE:
+ case CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE:
+#endif
curl_multi_setopt(self->multi_handle, option, d);
break;
default:
@@ -4870,6 +4879,13 @@ initpycurl(void)
insint_c(d, "M_SOCKETFUNCTION", CURLMOPT_SOCKETFUNCTION);
insint_c(d, "M_PIPELINING", CURLMOPT_PIPELINING);
insint_c(d, "M_MAXCONNECTS", CURLMOPT_MAXCONNECTS);
+#ifdef HAVE_CURL_7_30_0_PIPELINE_OPTS
+ insint_c(d, "M_MAX_HOST_CONNECTIONS", CURLMOPT_MAX_HOST_CONNECTIONS);
+ insint_c(d, "M_MAX_TOTAL_CONNECTIONS", CURLMOPT_MAX_TOTAL_CONNECTIONS);
+ insint_c(d, "M_MAX_PIPELINE_LENGTH", CURLMOPT_MAX_PIPELINE_LENGTH);
+ insint_c(d, "M_CONTENT_LENGTH_PENALTY_SIZE", CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE);
+ insint_c(d, "M_CHUNK_LENGTH_PENALTY_SIZE", CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE);
+#endif
/* constants for setopt(IPRESOLVE, x) */
insint_c(d, "IPRESOLVE_WHATEVER", CURL_IPRESOLVE_WHATEVER);
diff --git a/tests/multi_option_constants_test.py b/tests/multi_option_constants_test.py
new file mode 100644
index 0000000..d44976c
--- /dev/null
+++ b/tests/multi_option_constants_test.py
@@ -0,0 +1,24 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+# vi:ts=4:et
+
+import pycurl
+import unittest
+
+from . import util
+
+class MultiOptionConstantsTest(unittest.TestCase):
+ @util.min_libcurl(7, 30, 0)
+ def test_multi_pipeline_opts(self):
+ assert hasattr(pycurl, 'M_MAX_HOST_CONNECTIONS')
+ assert hasattr(pycurl, 'M_MAX_PIPELINE_LENGTH')
+ assert hasattr(pycurl, 'M_CONTENT_LENGTH_PENALTY_SIZE')
+ assert hasattr(pycurl, 'M_CHUNK_LENGTH_PENALTY_SIZE')
+ assert hasattr(pycurl, 'M_MAX_TOTAL_CONNECTIONS')
+ m = pycurl.CurlMulti()
+ m.setopt(pycurl.M_MAX_HOST_CONNECTIONS, 2)
+ m.setopt(pycurl.M_MAX_PIPELINE_LENGTH, 2)
+ m.setopt(pycurl.M_CONTENT_LENGTH_PENALTY_SIZE, 2)
+ m.setopt(pycurl.M_CHUNK_LENGTH_PENALTY_SIZE, 2)
+ m.setopt(pycurl.M_MAX_TOTAL_CONNECTIONS, 2)
+ m.close()