diff options
author | Jakob Truelsen <jakob@scalgo.com> | 2014-01-13 17:29:44 +0100 |
---|---|---|
committer | Oleg Pudeyev <oleg@bsdpower.com> | 2014-01-14 20:37:38 -0500 |
commit | 3581c970db79920d044c5e74f326e50a5eaad567 (patch) | |
tree | 7b8b84f6567553026aa36451d919e432952c9f9e | |
parent | d3a39a5e750a7336fe8f05e68327cc97b53da31d (diff) | |
download | pycurl-3581c970db79920d044c5e74f326e50a5eaad567.tar.gz |
Expose additional multi options
Expose the multi options:
* CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE
* CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE
* CURLMOPT_MAX_HOST_CONNECTIONS
* CURLMOPT_MAX_PIPELINE_LENGTH
* CURLMOPT_MAX_TOTAL_CONNECTIONS
-rw-r--r-- | src/pycurl.c | 22 | ||||
-rw-r--r-- | tests/multi_test.py | 14 |
2 files changed, 33 insertions, 3 deletions
diff --git a/src/pycurl.c b/src/pycurl.c index 0a9f7b8..5126004 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_PIPELINEOPTS +#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_PIPELINEOPTS + 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_PIPELINEOPTS + 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_test.py b/tests/multi_test.py index 1afa674..c90ca89 100644 --- a/tests/multi_test.py +++ b/tests/multi_test.py @@ -24,6 +24,20 @@ def teardown_module(mod): teardown_module_1(mod) class MultiTest(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) + def test_multi(self): io1 = util.BytesIO() io2 = util.BytesIO() |