gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [gnurl] 150/150: Merge tag 'curl-7_59_0' of https://github.


From: gnunet
Subject: [GNUnet-SVN] [gnurl] 150/150: Merge tag 'curl-7_59_0' of https://github.com/curl/curl
Date: Fri, 30 Mar 2018 16:50:04 +0200

This is an automated email from the git hooks/post-receive script.

ng0 pushed a commit to branch master
in repository gnurl.

commit 4bdd2f26cf0ae539253feff8207e97ed4ce1d7ff
Merge: b7ee06519 4d6bd91ab
Author: Nils Gillmann <address@hidden>
AuthorDate: Fri Mar 30 14:47:12 2018 +0000

    Merge tag 'curl-7_59_0' of https://github.com/curl/curl
    
    curl 7.59.0
    
    Initial merge of upstream tag.

 .mailmap                                           |   7 +-
 .travis-iconv-env.sh                               |   1 +
 .travis.yml                                        |  30 +-
 CMake/Utilities.cmake                              |   2 +-
 README                                             |   2 +
 README.md                                          |   2 +-
 RELEASE-NOTES                                      | 316 ++++++++++---------
 configure.ac                                       |  19 +-
 docs/BINDINGS.md                                   |   4 +-
 docs/BUGS                                          |   2 +-
 docs/FAQ                                           |   6 +-
 docs/KNOWN_BUGS                                    |  11 +
 docs/MAIL-ETIQUETTE                                |   2 +-
 docs/MANUAL                                        |   3 +-
 docs/Makefile.am                                   |   4 +-
 docs/{SECURITY.md => SECURITY-PROCESS.md}          |  10 +-
 docs/THANKS                                        |  24 +-
 docs/THANKS-filter                                 |   3 +-
 docs/TODO                                          | 108 +++++--
 docs/cmdline-opts/Makefile.inc                     |   6 +-
 docs/cmdline-opts/form.d                           |  42 ++-
 docs/cmdline-opts/happy-eyeballs-timeout-ms.d      |  17 ++
 docs/cmdline-opts/page-footer                      |   9 +-
 docs/cmdline-opts/progress-bar.d                   |   5 +-
 docs/cmdline-opts/proxy-pinnedpubkey.d             |  16 +
 docs/cmdline-opts/resolve.d                        |   4 +-
 docs/cmdline-opts/tlsauthtype.d                    |   4 +-
 docs/examples/Makefile.am                          |   5 +-
 docs/examples/Makefile.inc                         |   4 +-
 docs/examples/ftpupload.c                          |   2 +-
 docs/examples/sftpuploadresume.c                   | 130 ++++++++
 docs/libcurl/Makefile.inc                          |   3 +-
 docs/libcurl/gnurl_easy_getinfo.3                  |   7 +-
 docs/libcurl/gnurl_easy_setopt.3                   |  10 +-
 docs/libcurl/gnurl_getdate.3                       |  16 +-
 docs/libcurl/gnurl_global_init.3                   |   2 +-
 docs/libcurl/gnurl_share_setopt.3                  |   9 +-
 docs/libcurl/libgnurl-env.3                        |   4 +-
 docs/libcurl/libgnurl-errors.3                     |   4 +
 docs/libcurl/libgnurl-security.3                   | 338 +++++++++++++++++++++
 docs/libcurl/libgnurl-tutorial.3                   | 233 +-------------
 ...{GNURLINFO_FILETIME.3 => CURLINFO_FILETIME_T.3} |  35 ++-
 ...EADER.3 => CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3} |  48 ++-
 ...T_TIMEVALUE.3 => CURLOPT_RESOLVER_START_DATA.3} |  44 +--
 .../libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.3 |  83 +++++
 ...RLOPT_TIMEVALUE.3 => CURLOPT_TIMEVALUE_LARGE.3} |  25 +-
 docs/libcurl/opts/GNURLINFO_CONDITION_UNMET.3      |   2 +-
 docs/libcurl/opts/GNURLINFO_FILETIME.3             |  11 +-
 docs/libcurl/opts/GNURLOPT_COOKIEFILE.3            |   5 +-
 docs/libcurl/opts/GNURLOPT_HEADER.3                |  18 +-
 docs/libcurl/opts/GNURLOPT_HEADERFUNCTION.3        |   7 +-
 docs/libcurl/opts/GNURLOPT_NOPROXY.3               |   7 +-
 docs/libcurl/opts/GNURLOPT_PINNEDPUBLICKEY.3       |  10 +-
 docs/libcurl/opts/GNURLOPT_RESOLVE.3               |  12 +-
 docs/libcurl/opts/GNURLOPT_TIMEVALUE.3             |   5 +-
 docs/libcurl/opts/Makefile.inc                     |   5 +
 docs/libcurl/symbols-in-versions                   |   8 +
 include/gnurl/curl.h                               |  29 +-
 include/gnurl/curlver.h                            |  10 +-
 include/gnurl/multi.h                              |   6 +-
 include/gnurl/typecheck-gcc.h                      |  13 +
 lib/Makefile.inc                                   |   8 +-
 lib/checksrc.pl                                    |  34 ++-
 lib/config-win32.h                                 |   7 +-
 lib/connect.c                                      |  35 ++-
 lib/connect.h                                      |   7 +-
 lib/content_encoding.c                             |   2 +-
 lib/cookie.c                                       |   5 +-
 lib/curl_addrinfo.c                                |   6 +-
 lib/curl_ctype.c                                   | 122 ++++++++
 lib/curl_ctype.h                                   |  48 +++
 lib/curl_fnmatch.c                                 | 327 ++++++++------------
 lib/curl_gssapi.c                                  |   7 +-
 lib/curl_ntlm_wb.c                                 |   2 +-
 lib/curl_range.c                                   |  95 ++++++
 lib/curl_range.h                                   |  30 ++
 lib/curl_sasl.c                                    |  20 +-
 lib/curl_setup.h                                   |  32 +-
 lib/curl_setup_once.h                              |  23 +-
 lib/easy.c                                         |  21 +-
 lib/file.c                                         |  70 +----
 lib/formdata.c                                     |  64 +---
 lib/ftp.c                                          |  97 ++----
 lib/ftplistparser.c                                |   3 +
 lib/getinfo.c                                      |  12 +-
 lib/hostip.c                                       | 128 ++++++--
 lib/http.c                                         | 159 +++++-----
 lib/http.h                                         |   5 +-
 lib/http2.c                                        | 164 +++++-----
 lib/http_chunks.c                                  |  25 +-
 lib/http_proxy.c                                   |   8 +-
 lib/krb5.c                                         |   6 +-
 lib/mime.c                                         |  13 +-
 lib/mime.h                                         |   5 +
 lib/mk-ca-bundle.vbs                               |   2 +-
 lib/multi.c                                        |  74 ++++-
 lib/multihandle.h                                  |   1 +
 lib/multiif.h                                      |   2 +
 lib/non-ascii.c                                    |  16 +-
 lib/objnames.inc                                   |   2 +-
 lib/openldap.c                                     |  45 +--
 lib/parsedate.c                                    | 100 +++---
 lib/progress.c                                     |  45 +--
 lib/progress.h                                     |  12 +-
 lib/rtsp.c                                         |  30 +-
 lib/sendf.c                                        |  65 ++--
 lib/sendf.h                                        |   4 +-
 lib/setopt.c                                       |  33 ++
 lib/sha256.c                                       |  12 +-
 lib/smb.c                                          |  15 +-
 lib/smtp.c                                         |   5 +
 lib/ssh-libssh.c                                   |   8 +-
 lib/ssh.c                                          |  22 +-
 lib/strerror.c                                     |   6 +
 lib/telnet.c                                       |   3 +-
 lib/transfer.c                                     |  22 +-
 lib/transfer.h                                     |   3 +-
 lib/url.c                                          |  13 +-
 lib/urldata.h                                      |  13 +-
 lib/vtls/cyassl.c                                  |  12 +-
 lib/vtls/darwinssl.c                               |  73 ++++-
 lib/vtls/gskit.c                                   |   2 +-
 lib/vtls/gtls.c                                    |  15 +-
 lib/vtls/nss.c                                     |  12 +-
 lib/vtls/openssl.c                                 |  57 ++--
 lib/vtls/schannel.c                                | 157 +++++++++-
 lib/warnless.h                                     |   5 +
 m4/curl-openssl.m4                                 |  13 +-
 m4/zz40-xc-ovr.m4                                  |  12 +-
 packages/OS400/README.OS400                        |   6 +-
 packages/OS400/curl.inc.in                         |  11 +
 packages/Symbian/group/libcurl.mmp                 |   4 +-
 packages/vms/config_h.com                          |   2 +-
 projects/README                                    |  11 +-
 projects/Windows/VC15/curl-all.sln                 |   2 +-
 projects/Windows/VC15/lib/libcurl.sln              |   2 +-
 projects/Windows/VC15/src/curl.sln                 |   2 +-
 projects/build-openssl.bat                         | 114 +++++--
 projects/build-wolfssl.bat                         |  38 ++-
 projects/generate.bat                              |   2 +
 src/Makefile.inc                                   |   8 +-
 src/Makefile.netware                               |   6 +-
 src/tool_cb_prg.c                                  |   8 +-
 src/tool_cfgable.c                                 |   4 +-
 src/tool_cfgable.h                                 |   7 +-
 src/tool_dirhie.c                                  |   8 +-
 src/tool_filetime.c                                | 154 ++++++++++
 src/tool_filetime.h                                |  38 +++
 src/tool_getparam.c                                |  34 ++-
 src/tool_help.c                                    |  12 +-
 src/tool_operate.c                                 | 100 +-----
 tests/data/Makefile.inc                            |  22 +-
 tests/data/test1154                                |  57 ++++
 tests/data/test1170                                |  70 +++++
 tests/data/test1171                                |  70 +++++
 tests/data/test1265                                |  53 ++++
 tests/data/test1292                                |  50 +++
 tests/data/test1538                                |   6 +-
 tests/data/test1555                                |  50 +++
 tests/data/test1556                                |  63 ++++
 tests/data/test1607                                |  26 ++
 tests/data/test319                                 |  57 ++++
 tests/data/test326                                 |  66 ++++
 tests/data/test340                                 |  40 +++
 tests/data/test517                                 |  90 ------
 tests/data/test555                                 |   4 -
 tests/data/test655                                 |  50 +++
 tests/data/test911                                 |   1 -
 tests/data/{test911 => test951}                    |  16 +-
 tests/data/{test911 => test952}                    |  16 +-
 tests/ftpserver.pl                                 |   8 +-
 tests/libtest/Makefile.am                          |   4 +-
 tests/libtest/Makefile.inc                         |  15 +-
 tests/libtest/lib1555.c                            |  77 +++++
 tests/libtest/lib1556.c                            |  78 +++++
 tests/libtest/lib517.c                             | 228 +++++++-------
 tests/libtest/lib544.c                             |  11 +-
 tests/libtest/lib555.c                             |  24 +-
 tests/libtest/lib560.c                             |   2 +-
 tests/libtest/lib655.c                             | 112 +++++++
 tests/libtest/mk-lib1521.pl                        |   3 +-
 tests/nroff-scan.pl                                |   4 +-
 tests/pathhelp.pm                                  |   2 +-
 tests/python_dependencies/impacket/spnego.py       |   2 +-
 tests/runtests.pl                                  |   1 +
 tests/server/CMakeLists.txt                        |   2 +-
 tests/server/Makefile.inc                          |   6 +-
 tests/server/sockfilt.c                            |   2 +-
 tests/server/sws.c                                 |   8 +-
 tests/unit/Makefile.am                             |   4 +-
 tests/unit/Makefile.inc                            |   5 +-
 tests/unit/unit1307.c                              |  18 +-
 tests/unit/unit1309.c                              |  14 +-
 tests/unit/unit1607.c                              | 213 +++++++++++++
 winbuild/Makefile.vc                               |   4 +-
 winbuild/MakefileBuild.vc                          |  30 +-
 196 files changed, 4587 insertions(+), 1980 deletions(-)

diff --cc README
index 8ebadeecd,f0b3b9393..ba216c0f1
--- a/README
+++ b/README
@@@ -1,169 -1,3 +1,171 @@@
 +libgnurl is a fork of libcurl with the following major changes:
 +
 +Compilation requirements:
 +* libgnurl must be compiled so that it supports only HTTP and HTTPS
 +  (remove Gopher, SSH, IMAP, etc.)
 +* libgnurl must be compiled so that it supports only GnuTLS
 +  (remove CaySSL, QsoSSL, GSKit, etc.)
 +* removed support for NTLM, GSSAPI, SPNEGO, LDAP, metalink, HTTP2
 +* We recommend to build GnuTLS with DANE support, provided by 'unbound'.
 +  This is optional.
 +
 +Changes to the code:
 +* renamed the library binary from 'libcurl' to 'lignurl'
 +* renamed files to ensure a system-wide installation of
 +  libgnurl does not result in namespace collisions with libcurl
 +* adjustments to the testsuite to address the gnurl specific build
++* Changes to be written:
++  * Replace the release process with more automatization
 +
 +Usage notes:
 +* exported symbols were NOT renamed, so they still all have the
 +  curl prefix; you should be able to start using libgnurl simply
 +  by changing -lcurl to -lgnurl.
 +
 +Note that the compilation requirements are still not fully
 +hardcoded, but work on this is in progress since gnURL 7.56.1-2.
 +If you compile libgnurl, please pass '--disable-ntlm-wb' to the
 +configure script. So instead of just running
 +
 +  ./configure
 +
 +you will run
 +
 +  ./configure --disable-ntlm-wb
 +
 +Naturally, you're free to specify additional options, such as
 +"--prefix".  Please keep in mind that you might have to pass
 +"--with-ca-bundle=/etc/ssl/certs/ca-certificates.crt" or similar
 +paths and options for gnurl to pick up certificates, just like
 +curl.
 +The result should have support only for HTTP, HTTPS (via
 +GnuTLS), IDN, zlib and TLS-SRP. The output of the result from
 +./gnurl --version should look like this:
 +
 +  curl 7.58.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.58.0-DEV GnuTLS/3.5.13 
zlib/1.2.11 libidn2/2.0.4
 +  Release-Date: [unreleased]
 +  Protocols: http https
 +  Features: AsynchDNS IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP 
UnixSockets HTTPS-proxy
 +
 +In previous versions (gnURL < 7.56.1-2) we used to socially enforce
 +the following configuration, which was almost never done right on
 +system distribution side:
 +
 +  ./configure --enable-ipv6 --with-gnutls --without-libssh2 \
 +  --without-libmetalink --without-winidn --without-librtmp \
 +  --without-nghttp2 --without-nss --without-cyassl \
 +  --without-polarssl --without-ssl --without-winssl \
 +  --without-darwinssl --disable-sspi --disable-ntlm-wb --disable-ldap \
 +  --disable-rtsp --disable-dict --disable-telnet --disable-tftp \
 +  --disable-pop3 --disable-imap --disable-smtp --disable-gopher \
 +  --disable-file --disable-ftp --disable-smb
 +
 +
 +Motivation:
 +
 +cURL supports a bunch of crypto backends. GNUnet requires the use of
 +GnuTLS, but other variants are used by some distributions. Supporting
 +other crypto backends would again expose us to a wider array of
 +security issues, may create licensing issues and most importantly
 +introduce new bugs as some crypto backends are known to introduce
 +subtle runtime issues. While it is possible to have two versions of
 +libcurl installed on the same system, this is error-prone, especially
 +as if we are linked against the wrong version, the bugs that arise
 +might be rather subtle.
 +
 +For GNUnet, we also need a particularly modern version of
 +GnuTLS. Thus, it would anyway be necessary to recompile cURL for
 +GNUnet. But what happens if one links cURL against this version of
 +GnuTLS? Well, first one would install GnuTLS by hand in the
 +system. Then, we build cURL. cURL will build against it just fine, but
 +the linker will eventually complain bitterly. The reason is that cURL
 +also links against a bunch of other system libraries (gssapi, ldap,
 +ssh2, rtmp, krb5, sasl2, see discussion on obscure protocols above),
 +which --- as they are part of the distribution --- were linked against
 +an older version of GnuTLS. As a result, the same binary would be
 +linked against two different versions of GnuTLS. That is typically a
 +recipe for disaster. Thus, in order to avoid updating a dozen system
 +libraries (and having two versions of those installed), it is
 +necessary to disable all of those cURL features that GNUnet does not
 +use, and there are many of those. For GNUnet, the more obscure
 +protocols supported by cURL are close to dead code --- mostly
 +harmless, but not useful. However, as some application may use one of
 +those features, distributions are typically forced to enable all of
 +those features, and thus including security issues that might arise
 +from that code.
 +
 +So to use a modern version of GnuTLS, a sane approach is to disable
 +all of the "optional" features of cURL that drag in system libraries
 +that link against the older GnuTLS. That works, except that one should
 +then NEVER install that version of libcurl in say /usr or /usr/local,
 +as that may break other parts of the system that might depend on these
 +features that we just disabled. Libtool versioning doesn't help here,
 +as it is not intended to deal with libraries that have optional
 +features. Naturally, installing cURL somewhere else is also
 +problematic, as we now need to be really careful that the linker will
 +link GNUnet against the right version. Note that none of this can
 +really be trivially fixed by the cURL developers.
 +
 +Rename to Fix
 +At this point, developers that don't want to rebuild an entire
 +distribution from scratch get grumpy. Grumpy developers do silly
 +things, like forking code to fix it. I called the fork gnurl (to be
 +pronounced with a grumpy voice and an emphasis on the R) as it is bits
 +of cURL, a bit more GNUish, for GNUnet, and gnurl can be pronounced to
 +indicate the grumpy origins.
 +
 +How does forking fix it? Easy. First, we can get rid of all of the
 +compatibility issues --- if you use libgnurl, you state that you don't
 +need anything but HTTP/HTTPS. Those applications that need more,
 +should stick with the original cURL. Those that do not, can choose to
 +move to something simpler. As the library gets a new name, we do not
 +have to worry about tons of packages breaking as soon as one rebuilds
 +it. So renaming itself and saying that "libgnurl = libcurl with only
 +HTTP/HTTPS support and GnuTLS" fixes 99% of the problems that darkened
 +my mood. Note that this pretty much CANNOT be done without a fork, as
 +renaming is an essential part of the fix. Now, there might be creative
 +solutions to achieve the same thing within the standard cURL build
 +system, but I'm not happy to wait for a decade for Daniel to review
 +the patches. The changes libgnurl makes to curl are miniscule and can
 +easily be applied again and again whenever libcurl makes a new
 +release.
 +
 +
 +Summary:
 +
 +I want to note that the main motiviations for this fork are technical
 +The goal of the cURL project is clearly to support many crypto
 +backends and many protocols. That is a worthy goal, and I wish them
 +luck with it. The goal for libgnurl is to support only HTTP and HTTPS
 +(and only HTTP 1.x) with a single crypto backend (GnuTLS) to ensure a
 +small footprint and uniform experience for developers regardless of
 +how libcurl was compiled.
 +
 +
 +Using libgnurl:
 +
 +Projects that use cURL only for HTTP/HTTPS and that would work with
 +GnuTLS should be able to switch to libgnurl by changing "-lcurl" to
 +"-lgnurl".  That's it.  No changes to the source code should be
 +required.  Continue to read the cURL documentation --- as libgnurl
 +strives for bug-for-bug compatibility with the HTTP/HTTPS/GnuTLS
 +subset of cURL.  However, we're happy to add new features relating to
 +this core subset and might be easier to convince than the cURL
 +developers.
 +
 +THANKS:
 +
 +gnURL was started within the GNUnet developer community,
 +initiated by Christian Grothoff, with contributions by
 +Jeff Burdges and Florian Dold.
 +Maintenance and development since 7.52.0 (released 2016-12-21)
 +is done by ng0.
 +The developers of gnURL express their thanks to the cURL
 +developer community.
 +
 +Now, on to the cURL documentation...
 +
 +
                                    _   _ ____  _
                                ___| | | |  _ \| |
                               / __| | | | |_) | |
diff --cc docs/examples/Makefile.am
index fed027166,e5ed222ef..8c0665c21
--- a/docs/examples/Makefile.am
+++ b/docs/examples/Makefile.am
@@@ -48,11 -48,14 +48,14 @@@ LIBS = $(BLANK_AT_MAKETIME
  
  # Dependencies
  if USE_EXPLICIT_LIB_DEPS
 -LDADD = $(LIBDIR)/libcurl.la @LIBCURL_LIBS@
 +LDADD = $(LIBDIR)/libgnurl.la @LIBCURL_LIBS@
  else
 -LDADD = $(LIBDIR)/libcurl.la
 +LDADD = $(LIBDIR)/libgnurl.la
  endif
  
+ # This might hold -Werror
+ CFLAGS += @CURL_CFLAG_EXTRAS@
+ 
  # Makefile.inc provides the check_PROGRAMS and COMPLICATED_EXAMPLES defines
  include Makefile.inc
  
diff --cc docs/libcurl/Makefile.inc
index 7d45ffa67,eea48c41e..22eb865eb
--- a/docs/libcurl/Makefile.inc
+++ b/docs/libcurl/Makefile.inc
@@@ -1,24 -1,25 +1,25 @@@
  # Shared between Makefile.am and CMakeLists.txt
  
 -man_MANS = curl_easy_cleanup.3 curl_easy_getinfo.3 curl_easy_init.3      \
 -  curl_easy_perform.3 curl_easy_setopt.3 curl_easy_duphandle.3           \
 -  curl_formadd.3 curl_formfree.3 curl_getdate.3 curl_getenv.3            \
 -  curl_slist_append.3 curl_slist_free_all.3 curl_version.3               \
 -  curl_version_info.3 curl_escape.3 curl_unescape.3 curl_free.3          \
 -  curl_strequal.3 curl_strnequal.3  curl_mprintf.3 curl_global_init.3    \
 -  curl_global_cleanup.3 curl_multi_add_handle.3 curl_multi_cleanup.3     \
 -  curl_multi_fdset.3 curl_multi_info_read.3 curl_multi_init.3            \
 -  curl_multi_perform.3 curl_multi_remove_handle.3 curl_share_cleanup.3   \
 -  curl_share_init.3 curl_share_setopt.3 libcurl.3 libcurl-easy.3         \
 -  libcurl-multi.3 libcurl-share.3 libcurl-errors.3 curl_easy_strerror.3  \
 -  curl_multi_strerror.3 curl_share_strerror.3 curl_global_init_mem.3     \
 -  libcurl-tutorial.3 curl_easy_reset.3 curl_easy_escape.3                \
 -  curl_easy_unescape.3 curl_multi_setopt.3 curl_multi_socket.3           \
 -  curl_multi_timeout.3 curl_formget.3 curl_multi_assign.3                \
 -  curl_easy_pause.3 curl_easy_recv.3 curl_easy_send.3                    \
 -  curl_multi_socket_action.3 curl_multi_wait.3 libcurl-symbols.3         \
 -  libcurl-thread.3 curl_multi_socket_all.3 curl_global_sslset.3          \
 -  curl_mime_init.3 curl_mime_free.3 curl_mime_addpart.3 curl_mime_name.3 \
 -  curl_mime_data.3 curl_mime_data_cb.3 curl_mime_filedata.3              \
 -  curl_mime_filename.3 curl_mime_subparts.3                              \
 -  curl_mime_type.3 curl_mime_headers.3 curl_mime_encoder.3 libcurl-env.3 \
 -  libcurl-security.3
 +man_MANS = gnurl_easy_cleanup.3 gnurl_easy_getinfo.3 gnurl_easy_init.3      \
 +  gnurl_easy_perform.3 gnurl_easy_setopt.3 gnurl_easy_duphandle.3           \
 +  gnurl_formadd.3 gnurl_formfree.3 gnurl_getdate.3 gnurl_getenv.3            \
 +  gnurl_slist_append.3 gnurl_slist_free_all.3 gnurl_version.3               \
 +  gnurl_version_info.3 gnurl_escape.3 gnurl_unescape.3 gnurl_free.3          \
 +  gnurl_strequal.3 gnurl_strnequal.3  gnurl_mprintf.3 gnurl_global_init.3    \
 +  gnurl_global_cleanup.3 gnurl_multi_add_handle.3 gnurl_multi_cleanup.3     \
 +  gnurl_multi_fdset.3 gnurl_multi_info_read.3 gnurl_multi_init.3            \
 +  gnurl_multi_perform.3 gnurl_multi_remove_handle.3 gnurl_share_cleanup.3   \
 +  gnurl_share_init.3 gnurl_share_setopt.3 libgnurl.3 libgnurl-easy.3         \
 +  libgnurl-multi.3 libgnurl-share.3 libgnurl-errors.3 gnurl_easy_strerror.3  \
 +  gnurl_multi_strerror.3 gnurl_share_strerror.3 gnurl_global_init_mem.3     \
 +  libgnurl-tutorial.3 gnurl_easy_reset.3 gnurl_easy_escape.3                \
 +  gnurl_easy_unescape.3 gnurl_multi_setopt.3 gnurl_multi_socket.3           \
 +  gnurl_multi_timeout.3 gnurl_formget.3 gnurl_multi_assign.3                \
 +  gnurl_easy_pause.3 gnurl_easy_recv.3 gnurl_easy_send.3                    \
 +  gnurl_multi_socket_action.3 gnurl_multi_wait.3 libgnurl-symbols.3         \
 +  libgnurl-thread.3 gnurl_multi_socket_all.3 gnurl_global_sslset.3          \
 +  gnurl_mime_init.3 gnurl_mime_free.3 gnurl_mime_addpart.3 gnurl_mime_name.3 \
 +  gnurl_mime_data.3 gnurl_mime_data_cb.3 gnurl_mime_filedata.3              \
 +  gnurl_mime_filename.3 gnurl_mime_subparts.3                              \
-   gnurl_mime_type.3 gnurl_mime_headers.3 gnurl_mime_encoder.3 libgnurl-env.3
++  gnurl_mime_type.3 gnurl_mime_headers.3 gnurl_mime_encoder.3 libgnurl-env.3 \
++  libgnurl-security.3
diff --cc docs/libcurl/gnurl_easy_getinfo.3
index c2ebd16b3,000000000..351a6b8d9
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_getinfo.3
+++ b/docs/libcurl/gnurl_easy_getinfo.3
@@@ -1,248 -1,0 +1,249 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.TH curl_easy_getinfo 3 "11 Feb 2009" "libcurl 7.19.4" "libcurl Manual"
 +.SH NAME
 +curl_easy_getinfo - extract information from a curl handle
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +
 +.B "CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );"
 +
 +.SH DESCRIPTION
 +Request internal information from the curl session with this function.  The
 +third argument \fBMUST\fP be a pointer to a long, a pointer to a char *, a
 +pointer to a struct curl_slist * or a pointer to a double (as this
 +documentation describes further down).  The data pointed-to will be filled in
 +accordingly and can be relied upon only if the function returns CURLE_OK.  Use
 +this function AFTER a performed transfer if you want to get transfer related
 +data.
 +
 +You should not free the memory returned by this function unless it is
 +explicitly mentioned below.
 +.SH AVAILABLE INFORMATION
 +The following information can be extracted:
 +.IP CURLINFO_EFFECTIVE_URL
 +Last used URL.
 +See \fICURLINFO_EFFECTIVE_URL(3)\fP
 +.IP CURLINFO_RESPONSE_CODE
 +Last received response code.
 +See \fICURLINFO_RESPONSE_CODE(3)\fP
 +.IP CURLINFO_HTTP_CONNECTCODE
 +Last proxy CONNECT response code.
 +See \fICURLINFO_HTTP_CONNECTCODE(3)\fP
 +.IP CURLINFO_HTTP_VERSION
 +The http version used in the connection.
 +See \fICURLINFO_HTTP_VERSION(3)\fP
 +.IP CURLINFO_FILETIME
- Remote time of the retrieved document.
- See \fICURLINFO_FILETIME(3)\fP
++Remote time of the retrieved document. See \fICURLINFO_FILETIME(3)\fP
++.IP CURLINFO_FILETIME_T
++Remote time of the retrieved document. See \fICURLINFO_FILETIME_T(3)\fP
 +.IP CURLINFO_TOTAL_TIME
 +Total time of previous transfer.
 +See \fICURLINFO_TOTAL_TIME(3)\fP
 +.IP CURLINFO_NAMELOOKUP_TIME
 +Time from start until name resolving completed.
 +See \fICURLINFO_NAMELOOKUP_TIME(3)\fP
 +.IP CURLINFO_CONNECT_TIME
 +Time from start until remote host or proxy completed.
 +See \fICURLINFO_CONNECT_TIME(3)\fP
 +.IP CURLINFO_APPCONNECT_TIME
 +Time from start until SSL/SSH handshake completed.
 +See \fICURLINFO_APPCONNECT_TIME(3)\fP
 +.IP CURLINFO_PRETRANSFER_TIME
 +Time from start until just before the transfer begins.
 +See \fICURLINFO_PRETRANSFER_TIME(3)\fP
 +.IP CURLINFO_STARTTRANSFER_TIME
 +Time from start until just when the first byte is received.
 +See \fICURLINFO_STARTTRANSFER_TIME(3)\fP
 +.IP CURLINFO_REDIRECT_TIME
 +Time taken for all redirect steps before the final transfer.
 +See \fICURLINFO_REDIRECT_TIME(3)\fP
 +.IP CURLINFO_REDIRECT_COUNT
 +Total number of redirects that were followed.
 +See \fICURLINFO_REDIRECT_COUNT(3)\fP
 +.IP CURLINFO_REDIRECT_URL
 +URL a redirect would take you to, had you enabled redirects.
 +See \fICURLINFO_REDIRECT_URL(3)\fP
 +.IP CURLINFO_SIZE_UPLOAD
 +(Deprecated) Number of bytes uploaded.
 +See \fICURLINFO_SIZE_UPLOAD(3)\fP
 +.IP CURLINFO_SIZE_UPLOAD_T
 +Number of bytes uploaded.
 +See \fICURLINFO_SIZE_UPLOAD_T(3)\fP
 +.IP CURLINFO_SIZE_DOWNLOAD
 +(Deprecated) Number of bytes downloaded.
 +See \fICURLINFO_SIZE_DOWNLOAD(3)\fP
 +.IP CURLINFO_SIZE_DOWNLOAD_T
 +Number of bytes downloaded.
 +See \fICURLINFO_SIZE_DOWNLOAD_T(3)\fP
 +.IP CURLINFO_SPEED_DOWNLOAD
 +(Deprecated) Average download speed.
 +See \fICURLINFO_SPEED_DOWNLOAD(3)\fP
 +.IP CURLINFO_SPEED_DOWNLOAD_T
 +Average download speed.
 +See \fICURLINFO_SPEED_DOWNLOAD_T(3)\fP
 +.IP CURLINFO_SPEED_UPLOAD
 +(Deprecated) Average upload speed.
 +See \fICURLINFO_SPEED_UPLOAD(3)\fP
 +.IP CURLINFO_SPEED_UPLOAD_T
 +Average upload speed.
 +See \fICURLINFO_SPEED_UPLOAD_T(3)\fP
 +.IP CURLINFO_HEADER_SIZE
 +Number of bytes of all headers received.
 +See \fICURLINFO_HEADER_SIZE(3)\fP
 +.IP CURLINFO_REQUEST_SIZE
 +Number of bytes sent in the issued HTTP requests.
 +See \fICURLINFO_REQUEST_SIZE(3)\fP
 +.IP CURLINFO_SSL_VERIFYRESULT
 +Certificate verification result.
 +See \fICURLINFO_SSL_VERIFYRESULT(3)\fP
 +.IP CURLINFO_PROXY_SSL_VERIFYRESULT
 +Proxy certificate verification result.
 +See \fICURLINFO_PROXY_SSL_VERIFYRESULT(3)\fP
 +.IP CURLINFO_SSL_ENGINES
 +A list of OpenSSL crypto engines.
 +See \fICURLINFO_SSL_ENGINES(3)\fP
 +.IP CURLINFO_CONTENT_LENGTH_DOWNLOAD
 +(Deprecated) Content length from the Content-Length header.
 +See \fICURLINFO_CONTENT_LENGTH_DOWNLOAD(3)\fP
 +.IP CURLINFO_CONTENT_LENGTH_DOWNLOAD_T
 +Content length from the Content-Length header.
 +See \fICURLINFO_CONTENT_LENGTH_DOWNLOAD_T(3)\fP
 +.IP CURLINFO_CONTENT_LENGTH_UPLOAD
 +(Deprecated) Upload size. See \fICURLINFO_CONTENT_LENGTH_UPLOAD(3)\fP
 +.IP CURLINFO_CONTENT_LENGTH_UPLOAD_T
 +Upload size.  See \fICURLINFO_CONTENT_LENGTH_UPLOAD_T(3)\fP
 +.IP CURLINFO_CONTENT_TYPE
 +Content type from the Content-Type header.
 +See \fICURLINFO_CONTENT_TYPE(3)\fP
 +.IP CURLINFO_PRIVATE
 +User's private data pointer.
 +See \fICURLINFO_PRIVATE(3)\fP
 +.IP CURLINFO_HTTPAUTH_AVAIL
 +Available HTTP authentication methods.
 +See \fICURLINFO_HTTPAUTH_AVAIL(3)\fP
 +.IP CURLINFO_PROXYAUTH_AVAIL
 +Available HTTP proxy authentication methods.
 +See \fICURLINFO_PROXYAUTH_AVAIL(3)\fP
 +.IP CURLINFO_OS_ERRNO
 +The errno from the last failure to connect.
 +See \fICURLINFO_OS_ERRNO(3)\fP
 +.IP CURLINFO_NUM_CONNECTS
 +Number of new successful connections used for previous transfer.
 +See \fICURLINFO_NUM_CONNECTS(3)\fP
 +.IP CURLINFO_PRIMARY_IP
 +IP address of the last connection.
 +See \fICURLINFO_PRIMARY_IP(3)\fP
 +.IP CURLINFO_PRIMARY_PORT
 +Port of the last connection.
 +See \fICURLINFO_PRIMARY_PORT(3)\fP
 +.IP CURLINFO_LOCAL_IP
 +Local-end IP address of last connection.
 +See \fICURLINFO_LOCAL_IP(3)\fP
 +.IP CURLINFO_LOCAL_PORT
 +Local-end port of last connection.
 +See \fICURLINFO_LOCAL_PORT(3)\fP
 +.IP CURLINFO_COOKIELIST
 +List of all known cookies.
 +See \fICURLINFO_COOKIELIST(3)\fP
 +.IP CURLINFO_LASTSOCKET
 +Last socket used.
 +See \fICURLINFO_LASTSOCKET(3)\fP
 +.IP CURLINFO_ACTIVESOCKET
 +The session's active socket.
 +See \fICURLINFO_ACTIVESOCKET(3)\fP
 +.IP CURLINFO_FTP_ENTRY_PATH
 +The entry path after logging in to an FTP server.
 +See \fICURLINFO_FTP_ENTRY_PATH(3)\fP
 +.IP CURLINFO_CERTINFO
 +Certificate chain.
 +See \fICURLINFO_CERTINFO(3)\fP
 +.IP CURLINFO_TLS_SSL_PTR
 +TLS session info that can be used for further processing.
 +See \fICURLINFO_TLS_SSL_PTR(3)\fP
 +.IP CURLINFO_TLS_SESSION
 +TLS session info that can be used for further processing.  See
 +\fICURLINFO_TLS_SESSION(3)\fP. Deprecated option, use
 +\fICURLINFO_TLS_SSL_PTR(3)\fP instead!
 +.IP CURLINFO_CONDITION_UNMET
 +Whether or not a time conditional was met.
 +See \fICURLINFO_CONDITION_UNMET(3)\fP
 +.IP CURLINFO_RTSP_SESSION_ID
 +RTSP session ID.
 +See \fICURLINFO_RTSP_SESSION_ID(3)\fP
 +.IP CURLINFO_RTSP_CLIENT_CSEQ
 +RTSP CSeq that will next be used.
 +See \fICURLINFO_RTSP_CLIENT_CSEQ(3)\fP
 +.IP CURLINFO_RTSP_SERVER_CSEQ
 +RTSP CSeq that will next be expected.
 +See \fICURLINFO_RTSP_SERVER_CSEQ(3)\fP
 +.IP CURLINFO_RTSP_CSEQ_RECV
 +RTSP CSeq last received.
 +See \fICURLINFO_RTSP_CSEQ_RECV(3)\fP
 +.IP CURLINFO_PROTOCOL
 +The protocol used for the connection. (Added in 7.52.0)
 +See \fICURLINFO_PROTOCOL(3)\fP
 +.IP CURLINFO_SCHEME
 +The scheme used for the connection. (Added in 7.52.0)
 +See \fICURLINFO_SCHEME(3)\fP
 +.SH TIMES
 +.nf
 +An overview of the six time values available from curl_easy_getinfo()
 +
 +curl_easy_perform()
 +    |
 +    |--NAMELOOKUP
 +    |--|--CONNECT
 +    |--|--|--APPCONNECT
 +    |--|--|--|--PRETRANSFER
 +    |--|--|--|--|--STARTTRANSFER
 +    |--|--|--|--|--|--TOTAL
 +    |--|--|--|--|--|--REDIRECT
 +.fi
 +.IP NAMELOOKUP
 +\fICURLINFO_NAMELOOKUP_TIME\fP. The time it took from the start until the name
 +resolving was completed.
 +.IP CONNECT
 +\fICURLINFO_CONNECT_TIME\fP. The time it took from the start until the connect
 +to the remote host (or proxy) was completed.
 +.IP APPCONNECT
 +\fICURLINFO_APPCONNECT_TIME\fP. The time it took from the start until the SSL
 +connect/handshake with the remote host was completed. (Added in in 7.19.0)
 +.IP PRETRANSFER
 +\fICURLINFO_PRETRANSFER_TIME\fP. The time it took from the start until the
 +file transfer is just about to begin. This includes all pre-transfer commands
 +and negotiations that are specific to the particular protocol(s) involved.
 +.IP STARTTRANSFER
 +\fICURLINFO_STARTTRANSFER_TIME\fP. The time it took from the start until the
 +first byte is received by libcurl.
 +.IP TOTAL
 +\fICURLINFO_TOTAL_TIME\fP. Total time of the previous request.
 +.IP REDIRECT
 +\fICURLINFO_REDIRECT_TIME\fP. The time it took for all redirection steps
 +include name lookup, connect, pretransfer and transfer before final
 +transaction was started. So, this is zero if no redirection took place.
 +.SH RETURN VALUE
 +If the operation was successful, CURLE_OK is returned. Otherwise an
 +appropriate error code will be returned.
 +.SH "SEE ALSO"
 +.BR curl_easy_setopt "(3)"
diff --cc docs/libcurl/gnurl_easy_setopt.3
index cafcf0819,000000000..cd05dd422
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_setopt.3
+++ b/docs/libcurl/gnurl_easy_setopt.3
@@@ -1,600 -1,0 +1,608 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.TH curl_easy_setopt 3 "25 Jun 2014" "libcurl 7.38.0" "libcurl Manual"
 +.SH NAME
 +curl_easy_setopt \- set options for a curl easy handle
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
 +.SH DESCRIPTION
 +\fIcurl_easy_setopt(3)\fP is used to tell libcurl how to behave. By setting
 +the appropriate options, the application can change libcurl's behavior.  All
 +options are set with an \fIoption\fP followed by a \fIparameter\fP. That
 +parameter can be a \fBlong\fP, a \fBfunction pointer\fP, an \fBobject
 +pointer\fP or a \fBcurl_off_t\fP, depending on what the specific option
 +expects. Read this manual carefully as bad input values may cause libcurl to
 +behave badly!  You can only set one option in each function call. A typical
 +application uses many \fIcurl_easy_setopt(3)\fP calls in the setup phase.
 +
 +Options set with this function call are valid for all forthcoming transfers
 +performed using this \fIhandle\fP.  The options are not in any way reset
 +between transfers, so if you want subsequent transfers with different options,
 +you must change them between the transfers. You can optionally reset all
 +options back to internal default with \fIcurl_easy_reset(3)\fP.
 +
 +Strings passed to libcurl as 'char *' arguments, are copied by the library;
 +thus the string storage associated to the pointer argument may be overwritten
 +after \fIcurl_easy_setopt(3)\fP returns. The only exception to this rule is
 +really \fICURLOPT_POSTFIELDS(3)\fP, but the alternative that copies the string
 +\fICURLOPT_COPYPOSTFIELDS(3)\fP has some usage characteristics you need to
 +read up on.
 +
 +The order in which the options are set does not matter.
 +
 +Before version 7.17.0, strings were not copied. Instead the user was forced
 +keep them available until libcurl no longer needed them.
 +
 +The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or
 +\fIcurl_easy_duphandle(3)\fP call.
 +.SH BEHAVIOR OPTIONS
 +.IP CURLOPT_VERBOSE
 +Display verbose information. See \fICURLOPT_VERBOSE(3)\fP
 +.IP CURLOPT_HEADER
 +Include the header in the body output. See \fICURLOPT_HEADER(3)\fP
 +.IP CURLOPT_NOPROGRESS
 +Shut off the progress meter. See \fICURLOPT_NOPROGRESS(3)\fP
 +.IP CURLOPT_NOSIGNAL
 +Do not install signal handlers. See \fICURLOPT_NOSIGNAL(3)\fP
 +.IP CURLOPT_WILDCARDMATCH
 +Transfer multiple files according to a file name pattern. See 
\fICURLOPT_WILDCARDMATCH(3)\fP
 +.SH CALLBACK OPTIONS
 +.IP CURLOPT_WRITEFUNCTION
 +Callback for writing data. See \fICURLOPT_WRITEFUNCTION(3)\fP
 +.IP CURLOPT_WRITEDATA
 +Data pointer to pass to the write callback. See \fICURLOPT_WRITEDATA(3)\fP
 +.IP CURLOPT_READFUNCTION
 +Callback for reading data. See \fICURLOPT_READFUNCTION(3)\fP
 +.IP CURLOPT_READDATA
 +Data pointer to pass to the read callback. See \fICURLOPT_READDATA(3)\fP
 +.IP CURLOPT_IOCTLFUNCTION
 +Callback for I/O operations. See \fICURLOPT_IOCTLFUNCTION(3)\fP
 +.IP CURLOPT_IOCTLDATA
 +Data pointer to pass to the I/O callback. See \fICURLOPT_IOCTLDATA(3)\fP
 +.IP CURLOPT_SEEKFUNCTION
 +Callback for seek operations. See \fICURLOPT_SEEKFUNCTION(3)\fP
 +.IP CURLOPT_SEEKDATA
 +Data pointer to pass to the seek callback. See \fICURLOPT_SEEKDATA(3)\fP
 +.IP CURLOPT_SOCKOPTFUNCTION
 +Callback for sockopt operations. See \fICURLOPT_SOCKOPTFUNCTION(3)\fP
 +.IP CURLOPT_SOCKOPTDATA
 +Data pointer to pass to the sockopt callback. See \fICURLOPT_SOCKOPTDATA(3)\fP
 +.IP CURLOPT_OPENSOCKETFUNCTION
 +Callback for socket creation. See \fICURLOPT_OPENSOCKETFUNCTION(3)\fP
 +.IP CURLOPT_OPENSOCKETDATA
 +Data pointer to pass to the open socket callback. See 
\fICURLOPT_OPENSOCKETDATA(3)\fP
 +.IP CURLOPT_CLOSESOCKETFUNCTION
 +Callback for closing socket. See \fICURLOPT_CLOSESOCKETFUNCTION(3)\fP
 +.IP CURLOPT_CLOSESOCKETDATA
 +Data pointer to pass to the close socket callback. See 
\fICURLOPT_CLOSESOCKETDATA(3)\fP
 +.IP CURLOPT_PROGRESSFUNCTION
 +OBSOLETE callback for progress meter. See \fICURLOPT_PROGRESSFUNCTION(3)\fP
 +.IP CURLOPT_PROGRESSDATA
 +Data pointer to pass to the progress meter callback. See 
\fICURLOPT_PROGRESSDATA(3)\fP
 +.IP CURLOPT_XFERINFOFUNCTION
 +Callback for progress meter. See \fICURLOPT_XFERINFOFUNCTION(3)\fP
 +.IP CURLOPT_XFERINFODATA
 +Data pointer to pass to the progress meter callback. See 
\fICURLOPT_XFERINFODATA(3)\fP
 +.IP CURLOPT_HEADERFUNCTION
 +Callback for writing received headers. See \fICURLOPT_HEADERFUNCTION(3)\fP
 +.IP CURLOPT_HEADERDATA
 +Data pointer to pass to the header callback. See \fICURLOPT_HEADERDATA(3)\fP
 +.IP CURLOPT_DEBUGFUNCTION
 +Callback for debug information. See \fICURLOPT_DEBUGFUNCTION(3)\fP
 +.IP CURLOPT_DEBUGDATA
 +Data pointer to pass to the debug callback. See \fICURLOPT_DEBUGDATA(3)\fP
 +.IP CURLOPT_SSL_CTX_FUNCTION
 +Callback for SSL context logic. See \fICURLOPT_SSL_CTX_FUNCTION(3)\fP
 +.IP CURLOPT_SSL_CTX_DATA
 +Data pointer to pass to the SSL context callback. See 
\fICURLOPT_SSL_CTX_DATA(3)\fP
 +.IP CURLOPT_CONV_TO_NETWORK_FUNCTION
 +Callback for code base conversion. See 
\fICURLOPT_CONV_TO_NETWORK_FUNCTION(3)\fP
 +.IP CURLOPT_CONV_FROM_NETWORK_FUNCTION
 +Callback for code base conversion. See 
\fICURLOPT_CONV_FROM_NETWORK_FUNCTION(3)\fP
 +.IP CURLOPT_CONV_FROM_UTF8_FUNCTION
 +Callback for code base conversion. See 
\fICURLOPT_CONV_FROM_UTF8_FUNCTION(3)\fP
 +.IP CURLOPT_INTERLEAVEFUNCTION
 +Callback for RTSP interleaved data. See \fICURLOPT_INTERLEAVEFUNCTION(3)\fP
 +.IP CURLOPT_INTERLEAVEDATA
 +Data pointer to pass to the RTSP interleave callback. See 
\fICURLOPT_INTERLEAVEDATA(3)\fP
 +.IP CURLOPT_CHUNK_BGN_FUNCTION
 +Callback for wildcard download start of chunk. See 
\fICURLOPT_CHUNK_BGN_FUNCTION(3)\fP
 +.IP CURLOPT_CHUNK_END_FUNCTION
 +Callback for wildcard download end of chunk. See 
\fICURLOPT_CHUNK_END_FUNCTION(3)\fP
 +.IP CURLOPT_CHUNK_DATA
 +Data pointer to pass to the chunk callbacks. See \fICURLOPT_CHUNK_DATA(3)\fP
 +.IP CURLOPT_FNMATCH_FUNCTION
 +Callback for wildcard matching. See \fICURLOPT_FNMATCH_FUNCTION(3)\fP
 +.IP CURLOPT_FNMATCH_DATA
 +Data pointer to pass to the wildcard matching callback. See 
\fICURLOPT_FNMATCH_DATA(3)\fP
 +.IP CURLOPT_SUPPRESS_CONNECT_HEADERS
 +Suppress proxy CONNECT response headers from user callbacks. See 
\fICURLOPT_SUPPRESS_CONNECT_HEADERS(3)\fP
++.IP CURLOPT_RESOLVER_START_FUNCTION
++Callback to be called before a new resolve request is started. See 
\fICURLOPT_RESOLVER_START_FUNCTION(3)\fP
++.IP CURLOPT_RESOLVER_START_DATA
++Data pointer to pass to resolver start callback. See 
\fICURLOPT_RESOLVER_START_DATA(3)\fP
 +.SH ERROR OPTIONS
 +.IP CURLOPT_ERRORBUFFER
 +Error message buffer. See \fICURLOPT_ERRORBUFFER(3)\fP
 +.IP CURLOPT_STDERR
 +stderr replacement stream. See \fICURLOPT_STDERR(3)\fP
 +.IP CURLOPT_FAILONERROR
 +Fail on HTTP 4xx errors. \fICURLOPT_FAILONERROR(3)\fP
 +.IP CURLOPT_KEEP_SENDING_ON_ERROR
 +Keep sending on HTTP >= 300 errors. \fICURLOPT_KEEP_SENDING_ON_ERROR(3)\fP
 +.SH NETWORK OPTIONS
 +.IP CURLOPT_URL
 +URL to work on. See \fICURLOPT_URL(3)\fP
 +.IP CURLOPT_PATH_AS_IS
 +Disable squashing /../ and /./ sequences in the path. See 
\fICURLOPT_PATH_AS_IS(3)\fP
 +.IP CURLOPT_PROTOCOLS
 +Allowed protocols. See \fICURLOPT_PROTOCOLS(3)\fP
 +.IP CURLOPT_REDIR_PROTOCOLS
 +Protocols to allow redirects to. See \fICURLOPT_REDIR_PROTOCOLS(3)\fP
 +.IP CURLOPT_DEFAULT_PROTOCOL
 +Default protocol. See \fICURLOPT_DEFAULT_PROTOCOL(3)\fP
 +.IP CURLOPT_PROXY
 +Proxy to use. See \fICURLOPT_PROXY(3)\fP
 +.IP CURLOPT_PRE_PROXY
 +Socks proxy to use. See \fICURLOPT_PRE_PROXY(3)\fP
 +.IP CURLOPT_PROXYPORT
 +Proxy port to use. See \fICURLOPT_PROXYPORT(3)\fP
 +.IP CURLOPT_PROXYTYPE
 +Proxy type. See \fICURLOPT_PROXYTYPE(3)\fP
 +.IP CURLOPT_NOPROXY
 +Filter out hosts from proxy use. \fICURLOPT_NOPROXY(3)\fP
 +.IP CURLOPT_HTTPPROXYTUNNEL
 +Tunnel through the HTTP proxy. \fICURLOPT_HTTPPROXYTUNNEL(3)\fP
 +.IP CURLOPT_CONNECT_TO
 +Connect to a specific host and port. See \fICURLOPT_CONNECT_TO(3)\fP
 +.IP CURLOPT_SOCKS5_AUTH
 +Socks5 authentication methods. See \fICURLOPT_SOCKS5_AUTH(3)\fP
 +.IP CURLOPT_SOCKS5_GSSAPI_SERVICE
 +Socks5 GSSAPI service name. \fICURLOPT_SOCKS5_GSSAPI_SERVICE(3)\fP
 +.IP CURLOPT_SOCKS5_GSSAPI_NEC
 +Socks5 GSSAPI NEC mode. See \fICURLOPT_SOCKS5_GSSAPI_NEC(3)\fP
 +.IP CURLOPT_PROXY_SERVICE_NAME
 +Proxy authentication service name. \fICURLOPT_PROXY_SERVICE_NAME(3)\fP
 +.IP CURLOPT_SERVICE_NAME
 +Authentication service name. \fICURLOPT_SERVICE_NAME(3)\fP
 +.IP CURLOPT_INTERFACE
 +Bind connection locally to this. See \fICURLOPT_INTERFACE(3)\fP
 +.IP CURLOPT_LOCALPORT
 +Bind connection locally to this port. See \fICURLOPT_LOCALPORT(3)\fP
 +.IP CURLOPT_LOCALPORTRANGE
 +Bind connection locally to port range. See \fICURLOPT_LOCALPORTRANGE(3)\fP
 +.IP CURLOPT_DNS_CACHE_TIMEOUT
 +Timeout for DNS cache. See \fICURLOPT_DNS_CACHE_TIMEOUT(3)\fP
 +.IP CURLOPT_DNS_USE_GLOBAL_CACHE
 +OBSOLETE Enable global DNS cache. See \fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP
 +.IP CURLOPT_BUFFERSIZE
 +Ask for alternate buffer size. See \fICURLOPT_BUFFERSIZE(3)\fP
 +.IP CURLOPT_PORT
 +Port number to connect to. See \fICURLOPT_PORT(3)\fP
 +.IP CURLOPT_TCP_FASTOPEN
 +Enable TFO, TCP Fast Open. See \fICURLOPT_TCP_FASTOPEN(3)\fP
 +.IP CURLOPT_TCP_NODELAY
 +Disable the Nagle algorithm. See \fICURLOPT_TCP_NODELAY(3)\fP
 +.IP CURLOPT_ADDRESS_SCOPE
 +IPv6 scope for local addresses. See \fICURLOPT_ADDRESS_SCOPE(3)\fP
 +.IP CURLOPT_TCP_KEEPALIVE
 +Enable TCP keep-alive. See \fICURLOPT_TCP_KEEPALIVE(3)\fP
 +.IP CURLOPT_TCP_KEEPIDLE
 +Idle time before sending keep-alive. See \fICURLOPT_TCP_KEEPIDLE(3)\fP
 +.IP CURLOPT_TCP_KEEPINTVL
 +Interval between keep-alive probes. See \fICURLOPT_TCP_KEEPINTVL(3)\fP
 +.IP CURLOPT_UNIX_SOCKET_PATH
 +Path to a Unix domain socket. See \fICURLOPT_UNIX_SOCKET_PATH(3)\fP
 +.IP CURLOPT_ABSTRACT_UNIX_SOCKET
 +Path to an abstract Unix domain socket. See 
\fICURLOPT_ABSTRACT_UNIX_SOCKET(3)\fP
 +.SH NAMES and PASSWORDS OPTIONS (Authentication)
 +.IP CURLOPT_NETRC
 +Enable .netrc parsing. See \fICURLOPT_NETRC(3)\fP
 +.IP CURLOPT_NETRC_FILE
 +\&.netrc file name. See \fICURLOPT_NETRC_FILE(3)\fP
 +.IP CURLOPT_USERPWD
 +User name and password. See \fICURLOPT_USERPWD(3)\fP
 +.IP CURLOPT_PROXYUSERPWD
 +Proxy user name and password. See \fICURLOPT_PROXYUSERPWD(3)\fP
 +.IP CURLOPT_USERNAME
 +User name. See \fICURLOPT_USERNAME(3)\fP
 +.IP CURLOPT_PASSWORD
 +Password. See \fICURLOPT_PASSWORD(3)\fP
 +.IP CURLOPT_LOGIN_OPTIONS
 +Login options. See \fICURLOPT_LOGIN_OPTIONS(3)\fP
 +.IP CURLOPT_PROXYUSERNAME
 +Proxy user name. See \fICURLOPT_PROXYUSERNAME(3)\fP
 +.IP CURLOPT_PROXYPASSWORD
 +Proxy password. See \fICURLOPT_PROXYPASSWORD(3)\fP
 +.IP CURLOPT_HTTPAUTH
 +HTTP server authentication methods. See \fICURLOPT_HTTPAUTH(3)\fP
 +.IP CURLOPT_TLSAUTH_USERNAME
 +TLS authentication user name. See \fICURLOPT_TLSAUTH_USERNAME(3)\fP
 +.IP CURLOPT_PROXY_TLSAUTH_USERNAME
 +Proxy TLS authentication user name. See 
\fICURLOPT_PROXY_TLSAUTH_USERNAME(3)\fP
 +.IP CURLOPT_TLSAUTH_PASSWORD
 +TLS authentication password. See \fICURLOPT_TLSAUTH_PASSWORD(3)\fP
 +.IP CURLOPT_PROXY_TLSAUTH_PASSWORD
 +Proxy TLS authentication password. See \fICURLOPT_PROXY_TLSAUTH_PASSWORD(3)\fP
 +.IP CURLOPT_TLSAUTH_TYPE
 +TLS authentication methods. See \fICURLOPT_TLSAUTH_TYPE(3)\fP
 +.IP CURLOPT_PROXY_TLSAUTH_TYPE
 +Proxy TLS authentication methods. See \fICURLOPT_PROXY_TLSAUTH_TYPE(3)\fP
 +.IP CURLOPT_PROXYAUTH
 +HTTP proxy authentication methods. See \fICURLOPT_PROXYAUTH(3)\fP
 +.IP CURLOPT_SASL_IR
 +Enable SASL initial response. See \fICURLOPT_SASL_IR(3)\fP
 +.IP CURLOPT_XOAUTH2_BEARER
 +OAuth2 bearer token. See \fICURLOPT_XOAUTH2_BEARER(3)\fP
 +.SH HTTP OPTIONS
 +.IP CURLOPT_AUTOREFERER
 +Automatically set Referer: header. See \fICURLOPT_AUTOREFERER(3)\fP
 +.IP CURLOPT_ACCEPT_ENCODING
 +Accept-Encoding and automatic decompressing data. See 
\fICURLOPT_ACCEPT_ENCODING(3)\fP
 +.IP CURLOPT_TRANSFER_ENCODING
 +Request Transfer-Encoding. See \fICURLOPT_TRANSFER_ENCODING(3)\fP
 +.IP CURLOPT_FOLLOWLOCATION
 +Follow HTTP redirects. See \fICURLOPT_FOLLOWLOCATION(3)\fP
 +.IP CURLOPT_UNRESTRICTED_AUTH
 +Do not restrict authentication to original host. 
\fICURLOPT_UNRESTRICTED_AUTH(3)\fP
 +.IP CURLOPT_MAXREDIRS
 +Maximum number of redirects to follow. See \fICURLOPT_MAXREDIRS(3)\fP
 +.IP CURLOPT_POSTREDIR
 +How to act on redirects after POST. See \fICURLOPT_POSTREDIR(3)\fP
 +.IP CURLOPT_PUT
 +Issue a HTTP PUT request. See \fICURLOPT_PUT(3)\fP
 +.IP CURLOPT_POST
 +Issue a HTTP POST request. See \fICURLOPT_POST(3)\fP
 +.IP CURLOPT_POSTFIELDS
 +Send a POST with this data. See \fICURLOPT_POSTFIELDS(3)\fP
 +.IP CURLOPT_POSTFIELDSIZE
 +The POST data is this big. See \fICURLOPT_POSTFIELDSIZE(3)\fP
 +.IP CURLOPT_POSTFIELDSIZE_LARGE
 +The POST data is this big. See \fICURLOPT_POSTFIELDSIZE_LARGE(3)\fP
 +.IP CURLOPT_COPYPOSTFIELDS
 +Send a POST with this data - and copy it. See \fICURLOPT_COPYPOSTFIELDS(3)\fP
 +.IP CURLOPT_HTTPPOST
 +Multipart formpost HTTP POST. See \fICURLOPT_HTTPPOST(3)\fP
 +.IP CURLOPT_REFERER
 +Referer: header. See \fICURLOPT_REFERER(3)\fP
 +.IP CURLOPT_USERAGENT
 +User-Agent: header. See \fICURLOPT_USERAGENT(3)\fP
 +.IP CURLOPT_HTTPHEADER
 +Custom HTTP headers. See \fICURLOPT_HTTPHEADER(3)\fP
 +.IP CURLOPT_HEADEROPT
 +Control custom headers. See \fICURLOPT_HEADEROPT(3)\fP
 +.IP CURLOPT_PROXYHEADER
 +Custom HTTP headers sent to proxy. See \fICURLOPT_PROXYHEADER(3)\fP
 +.IP CURLOPT_HTTP200ALIASES
 +Alternative versions of 200 OK. See \fICURLOPT_HTTP200ALIASES(3)\fP
 +.IP CURLOPT_COOKIE
 +Cookie(s) to send. See \fICURLOPT_COOKIE(3)\fP
 +.IP CURLOPT_COOKIEFILE
 +File to read cookies from. See \fICURLOPT_COOKIEFILE(3)\fP
 +.IP CURLOPT_COOKIEJAR
 +File to write cookies to. See \fICURLOPT_COOKIEJAR(3)\fP
 +.IP CURLOPT_COOKIESESSION
 +Start a new cookie session. See \fICURLOPT_COOKIESESSION(3)\fP
 +.IP CURLOPT_COOKIELIST
 +Add or control cookies. See \fICURLOPT_COOKIELIST(3)\fP
 +.IP CURLOPT_HTTPGET
 +Do a HTTP GET request. See \fICURLOPT_HTTPGET(3)\fP
 +.IP CURLOPT_REQUEST_TARGET
 +Set the request target. \fICURLOPT_REQUEST_TARGET(3)\fP
 +.IP CURLOPT_HTTP_VERSION
 +HTTP version to use. \fICURLOPT_HTTP_VERSION(3)\fP
 +.IP CURLOPT_IGNORE_CONTENT_LENGTH
 +Ignore Content-Length. See \fICURLOPT_IGNORE_CONTENT_LENGTH(3)\fP
 +.IP CURLOPT_HTTP_CONTENT_DECODING
 +Disable Content decoding. See \fICURLOPT_HTTP_CONTENT_DECODING(3)\fP
 +.IP CURLOPT_HTTP_TRANSFER_DECODING
 +Disable Transfer decoding. See \fICURLOPT_HTTP_TRANSFER_DECODING(3)\fP
 +.IP CURLOPT_EXPECT_100_TIMEOUT_MS
 +100-continue timeout. See \fICURLOPT_EXPECT_100_TIMEOUT_MS(3)\fP
 +.IP CURLOPT_PIPEWAIT
 +Wait on connection to pipeline on it. See \fICURLOPT_PIPEWAIT(3)\fP
 +.IP CURLOPT_STREAM_DEPENDS
 +This HTTP/2 stream depends on another. See \fICURLOPT_STREAM_DEPENDS(3)\fP
 +.IP CURLOPT_STREAM_DEPENDS_E
 +This HTTP/2 stream depends on another exclusively. See
 +\fICURLOPT_STREAM_DEPENDS_E(3)\fP
 +.IP CURLOPT_STREAM_WEIGHT
 +Set this HTTP/2 stream's weight. See \fICURLOPT_STREAM_WEIGHT(3)\fP
 +.SH SMTP OPTIONS
 +.IP CURLOPT_MAIL_FROM
 +Address of the sender. See \fICURLOPT_MAIL_FROM(3)\fP
 +.IP CURLOPT_MAIL_RCPT
 +Address of the recipients. See \fICURLOPT_MAIL_RCPT(3)\fP
 +.IP CURLOPT_MAIL_AUTH
 +Authentication address. See \fICURLOPT_MAIL_AUTH(3)\fP
 +.SH TFTP OPTIONS
 +.IP CURLOPT_TFTP_BLKSIZE
 +TFTP block size. See \fICURLOPT_TFTP_BLKSIZE(3)\fP
 +.IP CURLOPT_TFTP_NO_OPTIONS
 +Do not send TFTP options requests. See \fICURLOPT_TFTP_NO_OPTIONS(3)\fP
 +.SH FTP OPTIONS
 +.IP CURLOPT_FTPPORT
 +Use active FTP. See \fICURLOPT_FTPPORT(3)\fP
 +.IP CURLOPT_QUOTE
 +Commands to run before transfer. See \fICURLOPT_QUOTE(3)\fP
 +.IP CURLOPT_POSTQUOTE
 +Commands to run after transfer. See \fICURLOPT_POSTQUOTE(3)\fP
 +.IP CURLOPT_PREQUOTE
 +Commands to run just before transfer. See \fICURLOPT_PREQUOTE(3)\fP
 +.IP CURLOPT_APPEND
 +Append to remote file. See \fICURLOPT_APPEND(3)\fP
 +.IP CURLOPT_FTP_USE_EPRT
 +Use EPTR. See \fICURLOPT_FTP_USE_EPRT(3)\fP
 +.IP CURLOPT_FTP_USE_EPSV
 +Use EPSV. See \fICURLOPT_FTP_USE_EPSV(3)\fP
 +.IP CURLOPT_FTP_USE_PRET
 +Use PRET. See \fICURLOPT_FTP_USE_PRET(3)\fP
 +.IP CURLOPT_FTP_CREATE_MISSING_DIRS
 +Create missing directories on the remote server. See 
\fICURLOPT_FTP_CREATE_MISSING_DIRS(3)\fP
 +.IP CURLOPT_FTP_RESPONSE_TIMEOUT
 +Timeout for FTP responses. See \fICURLOPT_FTP_RESPONSE_TIMEOUT(3)\fP
 +.IP CURLOPT_FTP_ALTERNATIVE_TO_USER
 +Alternative to USER. See \fICURLOPT_FTP_ALTERNATIVE_TO_USER(3)\fP
 +.IP CURLOPT_FTP_SKIP_PASV_IP
 +Ignore the IP address in the PASV response. See 
\fICURLOPT_FTP_SKIP_PASV_IP(3)\fP
 +.IP CURLOPT_FTPSSLAUTH
 +Control how to do TLS. See \fICURLOPT_FTPSSLAUTH(3)\fP
 +.IP CURLOPT_FTP_SSL_CCC
 +Back to non-TLS again after authentication. See \fICURLOPT_FTP_SSL_CCC(3)\fP
 +.IP CURLOPT_FTP_ACCOUNT
 +Send ACCT command. See \fICURLOPT_FTP_ACCOUNT(3)\fP
 +.IP CURLOPT_FTP_FILEMETHOD
 +Specify how to reach files. See \fICURLOPT_FTP_FILEMETHOD(3)\fP
 +.SH RTSP OPTIONS
 +.IP CURLOPT_RTSP_REQUEST
 +RTSP request. See \fICURLOPT_RTSP_REQUEST(3)\fP
 +.IP CURLOPT_RTSP_SESSION_ID
 +RTSP session-id. See \fICURLOPT_RTSP_SESSION_ID(3)\fP
 +.IP CURLOPT_RTSP_STREAM_URI
 +RTSP stream URI. See \fICURLOPT_RTSP_STREAM_URI(3)\fP
 +.IP CURLOPT_RTSP_TRANSPORT
 +RTSP Transport: header. See \fICURLOPT_RTSP_TRANSPORT(3)\fP
 +.IP CURLOPT_RTSP_CLIENT_CSEQ
 +Client CSEQ number. See \fICURLOPT_RTSP_CLIENT_CSEQ(3)\fP
 +.IP CURLOPT_RTSP_SERVER_CSEQ
 +CSEQ number for RTSP Server->Client request. See 
\fICURLOPT_RTSP_SERVER_CSEQ(3)\fP
 +.SH PROTOCOL OPTIONS
 +.IP CURLOPT_TRANSFERTEXT
 +Use text transfer. See \fICURLOPT_TRANSFERTEXT(3)\fP
 +.IP CURLOPT_PROXY_TRANSFER_MODE
 +Add transfer mode to URL over proxy. See \fICURLOPT_PROXY_TRANSFER_MODE(3)\fP
 +.IP CURLOPT_CRLF
 +Convert newlines. See \fICURLOPT_CRLF(3)\fP
 +.IP CURLOPT_RANGE
 +Range requests. See \fICURLOPT_RANGE(3)\fP
 +.IP CURLOPT_RESUME_FROM
 +Resume a transfer. See \fICURLOPT_RESUME_FROM(3)\fP
 +.IP CURLOPT_RESUME_FROM_LARGE
 +Resume a transfer. See \fICURLOPT_RESUME_FROM_LARGE(3)\fP
 +.IP CURLOPT_CUSTOMREQUEST
 +Custom request/method. See \fICURLOPT_CUSTOMREQUEST(3)\fP
 +.IP CURLOPT_FILETIME
 +Request file modification date and time. See \fICURLOPT_FILETIME(3)\fP
 +.IP CURLOPT_DIRLISTONLY
 +List only. See \fICURLOPT_DIRLISTONLY(3)\fP
 +.IP CURLOPT_NOBODY
 +Do not get the body contents. See \fICURLOPT_NOBODY(3)\fP
 +.IP CURLOPT_INFILESIZE
 +Size of file to send. \fICURLOPT_INFILESIZE(3)\fP
 +.IP CURLOPT_INFILESIZE_LARGE
 +Size of file to send. \fICURLOPT_INFILESIZE_LARGE(3)\fP
 +.IP CURLOPT_UPLOAD
 +Upload data. See \fICURLOPT_UPLOAD(3)\fP
 +.IP CURLOPT_MIMEPOST
 +Post/send MIME data. See \fICURLOPT_MIMEPOST(3)\fP
 +.IP CURLOPT_MAXFILESIZE
 +Maximum file size to get. See \fICURLOPT_MAXFILESIZE(3)\fP
 +.IP CURLOPT_MAXFILESIZE_LARGE
 +Maximum file size to get. See \fICURLOPT_MAXFILESIZE_LARGE(3)\fP
 +.IP CURLOPT_TIMECONDITION
 +Make a time conditional request. See \fICURLOPT_TIMECONDITION(3)\fP
 +.IP CURLOPT_TIMEVALUE
 +Time value for the time conditional request. See \fICURLOPT_TIMEVALUE(3)\fP
++.IP CURLOPT_TIMEVALUE_LARGE
++Time value for the time conditional request. See 
\fICURLOPT_TIMEVALUE_LARGE(3)\fP
 +.SH CONNECTION OPTIONS
 +.IP CURLOPT_TIMEOUT
 +Timeout for the entire request. See \fICURLOPT_TIMEOUT(3)\fP
 +.IP CURLOPT_TIMEOUT_MS
 +Millisecond timeout for the entire request. See \fICURLOPT_TIMEOUT_MS(3)\fP
 +.IP CURLOPT_LOW_SPEED_LIMIT
 +Low speed limit to abort transfer. See \fICURLOPT_LOW_SPEED_LIMIT(3)\fP
 +.IP CURLOPT_LOW_SPEED_TIME
 +Time to be below the speed to trigger low speed abort. See 
\fICURLOPT_LOW_SPEED_TIME(3)\fP
 +.IP CURLOPT_MAX_SEND_SPEED_LARGE
 +Cap the upload speed to this. See \fICURLOPT_MAX_SEND_SPEED_LARGE(3)\fP
 +.IP CURLOPT_MAX_RECV_SPEED_LARGE
 +Cap the download speed to this. See \fICURLOPT_MAX_RECV_SPEED_LARGE(3)\fP
 +.IP CURLOPT_MAXCONNECTS
 +Maximum number of connections in the connection pool. See 
\fICURLOPT_MAXCONNECTS(3)\fP
 +.IP CURLOPT_FRESH_CONNECT
 +Use a new connection. \fICURLOPT_FRESH_CONNECT(3)\fP
 +.IP CURLOPT_FORBID_REUSE
 +Prevent subsequent connections from re-using this. See 
\fICURLOPT_FORBID_REUSE(3)\fP
 +.IP CURLOPT_CONNECTTIMEOUT
 +Timeout for the connection phase. See \fICURLOPT_CONNECTTIMEOUT(3)\fP
 +.IP CURLOPT_CONNECTTIMEOUT_MS
 +Millisecond timeout for the connection phase. See 
\fICURLOPT_CONNECTTIMEOUT_MS(3)\fP
 +.IP CURLOPT_IPRESOLVE
 +IP version to resolve to. See \fICURLOPT_IPRESOLVE(3)\fP
 +.IP CURLOPT_CONNECT_ONLY
 +Only connect, nothing else. See \fICURLOPT_CONNECT_ONLY(3)\fP
 +.IP CURLOPT_USE_SSL
 +Use TLS/SSL. See \fICURLOPT_USE_SSL(3)\fP
 +.IP CURLOPT_RESOLVE
 +Provide fixed/fake name resolves. See \fICURLOPT_RESOLVE(3)\fP
 +.IP CURLOPT_DNS_INTERFACE
 +Bind name resolves to this interface. See \fICURLOPT_DNS_INTERFACE(3)\fP
 +.IP CURLOPT_DNS_LOCAL_IP4
 +Bind name resolves to this IP4 address. See \fICURLOPT_DNS_LOCAL_IP4(3)\fP
 +.IP CURLOPT_DNS_LOCAL_IP6
 +Bind name resolves to this IP6 address. See \fICURLOPT_DNS_LOCAL_IP6(3)\fP
 +.IP CURLOPT_DNS_SERVERS
 +Preferred DNS servers. See \fICURLOPT_DNS_SERVERS(3)\fP
 +.IP CURLOPT_ACCEPTTIMEOUT_MS
 +Timeout for waiting for the server's connect back to be accepted. See 
\fICURLOPT_ACCEPTTIMEOUT_MS(3)\fP
++.IP CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS
++Timeout for happy eyeballs. See \fICURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS(3)\fP
 +.SH SSL and SECURITY OPTIONS
 +.IP CURLOPT_SSLCERT
 +Client cert. See \fICURLOPT_SSLCERT(3)\fP
 +.IP CURLOPT_PROXY_SSLCERT
 +Proxy client cert. See \fICURLOPT_PROXY_SSLCERT(3)\fP
 +.IP CURLOPT_SSLCERTTYPE
 +Client cert type.  See \fICURLOPT_SSLCERTTYPE(3)\fP
 +.IP CURLOPT_PROXY_SSLCERTTYPE
 +Proxy client cert type.  See \fICURLOPT_PROXY_SSLCERTTYPE(3)\fP
 +.IP CURLOPT_SSLKEY
 +Client key. See \fICURLOPT_SSLKEY(3)\fP
 +.IP CURLOPT_PROXY_SSLKEY
 +Proxy client key. See \fICURLOPT_PROXY_SSLKEY(3)\fP
 +.IP CURLOPT_SSLKEYTYPE
 +Client key type. See \fICURLOPT_SSLKEYTYPE(3)\fP
 +.IP CURLOPT_PROXY_SSLKEYTYPE
 +Proxy client key type. See \fICURLOPT_PROXY_SSLKEYTYPE(3)\fP
 +.IP CURLOPT_KEYPASSWD
 +Client key password. See \fICURLOPT_KEYPASSWD(3)\fP
 +.IP CURLOPT_PROXY_KEYPASSWD
 +Proxy client key password. See \fICURLOPT_PROXY_KEYPASSWD(3)\fP
 +.IP CURLOPT_SSL_ENABLE_ALPN
 +Enable use of ALPN. See \fICURLOPT_SSL_ENABLE_ALPN(3)\fP
 +.IP CURLOPT_SSL_ENABLE_NPN
 +Enable use of NPN. See \fICURLOPT_SSL_ENABLE_NPN(3)\fP
 +.IP CURLOPT_SSLENGINE
 +Use identifier with SSL engine. See \fICURLOPT_SSLENGINE(3)\fP
 +.IP CURLOPT_SSLENGINE_DEFAULT
 +Default SSL engine. See \fICURLOPT_SSLENGINE_DEFAULT(3)\fP
 +.IP CURLOPT_SSL_FALSESTART
 +Enable TLS False Start. See \fICURLOPT_SSL_FALSESTART(3)\fP
 +.IP CURLOPT_SSLVERSION
 +SSL version to use. See \fICURLOPT_SSLVERSION(3)\fP
 +.IP CURLOPT_PROXY_SSLVERSION
 +Proxy SSL version to use. See \fICURLOPT_PROXY_SSLVERSION(3)\fP
 +.IP CURLOPT_SSL_VERIFYHOST
 +Verify the host name in the SSL certificate. See 
\fICURLOPT_SSL_VERIFYHOST(3)\fP
 +.IP CURLOPT_PROXY_SSL_VERIFYHOST
 +Verify the host name in the proxy SSL certificate. See 
\fICURLOPT_PROXY_SSL_VERIFYHOST(3)\fP
 +.IP CURLOPT_SSL_VERIFYPEER
 +Verify the SSL certificate. See \fICURLOPT_SSL_VERIFYPEER(3)\fP
 +.IP CURLOPT_PROXY_SSL_VERIFYPEER
 +Verify the proxy SSL certificate. See \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP
 +.IP CURLOPT_SSL_VERIFYSTATUS
 +Verify the SSL certificate's status. See \fICURLOPT_SSL_VERIFYSTATUS(3)\fP
 +.IP CURLOPT_CAINFO
 +CA cert bundle. See \fICURLOPT_CAINFO(3)\fP
 +.IP CURLOPT_PROXY_CAINFO
 +Proxy CA cert bundle. See \fICURLOPT_PROXY_CAINFO(3)\fP
 +.IP CURLOPT_ISSUERCERT
 +Issuer certificate. See \fICURLOPT_ISSUERCERT(3)\fP
 +.IP CURLOPT_CAPATH
 +Path to CA cert bundle. See \fICURLOPT_CAPATH(3)\fP
 +.IP CURLOPT_PROXY_CAPATH
 +Path to proxy CA cert bundle. See \fICURLOPT_PROXY_CAPATH(3)\fP
 +.IP CURLOPT_CRLFILE
 +Certificate Revocation List. See \fICURLOPT_CRLFILE(3)\fP
 +.IP CURLOPT_PROXY_CRLFILE
 +Proxy Certificate Revocation List. See \fICURLOPT_PROXY_CRLFILE(3)\fP
 +.IP CURLOPT_CERTINFO
 +Extract certificate info. See \fICURLOPT_CERTINFO(3)\fP
 +.IP CURLOPT_PINNEDPUBLICKEY
 +Set pinned SSL public key . See \fICURLOPT_PINNEDPUBLICKEY(3)\fP
 +.IP CURLOPT_PROXY_PINNEDPUBLICKEY
 +Set the proxy's pinned SSL public key. See
 +\fICURLOPT_PROXY_PINNEDPUBLICKEY(3)\fP
 +.IP CURLOPT_RANDOM_FILE
 +Provide source for entropy random data. See \fICURLOPT_RANDOM_FILE(3)\fP
 +.IP CURLOPT_EGDSOCKET
 +Identify EGD socket for entropy. See \fICURLOPT_EGDSOCKET(3)\fP
 +.IP CURLOPT_SSL_CIPHER_LIST
 +Ciphers to use. See \fICURLOPT_SSL_CIPHER_LIST(3)\fP
 +.IP CURLOPT_PROXY_SSL_CIPHER_LIST
 +Proxy ciphers to use. See \fICURLOPT_PROXY_SSL_CIPHER_LIST(3)\fP
 +.IP CURLOPT_SSL_SESSIONID_CACHE
 +Disable SSL session-id cache. See \fICURLOPT_SSL_SESSIONID_CACHE(3)\fP
 +.IP CURLOPT_SSL_OPTIONS
 +Control SSL behavior. See \fICURLOPT_SSL_OPTIONS(3)\fP
 +.IP CURLOPT_PROXY_SSL_OPTIONS
 +Control proxy SSL behavior. See \fICURLOPT_PROXY_SSL_OPTIONS(3)\fP
 +.IP CURLOPT_KRBLEVEL
 +Kerberos security level. See \fICURLOPT_KRBLEVEL(3)\fP
 +.IP CURLOPT_GSSAPI_DELEGATION
 +Disable GSS-API delegation. See \fICURLOPT_GSSAPI_DELEGATION(3)\fP
 +.SH SSH OPTIONS
 +.IP CURLOPT_SSH_AUTH_TYPES
 +SSH authentication types. See \fICURLOPT_SSH_AUTH_TYPES(3)\fP
 +.IP CURLOPT_SSH_COMPRESSION
 +Enable SSH compression. See \fICURLOPT_SSH_COMPRESSION(3)\fP
 +.IP CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
 +MD5 of host's public key. See \fICURLOPT_SSH_HOST_PUBLIC_KEY_MD5(3)\fP
 +.IP CURLOPT_SSH_PUBLIC_KEYFILE
 +File name of public key. See \fICURLOPT_SSH_PUBLIC_KEYFILE(3)\fP
 +.IP CURLOPT_SSH_PRIVATE_KEYFILE
 +File name of private key. See \fICURLOPT_SSH_PRIVATE_KEYFILE(3)\fP
 +.IP CURLOPT_SSH_KNOWNHOSTS
 +File name with known hosts. See \fICURLOPT_SSH_KNOWNHOSTS(3)\fP
 +.IP CURLOPT_SSH_KEYFUNCTION
 +Callback for known hosts handling. See \fICURLOPT_SSH_KEYFUNCTION(3)\fP
 +.IP CURLOPT_SSH_KEYDATA
 +Custom pointer to pass to ssh key callback. See \fICURLOPT_SSH_KEYDATA(3)\fP
 +.SH OTHER OPTIONS
 +.IP CURLOPT_PRIVATE
 +Private pointer to store. See \fICURLOPT_PRIVATE(3)\fP
 +.IP CURLOPT_SHARE
 +Share object to use. See \fICURLOPT_SHARE(3)\fP
 +.IP CURLOPT_NEW_FILE_PERMS
 +Mode for creating new remote files. See \fICURLOPT_NEW_FILE_PERMS(3)\fP
 +.IP CURLOPT_NEW_DIRECTORY_PERMS
 +Mode for creating new remote directories. See 
\fICURLOPT_NEW_DIRECTORY_PERMS(3)\fP
 +.SH TELNET OPTIONS
 +.IP CURLOPT_TELNETOPTIONS
 +TELNET options. See \fICURLOPT_TELNETOPTIONS(3)\fP
 +.SH RETURN VALUE
 +\fICURLE_OK\fP (zero) means that the option was set properly, non-zero means 
an
 +error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors(3)\fP
 +man page for the full list with descriptions.
 +
 +If you try to set an option that libcurl doesn't know about, perhaps because
 +the library is too old to support it or the option was removed in a recent
 +version, this function will return \fICURLE_UNKNOWN_OPTION\fP. If support for
 +the option was disabled at compile-time, it will return
 +\fICURLE_NOT_BUILT_IN\fP.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +  res = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_easy_init "(3), " curl_easy_cleanup "(3), " curl_easy_reset "(3), "
 +.BR curl_easy_getinfo "(3), " curl_multi_setopt "(3), "
diff --cc docs/libcurl/gnurl_getdate.3
index 5a4f8f25a,000000000..2694faa9e
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_getdate.3
+++ b/docs/libcurl/gnurl_getdate.3
@@@ -1,108 -1,0 +1,110 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.TH curl_getdate 3 "12 Aug 2005" "libcurl 7.0" "libcurl Manual"
 +.SH NAME
 +curl_getdate - Convert a date string to number of seconds
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "time_t curl_getdate(char *" datestring ", time_t *"now " );"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_getdate(3)\fP returns the number of seconds since the Epoch, January
 +1st 1970 00:00:00 in the UTC time zone, for the date and time that the
 +\fIdatestring\fP parameter specifies. The \fInow\fP parameter is not used,
 +pass a NULL there.
 +.SH PARSING DATES AND TIMES
 +A "date" is a string containing several items separated by whitespace. The
 +order of the items is immaterial.  A date string may contain many flavors of
 +items:
 +.TP 0.8i
 +.B calendar date items
 +Can be specified several ways. Month names can only be three-letter english
 +abbreviations, numbers can be zero-prefixed and the year may use 2 or 4 
digits.
 +Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6.
 +.TP
 +.B time of the day items
 +This string specifies the time on a given day. You must specify it with 6
 +digits with two colons: HH:MM:SS. To not include the time in a date string,
 +will make the function assume 00:00:00. Example: 18:19:21.
 +.TP
 +.B time zone items
 +Specifies international time zone. There are a few acronyms supported, but in
 +general you should instead use the specific relative time compared to
 +UTC. Supported formats include: -1200, MST, +0100.
 +.TP
 +.B day of the week items
 +Specifies a day of the week. Days of the week may be spelled out in full
 +(using english): `Sunday', `Monday', etc or they may be abbreviated to their
 +first three letters. This is usually not info that adds anything.
 +.TP
 +.B pure numbers
 +If a decimal number of the form YYYYMMDD appears, then YYYY is read as the
 +year, MM as the month number and DD as the day of the month, for the specified
 +calendar date.
 +.PP
 +.SH EXAMPLES
 +.nf
 +Sun, 06 Nov 1994 08:49:37 GMT
 +Sunday, 06-Nov-94 08:49:37 GMT
 +Sun Nov  6 08:49:37 1994
 +06 Nov 1994 08:49:37 GMT
 +06-Nov-94 08:49:37 GMT
 +Nov  6 08:49:37 1994
 +06 Nov 1994 08:49:37
 +06-Nov-94 08:49:37
 +1994 Nov 6 08:49:37
 +GMT 08:49:37 06-Nov-94 Sunday
 +94 6 Nov 08:49:37
 +1994 Nov 6
 +06-Nov-94
 +Sun Nov 6 94
 +1994.Nov.6
 +Sun/Nov/6/94/GMT
 +Sun, 06 Nov 1994 08:49:37 CET
 +06 Nov 1994 08:49:37 EST
 +Sun, 12 Sep 2004 15:05:58 -0700
 +Sat, 11 Sep 2004 21:32:11 +0200
 +20040912 15:05:58 -0700
 +20040911 +0200
 +.fi
 +.SH STANDARDS
 +This parser was written to handle date formats specified in RFC 822 (including
 +the update in RFC 1123) using time zone name or time zone delta and RFC 850
 +(obsoleted by RFC 1036) and ANSI C's asctime() format. These formats are the
 +only ones RFC 7231 says HTTP applications may use.
 +.SH RETURN VALUE
 +This function returns -1 when it fails to parse the date string. Otherwise it
 +returns the number of seconds as described.
 +
- If the year is larger than 2037 on systems with 32 bit time_t, this function
- will return 0x7fffffff (since that is the largest possible signed 32 bit
- number).
++On systems with a signed 32 bit time_t: if the year is larger than 2037 or
++less than 1903, this function will return -1.
 +
- Having a 64 bit time_t is not a guarantee that dates beyond 03:14:07 UTC,
- January 19, 2038 will work fine. On systems with a 64 bit time_t but with a
- crippled mktime(), \fIcurl_getdate(3)\fP will return -1 in this case.
++On systems with an unsigned 32 bit time_t: if the year is larger than 2106 or
++less than 1970, this function will return -1.
++
++On systems with 64 bit time_t: if the year is less than 1583, this function
++will return -1. (The Gregorian calendar was first introduced 1582 so no "real"
++dates in this way of doing dates existed before then.)
 +.SH "SEE ALSO"
 +.BR curl_easy_escape "(3), " curl_easy_unescape "(3), "
 +.BR CURLOPT_TIMECONDITION "(3), " CURLOPT_TIMEVALUE "(3) "
diff --cc docs/libcurl/gnurl_global_init.3
index 6ff5b774b,000000000..f4cd5d6df
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_global_init.3
+++ b/docs/libcurl/gnurl_global_init.3
@@@ -1,101 -1,0 +1,101 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.TH curl_global_init 3 "11 May 2004" "libcurl 7.12" "libcurl Manual"
 +.SH NAME
 +curl_global_init - Global libcurl initialisation
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLcode curl_global_init(long " flags ");"
 +.ad
 +.SH DESCRIPTION
 +This function sets up the program environment that libcurl needs.  Think of it
 +as an extension of the library loader.
 +
 +This function must be called at least once within a program (a program is all
 +the code that shares a memory space) before the program calls any other
 +function in libcurl.  The environment it sets up is constant for the life of
 +the program and is the same for every program, so multiple calls have the same
 +effect as one call.
 +
 +The flags option is a bit pattern that tells libcurl exactly what features to
 +init, as described below. Set the desired bits by ORing the values together.
 +In normal operation, you must specify CURL_GLOBAL_ALL.  Don't use any other
 +value unless you are familiar with it and mean to control internal operations 
of
 +libcurl.
 +
 +\fBThis function is not thread safe.\fP You must not call it when any other
 +thread in the program (i.e. a thread sharing the same memory) is running.
 +This doesn't just mean no other thread that is using libcurl.  Because
 +\fIcurl_global_init(3)\fP calls functions of other libraries that are
 +similarly thread unsafe, it could conflict with any other thread that uses
 +these other libraries.
 +
 +If you are initializing libcurl from a Windows DLL you should not initialize 
it
 +from DllMain or a static initializer because Windows holds the loader lock
 +during that time and it could cause a deadlock.
 +
 +See the description in \fIlibcurl(3)\fP of global environment requirements for
 +details of how to use this function.
 +.SH FLAGS
 +.IP CURL_GLOBAL_ALL
 +Initialize everything possible. This sets all known bits except
 +\fBCURL_GLOBAL_ACK_EINTR\fP.
 +
 +.IP CURL_GLOBAL_SSL
- (This flag's presence or absense serves no meaning since 7.57.0. The
++(This flag's presence or absence serves no meaning since 7.57.0. The
 +description below is for older libcurl versions.)
 +
 +Initialize SSL.
 +
 +The implication here is that if this bit is not set, the initialization of the
 +SSL layer needs to be done by the application or at least outside of
 +libcurl. The exact procedure how to do SSL initializtion depends on the TLS
 +backend libcurl uses.
 +
 +Doing TLS based transfers without having the TLS layer initialized may lead to
 +unexpected behaviors.
 +.IP CURL_GLOBAL_WIN32
 +Initialize the Win32 socket libraries.
 +
 +The implication here is that if this bit is not set, the initialization of
 +winsock has to be done by the application or you risk getting undefined
 +behaviors. This option exists for when the initialization is handled outside
 +of libcurl so there's no need for libcurl to do it again.
 +.IP CURL_GLOBAL_NOTHING
 +Initialise nothing extra. This sets no bit.
 +.IP CURL_GLOBAL_DEFAULT
 +A sensible default. It will init both SSL and Win32. Right now, this equals
 +the functionality of the \fBCURL_GLOBAL_ALL\fP mask.
 +.IP CURL_GLOBAL_ACK_EINTR
 +When this flag is set, curl will acknowledge EINTR condition when connecting
 +or when waiting for data.  Otherwise, curl waits until full timeout
 +elapses. (Added in 7.30.0)
 +.SH RETURN VALUE
 +If this function returns non-zero, something went wrong and you cannot use the
 +other curl functions.
 +.SH "SEE ALSO"
 +.BR curl_global_init_mem "(3), "
 +.BR curl_global_cleanup "(3), "
 +.BR curl_global_sslset "(3), "
 +.BR curl_easy_init "(3) "
 +.BR libcurl "(3) "
diff --cc docs/libcurl/gnurl_share_setopt.3
index c9966214e,000000000..d903f49a4
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_share_setopt.3
+++ b/docs/libcurl/gnurl_share_setopt.3
@@@ -1,100 -1,0 +1,103 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.TH curl_share_setopt 3 "8 Aug 2003" "libcurl 7.10.7" "libcurl Manual"
 +.SH NAME
 +curl_share_setopt - Set options for a shared object
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, parameter);
 +.ad
 +.SH DESCRIPTION
 +Set the \fIoption\fP to \fIparameter\fP for the given \fIshare\fP.
 +.SH OPTIONS
 +.IP CURLSHOPT_LOCKFUNC
 +The \fIparameter\fP must be a pointer to a function matching the following
 +prototype:
 +
 +void lock_function(CURL *handle, curl_lock_data data, curl_lock_access access,
 +void *userptr);
 +
 +\fIdata\fP defines what data libcurl wants to lock, and you must make sure 
that
 +only one lock is given at any time for each kind of data.
 +
 +\fIaccess\fP defines what access type libcurl wants, shared or single.
 +
 +\fIuserptr\fP is the pointer you set with \fICURLSHOPT_USERDATA\fP.
 +.IP CURLSHOPT_UNLOCKFUNC
 +The \fIparameter\fP must be a pointer to a function matching the following
 +prototype:
 +
 +void unlock_function(CURL *handle, curl_lock_data data, void *userptr);
 +
 +\fIdata\fP defines what data libcurl wants to unlock, and you must make sure
 +that only one lock is given at any time for each kind of data.
 +
 +\fIuserptr\fP is the pointer you set with \fICURLSHOPT_USERDATA\fP.
 +.IP CURLSHOPT_SHARE
 +The \fIparameter\fP specifies a type of data that should be shared. This may
 +be set to one of the values described below.
 +.RS
 +.IP CURL_LOCK_DATA_COOKIE
 +Cookie data will be shared across the easy handles using this shared object.
 +.IP CURL_LOCK_DATA_DNS
 +Cached DNS hosts will be shared across the easy handles using this shared
 +object. Note that when you use the multi interface, all easy handles added to
- the same multi handle will share DNS cache by default without this having to
- be used!
++the same multi handle will share DNS cache by default without using this
++option.
 +.IP CURL_LOCK_DATA_SSL_SESSION
 +SSL session IDs will be shared across the easy handles using this shared
 +object. This will reduce the time spent in the SSL handshake when reconnecting
 +to the same server. Note SSL session IDs are reused within the same easy 
handle
 +by default. Note this symbol was added in 7.10.3 but was not implemented until
 +7.23.0.
 +.IP CURL_LOCK_DATA_CONNECT
 +Put the connection cache in the share object and make all easy handles using
 +this share object share the connection cache. Using this, you can for example
 +do multi-threaded libcurl use with one handle in each thread, and yet have a
 +shared pool of unused connections and this way get way better connection
 +re-use than if you use one separate pool in each thread.
 +
 +Connections that are used for HTTP/1.1 Pipelining or HTTP/2 multiplexing only
 +get additional transfers added to them if the existing connection is held by
 +the same multi or easy handle. libcurl does not support doing HTTP/2 streams
 +in different threads using a shared connection.
 +
 +Support for \fBCURL_LOCK_DATA_CONNECT\fP was added in 7.57.0, but the symbol
 +existed before this.
++
++Note that when you use the multi interface, all easy handles added to the same
++multi handle will share connection cache by default without using this option.
 +.RE
 +.IP CURLSHOPT_UNSHARE
 +This option does the opposite of \fICURLSHOPT_SHARE\fP. It specifies that
 +the specified \fIparameter\fP will no longer be shared. Valid values are
 +the same as those for \fICURLSHOPT_SHARE\fP.
 +.IP CURLSHOPT_USERDATA
 +The \fIparameter\fP allows you to specify a pointer to data that will be 
passed
 +to the lock_function and unlock_function each time it is called.
 +.SH RETURN VALUE
 +CURLSHE_OK (zero) means that the option was set properly, non-zero means an
 +error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors.3\fP
 +man page for the full list with descriptions.
 +.SH "SEE ALSO"
 +.BR curl_share_cleanup "(3), " curl_share_init "(3)"
diff --cc docs/libcurl/libgnurl-security.3
index 000000000,377301ee0..377301ee0
mode 000000,100644..100644
--- a/docs/libcurl/libgnurl-security.3
+++ b/docs/libcurl/libgnurl-security.3
diff --cc docs/libcurl/opts/GNURLINFO_CONDITION_UNMET.3
index e83b4e2f7,000000000..a52e5f750
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_CONDITION_UNMET.3
+++ b/docs/libcurl/opts/GNURLINFO_CONDITION_UNMET.3
@@@ -1,68 -1,0 +1,68 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.TH CURLINFO_CONDITION_UNMET 3 "1 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_CONDITION_UNMET \- get info on unmet time conditional
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONDITION_UNMET, long 
*unmet);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the number 1 if the condition provided in
 +the previous request didn't match (see \fICURLOPT_TIMECONDITION(3)\fP). Alas,
 +if this returns a 1 you know that the reason you didn't get data in return is
- because it didn't fulfill the condition. The long ths argument points to will
++because it didn't fulfill the condition. The long this argument points to will
 +get a zero stored if the condition instead was met.
 +.SH PROTOCOLS
 +HTTP and some
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* January 1, 2020 is 1577833200 */
 +  curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
 +
 +  /* If-Modified-Since the above time stamp */
 +  curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
 +
 +  /* Perform the request */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    /* check the time condition */
 +    long unmet;
 +    res = curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &unmet);
 +    if(!res) {
 +      printf("The time condition was %sfulfilled\\n", unmet?"NOT":"");
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.4
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_FILETIME.3
index 90a010210,000000000..966cc3821
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_FILETIME.3
+++ b/docs/libcurl/opts/GNURLINFO_FILETIME.3
@@@ -1,66 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.TH CURLINFO_FILETIME 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_FILETIME \- get the remote time of the retrieved document
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME, long *timep);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the remote time of the retrieved document
 +(in number of seconds since 1 jan 1970 in the GMT/UTC time zone). If you get
 +-1, it can be because of many reasons (it might be unknown, the server might
 +hide it or the server doesn't support the command that tells document time
 +etc) and the time of the document is unknown.
 +
- Note that you must tell the server to collect this information before the
- transfer is made, by using the \fICURLOPT_FILETIME(3)\fP option to
- \fIcurl_easy_setopt(3)\fP or you will unconditionally get a -1 back.
++You must tell libcurl to collect this information before the transfer is made,
++by using the \fICURLOPT_FILETIME(3)\fP option to \fIcurl_easy_setopt(3)\fP or
++you will unconditionally get a -1 back.
++
++Consider using \fICURLINFO_FILETIME_T(3)\fP to be able to extract dates beyond
++the year 2038 on systems using 32 bit longs.
 +.SH PROTOCOLS
 +HTTP(S), FTP(S), SFTP
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  /* Ask for filetime */
 +  curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
 +    if((CURLE_OK == res) && (filetime >= 0)) {
 +      time_t file_time = (time_t)filetime;
 +      printf("filetime %s: %s", filename, ctime(&file_time));
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.5
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_COOKIEFILE.3
index 7faf66474,000000000..fcf908631
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_COOKIEFILE.3
+++ b/docs/libcurl/opts/GNURLOPT_COOKIEFILE.3
@@@ -1,82 -1,0 +1,83 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.TH CURLOPT_COOKIEFILE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_COOKIEFILE \- file name to read cookies from
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEFILE, char *filename);
 +.SH DESCRIPTION
 +Pass a pointer to a zero terminated string as parameter. It should point to
 +the file name of your file holding cookie data to read. The cookie data can be
 +in either the old Netscape / Mozilla cookie data format or just regular HTTP
 +headers (Set-Cookie style) dumped to a file.
 +
 +It also enables the cookie engine, making libcurl parse and send cookies on
 +subsequent requests with this handle.
 +
 +Given an empty or non-existing file or by passing the empty string ("") to
 +this option, you can enable the cookie engine without reading any initial
- cookies.
++cookies. If you tell libcurl the file name is "-" (just a single minus sign),
++libcurl will instead read from stdin.
 +
 +This option only \fBreads\fP cookies. To make libcurl write cookies to file,
 +see \fICURLOPT_COOKIEJAR(3)\fP.
 +
 +Exercise caution if you are using this option and multiple transfers may 
occur.
 +If you use the Set-Cookie format and don't specify a domain then the cookie is
 +sent for any domain (even after redirects are followed) and cannot be modified
 +by a server-set cookie. If a server sets a cookie of the same name then both
 +will be sent on a future transfer to that server, likely not what you 
intended.
 +To address these issues set a domain in Set-Cookie (doing that will include
 +sub-domains) or use the Netscape format.
 +
 +If you use this option multiple times, you just add more files to read.
 +Subsequent files will add more cookies.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/foo.bin";);
 +
 +  /* get cookies from an existing file */
 +  curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookies.txt");
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +As long as HTTP is supported
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_COOKIE "(3), " CURLOPT_COOKIEJAR "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_HEADER.3
index 057257eb6,000000000..22e56ae6b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HEADER.3
+++ b/docs/libcurl/opts/GNURLOPT_HEADER.3
@@@ -1,63 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.TH CURLOPT_HEADER 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_HEADER \- pass headers to the data stream
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADER, long onoff);
 +.SH DESCRIPTION
- Pass in \fIonoff\fP set to 1 to tell the library to include the header in the
- body output for requests with this \fIhandle\fP. This option is relevant for
- protocols that actually have headers or other meta-data (like HTTP and FTP).
++Pass the long value \fIonoff\fP set to 1 to ask libcurl to include the headers
++in the write callback (\fICURLOPT_WRITEFUNCTION(3)\fP). This option is
++relevant for protocols that actually have headers or other meta-data (like
++HTTP and FTP).
 +
- When asking to get the header info passed to the same callback as the body, it
- is not possible to accurately separate them again without detailed knowledge
++When asking to get the headers passed to the same callback as the body, it is
++not possible to accurately separate them again without detailed knowledge
 +about the protocol in use.
 +
++Further: the \fCURLOPT_WRITEFUNCTION(3)\fP callback is limited to only ever
++get a maximum of \fICURL_MAX_WRITE_SIZE\fP bytes passed to it (16KB), while a
++header can be longer and the \fICURLOPT_HEADERFUNCTION(3)\fP supports getting
++called with headers up to \fICURL_MAX_HTTP_HEADER\fP bytes big (100KB).
++
 +It is often better to use \fICURLOPT_HEADERFUNCTION(3)\fP to get the header
 +data separately.
 +
 +While named confusingly similar, \fICURLOPT_HTTPHEADER(3)\fP is used to set
 +custom HTTP headers!
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +Most
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH RETURN VALUE
 +Returns CURLE_OK.
 +.SH "SEE ALSO"
 +.BR CURLOPT_HEADERFUNCTION "(3), "
 +.BR CURLOPT_HTTPHEADER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_HEADERFUNCTION.3
index bf772b613,000000000..e103d578d
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HEADERFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_HEADERFUNCTION.3
@@@ -1,106 -1,0 +1,111 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.TH CURLOPT_HEADERFUNCTION 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_HEADERFUNCTION \- callback that receives header data
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +size_t header_callback(char *buffer,
 +                       size_t size,
 +                       size_t nitems,
 +                       void *userdata);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADERFUNCTION, 
header_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This function gets called by libcurl as soon as it has received header
 +data. The header callback will be called once for each header and only
 +complete header lines are passed on to the callback. Parsing headers is very
 +easy using this. The size of the data pointed to by \fIbuffer\fP is \fIsize\fP
 +multiplied with \fInmemb\fP. Do not assume that the header line is zero
 +terminated! The pointer named \fIuserdata\fP is the one you set with the
 +\fICURLOPT_HEADERDATA(3)\fP option. This callback function must return the
 +number of bytes actually taken care of. If that amount differs from the amount
 +passed in to your function, it'll signal an error to the library. This will
 +cause the transfer to get aborted and the libcurl function in progress will
 +return \fICURLE_WRITE_ERROR\fP.
 +
 +A complete HTTP header that is passed to this function can be up to
 +\fICURL_MAX_HTTP_HEADER\fP (100K) bytes.
 +
 +If this option is not set, or if it is set to NULL, but
 +\fICURLOPT_HEADERDATA(3)\fP is set to anything but NULL, the function used to
 +accept response data will be used instead. That is, it will be the function
 +specified with \fICURLOPT_WRITEFUNCTION(3)\fP, or if it is not specified or
 +NULL - the default, stream-writing function.
 +
 +It's important to note that the callback will be invoked for the headers of
 +all responses received after initiating a request and not just the final
 +response. This includes all responses which occur during authentication
 +negotiation. If you need to operate on only the headers from the final
 +response, you will need to collect headers in the callback yourself and use
 +HTTP status lines, for example, to delimit response boundaries.
 +
 +When a server sends a chunked encoded transfer, it may contain a trailer. That
 +trailer is identical to a HTTP header and if such a trailer is received it is
 +passed to the application using this callback as well. There are several ways
 +to detect it being a trailer and not an ordinary header: 1) it comes after the
 +response-body. 2) it comes after the final header line (CR LF) 3) a Trailer:
 +header among the regular response-headers mention what header(s) to expect in
 +the trailer.
 +
 +For non-HTTP protocols like FTP, POP3, IMAP and SMTP this function will get
 +called with the server responses to the commands that libcurl sends.
++.SH LIMITATIONS
++libcurl does not unfold HTTP "folded headers" (deprecated since RFC 7230). A
++folded header is a header that continues on a subsequent line and starts with
++a whitespace. Such folds will be passed to the header callback as a separate
++one, although strictly it is just a continuation of the previous line.
 +.SH DEFAULT
 +Nothing.
 +.SH PROTOCOLS
 +Used for all protocols with headers or meta-data concept: HTTP, FTP, POP3,
 +IMAP, SMTP and more.
 +.SH EXAMPLE
 +.nf
 +static size_t header_callback(char *buffer, size_t size,
 +                              size_t nitems, void *userdata)
 +{
 +  /* received header is nitems * size long in 'buffer' NOT ZERO TERMINATED */
 +  /* 'userdata' is set with CURLOPT_HEADERDATA */
 +  return nitems * size;
 +}
 +
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_HEADERDATA "(3), " CURLOPT_WRITEFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_NOPROXY.3
index 873724484,000000000..b6b2a3d66
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_NOPROXY.3
+++ b/docs/libcurl/opts/GNURLOPT_NOPROXY.3
@@@ -1,74 -1,0 +1,79 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.TH CURLOPT_NOPROXY 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_NOPROXY \- disable proxy use for specific hosts
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROXY, char *noproxy);
 +.SH DESCRIPTION
 +Pass a pointer to a zero terminated string. The string consists of a comma
 +separated list of host names that do not require a proxy to get reached, even
 +if one is specified.  The only wildcard available is a single * character,
 +which matches all hosts, and effectively disables the proxy. Each name in this
 +list is matched as either a domain which contains the hostname, or the
 +hostname itself. For example, example.com would match example.com,
 +example.com:80, and www.example.com, but not www.notanexample.com or
 +example.com.othertld.
 +
 +If the name in the noproxy list has a leading period, it is a domain match
 +against the provided host name. This way ".example.com" will switch off proxy
 +use for both "www.example.com" as well as for "foo.example.com".
 +
 +Setting the noproxy string to "" (an empty string) will explicitly enable the
 +proxy for all host names, even if there is an environment variable set for it.
 +
++Enter IPv6 numerical addresses in the list of host names without enclosing
++brackets:
++
++ "example.com,::1,localhost"
++
 +The application does not have to keep the string around after setting this
 +option.
 +.SH "Environment variables"
 +See \fIGNURLOPT_PROXY(3)\fP
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +Most
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  /* accept various URLs */
 +  curl_easy_setopt(curl, CURLOPT_URL, input);
 +  /* use this proxy */
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80";);
 +  /* ... but make sure this host name is not proxied */
 +  curl_easy_setopt(curl, CURLOPT_NOPROXY, "www.example.com");
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.4
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR GNURLOPT_PROXY "(3), " GNURLOPT_PROXYAUTH "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PINNEDPUBLICKEY.3
index c2fd27068,000000000..ff4d60da0
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PINNEDPUBLICKEY.3
+++ b/docs/libcurl/opts/GNURLOPT_PINNEDPUBLICKEY.3
@@@ -1,126 -1,0 +1,132 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.TH CURLOPT_PINNEDPUBLICKEY 3 "27 Aug 2014" "libcurl 7.38.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PINNEDPUBLICKEY \- set pinned public key
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PINNEDPUBLICKEY, char 
*pinnedpubkey);
 +.SH DESCRIPTION
 +Pass a pointer to a zero terminated string as parameter. The string can be the
 +file name of your pinned public key. The file format expected is "PEM" or 
"DER".
 +The string can also be any number of base64 encoded sha256 hashes preceded by
 +"sha256//" and separated by ";"
 +
 +When negotiating a TLS or SSL connection, the server sends a certificate
 +indicating its identity. A public key is extracted from this certificate and
 +if it does not exactly match the public key provided to this option, curl will
 +abort the connection before sending or receiving any data.
 +
 +On mismatch, \fICURLE_SSL_PINNEDPUBKEYNOTMATCH\fP is returned.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, "/etc/publickey.der");
 +  /* OR
 +  curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, 
"sha256//YhKJKSzoTt2b5FP18fvpHo7fJYqQCjAa3HWY3tvRMwE=;sha256//t62CeU2tQiqkexU74Gxa2eg7fRbEgoChTociMee9wno=");
 +  */
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH PUBLIC KEY EXTRACTION
 +If you do not have the server's public key file you can extract it from the
 +server's certificate.
 +.nf
 +# retrieve the server's certificate if you don't already have it
 +#
 +# be sure to examine the certificate to see if it is what you expected
 +#
 +# Windows-specific:
 +# - Use NUL instead of /dev/null.
 +# - OpenSSL may wait for input instead of disconnecting. Hit enter.
 +# - If you don't have sed, then just copy the certificate into a file:
 +#   Lines from -----BEGIN CERTIFICATE----- to -----END CERTIFICATE-----.
 +#
 +openssl s_client -servername www.example.com -connect www.example.com:443 < 
/dev/null | sed -n "/-----BEGIN/,/-----END/p" > www.example.com.pem
 +
 +# extract public key in pem format from certificate
 +openssl x509 -in www.example.com.pem -pubkey -noout > 
www.example.com.pubkey.pem
 +
 +# convert public key from pem to der
 +openssl asn1parse -noout -inform pem -in www.example.com.pubkey.pem -out 
www.example.com.pubkey.der
 +
 +# sha256 hash and base64 encode der to string for use
 +openssl dgst -sha256 -binary www.example.com.pubkey.der | openssl base64
 +.fi
 +The public key in PEM format contains a header, base64 data and a
 +footer:
 +.nf
 +-----BEGIN PUBLIC KEY-----
 +[BASE 64 DATA]
 +-----END PUBLIC KEY-----
 +.fi
 +.SH AVAILABILITY
 +PEM/DER support:
 +
-   7.39.0: OpenSSL, GnuTLS and GSKit
++  7.39.0: OpenSSL, GnuTLS
++
++  7.39.0-7.48.0,7.58.1+: GSKit
 +
 +  7.43.0: NSS and wolfSSL/CyaSSL
 +
 +  7.47.0: mbedtls
 +
 +  7.49.0: PolarSSL
 +
 +  7.54.1: SecureTransport/DarwinSSL on macOS 10.7+/iOS 10+
 +
++  7.58.1: SChannel/WinSSL
++
 +sha256 support:
 +
 +  7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL
 +
 +  7.47.0: mbedtls
 +
 +  7.49.0: PolarSSL
 +
 +  7.54.1: SecureTransport/DarwinSSL on macOS 10.7+/iOS 10+
 +
++  7.58.1: SChannel/WinSSL Windows XP SP3+
++
 +Other SSL backends not supported.
 +.SH RETURN VALUE
 +Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSL_VERIFYPEER "(3), "
 +.BR CURLOPT_SSL_VERIFYHOST "(3), "
 +.BR CURLOPT_CAINFO "(3), "
 +.BR CURLOPT_CAPATH "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_RESOLVE.3
index e321f000f,000000000..b6144a78a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RESOLVE.3
+++ b/docs/libcurl/opts/GNURLOPT_RESOLVE.3
@@@ -1,88 -1,0 +1,92 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.TH CURLOPT_RESOLVE 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_RESOLVE \- provide custom host name to IP address resolves
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESOLVE,
 +                          struct curl_slist *hosts);
 +.SH DESCRIPTION
 +Pass a pointer to a linked list of strings with host name resolve information
 +to use for requests with this handle. The linked list should be a fully valid
 +list of \fBstruct curl_slist\fP structs properly filled in. Use
 +\fIcurl_slist_append(3)\fP to create the list and \fIcurl_slist_free_all(3)\fP
 +to clean up an entire list.
 +
 +Each single name resolve string should be written using the format
- HOST:PORT:ADDRESS where HOST is the name libcurl will try to resolve, PORT is
- the port number of the service where libcurl wants to connect to the HOST and
- ADDRESS is the numerical IP address. If libcurl is built to support IPv6,
- ADDRESS can of course be either IPv4 or IPv6 style addressing.
++HOST:PORT:ADDRESS[,ADDRESS]... where HOST is the name libcurl will try
++to resolve, PORT is the port number of the service where libcurl wants
++to connect to the HOST and ADDRESS is one or more numerical IP
++addresses. If you specify multiple ip addresses they need to be
++separated by comma. If libcurl is built to support IPv6, each of the
++ADDRESS entries can of course be either IPv4 or IPv6 style addressing.
 +
 +This option effectively pre-populates the DNS cache with entries for the
 +host+port pair so redirects and everything that operations against the
 +HOST+PORT will instead use your provided ADDRESS. Addresses set with
 +\fICURLOPT_RESOLVE(3)\fP will not time-out from the DNS cache like ordinary
 +entries.
 +
 +The provided ADDRESS set by this option will be used even if
 +\fICURLOPT_IPRESOLVE(3)\fP is set to make libcurl use another IP version.
 +
 +Remove names from the DNS cache again, to stop providing these fake resolves,
 +by including a string in the linked list that uses the format
 +\&"-HOST:PORT". The host name must be prefixed with a dash, and the host name
 +and port number must exactly match what was already added previously.
 +
 +Support for providing the ADDRESS within [brackets] was added in 7.57.0.
++
++Support for providing multiple IP addresses per entry was added in 7.59.0.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl;
 +struct curl_slist *host = NULL;
 +host = curl_slist_append(NULL, "example.com:80:127.0.0.1");
 +
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_RESOLVE, host);
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  curl_easy_perform(curl);
 +
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +
 +curl_slist_free_all(host);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.21.3. Removal support added in 7.42.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_IPRESOLVE "(3), " CURLOPT_DNS_CACHE_TIMEOUT "(3), " 
CURLOPT_CONNECT_TO "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TIMEVALUE.3
index 65364b72d,000000000..3cd2f02b9
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TIMEVALUE.3
+++ b/docs/libcurl/opts/GNURLOPT_TIMEVALUE.3
@@@ -1,59 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
 +.\" *
 +.\" * This software is licensed as described in the file COPYING, which
 +.\" * you should have received as part of this distribution. The terms
 +.\" * are also available at https://curl.haxx.se/docs/copyright.html.
 +.\" *
 +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +.\" * copies of the Software, and permit persons to whom the Software is
 +.\" * furnished to do so, under the terms of the COPYING file.
 +.\" *
 +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
ANY
 +.\" * KIND, either express or implied.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.TH CURLOPT_TIMEVALUE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TIMEVALUE \- set time value for conditional
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE, long val);
 +.SH DESCRIPTION
 +Pass a long \fIval\fP as parameter. This should be the time counted as seconds
 +since 1 Jan 1970, and the time will be used in a condition as specified with
 +\fICURLOPT_TIMECONDITION(3)\fP.
++
++On systems with 32 bit 'long' variables, this option cannot set dates beyond
++the year 2038. Consider \fICURLOPT_TIMEVALUE_LARGE(3)\fP instead.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +HTTP, FTP, RTSP, and FILE
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* January 1, 2020 is 1577833200 */
 +  curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
 +
 +  /* If-Modified-Since the above time stamp */
 +  curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_TIMECONDITION "(3), "
diff --cc docs/libcurl/opts/Makefile.inc
index e8fb5d80d,2aa1acf33..618eb08f3
--- a/docs/libcurl/opts/Makefile.inc
+++ b/docs/libcurl/opts/Makefile.inc
@@@ -1,323 -1,328 +1,328 @@@
  # Shared between Makefile.am and CMakeLists.txt
  
  man_MANS =                                      \
 -  CURLINFO_ACTIVESOCKET.3                       \
 -  CURLINFO_APPCONNECT_TIME.3                    \
 -  CURLINFO_CERTINFO.3                           \
 -  CURLINFO_CONDITION_UNMET.3                    \
 -  CURLINFO_CONNECT_TIME.3                       \
 -  CURLINFO_CONTENT_LENGTH_DOWNLOAD.3            \
 -  CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3          \
 -  CURLINFO_CONTENT_LENGTH_UPLOAD.3              \
 -  CURLINFO_CONTENT_LENGTH_UPLOAD_T.3            \
 -  CURLINFO_CONTENT_TYPE.3                       \
 -  CURLINFO_COOKIELIST.3                         \
 -  CURLINFO_EFFECTIVE_URL.3                      \
 -  CURLINFO_FILETIME.3                           \
 -  CURLINFO_FILETIME_T.3                         \
 -  CURLINFO_FTP_ENTRY_PATH.3                     \
 -  CURLINFO_HEADER_SIZE.3                        \
 -  CURLINFO_HTTPAUTH_AVAIL.3                     \
 -  CURLINFO_HTTP_CONNECTCODE.3                   \
 -  CURLINFO_HTTP_VERSION.3                       \
 -  CURLINFO_LASTSOCKET.3                         \
 -  CURLINFO_LOCAL_IP.3                           \
 -  CURLINFO_LOCAL_PORT.3                         \
 -  CURLINFO_NAMELOOKUP_TIME.3                    \
 -  CURLINFO_NUM_CONNECTS.3                       \
 -  CURLINFO_OS_ERRNO.3                           \
 -  CURLINFO_PRETRANSFER_TIME.3                   \
 -  CURLINFO_PRIMARY_IP.3                         \
 -  CURLINFO_PRIMARY_PORT.3                       \
 -  CURLINFO_PRIVATE.3                            \
 -  CURLINFO_PROTOCOL.3                           \
 -  CURLINFO_PROXYAUTH_AVAIL.3                    \
 -  CURLINFO_PROXY_SSL_VERIFYRESULT.3             \
 -  CURLINFO_REDIRECT_COUNT.3                     \
 -  CURLINFO_REDIRECT_TIME.3                      \
 -  CURLINFO_REDIRECT_URL.3                       \
 -  CURLINFO_REQUEST_SIZE.3                       \
 -  CURLINFO_RESPONSE_CODE.3                      \
 -  CURLINFO_RTSP_CLIENT_CSEQ.3                   \
 -  CURLINFO_RTSP_CSEQ_RECV.3                     \
 -  CURLINFO_RTSP_SERVER_CSEQ.3                   \
 -  CURLINFO_RTSP_SESSION_ID.3                    \
 -  CURLINFO_SCHEME.3                             \
 -  CURLINFO_SIZE_DOWNLOAD.3                      \
 -  CURLINFO_SIZE_DOWNLOAD_T.3                    \
 -  CURLINFO_SIZE_UPLOAD.3                        \
 -  CURLINFO_SIZE_UPLOAD_T.3                      \
 -  CURLINFO_SPEED_DOWNLOAD.3                     \
 -  CURLINFO_SPEED_DOWNLOAD_T.3                   \
 -  CURLINFO_SPEED_UPLOAD.3                       \
 -  CURLINFO_SPEED_UPLOAD_T.3                     \
 -  CURLINFO_SSL_ENGINES.3                        \
 -  CURLINFO_SSL_VERIFYRESULT.3                   \
 -  CURLINFO_STARTTRANSFER_TIME.3                 \
 -  CURLINFO_TLS_SESSION.3                        \
 -  CURLINFO_TLS_SSL_PTR.3                        \
 -  CURLINFO_TOTAL_TIME.3                         \
 -  CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3          \
 -  CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3        \
 -  CURLMOPT_MAXCONNECTS.3                        \
 -  CURLMOPT_MAX_HOST_CONNECTIONS.3               \
 -  CURLMOPT_MAX_PIPELINE_LENGTH.3                \
 -  CURLMOPT_MAX_TOTAL_CONNECTIONS.3              \
 -  CURLMOPT_PIPELINING.3                         \
 -  CURLMOPT_PIPELINING_SERVER_BL.3               \
 -  CURLMOPT_PIPELINING_SITE_BL.3                 \
 -  CURLMOPT_PUSHDATA.3                           \
 -  CURLMOPT_PUSHFUNCTION.3                       \
 -  CURLMOPT_SOCKETDATA.3                         \
 -  CURLMOPT_SOCKETFUNCTION.3                     \
 -  CURLMOPT_TIMERDATA.3                          \
 -  CURLMOPT_TIMERFUNCTION.3                      \
 -  CURLOPT_ABSTRACT_UNIX_SOCKET.3                \
 -  CURLOPT_ACCEPTTIMEOUT_MS.3                    \
 -  CURLOPT_ACCEPT_ENCODING.3                     \
 -  CURLOPT_ADDRESS_SCOPE.3                       \
 -  CURLOPT_APPEND.3                              \
 -  CURLOPT_AUTOREFERER.3                         \
 -  CURLOPT_BUFFERSIZE.3                          \
 -  CURLOPT_CAINFO.3                              \
 -  CURLOPT_CAPATH.3                              \
 -  CURLOPT_CERTINFO.3                            \
 -  CURLOPT_CHUNK_BGN_FUNCTION.3                  \
 -  CURLOPT_CHUNK_DATA.3                          \
 -  CURLOPT_CHUNK_END_FUNCTION.3                  \
 -  CURLOPT_CLOSESOCKETDATA.3                     \
 -  CURLOPT_CLOSESOCKETFUNCTION.3                 \
 -  CURLOPT_CONNECTTIMEOUT.3                      \
 -  CURLOPT_CONNECTTIMEOUT_MS.3                   \
 -  CURLOPT_CONNECT_ONLY.3                        \
 -  CURLOPT_CONNECT_TO.3                          \
 -  CURLOPT_CONV_FROM_NETWORK_FUNCTION.3          \
 -  CURLOPT_CONV_FROM_UTF8_FUNCTION.3             \
 -  CURLOPT_CONV_TO_NETWORK_FUNCTION.3            \
 -  CURLOPT_COOKIE.3                              \
 -  CURLOPT_COOKIEFILE.3                          \
 -  CURLOPT_COOKIEJAR.3                           \
 -  CURLOPT_COOKIELIST.3                          \
 -  CURLOPT_COOKIESESSION.3                       \
 -  CURLOPT_COPYPOSTFIELDS.3                      \
 -  CURLOPT_CRLF.3                                \
 -  CURLOPT_CRLFILE.3                             \
 -  CURLOPT_CUSTOMREQUEST.3                       \
 -  CURLOPT_DEBUGDATA.3                           \
 -  CURLOPT_DEBUGFUNCTION.3                       \
 -  CURLOPT_DEFAULT_PROTOCOL.3                    \
 -  CURLOPT_DIRLISTONLY.3                         \
 -  CURLOPT_DNS_CACHE_TIMEOUT.3                   \
 -  CURLOPT_DNS_INTERFACE.3                       \
 -  CURLOPT_DNS_LOCAL_IP4.3                       \
 -  CURLOPT_DNS_LOCAL_IP6.3                       \
 -  CURLOPT_DNS_SERVERS.3                         \
 -  CURLOPT_DNS_USE_GLOBAL_CACHE.3                \
 -  CURLOPT_EGDSOCKET.3                           \
 -  CURLOPT_ERRORBUFFER.3                         \
 -  CURLOPT_EXPECT_100_TIMEOUT_MS.3               \
 -  CURLOPT_FAILONERROR.3                         \
 -  CURLOPT_FILETIME.3                            \
 -  CURLOPT_FNMATCH_DATA.3                        \
 -  CURLOPT_FNMATCH_FUNCTION.3                    \
 -  CURLOPT_FOLLOWLOCATION.3                      \
 -  CURLOPT_FORBID_REUSE.3                        \
 -  CURLOPT_FRESH_CONNECT.3                       \
 -  CURLOPT_FTPPORT.3                             \
 -  CURLOPT_FTPSSLAUTH.3                          \
 -  CURLOPT_FTP_ACCOUNT.3                         \
 -  CURLOPT_FTP_ALTERNATIVE_TO_USER.3             \
 -  CURLOPT_FTP_CREATE_MISSING_DIRS.3             \
 -  CURLOPT_FTP_FILEMETHOD.3                      \
 -  CURLOPT_FTP_RESPONSE_TIMEOUT.3                \
 -  CURLOPT_FTP_SKIP_PASV_IP.3                    \
 -  CURLOPT_FTP_SSL_CCC.3                         \
 -  CURLOPT_FTP_USE_EPRT.3                        \
 -  CURLOPT_FTP_USE_EPSV.3                        \
 -  CURLOPT_FTP_USE_PRET.3                        \
 -  CURLOPT_GSSAPI_DELEGATION.3                   \
 -  CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3           \
 -  CURLOPT_HEADER.3                              \
 -  CURLOPT_HEADERDATA.3                          \
 -  CURLOPT_HEADERFUNCTION.3                      \
 -  CURLOPT_HEADEROPT.3                           \
 -  CURLOPT_HTTP200ALIASES.3                      \
 -  CURLOPT_HTTPAUTH.3                            \
 -  CURLOPT_HTTPGET.3                             \
 -  CURLOPT_HTTPHEADER.3                          \
 -  CURLOPT_HTTPPOST.3                            \
 -  CURLOPT_HTTPPROXYTUNNEL.3                     \
 -  CURLOPT_HTTP_CONTENT_DECODING.3               \
 -  CURLOPT_HTTP_TRANSFER_DECODING.3              \
 -  CURLOPT_HTTP_VERSION.3                        \
 -  CURLOPT_IGNORE_CONTENT_LENGTH.3               \
 -  CURLOPT_INFILESIZE.3                          \
 -  CURLOPT_INFILESIZE_LARGE.3                    \
 -  CURLOPT_INTERFACE.3                           \
 -  CURLOPT_INTERLEAVEDATA.3                      \
 -  CURLOPT_INTERLEAVEFUNCTION.3                  \
 -  CURLOPT_IOCTLDATA.3                           \
 -  CURLOPT_IOCTLFUNCTION.3                       \
 -  CURLOPT_IPRESOLVE.3                           \
 -  CURLOPT_ISSUERCERT.3                          \
 -  CURLOPT_KEEP_SENDING_ON_ERROR.3               \
 -  CURLOPT_KEYPASSWD.3                           \
 -  CURLOPT_KRBLEVEL.3                            \
 -  CURLOPT_LOCALPORT.3                           \
 -  CURLOPT_LOCALPORTRANGE.3                      \
 -  CURLOPT_LOGIN_OPTIONS.3                       \
 -  CURLOPT_LOW_SPEED_LIMIT.3                     \
 -  CURLOPT_LOW_SPEED_TIME.3                      \
 -  CURLOPT_MAIL_AUTH.3                           \
 -  CURLOPT_MAIL_FROM.3                           \
 -  CURLOPT_MAIL_RCPT.3                           \
 -  CURLOPT_MAXCONNECTS.3                         \
 -  CURLOPT_MAXFILESIZE.3                         \
 -  CURLOPT_MAXFILESIZE_LARGE.3                   \
 -  CURLOPT_MAXREDIRS.3                           \
 -  CURLOPT_MAX_RECV_SPEED_LARGE.3                \
 -  CURLOPT_MAX_SEND_SPEED_LARGE.3                \
 -  CURLOPT_MIMEPOST.3                            \
 -  CURLOPT_NETRC.3                               \
 -  CURLOPT_NETRC_FILE.3                          \
 -  CURLOPT_NEW_DIRECTORY_PERMS.3                 \
 -  CURLOPT_NEW_FILE_PERMS.3                      \
 -  CURLOPT_NOBODY.3                              \
 -  CURLOPT_NOPROGRESS.3                          \
 -  CURLOPT_NOPROXY.3                             \
 -  CURLOPT_NOSIGNAL.3                            \
 -  CURLOPT_OPENSOCKETDATA.3                      \
 -  CURLOPT_OPENSOCKETFUNCTION.3                  \
 -  CURLOPT_PASSWORD.3                            \
 -  CURLOPT_PATH_AS_IS.3                          \
 -  CURLOPT_PINNEDPUBLICKEY.3                     \
 -  CURLOPT_PIPEWAIT.3                            \
 -  CURLOPT_PORT.3                                \
 -  CURLOPT_POST.3                                \
 -  CURLOPT_POSTFIELDS.3                          \
 -  CURLOPT_POSTFIELDSIZE.3                       \
 -  CURLOPT_POSTFIELDSIZE_LARGE.3                 \
 -  CURLOPT_POSTQUOTE.3                           \
 -  CURLOPT_POSTREDIR.3                           \
 -  CURLOPT_PREQUOTE.3                            \
 -  CURLOPT_PRE_PROXY.3                           \
 -  CURLOPT_PRIVATE.3                             \
 -  CURLOPT_PROGRESSDATA.3                        \
 -  CURLOPT_PROGRESSFUNCTION.3                    \
 -  CURLOPT_PROTOCOLS.3                           \
 -  CURLOPT_PROXY.3                               \
 -  CURLOPT_PROXYAUTH.3                           \
 -  CURLOPT_PROXYHEADER.3                         \
 -  CURLOPT_PROXYPASSWORD.3                       \
 -  CURLOPT_PROXYPORT.3                           \
 -  CURLOPT_PROXYTYPE.3                           \
 -  CURLOPT_PROXYUSERNAME.3                       \
 -  CURLOPT_PROXYUSERPWD.3                        \
 -  CURLOPT_PROXY_CAINFO.3                        \
 -  CURLOPT_PROXY_CAPATH.3                        \
 -  CURLOPT_PROXY_CRLFILE.3                       \
 -  CURLOPT_PROXY_KEYPASSWD.3                     \
 -  CURLOPT_PROXY_PINNEDPUBLICKEY.3               \
 -  CURLOPT_PROXY_SERVICE_NAME.3                  \
 -  CURLOPT_PROXY_SSLCERT.3                       \
 -  CURLOPT_PROXY_SSLCERTTYPE.3                   \
 -  CURLOPT_PROXY_SSLKEY.3                        \
 -  CURLOPT_PROXY_SSLKEYTYPE.3                    \
 -  CURLOPT_PROXY_SSLVERSION.3                    \
 -  CURLOPT_PROXY_SSL_CIPHER_LIST.3               \
 -  CURLOPT_PROXY_SSL_OPTIONS.3                   \
 -  CURLOPT_PROXY_SSL_VERIFYHOST.3                \
 -  CURLOPT_PROXY_SSL_VERIFYPEER.3                \
 -  CURLOPT_PROXY_TLSAUTH_PASSWORD.3              \
 -  CURLOPT_PROXY_TLSAUTH_TYPE.3                  \
 -  CURLOPT_PROXY_TLSAUTH_USERNAME.3              \
 -  CURLOPT_PROXY_TRANSFER_MODE.3                 \
 -  CURLOPT_PUT.3                                 \
 -  CURLOPT_QUOTE.3                               \
 -  CURLOPT_RANDOM_FILE.3                         \
 -  CURLOPT_RANGE.3                               \
 -  CURLOPT_READDATA.3                            \
 -  CURLOPT_READFUNCTION.3                        \
 -  CURLOPT_REDIR_PROTOCOLS.3                     \
 -  CURLOPT_REFERER.3                             \
 -  CURLOPT_REQUEST_TARGET.3                      \
 -  CURLOPT_RESOLVE.3                             \
 -  CURLOPT_RESOLVER_START_DATA.3                 \
 -  CURLOPT_RESOLVER_START_FUNCTION.3             \
 -  CURLOPT_RESUME_FROM.3                         \
 -  CURLOPT_RESUME_FROM_LARGE.3                   \
 -  CURLOPT_RTSP_CLIENT_CSEQ.3                    \
 -  CURLOPT_RTSP_REQUEST.3                        \
 -  CURLOPT_RTSP_SERVER_CSEQ.3                    \
 -  CURLOPT_RTSP_SESSION_ID.3                     \
 -  CURLOPT_RTSP_STREAM_URI.3                     \
 -  CURLOPT_RTSP_TRANSPORT.3                      \
 -  CURLOPT_SASL_IR.3                             \
 -  CURLOPT_SEEKDATA.3                            \
 -  CURLOPT_SEEKFUNCTION.3                        \
 -  CURLOPT_SERVICE_NAME.3                        \
 -  CURLOPT_SHARE.3                               \
 -  CURLOPT_SOCKOPTDATA.3                         \
 -  CURLOPT_SOCKOPTFUNCTION.3                     \
 -  CURLOPT_SOCKS5_AUTH.3                         \
 -  CURLOPT_SOCKS5_GSSAPI_NEC.3                   \
 -  CURLOPT_SOCKS5_GSSAPI_SERVICE.3               \
 -  CURLOPT_SSH_AUTH_TYPES.3                      \
 -  CURLOPT_SSH_COMPRESSION.3                     \
 -  CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3             \
 -  CURLOPT_SSH_KEYDATA.3                         \
 -  CURLOPT_SSH_KEYFUNCTION.3                     \
 -  CURLOPT_SSH_KNOWNHOSTS.3                      \
 -  CURLOPT_SSH_PRIVATE_KEYFILE.3                 \
 -  CURLOPT_SSH_PUBLIC_KEYFILE.3                  \
 -  CURLOPT_SSLCERT.3                             \
 -  CURLOPT_SSLCERTTYPE.3                         \
 -  CURLOPT_SSLENGINE.3                           \
 -  CURLOPT_SSLENGINE_DEFAULT.3                   \
 -  CURLOPT_SSLKEY.3                              \
 -  CURLOPT_SSLKEYTYPE.3                          \
 -  CURLOPT_SSLVERSION.3                          \
 -  CURLOPT_SSL_CIPHER_LIST.3                     \
 -  CURLOPT_SSL_CTX_DATA.3                        \
 -  CURLOPT_SSL_CTX_FUNCTION.3                    \
 -  CURLOPT_SSL_ENABLE_ALPN.3                     \
 -  CURLOPT_SSL_ENABLE_NPN.3                      \
 -  CURLOPT_SSL_FALSESTART.3                      \
 -  CURLOPT_SSL_OPTIONS.3                         \
 -  CURLOPT_SSL_SESSIONID_CACHE.3                 \
 -  CURLOPT_SSL_VERIFYHOST.3                      \
 -  CURLOPT_SSL_VERIFYPEER.3                      \
 -  CURLOPT_SSL_VERIFYSTATUS.3                    \
 -  CURLOPT_STDERR.3                              \
 -  CURLOPT_STREAM_DEPENDS.3                      \
 -  CURLOPT_STREAM_DEPENDS_E.3                    \
 -  CURLOPT_STREAM_WEIGHT.3                       \
 -  CURLOPT_SUPPRESS_CONNECT_HEADERS.3            \
 -  CURLOPT_TCP_FASTOPEN.3                        \
 -  CURLOPT_TCP_KEEPALIVE.3                       \
 -  CURLOPT_TCP_KEEPIDLE.3                        \
 -  CURLOPT_TCP_KEEPINTVL.3                       \
 -  CURLOPT_TCP_NODELAY.3                         \
 -  CURLOPT_TELNETOPTIONS.3                       \
 -  CURLOPT_TFTP_BLKSIZE.3                        \
 -  CURLOPT_TFTP_NO_OPTIONS.3                     \
 -  CURLOPT_TIMECONDITION.3                       \
 -  CURLOPT_TIMEOUT.3                             \
 -  CURLOPT_TIMEOUT_MS.3                          \
 -  CURLOPT_TIMEVALUE.3                           \
 -  CURLOPT_TIMEVALUE_LARGE.3                     \
 -  CURLOPT_TLSAUTH_PASSWORD.3                    \
 -  CURLOPT_TLSAUTH_TYPE.3                        \
 -  CURLOPT_TLSAUTH_USERNAME.3                    \
 -  CURLOPT_TRANSFERTEXT.3                        \
 -  CURLOPT_TRANSFER_ENCODING.3                   \
 -  CURLOPT_UNIX_SOCKET_PATH.3                    \
 -  CURLOPT_UNRESTRICTED_AUTH.3                   \
 -  CURLOPT_UPLOAD.3                              \
 -  CURLOPT_URL.3                                 \
 -  CURLOPT_USERAGENT.3                           \
 -  CURLOPT_USERNAME.3                            \
 -  CURLOPT_USERPWD.3                             \
 -  CURLOPT_USE_SSL.3                             \
 -  CURLOPT_VERBOSE.3                             \
 -  CURLOPT_WILDCARDMATCH.3                       \
 -  CURLOPT_WRITEDATA.3                           \
 -  CURLOPT_WRITEFUNCTION.3                       \
 -  CURLOPT_XFERINFODATA.3                        \
 -  CURLOPT_XFERINFOFUNCTION.3                    \
 -  CURLOPT_XOAUTH2_BEARER.3
 +  GNURLINFO_ACTIVESOCKET.3                       \
 +  GNURLINFO_APPCONNECT_TIME.3                    \
 +  GNURLINFO_CERTINFO.3                           \
 +  GNURLINFO_CONDITION_UNMET.3                    \
 +  GNURLINFO_CONNECT_TIME.3                       \
 +  GNURLINFO_CONTENT_LENGTH_DOWNLOAD.3            \
 +  GNURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3          \
 +  GNURLINFO_CONTENT_LENGTH_UPLOAD.3              \
 +  GNURLINFO_CONTENT_LENGTH_UPLOAD_T.3            \
 +  GNURLINFO_CONTENT_TYPE.3                       \
 +  GNURLINFO_COOKIELIST.3                         \
 +  GNURLINFO_EFFECTIVE_URL.3                      \
 +  GNURLINFO_FILETIME.3                           \
++  GNURLINFO_FILETIME_T.3                         \
 +  GNURLINFO_FTP_ENTRY_PATH.3                     \
 +  GNURLINFO_HEADER_SIZE.3                        \
 +  GNURLINFO_HTTPAUTH_AVAIL.3                     \
 +  GNURLINFO_HTTP_CONNECTCODE.3                   \
 +  GNURLINFO_HTTP_VERSION.3                       \
 +  GNURLINFO_LASTSOCKET.3                         \
 +  GNURLINFO_LOCAL_IP.3                           \
 +  GNURLINFO_LOCAL_PORT.3                         \
 +  GNURLINFO_NAMELOOKUP_TIME.3                    \
 +  GNURLINFO_NUM_CONNECTS.3                       \
 +  GNURLINFO_OS_ERRNO.3                           \
 +  GNURLINFO_PRETRANSFER_TIME.3                   \
 +  GNURLINFO_PRIMARY_IP.3                         \
 +  GNURLINFO_PRIMARY_PORT.3                       \
 +  GNURLINFO_PRIVATE.3                            \
 +  GNURLINFO_PROTOCOL.3                           \
 +  GNURLINFO_PROXYAUTH_AVAIL.3                    \
 +  GNURLINFO_PROXY_SSL_VERIFYRESULT.3             \
 +  GNURLINFO_REDIRECT_COUNT.3                     \
 +  GNURLINFO_REDIRECT_TIME.3                      \
 +  GNURLINFO_REDIRECT_URL.3                       \
 +  GNURLINFO_REQUEST_SIZE.3                       \
 +  GNURLINFO_RESPONSE_CODE.3                      \
 +  GNURLINFO_RTSP_CLIENT_CSEQ.3                   \
 +  GNURLINFO_RTSP_CSEQ_RECV.3                     \
 +  GNURLINFO_RTSP_SERVER_CSEQ.3                   \
 +  GNURLINFO_RTSP_SESSION_ID.3                    \
 +  GNURLINFO_SCHEME.3                             \
 +  GNURLINFO_SIZE_DOWNLOAD.3                      \
 +  GNURLINFO_SIZE_DOWNLOAD_T.3                    \
 +  GNURLINFO_SIZE_UPLOAD.3                        \
 +  GNURLINFO_SIZE_UPLOAD_T.3                      \
 +  GNURLINFO_SPEED_DOWNLOAD.3                     \
 +  GNURLINFO_SPEED_DOWNLOAD_T.3                   \
 +  GNURLINFO_SPEED_UPLOAD.3                       \
 +  GNURLINFO_SPEED_UPLOAD_T.3                     \
 +  GNURLINFO_SSL_ENGINES.3                        \
 +  GNURLINFO_SSL_VERIFYRESULT.3                   \
 +  GNURLINFO_STARTTRANSFER_TIME.3                 \
 +  GNURLINFO_TLS_SESSION.3                        \
 +  GNURLINFO_TLS_SSL_PTR.3                        \
 +  GNURLINFO_TOTAL_TIME.3                         \
 +  GNURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3          \
 +  GNURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3        \
 +  GNURLMOPT_MAXCONNECTS.3                        \
 +  GNURLMOPT_MAX_HOST_CONNECTIONS.3               \
 +  GNURLMOPT_MAX_PIPELINE_LENGTH.3                \
 +  GNURLMOPT_MAX_TOTAL_CONNECTIONS.3              \
 +  GNURLMOPT_PIPELINING.3                         \
 +  GNURLMOPT_PIPELINING_SERVER_BL.3               \
 +  GNURLMOPT_PIPELINING_SITE_BL.3                 \
 +  GNURLMOPT_PUSHDATA.3                           \
 +  GNURLMOPT_PUSHFUNCTION.3                       \
 +  GNURLMOPT_SOCKETDATA.3                         \
 +  GNURLMOPT_SOCKETFUNCTION.3                     \
 +  GNURLMOPT_TIMERDATA.3                          \
 +  GNURLMOPT_TIMERFUNCTION.3                      \
 +  GNURLOPT_ABSTRACT_UNIX_SOCKET.3                \
 +  GNURLOPT_ACCEPTTIMEOUT_MS.3                    \
 +  GNURLOPT_ACCEPT_ENCODING.3                     \
 +  GNURLOPT_ADDRESS_SCOPE.3                       \
 +  GNURLOPT_APPEND.3                              \
 +  GNURLOPT_AUTOREFERER.3                         \
 +  GNURLOPT_BUFFERSIZE.3                          \
 +  GNURLOPT_CAINFO.3                              \
 +  GNURLOPT_CAPATH.3                              \
 +  GNURLOPT_CERTINFO.3                            \
 +  GNURLOPT_CHUNK_BGN_FUNCTION.3                  \
 +  GNURLOPT_CHUNK_DATA.3                          \
 +  GNURLOPT_CHUNK_END_FUNCTION.3                  \
 +  GNURLOPT_CLOSESOCKETDATA.3                     \
 +  GNURLOPT_CLOSESOCKETFUNCTION.3                 \
 +  GNURLOPT_CONNECTTIMEOUT.3                      \
 +  GNURLOPT_CONNECTTIMEOUT_MS.3                   \
 +  GNURLOPT_CONNECT_ONLY.3                        \
 +  GNURLOPT_CONNECT_TO.3                          \
 +  GNURLOPT_CONV_FROM_NETWORK_FUNCTION.3          \
 +  GNURLOPT_CONV_FROM_UTF8_FUNCTION.3             \
 +  GNURLOPT_CONV_TO_NETWORK_FUNCTION.3            \
 +  GNURLOPT_COOKIE.3                              \
 +  GNURLOPT_COOKIEFILE.3                          \
 +  GNURLOPT_COOKIEJAR.3                           \
 +  GNURLOPT_COOKIELIST.3                          \
 +  GNURLOPT_COOKIESESSION.3                       \
 +  GNURLOPT_COPYPOSTFIELDS.3                      \
 +  GNURLOPT_CRLF.3                                \
 +  GNURLOPT_CRLFILE.3                             \
 +  GNURLOPT_CUSTOMREQUEST.3                       \
 +  GNURLOPT_DEBUGDATA.3                           \
 +  GNURLOPT_DEBUGFUNCTION.3                       \
 +  GNURLOPT_DEFAULT_PROTOCOL.3                    \
 +  GNURLOPT_DIRLISTONLY.3                         \
 +  GNURLOPT_DNS_CACHE_TIMEOUT.3                   \
 +  GNURLOPT_DNS_INTERFACE.3                       \
 +  GNURLOPT_DNS_LOCAL_IP4.3                       \
 +  GNURLOPT_DNS_LOCAL_IP6.3                       \
 +  GNURLOPT_DNS_SERVERS.3                         \
 +  GNURLOPT_DNS_USE_GLOBAL_CACHE.3                \
 +  GNURLOPT_EGDSOCKET.3                           \
 +  GNURLOPT_ERRORBUFFER.3                         \
 +  GNURLOPT_EXPECT_100_TIMEOUT_MS.3               \
 +  GNURLOPT_FAILONERROR.3                         \
 +  GNURLOPT_FILETIME.3                            \
 +  GNURLOPT_FNMATCH_DATA.3                        \
 +  GNURLOPT_FNMATCH_FUNCTION.3                    \
 +  GNURLOPT_FOLLOWLOCATION.3                      \
 +  GNURLOPT_FORBID_REUSE.3                        \
 +  GNURLOPT_FRESH_CONNECT.3                       \
 +  GNURLOPT_FTPPORT.3                             \
 +  GNURLOPT_FTPSSLAUTH.3                          \
 +  GNURLOPT_FTP_ACCOUNT.3                         \
 +  GNURLOPT_FTP_ALTERNATIVE_TO_USER.3             \
 +  GNURLOPT_FTP_CREATE_MISSING_DIRS.3             \
 +  GNURLOPT_FTP_FILEMETHOD.3                      \
 +  GNURLOPT_FTP_RESPONSE_TIMEOUT.3                \
 +  GNURLOPT_FTP_SKIP_PASV_IP.3                    \
 +  GNURLOPT_FTP_SSL_CCC.3                         \
 +  GNURLOPT_FTP_USE_EPRT.3                        \
 +  GNURLOPT_FTP_USE_EPSV.3                        \
 +  GNURLOPT_FTP_USE_PRET.3                        \
 +  GNURLOPT_GSSAPI_DELEGATION.3                   \
++  GNURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3           \
 +  GNURLOPT_HEADER.3                              \
 +  GNURLOPT_HEADERDATA.3                          \
 +  GNURLOPT_HEADERFUNCTION.3                      \
 +  GNURLOPT_HEADEROPT.3                           \
 +  GNURLOPT_HTTP200ALIASES.3                      \
 +  GNURLOPT_HTTPAUTH.3                            \
 +  GNURLOPT_HTTPGET.3                             \
 +  GNURLOPT_HTTPHEADER.3                          \
 +  GNURLOPT_HTTPPOST.3                            \
 +  GNURLOPT_HTTPPROXYTUNNEL.3                     \
 +  GNURLOPT_HTTP_CONTENT_DECODING.3               \
 +  GNURLOPT_HTTP_TRANSFER_DECODING.3              \
 +  GNURLOPT_HTTP_VERSION.3                        \
 +  GNURLOPT_IGNORE_CONTENT_LENGTH.3               \
 +  GNURLOPT_INFILESIZE.3                          \
 +  GNURLOPT_INFILESIZE_LARGE.3                    \
 +  GNURLOPT_INTERFACE.3                           \
 +  GNURLOPT_INTERLEAVEDATA.3                      \
 +  GNURLOPT_INTERLEAVEFUNCTION.3                  \
 +  GNURLOPT_IOCTLDATA.3                           \
 +  GNURLOPT_IOCTLFUNCTION.3                       \
 +  GNURLOPT_IPRESOLVE.3                           \
 +  GNURLOPT_ISSUERCERT.3                          \
 +  GNURLOPT_KEEP_SENDING_ON_ERROR.3               \
 +  GNURLOPT_KEYPASSWD.3                           \
 +  GNURLOPT_KRBLEVEL.3                            \
 +  GNURLOPT_LOCALPORT.3                           \
 +  GNURLOPT_LOCALPORTRANGE.3                      \
 +  GNURLOPT_LOGIN_OPTIONS.3                       \
 +  GNURLOPT_LOW_SPEED_LIMIT.3                     \
 +  GNURLOPT_LOW_SPEED_TIME.3                      \
 +  GNURLOPT_MAIL_AUTH.3                           \
 +  GNURLOPT_MAIL_FROM.3                           \
 +  GNURLOPT_MAIL_RCPT.3                           \
 +  GNURLOPT_MAXCONNECTS.3                         \
 +  GNURLOPT_MAXFILESIZE.3                         \
 +  GNURLOPT_MAXFILESIZE_LARGE.3                   \
 +  GNURLOPT_MAXREDIRS.3                           \
 +  GNURLOPT_MAX_RECV_SPEED_LARGE.3                \
 +  GNURLOPT_MAX_SEND_SPEED_LARGE.3                \
 +  GNURLOPT_MIMEPOST.3                            \
 +  GNURLOPT_NETRC.3                               \
 +  GNURLOPT_NETRC_FILE.3                          \
 +  GNURLOPT_NEW_DIRECTORY_PERMS.3                 \
 +  GNURLOPT_NEW_FILE_PERMS.3                      \
 +  GNURLOPT_NOBODY.3                              \
 +  GNURLOPT_NOPROGRESS.3                          \
 +  GNURLOPT_NOPROXY.3                             \
 +  GNURLOPT_NOSIGNAL.3                            \
 +  GNURLOPT_OPENSOCKETDATA.3                      \
 +  GNURLOPT_OPENSOCKETFUNCTION.3                  \
 +  GNURLOPT_PASSWORD.3                            \
 +  GNURLOPT_PATH_AS_IS.3                          \
 +  GNURLOPT_PINNEDPUBLICKEY.3                     \
 +  GNURLOPT_PIPEWAIT.3                            \
 +  GNURLOPT_PORT.3                                \
 +  GNURLOPT_POST.3                                \
 +  GNURLOPT_POSTFIELDS.3                          \
 +  GNURLOPT_POSTFIELDSIZE.3                       \
 +  GNURLOPT_POSTFIELDSIZE_LARGE.3                 \
 +  GNURLOPT_POSTQUOTE.3                           \
 +  GNURLOPT_POSTREDIR.3                           \
 +  GNURLOPT_PREQUOTE.3                            \
 +  GNURLOPT_PRE_PROXY.3                           \
 +  GNURLOPT_PRIVATE.3                             \
 +  GNURLOPT_PROGRESSDATA.3                        \
 +  GNURLOPT_PROGRESSFUNCTION.3                    \
 +  GNURLOPT_PROTOCOLS.3                           \
 +  GNURLOPT_PROXY.3                               \
 +  GNURLOPT_PROXYAUTH.3                           \
 +  GNURLOPT_PROXYHEADER.3                         \
 +  GNURLOPT_PROXYPASSWORD.3                       \
 +  GNURLOPT_PROXYPORT.3                           \
 +  GNURLOPT_PROXYTYPE.3                           \
 +  GNURLOPT_PROXYUSERNAME.3                       \
 +  GNURLOPT_PROXYUSERPWD.3                        \
 +  GNURLOPT_PROXY_CAINFO.3                        \
 +  GNURLOPT_PROXY_CAPATH.3                        \
 +  GNURLOPT_PROXY_CRLFILE.3                       \
 +  GNURLOPT_PROXY_KEYPASSWD.3                     \
 +  GNURLOPT_PROXY_PINNEDPUBLICKEY.3               \
 +  GNURLOPT_PROXY_SERVICE_NAME.3                  \
 +  GNURLOPT_PROXY_SSLCERT.3                       \
 +  GNURLOPT_PROXY_SSLCERTTYPE.3                   \
 +  GNURLOPT_PROXY_SSLKEY.3                        \
 +  GNURLOPT_PROXY_SSLKEYTYPE.3                    \
 +  GNURLOPT_PROXY_SSLVERSION.3                    \
 +  GNURLOPT_PROXY_SSL_CIPHER_LIST.3               \
 +  GNURLOPT_PROXY_SSL_OPTIONS.3                   \
 +  GNURLOPT_PROXY_SSL_VERIFYHOST.3                \
 +  GNURLOPT_PROXY_SSL_VERIFYPEER.3                \
 +  GNURLOPT_PROXY_TLSAUTH_PASSWORD.3              \
 +  GNURLOPT_PROXY_TLSAUTH_TYPE.3                  \
 +  GNURLOPT_PROXY_TLSAUTH_USERNAME.3              \
 +  GNURLOPT_PROXY_TRANSFER_MODE.3                 \
 +  GNURLOPT_PUT.3                                 \
 +  GNURLOPT_QUOTE.3                               \
 +  GNURLOPT_RANDOM_FILE.3                         \
 +  GNURLOPT_RANGE.3                               \
 +  GNURLOPT_READDATA.3                            \
 +  GNURLOPT_READFUNCTION.3                        \
 +  GNURLOPT_REDIR_PROTOCOLS.3                     \
 +  GNURLOPT_REFERER.3                             \
 +  GNURLOPT_REQUEST_TARGET.3                      \
 +  GNURLOPT_RESOLVE.3                             \
++  GNURLOPT_RESOLVER_START_DATA.3                 \
++  GNURLOPT_RESOLVER_START_FUNCTION.3             \
 +  GNURLOPT_RESUME_FROM.3                         \
 +  GNURLOPT_RESUME_FROM_LARGE.3                   \
 +  GNURLOPT_RTSP_CLIENT_CSEQ.3                    \
 +  GNURLOPT_RTSP_REQUEST.3                        \
 +  GNURLOPT_RTSP_SERVER_CSEQ.3                    \
 +  GNURLOPT_RTSP_SESSION_ID.3                     \
 +  GNURLOPT_RTSP_STREAM_URI.3                     \
 +  GNURLOPT_RTSP_TRANSPORT.3                      \
 +  GNURLOPT_SASL_IR.3                             \
 +  GNURLOPT_SEEKDATA.3                            \
 +  GNURLOPT_SEEKFUNCTION.3                        \
 +  GNURLOPT_SERVICE_NAME.3                        \
 +  GNURLOPT_SHARE.3                               \
 +  GNURLOPT_SOCKOPTDATA.3                         \
 +  GNURLOPT_SOCKOPTFUNCTION.3                     \
 +  GNURLOPT_SOCKS5_AUTH.3                         \
 +  GNURLOPT_SOCKS5_GSSAPI_NEC.3                   \
 +  GNURLOPT_SOCKS5_GSSAPI_SERVICE.3               \
 +  GNURLOPT_SSH_AUTH_TYPES.3                      \
 +  GNURLOPT_SSH_COMPRESSION.3                     \
 +  GNURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3             \
 +  GNURLOPT_SSH_KEYDATA.3                         \
 +  GNURLOPT_SSH_KEYFUNCTION.3                     \
 +  GNURLOPT_SSH_KNOWNHOSTS.3                      \
 +  GNURLOPT_SSH_PRIVATE_KEYFILE.3                 \
 +  GNURLOPT_SSH_PUBLIC_KEYFILE.3                  \
 +  GNURLOPT_SSLCERT.3                             \
 +  GNURLOPT_SSLCERTTYPE.3                         \
 +  GNURLOPT_SSLENGINE.3                           \
 +  GNURLOPT_SSLENGINE_DEFAULT.3                   \
 +  GNURLOPT_SSLKEY.3                              \
 +  GNURLOPT_SSLKEYTYPE.3                          \
 +  GNURLOPT_SSLVERSION.3                          \
 +  GNURLOPT_SSL_CIPHER_LIST.3                     \
 +  GNURLOPT_SSL_CTX_DATA.3                        \
 +  GNURLOPT_SSL_CTX_FUNCTION.3                    \
 +  GNURLOPT_SSL_ENABLE_ALPN.3                     \
 +  GNURLOPT_SSL_ENABLE_NPN.3                      \
 +  GNURLOPT_SSL_FALSESTART.3                      \
 +  GNURLOPT_SSL_OPTIONS.3                         \
 +  GNURLOPT_SSL_SESSIONID_CACHE.3                 \
 +  GNURLOPT_SSL_VERIFYHOST.3                      \
 +  GNURLOPT_SSL_VERIFYPEER.3                      \
 +  GNURLOPT_SSL_VERIFYSTATUS.3                    \
 +  GNURLOPT_STDERR.3                              \
 +  GNURLOPT_STREAM_DEPENDS.3                      \
 +  GNURLOPT_STREAM_DEPENDS_E.3                    \
 +  GNURLOPT_STREAM_WEIGHT.3                       \
 +  GNURLOPT_SUPPRESS_CONNECT_HEADERS.3            \
 +  GNURLOPT_TCP_FASTOPEN.3                        \
 +  GNURLOPT_TCP_KEEPALIVE.3                       \
 +  GNURLOPT_TCP_KEEPIDLE.3                        \
 +  GNURLOPT_TCP_KEEPINTVL.3                       \
 +  GNURLOPT_TCP_NODELAY.3                         \
 +  GNURLOPT_TELNETOPTIONS.3                       \
 +  GNURLOPT_TFTP_BLKSIZE.3                        \
 +  GNURLOPT_TFTP_NO_OPTIONS.3                     \
 +  GNURLOPT_TIMECONDITION.3                       \
 +  GNURLOPT_TIMEOUT.3                             \
 +  GNURLOPT_TIMEOUT_MS.3                          \
 +  GNURLOPT_TIMEVALUE.3                           \
++  GNURLOPT_TIMEVALUE_LARGE.3                     \
 +  GNURLOPT_TLSAUTH_PASSWORD.3                    \
 +  GNURLOPT_TLSAUTH_TYPE.3                        \
 +  GNURLOPT_TLSAUTH_USERNAME.3                    \
 +  GNURLOPT_TRANSFERTEXT.3                        \
 +  GNURLOPT_TRANSFER_ENCODING.3                   \
 +  GNURLOPT_UNIX_SOCKET_PATH.3                    \
 +  GNURLOPT_UNRESTRICTED_AUTH.3                   \
 +  GNURLOPT_UPLOAD.3                              \
 +  GNURLOPT_URL.3                                 \
 +  GNURLOPT_USERAGENT.3                           \
 +  GNURLOPT_USERNAME.3                            \
 +  GNURLOPT_USERPWD.3                             \
 +  GNURLOPT_USE_SSL.3                             \
 +  GNURLOPT_VERBOSE.3                             \
 +  GNURLOPT_WILDCARDMATCH.3                       \
 +  GNURLOPT_WRITEDATA.3                           \
 +  GNURLOPT_WRITEFUNCTION.3                       \
 +  GNURLOPT_XFERINFODATA.3                        \
 +  GNURLOPT_XFERINFOFUNCTION.3                    \
 +  GNURLOPT_XOAUTH2_BEARER.3
diff --cc include/gnurl/multi.h
index 55efae0be,000000000..eab23c08e
mode 100644,000000..100644
--- a/include/gnurl/multi.h
+++ b/include/gnurl/multi.h
@@@ -1,439 -1,0 +1,441 @@@
 +#ifndef __CURL_MULTI_H
 +#define __CURL_MULTI_H
 +/***************************************************************************
 + *                                  _   _ ____  _
 + *  Project                     ___| | | |  _ \| |
 + *                             / __| | | | |_) | |
 + *                            | (__| |_| |  _ <| |___
 + *                             \___|\___/|_| \_\_____|
 + *
 + * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
 + *
 + * This software is licensed as described in the file COPYING, which
 + * you should have received as part of this distribution. The terms
 + * are also available at https://curl.haxx.se/docs/copyright.html.
 + *
 + * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 + * copies of the Software, and permit persons to whom the Software is
 + * furnished to do so, under the terms of the COPYING file.
 + *
 + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 + * KIND, either express or implied.
 + *
 + ***************************************************************************/
 +/*
 +  This is an "external" header file. Don't give away any internals here!
 +
 +  GOALS
 +
 +  o Enable a "pull" interface. The application that uses libcurl decides where
 +    and when to ask libcurl to get/send data.
 +
 +  o Enable multiple simultaneous transfers in the same thread without making 
it
 +    complicated for the application.
 +
 +  o Enable the application to select() on its own file descriptors and curl's
 +    file descriptors simultaneous easily.
 +
 +*/
 +
 +/*
 + * This header file should not really need to include "curl.h" since curl.h
 + * itself includes this file and we expect user applications to do #include
 + * <gnurl/curl.h> without the need for especially including multi.h.
 + *
 + * For some reason we added this include here at one point, and rather than to
 + * break existing (wrongly written) libcurl applications, we leave it as-is
 + * but with this warning attached.
 + */
 +#include "curl.h"
 +
 +#ifdef  __cplusplus
 +extern "C" {
 +#endif
 +
 +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER)
 +typedef struct Curl_multi CURLM;
 +#else
 +typedef void CURLM;
 +#endif
 +
 +typedef enum {
 +  CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or
 +                                    curl_multi_socket*() soon */
 +  CURLM_OK,
 +  CURLM_BAD_HANDLE,      /* the passed-in handle is not a valid CURLM handle 
*/
 +  CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */
 +  CURLM_OUT_OF_MEMORY,   /* if you ever get this, you're in deep sh*t */
 +  CURLM_INTERNAL_ERROR,  /* this is a libcurl bug */
 +  CURLM_BAD_SOCKET,      /* the passed in socket argument did not match */
 +  CURLM_UNKNOWN_OPTION,  /* curl_multi_setopt() with unsupported option */
 +  CURLM_ADDED_ALREADY,   /* an easy handle already added to a multi handle was
 +                            attempted to get added - again */
++  CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a
++                               callback */
 +  CURLM_LAST
 +} CURLMcode;
 +
 +/* just to make code nicer when using curl_multi_socket() you can now check
 +   for CURLM_CALL_MULTI_SOCKET too in the same style it works for
 +   curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
 +#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
 +
 +/* bitmask bits for CURLMOPT_PIPELINING */
 +#define CURLPIPE_NOTHING   0L
 +#define CURLPIPE_HTTP1     1L
 +#define CURLPIPE_MULTIPLEX 2L
 +
 +typedef enum {
 +  CURLMSG_NONE, /* first, not used */
 +  CURLMSG_DONE, /* This easy handle has completed. 'result' contains
 +                   the CURLcode of the transfer */
 +  CURLMSG_LAST /* last, not used */
 +} CURLMSG;
 +
 +struct CURLMsg {
 +  CURLMSG msg;       /* what this message means */
 +  CURL *easy_handle; /* the handle it concerns */
 +  union {
 +    void *whatever;    /* message-specific data */
 +    CURLcode result;   /* return code for transfer */
 +  } data;
 +};
 +typedef struct CURLMsg CURLMsg;
 +
 +/* Based on poll(2) structure and values.
 + * We don't use pollfd and POLL* constants explicitly
 + * to cover platforms without poll(). */
 +#define CURL_WAIT_POLLIN    0x0001
 +#define CURL_WAIT_POLLPRI   0x0002
 +#define CURL_WAIT_POLLOUT   0x0004
 +
 +struct curl_waitfd {
 +  curl_socket_t fd;
 +  short events;
 +  short revents; /* not supported yet */
 +};
 +
 +/*
 + * Name:    curl_multi_init()
 + *
 + * Desc:    inititalize multi-style curl usage
 + *
 + * Returns: a new CURLM handle to use in all 'curl_multi' functions.
 + */
 +CURL_EXTERN CURLM *curl_multi_init(void);
 +
 +/*
 + * Name:    curl_multi_add_handle()
 + *
 + * Desc:    add a standard curl handle to the multi stack
 + *
 + * Returns: CURLMcode type, general multi error code.
 + */
 +CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle,
 +                                            CURL *curl_handle);
 +
 + /*
 +  * Name:    curl_multi_remove_handle()
 +  *
 +  * Desc:    removes a curl handle from the multi stack again
 +  *
 +  * Returns: CURLMcode type, general multi error code.
 +  */
 +CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
 +                                               CURL *curl_handle);
 +
 + /*
 +  * Name:    curl_multi_fdset()
 +  *
 +  * Desc:    Ask curl for its fd_set sets. The app can use these to select() 
or
 +  *          poll() on. We want curl_multi_perform() called as soon as one of
 +  *          them are ready.
 +  *
 +  * Returns: CURLMcode type, general multi error code.
 +  */
 +CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle,
 +                                       fd_set *read_fd_set,
 +                                       fd_set *write_fd_set,
 +                                       fd_set *exc_fd_set,
 +                                       int *max_fd);
 +
 +/*
 + * Name:     curl_multi_wait()
 + *
 + * Desc:     Poll on all fds within a CURLM set as well as any
 + *           additional fds passed to the function.
 + *
 + * Returns:  CURLMcode type, general multi error code.
 + */
 +CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle,
 +                                      struct curl_waitfd extra_fds[],
 +                                      unsigned int extra_nfds,
 +                                      int timeout_ms,
 +                                      int *ret);
 +
 + /*
 +  * Name:    curl_multi_perform()
 +  *
 +  * Desc:    When the app thinks there's data available for curl it calls this
 +  *          function to read/write whatever there is right now. This returns
 +  *          as soon as the reads and writes are done. This function does not
 +  *          require that there actually is data available for reading or that
 +  *          data can be written, it can be called just in case. It returns
 +  *          the number of handles that still transfer data in the second
 +  *          argument's integer-pointer.
 +  *
 +  * Returns: CURLMcode type, general multi error code. *NOTE* that this only
 +  *          returns errors etc regarding the whole multi stack. There might
-   *          still have occurred problems on invidual transfers even when this
-   *          returns OK.
++  *          still have occurred problems on individual transfers even when
++  *          this returns OK.
 +  */
 +CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle,
 +                                         int *running_handles);
 +
 + /*
 +  * Name:    curl_multi_cleanup()
 +  *
 +  * Desc:    Cleans up and removes a whole multi stack. It does not free or
 +  *          touch any individual easy handles in any way. We need to define
 +  *          in what state those handles will be if this function is called
 +  *          in the middle of a transfer.
 +  *
 +  * Returns: CURLMcode type, general multi error code.
 +  */
 +CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle);
 +
 +/*
 + * Name:    curl_multi_info_read()
 + *
 + * Desc:    Ask the multi handle if there's any messages/informationals from
 + *          the individual transfers. Messages include informationals such as
 + *          error code from the transfer or just the fact that a transfer is
 + *          completed. More details on these should be written down as well.
 + *
 + *          Repeated calls to this function will return a new struct each
 + *          time, until a special "end of msgs" struct is returned as a signal
 + *          that there is no more to get at this point.
 + *
 + *          The data the returned pointer points to will not survive calling
 + *          curl_multi_cleanup().
 + *
 + *          The 'CURLMsg' struct is meant to be very simple and only contain
 + *          very basic information. If more involved information is wanted,
 + *          we will provide the particular "transfer handle" in that struct
 + *          and that should/could/would be used in subsequent
 + *          curl_easy_getinfo() calls (or similar). The point being that we
 + *          must never expose complex structs to applications, as then we'll
 + *          undoubtably get backwards compatibility problems in the future.
 + *
 + * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out
 + *          of structs. It also writes the number of messages left in the
 + *          queue (after this read) in the integer the second argument points
 + *          to.
 + */
 +CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle,
 +                                          int *msgs_in_queue);
 +
 +/*
 + * Name:    curl_multi_strerror()
 + *
 + * Desc:    The curl_multi_strerror function may be used to turn a CURLMcode
 + *          value into the equivalent human readable error string.  This is
 + *          useful for printing meaningful error messages.
 + *
 + * Returns: A pointer to a zero-terminated error message.
 + */
 +CURL_EXTERN const char *curl_multi_strerror(CURLMcode);
 +
 +/*
 + * Name:    curl_multi_socket() and
 + *          curl_multi_socket_all()
 + *
 + * Desc:    An alternative version of curl_multi_perform() that allows the
 + *          application to pass in one of the file descriptors that have been
 + *          detected to have "action" on them and let libcurl perform.
 + *          See man page for details.
 + */
 +#define CURL_POLL_NONE   0
 +#define CURL_POLL_IN     1
 +#define CURL_POLL_OUT    2
 +#define CURL_POLL_INOUT  3
 +#define CURL_POLL_REMOVE 4
 +
 +#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD
 +
 +#define CURL_CSELECT_IN   0x01
 +#define CURL_CSELECT_OUT  0x02
 +#define CURL_CSELECT_ERR  0x04
 +
 +typedef int (*curl_socket_callback)(CURL *easy,      /* easy handle */
 +                                    curl_socket_t s, /* socket */
 +                                    int what,        /* see above */
 +                                    void *userp,     /* private callback
 +                                                        pointer */
 +                                    void *socketp);  /* private socket
 +                                                        pointer */
 +/*
 + * Name:    curl_multi_timer_callback
 + *
 + * Desc:    Called by libcurl whenever the library detects a change in the
 + *          maximum number of milliseconds the app is allowed to wait before
 + *          curl_multi_socket() or curl_multi_perform() must be called
 + *          (to allow libcurl's timed events to take place).
 + *
 + * Returns: The callback should return zero.
 + */
 +typedef int (*curl_multi_timer_callback)(CURLM *multi,    /* multi handle */
 +                                         long timeout_ms, /* see above */
 +                                         void *userp);    /* private callback
 +                                                             pointer */
 +
 +CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
 +                                        int *running_handles);
 +
 +CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle,
 +                                               curl_socket_t s,
 +                                               int ev_bitmask,
 +                                               int *running_handles);
 +
 +CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
 +                                            int *running_handles);
 +
 +#ifndef CURL_ALLOW_OLD_MULTI_SOCKET
 +/* This macro below was added in 7.16.3 to push users who recompile to use
 +   the new curl_multi_socket_action() instead of the old curl_multi_socket()
 +*/
 +#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z)
 +#endif
 +
 +/*
 + * Name:    curl_multi_timeout()
 + *
 + * Desc:    Returns the maximum number of milliseconds the app is allowed to
 + *          wait before curl_multi_socket() or curl_multi_perform() must be
 + *          called (to allow libcurl's timed events to take place).
 + *
 + * Returns: CURLM error code.
 + */
 +CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
 +                                         long *milliseconds);
 +
 +#undef CINIT /* re-using the same name as in curl.h */
 +
 +#ifdef CURL_ISOCPP
 +#define CINIT(name,type,num) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + num
 +#else
 +/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
 +#define LONG          CURLOPTTYPE_LONG
 +#define OBJECTPOINT   CURLOPTTYPE_OBJECTPOINT
 +#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
 +#define OFF_T         CURLOPTTYPE_OFF_T
 +#define CINIT(name,type,number) CURLMOPT_/**/name = type + number
 +#endif
 +
 +typedef enum {
 +  /* This is the socket callback function pointer */
 +  CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1),
 +
 +  /* This is the argument passed to the socket callback */
 +  CINIT(SOCKETDATA, OBJECTPOINT, 2),
 +
 +    /* set to 1 to enable pipelining for this multi handle */
 +  CINIT(PIPELINING, LONG, 3),
 +
 +   /* This is the timer callback function pointer */
 +  CINIT(TIMERFUNCTION, FUNCTIONPOINT, 4),
 +
 +  /* This is the argument passed to the timer callback */
 +  CINIT(TIMERDATA, OBJECTPOINT, 5),
 +
 +  /* maximum number of entries in the connection cache */
 +  CINIT(MAXCONNECTS, LONG, 6),
 +
 +  /* maximum number of (pipelining) connections to one host */
 +  CINIT(MAX_HOST_CONNECTIONS, LONG, 7),
 +
 +  /* maximum number of requests in a pipeline */
 +  CINIT(MAX_PIPELINE_LENGTH, LONG, 8),
 +
 +  /* a connection with a content-length longer than this
 +     will not be considered for pipelining */
 +  CINIT(CONTENT_LENGTH_PENALTY_SIZE, OFF_T, 9),
 +
 +  /* a connection with a chunk length longer than this
 +     will not be considered for pipelining */
 +  CINIT(CHUNK_LENGTH_PENALTY_SIZE, OFF_T, 10),
 +
 +  /* a list of site names(+port) that are blacklisted from
 +     pipelining */
 +  CINIT(PIPELINING_SITE_BL, OBJECTPOINT, 11),
 +
 +  /* a list of server types that are blacklisted from
 +     pipelining */
 +  CINIT(PIPELINING_SERVER_BL, OBJECTPOINT, 12),
 +
 +  /* maximum number of open connections in total */
 +  CINIT(MAX_TOTAL_CONNECTIONS, LONG, 13),
 +
 +   /* This is the server push callback function pointer */
 +  CINIT(PUSHFUNCTION, FUNCTIONPOINT, 14),
 +
 +  /* This is the argument passed to the server push callback */
 +  CINIT(PUSHDATA, OBJECTPOINT, 15),
 +
 +  CURLMOPT_LASTENTRY /* the last unused */
 +} CURLMoption;
 +
 +
 +/*
 + * Name:    curl_multi_setopt()
 + *
 + * Desc:    Sets options for the multi handle.
 + *
 + * Returns: CURLM error code.
 + */
 +CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
 +                                        CURLMoption option, ...);
 +
 +
 +/*
 + * Name:    curl_multi_assign()
 + *
 + * Desc:    This function sets an association in the multi handle between the
 + *          given socket and a private pointer of the application. This is
 + *          (only) useful for curl_multi_socket uses.
 + *
 + * Returns: CURLM error code.
 + */
 +CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
 +                                        curl_socket_t sockfd, void *sockp);
 +
 +
 +/*
 + * Name: curl_push_callback
 + *
 + * Desc: This callback gets called when a new stream is being pushed by the
 + *       server. It approves or denies the new stream.
 + *
 + * Returns: CURL_PUSH_OK or CURL_PUSH_DENY.
 + */
 +#define CURL_PUSH_OK   0
 +#define CURL_PUSH_DENY 1
 +
 +struct curl_pushheaders;  /* forward declaration only */
 +
 +CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h,
 +                                        size_t num);
 +CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h,
 +                                         const char *name);
 +
 +typedef int (*curl_push_callback)(CURL *parent,
 +                                  CURL *easy,
 +                                  size_t num_headers,
 +                                  struct curl_pushheaders *headers,
 +                                  void *userp);
 +
 +#ifdef __cplusplus
 +} /* end of extern "C" */
 +#endif
 +
 +#endif
diff --cc lib/easy.c
index fe033014a,64c647be2..8bf200650
--- a/lib/easy.c
+++ b/lib/easy.c
@@@ -1027,7 -1033,10 +1033,10 @@@ void curl_easy_reset(struct Curl_easy *
   * NOTE: if you have the receiving paused and you call this function to remove
   * the pausing, you may get your write callback called at this point.
   *
 - * Action is a bitmask consisting of CURLPAUSE_* bits in curl/curl.h
 + * Action is a bitmask consisting of CURLPAUSE_* bits in gnurl/curl.h
+  *
+  * NOTE: This is one of few API functions that are allowed to be called from
+  * within a callback.
   */
  CURLcode curl_easy_pause(struct Curl_easy *data, int action)
  {
diff --cc lib/warnless.h
index 5905cb7e3,efd552a60..318c020c2
--- a/lib/warnless.h
+++ b/lib/warnless.h
@@@ -23,9 -23,14 +23,14 @@@
   ***************************************************************************/
  
  #ifdef USE_WINSOCK
 -#include <curl/curl.h> /* for curl_socket_t */
 +#include <gnurl/curl.h> /* for curl_socket_t */
  #endif
  
+ #define CURLX_POINTER_TO_INTEGER_CAST(p) \
+   ((char *)(p) - (char *)NULL)
+ #define CURLX_INTEGER_TO_POINTER_CAST(i) \
+   ((void *)((char *)NULL + (i)))
+ 
  unsigned short curlx_ultous(unsigned long ulnum);
  
  unsigned char curlx_ultouc(unsigned long ulnum);
diff --cc tests/data/Makefile.inc
index 98d03b6b4,97daf00ce..eaf0deb05
--- a/tests/data/Makefile.inc
+++ b/tests/data/Makefile.inc
@@@ -122,11 -125,12 +125,12 @@@ test1104 test1105 test1106 test1107 tes
  test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \
  test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \
  test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \
 -test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \
 +test1136 test1137 test1138                   test1141 test1142 test1143 \
  test1144 test1145 test1146 test1147 test1148 test1149 test1150 test1151 \
- test1152 test1153 \
+ test1152 test1153 test1154 \
  \
  test1160 test1161 test1162 test1163 \
+ test1170 test1171 \
  test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
  test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \
  test1216 test1217 test1218 test1219 \
diff --cc tests/nroff-scan.pl
index 1ab780f56,6121d4c8e..c868dd622
--- a/tests/nroff-scan.pl
+++ b/tests/nroff-scan.pl
@@@ -66,10 -66,10 +66,10 @@@ sub file 
                  print STDERR "error: $f:$line: missing \\fP after $str\n";
                  $errors++;
              }
 -            if($str =~ /((libcurl|curl)([^ ]*))\(3\)/i) {
 +            if($str =~ /((libcurl|gnurl)([^ ]*))\(3\)/i) {
                  my $man = "$1.3";
                  if(!manpresent($man)) {
-                     print STDERR "error: $f:$line: refering to non-existing 
man page $man\n";
+                     print STDERR "error: $f:$line: referring to non-existing 
man page $man\n";
                      $errors++;
                  }
                  if($pre ne "I") {
@@@ -84,10 -84,10 +84,10 @@@
          }
          if($l =~ /^\.BR (.*)/) {
              my $i= $1;
 -            while($i =~ s/((lib|)curl([^ ]*)) *\"\(3\)(,|) *\" *//i ) {
 +            while($i =~ s/((lib|)gnurl([^ ]*)) *\"\(3\)(,|) *\" *//i ) {
                  my $man = "$1.3";
                  if(!manpresent($man)) {
-                     print STDERR "error: $f:$line: refering to non-existing 
man page $man\n";
+                     print STDERR "error: $f:$line: referring to non-existing 
man page $man\n";
                      $errors++;
                  }
              }

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]