diff options
author | Oleg Pudeyev <oleg@bsdpower.com> | 2014-01-15 00:47:18 -0800 |
---|---|---|
committer | Oleg Pudeyev <oleg@bsdpower.com> | 2014-01-15 00:47:18 -0800 |
commit | f3d35fb0a5494c7e1d4c9ac49157bd3360773a94 (patch) | |
tree | 794253d30f3d72660b66774613f1d0967e818d5c | |
parent | d3a39a5e750a7336fe8f05e68327cc97b53da31d (diff) | |
parent | baa6bd7141c765590734b4197c2d2a6452a3e46b (diff) | |
download | pycurl-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-- | ChangeLog | 5 | ||||
-rw-r--r-- | src/pycurl.c | 22 | ||||
-rw-r--r-- | tests/multi_option_constants_test.py | 24 |
3 files changed, 48 insertions, 3 deletions
@@ -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() |