Skip to content

Pass resolved (address, port) to opensocket callback.#18

Closed
crass wants to merge 2 commits into
pycurl:masterfrom
crass:opensocket_address_ntop
Closed

Pass resolved (address, port) to opensocket callback.#18
crass wants to merge 2 commits into
pycurl:masterfrom
crass:opensocket_address_ntop

Conversation

@crass

@crass crass commented Aug 15, 2013

Copy link
Copy Markdown

This change brings pycurl closer to supporting all the functionality of libcurl. An example of how this extra information can be used is to create sockets to proxies based on the ultimate address being connected to.

The relevant libcurl docs: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTOPENSOCKETFUNCTION

I created two implementations, the current one returning the address as a string in its dotted decimal form, and the other returning the address as a byte string of its binary form. The current one, I believe is more pythonic and easier to work with. However, the later does not rely on pycurl to understand and be able to create a string representation of the address, which may be an issue of non-IPv4/6 addresses.

Also, both implementations are not strictly backward compatible for existing python programs using this callback because the callback is assumed to accept 4 arguments. The current implementation could get around this by calling the callback with 4 arguments, then check for a TypeError with a message that the function takes 3 arguments, and finally call the function without the 4th address argument. I don't particularly like this option though because it seems a little hackish and brittle to parse/search the error string, which (I don't know) could be different for different languages. It doesn't seem unreasonable to require existing uses to add a 4th parameter or *args to the callback.

Comments welcome.

@p

p commented Sep 20, 2013

Copy link
Copy Markdown
Member

I think I generally agree but this patch will have to wait until 7.19.0.1 is released.

Comment thread src/pycurl.c Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both of these changes are excellent. I generally abhor constant sprinkled in code. What's the best way to handle this? Do you want to make the change on your end? or should I make the changes and overwrite the current pull branch?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can simply make another commit on this branch and push it.

@p

p commented Oct 14, 2013

Copy link
Copy Markdown
Member

Accepted, thanks!

@p p closed this Oct 14, 2013
jsonn pushed a commit to jsonn/pkgsrc that referenced this pull request Jan 19, 2014
Version 7.19.3 [requires libcurl-7.19.0 or better] - 2014-01-09
---------------------------------------------------------------

        * Added CURLOPT_NOPROXY.

        * Added CURLINFO_LOCAL_PORT, CURLINFO_PRIMARY_PORT and
          CURLINFO_LOCAL_IP (patch by Adam Jacob Muller).

        * When running on Python 2.x, for compatibility with Python 3.x,
          Unicode strings containing ASCII code points only are now accepted
          in setopt() calls.

        * PycURL now requires that compile time SSL backend used by libcurl
          is the same as the one used at runtime. setup.py supports
          --with-ssl, --with-gnutls and --with-nss options like libcurl does,
          to specify which backend libcurl uses. On some systems PycURL can
          automatically figure out libcurl's backend.
          If the backend is not one for which PycURL provides crypto locks
          (i.e., any of the other backends supported by libcurl),
          no runtime SSL backend check is performed.

        * Default PycURL user agent string is now built at runtime, and will
          include the user agent string of libcurl loaded at runtime rather
          than the one present at compile time.

        * PycURL will now use WSAduplicateSocket rather than dup on Windows
          to duplicate sockets obtained from OPENSOCKETFUNCTION.
          Using dup may have caused crashes, OPENSOCKETFUNCTION should
          now be usable on Windows.

        * A new script, winbuild.py, was added to build PycURL on Windows
          against Python 2.6, 2.7, 3.2 and 3.3.

        * Added CURL_LOCK_DATA_SSL_SESSION (patch by Tom Pierce).

        * Added E_OPERATION_TIMEDOUT (patch by Romuald Brunet).

        * setup.py now handles --help argument and will print PycURL-specific
          configuration options in addition to distutils help.

        * Windows build configuration has been redone:
          PYCURL_USE_LIBCURL_DLL #define is gone, use --use-libcurl-dll
          argument to setup.py to build against a libcurl DLL.
          CURL_STATICLIB is now #defined only when --use-libcurl-dll is not
          given to setup.py, and PycURL is built against libcurl statically.
          --libcurl-lib-name option can be used to override libcurl import
          library name.

        * Added CURLAUTH_DIGEST_IE as pycurl.HTTPAUTH_DIGEST_IE.

        * Added CURLOPT_POSTREDIR option and CURL_REDIR_POST_301,
          CURL_REDIR_POST_302, CURL_REDIR_POST_303 and CURL_REDIR_POST_ALL
          constants. CURL_REDIR_POST_303 requires libcurl 7.26.0 or higher,
          all others require libcurl 7.19.1 or higher.

        * PycURL now supports Python 3.1 through 3.3. Python 3.0 might
          work but it appears to ship with broken distutils, making virtualenv
          not function on it.

        * PycURL multi objects now have the multi constants defined on them.
          Previously the constants were only available on pycurl module.
          The new behavior matches that of curl and share objects.

        * PycURL share objects can now be closed via the close() method.

        * PycURL will no longer call `curl-config --static-libs` if
          `curl-config --libs` succeeds and returns output.
          Systems on which neither `curl-config --libs` nor
          `curl-config --static-libs` do the right thing should provide
          a `curl-config` wrapper that is sane.

        * Added CURLFORM_BUFFER and CURLFORM_BUFFERPTR.

        * pycurl.version and user agent string now include both
          PycURL version and libcurl version as separate items.

        * Added CURLOPT_DNS_SERVERS.

        * PycURL can now be dynamically linked against libcurl on Windows
          if PYCURL_USE_LIBCURL_DLL is #defined during compilation.

        * Breaking change: opensocket callback now takes an additional
          (address, port) tuple argument. Existing callbacks will need to
          be modified to accept this new argument.
          pycurl/pycurl#18

Version 7.19.0.3 [requires libcurl-7.19.0 or better] - 2013-12-24
-----------------------------------------------------------------

	* Re-release of 7.19.0.2 with minor changes to build Windows packages
	  due to botched 7.19.0.2 files on PyPi.
	  http://curl.haxx.se/mail/curlpython-2013-12/0021.html

Version 7.19.0.2 [requires libcurl-7.19.0 or better] - 2013-10-08
-----------------------------------------------------------------

        * Fixed a bug in a commit made in 2008 but not released until 7.19.0.1
          which caused CURLOPT_POSTFIELDS to not correctly increment reference
          count of the object being given as its argument, despite libcurl not
          copying the data provided by said object.

        * Added support for libcurl pause/unpause functionality,
          via curl_easy_pause call and returning READFUNC_PAUSE from
          read callback function.

Version 7.19.0.1 [requires libcurl-7.19.0 or better] - 2013-09-23
-----------------------------------------------------------------

        * Test matrix tool added to test against all supported Python and
          libcurl versions.

        * Python 2.4 is now the minimum required version.

        * Source code, bugs and patches are now kept on GitHub.

        * Added CURLINFO_CERTINFO and CURLOPT_CERTINFO.

        * Added CURLOPT_RESOLVE.

        * PycURL can now be used with Python binaries without thread
          support.

        * gcrypt is no longer initialized when a newer version of gnutls
          is used.

        * Marked NSS as supported.

        * Fixed relative URL request logic.

        * Fixed a memory leak in util_curl_init.

        * Added CURLOPT_USERNAME and CURLOPT_PASSWORD.

        * Fixed handling of big timeout values.

        * Added GLOBAL_ACK_EINTR.

        * setopt(..., None) can be used as unsetopt().

        * CURLOPT_RANGE can now be unset.

        * Write callback can return -1 to signal user abort.

        * Reorganized tests into an automated test suite.

        * Added CURLOPT_SEEKFUNCTION and CURLOPT_SEEKDATA.

        * Cleaned up website.

        * Fix pycurl.reset() (patch by <johansen at sun.com>).

        * Fix install routine in setup.py where
          certain platforms (Solaris, Mac OSX, etc)
          would search for a static copy of libcurl (dbp).

        * Fixed build on OpenSolaris 0906 and other platforms on which
          curl-config does not have a --static-libs option.

        * No longer keep string options copies in the
          Curl Python objects, since string options are
          now managed by libcurl.
jsonn pushed a commit to jsonn/pkgsrc that referenced this pull request Jan 20, 2014
Version 7.19.3 [requires libcurl-7.19.0 or better] - 2014-01-09
---------------------------------------------------------------

        * Added CURLOPT_NOPROXY.

        * Added CURLINFO_LOCAL_PORT, CURLINFO_PRIMARY_PORT and
          CURLINFO_LOCAL_IP (patch by Adam Jacob Muller).

        * When running on Python 2.x, for compatibility with Python 3.x,
          Unicode strings containing ASCII code points only are now accepted
          in setopt() calls.

        * PycURL now requires that compile time SSL backend used by libcurl
          is the same as the one used at runtime. setup.py supports
          --with-ssl, --with-gnutls and --with-nss options like libcurl does,
          to specify which backend libcurl uses. On some systems PycURL can
          automatically figure out libcurl's backend.
          If the backend is not one for which PycURL provides crypto locks
          (i.e., any of the other backends supported by libcurl),
          no runtime SSL backend check is performed.

        * Default PycURL user agent string is now built at runtime, and will
          include the user agent string of libcurl loaded at runtime rather
          than the one present at compile time.

        * PycURL will now use WSAduplicateSocket rather than dup on Windows
          to duplicate sockets obtained from OPENSOCKETFUNCTION.
          Using dup may have caused crashes, OPENSOCKETFUNCTION should
          now be usable on Windows.

        * A new script, winbuild.py, was added to build PycURL on Windows
          against Python 2.6, 2.7, 3.2 and 3.3.

        * Added CURL_LOCK_DATA_SSL_SESSION (patch by Tom Pierce).

        * Added E_OPERATION_TIMEDOUT (patch by Romuald Brunet).

        * setup.py now handles --help argument and will print PycURL-specific
          configuration options in addition to distutils help.

        * Windows build configuration has been redone:
          PYCURL_USE_LIBCURL_DLL #define is gone, use --use-libcurl-dll
          argument to setup.py to build against a libcurl DLL.
          CURL_STATICLIB is now #defined only when --use-libcurl-dll is not
          given to setup.py, and PycURL is built against libcurl statically.
          --libcurl-lib-name option can be used to override libcurl import
          library name.

        * Added CURLAUTH_DIGEST_IE as pycurl.HTTPAUTH_DIGEST_IE.

        * Added CURLOPT_POSTREDIR option and CURL_REDIR_POST_301,
          CURL_REDIR_POST_302, CURL_REDIR_POST_303 and CURL_REDIR_POST_ALL
          constants. CURL_REDIR_POST_303 requires libcurl 7.26.0 or higher,
          all others require libcurl 7.19.1 or higher.

        * PycURL now supports Python 3.1 through 3.3. Python 3.0 might
          work but it appears to ship with broken distutils, making virtualenv
          not function on it.

        * PycURL multi objects now have the multi constants defined on them.
          Previously the constants were only available on pycurl module.
          The new behavior matches that of curl and share objects.

        * PycURL share objects can now be closed via the close() method.

        * PycURL will no longer call `curl-config --static-libs` if
          `curl-config --libs` succeeds and returns output.
          Systems on which neither `curl-config --libs` nor
          `curl-config --static-libs` do the right thing should provide
          a `curl-config` wrapper that is sane.

        * Added CURLFORM_BUFFER and CURLFORM_BUFFERPTR.

        * pycurl.version and user agent string now include both
          PycURL version and libcurl version as separate items.

        * Added CURLOPT_DNS_SERVERS.

        * PycURL can now be dynamically linked against libcurl on Windows
          if PYCURL_USE_LIBCURL_DLL is #defined during compilation.

        * Breaking change: opensocket callback now takes an additional
          (address, port) tuple argument. Existing callbacks will need to
          be modified to accept this new argument.
          pycurl/pycurl#18

Version 7.19.0.3 [requires libcurl-7.19.0 or better] - 2013-12-24
-----------------------------------------------------------------

	* Re-release of 7.19.0.2 with minor changes to build Windows packages
	  due to botched 7.19.0.2 files on PyPi.
	  http://curl.haxx.se/mail/curlpython-2013-12/0021.html

Version 7.19.0.2 [requires libcurl-7.19.0 or better] - 2013-10-08
-----------------------------------------------------------------

        * Fixed a bug in a commit made in 2008 but not released until 7.19.0.1
          which caused CURLOPT_POSTFIELDS to not correctly increment reference
          count of the object being given as its argument, despite libcurl not
          copying the data provided by said object.

        * Added support for libcurl pause/unpause functionality,
          via curl_easy_pause call and returning READFUNC_PAUSE from
          read callback function.

Version 7.19.0.1 [requires libcurl-7.19.0 or better] - 2013-09-23
-----------------------------------------------------------------

        * Test matrix tool added to test against all supported Python and
          libcurl versions.

        * Python 2.4 is now the minimum required version.

        * Source code, bugs and patches are now kept on GitHub.

        * Added CURLINFO_CERTINFO and CURLOPT_CERTINFO.

        * Added CURLOPT_RESOLVE.

        * PycURL can now be used with Python binaries without thread
          support.

        * gcrypt is no longer initialized when a newer version of gnutls
          is used.

        * Marked NSS as supported.

        * Fixed relative URL request logic.

        * Fixed a memory leak in util_curl_init.

        * Added CURLOPT_USERNAME and CURLOPT_PASSWORD.

        * Fixed handling of big timeout values.

        * Added GLOBAL_ACK_EINTR.

        * setopt(..., None) can be used as unsetopt().

        * CURLOPT_RANGE can now be unset.

        * Write callback can return -1 to signal user abort.

        * Reorganized tests into an automated test suite.

        * Added CURLOPT_SEEKFUNCTION and CURLOPT_SEEKDATA.

        * Cleaned up website.

        * Fix pycurl.reset() (patch by <johansen at sun.com>).

        * Fix install routine in setup.py where
          certain platforms (Solaris, Mac OSX, etc)
          would search for a static copy of libcurl (dbp).

        * Fixed build on OpenSolaris 0906 and other platforms on which
          curl-config does not have a --static-libs option.

        * No longer keep string options copies in the
          Curl Python objects, since string options are
          now managed by libcurl.
jsonn pushed a commit to jsonn/pkgsrc that referenced this pull request Mar 12, 2014
Version 7.19.3 [requires libcurl-7.19.0 or better] - 2014-01-09
---------------------------------------------------------------

        * Added CURLOPT_NOPROXY.

        * Added CURLINFO_LOCAL_PORT, CURLINFO_PRIMARY_PORT and
          CURLINFO_LOCAL_IP (patch by Adam Jacob Muller).

        * When running on Python 2.x, for compatibility with Python 3.x,
          Unicode strings containing ASCII code points only are now accepted
          in setopt() calls.

        * PycURL now requires that compile time SSL backend used by libcurl
          is the same as the one used at runtime. setup.py supports
          --with-ssl, --with-gnutls and --with-nss options like libcurl does,
          to specify which backend libcurl uses. On some systems PycURL can
          automatically figure out libcurl's backend.
          If the backend is not one for which PycURL provides crypto locks
          (i.e., any of the other backends supported by libcurl),
          no runtime SSL backend check is performed.

        * Default PycURL user agent string is now built at runtime, and will
          include the user agent string of libcurl loaded at runtime rather
          than the one present at compile time.

        * PycURL will now use WSAduplicateSocket rather than dup on Windows
          to duplicate sockets obtained from OPENSOCKETFUNCTION.
          Using dup may have caused crashes, OPENSOCKETFUNCTION should
          now be usable on Windows.

        * A new script, winbuild.py, was added to build PycURL on Windows
          against Python 2.6, 2.7, 3.2 and 3.3.

        * Added CURL_LOCK_DATA_SSL_SESSION (patch by Tom Pierce).

        * Added E_OPERATION_TIMEDOUT (patch by Romuald Brunet).

        * setup.py now handles --help argument and will print PycURL-specific
          configuration options in addition to distutils help.

        * Windows build configuration has been redone:
          PYCURL_USE_LIBCURL_DLL #define is gone, use --use-libcurl-dll
          argument to setup.py to build against a libcurl DLL.
          CURL_STATICLIB is now #defined only when --use-libcurl-dll is not
          given to setup.py, and PycURL is built against libcurl statically.
          --libcurl-lib-name option can be used to override libcurl import
          library name.

        * Added CURLAUTH_DIGEST_IE as pycurl.HTTPAUTH_DIGEST_IE.

        * Added CURLOPT_POSTREDIR option and CURL_REDIR_POST_301,
          CURL_REDIR_POST_302, CURL_REDIR_POST_303 and CURL_REDIR_POST_ALL
          constants. CURL_REDIR_POST_303 requires libcurl 7.26.0 or higher,
          all others require libcurl 7.19.1 or higher.

        * PycURL now supports Python 3.1 through 3.3. Python 3.0 might
          work but it appears to ship with broken distutils, making virtualenv
          not function on it.

        * PycURL multi objects now have the multi constants defined on them.
          Previously the constants were only available on pycurl module.
          The new behavior matches that of curl and share objects.

        * PycURL share objects can now be closed via the close() method.

        * PycURL will no longer call `curl-config --static-libs` if
          `curl-config --libs` succeeds and returns output.
          Systems on which neither `curl-config --libs` nor
          `curl-config --static-libs` do the right thing should provide
          a `curl-config` wrapper that is sane.

        * Added CURLFORM_BUFFER and CURLFORM_BUFFERPTR.

        * pycurl.version and user agent string now include both
          PycURL version and libcurl version as separate items.

        * Added CURLOPT_DNS_SERVERS.

        * PycURL can now be dynamically linked against libcurl on Windows
          if PYCURL_USE_LIBCURL_DLL is #defined during compilation.

        * Breaking change: opensocket callback now takes an additional
          (address, port) tuple argument. Existing callbacks will need to
          be modified to accept this new argument.
          pycurl/pycurl#18

Version 7.19.0.3 [requires libcurl-7.19.0 or better] - 2013-12-24
-----------------------------------------------------------------

	* Re-release of 7.19.0.2 with minor changes to build Windows packages
	  due to botched 7.19.0.2 files on PyPi.
	  http://curl.haxx.se/mail/curlpython-2013-12/0021.html

Version 7.19.0.2 [requires libcurl-7.19.0 or better] - 2013-10-08
-----------------------------------------------------------------

        * Fixed a bug in a commit made in 2008 but not released until 7.19.0.1
          which caused CURLOPT_POSTFIELDS to not correctly increment reference
          count of the object being given as its argument, despite libcurl not
          copying the data provided by said object.

        * Added support for libcurl pause/unpause functionality,
          via curl_easy_pause call and returning READFUNC_PAUSE from
          read callback function.

Version 7.19.0.1 [requires libcurl-7.19.0 or better] - 2013-09-23
-----------------------------------------------------------------

        * Test matrix tool added to test against all supported Python and
          libcurl versions.

        * Python 2.4 is now the minimum required version.

        * Source code, bugs and patches are now kept on GitHub.

        * Added CURLINFO_CERTINFO and CURLOPT_CERTINFO.

        * Added CURLOPT_RESOLVE.

        * PycURL can now be used with Python binaries without thread
          support.

        * gcrypt is no longer initialized when a newer version of gnutls
          is used.

        * Marked NSS as supported.

        * Fixed relative URL request logic.

        * Fixed a memory leak in util_curl_init.

        * Added CURLOPT_USERNAME and CURLOPT_PASSWORD.

        * Fixed handling of big timeout values.

        * Added GLOBAL_ACK_EINTR.

        * setopt(..., None) can be used as unsetopt().

        * CURLOPT_RANGE can now be unset.

        * Write callback can return -1 to signal user abort.

        * Reorganized tests into an automated test suite.

        * Added CURLOPT_SEEKFUNCTION and CURLOPT_SEEKDATA.

        * Cleaned up website.

        * Fix pycurl.reset() (patch by <johansen at sun.com>).

        * Fix install routine in setup.py where
          certain platforms (Solaris, Mac OSX, etc)
          would search for a static copy of libcurl (dbp).

        * Fixed build on OpenSolaris 0906 and other platforms on which
          curl-config does not have a --static-libs option.

        * No longer keep string options copies in the
          Curl Python objects, since string options are
          now managed by libcurl.
jsonn pushed a commit to jsonn/pkgsrc that referenced this pull request Oct 11, 2014
Version 7.19.3 [requires libcurl-7.19.0 or better] - 2014-01-09
---------------------------------------------------------------

        * Added CURLOPT_NOPROXY.

        * Added CURLINFO_LOCAL_PORT, CURLINFO_PRIMARY_PORT and
          CURLINFO_LOCAL_IP (patch by Adam Jacob Muller).

        * When running on Python 2.x, for compatibility with Python 3.x,
          Unicode strings containing ASCII code points only are now accepted
          in setopt() calls.

        * PycURL now requires that compile time SSL backend used by libcurl
          is the same as the one used at runtime. setup.py supports
          --with-ssl, --with-gnutls and --with-nss options like libcurl does,
          to specify which backend libcurl uses. On some systems PycURL can
          automatically figure out libcurl's backend.
          If the backend is not one for which PycURL provides crypto locks
          (i.e., any of the other backends supported by libcurl),
          no runtime SSL backend check is performed.

        * Default PycURL user agent string is now built at runtime, and will
          include the user agent string of libcurl loaded at runtime rather
          than the one present at compile time.

        * PycURL will now use WSAduplicateSocket rather than dup on Windows
          to duplicate sockets obtained from OPENSOCKETFUNCTION.
          Using dup may have caused crashes, OPENSOCKETFUNCTION should
          now be usable on Windows.

        * A new script, winbuild.py, was added to build PycURL on Windows
          against Python 2.6, 2.7, 3.2 and 3.3.

        * Added CURL_LOCK_DATA_SSL_SESSION (patch by Tom Pierce).

        * Added E_OPERATION_TIMEDOUT (patch by Romuald Brunet).

        * setup.py now handles --help argument and will print PycURL-specific
          configuration options in addition to distutils help.

        * Windows build configuration has been redone:
          PYCURL_USE_LIBCURL_DLL #define is gone, use --use-libcurl-dll
          argument to setup.py to build against a libcurl DLL.
          CURL_STATICLIB is now #defined only when --use-libcurl-dll is not
          given to setup.py, and PycURL is built against libcurl statically.
          --libcurl-lib-name option can be used to override libcurl import
          library name.

        * Added CURLAUTH_DIGEST_IE as pycurl.HTTPAUTH_DIGEST_IE.

        * Added CURLOPT_POSTREDIR option and CURL_REDIR_POST_301,
          CURL_REDIR_POST_302, CURL_REDIR_POST_303 and CURL_REDIR_POST_ALL
          constants. CURL_REDIR_POST_303 requires libcurl 7.26.0 or higher,
          all others require libcurl 7.19.1 or higher.

        * PycURL now supports Python 3.1 through 3.3. Python 3.0 might
          work but it appears to ship with broken distutils, making virtualenv
          not function on it.

        * PycURL multi objects now have the multi constants defined on them.
          Previously the constants were only available on pycurl module.
          The new behavior matches that of curl and share objects.

        * PycURL share objects can now be closed via the close() method.

        * PycURL will no longer call `curl-config --static-libs` if
          `curl-config --libs` succeeds and returns output.
          Systems on which neither `curl-config --libs` nor
          `curl-config --static-libs` do the right thing should provide
          a `curl-config` wrapper that is sane.

        * Added CURLFORM_BUFFER and CURLFORM_BUFFERPTR.

        * pycurl.version and user agent string now include both
          PycURL version and libcurl version as separate items.

        * Added CURLOPT_DNS_SERVERS.

        * PycURL can now be dynamically linked against libcurl on Windows
          if PYCURL_USE_LIBCURL_DLL is #defined during compilation.

        * Breaking change: opensocket callback now takes an additional
          (address, port) tuple argument. Existing callbacks will need to
          be modified to accept this new argument.
          pycurl/pycurl#18

Version 7.19.0.3 [requires libcurl-7.19.0 or better] - 2013-12-24
-----------------------------------------------------------------

	* Re-release of 7.19.0.2 with minor changes to build Windows packages
	  due to botched 7.19.0.2 files on PyPi.
	  http://curl.haxx.se/mail/curlpython-2013-12/0021.html

Version 7.19.0.2 [requires libcurl-7.19.0 or better] - 2013-10-08
-----------------------------------------------------------------

        * Fixed a bug in a commit made in 2008 but not released until 7.19.0.1
          which caused CURLOPT_POSTFIELDS to not correctly increment reference
          count of the object being given as its argument, despite libcurl not
          copying the data provided by said object.

        * Added support for libcurl pause/unpause functionality,
          via curl_easy_pause call and returning READFUNC_PAUSE from
          read callback function.

Version 7.19.0.1 [requires libcurl-7.19.0 or better] - 2013-09-23
-----------------------------------------------------------------

        * Test matrix tool added to test against all supported Python and
          libcurl versions.

        * Python 2.4 is now the minimum required version.

        * Source code, bugs and patches are now kept on GitHub.

        * Added CURLINFO_CERTINFO and CURLOPT_CERTINFO.

        * Added CURLOPT_RESOLVE.

        * PycURL can now be used with Python binaries without thread
          support.

        * gcrypt is no longer initialized when a newer version of gnutls
          is used.

        * Marked NSS as supported.

        * Fixed relative URL request logic.

        * Fixed a memory leak in util_curl_init.

        * Added CURLOPT_USERNAME and CURLOPT_PASSWORD.

        * Fixed handling of big timeout values.

        * Added GLOBAL_ACK_EINTR.

        * setopt(..., None) can be used as unsetopt().

        * CURLOPT_RANGE can now be unset.

        * Write callback can return -1 to signal user abort.

        * Reorganized tests into an automated test suite.

        * Added CURLOPT_SEEKFUNCTION and CURLOPT_SEEKDATA.

        * Cleaned up website.

        * Fix pycurl.reset() (patch by <johansen at sun.com>).

        * Fix install routine in setup.py where
          certain platforms (Solaris, Mac OSX, etc)
          would search for a static copy of libcurl (dbp).

        * Fixed build on OpenSolaris 0906 and other platforms on which
          curl-config does not have a --static-libs option.

        * No longer keep string options copies in the
          Curl Python objects, since string options are
          now managed by libcurl.
msk pushed a commit to msk/pkgsrc that referenced this pull request May 11, 2026
Version 7.19.3 [requires libcurl-7.19.0 or better] - 2014-01-09
---------------------------------------------------------------

        * Added CURLOPT_NOPROXY.

        * Added CURLINFO_LOCAL_PORT, CURLINFO_PRIMARY_PORT and
          CURLINFO_LOCAL_IP (patch by Adam Jacob Muller).

        * When running on Python 2.x, for compatibility with Python 3.x,
          Unicode strings containing ASCII code points only are now accepted
          in setopt() calls.

        * PycURL now requires that compile time SSL backend used by libcurl
          is the same as the one used at runtime. setup.py supports
          --with-ssl, --with-gnutls and --with-nss options like libcurl does,
          to specify which backend libcurl uses. On some systems PycURL can
          automatically figure out libcurl's backend.
          If the backend is not one for which PycURL provides crypto locks
          (i.e., any of the other backends supported by libcurl),
          no runtime SSL backend check is performed.

        * Default PycURL user agent string is now built at runtime, and will
          include the user agent string of libcurl loaded at runtime rather
          than the one present at compile time.

        * PycURL will now use WSAduplicateSocket rather than dup on Windows
          to duplicate sockets obtained from OPENSOCKETFUNCTION.
          Using dup may have caused crashes, OPENSOCKETFUNCTION should
          now be usable on Windows.

        * A new script, winbuild.py, was added to build PycURL on Windows
          against Python 2.6, 2.7, 3.2 and 3.3.

        * Added CURL_LOCK_DATA_SSL_SESSION (patch by Tom Pierce).

        * Added E_OPERATION_TIMEDOUT (patch by Romuald Brunet).

        * setup.py now handles --help argument and will print PycURL-specific
          configuration options in addition to distutils help.

        * Windows build configuration has been redone:
          PYCURL_USE_LIBCURL_DLL #define is gone, use --use-libcurl-dll
          argument to setup.py to build against a libcurl DLL.
          CURL_STATICLIB is now #defined only when --use-libcurl-dll is not
          given to setup.py, and PycURL is built against libcurl statically.
          --libcurl-lib-name option can be used to override libcurl import
          library name.

        * Added CURLAUTH_DIGEST_IE as pycurl.HTTPAUTH_DIGEST_IE.

        * Added CURLOPT_POSTREDIR option and CURL_REDIR_POST_301,
          CURL_REDIR_POST_302, CURL_REDIR_POST_303 and CURL_REDIR_POST_ALL
          constants. CURL_REDIR_POST_303 requires libcurl 7.26.0 or higher,
          all others require libcurl 7.19.1 or higher.

        * PycURL now supports Python 3.1 through 3.3. Python 3.0 might
          work but it appears to ship with broken distutils, making virtualenv
          not function on it.

        * PycURL multi objects now have the multi constants defined on them.
          Previously the constants were only available on pycurl module.
          The new behavior matches that of curl and share objects.

        * PycURL share objects can now be closed via the close() method.

        * PycURL will no longer call `curl-config --static-libs` if
          `curl-config --libs` succeeds and returns output.
          Systems on which neither `curl-config --libs` nor
          `curl-config --static-libs` do the right thing should provide
          a `curl-config` wrapper that is sane.

        * Added CURLFORM_BUFFER and CURLFORM_BUFFERPTR.

        * pycurl.version and user agent string now include both
          PycURL version and libcurl version as separate items.

        * Added CURLOPT_DNS_SERVERS.

        * PycURL can now be dynamically linked against libcurl on Windows
          if PYCURL_USE_LIBCURL_DLL is #defined during compilation.

        * Breaking change: opensocket callback now takes an additional
          (address, port) tuple argument. Existing callbacks will need to
          be modified to accept this new argument.
          pycurl/pycurl#18

Version 7.19.0.3 [requires libcurl-7.19.0 or better] - 2013-12-24
-----------------------------------------------------------------

	* Re-release of 7.19.0.2 with minor changes to build Windows packages
	  due to botched 7.19.0.2 files on PyPi.
	  http://curl.haxx.se/mail/curlpython-2013-12/0021.html

Version 7.19.0.2 [requires libcurl-7.19.0 or better] - 2013-10-08
-----------------------------------------------------------------

        * Fixed a bug in a commit made in 2008 but not released until 7.19.0.1
          which caused CURLOPT_POSTFIELDS to not correctly increment reference
          count of the object being given as its argument, despite libcurl not
          copying the data provided by said object.

        * Added support for libcurl pause/unpause functionality,
          via curl_easy_pause call and returning READFUNC_PAUSE from
          read callback function.

Version 7.19.0.1 [requires libcurl-7.19.0 or better] - 2013-09-23
-----------------------------------------------------------------

        * Test matrix tool added to test against all supported Python and
          libcurl versions.

        * Python 2.4 is now the minimum required version.

        * Source code, bugs and patches are now kept on GitHub.

        * Added CURLINFO_CERTINFO and CURLOPT_CERTINFO.

        * Added CURLOPT_RESOLVE.

        * PycURL can now be used with Python binaries without thread
          support.

        * gcrypt is no longer initialized when a newer version of gnutls
          is used.

        * Marked NSS as supported.

        * Fixed relative URL request logic.

        * Fixed a memory leak in util_curl_init.

        * Added CURLOPT_USERNAME and CURLOPT_PASSWORD.

        * Fixed handling of big timeout values.

        * Added GLOBAL_ACK_EINTR.

        * setopt(..., None) can be used as unsetopt().

        * CURLOPT_RANGE can now be unset.

        * Write callback can return -1 to signal user abort.

        * Reorganized tests into an automated test suite.

        * Added CURLOPT_SEEKFUNCTION and CURLOPT_SEEKDATA.

        * Cleaned up website.

        * Fix pycurl.reset() (patch by <johansen at sun.com>).

        * Fix install routine in setup.py where
          certain platforms (Solaris, Mac OSX, etc)
          would search for a static copy of libcurl (dbp).

        * Fixed build on OpenSolaris 0906 and other platforms on which
          curl-config does not have a --static-libs option.

        * No longer keep string options copies in the
          Curl Python objects, since string options are
          now managed by libcurl.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants